diff --git a/.gitignore b/.gitignore index daf3d5c3e9..c94428a8d5 100644 --- a/.gitignore +++ b/.gitignore @@ -31,7 +31,6 @@ Project.xcodeproj/* Watch/Watch.xcodeproj/* AppBundle.xcworkspace/* *.xcworkspace -tools/buck *.xcodeproj !*_Xcode.xcodeproj .idea diff --git a/Config/buck_rule_macros.bzl b/Config/buck_rule_macros.bzl index 5683196e0d..6ec78c36be 100644 --- a/Config/buck_rule_macros.bzl +++ b/Config/buck_rule_macros.bzl @@ -7,7 +7,7 @@ text_section_items = [ "__text", ] -text_section_rename_linker_flags = ["-Wl,-rename_section,__TEXT,%s,__MEXT,%s" % (name, name) for name in text_section_items] + ["-Wl,-segprot,__MEXT,rx,rx"] +text_section_rename_linker_flags = [] #["-Wl,-rename_section,__TEXT,%s,__MEXT,%s" % (name, name) for name in text_section_items] + ["-Wl,-segprot,__MEXT,rx,rx"] section_rename_linker_flags = text_section_rename_linker_flags diff --git a/Config/configs.bzl b/Config/configs.bzl index 75fa2d15c3..b3806e01c1 100644 --- a/Config/configs.bzl +++ b/Config/configs.bzl @@ -298,6 +298,7 @@ def watch_extension_info_plist_substitutions(): "CURRENT_PROJECT_VERSION": "1", "BUILD_NUMBER": get_build_number(), "PRODUCT_BUNDLE_SHORT_VERSION": get_short_version(), + "MinimumOSVersion": "5.0", } return substitutions @@ -312,5 +313,6 @@ def watch_info_plist_substitutions(): "CURRENT_PROJECT_VERSION": "1", "BUILD_NUMBER": get_build_number(), "PRODUCT_BUNDLE_SHORT_VERSION": get_short_version(), + "MinimumOSVersion": "5.0", } return substitutions diff --git a/Makefile b/Makefile index 565b3215a6..86cb7456a9 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ include Utils.makefile BUCK_OPTIONS=\ - --config custom.appVersion="5.12.1" \ + --config custom.appVersion="5.12.2" \ --config custom.developmentCodeSignIdentity="${DEVELOPMENT_CODE_SIGN_IDENTITY}" \ --config custom.distributionCodeSignIdentity="${DISTRIBUTION_CODE_SIGN_IDENTITY}" \ --config custom.developmentTeam="${DEVELOPMENT_TEAM}" \ diff --git a/NotificationContent/Info.plist b/NotificationContent/Info.plist index daaf0f8756..cedf175e70 100644 --- a/NotificationContent/Info.plist +++ b/NotificationContent/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 5.12.1 + $(PRODUCT_BUNDLE_SHORT_VERSION) CFBundleVersion ${BUILD_NUMBER} NSExtension diff --git a/NotificationService/Info.plist b/NotificationService/Info.plist index 4b49528aad..1c6d112207 100644 --- a/NotificationService/Info.plist +++ b/NotificationService/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 5.12.1 + $(PRODUCT_BUNDLE_SHORT_VERSION) CFBundleVersion ${BUILD_NUMBER} NSExtension diff --git a/NotificationService/NotificationService.h b/NotificationService/NotificationService.h index f8e94caf66..c7b6906685 100644 --- a/NotificationService/NotificationService.h +++ b/NotificationService/NotificationService.h @@ -6,7 +6,7 @@ NS_ASSUME_NONNULL_BEGIN @interface NotificationServiceImpl : NSObject -- (instancetype)initWithCountIncomingMessage:(void (^)(NSString *, int64_t, DeviceSpecificEncryptionParameters *, int64_t, int32_t))countIncomingMessage isLocked:(bool (^)(NSString *))isLocked lockedMessageText:(NSString *(^)(NSString *))lockedMessageText; +- (instancetype)initWithSerialDispatch:(void (^)(dispatch_block_t))serialDispatch countIncomingMessage:(void (^)(NSString *, int64_t, DeviceSpecificEncryptionParameters *, int64_t, int32_t))countIncomingMessage isLocked:(bool (^)(NSString *))isLocked lockedMessageText:(NSString *(^)(NSString *))lockedMessageText; - (void)updateUnreadCount:(int32_t)unreadCount; - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler; diff --git a/NotificationService/NotificationService.m b/NotificationService/NotificationService.m index b194d85da2..8d2df09a25 100644 --- a/NotificationService/NotificationService.m +++ b/NotificationService/NotificationService.m @@ -51,6 +51,7 @@ static void reportMemory() { #endif @interface NotificationServiceImpl () { + void (^_serialDispatch)(dispatch_block_t); void (^_countIncomingMessage)(NSString *, int64_t, DeviceSpecificEncryptionParameters *, int64_t, int32_t); NSString * _Nullable _rootPath; @@ -70,13 +71,14 @@ static void reportMemory() { @implementation NotificationServiceImpl -- (instancetype)initWithCountIncomingMessage:(void (^)(NSString *, int64_t, DeviceSpecificEncryptionParameters *, int64_t, int32_t))countIncomingMessage isLocked:(nonnull bool (^)(NSString * _Nonnull))isLocked lockedMessageText:(NSString *(^)(NSString *))lockedMessageText { +- (instancetype)initWithSerialDispatch:(void (^)(dispatch_block_t))serialDispatch countIncomingMessage:(void (^)(NSString *, int64_t, DeviceSpecificEncryptionParameters *, int64_t, int32_t))countIncomingMessage isLocked:(nonnull bool (^)(NSString * _Nonnull))isLocked lockedMessageText:(NSString *(^)(NSString *))lockedMessageText { self = [super init]; if (self != nil) { #if DEBUG reportMemory(); #endif + _serialDispatch = [serialDispatch copy]; _countIncomingMessage = [countIncomingMessage copy]; NSString *appBundleIdentifier = [NSBundle mainBundle].bundleIdentifier; @@ -127,27 +129,32 @@ static void reportMemory() { reportMemory(); #endif - #ifdef __IPHONE_13_0 - if (_baseAppBundleId != nil) { - BGAppRefreshTaskRequest *request = [[BGAppRefreshTaskRequest alloc] initWithIdentifier:[_baseAppBundleId stringByAppendingString:@".refresh"]]; - request.earliestBeginDate = nil; - NSError *error = nil; - [[BGTaskScheduler sharedScheduler] submitTaskRequest:request error:&error]; - if (error != nil) { - NSLog(@"Error: %@", error); - } - } - #endif + NSString *baseAppBundleId = _baseAppBundleId; + void (^contentHandler)(UNNotificationContent *) = [_contentHandler copy]; + UNMutableNotificationContent *bestAttemptContent = _bestAttemptContent; + NSNumber *updatedUnreadCount = updatedUnreadCount; - if (_bestAttemptContent && _contentHandler) { - if (_updatedUnreadCount != nil) { - int32_t unreadCount = (int32_t)[_updatedUnreadCount intValue]; - if (unreadCount > 0) { - _bestAttemptContent.badge = @(unreadCount); + dispatch_async(dispatch_get_main_queue(), ^{ + #ifdef __IPHONE_13_0 + if (baseAppBundleId != nil && false) { + BGAppRefreshTaskRequest *request = [[BGAppRefreshTaskRequest alloc] initWithIdentifier:[baseAppBundleId stringByAppendingString:@".refresh"]]; + request.earliestBeginDate = nil; + NSError *error = nil; + [[BGTaskScheduler sharedScheduler] submitTaskRequest:request error:&error]; + if (error != nil) { + NSLog(@"Error: %@", error); } } - _contentHandler(_bestAttemptContent); - } + #endif + + if (updatedUnreadCount != nil) { + int32_t unreadCount = (int32_t)[updatedUnreadCount intValue]; + if (unreadCount > 0) { + bestAttemptContent.badge = @(unreadCount); + } + } + contentHandler(bestAttemptContent); + }); } - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { @@ -219,13 +226,16 @@ static void reportMemory() { silent = [silentString intValue] != 0; } - NSString *attachmentDataString = decryptedPayload[@"attachb64"]; NSData *attachmentData = nil; id parsedAttachment = nil; - if ([attachmentDataString isKindOfClass:[NSString class]]) { - attachmentData = parseBase64(attachmentDataString); - if (attachmentData != nil) { - parsedAttachment = parseAttachment(attachmentData); + + if (_isLockedValue) { + NSString *attachmentDataString = decryptedPayload[@"attachb64"]; + if ([attachmentDataString isKindOfClass:[NSString class]]) { + attachmentData = parseBase64(attachmentDataString); + if (attachmentData != nil) { + parsedAttachment = parseAttachment(attachmentData); + } } } @@ -317,11 +327,12 @@ static void reportMemory() { } _bestAttemptContent.title = title; if (_isLockedValue) { + _bestAttemptContent.title = @""; _bestAttemptContent.subtitle = @""; if (_lockedMessageTextValue != nil) { _bestAttemptContent.body = _lockedMessageTextValue; } else { - _bestAttemptContent.body = @"You have a new message"; + _bestAttemptContent.body = @"^You have a new message"; } } else { _bestAttemptContent.subtitle = subtitle; @@ -334,44 +345,52 @@ static void reportMemory() { if (_lockedMessageTextValue != nil) { _bestAttemptContent.body = _lockedMessageTextValue; } else { - _bestAttemptContent.body = @"You have a new message"; + _bestAttemptContent.body = @"^You have a new message"; } } else { _bestAttemptContent.body = alert; } } - NSString *threadIdString = aps[@"thread-id"]; - if ([threadIdString isKindOfClass:[NSString class]]) { - _bestAttemptContent.threadIdentifier = threadIdString; + if (_isLockedValue) { + _bestAttemptContent.threadIdentifier = @"locked"; + } else { + NSString *threadIdString = aps[@"thread-id"]; + if ([threadIdString isKindOfClass:[NSString class]]) { + _bestAttemptContent.threadIdentifier = threadIdString; + } } NSString *soundString = aps[@"sound"]; if ([soundString isKindOfClass:[NSString class]]) { _bestAttemptContent.sound = [UNNotificationSound soundNamed:soundString]; } - NSString *categoryString = aps[@"category"]; - if ([categoryString isKindOfClass:[NSString class]]) { - _bestAttemptContent.categoryIdentifier = categoryString; - if (peerId != 0 && messageId != 0 && parsedAttachment != nil && attachmentData != nil) { - userInfo[@"peerId"] = @(peerId); - userInfo[@"messageId.namespace"] = @(0); - userInfo[@"messageId.id"] = @(messageId); - - userInfo[@"media"] = [attachmentData base64EncodedStringWithOptions:0]; - - if (isExpandableMedia) { - if ([categoryString isEqualToString:@"r"]) { - _bestAttemptContent.categoryIdentifier = @"withReplyMedia"; - } else if ([categoryString isEqualToString:@"m"]) { - _bestAttemptContent.categoryIdentifier = @"withMuteMedia"; + if (_isLockedValue) { + _bestAttemptContent.categoryIdentifier = @"locked"; + } else { + NSString *categoryString = aps[@"category"]; + if ([categoryString isKindOfClass:[NSString class]]) { + _bestAttemptContent.categoryIdentifier = categoryString; + if (peerId != 0 && messageId != 0 && parsedAttachment != nil && attachmentData != nil) { + userInfo[@"peerId"] = @(peerId); + userInfo[@"messageId.namespace"] = @(0); + userInfo[@"messageId.id"] = @(messageId); + + userInfo[@"media"] = [attachmentData base64EncodedStringWithOptions:0]; + + if (isExpandableMedia) { + if ([categoryString isEqualToString:@"r"]) { + _bestAttemptContent.categoryIdentifier = @"withReplyMedia"; + } else if ([categoryString isEqualToString:@"m"]) { + _bestAttemptContent.categoryIdentifier = @"withMuteMedia"; + } } } } - } - - if (accountInfos.accounts.count > 1) { - if (_bestAttemptContent.title.length != 0 && account.peerName.length != 0) { - _bestAttemptContent.title = [NSString stringWithFormat:@"%@ → %@", _bestAttemptContent.title, account.peerName]; + + if (accountInfos.accounts.count > 1) { + if (_bestAttemptContent.title.length != 0 && account.peerName.length != 0) { + _bestAttemptContent.title = [NSString stringWithFormat:@"%@ → %@", _bestAttemptContent.title, account.peerName]; + } } } } @@ -402,9 +421,11 @@ static void reportMemory() { } else { BuildConfig *buildConfig = [[BuildConfig alloc] initWithBaseAppBundleId:_baseAppBundleId]; + void (^serialDispatch)(dispatch_block_t) = _serialDispatch; + __weak typeof(self) weakSelf = self; _cancelFetch = fetchImage(buildConfig, accountInfos.proxy, account, inputFileLocation, fileDatacenterId, ^(NSData * _Nullable data) { - dispatch_async(dispatch_get_main_queue(), ^{ + serialDispatch(^{ __strong typeof(weakSelf) strongSelf = weakSelf; if (strongSelf == nil) { return; diff --git a/NotificationService/NotificationService.swift b/NotificationService/NotificationService.swift index 410dc9a59b..b40349579e 100644 --- a/NotificationService/NotificationService.swift +++ b/NotificationService/NotificationService.swift @@ -1,35 +1,52 @@ import Foundation import UserNotifications +import SwiftSignalKit + +private let queue = Queue() @available(iOSApplicationExtension 10.0, *) @objc(NotificationService) final class NotificationService: UNNotificationServiceExtension { - private let impl: NotificationServiceImpl + private let impl: QueueLocalObject override init() { - var completion: ((Int32) -> Void)? - self.impl = NotificationServiceImpl(countIncomingMessage: { rootPath, accountId, encryptionParameters, peerId, messageId in - SyncProviderImpl.addIncomingMessage(withRootPath: rootPath, accountId: accountId, encryptionParameters: encryptionParameters, peerId: peerId, messageId: messageId, completion: { count in - completion?(count) + self.impl = QueueLocalObject(queue: queue, generate: { + var completion: ((Int32) -> Void)? + let impl = NotificationServiceImpl(serialDispatch: { f in + queue.async { + f() + } + }, countIncomingMessage: { rootPath, accountId, encryptionParameters, peerId, messageId in + SyncProviderImpl.addIncomingMessage(queue: queue, withRootPath: rootPath, accountId: accountId, encryptionParameters: encryptionParameters, peerId: peerId, messageId: messageId, completion: { count in + completion?(count) + }) + }, isLocked: { rootPath in + return SyncProviderImpl.isLocked(withRootPath: rootPath) + }, lockedMessageText: { rootPath in + return SyncProviderImpl.lockedMessageText(withRootPath: rootPath) }) - }, isLocked: { rootPath in - return SyncProviderImpl.isLocked(withRootPath: rootPath) - }, lockedMessageText: { rootPath in - return SyncProviderImpl.lockedMessageText(withRootPath: rootPath) + + completion = { [weak impl] count in + queue.async { + impl?.updateUnreadCount(count) + } + } + + return impl }) super.init() - - completion = { [weak self] count in - self?.impl.updateUnreadCount(count) - } } override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { - self.impl.didReceive(request, withContentHandler: contentHandler) + self.impl.with { impl in + impl.didReceive(request, withContentHandler: contentHandler) + } } override func serviceExtensionTimeWillExpire() { - self.impl.serviceExtensionTimeWillExpire() + self.impl.with { impl in + impl.serviceExtensionTimeWillExpire() + } } } diff --git a/NotificationService/Sync.swift b/NotificationService/Sync.swift index 9565046ad6..21a93f439b 100644 --- a/NotificationService/Sync.swift +++ b/NotificationService/Sync.swift @@ -42,17 +42,17 @@ enum SyncProviderImpl { } } - static func addIncomingMessage(withRootPath rootPath: String, accountId: Int64, encryptionParameters: DeviceSpecificEncryptionParameters, peerId: Int64, messageId: Int32, completion: @escaping (Int32) -> Void) { - Queue.mainQueue().async { + static func addIncomingMessage(queue: Queue, withRootPath rootPath: String, accountId: Int64, encryptionParameters: DeviceSpecificEncryptionParameters, peerId: Int64, messageId: Int32, completion: @escaping (Int32) -> Void) { + queue.async { let _ = registeredTypes let sharedBasePath = rootPath + "/accounts-metadata" let basePath = rootPath + "/" + accountRecordIdPathName(accountId) + "/postbox" - let sharedValueBox = SqliteValueBox(basePath: sharedBasePath + "/db", queue: Queue.mainQueue(), logger: ValueBoxLoggerImpl(), encryptionParameters: nil, disableCache: true, upgradeProgress: { _ in + let sharedValueBox = SqliteValueBox(basePath: sharedBasePath + "/db", queue: queue, logger: ValueBoxLoggerImpl(), encryptionParameters: nil, disableCache: true, upgradeProgress: { _ in }) - let valueBox = SqliteValueBox(basePath: basePath + "/db", queue: Queue.mainQueue(), logger: ValueBoxLoggerImpl(), encryptionParameters: ValueBoxEncryptionParameters(forceEncryptionIfNoSet: false, key: ValueBoxEncryptionParameters.Key(data: encryptionParameters.key)!, salt: ValueBoxEncryptionParameters.Salt(data: encryptionParameters.salt)!), disableCache: true, upgradeProgress: { _ in + let valueBox = SqliteValueBox(basePath: basePath + "/db", queue: queue, logger: ValueBoxLoggerImpl(), encryptionParameters: ValueBoxEncryptionParameters(forceEncryptionIfNoSet: false, key: ValueBoxEncryptionParameters.Key(data: encryptionParameters.key)!, salt: ValueBoxEncryptionParameters.Salt(data: encryptionParameters.salt)!), disableCache: true, upgradeProgress: { _ in }) let metadataTable = MessageHistoryMetadataTable(valueBox: valueBox, table: MessageHistoryMetadataTable.tableSpec(10)) diff --git a/Share/ShareRootController.swift b/Share/ShareRootController.swift index cd0fd1e4d2..5dac1a0097 100644 --- a/Share/ShareRootController.swift +++ b/Share/ShareRootController.swift @@ -6,6 +6,16 @@ import BuildConfig class ShareRootController: UIViewController { private var impl: ShareRootControllerImpl? + override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { + super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) + + self.modalPresentationStyle = .fullScreen + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + override func loadView() { super.loadView() diff --git a/SiriIntents/Info.plist b/SiriIntents/Info.plist index fab3ba3bdf..9f90fbbb21 100644 --- a/SiriIntents/Info.plist +++ b/SiriIntents/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 5.12.1 + $(PRODUCT_BUNDLE_SHORT_VERSION) CFBundleVersion ${BUILD_NUMBER} NSExtension diff --git a/SiriIntentsUI/Base.lproj/MainInterface.storyboard b/SiriIntentsUI/Base.lproj/MainInterface.storyboard deleted file mode 100644 index 831ee40359..0000000000 --- a/SiriIntentsUI/Base.lproj/MainInterface.storyboard +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SiriIntentsUI/Info.plist b/SiriIntentsUI/Info.plist deleted file mode 100644 index 2141d9b4bb..0000000000 --- a/SiriIntentsUI/Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - SiriIntentsUI - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - XPC! - CFBundleShortVersionString - 1.0 - CFBundleVersion - 104 - NSExtension - - NSExtensionAttributes - - IntentsSupported - - INSendMessageIntent - - - NSExtensionMainStoryboard - MainInterface - NSExtensionPointIdentifier - com.apple.intents-ui-service - - - diff --git a/SiriIntentsUI/IntentViewController.swift b/SiriIntentsUI/IntentViewController.swift deleted file mode 100644 index 9ef77998d7..0000000000 --- a/SiriIntentsUI/IntentViewController.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// IntentViewController.swift -// SiriIntentsUI -// -// Created by Peter on 9/2/16. -// Copyright © 2016 Telegram. All rights reserved. -// - -import IntentsUI - -// As an example, this extension's Info.plist has been configured to handle interactions for INSendMessageIntent. -// You will want to replace this or add other intents as appropriate. -// The intents whose interactions you wish to handle must be declared in the extension's Info.plist. - -// You can test this example integration by saying things to Siri like: -// "Send a message using " - -class IntentViewController: UIViewController, INUIHostedViewControlling { - - override func viewDidLoad() { - super.viewDidLoad() - // Do any additional setup after loading the view. - } - - override func didReceiveMemoryWarning() { - super.didReceiveMemoryWarning() - // Dispose of any resources that can be recreated. - } - - // MARK: - INUIHostedViewControlling - - // Prepare your view controller for the interaction to handle. - func configure(with interaction: INInteraction!, context: INUIHostedViewContext, completion: ((CGSize) -> Void)!) { - // Do configuration here, including preparing views and calculating a desired size for presentation. - - if let completion = completion { - completion(self.desiredSize) - } - } - - var desiredSize: CGSize { - //return self.extensionContext!.hostedViewMaximumAllowedSize - return CGSize() - } - -} diff --git a/SiriIntentsUI/SiriIntentsUI.entitlements b/SiriIntentsUI/SiriIntentsUI.entitlements deleted file mode 100644 index 65f2a19d32..0000000000 --- a/SiriIntentsUI/SiriIntentsUI.entitlements +++ /dev/null @@ -1,10 +0,0 @@ - - - - - com.apple.security.application-groups - - group.org.telegram.Telegram-iOS - - - diff --git a/Telegram-iOS/Info.plist b/Telegram-iOS/Info.plist index b7c26bf6dc..f66daefe49 100644 --- a/Telegram-iOS/Info.plist +++ b/Telegram-iOS/Info.plist @@ -189,7 +189,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 5.12.1 + $(PRODUCT_BUNDLE_SHORT_VERSION) CFBundleSignature ???? CFBundleURLTypes diff --git a/Telegram-iOS/en.lproj/Localizable.strings b/Telegram-iOS/en.lproj/Localizable.strings index 5469d2ece1..0301c0bd41 100644 --- a/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram-iOS/en.lproj/Localizable.strings @@ -4789,7 +4789,7 @@ Any member of this group will be able to see messages in the channel."; "Wallet.Info.Send" = "Send"; "Wallet.Info.RefreshErrorTitle" = "No network"; "Wallet.Info.RefreshErrorText" = "Couldn't refresh balance. Please make sure your internet connection is working and try again."; -"Wallet.Info.RefreshErrorNetworkText" = "The wallet state can not be retrieved at this time. Please try again later."; +"Wallet.Info.RefreshErrorNetworkText" = "Wallet state can not be retrieved at this time. Please try again later."; "Wallet.Info.UnknownTransaction" = "Empty Transaction"; "Wallet.Info.TransactionTo" = "to"; "Wallet.Info.TransactionFrom" = "from"; @@ -4820,7 +4820,7 @@ Any member of this group will be able to see messages in the channel."; "Wallet.Send.Balance" = "Balance: %@"; "Wallet.Send.AmountText" = "Grams to send"; "Wallet.Send.Confirmation" = "Confirmation"; -"Wallet.Send.ConfirmationText" = "Do you want to send **%1$@** Grams to\n%2$@?\n\nFees: ~%3$@ grams"; +"Wallet.Send.ConfirmationText" = "Do you want to send **%1$@** Grams to\n\n%2$@?\n\nBlockchain fees: ~%3$@ grams"; "Wallet.Send.ConfirmationConfirm" = "Confirm"; "Wallet.Send.Send" = "Send"; "Wallet.Send.OwnAddressAlertTitle" = "Warning"; @@ -4828,8 +4828,9 @@ Any member of this group will be able to see messages in the channel."; "Wallet.Send.OwnAddressAlertProceed" = "Proceed"; "Wallet.Send.TransactionInProgress" = "Please wait until the current transaction is completed."; "Wallet.Send.SyncInProgress" = "Please wait while the wallet finishes syncing with the TON Blockchain."; -"Wallet.Settings.Title" = "Wallet Settings"; -"Wallet.Settings.Configuration" = "Configuration"; +"Wallet.Settings.Title" = "Settings"; +"Wallet.Settings.Configuration" = "Server Settings"; +"Wallet.Settings.ConfigurationInfo" = "Advanced Settings"; "Wallet.Settings.BackupWallet" = "Backup Wallet"; "Wallet.Settings.DeleteWallet" = "Delete Wallet"; "Wallet.Settings.DeleteWalletInfo" = "This will disconnect the wallet from this app. You will be able to restore your wallet using 24 secret words – or import another wallet.\n\nGram Wallets are located in the decentralized TON Blockchain. If you want a wallet to be deleted, simply transfer all the grams from it and leave it empty."; @@ -4888,7 +4889,7 @@ Any member of this group will be able to see messages in the channel."; "Wallet.TransactionInfo.OtherFeeInfoUrl" = "Blockchain validators collect a tiny fee for processing your decentralized transactions. [More info]()"; "AppWallet.TransactionInfo.FeeInfoURL" = "https://telegram.org/wallet/fee"; "Wallet.WordCheck.Title" = "Test Time!"; -"Wallet.WordCheck.Text" = "Let’s check that you wrote them down correctly. Please enter words\n**%1$@**, **%2$@** and **%3$@** below:"; +"Wallet.WordCheck.Text" = "Let’s check that you wrote them down correctly. Please enter the words\n**%1$@**, **%2$@** and **%3$@**"; "Wallet.WordCheck.Continue" = "Continue"; "Wallet.WordCheck.IncorrectHeader" = "Incorrect words!"; "Wallet.WordCheck.IncorrectText" = "The secret words you have entered do not match the ones in the list."; @@ -4924,8 +4925,23 @@ Any member of this group will be able to see messages in the channel."; "Conversation.WalletRequiredNotNow" = "Not Now"; "Conversation.WalletRequiredSetup" = "Set Up"; -"Wallet.Configuration.Title" = "Configuration"; +"Wallet.Configuration.Title" = "Server Settings"; "Wallet.Configuration.Apply" = "Save"; +"Wallet.Configuration.SourceHeader" = "SOURCE"; +"Wallet.Configuration.SourceURL" = "URL"; +"Wallet.Configuration.SourceJSON" = "JSON"; +"Wallet.Configuration.SourceInfo" = "Using a different configuration allows you to change Lite Server addresses."; +"Wallet.Configuration.BlockchainIdHeader" = "BLOCKCHAIN ID"; +"Wallet.Configuration.BlockchainIdPlaceholder" = "Blockchain ID"; +"Wallet.Configuration.BlockchainIdInfo" = "This setting is for developers. Change it only if you are working on creating your own TON network."; +"Wallet.Configuration.ApplyErrorTitle" = "Error"; +"Wallet.Configuration.ApplyErrorTextURLInvalid" = "The URL you have entered is invalid. Please try again."; +"Wallet.Configuration.ApplyErrorTextURLUnreachable" = "There was an error while downloading configuration from %@\nPlease try again."; +"Wallet.Configuration.ApplyErrorTextURLInvalidData" = "This blockchain configuration is invalid. Please try again."; +"Wallet.Configuration.ApplyErrorTextJSONInvalidData" = "This blockchain configuration is invalid. Please try again."; +"Wallet.Configuration.BlockchainNameChangedTitle" = "Warning"; +"Wallet.Configuration.BlockchainNameChangedText" = "Are you sure you want to change the blockchain ID? You don't need this unless you're testing your own TON network.\n\nIf you proceed, you will need to reconnect your wallet using 24 secret words."; +"Wallet.Configuration.BlockchainNameChangedProceed" = "Proceed"; "Wallet.CreateInvoice.Title" = "Create Invoice"; @@ -5049,3 +5065,5 @@ Any member of this group will be able to see messages in the channel."; "WebBrowser.InAppSafari" = "In-App Safari"; "Widget.ApplicationLocked" = "Unlock the app to use the widget"; + +"Group.ErrorSupergroupConversionNotPossible" = "Sorry, you are a member of too many groups and channels. Please leave some before creating a new one."; diff --git a/Wallet/BUCK b/Wallet/BUCK index d5b2d2c414..ec39efa1da 100644 --- a/Wallet/BUCK +++ b/Wallet/BUCK @@ -80,13 +80,16 @@ apple_library( ], deps = [ "//submodules/WalletUI:WalletUI", + "//submodules/WalletCore:WalletCore", "//submodules/BuildConfig:BuildConfig", + "//submodules/OverlayStatusController:OverlayStatusController", ] + framework_binary_dependencies(framework_dependencies), frameworks = [ "$SDKROOT/System/Library/Frameworks/Foundation.framework", "$SDKROOT/System/Library/Frameworks/UIKit.framework", "$SDKROOT/System/Library/Frameworks/VideoToolbox.framework", + "$SDKROOT/System/Library/Frameworks/AVFoundation.framework", ], ) diff --git a/Wallet/Info.plist b/Wallet/Info.plist index 4b9bfdcdc4..7646b3381e 100644 --- a/Wallet/Info.plist +++ b/Wallet/Info.plist @@ -53,10 +53,10 @@ NSAllowsArbitraryLoads - NSFaceIDUsageDescription - For better security, please allow TON Wallet to use your Face ID to authenticate payments. NSCameraUsageDescription Please allow TON Wallet access to your camera for scanning QR codes. + NSFaceIDUsageDescription + For better security, please allow TON Wallet to use your Face ID to authenticate payments. NSPhotoLibraryUsageDescription Please allow TON Wallet access to your Photo Stream in case you need to scan a QR code from a picture. UIDeviceFamily @@ -75,7 +75,7 @@ UIRequiresPersistentWiFi UIStatusBarStyle - UIStatusBarStyleDefault + UIStatusBarStyleLightContent UISupportedInterfaceOrientations UIInterfaceOrientationPortrait diff --git a/Wallet/LaunchScreen.xib b/Wallet/LaunchScreen.xib index 630fe8c241..2b96224d6f 100644 --- a/Wallet/LaunchScreen.xib +++ b/Wallet/LaunchScreen.xib @@ -30,6 +30,14 @@ + + + + + + + + @@ -39,4 +47,8 @@ + + + + diff --git a/Wallet/README.md b/Wallet/README.md new file mode 100644 index 0000000000..792e3695d6 --- /dev/null +++ b/Wallet/README.md @@ -0,0 +1,63 @@ +# Test Gram Wallet (iOS) + +This is the source code and build instructions for a TON Testnet Wallet implementation for iOS. + +1. Install Xcode 11.1 +``` +https://apps.apple.com/ae/app/xcode/id497799835?mt=12 +``` + +Make sure to launch Xcode at least once and set up command-line tools paths (Xcode — Preferences — Locations — Command Line Tools) + +2. Install Homebrew + +``` +/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" +``` +3. Install the required tools + +``` +brew tap AdoptOpenJDK/openjdk +brew cask install adoptopenjdk8 +brew install cmake ant +``` + +4. Build Buck + +``` +mkdir -p $HOME/buck_source +cd tools/buck +sh ./prepare_buck_source.sh $HOME/buck_source +``` + +5. Now you can build Wallet application (IPA) + +Note: +It is recommended to use an artifact cache to optimize build speed. Prepend any of the following commands with +``` +BUCK_DIR_CACHE="path/to/existing/directory" +``` + +``` +BUCK="$HOME/buck_source/buck/buck-out/gen/programs/buck.pex" \ + BUILD_NUMBER=30 \ + DISTRIBUTION_CODE_SIGN_IDENTITY="iPhone Distribution: XXXXXXX (XXXXXXXXXX)" \ + DEVELOPMENT_TEAM="XXXXXXXXXX" WALLET_BUNDLE_ID="wallet.bundle.id" \ + WALLET_DISTRIBUTION_PROVISIONING_PROFILE_APP="wallet distribution provisioning profile name" \ + CODESIGNING_SOURCE_DATA_PATH="$HOME/wallet_codesigning" \ + sh Wallet/example_wallet_env.sh make -f Wallet.makefile wallet_app +``` + +6. If needed, generate Xcode project +``` +BUCK="$HOME/buck_source/buck/buck-out/gen/programs/buck.pex" \ + BUILD_NUMBER=30 \ + DEVELOPMENT_CODE_SIGN_IDENTITY="iPhone Developer: XXXXXXX (XXXXXXXXXX)" \ + DISTRIBUTION_CODE_SIGN_IDENTITY="iPhone Distribution: XXXXXXX (XXXXXXXXXX)" \ + DEVELOPMENT_TEAM="XXXXXXXXXX" WALLET_BUNDLE_ID="wallet.bundle.id" \ + WALLET_DEVELOPMENT_PROVISIONING_PROFILE_APP="wallet development provisioning profile name" \ + WALLET_DISTRIBUTION_PROVISIONING_PROFILE_APP="wallet distribution provisioning profile name" \ + CODESIGNING_SOURCE_DATA_PATH="$HOME/wallet_codesigning" \ + sh Wallet/example_wallet_env.sh make -f Wallet.makefile wallet_project +``` + diff --git a/Wallet/Sources/AppDelegate.swift b/Wallet/Sources/AppDelegate.swift index ec44936f4b..ac2c91804b 100644 --- a/Wallet/Sources/AppDelegate.swift +++ b/Wallet/Sources/AppDelegate.swift @@ -1,5 +1,6 @@ import UIKit import Display +import OverlayStatusController import SwiftSignalKit import BuildConfig import WalletUI @@ -334,7 +335,10 @@ private final class WalletStorageInterfaceImpl: WalletStorageInterface { } private final class WalletContextImpl: NSObject, WalletContext, UIImagePickerControllerDelegate, UINavigationControllerDelegate { - let storage: WalletStorageInterface + var storage: WalletStorageInterface { + return self.storageImpl + } + private let storageImpl: WalletStorageInterfaceImpl let tonInstance: TonInstance let keychain: TonKeychain let presentationData: WalletPresentationData @@ -354,6 +358,23 @@ private final class WalletContextImpl: NSObject, WalletContext, UIImagePickerCon return .single(Data()) } + func downloadFile(url: URL) -> Signal { + return download(url: url) + |> mapError { _ in + return .generic + } + } + + func updateResolvedWalletConfiguration(source: LocalWalletConfigurationSource, blockchainName: String, resolvedValue: String) -> Signal { + return self.storageImpl.updateMergedLocalWalletConfiguration { configuration in + var configuration = configuration + configuration.configuration.source = source + configuration.configuration.blockchainName = blockchainName + configuration.resolved = ResolvedLocalWalletConfiguration(source: source, value: resolvedValue) + return configuration + } + } + func presentNativeController(_ controller: UIViewController) { self.window.presentNative(controller) } @@ -417,9 +438,9 @@ private final class WalletContextImpl: NSObject, WalletContext, UIImagePickerCon picker.presentingViewController?.dismiss(animated: true, completion: nil) } - init(basePath: String, storage: WalletStorageInterfaceImpl, config: String, blockchainName: String, navigationBarTheme: NavigationBarTheme, window: Window1) { + init(basePath: String, storage: WalletStorageInterfaceImpl, config: String, blockchainName: String, presentationData: WalletPresentationData, navigationBarTheme: NavigationBarTheme, window: Window1) { let _ = try? FileManager.default.createDirectory(at: URL(fileURLWithPath: basePath + "/keys"), withIntermediateDirectories: true, attributes: nil) - self.storage = storage + self.storageImpl = storage self.window = window @@ -481,8 +502,42 @@ private final class WalletContextImpl: NSObject, WalletContext, UIImagePickerCon } }) #endif + + self.presentationData = presentationData + + super.init() + } +} + +@objc(AppDelegate) +final class AppDelegate: NSObject, UIApplicationDelegate { + var window: UIWindow? + + private var mainWindow: Window1? + private var walletContext: WalletContextImpl? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + let statusBarHost = ApplicationStatusBarHost() + let (window, hostView) = nativeWindowHostView() + let mainWindow = Window1(hostView: hostView, statusBarHost: statusBarHost) + self.mainWindow = mainWindow + hostView.containerView.backgroundColor = UIColor.white + self.window = window + let accentColor = UIColor(rgb: 0x007ee5) - self.presentationData = WalletPresentationData( + + let navigationBarTheme = NavigationBarTheme( + buttonColor: accentColor, + disabledButtonColor: UIColor(rgb: 0xd0d0d0), + primaryTextColor: .black, + backgroundColor: UIColor(rgb: 0xf7f7f7), + separatorColor: UIColor(rgb: 0xb1b1b1), + badgeBackgroundColor: UIColor(rgb: 0xff3b30), + badgeStrokeColor: UIColor(rgb: 0xff3b30), + badgeTextColor: .white + ) + + let presentationData = WalletPresentationData( theme: WalletTheme( info: WalletInfoTheme( buttonBackgroundColor: accentColor, @@ -566,37 +621,6 @@ private final class WalletContextImpl: NSObject, WalletContext, UIImagePickerCon ) ) - super.init() - } -} - -@objc(AppDelegate) -final class AppDelegate: NSObject, UIApplicationDelegate { - var window: UIWindow? - - private var mainWindow: Window1? - private var walletContext: WalletContextImpl? - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { - let statusBarHost = ApplicationStatusBarHost() - let (window, hostView) = nativeWindowHostView() - let mainWindow = Window1(hostView: hostView, statusBarHost: statusBarHost) - self.mainWindow = mainWindow - hostView.containerView.backgroundColor = UIColor.white - self.window = window - - let accentColor = UIColor(rgb: 0x007ee5) - let navigationBarTheme = NavigationBarTheme( - buttonColor: accentColor, - disabledButtonColor: UIColor(rgb: 0xd0d0d0), - primaryTextColor: .black, - backgroundColor: UIColor(rgb: 0xf7f7f7), - separatorColor: UIColor(rgb: 0xb1b1b1), - badgeBackgroundColor: UIColor(rgb: 0xff3b30), - badgeStrokeColor: UIColor(rgb: 0xff3b30), - badgeTextColor: .white - ) - let navigationController = NavigationController( mode: .single, theme: NavigationControllerTheme( @@ -608,6 +632,8 @@ final class AppDelegate: NSObject, UIApplicationDelegate { mainWindow.viewController = navigationController + navigationController.setViewControllers([WalletApplicationSplashScreen(theme: presentationData.theme)], animated: false) + self.window?.makeKeyAndVisible() let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] @@ -634,7 +660,7 @@ final class AppDelegate: NSObject, UIApplicationDelegate { guard let parsedUrl = URL(string: url) else { return .complete() } - return downloadFile(url: parsedUrl) + return download(url: parsedUrl) |> retry(1.0, maxDelay: 5.0, onQueue: .mainQueue()) |> mapToSignal { data -> Signal<(ResolvedLocalWalletConfiguration, String), NoError> in if let string = String(data: data, encoding: .utf8) { @@ -666,13 +692,38 @@ final class AppDelegate: NSObject, UIApplicationDelegate { let _ = (resolvedInitialConfig |> deliverOnMainQueue).start(next: { (initialResolvedConfig, initialConfigBlockchainName) in - let walletContext = WalletContextImpl(basePath: documentsPath, storage: storage, config: initialResolvedConfig.value, blockchainName: initialConfigBlockchainName, navigationBarTheme: navigationBarTheme, window: mainWindow) + let walletContext = WalletContextImpl(basePath: documentsPath, storage: storage, config: initialResolvedConfig.value, blockchainName: initialConfigBlockchainName, presentationData: presentationData, navigationBarTheme: navigationBarTheme, window: mainWindow) self.walletContext = walletContext - let _ = (updatedConfigValue - |> deliverOnMainQueue).start(next: { resolved, blockchainName in - let _ = walletContext.tonInstance.updateConfig(config: resolved.value, blockchainName: blockchainName).start() - }) + let beginWithController: (ViewController) -> Void = { controller in + navigationController.setViewControllers([controller], animated: false) + + var previousBlockchainName = initialConfigBlockchainName + + let _ = (updatedConfigValue + |> deliverOnMainQueue).start(next: { resolved, blockchainName in + let _ = walletContext.tonInstance.validateConfig(config: resolved.value, blockchainName: blockchainName).start(error: { _ in + }, completed: { + let _ = walletContext.tonInstance.updateConfig(config: resolved.value, blockchainName: blockchainName).start() + + if previousBlockchainName != blockchainName { + previousBlockchainName = blockchainName + + let overlayController = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: nil)) + mainWindow.present(overlayController, on: .root) + + let _ = (deleteAllLocalWalletsData(storage: walletContext.storage, tonInstance: walletContext.tonInstance) + |> deliverOnMainQueue).start(error: { [weak overlayController] _ in + overlayController?.dismiss() + }, completed: { [weak overlayController] in + overlayController?.dismiss() + + navigationController.setViewControllers([WalletSplashScreen(context: walletContext, mode: .intro, walletCreatedPreloadState: nil)], animated: true) + }) + } + }) + }) + } let _ = (combineLatest(queue: .mainQueue(), walletContext.storage.getWalletRecords(), @@ -681,39 +732,32 @@ final class AppDelegate: NSObject, UIApplicationDelegate { |> deliverOnMainQueue).start(next: { records, publicKey in if let record = records.first { if let publicKey = publicKey { - print("publicKey = \(publicKey.base64EncodedString())") if record.info.encryptedSecret.publicKey == publicKey { if record.exportCompleted { let _ = (walletAddress(publicKey: record.info.publicKey, tonInstance: walletContext.tonInstance) |> deliverOnMainQueue).start(next: { address in let infoScreen = WalletInfoScreen(context: walletContext, walletInfo: record.info, address: address, enableDebugActions: false) - - navigationController.setViewControllers([infoScreen], animated: false) + beginWithController(infoScreen) }) } else { let createdScreen = WalletSplashScreen(context: walletContext, mode: .created(record.info, nil), walletCreatedPreloadState: nil) - - navigationController.setViewControllers([createdScreen], animated: false) + beginWithController(createdScreen) } } else { let splashScreen = WalletSplashScreen(context: walletContext, mode: .secureStorageReset(.changed), walletCreatedPreloadState: nil) - - navigationController.setViewControllers([splashScreen], animated: false) + beginWithController(splashScreen) } } else { let splashScreen = WalletSplashScreen(context: walletContext, mode: WalletSplashMode.secureStorageReset(.notAvailable), walletCreatedPreloadState: nil) - - navigationController.setViewControllers([splashScreen], animated: false) + beginWithController(splashScreen) } } else { if publicKey != nil { let splashScreen = WalletSplashScreen(context: walletContext, mode: .intro, walletCreatedPreloadState: nil) - - navigationController.setViewControllers([splashScreen], animated: false) + beginWithController(splashScreen) } else { let splashScreen = WalletSplashScreen(context: walletContext, mode: .secureStorageNotAvailable, walletCreatedPreloadState: nil) - - navigationController.setViewControllers([splashScreen], animated: false) + beginWithController(splashScreen) } } }) @@ -727,7 +771,7 @@ private enum DownloadFileError { case network } -private func downloadFile(url: URL) -> Signal { +private func download(url: URL) -> Signal { return Signal { subscriber in let completed = Atomic(value: false) let downloadTask = URLSession.shared.downloadTask(with: url, completionHandler: { location, _, error in @@ -761,6 +805,6 @@ struct MergedLocalWalletConfiguration: Codable, Equatable { private extension MergedLocalWalletConfiguration { static var `default`: MergedLocalWalletConfiguration { - return MergedLocalWalletConfiguration(configuration: LocalWalletConfiguration(source: .url("https://test.ton.org/config.json"), blockchainName: "testchain"), resolved: nil) + return MergedLocalWalletConfiguration(configuration: LocalWalletConfiguration(source: .url("https://test.ton.org/config.json"), blockchainName: "testnet"), resolved: nil) } } diff --git a/Wallet/Strings/en.lproj/Localizable.strings b/Wallet/Strings/en.lproj/Localizable.strings index d35e1a7751..1d9c7d939e 100644 --- a/Wallet/Strings/en.lproj/Localizable.strings +++ b/Wallet/Strings/en.lproj/Localizable.strings @@ -23,7 +23,7 @@ "Wallet.Info.Send" = "Send"; "Wallet.Info.RefreshErrorTitle" = "No network"; "Wallet.Info.RefreshErrorText" = "Couldn't refresh balance. Please make sure your internet connection is working and try again."; -"Wallet.Info.RefreshErrorNetworkText" = "The wallet state can not be retrieved at this time. Please try again later."; +"Wallet.Info.RefreshErrorNetworkText" = "Wallet state can not be retrieved at this time. Please try again later."; "Wallet.Info.UnknownTransaction" = "Empty Transaction"; "Wallet.Info.TransactionTo" = "to"; "Wallet.Info.TransactionFrom" = "from"; @@ -54,7 +54,7 @@ "Wallet.Send.Balance" = "Balance: %@"; "Wallet.Send.AmountText" = "Grams to send"; "Wallet.Send.Confirmation" = "Confirmation"; -"Wallet.Send.ConfirmationText" = "Do you want to send **%1$@** Grams to\n%2$@?\n\nFees: ~%3$@ grams"; +"Wallet.Send.ConfirmationText" = "Do you want to send **%1$@** Grams to\n\n%2$@?\n\nBlockchain fees: ~%3$@ grams"; "Wallet.Send.ConfirmationConfirm" = "Confirm"; "Wallet.Send.Send" = "Send"; "Wallet.Send.OwnAddressAlertTitle" = "Warning"; @@ -62,8 +62,9 @@ "Wallet.Send.OwnAddressAlertProceed" = "Proceed"; "Wallet.Send.TransactionInProgress" = "Please wait until the current transaction is completed."; "Wallet.Send.SyncInProgress" = "Please wait while the wallet finishes syncing with the TON Blockchain."; -"Wallet.Settings.Title" = "Wallet Settings"; -"Wallet.Settings.Configuration" = "Configuration"; +"Wallet.Settings.Title" = "Settings"; +"Wallet.Settings.Configuration" = "Server Settings"; +"Wallet.Settings.ConfigurationInfo" = "Advanced Settings"; "Wallet.Settings.BackupWallet" = "Backup Wallet"; "Wallet.Settings.DeleteWallet" = "Delete Wallet"; "Wallet.Settings.DeleteWalletInfo" = "This will disconnect the wallet from this app. You will be able to restore your wallet using 24 secret words – or import another wallet.\n\nGram Wallets are located in the decentralized TON Blockchain. If you want a wallet to be deleted, simply transfer all the grams from it and leave it empty."; @@ -119,7 +120,7 @@ "Wallet.TransactionInfo.OtherFeeInfo" = "Blockchain validators collect a tiny fee for processing your decentralized transactions."; "Wallet.TransactionInfo.OtherFeeInfoUrl" = "Blockchain validators collect a tiny fee for processing your decentralized transactions. [More info]()"; "Wallet.WordCheck.Title" = "Test Time!"; -"Wallet.WordCheck.Text" = "Let’s check that you wrote them down correctly. Please enter words\n**%1$@**, **%2$@** and **%3$@** below:"; +"Wallet.WordCheck.Text" = "Let’s check that you wrote them down correctly. Please enter the words\n**%1$@**, **%2$@** and **%3$@**"; "Wallet.WordCheck.Continue" = "Continue"; "Wallet.WordCheck.IncorrectHeader" = "Incorrect words!"; "Wallet.WordCheck.IncorrectText" = "The secret words you have entered do not match the ones in the list."; @@ -149,8 +150,23 @@ "Wallet.Send.SendAnyway" = "Send Anyway"; "Wallet.Receive.CreateInvoice" = "Create Invoice"; "Wallet.Receive.CreateInvoiceInfo" = "You can specify the amount and purpose of the payment to save the sender some time."; -"Wallet.Configuration.Title" = "Configuration"; +"Wallet.Configuration.Title" = "Server Settings"; "Wallet.Configuration.Apply" = "Save"; +"Wallet.Configuration.SourceHeader" = "SOURCE"; +"Wallet.Configuration.SourceURL" = "URL"; +"Wallet.Configuration.SourceJSON" = "JSON"; +"Wallet.Configuration.SourceInfo" = "Using a different configuration allows you to change Lite Server addresses."; +"Wallet.Configuration.BlockchainIdHeader" = "BLOCKCHAIN ID"; +"Wallet.Configuration.BlockchainIdPlaceholder" = "Blockchain ID"; +"Wallet.Configuration.BlockchainIdInfo" = "This setting is for developers. Change it only if you are working on creating your own TON network."; +"Wallet.Configuration.ApplyErrorTitle" = "Error"; +"Wallet.Configuration.ApplyErrorTextURLInvalid" = "The URL you have entered is invalid. Please try again."; +"Wallet.Configuration.ApplyErrorTextURLUnreachable" = "There was an error while downloading configuration from %@\nPlease try again."; +"Wallet.Configuration.ApplyErrorTextURLInvalidData" = "This blockchain configuration is invalid. Please try again."; +"Wallet.Configuration.ApplyErrorTextJSONInvalidData" = "This blockchain configuration is invalid. Please try again."; +"Wallet.Configuration.BlockchainNameChangedTitle" = "Warning"; +"Wallet.Configuration.BlockchainNameChangedText" = "Are you sure you want to change the blockchain ID? You don't need this unless you're testing your own TON network.\n\nIf you proceed, you will need to reconnect your wallet using 24 secret words."; +"Wallet.Configuration.BlockchainNameChangedProceed" = "Proceed"; "Wallet.CreateInvoice.Title" = "Create Invoice"; "Wallet.Navigation.Close" = "Close"; "Wallet.Navigation.Back" = "Back"; diff --git a/Wallet/example_wallet_env.sh b/Wallet/example_wallet_env.sh new file mode 100755 index 0000000000..ed087692a5 --- /dev/null +++ b/Wallet/example_wallet_env.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +custom_realpath() { + OURPWD=$PWD + cd "$(dirname "$1")" + LINK=$(readlink "$(basename "$1")") + while [ "$LINK" ]; do + cd "$(dirname "$LINK")" + LINK=$(readlink "$(basename "$1")") + done + REALPATH="$PWD/$(basename "$1")" + cd "$OURPWD" + echo "$REALPATH" +} + +export TELEGRAM_ENV_SET="1" + +export HOCKEYAPP_ID="" +export IS_INTERNAL_BUILD="false" +export IS_APPSTORE_BUILD="true" +export APPSTORE_ID="1" +export APP_SPECIFIC_URL_SCHEME="" +export API_ID="0" +export API_HASH="" + +if [ -z "$DEVELOPMENT_CODE_SIGN_IDENTITY" ]; then + export DEVELOPMENT_CODE_SIGN_IDENTITY="iPhone Developer: AAAAA AAAAA (XXXXXXXXXX)" +fi +if [ -z "$DISTRIBUTION_CODE_SIGN_IDENTITY" ]; then + export DISTRIBUTION_CODE_SIGN_IDENTITY="iPhone Distribution: AAAAA AAAAA (XXXXXXXXXX)" +fi +if [ -z "$DEVELOPMENT_TEAM" ]; then + export DEVELOPMENT_TEAM="XXXXXXXXXX" +fi + +if [ -z "$WALLET_BUNDLE_ID" ]; then + export WALLET_BUNDLE_ID="reverse.dns.notation" +fi + +if [ -z "$BUILD_NUMBER" ]; then + echo "BUILD_NUMBER is not defined" + exit 1 +fi + +export WALLET_ENTITLEMENTS_APP="Wallet.entitlements" +if [ -z "$WALLET_DEVELOPMENT_PROVISIONING_PROFILE_APP" ]; then + export WALLET_DEVELOPMENT_PROVISIONING_PROFILE_APP="development profile name" +fi +if [ -z "$WALLET_DISTRIBUTION_PROVISIONING_PROFILE_APP" ]; then + export WALLET_DISTRIBUTION_PROVISIONING_PROFILE_APP="distribution profile name" +fi + +BASE_DIR="$(custom_realpath .)" +BASE_PATH=$(dirname "$(custom_realpath $0)") +BUILDBOX_DIR="buildbox" + +if [ -z "$CODESIGNING_SOURCE_DATA_PATH" ]; then + echo "CODESIGNING_SOURCE_DATA_PATH is not defined" + exit 1 +fi + +if [ ! -d "$CODESIGNING_SOURCE_DATA_PATH/profiles" ]; then + echo "Expected codesigning directory layout:" + echo "$CODESIGNING_SOURCE_DATA_PATH/profiles/appstore/*.mobileprovision" + exit 1 +fi + +rm -rf "$BASE_DIR/$BUILDBOX_DIR/transient-data/teams/$DEVELOPMENT_TEAM/codesigning" +mkdir -p "$BASE_DIR/$BUILDBOX_DIR/transient-data/teams/$DEVELOPMENT_TEAM/codesigning" +cp -R "$CODESIGNING_SOURCE_DATA_PATH/"* "$BASE_DIR/$BUILDBOX_DIR/transient-data/teams/$DEVELOPMENT_TEAM/codesigning/" + +export CODESIGNING_DATA_PATH="$BUILDBOX_DIR/transient-data/teams/$DEVELOPMENT_TEAM/codesigning" +export CODESIGNING_CERTS_VARIANT="distribution" +export CODESIGNING_PROFILES_VARIANT="appstore" +export PACKAGE_METHOD="appstore" + +$@ diff --git a/Watch/App/Info.plist b/Watch/App/Info.plist index dcf54e58a5..883fc23d8c 100644 --- a/Watch/App/Info.plist +++ b/Watch/App/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 5.12.1 + $(PRODUCT_BUNDLE_SHORT_VERSION) CFBundleVersion ${BUILD_NUMBER} UIDeviceFamily diff --git a/Watch/Extension/Info.plist b/Watch/Extension/Info.plist index 06f504c510..4eb1d3e62e 100644 --- a/Watch/Extension/Info.plist +++ b/Watch/Extension/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 5.12.1 + $(PRODUCT_BUNDLE_SHORT_VERSION) CFBundleVersion ${BUILD_NUMBER} NSExtension diff --git a/Widget/Info.plist b/Widget/Info.plist index 7e87bf7a10..6917b6ac76 100644 --- a/Widget/Info.plist +++ b/Widget/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 5.12.1 + $(PRODUCT_BUNDLE_SHORT_VERSION) CFBundleVersion ${BUILD_NUMBER} NSExtension diff --git a/buildbox/buck/buck-2be0e8fa79117daa854e79dd7d9ce32048d506a8.patch b/buildbox/buck/buck-2be0e8fa79117daa854e79dd7d9ce32048d506a8.patch new file mode 100644 index 0000000000..fe6ee40c41 --- /dev/null +++ b/buildbox/buck/buck-2be0e8fa79117daa854e79dd7d9ce32048d506a8.patch @@ -0,0 +1,157 @@ +diff --git a/.gitignore b/.gitignore +index 78ce658b9a..30c0369ab7 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -3,6 +3,7 @@ + + # IntelliJ build + /intellij-out/ ++/.idea/ + + # Buck + /buck-out +diff --git a/.idea/modules.xml b/.idea/modules.xml +deleted file mode 100644 +index 7ff823b554..0000000000 +--- a/.idea/modules.xml ++++ /dev/null +@@ -1,16 +0,0 @@ +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +\ No newline at end of file +diff --git a/src/com/facebook/buck/apple/AppleBundle.java b/src/com/facebook/buck/apple/AppleBundle.java +index d895ab9a79..ad42beb302 100644 +--- a/src/com/facebook/buck/apple/AppleBundle.java ++++ b/src/com/facebook/buck/apple/AppleBundle.java +@@ -992,7 +992,11 @@ public class AppleBundle extends AbstractBuildRuleWithDeclaredAndExtraDeps + keys.put("DTPlatformName", new NSString(platform.getName())); + keys.put("DTPlatformVersion", new NSString(sdkVersion)); + keys.put("DTSDKName", new NSString(sdkName + sdkVersion)); +- keys.put("MinimumOSVersion", new NSString(minOSVersion)); ++ if (infoPlistSubstitutions.containsKey("MinimumOSVersion")) { ++ keys.put("MinimumOSVersion", new NSString(infoPlistSubstitutions.get("MinimumOSVersion"))); ++ } else { ++ keys.put("MinimumOSVersion", new NSString(minOSVersion)); ++ } + if (platformBuildVersion.isPresent()) { + keys.put("DTPlatformBuild", new NSString(platformBuildVersion.get())); + keys.put("DTSDKBuild", new NSString(platformBuildVersion.get())); +@@ -1185,9 +1189,10 @@ public class AppleBundle extends AbstractBuildRuleWithDeclaredAndExtraDeps + + // .framework bundles will be code-signed when they're copied into the containing bundle. + private boolean needCodeSign() { +- return binary.isPresent() ++ return false; ++ /*return binary.isPresent() + && ApplePlatform.needsCodeSign(platform.getName()) +- && !extension.equals(FRAMEWORK_EXTENSION); ++ && !extension.equals(FRAMEWORK_EXTENSION);*/ + } + + @Override +diff --git a/src/com/facebook/buck/apple/MultiarchFileInfos.java b/src/com/facebook/buck/apple/MultiarchFileInfos.java +index c078b2e134..030f9fc289 100644 +--- a/src/com/facebook/buck/apple/MultiarchFileInfos.java ++++ b/src/com/facebook/buck/apple/MultiarchFileInfos.java +@@ -177,7 +177,12 @@ public class MultiarchFileInfos { + cxxBuckConfig.shouldCacheLinks(), + BuildTargetPaths.getGenPath( + projectFilesystem, buildTarget, multiarchOutputPathFormat)); +- graphBuilder.addToIndex(multiarchFile); ++ Optional existingRule2 = graphBuilder.getRuleOptional(multiarchFile.getBuildTarget()); ++ if (existingRule2.isPresent()) { ++ return existingRule2.get(); ++ } else { ++ graphBuilder.addToIndex(multiarchFile); ++ } + return multiarchFile; + } else { + return new NoopBuildRule(buildTarget, projectFilesystem); +diff --git a/src/com/facebook/buck/features/apple/project/ProjectGenerator.java b/src/com/facebook/buck/features/apple/project/ProjectGenerator.java +index 8db968b982..b10f793d8e 100644 +--- a/src/com/facebook/buck/features/apple/project/ProjectGenerator.java ++++ b/src/com/facebook/buck/features/apple/project/ProjectGenerator.java +@@ -825,6 +825,7 @@ public class ProjectGenerator { + Optional.of(xcodeDescriptions.getXCodeDescriptions())); + if (bundleRequiresRemovalOfAllTransitiveFrameworks(targetNode)) { + copiedRules = rulesWithoutFrameworkBundles(copiedRules); ++ copiedRules = rulesWithoutDylibs(copiedRules); + } else if (bundleRequiresAllTransitiveFrameworks(binaryNode, bundleLoaderNode)) { + copiedRules = + ImmutableSet.>builder() +@@ -954,6 +955,22 @@ public class ProjectGenerator { + .toImmutableList(); + } + ++ private ImmutableList> rulesWithoutDylibs( ++ Iterable> copiedRules) { ++ return RichStream.from(copiedRules) ++ .filter( ++ input -> ++ TargetNodes.castArg(input, AppleLibraryDescriptionArg.class) ++ .map(argTargetNode -> { ++ if (argTargetNode.getBuildTarget().getFlavors().contains(CxxDescriptionEnhancer.SHARED_FLAVOR)) { ++ return false; ++ } ++ return true; ++ }) ++ .orElse(true)) ++ .toImmutableList(); ++ } ++ + private ImmutableList> rulesWithoutBundleLoader( + Iterable> copiedRules, TargetNode bundleLoader) { + return RichStream.from(copiedRules).filter(x -> !bundleLoader.equals(x)).toImmutableList(); +@@ -2316,8 +2333,9 @@ public class ProjectGenerator { + .transform( + bundleExtension -> { + switch (bundleExtension) { +- case APP: + case APPEX: ++ return false; ++ case APP: + case PLUGIN: + case BUNDLE: + case XCTEST: +@@ -2515,7 +2533,7 @@ public class ProjectGenerator { + + librarySearchPaths.add("$DT_TOOLCHAIN_DIR/usr/lib/swift/$PLATFORM_NAME"); + if (options.shouldLinkSystemSwift()) { +- librarySearchPaths.add("$DT_TOOLCHAIN_DIR/usr/lib/swift-5.0/$PLATFORM_NAME"); ++ //librarySearchPaths.add("$DT_TOOLCHAIN_DIR/usr/lib/swift-5.0/$PLATFORM_NAME"); + } + } + +@@ -3444,7 +3462,7 @@ public class ProjectGenerator { + + PBXFileReference fileReference = getLibraryFileReference(targetNode); + PBXBuildFile buildFile = new PBXBuildFile(fileReference); +- if (fileReference.getExplicitFileType().equals(Optional.of("wrapper.framework"))) { ++ if (fileReference.getExplicitFileType().equals(Optional.of("wrapper.framework")) || fileReference.getExplicitFileType().equals(Optional.of("compiled.mach-o.dylib"))) { + UnflavoredBuildTargetView buildTarget = + targetNode.getBuildTarget().getUnflavoredBuildTarget(); + if (frameworkTargets.contains(buildTarget)) { +@@ -4696,6 +4714,9 @@ public class ProjectGenerator { + + private static boolean bundleRequiresRemovalOfAllTransitiveFrameworks( + TargetNode targetNode) { ++ if (targetNode.getConstructorArg().getXcodeProductType().equals(Optional.of("com.apple.product-type.app-extension"))) { ++ return true; ++ } + return isFrameworkBundle(targetNode.getConstructorArg()); + } + diff --git a/buildbox/buck/prepare_buck_source.sh b/buildbox/buck/prepare_buck_source.sh new file mode 100644 index 0000000000..2430dda76e --- /dev/null +++ b/buildbox/buck/prepare_buck_source.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +ls [] + +if [ ! -f "" ]; then + exit 1 +fi diff --git a/extract_wallet_source.py b/extract_wallet_source.py index 2c17d1f782..727e04194a 100644 --- a/extract_wallet_source.py +++ b/extract_wallet_source.py @@ -22,12 +22,30 @@ def clean_files(base_dir, dirs, files): if re.match('.*\\.xcodeproj', dir) or re.match('.*\\.xcworkspace', dir): shutil.rmtree(base_dir + '/' + dir, ignore_errors=True) +def clean_dep_files(base_dir, dirs, files): + for file in files: + if re.match('^\\.git$', file) or re.match('^.*/\\.git$', file): + os.remove(base_dir + '/' + file) + for dir in dirs: + if re.match('^\\.git$', dir) or re.match('^.*/\\.git$', dir): + shutil.rmtree(base_dir + '/' + dir, ignore_errors=True) + if len(sys.argv) != 2: print('Usage: extract_wallet_source.py destination') sys.exit(1) destination = sys.argv[1] +initial_dirs, initial_files = get_file_list(destination) +for file in initial_files: + if re.match('^\\.git/.*$', file): + continue + os.remove(destination + '/' + file) +for dir in initial_dirs: + if dir == '.git' or re.match('^\\.git/.*$', dir): + continue + shutil.rmtree(destination + '/' + dir, ignore_errors=True) + deps_data = os.popen('make -f Wallet.makefile --silent wallet_deps').read() deps = json.loads(deps_data) @@ -45,6 +63,8 @@ for dep in deps: for dep_path in paths: shutil.copytree(dep_path, destination + '/' + dep_path) + dep_dirs, dep_files = get_file_list(destination + '/' + dep_path) + clean_dep_files(destination + '/' + dep_path, dep_dirs, dep_files) result_dirs, result_files = get_file_list(destination) clean_files(destination, result_dirs, result_files) @@ -53,6 +73,10 @@ with open(destination + '/BUCK', 'w+b') as file: pass shutil.copytree('Config', destination + '/' + 'Config') +shutil.copytree('tools/buck-build', destination + '/' + 'tools/buck-build') + +shutil.copy('Wallet/README.md', destination + '/' + 'README.md') +os.remove(destination + '/Wallet/' + 'README.md') copy_files = [ '.buckconfig', diff --git a/submodules/AppLock/Sources/AppLock.swift b/submodules/AppLock/Sources/AppLock.swift index 17ead4e47e..c8cdc58649 100644 --- a/submodules/AppLock/Sources/AppLock.swift +++ b/submodules/AppLock/Sources/AppLock.swift @@ -17,12 +17,12 @@ private func isLocked(passcodeSettings: PresentationPasscodeSettings, state: Loc } else if let autolockTimeout = passcodeSettings.autolockTimeout { var bootTimestamp: Int32 = 0 let uptime = getDeviceUptimeSeconds(&bootTimestamp) - let timestamp = MonotonicTimestamp(bootTimestap: bootTimestamp, uptime: uptime) + let timestamp = MonotonicTimestamp(bootTimestamp: bootTimestamp, uptime: uptime) let applicationActivityTimestamp = state.applicationActivityTimestamp if let applicationActivityTimestamp = applicationActivityTimestamp { - if timestamp.bootTimestap != applicationActivityTimestamp.bootTimestap { + if timestamp.bootTimestamp != applicationActivityTimestamp.bootTimestamp { return true } if timestamp.uptime >= applicationActivityTimestamp.uptime + autolockTimeout { @@ -249,7 +249,7 @@ public final class AppLockContextImpl: AppLockContext { let uptime = getDeviceUptimeSeconds(&bootTimestamp) var state = state - state.applicationActivityTimestamp = MonotonicTimestamp(bootTimestap: bootTimestamp, uptime: uptime) + state.applicationActivityTimestamp = MonotonicTimestamp(bootTimestamp: bootTimestamp, uptime: uptime) return state } } @@ -276,7 +276,7 @@ public final class AppLockContextImpl: AppLockContext { return self.currentState.get() |> map { state in return state.unlockAttemts.flatMap { unlockAttemts in - return AccessChallengeAttempts(count: unlockAttemts.count, timestamp: unlockAttemts.wallClockTimestamp) + return AccessChallengeAttempts(count: unlockAttemts.count, bootTimestamp: unlockAttemts.timestamp.bootTimestamp, uptime: unlockAttemts.timestamp.uptime) } } } @@ -299,7 +299,7 @@ public final class AppLockContextImpl: AppLockContext { var bootTimestamp: Int32 = 0 let uptime = getDeviceUptimeSeconds(&bootTimestamp) - let timestamp = MonotonicTimestamp(bootTimestap: bootTimestamp, uptime: uptime) + let timestamp = MonotonicTimestamp(bootTimestamp: bootTimestamp, uptime: uptime) state.applicationActivityTimestamp = timestamp return state @@ -309,9 +309,15 @@ public final class AppLockContextImpl: AppLockContext { public func failedUnlockAttempt() { self.updateLockState { state in var state = state - var unlockAttemts = state.unlockAttemts ?? UnlockAttempts(count: 0, wallClockTimestamp: 0) + var unlockAttemts = state.unlockAttemts ?? UnlockAttempts(count: 0, timestamp: MonotonicTimestamp(bootTimestamp: 0, uptime: 0)) + unlockAttemts.count += 1 - unlockAttemts.wallClockTimestamp = Int32(CFAbsoluteTimeGetCurrent()) + + var bootTimestamp: Int32 = 0 + let uptime = getDeviceUptimeSeconds(&bootTimestamp) + let timestamp = MonotonicTimestamp(bootTimestamp: bootTimestamp, uptime: uptime) + + unlockAttemts.timestamp = timestamp state.unlockAttemts = unlockAttemts return state } diff --git a/submodules/AppLockState/Sources/AppLockState.swift b/submodules/AppLockState/Sources/AppLockState.swift index a044c7901c..c632725ab1 100644 --- a/submodules/AppLockState/Sources/AppLockState.swift +++ b/submodules/AppLockState/Sources/AppLockState.swift @@ -2,22 +2,22 @@ import Foundation import MonotonicTime public struct MonotonicTimestamp: Codable, Equatable { - public var bootTimestap: Int32 + public var bootTimestamp: Int32 public var uptime: Int32 - public init(bootTimestap: Int32, uptime: Int32) { - self.bootTimestap = bootTimestap + public init(bootTimestamp: Int32, uptime: Int32) { + self.bootTimestamp = bootTimestamp self.uptime = uptime } } public struct UnlockAttempts: Codable, Equatable { public var count: Int32 - public var wallClockTimestamp: Int32 + public var timestamp: MonotonicTimestamp - public init(count: Int32, wallClockTimestamp: Int32) { + public init(count: Int32, timestamp: MonotonicTimestamp) { self.count = count - self.wallClockTimestamp = wallClockTimestamp + self.timestamp = timestamp } } @@ -45,10 +45,10 @@ public func isAppLocked(state: LockState) -> Bool { } else if let autolockTimeout = state.autolockTimeout { var bootTimestamp: Int32 = 0 let uptime = getDeviceUptimeSeconds(&bootTimestamp) - let timestamp = MonotonicTimestamp(bootTimestap: bootTimestamp, uptime: uptime) + let timestamp = MonotonicTimestamp(bootTimestamp: bootTimestamp, uptime: uptime) if let applicationActivityTimestamp = state.applicationActivityTimestamp { - if timestamp.bootTimestap != applicationActivityTimestamp.bootTimestap { + if timestamp.bootTimestamp != applicationActivityTimestamp.bootTimestamp { return true } if timestamp.uptime >= applicationActivityTimestamp.uptime + autolockTimeout { diff --git a/submodules/AsyncDisplayKit/.buckconfig b/submodules/AsyncDisplayKit/.buckconfig deleted file mode 100644 index 821cb2c82f..0000000000 --- a/submodules/AsyncDisplayKit/.buckconfig +++ /dev/null @@ -1,22 +0,0 @@ -[cxx] - default_platform = iphonesimulator-x86_64 - combined_preprocess_and_compile = true - -[apple] - iphonesimulator_target_sdk_version = 8.0 - iphoneos_target_sdk_version = 8.0 - xctool_default_destination_specifier = platform=iOS Simulator, name=iPhone 6, OS=10.2 - -[alias] - lib = //:AsyncDisplayKit - tests = //:Tests - -[httpserver] - port = 8080 - -[project] - ide = xcode - ignore = .buckd, \ - .hg, \ - .git, \ - buck-out, \ diff --git a/submodules/AsyncDisplayKit/.buckversion b/submodules/AsyncDisplayKit/.buckversion deleted file mode 100644 index 437aedac09..0000000000 --- a/submodules/AsyncDisplayKit/.buckversion +++ /dev/null @@ -1 +0,0 @@ -f399f484bf13b47bcc2bf0f2e092ab5d8de9f6e6 diff --git a/submodules/AsyncDisplayKit/.editorconfig b/submodules/AsyncDisplayKit/.editorconfig deleted file mode 100644 index 0605feef2a..0000000000 --- a/submodules/AsyncDisplayKit/.editorconfig +++ /dev/null @@ -1,19 +0,0 @@ -# http://editorconfig.org -root = true - -[*] -charset = utf-8 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true - -[**.{h,cc,mm,m}] -indent_style = space -indent_size = 2 - -[*.{md,markdown}] -trim_trailing_whitespace = false - -# Makefiles always use tabs for indentation -[Makefile] -indent_style = tab \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/.github/ISSUE_TEMPLATE.md b/submodules/AsyncDisplayKit/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index c5ab71942b..0000000000 --- a/submodules/AsyncDisplayKit/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ -// If you're looking for help, please consider joining our slack channel: -// http://asyncdisplaykit.org/slack (we'll be updating the name to Texture soon) - -// The more information you include, the faster we can help you out! -// Please include: a sample project or screenshots, code snippets -// Texture version, and/or backtraces for any crashes (> bt all). -// Please delete these lines before posting. Thanks! diff --git a/submodules/AsyncDisplayKit/.github_changelog_generator b/submodules/AsyncDisplayKit/.github_changelog_generator deleted file mode 100644 index 5b1ccea517..0000000000 --- a/submodules/AsyncDisplayKit/.github_changelog_generator +++ /dev/null @@ -1,3 +0,0 @@ -issues=false -since-tag=2.8 -future-release=2.9 diff --git a/submodules/AsyncDisplayKit/.slather.yml b/submodules/AsyncDisplayKit/.slather.yml deleted file mode 100644 index ef84e32dea..0000000000 --- a/submodules/AsyncDisplayKit/.slather.yml +++ /dev/null @@ -1,5 +0,0 @@ -ci_service: travis_ci -coverage_service: coveralls -xcodeproj: AsyncDisplayKit.xcodeproj -source_directory: AsyncDisplayKit - diff --git a/submodules/AsyncDisplayKit/.travis.yml b/submodules/AsyncDisplayKit/.travis.yml deleted file mode 100644 index b493cff43c..0000000000 --- a/submodules/AsyncDisplayKit/.travis.yml +++ /dev/null @@ -1,34 +0,0 @@ -language: objective-c -cache: - - bundler - - cocoapods -osx_image: xcode8.1 -git: - depth: 10 -before_install: - - brew update - - brew outdated xctool || brew upgrade xctool - - brew outdated carthage || brew upgrade carthage - - gem install cocoapods -v 1.0.1 - - gem install xcpretty -v 0.2.2 - - gem install xcpretty-travis-formatter -# - gem install slather - - xcrun simctl list -install: echo "<3" -env: - - MODE=tests - - MODE=tests_listkit - - MODE=examples-pt1 - - MODE=examples-pt2 - - MODE=examples-pt3 - - MODE=life-without-cocoapods - - MODE=framework -script: ./build.sh $MODE - -#after_success: -# - slather - -# whitelist -branches: - only: - - master diff --git a/submodules/AsyncDisplayKit/CI/build.sh b/submodules/AsyncDisplayKit/CI/build.sh deleted file mode 100755 index 058cef0542..0000000000 --- a/submodules/AsyncDisplayKit/CI/build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -set -eo pipefail - -./build.sh all \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/CI/exclude-from-build.json b/submodules/AsyncDisplayKit/CI/exclude-from-build.json deleted file mode 100644 index 999e736a52..0000000000 --- a/submodules/AsyncDisplayKit/CI/exclude-from-build.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - "^plans/", - "^docs/", - "^CI/exclude-from-build.json$", - "^**/*.md$" -] diff --git a/submodules/AsyncDisplayKit/Source/ASEditableTextNode.h b/submodules/AsyncDisplayKit/Source/ASEditableTextNode.h index 397d815edb..b30969e3f1 100644 --- a/submodules/AsyncDisplayKit/Source/ASEditableTextNode.h +++ b/submodules/AsyncDisplayKit/Source/ASEditableTextNode.h @@ -71,6 +71,8 @@ NS_ASSUME_NONNULL_BEGIN //! @abstract The range of text currently selected. If length is zero, the range is the cursor location. @property NSRange selectedRange; +@property (readonly) CGRect selectionRect; + #pragma mark - Placeholder /** @abstract Indicates if the receiver is displaying the placeholder text. diff --git a/submodules/AsyncDisplayKit/Source/ASEditableTextNode.mm b/submodules/AsyncDisplayKit/Source/ASEditableTextNode.mm index 277af0f9c8..21f94b4493 100644 --- a/submodules/AsyncDisplayKit/Source/ASEditableTextNode.mm +++ b/submodules/AsyncDisplayKit/Source/ASEditableTextNode.mm @@ -566,6 +566,15 @@ _textKitComponents.textView.selectedRange = selectedRange; } +- (CGRect)selectionRect { + UITextRange *range = [_textKitComponents.textView selectedTextRange]; + if (range != nil) { + return [_textKitComponents.textView firstRectForRange:range]; + } else { + return [_textKitComponents.textView bounds]; + } +} + #pragma mark - Placeholder - (BOOL)isDisplayingPlaceholder { diff --git a/submodules/AsyncDisplayKit/Tests/ASAbsoluteLayoutSpecSnapshotTests.mm b/submodules/AsyncDisplayKit/Tests/ASAbsoluteLayoutSpecSnapshotTests.mm deleted file mode 100644 index a1b9b94596..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASAbsoluteLayoutSpecSnapshotTests.mm +++ /dev/null @@ -1,70 +0,0 @@ -// -// ASAbsoluteLayoutSpecSnapshotTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASLayoutSpecSnapshotTestsHelper.h" - -#import -#import - -@interface ASAbsoluteLayoutSpecSnapshotTests : ASLayoutSpecSnapshotTestCase -@end - -@implementation ASAbsoluteLayoutSpecSnapshotTests - -- (void)testSizingBehaviour -{ - [self testWithSizeRange:ASSizeRangeMake(CGSizeMake(150, 200), CGSizeMake(INFINITY, INFINITY)) - identifier:@"underflowChildren"]; - [self testWithSizeRange:ASSizeRangeMake(CGSizeZero, CGSizeMake(50, 100)) - identifier:@"overflowChildren"]; - // Expect the spec to wrap its content because children sizes are between constrained size - [self testWithSizeRange:ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY / 2, INFINITY / 2)) - identifier:@"wrappedChildren"]; -} - -- (void)testChildrenMeasuredWithAutoMaxSize -{ - ASDisplayNode *firstChild = ASDisplayNodeWithBackgroundColor([UIColor redColor], (CGSize){50, 50}); - firstChild.style.layoutPosition = CGPointMake(0, 0); - - ASDisplayNode *secondChild = ASDisplayNodeWithBackgroundColor([UIColor blueColor], (CGSize){100, 100}); - secondChild.style.layoutPosition = CGPointMake(10, 60); - - ASSizeRange sizeRange = ASSizeRangeMake(CGSizeMake(10, 10), CGSizeMake(110, 160)); - [self testWithChildren:@[firstChild, secondChild] sizeRange:sizeRange identifier:nil]; -} - -- (void)testWithSizeRange:(ASSizeRange)sizeRange identifier:(NSString *)identifier -{ - ASDisplayNode *firstChild = ASDisplayNodeWithBackgroundColor([UIColor redColor], (CGSize){50, 50}); - firstChild.style.layoutPosition = CGPointMake(0, 0); - - ASDisplayNode *secondChild = ASDisplayNodeWithBackgroundColor([UIColor blueColor], (CGSize){100, 100}); - secondChild.style.layoutPosition = CGPointMake(0, 50); - - [self testWithChildren:@[firstChild, secondChild] sizeRange:sizeRange identifier:identifier]; -} - -- (void)testWithChildren:(NSArray *)children sizeRange:(ASSizeRange)sizeRange identifier:(NSString *)identifier -{ - ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor whiteColor]); - - NSMutableArray *subnodes = [NSMutableArray arrayWithArray:children]; - [subnodes insertObject:backgroundNode atIndex:0]; - - ASLayoutSpec *layoutSpec = - [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild: - [ASAbsoluteLayoutSpec - absoluteLayoutSpecWithChildren:children] - background:backgroundNode]; - - [self testLayoutSpec:layoutSpec sizeRange:sizeRange subnodes:subnodes identifier:identifier]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASBackgroundLayoutSpecSnapshotTests.mm b/submodules/AsyncDisplayKit/Tests/ASBackgroundLayoutSpecSnapshotTests.mm deleted file mode 100644 index 1a6b4fc7c8..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASBackgroundLayoutSpecSnapshotTests.mm +++ /dev/null @@ -1,40 +0,0 @@ -// -// ASBackgroundLayoutSpecSnapshotTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASLayoutSpecSnapshotTestsHelper.h" - -#import -#import - -static const ASSizeRange kSize = {{320, 320}, {320, 320}}; - -@interface ASBackgroundLayoutSpecSnapshotTests : ASLayoutSpecSnapshotTestCase - -@end - -@implementation ASBackgroundLayoutSpecSnapshotTests - -- (void)testBackground -{ - ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor blueColor]); - ASDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor blackColor], {20, 20}); - - ASLayoutSpec *layoutSpec = - [ASBackgroundLayoutSpec - backgroundLayoutSpecWithChild: - [ASCenterLayoutSpec - centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringXY - sizingOptions:{} - child:foregroundNode] - background:backgroundNode]; - - [self testLayoutSpec:layoutSpec sizeRange:kSize subnodes:@[backgroundNode, foregroundNode] identifier: nil]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASBasicImageDownloaderContextTests.mm b/submodules/AsyncDisplayKit/Tests/ASBasicImageDownloaderContextTests.mm deleted file mode 100644 index 701174b7dd..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASBasicImageDownloaderContextTests.mm +++ /dev/null @@ -1,75 +0,0 @@ -// -// ASBasicImageDownloaderContextTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -#import - -#import - - -@interface ASBasicImageDownloaderContextTests : XCTestCase - -@end - -@implementation ASBasicImageDownloaderContextTests - -- (NSURL *)randomURL -{ - // random URL for each test, doesn't matter that this is not really a URL - return [NSURL URLWithString:[NSUUID UUID].UUIDString]; -} - -- (void)testContextCreation -{ - NSURL *url = [self randomURL]; - ASBasicImageDownloaderContext *c1 = [ASBasicImageDownloaderContext contextForURL:url]; - ASBasicImageDownloaderContext *c2 = [ASBasicImageDownloaderContext contextForURL:url]; - XCTAssert(c1 == c2, @"Context objects are not the same"); -} - -- (void)testContextInvalidation -{ - NSURL *url = [self randomURL]; - ASBasicImageDownloaderContext *context = [ASBasicImageDownloaderContext contextForURL:url]; - [context cancel]; - XCTAssert([context isCancelled], @"Context should be cancelled"); -} - -/* This test is currently unreliable. See https://github.com/facebook/AsyncDisplayKit/issues/459 -- (void)testAsyncContextInvalidation -{ - NSURL *url = [self randomURL]; - ASBasicImageDownloaderContext *context = [ASBasicImageDownloaderContext contextForURL:url]; - XCTestExpectation *expectation = [self expectationWithDescription:@"Context invalidation"]; - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - [expectation fulfill]; - XCTAssert([context isCancelled], @"Context should be cancelled"); - }); - - [context cancel]; - [self waitForExpectationsWithTimeout:30.0 handler:nil]; -} -*/ - -- (void)testContextSessionCanceled -{ - NSURL *url = [self randomURL]; - id task = [OCMockObject mockForClass:[NSURLSessionTask class]]; - ASBasicImageDownloaderContext *context = [ASBasicImageDownloaderContext contextForURL:url]; - context.sessionTask = task; - - [[task expect] cancel]; - - [context cancel]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASBasicImageDownloaderTests.mm b/submodules/AsyncDisplayKit/Tests/ASBasicImageDownloaderTests.mm deleted file mode 100644 index 8268dfcd64..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASBasicImageDownloaderTests.mm +++ /dev/null @@ -1,45 +0,0 @@ -// -// ASBasicImageDownloaderTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import - -@interface ASBasicImageDownloaderTests : XCTestCase - -@end - -@implementation ASBasicImageDownloaderTests - -- (void)testAsynchronouslyDownloadTheSameURLTwice -{ - XCTestExpectation *firstExpectation = [self expectationWithDescription:@"First ASBasicImageDownloader completion handler should be called within 3 seconds"]; - XCTestExpectation *secondExpectation = [self expectationWithDescription:@"Second ASBasicImageDownloader completion handler should be called within 3 seconds"]; - - ASBasicImageDownloader *downloader = [ASBasicImageDownloader sharedImageDownloader]; - NSURL *URL = [NSURL URLWithString:@"http://wrongPath/wrongResource.png"]; - - [downloader downloadImageWithURL:URL - callbackQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) - downloadProgress:nil - completion:^(id _Nullable image, NSError * _Nullable error, id _Nullable downloadIdentifier, id _Nullable userInfo) { - [firstExpectation fulfill]; - }]; - - [downloader downloadImageWithURL:URL - callbackQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) - downloadProgress:nil - completion:^(id _Nullable image, NSError * _Nullable error, id _Nullable downloadIdentifier, id _Nullable userInfo) { - [secondExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:30 handler:nil]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASBatchFetchingTests.mm b/submodules/AsyncDisplayKit/Tests/ASBatchFetchingTests.mm deleted file mode 100644 index 99b67f05c0..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASBatchFetchingTests.mm +++ /dev/null @@ -1,120 +0,0 @@ -// -// ASBatchFetchingTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import -#import - -@interface ASBatchFetchingTests : XCTestCase - -@end - -@implementation ASBatchFetchingTests - -#define PASSING_RECT CGRectMake(0,0,1,1) -#define PASSING_SIZE CGSizeMake(1,1) -#define PASSING_POINT CGPointMake(1,1) -#define VERTICAL_RECT(h) CGRectMake(0,0,1,h) -#define VERTICAL_SIZE(h) CGSizeMake(0,h) -#define VERTICAL_OFFSET(y) CGPointMake(0,y) -#define HORIZONTAL_RECT(w) CGRectMake(0,0,w,1) -#define HORIZONTAL_SIZE(w) CGSizeMake(w,0) -#define HORIZONTAL_OFFSET(x) CGPointMake(x,0) - -- (void)testBatchNullState { - ASBatchContext *context = [[ASBatchContext alloc] init]; - BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionDown, ASScrollDirectionVerticalDirections, CGRectZero, CGSizeZero, CGPointZero, 0.0, YES, CGPointZero, nil); - XCTAssert(shouldFetch == NO, @"Should not fetch in the null state"); -} - -- (void)testBatchAlreadyFetching { - ASBatchContext *context = [[ASBatchContext alloc] init]; - [context beginBatchFetching]; - BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionDown, ASScrollDirectionVerticalDirections, PASSING_RECT, PASSING_SIZE, PASSING_POINT, 1.0, YES, CGPointZero, nil); - XCTAssert(shouldFetch == NO, @"Should not fetch when context is already fetching"); -} - -- (void)testUnsupportedScrollDirections { - ASBatchContext *context = [[ASBatchContext alloc] init]; - BOOL fetchRight = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionRight, ASScrollDirectionHorizontalDirections, PASSING_RECT, PASSING_SIZE, PASSING_POINT, 1.0, YES, CGPointZero, nil); - XCTAssert(fetchRight == YES, @"Should fetch for scrolling right"); - BOOL fetchDown = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionDown, ASScrollDirectionVerticalDirections, PASSING_RECT, PASSING_SIZE, PASSING_POINT, 1.0, YES, CGPointZero, nil); - XCTAssert(fetchDown == YES, @"Should fetch for scrolling down"); - BOOL fetchUp = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionUp, ASScrollDirectionVerticalDirections, PASSING_RECT, PASSING_SIZE, PASSING_POINT, 1.0, YES, CGPointZero, nil); - XCTAssert(fetchUp == NO, @"Should not fetch for scrolling up"); - BOOL fetchLeft = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionLeft, ASScrollDirectionHorizontalDirections, PASSING_RECT, PASSING_SIZE, PASSING_POINT, 1.0, YES, CGPointZero, nil); - XCTAssert(fetchLeft == NO, @"Should not fetch for scrolling left"); -} - -- (void)testVerticalScrollToExactLeading { - CGFloat screen = 1.0; - ASBatchContext *context = [[ASBatchContext alloc] init]; - // scroll to 1-screen top offset, height is 1 screen, so bottom is 1 screen away from end of content - BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionDown, ASScrollDirectionVerticalDirections, VERTICAL_RECT(screen), VERTICAL_SIZE(screen * 3.0), VERTICAL_OFFSET(screen * 1.0), 1.0, YES, CGPointZero, nil); - XCTAssert(shouldFetch == YES, @"Fetch should begin when vertically scrolling to exactly 1 leading screen away"); -} - -- (void)testVerticalScrollToLessThanLeading { - CGFloat screen = 1.0; - ASBatchContext *context = [[ASBatchContext alloc] init]; - // 3 screens of content, scroll only 1/2 of one screen - BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionDown, ASScrollDirectionVerticalDirections, VERTICAL_RECT(screen), VERTICAL_SIZE(screen * 3.0), VERTICAL_OFFSET(screen * 0.5), 1.0, YES, CGPointZero, nil); - XCTAssert(shouldFetch == NO, @"Fetch should not begin when vertically scrolling less than the leading distance away"); -} - -- (void)testVerticalScrollingPastContentSize { - CGFloat screen = 1.0; - ASBatchContext *context = [[ASBatchContext alloc] init]; - // 3 screens of content, top offset to 3-screens, height 1 screen, so its 1 screen past the leading - BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionDown, ASScrollDirectionVerticalDirections, VERTICAL_RECT(screen), VERTICAL_SIZE(screen * 3.0), VERTICAL_OFFSET(screen * 3.0), 1.0, YES, CGPointZero, nil); - XCTAssert(shouldFetch == YES, @"Fetch should begin when vertically scrolling past the content size"); -} - -- (void)testHorizontalScrollToExactLeading { - CGFloat screen = 1.0; - ASBatchContext *context = [[ASBatchContext alloc] init]; - // scroll to 1-screen left offset, width is 1 screen, so right is 1 screen away from end of content - BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionRight, ASScrollDirectionVerticalDirections, HORIZONTAL_RECT(screen), HORIZONTAL_SIZE(screen * 3.0), HORIZONTAL_OFFSET(screen * 1.0), 1.0, YES, CGPointZero, nil); - XCTAssert(shouldFetch == YES, @"Fetch should begin when horizontally scrolling to exactly 1 leading screen away"); -} - -- (void)testHorizontalScrollToLessThanLeading { - CGFloat screen = 1.0; - ASBatchContext *context = [[ASBatchContext alloc] init]; - // 3 screens of content, scroll only 1/2 of one screen - BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionLeft, ASScrollDirectionHorizontalDirections, HORIZONTAL_RECT(screen), HORIZONTAL_SIZE(screen * 3.0), HORIZONTAL_OFFSET(screen * 0.5), 1.0, YES, CGPointZero, nil); - XCTAssert(shouldFetch == NO, @"Fetch should not begin when horizontally scrolling less than the leading distance away"); -} - -- (void)testHorizontalScrollingPastContentSize { - CGFloat screen = 1.0; - ASBatchContext *context = [[ASBatchContext alloc] init]; - // 3 screens of content, left offset to 3-screens, width 1 screen, so its 1 screen past the leading - BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionDown, ASScrollDirectionHorizontalDirections, HORIZONTAL_RECT(screen), HORIZONTAL_SIZE(screen * 3.0), HORIZONTAL_OFFSET(screen * 3.0), 1.0, YES, CGPointZero, nil); - XCTAssert(shouldFetch == YES, @"Fetch should begin when vertically scrolling past the content size"); -} - -- (void)testVerticalScrollingSmallContentSize { - CGFloat screen = 1.0; - ASBatchContext *context = [[ASBatchContext alloc] init]; - // when the content size is < screen size, the target offset will always be 0 - BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionDown, ASScrollDirectionVerticalDirections, VERTICAL_RECT(screen), VERTICAL_SIZE(screen * 0.5), VERTICAL_OFFSET(0.0), 1.0, YES, CGPointZero, nil); - XCTAssert(shouldFetch == YES, @"Fetch should begin when the target is 0 and the content size is smaller than the scree"); -} - -- (void)testHorizontalScrollingSmallContentSize { - CGFloat screen = 1.0; - ASBatchContext *context = [[ASBatchContext alloc] init]; - // when the content size is < screen size, the target offset will always be 0 - BOOL shouldFetch = ASDisplayShouldFetchBatchForContext(context, ASScrollDirectionRight, ASScrollDirectionHorizontalDirections, HORIZONTAL_RECT(screen), HORIZONTAL_SIZE(screen * 0.5), HORIZONTAL_OFFSET(0.0), 1.0, YES, CGPointZero, nil); - XCTAssert(shouldFetch == YES, @"Fetch should begin when the target is 0 and the content size is smaller than the scree"); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASBridgedPropertiesTests.mm b/submodules/AsyncDisplayKit/Tests/ASBridgedPropertiesTests.mm deleted file mode 100644 index 8e4a202eb8..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASBridgedPropertiesTests.mm +++ /dev/null @@ -1,231 +0,0 @@ -// -// ASBridgedPropertiesTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import -#import -#import -#import -#import -#import - -@interface ASPendingStateController (Testing) -- (BOOL)test_isFlushScheduled; -@end - -@interface ASBridgedPropertiesTestView : UIView -@property (nonatomic, readonly) BOOL receivedSetNeedsLayout; -@end - -@implementation ASBridgedPropertiesTestView - -- (void)setNeedsLayout -{ - _receivedSetNeedsLayout = YES; - [super setNeedsLayout]; -} - -@end - -@interface ASBridgedPropertiesTestNode : ASDisplayNode -@property (nullable, nonatomic, copy) dispatch_block_t onDealloc; -@end - -@implementation ASBridgedPropertiesTestNode - -- (void)dealloc { - _onDealloc(); -} - -@end - -@interface ASBridgedPropertiesTests : XCTestCase -@end - -/// Dispatches the given block synchronously onto a different thread. -/// This is useful for testing non-main-thread behavior because `dispatch_sync` -/// will often use the current thread. -static inline void ASDispatchSyncOnOtherThread(dispatch_block_t block) { - dispatch_group_t group = dispatch_group_create(); - dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - dispatch_group_enter(group); - dispatch_async(q, ^{ - ASDisplayNodeCAssertNotMainThread(); - block(); - dispatch_group_leave(group); - }); - dispatch_group_wait(group, DISPATCH_TIME_FOREVER); -} - -@implementation ASBridgedPropertiesTests - -- (void)testTheresASharedInstance -{ - XCTAssertNotNil([ASPendingStateController sharedInstance]); -} - -/// FIXME: This test is unreliable for an as-yet unknown reason -/// but that being intermittent, and this test being so strict, it's -/// reasonable to assume for now the failures don't reflect a framework bug. -/// See https://github.com/facebook/AsyncDisplayKit/pull/1048 -- (void)DISABLED_testThatDirtyNodesAreNotRetained -{ - ASPendingStateController *ctrl = [ASPendingStateController sharedInstance]; - __block BOOL didDealloc = NO; - @autoreleasepool { - __attribute__((objc_precise_lifetime)) ASBridgedPropertiesTestNode *node = [ASBridgedPropertiesTestNode new]; - node.onDealloc = ^{ - didDealloc = YES; - }; - [node view]; - XCTAssertEqual(node.alpha, 1); - ASDispatchSyncOnOtherThread(^{ - node.alpha = 0; - }); - XCTAssertEqual(node.alpha, 1); - XCTAssert(ctrl.test_isFlushScheduled); - } - XCTAssertTrue(didDealloc); -} - -- (void)testThatSettingABridgedViewPropertyInBackgroundGetsFlushedOnNextRunLoop -{ - ASDisplayNode *node = [ASDisplayNode new]; - [node view]; - XCTAssertEqual(node.alpha, 1); - ASDispatchSyncOnOtherThread(^{ - node.alpha = 0; - }); - XCTAssertEqual(node.alpha, 1); - [self waitForMainDispatchQueueToFlush]; - XCTAssertEqual(node.alpha, 0); -} - -- (void)testThatSettingABridgedLayerPropertyInBackgroundGetsFlushedOnNextRunLoop -{ - ASDisplayNode *node = [ASDisplayNode new]; - [node view]; - XCTAssertEqual(node.shadowOpacity, 0); - ASDispatchSyncOnOtherThread(^{ - node.shadowOpacity = 1; - }); - XCTAssertEqual(node.shadowOpacity, 0); - [self waitForMainDispatchQueueToFlush]; - XCTAssertEqual(node.shadowOpacity, 1); -} - -- (void)testThatReadingABridgedViewPropertyInBackgroundThrowsAnException -{ - ASDisplayNode *node = [ASDisplayNode new]; - [node view]; - ASDispatchSyncOnOtherThread(^{ - XCTAssertThrows(node.alpha); - }); -} - -- (void)testThatReadingABridgedLayerPropertyInBackgroundThrowsAnException -{ - ASDisplayNode *node = [ASDisplayNode new]; - [node view]; - ASDispatchSyncOnOtherThread(^{ - XCTAssertThrows(node.contentsScale); - }); -} - -- (void)testThatManuallyFlushingTheSyncControllerImmediatelyAppliesChanges -{ - ASPendingStateController *ctrl = [ASPendingStateController sharedInstance]; - ASDisplayNode *node = [ASDisplayNode new]; - [node view]; - XCTAssertEqual(node.alpha, 1); - ASDispatchSyncOnOtherThread(^{ - node.alpha = 0; - }); - XCTAssertEqual(node.alpha, 1); - [ctrl flush]; - XCTAssertEqual(node.alpha, 0); - XCTAssertFalse(ctrl.test_isFlushScheduled); -} - -- (void)testThatFlushingTheControllerInBackgroundThrows -{ - ASPendingStateController *ctrl = [ASPendingStateController sharedInstance]; - ASDisplayNode *node = [ASDisplayNode new]; - [node view]; - XCTAssertEqual(node.alpha, 1); - ASDispatchSyncOnOtherThread(^{ - node.alpha = 0; - XCTAssertThrows([ctrl flush]); - }); -} - -- (void)testThatSettingABridgedPropertyOnMainThreadPassesDirectlyToView -{ - ASPendingStateController *ctrl = [ASPendingStateController sharedInstance]; - ASDisplayNode *node = [ASDisplayNode new]; - XCTAssertFalse(ASDisplayNodeGetPendingState(node).hasChanges); - [node view]; - XCTAssertEqual(node.alpha, 1); - node.alpha = 0; - XCTAssertEqual(node.view.alpha, 0); - XCTAssertEqual(node.alpha, 0); - XCTAssertFalse(ASDisplayNodeGetPendingState(node).hasChanges); - XCTAssertFalse(ctrl.test_isFlushScheduled); -} - -- (void)testThatCallingSetNeedsLayoutFromBackgroundCausesItToHappenLater -{ - ASDisplayNode *node = [[ASDisplayNode alloc] initWithViewClass:ASBridgedPropertiesTestView.class]; - ASBridgedPropertiesTestView *view = (ASBridgedPropertiesTestView *)node.view; - XCTAssertFalse(view.receivedSetNeedsLayout); - ASDispatchSyncOnOtherThread(^{ - XCTAssertNoThrow([node setNeedsLayout]); - }); - XCTAssertFalse(view.receivedSetNeedsLayout); - [self waitForMainDispatchQueueToFlush]; - XCTAssertTrue(view.receivedSetNeedsLayout); -} - -- (void)testThatCallingSetNeedsLayoutOnACellNodeFromBackgroundIsSafe -{ - ASCellNode *node = [ASCellNode new]; - [node view]; - ASDispatchSyncOnOtherThread(^{ - XCTAssertNoThrow([node setNeedsLayout]); - }); -} - -- (void)testThatCallingSetNeedsDisplayFromBackgroundCausesItToHappenLater -{ - ASDisplayNode *node = [ASDisplayNode new]; - [node.layer displayIfNeeded]; - XCTAssertFalse(node.layer.needsDisplay); - ASDispatchSyncOnOtherThread(^{ - XCTAssertNoThrow([node setNeedsDisplay]); - }); - XCTAssertFalse(node.layer.needsDisplay); - [self waitForMainDispatchQueueToFlush]; - XCTAssertTrue(node.layer.needsDisplay); -} - -/// [XCTExpectation expectationWithPredicate:] should handle this -/// but under Xcode 7.2.1 its polling interval is 1 second -/// which makes the tests really slow and I'm impatient. -- (void)waitForMainDispatchQueueToFlush -{ - __block BOOL done = NO; - dispatch_async(dispatch_get_main_queue(), ^{ - done = YES; - }); - while (!done) { - [NSRunLoop.mainRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; - } -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASButtonNodeTests.mm b/submodules/AsyncDisplayKit/Tests/ASButtonNodeTests.mm deleted file mode 100644 index 244edd1f0e..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASButtonNodeTests.mm +++ /dev/null @@ -1,54 +0,0 @@ -// -// ASButtonNodeTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import -#import - -@interface ASButtonNodeTests : XCTestCase -@end - -@implementation ASButtonNodeTests - -- (void)testAccessibility -{ - // Setup a button with some title. - ASButtonNode *buttonNode = nil; - buttonNode = [[ASButtonNode alloc] init]; - NSString *title = @"foo"; - [buttonNode setTitle:title withFont:nil withColor:nil forState:UIControlStateNormal]; - - // Verify accessibility properties. - XCTAssertTrue(buttonNode.accessibilityTraits == UIAccessibilityTraitButton, - @"Should have button accessibility trait, instead has %llu", - buttonNode.accessibilityTraits); - XCTAssertTrue(buttonNode.defaultAccessibilityTraits == UIAccessibilityTraitButton, - @"Default accessibility traits should return button accessibility trait, instead " - @"returns %llu", - buttonNode.defaultAccessibilityTraits); - XCTAssertTrue([buttonNode.accessibilityLabel isEqualToString:title], - @"Accessibility label is incorrectly set to \n%@\n when it should be \n%@\n", - buttonNode.accessibilityLabel, title); - XCTAssertTrue([buttonNode.defaultAccessibilityLabel isEqualToString:title], - @"Default accessibility label incorrectly returns \n%@\n when it should be \n%@\n", - buttonNode.defaultAccessibilityLabel, title); - - // Disable the button and verify that accessibility traits has been updated correctly. - buttonNode.enabled = NO; - UIAccessibilityTraits disabledButtonTrait = UIAccessibilityTraitButton | UIAccessibilityTraitNotEnabled; - XCTAssertTrue(buttonNode.accessibilityTraits == disabledButtonTrait, - @"Should have disabled button accessibility trait, instead has %llu", - buttonNode.accessibilityTraits); - XCTAssertTrue(buttonNode.defaultAccessibilityTraits == disabledButtonTrait, - @"Default accessibility traits should return disabled button accessibility trait, " - @"instead returns %llu", - buttonNode.defaultAccessibilityTraits); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASCALayerTests.mm b/submodules/AsyncDisplayKit/Tests/ASCALayerTests.mm deleted file mode 100644 index 2b30da28fc..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASCALayerTests.mm +++ /dev/null @@ -1,107 +0,0 @@ -// -// ASCALayerTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import - -/** - * Tests that confirm what we know about Core Animation behavior. - * - * These tests are not run during the normal test action. You can run them yourself - * to investigate and confirm CA behavior. - */ -@interface ASCALayerTests : XCTestCase - -@end - -#define DeclareLayerAndSublayer() \ - CALayer *realSublayer = [CALayer layer]; \ - id layer = [OCMockObject partialMockForObject:[CALayer layer]]; \ - id sublayer = [OCMockObject partialMockForObject:realSublayer]; \ - [layer addSublayer:realSublayer]; - -@implementation ASCALayerTests - -- (void)testThatLayerBeginsWithCleanLayout -{ - XCTAssertFalse([CALayer layer].needsLayout); -} - -- (void)testThatAddingSublayersDirtysLayout -{ - CALayer *layer = [CALayer layer]; - [layer addSublayer:[CALayer layer]]; - XCTAssertTrue([layer needsLayout]); -} - -- (void)testThatRemovingSublayersDirtysLayout -{ - DeclareLayerAndSublayer(); - [layer layoutIfNeeded]; - XCTAssertFalse([layer needsLayout]); - [sublayer removeFromSuperlayer]; - XCTAssertTrue([layer needsLayout]); -} - -- (void)testDirtySublayerLayoutDoesntDirtySuperlayer -{ - DeclareLayerAndSublayer(); - [layer layoutIfNeeded]; - - // Dirtying sublayer doesn't dirty superlayer. - [sublayer setNeedsLayout]; - XCTAssertTrue([sublayer needsLayout]); - XCTAssertFalse([layer needsLayout]); - [[[sublayer expect] andForwardToRealObject] layoutSublayers]; - // NOTE: We specifically don't expect layer to get -layoutSublayers - [sublayer layoutIfNeeded]; - [sublayer verify]; - [layer verify]; -} - -- (void)testDirtySuperlayerLayoutDoesntDirtySublayerLayout -{ - DeclareLayerAndSublayer(); - [layer layoutIfNeeded]; - - // Dirtying superlayer doesn't dirty sublayer. - [layer setNeedsLayout]; - XCTAssertTrue([layer needsLayout]); - XCTAssertFalse([sublayer needsLayout]); - [[[layer expect] andForwardToRealObject] layoutSublayers]; - // NOTE: We specifically don't expect sublayer to get -layoutSublayers - [layer layoutIfNeeded]; - [sublayer verify]; - [layer verify]; -} - -- (void)testDirtyHierarchyIsLaidOutTopDown -{ - DeclareLayerAndSublayer(); - [sublayer setNeedsLayout]; - - XCTAssertTrue([layer needsLayout]); - XCTAssertTrue([sublayer needsLayout]); - - __block BOOL superlayerLaidOut = NO; - [[[[layer expect] andDo:^(NSInvocation *i) { - superlayerLaidOut = YES; - }] andForwardToRealObject] layoutSublayers]; - - [[[[sublayer expect] andDo:^(NSInvocation *i) { - XCTAssertTrue(superlayerLaidOut); - }] andForwardToRealObject] layoutSublayers]; - - [layer layoutIfNeeded]; - [sublayer verify]; - [layer verify]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASCenterLayoutSpecSnapshotTests.mm b/submodules/AsyncDisplayKit/Tests/ASCenterLayoutSpecSnapshotTests.mm deleted file mode 100644 index d0352bb446..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASCenterLayoutSpecSnapshotTests.mm +++ /dev/null @@ -1,112 +0,0 @@ -// -// ASCenterLayoutSpecSnapshotTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASLayoutSpecSnapshotTestsHelper.h" - -#import -#import -#import - -static const ASSizeRange kSize = {{100, 120}, {320, 160}}; - -@interface ASCenterLayoutSpecSnapshotTests : ASLayoutSpecSnapshotTestCase -@end - -@implementation ASCenterLayoutSpecSnapshotTests - -- (void)testWithOptions -{ - [self testWithCenteringOptions:ASCenterLayoutSpecCenteringNone sizingOptions:{}]; - [self testWithCenteringOptions:ASCenterLayoutSpecCenteringXY sizingOptions:{}]; - [self testWithCenteringOptions:ASCenterLayoutSpecCenteringX sizingOptions:{}]; - [self testWithCenteringOptions:ASCenterLayoutSpecCenteringY sizingOptions:{}]; -} - -- (void)testWithSizingOptions -{ - [self testWithCenteringOptions:ASCenterLayoutSpecCenteringNone - sizingOptions:ASCenterLayoutSpecSizingOptionDefault]; - [self testWithCenteringOptions:ASCenterLayoutSpecCenteringNone - sizingOptions:ASCenterLayoutSpecSizingOptionMinimumX]; - [self testWithCenteringOptions:ASCenterLayoutSpecCenteringNone - sizingOptions:ASCenterLayoutSpecSizingOptionMinimumY]; - [self testWithCenteringOptions:ASCenterLayoutSpecCenteringNone - sizingOptions:ASCenterLayoutSpecSizingOptionMinimumXY]; -} - -- (void)testWithCenteringOptions:(ASCenterLayoutSpecCenteringOptions)options - sizingOptions:(ASCenterLayoutSpecSizingOptions)sizingOptions -{ - ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor redColor]); - ASDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor greenColor], CGSizeMake(70, 100)); - - ASLayoutSpec *layoutSpec = - [ASBackgroundLayoutSpec - backgroundLayoutSpecWithChild: - [ASCenterLayoutSpec - centerLayoutSpecWithCenteringOptions:options - sizingOptions:sizingOptions - child:foregroundNode] - background:backgroundNode]; - - [self testLayoutSpec:layoutSpec - sizeRange:kSize - subnodes:@[backgroundNode, foregroundNode] - identifier:suffixForCenteringOptions(options, sizingOptions)]; -} - -static NSString *suffixForCenteringOptions(ASCenterLayoutSpecCenteringOptions centeringOptions, - ASCenterLayoutSpecSizingOptions sizingOptinos) -{ - NSMutableString *suffix = [NSMutableString string]; - - if ((centeringOptions & ASCenterLayoutSpecCenteringX) != 0) { - [suffix appendString:@"CenteringX"]; - } - - if ((centeringOptions & ASCenterLayoutSpecCenteringY) != 0) { - [suffix appendString:@"CenteringY"]; - } - - if ((sizingOptinos & ASCenterLayoutSpecSizingOptionMinimumX) != 0) { - [suffix appendString:@"SizingMinimumX"]; - } - - if ((sizingOptinos & ASCenterLayoutSpecSizingOptionMinimumY) != 0) { - [suffix appendString:@"SizingMinimumY"]; - } - - return suffix; -} - -- (void)testMinimumSizeRangeIsGivenToChildWhenNotCentering -{ - ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor redColor]); - ASDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor redColor], CGSizeMake(10, 10)); - foregroundNode.style.flexGrow = 1; - - ASCenterLayoutSpec *layoutSpec = - [ASCenterLayoutSpec - centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringNone - sizingOptions:{} - child: - [ASBackgroundLayoutSpec - backgroundLayoutSpecWithChild: - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical - spacing:0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStart - children:@[foregroundNode]] - background:backgroundNode]]; - - [self testLayoutSpec:layoutSpec sizeRange:kSize subnodes:@[backgroundNode, foregroundNode] identifier:nil]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASCollectionModernDataSourceTests.mm b/submodules/AsyncDisplayKit/Tests/ASCollectionModernDataSourceTests.mm deleted file mode 100644 index 5d0a77899a..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASCollectionModernDataSourceTests.mm +++ /dev/null @@ -1,363 +0,0 @@ -// -// ASCollectionModernDataSourceTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import -#import -#import -#import "OCMockObject+ASAdditions.h" -#import "ASTestCase.h" - -@interface ASCollectionModernDataSourceTests : ASTestCase -@end - -@interface ASTestCellNode : ASCellNode -@end - -@interface ASTestSection : NSObject -@property (nonatomic, readonly) NSMutableArray *nodeModels; -@end - -@implementation ASCollectionModernDataSourceTests { -@private - id mockDataSource; - UIWindow *window; - UIViewController *viewController; - ASCollectionNode *collectionNode; - NSMutableArray *sections; -} - -- (void)setUp { - [super setUp]; - // Default is 2 sections: 2 items in first, 1 item in second. - sections = [NSMutableArray array]; - [sections addObject:[ASTestSection new]]; - [sections[0].nodeModels addObject:[NSObject new]]; - [sections[0].nodeModels addObject:[NSObject new]]; - [sections addObject:[ASTestSection new]]; - [sections[1].nodeModels addObject:[NSObject new]]; - window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; - viewController = [[UIViewController alloc] init]; - - window.rootViewController = viewController; - [window makeKeyAndVisible]; - collectionNode = [[ASCollectionNode alloc] initWithCollectionViewLayout:[UICollectionViewFlowLayout new]]; - collectionNode.frame = viewController.view.bounds; - collectionNode.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - [viewController.view addSubnode:collectionNode]; - - mockDataSource = OCMStrictProtocolMock(@protocol(ASCollectionDataSource)); - [mockDataSource addImplementedOptionalProtocolMethods: - @selector(numberOfSectionsInCollectionNode:), - @selector(collectionNode:numberOfItemsInSection:), - @selector(collectionNode:nodeBlockForItemAtIndexPath:), - @selector(collectionNode:nodeModelForItemAtIndexPath:), - @selector(collectionNode:contextForSection:), - nil]; - [mockDataSource setExpectationOrderMatters:YES]; - - // NOTE: Adding optionally-implemented methods after this point won't work due to ASCollectionNode selector caching. - collectionNode.dataSource = mockDataSource; -} - -- (void)tearDown -{ - [collectionNode waitUntilAllUpdatesAreProcessed]; - [super tearDown]; -} - -#pragma mark - Test Methods - -- (void)testInitialDataLoading -{ - [self loadInitialData]; -} - -- (void)testReloadingAnItem -{ - [self loadInitialData]; - - // Reload at (0, 0) - NSIndexPath *reloadedPath = [NSIndexPath indexPathForItem:0 inSection:0]; - - [self performUpdateReloadingSections:nil - reloadingItems:@{ reloadedPath: [NSObject new] } - reloadMappings:@{ reloadedPath: reloadedPath } - insertingItems:nil - deletingItems:nil - skippedReloadIndexPaths:nil]; -} - -- (void)testInsertingAnItem -{ - [self loadInitialData]; - - // Insert at (1, 0) - NSIndexPath *insertedPath = [NSIndexPath indexPathForItem:0 inSection:1]; - - [self performUpdateReloadingSections:nil - reloadingItems:nil - reloadMappings:nil - insertingItems:@{ insertedPath: [NSObject new] } - deletingItems:nil - skippedReloadIndexPaths:nil]; -} - -- (void)testReloadingAnItemWithACompatibleNodeModel -{ - [self loadInitialData]; - - // Reload and delete together, for good measure. - NSIndexPath *reloadedPath = [NSIndexPath indexPathForItem:1 inSection:0]; - NSIndexPath *deletedPath = [NSIndexPath indexPathForItem:0 inSection:0]; - - id nodeModel = [NSObject new]; - - // Cell node should get -canUpdateToNodeModel: - id mockCellNode = [collectionNode nodeForItemAtIndexPath:reloadedPath]; - OCMExpect([mockCellNode canUpdateToNodeModel:nodeModel]) - .andReturn(YES); - - [self performUpdateReloadingSections:nil - reloadingItems:@{ reloadedPath: nodeModel } - reloadMappings:@{ reloadedPath: [NSIndexPath indexPathForItem:0 inSection:0] } - insertingItems:nil - deletingItems:@[ deletedPath ] - skippedReloadIndexPaths:@[ reloadedPath ]]; -} - -- (void)testReloadingASection -{ - [self loadInitialData]; - - [self performUpdateReloadingSections:@{ @0: [ASTestSection new] } - reloadingItems:nil - reloadMappings:nil - insertingItems:nil - deletingItems:nil - skippedReloadIndexPaths:nil]; -} - -#pragma mark - Helpers - -- (void)loadInitialData -{ - // Count methods are called twice in a row for first data load. - // Since -reloadData is routed through our batch update system, - // the batch update latches the "old data source counts" if needed at -beginUpdates time - // and then verifies them against the "new data source counts" after the updates. - // This isn't ideal, but the cost is very small and the system works well. - for (int i = 0; i < 2; i++) { - // It reads all the counts - [self expectDataSourceCountMethods]; - } - - // It reads each section object. - for (NSInteger section = 0; section < sections.count; section++) { - [self expectContextMethodForSection:section]; - } - - // It reads the contents for each item. - for (NSInteger section = 0; section < sections.count; section++) { - NSArray *nodeModels = sections[section].nodeModels; - - // For each item: - for (NSInteger i = 0; i < nodeModels.count; i++) { - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:i inSection:section]; - [self expectNodeModelMethodForItemAtIndexPath:indexPath nodeModel:nodeModels[i]]; - [self expectNodeBlockMethodForItemAtIndexPath:indexPath]; - } - } - - [window layoutIfNeeded]; - - // Assert item counts & content: - [self assertCollectionNodeContent]; -} - -/** - * Adds expectations for the sequence: - * - * numberOfSectionsInCollectionNode: - * for section in countsArray - * numberOfItemsInSection: - */ -- (void)expectDataSourceCountMethods -{ - // -numberOfSectionsInCollectionNode - OCMExpect([mockDataSource numberOfSectionsInCollectionNode:collectionNode]) - .andReturn(sections.count); - - // For each section: - // Note: Skip fast enumeration for readability. - for (NSInteger section = 0; section < sections.count; section++) { - OCMExpect([mockDataSource collectionNode:collectionNode numberOfItemsInSection:section]) - .andReturn(sections[section].nodeModels.count); - } -} - -- (void)expectNodeModelMethodForItemAtIndexPath:(NSIndexPath *)indexPath nodeModel:(id)nodeModel -{ - OCMExpect([mockDataSource collectionNode:collectionNode nodeModelForItemAtIndexPath:indexPath]) - .andReturn(nodeModel); -} - -- (void)expectContextMethodForSection:(NSInteger)section -{ - OCMExpect([mockDataSource collectionNode:collectionNode contextForSection:section]) - .andReturn(sections[section]); -} - -- (void)expectNodeBlockMethodForItemAtIndexPath:(NSIndexPath *)indexPath -{ - OCMExpect([mockDataSource collectionNode:collectionNode nodeBlockForItemAtIndexPath:indexPath]) - .andReturn((ASCellNodeBlock)^{ - ASCellNode *node = [ASTestCellNode new]; - // Generating multiple partial mocks of the same class is not thread-safe. - id mockNode; - @synchronized (NSNull.null) { - mockNode = OCMPartialMock(node); - } - [mockNode setExpectationOrderMatters:YES]; - return mockNode; - }); -} - -/// Asserts that counts match and all view-models are up-to-date between us and collectionNode. -- (void)assertCollectionNodeContent -{ - // Assert section count - XCTAssertEqual(collectionNode.numberOfSections, sections.count); - - for (NSInteger section = 0; section < sections.count; section++) { - ASTestSection *sectionObject = sections[section]; - NSArray *nodeModels = sectionObject.nodeModels; - - // Assert section object - XCTAssertEqualObjects([collectionNode contextForSection:section], sectionObject); - - // Assert item count - XCTAssertEqual([collectionNode numberOfItemsInSection:section], nodeModels.count); - for (NSInteger item = 0; item < nodeModels.count; item++) { - // Assert node model - // Could use pointer equality but the error message is less readable. - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:item inSection:section]; - id nodeModel = nodeModels[indexPath.item]; - XCTAssertEqualObjects(nodeModel, [collectionNode nodeModelForItemAtIndexPath:indexPath]); - ASCellNode *node = [collectionNode nodeForItemAtIndexPath:indexPath]; - XCTAssertEqualObjects(node.nodeModel, nodeModel); - } - } -} - -/** - * Updates the collection node, with expectations and assertions about the call-order and the correctness of the - * new data. You should update the data source _before_ calling this method. - * - * skippedReloadIndexPaths are the old index paths for nodes that should use -canUpdateToNodeModel: instead of being refetched. - */ -- (void)performUpdateReloadingSections:(NSDictionary *)reloadedSections - reloadingItems:(NSDictionary *)reloadedItems - reloadMappings:(NSDictionary *)reloadMappings - insertingItems:(NSDictionary *)insertedItems - deletingItems:(NSArray *)deletedItems - skippedReloadIndexPaths:(NSArray *)skippedReloadIndexPaths -{ - [collectionNode performBatchUpdates:^{ - // First update our data source. - [reloadedItems enumerateKeysAndObjectsUsingBlock:^(NSIndexPath * _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { - sections[key.section].nodeModels[key.item] = obj; - }]; - [reloadedSections enumerateKeysAndObjectsUsingBlock:^(NSNumber * _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { - sections[key.integerValue] = obj; - }]; - - // Deletion paths, sorted descending - for (NSIndexPath *indexPath in [deletedItems sortedArrayUsingSelector:@selector(compare:)].reverseObjectEnumerator) { - [sections[indexPath.section].nodeModels removeObjectAtIndex:indexPath.item]; - } - - // Insertion paths, sorted ascending. - NSArray *insertionsSortedAcending = [insertedItems.allKeys sortedArrayUsingSelector:@selector(compare:)]; - for (NSIndexPath *indexPath in insertionsSortedAcending) { - [sections[indexPath.section].nodeModels insertObject:insertedItems[indexPath] atIndex:indexPath.item]; - } - - // Then update the collection node. - NSMutableIndexSet *reloadedSectionIndexes = [NSMutableIndexSet indexSet]; - for (NSNumber *i in reloadedSections) { - [reloadedSectionIndexes addIndex:i.integerValue]; - } - [collectionNode reloadSections:reloadedSectionIndexes]; - [collectionNode reloadItemsAtIndexPaths:reloadedItems.allKeys]; - [collectionNode deleteItemsAtIndexPaths:deletedItems]; - [collectionNode insertItemsAtIndexPaths:insertedItems.allKeys]; - - // Before the commit, lay out our expectations. - - // Expect it to load the new counts. - [self expectDataSourceCountMethods]; - - // Combine reloads + inserts and expect them to load content for all of them, in ascending order. - NSMutableDictionary *insertsPlusReloads = [[NSMutableDictionary alloc] initWithDictionary:insertedItems]; - - // Go through reloaded sections and add all their items into `insertsPlusReloads` - [reloadedSectionIndexes enumerateIndexesUsingBlock:^(NSUInteger section, BOOL * _Nonnull stop) { - [self expectContextMethodForSection:section]; - NSArray *nodeModels = sections[section].nodeModels; - for (NSInteger i = 0; i < nodeModels.count; i++) { - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:i inSection:section]; - insertsPlusReloads[indexPath] = nodeModels[i]; - } - }]; - - [reloadedItems enumerateKeysAndObjectsUsingBlock:^(NSIndexPath * _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { - insertsPlusReloads[reloadMappings[key]] = obj; - }]; - - for (NSIndexPath *indexPath in [insertsPlusReloads.allKeys sortedArrayUsingSelector:@selector(compare:)]) { - [self expectNodeModelMethodForItemAtIndexPath:indexPath nodeModel:insertsPlusReloads[indexPath]]; - NSIndexPath *oldIndexPath = [reloadMappings allKeysForObject:indexPath].firstObject; - BOOL isSkippedReload = oldIndexPath && [skippedReloadIndexPaths containsObject:oldIndexPath]; - if (!isSkippedReload) { - [self expectNodeBlockMethodForItemAtIndexPath:indexPath]; - } - } - } completion:nil]; - - // Assert that the counts and node models are all correct now. - [self assertCollectionNodeContent]; -} - -@end - -#pragma mark - Other Objects - -@implementation ASTestCellNode - -- (BOOL)canUpdateToNodeModel:(id)nodeModel -{ - // Our tests default to NO for migrating node models. We use OCMExpect to return YES when we specifically want to. - return NO; -} - -@end - -@implementation ASTestSection -@synthesize collectionView; -@synthesize sectionName; - -- (instancetype)init -{ - if (self = [super init]) { - _nodeModels = [NSMutableArray array]; - } - return self; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASCollectionViewFlowLayoutInspectorTests.mm b/submodules/AsyncDisplayKit/Tests/ASCollectionViewFlowLayoutInspectorTests.mm deleted file mode 100644 index 555fe21134..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASCollectionViewFlowLayoutInspectorTests.mm +++ /dev/null @@ -1,428 +0,0 @@ -// -// ASCollectionViewFlowLayoutInspectorTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import -#import -#import "ASXCTExtensions.h" - -#import -#import -#import -#import -#import - -@interface ASCollectionView (Private) - -- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout; - -@end - -/** - * Test Data Source - */ -@interface InspectorTestDataSource : NSObject -@end - -@implementation InspectorTestDataSource - -- (ASCellNode *)collectionView:(ASCollectionView *)collectionView nodeForItemAtIndexPath:(NSIndexPath *)indexPath -{ - return [[ASCellNode alloc] init]; -} - -- (ASCellNodeBlock)collectionView:(ASCollectionView *)collectionView nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath -{ - return ^{ return [[ASCellNode alloc] init]; }; -} - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section -{ - return 0; -} - -- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView -{ - return 2; -} - -@end - -@protocol InspectorTestDataSourceDelegateProtocol - -@end - -@interface InspectorTestDataSourceDelegateWithoutNodeConstrainedSize : NSObject -@end - -@implementation InspectorTestDataSourceDelegateWithoutNodeConstrainedSize - -- (ASCellNodeBlock)collectionView:(ASCollectionView *)collectionView nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath -{ - return ^{ return [[ASCellNode alloc] init]; }; -} - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section -{ - return 0; -} - -@end - -@interface ASCollectionViewFlowLayoutInspectorTests : XCTestCase - -@end - -/** - * Test Delegate for Header Reference Size Implementation - */ -@interface HeaderReferenceSizeTestDelegate : NSObject - -@end - -@implementation HeaderReferenceSizeTestDelegate - -- (CGSize)collectionView:(ASCollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section -{ - return CGSizeMake(125.0, 125.0); -} - -@end - -/** - * Test Delegate for Footer Reference Size Implementation - */ -@interface FooterReferenceSizeTestDelegate : NSObject - -@end - -@implementation FooterReferenceSizeTestDelegate - -- (CGSize)collectionView:(ASCollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section -{ - return CGSizeMake(125.0, 125.0); -} - -@end - -@implementation ASCollectionViewFlowLayoutInspectorTests - -- (void)setUp { - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -#pragma mark - #collectionView:constrainedSizeForSupplementaryNodeOfKind:atIndexPath: - -// Vertical - -// Delegate implementation - -- (void)testThatItReturnsAVerticalConstrainedSizeFromTheHeaderDelegateImplementation -{ - InspectorTestDataSource *dataSource = [[InspectorTestDataSource alloc] init]; - HeaderReferenceSizeTestDelegate *delegate = [[HeaderReferenceSizeTestDelegate alloc] init]; - - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.scrollDirection = UICollectionViewScrollDirectionVertical; - - CGRect rect = CGRectMake(0, 0, 100.0, 100.0); - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:rect collectionViewLayout:layout]; - collectionView.asyncDataSource = dataSource; - collectionView.asyncDelegate = delegate; - - ASCollectionViewFlowLayoutInspector *inspector = ASDynamicCast(collectionView.layoutInspector, ASCollectionViewFlowLayoutInspector); - ASSizeRange size = [inspector collectionView:collectionView constrainedSizeForSupplementaryNodeOfKind:UICollectionElementKindSectionHeader atIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; - ASSizeRange sizeCompare = ASSizeRangeMake(CGSizeMake(collectionView.bounds.size.width, 125.0)); - - ASXCTAssertEqualSizeRanges(size, sizeCompare, @"should have a size constrained by the values returned in the delegate implementation"); - - collectionView.asyncDataSource = nil; - collectionView.asyncDelegate = nil; -} - -- (void)testThatItReturnsAVerticalConstrainedSizeFromTheFooterDelegateImplementation -{ - InspectorTestDataSource *dataSource = [[InspectorTestDataSource alloc] init]; - FooterReferenceSizeTestDelegate *delegate = [[FooterReferenceSizeTestDelegate alloc] init]; - - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.scrollDirection = UICollectionViewScrollDirectionVertical; - - CGRect rect = CGRectMake(0, 0, 100.0, 100.0); - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:rect collectionViewLayout:layout]; - collectionView.asyncDataSource = dataSource; - collectionView.asyncDelegate = delegate; - - ASCollectionViewFlowLayoutInspector *inspector = ASDynamicCast(collectionView.layoutInspector, ASCollectionViewFlowLayoutInspector); - ASSizeRange size = [inspector collectionView:collectionView constrainedSizeForSupplementaryNodeOfKind:UICollectionElementKindSectionFooter atIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; - ASSizeRange sizeCompare = ASSizeRangeMake(CGSizeMake(collectionView.bounds.size.width, 125.0)); - ASXCTAssertEqualSizeRanges(size, sizeCompare, @"should have a size constrained by the values returned in the delegate implementation"); - - collectionView.asyncDataSource = nil; - collectionView.asyncDelegate = nil; -} - -// Size implementation - -- (void)testThatItReturnsAVerticalConstrainedSizeFromTheHeaderProperty -{ - InspectorTestDataSource *dataSource = [[InspectorTestDataSource alloc] init]; - - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.scrollDirection = UICollectionViewScrollDirectionVertical; - layout.headerReferenceSize = CGSizeMake(125.0, 125.0); - - CGRect rect = CGRectMake(0, 0, 100.0, 100.0); - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:rect collectionViewLayout:layout]; - collectionView.asyncDataSource = dataSource; - - ASCollectionViewFlowLayoutInspector *inspector = ASDynamicCast(collectionView.layoutInspector, ASCollectionViewFlowLayoutInspector); - ASSizeRange size = [inspector collectionView:collectionView constrainedSizeForSupplementaryNodeOfKind:UICollectionElementKindSectionHeader atIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; - ASSizeRange sizeCompare = ASSizeRangeMake(CGSizeMake(collectionView.bounds.size.width, 125.0)); - ASXCTAssertEqualSizeRanges(size, sizeCompare, @"should have a size constrained by the size set on the layout"); - - collectionView.asyncDataSource = nil; - collectionView.asyncDelegate = nil; -} - -- (void)testThatItReturnsAVerticalConstrainedSizeFromTheFooterProperty -{ - InspectorTestDataSource *dataSource = [[InspectorTestDataSource alloc] init]; - - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.scrollDirection = UICollectionViewScrollDirectionVertical; - layout.footerReferenceSize = CGSizeMake(125.0, 125.0); - - CGRect rect = CGRectMake(0, 0, 100.0, 100.0); - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:rect collectionViewLayout:layout]; - collectionView.asyncDataSource = dataSource; - - ASCollectionViewFlowLayoutInspector *inspector = ASDynamicCast(collectionView.layoutInspector, ASCollectionViewFlowLayoutInspector); - ASSizeRange size = [inspector collectionView:collectionView constrainedSizeForSupplementaryNodeOfKind:UICollectionElementKindSectionFooter atIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; - ASSizeRange sizeCompare = ASSizeRangeMake(CGSizeMake(collectionView.bounds.size.width, 125.0)); - ASXCTAssertEqualSizeRanges(size, sizeCompare, @"should have a size constrained by the size set on the layout"); - - collectionView.asyncDataSource = nil; - collectionView.asyncDelegate = nil; -} - -// Horizontal - -- (void)testThatItReturnsAHorizontalConstrainedSizeFromTheHeaderDelegateImplementation -{ - InspectorTestDataSource *dataSource = [[InspectorTestDataSource alloc] init]; - HeaderReferenceSizeTestDelegate *delegate = [[HeaderReferenceSizeTestDelegate alloc] init]; - - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - - CGRect rect = CGRectMake(0, 0, 100.0, 100.0); - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:rect collectionViewLayout:layout]; - collectionView.asyncDataSource = dataSource; - collectionView.asyncDelegate = delegate; - - ASCollectionViewFlowLayoutInspector *inspector = ASDynamicCast(collectionView.layoutInspector, ASCollectionViewFlowLayoutInspector); - ASSizeRange size = [inspector collectionView:collectionView constrainedSizeForSupplementaryNodeOfKind:UICollectionElementKindSectionHeader atIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; - ASSizeRange sizeCompare = ASSizeRangeMake(CGSizeMake(125.0, collectionView.bounds.size.height)); - ASXCTAssertEqualSizeRanges(size, sizeCompare, @"should have a size constrained by the values returned in the delegate implementation"); - - collectionView.asyncDataSource = nil; - collectionView.asyncDelegate = nil; -} - -- (void)testThatItReturnsAHorizontalConstrainedSizeFromTheFooterDelegateImplementation -{ - InspectorTestDataSource *dataSource = [[InspectorTestDataSource alloc] init]; - FooterReferenceSizeTestDelegate *delegate = [[FooterReferenceSizeTestDelegate alloc] init]; - - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - - CGRect rect = CGRectMake(0, 0, 100.0, 100.0); - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:rect collectionViewLayout:layout]; - collectionView.asyncDataSource = dataSource; - collectionView.asyncDelegate = delegate; - - ASCollectionViewFlowLayoutInspector *inspector = ASDynamicCast(collectionView.layoutInspector, ASCollectionViewFlowLayoutInspector); - ASSizeRange size = [inspector collectionView:collectionView constrainedSizeForSupplementaryNodeOfKind:UICollectionElementKindSectionFooter atIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; - ASSizeRange sizeCompare = ASSizeRangeMake(CGSizeMake(125.0, collectionView.bounds.size.height)); - ASXCTAssertEqualSizeRanges(size, sizeCompare, @"should have a size constrained by the values returned in the delegate implementation"); - - collectionView.asyncDataSource = nil; - collectionView.asyncDelegate = nil; -} - -// Size implementation - -- (void)testThatItReturnsAHorizontalConstrainedSizeFromTheHeaderProperty -{ - InspectorTestDataSource *dataSource = [[InspectorTestDataSource alloc] init]; - - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - layout.headerReferenceSize = CGSizeMake(125.0, 125.0); - - CGRect rect = CGRectMake(0, 0, 100.0, 100.0); - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:rect collectionViewLayout:layout]; - collectionView.asyncDataSource = dataSource; - - ASCollectionViewFlowLayoutInspector *inspector = ASDynamicCast(collectionView.layoutInspector, ASCollectionViewFlowLayoutInspector); - ASSizeRange size = [inspector collectionView:collectionView constrainedSizeForSupplementaryNodeOfKind:UICollectionElementKindSectionHeader atIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; - ASSizeRange sizeCompare = ASSizeRangeMake(CGSizeMake(125.0, collectionView.bounds.size.width)); - ASXCTAssertEqualSizeRanges(size, sizeCompare, @"should have a size constrained by the size set on the layout"); - - collectionView.asyncDataSource = nil; - collectionView.asyncDelegate = nil; -} - -- (void)testThatItReturnsAHorizontalConstrainedSizeFromTheFooterProperty -{ - InspectorTestDataSource *dataSource = [[InspectorTestDataSource alloc] init]; - - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - layout.footerReferenceSize = CGSizeMake(125.0, 125.0); - - CGRect rect = CGRectMake(0, 0, 100.0, 100.0); - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:rect collectionViewLayout:layout]; - collectionView.asyncDataSource = dataSource; - - ASCollectionViewFlowLayoutInspector *inspector = ASDynamicCast(collectionView.layoutInspector, ASCollectionViewFlowLayoutInspector); - ASSizeRange size = [inspector collectionView:collectionView constrainedSizeForSupplementaryNodeOfKind:UICollectionElementKindSectionFooter atIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; - ASSizeRange sizeCompare = ASSizeRangeMake(CGSizeMake(125.0, collectionView.bounds.size.height)); - ASXCTAssertEqualSizeRanges(size, sizeCompare, @"should have a size constrained by the size set on the layout"); - - collectionView.asyncDataSource = nil; - collectionView.asyncDelegate = nil; -} - -- (void)testThatItReturnsZeroSizeWhenNoReferenceSizeIsImplemented -{ - InspectorTestDataSource *dataSource = [[InspectorTestDataSource alloc] init]; - HeaderReferenceSizeTestDelegate *delegate = [[HeaderReferenceSizeTestDelegate alloc] init]; - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - collectionView.asyncDataSource = dataSource; - collectionView.asyncDelegate = delegate; - ASCollectionViewFlowLayoutInspector *inspector = ASDynamicCast(collectionView.layoutInspector, ASCollectionViewFlowLayoutInspector); - ASSizeRange size = [inspector collectionView:collectionView constrainedSizeForSupplementaryNodeOfKind:UICollectionElementKindSectionFooter atIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; - ASSizeRange sizeCompare = ASSizeRangeMake(CGSizeZero, CGSizeZero); - XCTAssert(CGSizeEqualToSize(size.min, sizeCompare.min) && CGSizeEqualToSize(size.max, sizeCompare.max), @"should have a zero size"); - - collectionView.asyncDataSource = nil; - collectionView.asyncDelegate = nil; -} - -#pragma mark - #collectionView:supplementaryNodesOfKind:inSection: - -- (void)testThatItReturnsOneWhenAValidSizeIsImplementedOnTheDelegate -{ - InspectorTestDataSource *dataSource = [[InspectorTestDataSource alloc] init]; - HeaderReferenceSizeTestDelegate *delegate = [[HeaderReferenceSizeTestDelegate alloc] init]; - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - collectionView.asyncDataSource = dataSource; - collectionView.asyncDelegate = delegate; - ASCollectionViewFlowLayoutInspector *inspector = ASDynamicCast(collectionView.layoutInspector, ASCollectionViewFlowLayoutInspector); - NSUInteger count = [inspector collectionView:collectionView supplementaryNodesOfKind:UICollectionElementKindSectionHeader inSection:0]; - XCTAssert(count == 1, @"should have a header supplementary view"); - - collectionView.asyncDataSource = nil; - collectionView.asyncDelegate = nil; -} - -- (void)testThatItReturnsOneWhenAValidSizeIsImplementedOnTheLayout -{ - InspectorTestDataSource *dataSource = [[InspectorTestDataSource alloc] init]; - HeaderReferenceSizeTestDelegate *delegate = [[HeaderReferenceSizeTestDelegate alloc] init]; - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.footerReferenceSize = CGSizeMake(125.0, 125.0); - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - collectionView.asyncDataSource = dataSource; - collectionView.asyncDelegate = delegate; - ASCollectionViewFlowLayoutInspector *inspector = ASDynamicCast(collectionView.layoutInspector, ASCollectionViewFlowLayoutInspector); - NSUInteger count = [inspector collectionView:collectionView supplementaryNodesOfKind:UICollectionElementKindSectionFooter inSection:0]; - XCTAssert(count == 1, @"should have a footer supplementary view"); - - collectionView.asyncDataSource = nil; - collectionView.asyncDelegate = nil; -} - -- (void)testThatItReturnsNoneWhenNoReferenceSizeIsImplemented -{ - InspectorTestDataSource *dataSource = [[InspectorTestDataSource alloc] init]; - HeaderReferenceSizeTestDelegate *delegate = [[HeaderReferenceSizeTestDelegate alloc] init]; - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - collectionView.asyncDataSource = dataSource; - collectionView.asyncDelegate = delegate; - ASCollectionViewFlowLayoutInspector *inspector = ASDynamicCast(collectionView.layoutInspector, ASCollectionViewFlowLayoutInspector); - NSUInteger count = [inspector collectionView:collectionView supplementaryNodesOfKind:UICollectionElementKindSectionFooter inSection:0]; - XCTAssert(count == 0, @"should not have a footer supplementary view"); - - collectionView.asyncDataSource = nil; - collectionView.asyncDelegate = nil; -} - -- (void)testThatItThrowsIfNodeConstrainedSizeIsImplementedOnDataSourceButNotOnDelegateLayoutInspector -{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - ASCollectionNode *node = [[ASCollectionNode alloc] initWithCollectionViewLayout:layout]; - ASCollectionView *collectionView = node.view; - - id dataSourceAndDelegate = [OCMockObject mockForProtocol:@protocol(InspectorTestDataSourceDelegateProtocol)]; - ASSizeRange constrainedSize = ASSizeRangeMake(CGSizeZero, CGSizeZero); - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:0]; - NSValue *value = [NSValue value:&constrainedSize withObjCType:@encode(ASSizeRange)]; - [[[dataSourceAndDelegate stub] andReturnValue:value] collectionNode:node constrainedSizeForItemAtIndexPath:indexPath]; - node.dataSource = dataSourceAndDelegate; - - id delegate = [InspectorTestDataSourceDelegateWithoutNodeConstrainedSize new]; - node.delegate = delegate; - - ASCollectionViewLayoutInspector *inspector = [[ASCollectionViewLayoutInspector alloc] init]; - - collectionView.layoutInspector = inspector; - XCTAssertThrows([inspector collectionView:collectionView constrainedSizeForNodeAtIndexPath:indexPath]); - - node.delegate = dataSourceAndDelegate; - XCTAssertNoThrow([inspector collectionView:collectionView constrainedSizeForNodeAtIndexPath:indexPath]); -} - -- (void)testThatItThrowsIfNodeConstrainedSizeIsImplementedOnDataSourceButNotOnDelegateFlowLayoutInspector -{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - - ASCollectionNode *node = [[ASCollectionNode alloc] initWithCollectionViewLayout:layout]; - ASCollectionView *collectionView = node.view; - id dataSourceAndDelegate = [OCMockObject mockForProtocol:@protocol(InspectorTestDataSourceDelegateProtocol)]; - ASSizeRange constrainedSize = ASSizeRangeMake(CGSizeZero, CGSizeZero); - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:0]; - NSValue *value = [NSValue value:&constrainedSize withObjCType:@encode(ASSizeRange)]; - - [[[dataSourceAndDelegate stub] andReturnValue:value] collectionNode:node constrainedSizeForItemAtIndexPath:indexPath]; - node.dataSource = dataSourceAndDelegate; - id delegate = [InspectorTestDataSourceDelegateWithoutNodeConstrainedSize new]; - - node.delegate = delegate; - ASCollectionViewFlowLayoutInspector *inspector = collectionView.layoutInspector; - - XCTAssertThrows([inspector collectionView:collectionView constrainedSizeForNodeAtIndexPath:indexPath]); - - node.delegate = dataSourceAndDelegate; - XCTAssertNoThrow([inspector collectionView:collectionView constrainedSizeForNodeAtIndexPath:indexPath]); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASCollectionViewTests.mm b/submodules/AsyncDisplayKit/Tests/ASCollectionViewTests.mm deleted file mode 100644 index 3ff5af4409..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASCollectionViewTests.mm +++ /dev/null @@ -1,1173 +0,0 @@ -// -// ASCollectionViewTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import "ASDisplayNodeTestsHelper.h" - -@interface ASTextCellNodeWithSetSelectedCounter : ASTextCellNode - -@property (nonatomic) NSUInteger setSelectedCounter; -@property (nonatomic) NSUInteger applyLayoutAttributesCount; - -@end - -@implementation ASTextCellNodeWithSetSelectedCounter - -- (void)setSelected:(BOOL)selected -{ - [super setSelected:selected]; - _setSelectedCounter++; -} - -- (void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes -{ - _applyLayoutAttributesCount++; -} - -@end - -@interface ASTestSectionContext : NSObject - -@property (nonatomic) NSInteger sectionIndex; -@property (nonatomic) NSInteger sectionGeneration; - -@end - -@implementation ASTestSectionContext - -@synthesize sectionName = _sectionName, collectionView = _collectionView; - -@end - -@interface ASCollectionViewTestDelegate : NSObject - -@property (nonatomic) NSInteger sectionGeneration; -@property (nonatomic) void(^willBeginBatchFetch)(ASBatchContext *); - -@end - -@implementation ASCollectionViewTestDelegate { - @package - std::vector _itemCounts; -} - -- (id)initWithNumberOfSections:(NSInteger)numberOfSections numberOfItemsInSection:(NSInteger)numberOfItemsInSection { - if (self = [super init]) { - for (NSInteger i = 0; i < numberOfSections; i++) { - _itemCounts.push_back(numberOfItemsInSection); - } - _sectionGeneration = 1; - } - - return self; -} - -- (ASCellNode *)collectionView:(ASCollectionView *)collectionView nodeForItemAtIndexPath:(NSIndexPath *)indexPath { - ASTextCellNodeWithSetSelectedCounter *textCellNode = [ASTextCellNodeWithSetSelectedCounter new]; - textCellNode.text = indexPath.description; - - return textCellNode; -} - - -- (ASCellNodeBlock)collectionView:(ASCollectionView *)collectionView nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath { - return ^{ - ASTextCellNodeWithSetSelectedCounter *textCellNode = [ASTextCellNodeWithSetSelectedCounter new]; - textCellNode.text = indexPath.description; - return textCellNode; - }; -} - -- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { - return _itemCounts.size(); -} - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return _itemCounts[section]; -} - -- (id)collectionNode:(ASCollectionNode *)collectionNode contextForSection:(NSInteger)section -{ - ASTestSectionContext *context = [[ASTestSectionContext alloc] init]; - context.sectionGeneration = _sectionGeneration; - context.sectionIndex = section; - return context; -} - -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section -{ - return CGSizeMake(100, 100); -} - -- (ASCellNode *)collectionView:(ASCollectionView *)collectionView nodeForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath -{ - return [[ASTextCellNodeWithSetSelectedCounter alloc] init]; -} - -- (void)collectionNode:(ASCollectionNode *)collectionNode willBeginBatchFetchWithContext:(ASBatchContext *)context -{ - if (_willBeginBatchFetch != nil) { - _willBeginBatchFetch(context); - } else { - [context cancelBatchFetching]; - } -} - -@end - -@interface ASCollectionViewTestController: UIViewController - -@property (nonatomic) ASCollectionViewTestDelegate *asyncDelegate; -@property (nonatomic) ASCollectionView *collectionView; -@property (nonatomic) ASCollectionNode *collectionNode; - -@end - -@implementation ASCollectionViewTestController - -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Populate these immediately so that they're not unexpectedly nil during tests. - self.asyncDelegate = [[ASCollectionViewTestDelegate alloc] initWithNumberOfSections:10 numberOfItemsInSection:10]; - id realLayout = [UICollectionViewFlowLayout new]; - id mockLayout = [OCMockObject partialMockForObject:realLayout]; - self.collectionNode = [[ASCollectionNode alloc] initWithFrame:self.view.bounds collectionViewLayout:mockLayout]; - self.collectionView = self.collectionNode.view; - self.collectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - self.collectionNode.dataSource = self.asyncDelegate; - self.collectionNode.delegate = self.asyncDelegate; - - [self.collectionNode registerSupplementaryNodeOfKind:UICollectionElementKindSectionHeader]; - [self.view addSubview:self.collectionView]; - } - return self; -} - -@end - -@interface ASCollectionView (InternalTesting) - -- (NSArray *)dataController:(ASDataController *)dataController supplementaryNodeKindsInSections:(NSIndexSet *)sections; - -@end - -@interface ASCollectionViewTests : XCTestCase - -@end - -@implementation ASCollectionViewTests - -- (void)tearDown -{ - // We can't prevent the system from retaining windows, but we can at least clear them out to avoid - // pollution between test cases. - for (UIWindow *window in [UIApplication sharedApplication].windows) { - for (UIView *subview in window.subviews) { - [subview removeFromSuperview]; - } - } - [super tearDown]; -} - -- (void)testDataSourceImplementsNecessaryMethods -{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - - id dataSource = [NSObject new]; - XCTAssertThrows((collectionView.asyncDataSource = dataSource)); - - dataSource = [OCMockObject niceMockForProtocol:@protocol(ASCollectionDataSource)]; - XCTAssertNoThrow((collectionView.asyncDataSource = dataSource)); -} - -- (void)testThatItSetsALayoutInspectorForFlowLayouts -{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - XCTAssert(collectionView.layoutInspector != nil, @"should automatically set a layout delegate for flow layouts"); - XCTAssert([collectionView.layoutInspector isKindOfClass:[ASCollectionViewFlowLayoutInspector class]], @"should have a flow layout inspector by default"); -} - -- (void)testThatADefaultLayoutInspectorIsProvidedForCustomLayouts -{ - UICollectionViewLayout *layout = [[UICollectionViewLayout alloc] init]; - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - XCTAssert(collectionView.layoutInspector != nil, @"should automatically set a layout delegate for flow layouts"); - XCTAssert([collectionView.layoutInspector isKindOfClass:[ASCollectionViewLayoutInspector class]], @"should have a default layout inspector by default"); -} - -- (void)testThatRegisteringASupplementaryNodeStoresItForIntrospection -{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - [collectionView registerSupplementaryNodeOfKind:UICollectionElementKindSectionHeader]; - XCTAssertEqualObjects([collectionView dataController:nil supplementaryNodeKindsInSections:[NSIndexSet indexSetWithIndex:0]], @[UICollectionElementKindSectionHeader]); -} - -- (void)testReloadIfNeeded -{ - __block ASCollectionViewTestController *testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; - __block ASCollectionViewTestDelegate *del = testController.asyncDelegate; - __block ASCollectionNode *cn = testController.collectionNode; - - void (^reset)() = ^void() { - testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; - del = testController.asyncDelegate; - cn = testController.collectionNode; - }; - - // Check if the number of sections matches the data source - XCTAssertEqual(cn.numberOfSections, del->_itemCounts.size(), @"Section count doesn't match the data source"); - - // Reset everything and then check if numberOfItemsInSection matches the data source - reset(); - XCTAssertEqual([cn numberOfItemsInSection:0], del->_itemCounts[0], @"Number of items in Section doesn't match the data source"); - - // Reset and check if we can get the node corresponding to a specific indexPath - reset(); - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:0]; - ASTextCellNodeWithSetSelectedCounter *node = (ASTextCellNodeWithSetSelectedCounter*)[cn nodeForItemAtIndexPath:indexPath]; - XCTAssertTrue([node.text isEqualToString:indexPath.description], @"Node's text should match the initial text it was created with"); -} - -- (void)testSelection -{ - ASCollectionViewTestController *testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; - UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - [window setRootViewController:testController]; - [window makeKeyAndVisible]; - - [testController.collectionNode reloadData]; - [testController.collectionNode waitUntilAllUpdatesAreProcessed]; - [testController.collectionView layoutIfNeeded]; - - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:0]; - ASCellNode *node = [testController.collectionView nodeForItemAtIndexPath:indexPath]; - - NSInteger setSelectedCount = 0; - // selecting node should select cell - node.selected = YES; - ++setSelectedCount; - XCTAssertTrue([[testController.collectionView indexPathsForSelectedItems] containsObject:indexPath], @"Selecting node should update cell selection."); - - // deselecting node should deselect cell - node.selected = NO; - ++setSelectedCount; - XCTAssertTrue([[testController.collectionView indexPathsForSelectedItems] isEqualToArray:@[]], @"Deselecting node should update cell selection."); - - // selecting cell via collectionNode should select node - ++setSelectedCount; - [testController.collectionNode selectItemAtIndexPath:indexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone]; - XCTAssertTrue(node.isSelected == YES, @"Selecting cell should update node selection."); - - // deselecting cell via collectionNode should deselect node - ++setSelectedCount; - [testController.collectionNode deselectItemAtIndexPath:indexPath animated:NO]; - XCTAssertTrue(node.isSelected == NO, @"Deselecting cell should update node selection."); - - // select the cell again, scroll down and back up, and check that the state persisted - [testController.collectionNode selectItemAtIndexPath:indexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone]; - ++setSelectedCount; - XCTAssertTrue(node.isSelected == YES, @"Selecting cell should update node selection."); - - testController.collectionNode.allowsMultipleSelection = YES; - - NSIndexPath *indexPath2 = [NSIndexPath indexPathForItem:1 inSection:0]; - ASCellNode *node2 = [testController.collectionView nodeForItemAtIndexPath:indexPath2]; - - // selecting cell via collectionNode should select node - [testController.collectionNode selectItemAtIndexPath:indexPath2 animated:NO scrollPosition:UICollectionViewScrollPositionNone]; - XCTAssertTrue(node2.isSelected == YES, @"Selecting cell should update node selection."); - - XCTAssertTrue([[testController.collectionView indexPathsForSelectedItems] containsObject:indexPath] && - [[testController.collectionView indexPathsForSelectedItems] containsObject:indexPath2], - @"Selecting multiple cells should result in those cells being in the array of selectedItems."); - - // deselecting node should deselect cell - node.selected = NO; - ++setSelectedCount; - XCTAssertTrue(![[testController.collectionView indexPathsForSelectedItems] containsObject:indexPath] && - [[testController.collectionView indexPathsForSelectedItems] containsObject:indexPath2], @"Deselecting node should update array of selectedItems."); - - node.selected = YES; - ++setSelectedCount; - XCTAssertTrue([[testController.collectionView indexPathsForSelectedItems] containsObject:indexPath], @"Selecting node should update cell selection."); - - node2.selected = NO; - XCTAssertTrue([[testController.collectionView indexPathsForSelectedItems] containsObject:indexPath] && - ![[testController.collectionView indexPathsForSelectedItems] containsObject:indexPath2], @"Deselecting node should update array of selectedItems."); - - // reload cell (-prepareForReuse is called) & check that selected state is preserved - [testController.collectionView setContentOffset:CGPointMake(0,testController.collectionView.bounds.size.height)]; - [testController.collectionView layoutIfNeeded]; - [testController.collectionView setContentOffset:CGPointMake(0,0)]; - [testController.collectionView layoutIfNeeded]; - XCTAssertTrue(node.isSelected == YES, @"Reloaded cell should preserve state."); - - // deselecting cell should deselect node - UICollectionViewCell *cell = [testController.collectionView cellForItemAtIndexPath:indexPath]; - cell.selected = NO; - XCTAssertTrue(node.isSelected == NO, @"Deselecting cell should update node selection."); - - // check setSelected not called extra times - XCTAssertTrue([(ASTextCellNodeWithSetSelectedCounter *)node setSelectedCounter] == (setSelectedCount + 1), @"setSelected: should not be called on node multiple times."); -} - -- (void)testTuningParametersWithExplicitRangeMode -{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - ASCollectionNode *collectionNode = [[ASCollectionNode alloc] initWithCollectionViewLayout:layout]; - - ASRangeTuningParameters minimumRenderParams = { .leadingBufferScreenfuls = 0.1, .trailingBufferScreenfuls = 0.1 }; - ASRangeTuningParameters minimumPreloadParams = { .leadingBufferScreenfuls = 0.1, .trailingBufferScreenfuls = 0.1 }; - ASRangeTuningParameters fullRenderParams = { .leadingBufferScreenfuls = 0.5, .trailingBufferScreenfuls = 0.5 }; - ASRangeTuningParameters fullPreloadParams = { .leadingBufferScreenfuls = 1, .trailingBufferScreenfuls = 0.5 }; - - [collectionNode setTuningParameters:minimumRenderParams forRangeMode:ASLayoutRangeModeMinimum rangeType:ASLayoutRangeTypeDisplay]; - [collectionNode setTuningParameters:minimumPreloadParams forRangeMode:ASLayoutRangeModeMinimum rangeType:ASLayoutRangeTypePreload]; - [collectionNode setTuningParameters:fullRenderParams forRangeMode:ASLayoutRangeModeFull rangeType:ASLayoutRangeTypeDisplay]; - [collectionNode setTuningParameters:fullPreloadParams forRangeMode:ASLayoutRangeModeFull rangeType:ASLayoutRangeTypePreload]; - - XCTAssertTrue(ASRangeTuningParametersEqualToRangeTuningParameters(minimumRenderParams, - [collectionNode tuningParametersForRangeMode:ASLayoutRangeModeMinimum rangeType:ASLayoutRangeTypeDisplay])); - XCTAssertTrue(ASRangeTuningParametersEqualToRangeTuningParameters(minimumPreloadParams, - [collectionNode tuningParametersForRangeMode:ASLayoutRangeModeMinimum rangeType:ASLayoutRangeTypePreload])); - XCTAssertTrue(ASRangeTuningParametersEqualToRangeTuningParameters(fullRenderParams, - [collectionNode tuningParametersForRangeMode:ASLayoutRangeModeFull rangeType:ASLayoutRangeTypeDisplay])); - XCTAssertTrue(ASRangeTuningParametersEqualToRangeTuningParameters(fullPreloadParams, - [collectionNode tuningParametersForRangeMode:ASLayoutRangeModeFull rangeType:ASLayoutRangeTypePreload])); -} - -- (void)testTuningParameters -{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - ASCollectionView *collectionView = [[ASCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; - - ASRangeTuningParameters renderParams = { .leadingBufferScreenfuls = 1.2, .trailingBufferScreenfuls = 3.2 }; - ASRangeTuningParameters preloadParams = { .leadingBufferScreenfuls = 4.3, .trailingBufferScreenfuls = 2.3 }; - - [collectionView setTuningParameters:renderParams forRangeType:ASLayoutRangeTypeDisplay]; - [collectionView setTuningParameters:preloadParams forRangeType:ASLayoutRangeTypePreload]; - - XCTAssertTrue(ASRangeTuningParametersEqualToRangeTuningParameters(renderParams, [collectionView tuningParametersForRangeType:ASLayoutRangeTypeDisplay])); - XCTAssertTrue(ASRangeTuningParametersEqualToRangeTuningParameters(preloadParams, [collectionView tuningParametersForRangeType:ASLayoutRangeTypePreload])); -} - -// Informations to test: https://github.com/TextureGroup/Texture/issues/1094 -- (void)testThatCollectionNodeCanHandleNilRangeController -{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - ASCollectionNode *collectionNode = [[ASCollectionNode alloc] initWithCollectionViewLayout:layout]; - [collectionNode recursivelySetInterfaceState:ASInterfaceStateDisplay]; - [collectionNode setHierarchyState:ASHierarchyStateRangeManaged]; - [collectionNode recursivelySetInterfaceState:ASInterfaceStateNone]; - ASCATransactionQueueWait(nil); -} - -/** - * This may seem silly, but we had issues where the runtime sometimes wouldn't correctly report - * conformances declared on categories. - */ -- (void)testThatCollectionNodeConformsToExpectedProtocols -{ - ASCollectionNode *node = [[ASCollectionNode alloc] initWithFrame:CGRectZero collectionViewLayout:[[UICollectionViewFlowLayout alloc] init]]; - XCTAssert([node conformsToProtocol:@protocol(ASRangeControllerUpdateRangeProtocol)]); -} - -#pragma mark - Update Validations - -#define updateValidationTestPrologue \ - ASCollectionViewTestController *testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil];\ - __unused ASCollectionViewTestDelegate *del = testController.asyncDelegate;\ - __unused ASCollectionView *cv = testController.collectionView;\ - ASCollectionNode *cn = testController.collectionNode;\ - UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];\ - [window makeKeyAndVisible]; \ - window.rootViewController = testController;\ - \ - [cn reloadData];\ - [cn waitUntilAllUpdatesAreProcessed]; \ - [testController.collectionView layoutIfNeeded]; - -- (void)testThatSubmittingAValidInsertDoesNotThrowAnException -{ - updateValidationTestPrologue - NSInteger sectionCount = del->_itemCounts.size(); - - del->_itemCounts[sectionCount - 1]++; - XCTAssertNoThrow([cv insertItemsAtIndexPaths:@[ [NSIndexPath indexPathForItem:0 inSection:sectionCount - 1] ]]); -} - -- (void)testThatSubmittingAValidReloadDoesNotThrowAnException -{ - updateValidationTestPrologue - NSInteger sectionCount = del->_itemCounts.size(); - - XCTAssertNoThrow([cv reloadItemsAtIndexPaths:@[ [NSIndexPath indexPathForItem:0 inSection:sectionCount - 1] ]]); -} - -- (void)testThatSubmittingAnInvalidInsertThrowsAnException -{ - updateValidationTestPrologue - NSInteger sectionCount = del->_itemCounts.size(); - - XCTAssertThrows([cv insertItemsAtIndexPaths:@[ [NSIndexPath indexPathForItem:0 inSection:sectionCount + 1] ]]); -} - -- (void)testThatSubmittingAnInvalidDeleteThrowsAnException -{ - updateValidationTestPrologue - NSInteger sectionCount = del->_itemCounts.size(); - - XCTAssertThrows([cv deleteItemsAtIndexPaths:@[ [NSIndexPath indexPathForItem:0 inSection:sectionCount + 1] ]]); -} - -- (void)testThatDeletingAndReloadingTheSameItemThrowsAnException -{ - updateValidationTestPrologue - - XCTAssertThrows([cv performBatchUpdates:^{ - NSArray *indexPaths = @[ [NSIndexPath indexPathForItem:0 inSection:0] ]; - [cv deleteItemsAtIndexPaths:indexPaths]; - [cv reloadItemsAtIndexPaths:indexPaths]; - } completion:nil]); -} - -- (void)testThatHavingAnIncorrectSectionCountThrowsAnException -{ - updateValidationTestPrologue - - XCTAssertThrows([cv deleteSections:[NSIndexSet indexSetWithIndex:0]]); -} - -- (void)testThatHavingAnIncorrectItemCountThrowsAnException -{ - updateValidationTestPrologue - - XCTAssertThrows([cv deleteItemsAtIndexPaths:@[ [NSIndexPath indexPathForItem:0 inSection:0] ]]); -} - -- (void)testThatHavingAnIncorrectItemCountWithNoUpdatesThrowsAnException -{ - updateValidationTestPrologue - - XCTAssertThrows([cv performBatchUpdates:^{ - del->_itemCounts[0]++; - } completion:nil]); -} - -- (void)testThatInsertingAnInvalidSectionThrowsAnException -{ - updateValidationTestPrologue - NSInteger sectionCount = del->_itemCounts.size(); - - del->_itemCounts.push_back(10); - XCTAssertThrows([cv performBatchUpdates:^{ - [cv insertSections:[NSIndexSet indexSetWithIndex:sectionCount + 1]]; - } completion:nil]); -} - -- (void)testThatDeletingAndReloadingASectionThrowsAnException -{ - updateValidationTestPrologue - NSInteger sectionCount = del->_itemCounts.size(); - - del->_itemCounts.pop_back(); - XCTAssertThrows([cv performBatchUpdates:^{ - NSIndexSet *sections = [NSIndexSet indexSetWithIndex:sectionCount - 1]; - [cv reloadSections:sections]; - [cv deleteSections:sections]; - } completion:nil]); -} - -- (void)testCellNodeLayoutAttributes -{ - updateValidationTestPrologue - NSSet *nodeBatch1 = [NSSet setWithArray:[cn visibleNodes]]; - XCTAssertGreaterThan(nodeBatch1.count, 0); - - NSArray *visibleLayoutAttributesBatch1 = [cv.collectionViewLayout layoutAttributesForElementsInRect:cv.bounds]; - XCTAssertGreaterThan(visibleLayoutAttributesBatch1.count, 0); - - // Expect all visible nodes get 1 applyLayoutAttributes and have a non-nil value. - for (ASTextCellNodeWithSetSelectedCounter *node in nodeBatch1) { - XCTAssertEqual(node.applyLayoutAttributesCount, 1, @"Expected applyLayoutAttributes to be called exactly once for visible nodes."); - XCTAssertNotNil(node.layoutAttributes, @"Expected layoutAttributes to be non-nil for visible cell node."); - } - - for (UICollectionViewLayoutAttributes *layoutAttributes in visibleLayoutAttributesBatch1) { - if (layoutAttributes.representedElementCategory != UICollectionElementCategorySupplementaryView) { - continue; - } - ASTextCellNodeWithSetSelectedCounter *node = (ASTextCellNodeWithSetSelectedCounter *)[cv supplementaryNodeForElementKind:layoutAttributes.representedElementKind atIndexPath:layoutAttributes.indexPath]; - XCTAssertEqual(node.applyLayoutAttributesCount, 1, @"Expected applyLayoutAttributes to be called exactly once for visible supplementary nodes."); - XCTAssertNotNil(node.layoutAttributes, @"Expected layoutAttributes to be non-nil for visible supplementary node."); - } - - // Scroll to next batch of items. - NSIndexPath *nextIP = [NSIndexPath indexPathForItem:nodeBatch1.count inSection:0]; - [cv scrollToItemAtIndexPath:nextIP atScrollPosition:UICollectionViewScrollPositionTop animated:NO]; - [cv layoutIfNeeded]; - - // Ensure we scrolled far enough that all the old ones are offscreen. - NSSet *nodeBatch2 = [NSSet setWithArray:[cn visibleNodes]]; - XCTAssertFalse([nodeBatch1 intersectsSet:nodeBatch2], @"Expected to scroll far away enough that all nodes are replaced."); - - // Now the nodes are no longer visible, expect their layout attributes are nil but not another applyLayoutAttributes call. - for (ASTextCellNodeWithSetSelectedCounter *node in nodeBatch1) { - XCTAssertEqual(node.applyLayoutAttributesCount, 1, @"Expected applyLayoutAttributes to be called exactly once for visible nodes, even after node is removed."); - XCTAssertNil(node.layoutAttributes, @"Expected layoutAttributes to be nil for removed cell node."); - } - - for (UICollectionViewLayoutAttributes *layoutAttributes in visibleLayoutAttributesBatch1) { - if (layoutAttributes.representedElementCategory != UICollectionElementCategorySupplementaryView) { - continue; - } - ASTextCellNodeWithSetSelectedCounter *node = (ASTextCellNodeWithSetSelectedCounter *)[cv supplementaryNodeForElementKind:layoutAttributes.representedElementKind atIndexPath:layoutAttributes.indexPath]; - XCTAssertEqual(node.applyLayoutAttributesCount, 1, @"Expected applyLayoutAttributes to be called exactly once for visible supplementary nodes, even after node is removed."); - XCTAssertNil(node.layoutAttributes, @"Expected layoutAttributes to be nil for removed supplementary node."); - } -} - -- (void)testCellNodeIndexPathConsistency -{ - updateValidationTestPrologue - - // Test with a visible cell - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:2 inSection:0]; - ASCellNode *cell = [cn nodeForItemAtIndexPath:indexPath]; - - // Check if cell's indexPath corresponds to the indexPath being tested - XCTAssertTrue(cell.indexPath.section == indexPath.section && cell.indexPath.item == indexPath.item, @"Expected the cell's indexPath to be the same as the indexPath being tested."); - - // Remove an item prior to the cell's indexPath from the same section and check for indexPath consistency - --del->_itemCounts[indexPath.section]; - [cn deleteItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:0 inSection:indexPath.section]]]; - XCTAssertTrue(cell.indexPath.section == indexPath.section && cell.indexPath.item == (indexPath.item - 1), @"Expected the cell's indexPath to be updated once a cell with a lower index is deleted."); - - // Remove the section that includes the indexPath and check if the cell's indexPath is now nil - del->_itemCounts.erase(del->_itemCounts.begin()); - [cn deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section]]; - XCTAssertNil(cell.indexPath, @"Expected the cell's indexPath to be nil once the section that contains the node is deleted."); - - // Run the same tests but with a non-displayed cell - indexPath = [NSIndexPath indexPathForItem:2 inSection:(del->_itemCounts.size() - 1)]; - cell = [cn nodeForItemAtIndexPath:indexPath]; - - // Check if cell's indexPath corresponds to the indexPath being tested - XCTAssertTrue(cell.indexPath.section == indexPath.section && cell.indexPath.item == indexPath.item, @"Expected the cell's indexPath to be the same as the indexPath in question."); - - // Remove an item prior to the cell's indexPath from the same section and check for indexPath consistency - --del->_itemCounts[indexPath.section]; - [cn deleteItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:0 inSection:indexPath.section]]]; - XCTAssertTrue(cell.indexPath.section == indexPath.section && cell.indexPath.item == (indexPath.item - 1), @"Expected the cell's indexPath to be updated once a cell with a lower index is deleted."); - - // Remove the section that includes the indexPath and check if the cell's indexPath is now nil - del->_itemCounts.pop_back(); - [cn deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section]]; - XCTAssertNil(cell.indexPath, @"Expected the cell's indexPath to be nil once the section that contains the node is deleted."); -} - -/** - * https://github.com/facebook/AsyncDisplayKit/issues/2011 - * - * If this ever becomes a pain to maintain, drop it. The underlying issue is tested by testThatLayerBackedSubnodesAreMarkedInvisibleBeforeDeallocWhenSupernodesViewIsRemovedFromHierarchyWhileBeingRetained - */ -- (void)testThatDisappearingSupplementariesWithLayerBackedNodesDontFailAssert -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - UICollectionViewLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - ASCollectionNode *cn = [[ASCollectionNode alloc] initWithFrame:window.bounds collectionViewLayout:layout]; - ASCollectionView *cv = cn.view; - - - __unused NSMutableSet *keepaliveNodes = [NSMutableSet set]; - id dataSource = [OCMockObject niceMockForProtocol:@protocol(ASCollectionDataSource)]; - static int nodeIdx = 0; - [[[dataSource stub] andDo:^(NSInvocation *invocation) { - __autoreleasing ASCellNode *suppNode = [[ASCellNode alloc] init]; - int thisNodeIdx = nodeIdx++; - suppNode.debugName = [NSString stringWithFormat:@"Cell #%d", thisNodeIdx]; - [keepaliveNodes addObject:suppNode]; - - ASDisplayNode *layerBacked = [[ASDisplayNode alloc] init]; - layerBacked.layerBacked = YES; - layerBacked.debugName = [NSString stringWithFormat:@"Subnode #%d", thisNodeIdx]; - [suppNode addSubnode:layerBacked]; - [invocation setReturnValue:&suppNode]; - }] collectionNode:cn nodeForSupplementaryElementOfKind:UICollectionElementKindSectionHeader atIndexPath:OCMOCK_ANY]; - [[[dataSource stub] andReturnValue:[NSNumber numberWithInteger:1]] numberOfSectionsInCollectionView:cv]; - cv.asyncDataSource = dataSource; - - id delegate = [OCMockObject niceMockForProtocol:@protocol(UICollectionViewDelegateFlowLayout)]; - [[[delegate stub] andReturnValue:[NSValue valueWithCGSize:CGSizeMake(100, 100)]] collectionView:cv layout:OCMOCK_ANY referenceSizeForHeaderInSection:0]; - cv.asyncDelegate = delegate; - - [cv registerSupplementaryNodeOfKind:UICollectionElementKindSectionHeader]; - [window addSubview:cv]; - - [window makeKeyAndVisible]; - - for (NSInteger i = 0; i < 2; i++) { - // NOTE: reloadData and waitUntilAllUpdatesAreProcessed are not sufficient here!! - XCTestExpectation *done = [self expectationWithDescription:[NSString stringWithFormat:@"Reload #%td complete", i]]; - [cn reloadDataWithCompletion:^{ - [done fulfill]; - }]; - [self waitForExpectationsWithTimeout:1 handler:nil]; - } - -} - -- (void)testThatNodeCalculatedSizesAreUpdatedBeforeFirstPrepareLayoutAfterRotation -{ - updateValidationTestPrologue - id layout = cv.collectionViewLayout; - CGSize initialItemSize = [cv nodeForItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]].calculatedSize; - CGSize initialCVSize = cv.bounds.size; - - // Capture the node size before first call to prepareLayout after frame change. - __block CGSize itemSizeAtFirstLayout = CGSizeZero; - __block CGSize boundsSizeAtFirstLayout = CGSizeZero; - [[[[layout expect] andDo:^(NSInvocation *) { - itemSizeAtFirstLayout = [cv nodeForItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]].calculatedSize; - boundsSizeAtFirstLayout = [cv bounds].size; - }] andForwardToRealObject] prepareLayout]; - - // Rotate the device - UIDeviceOrientation oldDeviceOrientation = [[UIDevice currentDevice] orientation]; - [[UIDevice currentDevice] setValue:@(UIDeviceOrientationLandscapeLeft) forKey:@"orientation"]; - - CGSize finalItemSize = [cv nodeForItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]].calculatedSize; - CGSize finalCVSize = cv.bounds.size; - XCTAssertNotEqualObjects(NSStringFromCGSize(initialItemSize), NSStringFromCGSize(itemSizeAtFirstLayout)); - XCTAssertNotEqualObjects(NSStringFromCGSize(initialCVSize), NSStringFromCGSize(boundsSizeAtFirstLayout)); - XCTAssertEqualObjects(NSStringFromCGSize(itemSizeAtFirstLayout), NSStringFromCGSize(finalItemSize)); - XCTAssertEqualObjects(NSStringFromCGSize(boundsSizeAtFirstLayout), NSStringFromCGSize(finalCVSize)); - [layout verify]; - - // Teardown - [[UIDevice currentDevice] setValue:@(oldDeviceOrientation) forKey:@"orientation"]; -} - -/** - * See corresponding test in ASUICollectionViewTests - * - * @discussion Currently, we do not replicate UICollectionView's call order (outer, inner0, inner1, ...) - * and instead call (inner0, inner1, outer, ...). This is because we primarily provide a - * beginUpdates/endUpdatesWithCompletion: interface (like UITableView). With UICollectionView's - * performBatchUpdates:completion:, the completion block is enqueued at -beginUpdates time. - * With our tableView-like scheme, the completion block is provided at -endUpdates time - * and it is naturally enqueued at this time. It is assumed that this is an acceptable deviation, - * and that developers do not expect a particular completion order guarantee. - */ -- (void)testThatNestedBatchCompletionsAreCalledInOrder -{ - ASCollectionViewTestController *testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; - - ASCollectionView *cv = testController.collectionView; - - XCTestExpectation *inner0 = [self expectationWithDescription:@"Inner completion 0 is called"]; - XCTestExpectation *inner1 = [self expectationWithDescription:@"Inner completion 1 is called"]; - XCTestExpectation *outer = [self expectationWithDescription:@"Outer completion is called"]; - - NSMutableArray *completions = [NSMutableArray array]; - - [cv performBatchUpdates:^{ - [cv performBatchUpdates:^{ - - } completion:^(BOOL finished) { - [completions addObject:inner0]; - [inner0 fulfill]; - }]; - [cv performBatchUpdates:^{ - - } completion:^(BOOL finished) { - [completions addObject:inner1]; - [inner1 fulfill]; - }]; - } completion:^(BOOL finished) { - [completions addObject:outer]; - [outer fulfill]; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; - XCTAssertEqualObjects(completions, (@[ inner0, inner1, outer ]), @"Expected completion order to be correct"); -} - -#pragma mark - ASSectionContext tests - -- (void)testThatSectionContextsAreCorrectAfterTheInitialLayout -{ - updateValidationTestPrologue - NSInteger sectionCount = del->_itemCounts.size(); - for (NSInteger section = 0; section < sectionCount; section++) { - ASTestSectionContext *context = (ASTestSectionContext *)[cn contextForSection:section]; - XCTAssertNotNil(context); - XCTAssertEqual(context.sectionGeneration, 1); - XCTAssertEqual(context.sectionIndex, section); - } -} - -- (void)testThatSectionContextsAreCorrectAfterSectionMove -{ - updateValidationTestPrologue - NSInteger sectionCount = del->_itemCounts.size(); - NSInteger originalSection = sectionCount - 1; - NSInteger toSection = 0; - - del.sectionGeneration++; - [cv moveSection:originalSection toSection:toSection]; - [cv waitUntilAllUpdatesAreCommitted]; - - // Only test left moving - XCTAssertTrue(toSection < originalSection); - ASTestSectionContext *movedSectionContext = (ASTestSectionContext *)[cn contextForSection:toSection]; - XCTAssertNotNil(movedSectionContext); - // ASCollectionView currently splits a move operation to a pair of delete and insert ones. - // So this movedSectionContext is newly loaded and thus is second generation. - XCTAssertEqual(movedSectionContext.sectionGeneration, 2); - XCTAssertEqual(movedSectionContext.sectionIndex, toSection); - - for (NSInteger section = toSection + 1; section <= originalSection && section < sectionCount; section++) { - ASTestSectionContext *context = (ASTestSectionContext *)[cn contextForSection:section]; - XCTAssertNotNil(context); - XCTAssertEqual(context.sectionGeneration, 1); - // This section context was shifted to the right - XCTAssertEqual(context.sectionIndex, (section - 1)); - } -} - -- (void)testThatSectionContextsAreCorrectAfterReloadData -{ - updateValidationTestPrologue - - del.sectionGeneration++; - [cn reloadData]; - [cn waitUntilAllUpdatesAreProcessed]; - - NSInteger sectionCount = del->_itemCounts.size(); - for (NSInteger section = 0; section < sectionCount; section++) { - ASTestSectionContext *context = (ASTestSectionContext *)[cn contextForSection:section]; - XCTAssertNotNil(context); - XCTAssertEqual(context.sectionGeneration, 2); - XCTAssertEqual(context.sectionIndex, section); - } -} - -- (void)testThatSectionContextsAreCorrectAfterReloadASection -{ - updateValidationTestPrologue - NSInteger sectionToReload = 0; - - del.sectionGeneration++; - [cv reloadSections:[NSIndexSet indexSetWithIndex:sectionToReload]]; - [cv waitUntilAllUpdatesAreCommitted]; - - NSInteger sectionCount = del->_itemCounts.size(); - for (NSInteger section = 0; section < sectionCount; section++) { - ASTestSectionContext *context = (ASTestSectionContext *)[cn contextForSection:section]; - XCTAssertNotNil(context); - XCTAssertEqual(context.sectionGeneration, section != sectionToReload ? 1 : 2); - XCTAssertEqual(context.sectionIndex, section); - } -} - -/// See the same test in ASUICollectionViewTests for the reference behavior. -- (void)testThatIssuingAnUpdateBeforeInitialReloadIsAcceptable -{ - ASCollectionViewTestDelegate *del = [[ASCollectionViewTestDelegate alloc] initWithNumberOfSections:0 numberOfItemsInSection:0]; - ASCollectionView *cv = [[ASCollectionView alloc] initWithCollectionViewLayout:[UICollectionViewFlowLayout new]]; - cv.asyncDataSource = del; - cv.asyncDelegate = del; - - // Add a section to the data source - del->_itemCounts.push_back(0); - // Attempt to insert section into collection view. We ignore it to workaround - // the bug demonstrated by - // ASUICollectionViewTests.testThatIssuingAnUpdateBeforeInitialReloadIsUnacceptable - XCTAssertNoThrow([cv insertSections:[NSIndexSet indexSetWithIndex:0]]); -} - -- (void)testThatNodeAtIndexPathIsCorrectImmediatelyAfterSubmittingUpdate -{ - updateValidationTestPrologue - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:0]; - - // Insert an item and assert nodeForItemAtIndexPath: immediately returns new node - ASCellNode *oldNode = [cn nodeForItemAtIndexPath:indexPath]; - XCTAssertNotNil(oldNode); - del->_itemCounts[0] += 1; - [cv insertItemsAtIndexPaths:@[ indexPath ]]; - ASCellNode *newNode = [cn nodeForItemAtIndexPath:indexPath]; - XCTAssertNotNil(newNode); - XCTAssertNotEqualObjects(oldNode, newNode); - - // Delete all sections and assert nodeForItemAtIndexPath: immediately returns nil - NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, del->_itemCounts.size())]; - del->_itemCounts.clear(); - [cv deleteSections:sections]; - XCTAssertNil([cn nodeForItemAtIndexPath:indexPath]); -} - -- (void)DISABLED_testThatSupplementaryNodeAtIndexPathIsCorrectImmediatelyAfterSubmittingUpdate -{ - updateValidationTestPrologue - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:0]; - ASCellNode *oldHeader = [cv supplementaryNodeForElementKind:UICollectionElementKindSectionHeader atIndexPath:indexPath]; - XCTAssertNotNil(oldHeader); - - // Reload the section and ensure that the new header is loaded - [cv reloadSections:[NSIndexSet indexSetWithIndex:0]]; - ASCellNode *newHeader = [cv supplementaryNodeForElementKind:UICollectionElementKindSectionHeader atIndexPath:indexPath]; - XCTAssertNotNil(newHeader); - XCTAssertNotEqualObjects(oldHeader, newHeader); -} - -- (void)testThatNilBatchUpdatesCanBeSubmitted -{ - __block ASCollectionViewTestController *testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; - __block ASCollectionNode *cn = testController.collectionNode; - - // Passing nil blocks should not crash - [cn performBatchUpdates:nil completion:nil]; - [cn performBatchAnimated:NO updates:nil completion:nil]; -} - -- (void)testThatDeletedItemsAreMarkedInvisible -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - ASCollectionViewTestController *testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; - window.rootViewController = testController; - - __block NSInteger itemCount = 1; - testController.asyncDelegate->_itemCounts = {itemCount}; - [window makeKeyAndVisible]; - [window layoutIfNeeded]; - - ASCollectionNode *cn = testController.collectionNode; - [cn waitUntilAllUpdatesAreProcessed]; - [cn.view layoutIfNeeded]; - ASCellNode *node = [cn nodeForItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; - ASCATransactionQueueWait(nil); - XCTAssertTrue(node.visible); - testController.asyncDelegate->_itemCounts = {0}; - [cn deleteItemsAtIndexPaths: @[[NSIndexPath indexPathForItem:0 inSection:0]]]; - [self expectationForPredicate:[NSPredicate predicateWithFormat:@"visible = NO"] evaluatedWithObject:node handler:nil]; - [self waitForExpectationsWithTimeout:3 handler:nil]; -} - -- (void)disabled_testThatMultipleBatchFetchesDontHappenUnnecessarily -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - ASCollectionViewTestController *testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; - window.rootViewController = testController; - - // Start with 1 item so that our content does not fill bounds. - __block NSInteger itemCount = 1; - testController.asyncDelegate->_itemCounts = {itemCount}; - [window makeKeyAndVisible]; - [window layoutIfNeeded]; - - ASCollectionNode *cn = testController.collectionNode; - [cn waitUntilAllUpdatesAreProcessed]; - XCTAssertGreaterThan(cn.bounds.size.height, cn.view.contentSize.height, @"Expected initial data not to fill collection view area."); - - __block NSUInteger batchFetchCount = 0; - XCTestExpectation *expectation = [self expectationWithDescription:@"Batch fetching completed and then some"]; - __weak ASCollectionViewTestController *weakController = testController; - testController.asyncDelegate.willBeginBatchFetch = ^(ASBatchContext *context) { - - // Ensure only 1 batch fetch happens - batchFetchCount += 1; - if (batchFetchCount > 1) { - XCTFail(@"Too many batch fetches!"); - return; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - // Up the item count to 1000 so that we're well beyond the - // edge of the collection view and not ready for another batch fetch. - NSMutableArray *indexPaths = [NSMutableArray array]; - for (; itemCount < 1000; itemCount++) { - [indexPaths addObject:[NSIndexPath indexPathForItem:itemCount inSection:0]]; - } - weakController.asyncDelegate->_itemCounts = {itemCount}; - [cn insertItemsAtIndexPaths:indexPaths]; - [context completeBatchFetching:YES]; - - // Let the run loop turn before we consider the test passed. - dispatch_async(dispatch_get_main_queue(), ^{ - [expectation fulfill]; - }); - }); - }; - [self waitForExpectationsWithTimeout:3 handler:nil]; -} - -- (void)testThatBatchFetchHappensForEmptyCollection -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - ASCollectionViewTestController *testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; - window.rootViewController = testController; - - testController.asyncDelegate->_itemCounts = {}; - [window makeKeyAndVisible]; - [window layoutIfNeeded]; - - ASCollectionNode *cn = testController.collectionNode; - [cn waitUntilAllUpdatesAreProcessed]; - - __block NSUInteger batchFetchCount = 0; - XCTestExpectation *e = [self expectationWithDescription:@"Batch fetching completed"]; - testController.asyncDelegate.willBeginBatchFetch = ^(ASBatchContext *context) { - // Ensure only 1 batch fetch happens - batchFetchCount += 1; - if (batchFetchCount > 1) { - XCTFail(@"Too many batch fetches!"); - return; - } - [e fulfill]; - }; - [self waitForExpectationsWithTimeout:3 handler:nil]; -} - -- (void)testThatWeBatchFetchUntilContentRequirementIsMet_Animated -{ - [self _primitiveBatchFetchingFillTestAnimated:YES visible:YES controller:nil]; -} - -- (void)testThatWeBatchFetchUntilContentRequirementIsMet_Nonanimated -{ - [self _primitiveBatchFetchingFillTestAnimated:NO visible:YES controller:nil]; -} - -- (void)testThatWeBatchFetchUntilContentRequirementIsMet_Invisible -{ - [self _primitiveBatchFetchingFillTestAnimated:NO visible:NO controller:nil]; -} - -- (void)testThatWhenWeBecomeVisibleWeWillFetchAdditionalContent -{ - ASCollectionViewTestController *ctrl = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; - // Start with 1 empty section - ctrl.asyncDelegate->_itemCounts = {0}; - [self _primitiveBatchFetchingFillTestAnimated:NO visible:NO controller:ctrl]; - XCTAssertGreaterThan([ctrl.collectionNode numberOfItemsInSection:0], 0); - [self _primitiveBatchFetchingFillTestAnimated:NO visible:YES controller:ctrl]; -} - -- (void)_primitiveBatchFetchingFillTestAnimated:(BOOL)animated visible:(BOOL)visible controller:(nullable ASCollectionViewTestController *)testController -{ - if (testController == nil) { - testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; - // Start with 1 empty section - testController.asyncDelegate->_itemCounts = {0}; - } - ASCollectionNode *cn = testController.collectionNode; - - UIWindow *window = nil; - UIView *view = nil; - if (visible) { - window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - view = window; - } else { - view = cn.view; - view.frame = [UIScreen mainScreen].bounds; - } - - XCTestExpectation *expectation = [self expectationWithDescription:@"Completed all batch fetches"]; - __weak ASCollectionViewTestController *weakController = testController; - __block NSInteger batchFetchCount = 0; - testController.asyncDelegate.willBeginBatchFetch = ^(ASBatchContext *context) { - dispatch_async(dispatch_get_main_queue(), ^{ - NSInteger fetchIndex = batchFetchCount++; - - NSInteger itemCount = weakController.asyncDelegate->_itemCounts[0]; - weakController.asyncDelegate->_itemCounts[0] = (itemCount + 1); - if (animated) { - [cn insertItemsAtIndexPaths:@[ [NSIndexPath indexPathForItem:itemCount inSection:0] ]]; - } else { - [cn performBatchAnimated:NO updates:^{ - [cn insertItemsAtIndexPaths:@[ [NSIndexPath indexPathForItem:itemCount inSection:0] ]]; - } completion:nil]; - } - - [context completeBatchFetching:YES]; - - // If no more batch fetches have happened in 1 second, assume we're done. - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - if (fetchIndex == batchFetchCount - 1) { - [expectation fulfill]; - } - }); - }); - }; - window.rootViewController = testController; - - [window makeKeyAndVisible]; - // Trigger the initial reload to start - [view layoutIfNeeded]; - - // Wait for ASDK reload to finish - [cn waitUntilAllUpdatesAreProcessed]; - // Force UIKit to read updated data & range controller to update and account for it - [cn.view layoutIfNeeded]; - [self waitForExpectationsWithTimeout:60 handler:nil]; - - CGFloat contentHeight = cn.view.contentSize.height; - CGFloat requiredContentHeight; - CGFloat itemHeight = [cn.view layoutAttributesForItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]].size.height; - if (visible) { - requiredContentHeight = CGRectGetMaxY(cn.bounds) + CGRectGetHeight(cn.bounds) * cn.view.leadingScreensForBatching; - } else { - requiredContentHeight = CGRectGetMaxY(cn.bounds); - } - XCTAssertGreaterThan(batchFetchCount, 2); - XCTAssertGreaterThanOrEqual(contentHeight, requiredContentHeight, @"Loaded too little content."); - XCTAssertLessThanOrEqual(contentHeight, requiredContentHeight + 3 * itemHeight, @"Loaded too much content."); -} - -- (void)testInitialRangeBounds -{ - [self testInitialRangeBoundsWithCellLayoutMode:ASCellLayoutModeNone - shouldWaitUntilAllUpdatesAreProcessed:YES]; -} - -- (void)testInitialRangeBoundsCellLayoutModeAlwaysAsync -{ - [self testInitialRangeBoundsWithCellLayoutMode:ASCellLayoutModeAlwaysAsync - shouldWaitUntilAllUpdatesAreProcessed:YES]; -} - -- (void)testInitialRangeBoundsWithCellLayoutMode:(ASCellLayoutMode)cellLayoutMode - shouldWaitUntilAllUpdatesAreProcessed:(BOOL)shouldWait -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - ASCollectionViewTestController *testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; - ASCollectionNode *cn = testController.collectionNode; - cn.cellLayoutMode = cellLayoutMode; - [cn setTuningParameters:{ .leadingBufferScreenfuls = 2, .trailingBufferScreenfuls = 0 } forRangeMode:ASLayoutRangeModeMinimum rangeType:ASLayoutRangeTypePreload]; - window.rootViewController = testController; - - [testController.collectionNode.collectionViewLayout invalidateLayout]; - [testController.collectionNode.collectionViewLayout prepareLayout]; - - [window makeKeyAndVisible]; - // Trigger the initial reload to start - [window layoutIfNeeded]; - - if (shouldWait) { - XCTAssertTrue(cn.isProcessingUpdates, @"ASCollectionNode should still be processing updates after initial layoutIfNeeded call (reloadData)"); - - [cn onDidFinishProcessingUpdates:^{ - XCTAssertTrue(!cn.isProcessingUpdates, @"ASCollectionNode should no longer be processing updates inside -onDidFinishProcessingUpdates: block"); - }]; - - // Wait for ASDK reload to finish - [cn waitUntilAllUpdatesAreProcessed]; - } - - XCTAssertTrue(!cn.isProcessingUpdates, @"ASCollectionNode should no longer be processing updates after -wait call"); - - // Force UIKit to read updated data & range controller to update and account for it - [cn.view layoutIfNeeded]; - - CGRect preloadBounds = ({ - CGRect r = CGRectNull; - for (NSInteger s = 0; s < cn.numberOfSections; s++) { - NSInteger c = [cn numberOfItemsInSection:s]; - for (NSInteger i = 0; i < c; i++) { - NSIndexPath *ip = [NSIndexPath indexPathForItem:i inSection:s]; - ASCellNode *node = [cn nodeForItemAtIndexPath:ip]; - ASCATransactionQueueWait(nil); - if (node.inPreloadState) { - CGRect frame = [cn.view layoutAttributesForItemAtIndexPath:ip].frame; - r = CGRectUnion(r, frame); - } - } - } - r; - }); - CGFloat expectedHeight = cn.bounds.size.height * 3; - XCTAssertEqualWithAccuracy(CGRectGetHeight(preloadBounds), expectedHeight, expectedHeight * 0.1); - XCTAssertEqual([[cn valueForKeyPath:@"rangeController.currentRangeMode"] integerValue], ASLayoutRangeModeMinimum, @"Expected range mode to be minimum before scrolling begins."); -} - -- (void)testTraitCollectionChangesMidUpdate -{ - CGRect screenBounds = [UIScreen mainScreen].bounds; - UIWindow *window = [[UIWindow alloc] initWithFrame:screenBounds]; - ASCollectionViewTestController *testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; - ASCollectionNode *cn = testController.collectionNode; - window.rootViewController = testController; - - [window makeKeyAndVisible]; - // Trigger the initial reload to start - [window layoutIfNeeded]; - - // The initial reload is async, changing the trait collection here should be "mid-update" - ASPrimitiveTraitCollection traitCollection = ASPrimitiveTraitCollectionMakeDefault(); - traitCollection.displayScale = cn.primitiveTraitCollection.displayScale + 1; // Just a dummy change - traitCollection.containerSize = screenBounds.size; - cn.primitiveTraitCollection = traitCollection; - - [cn waitUntilAllUpdatesAreProcessed]; - [cn.view layoutIfNeeded]; - - // Assert that the new trait collection is picked up by all cell nodes, including ones that were not allocated but are forced to allocate now - for (NSInteger s = 0; s < cn.numberOfSections; s++) { - NSInteger c = [cn numberOfItemsInSection:s]; - for (NSInteger i = 0; i < c; i++) { - NSIndexPath *ip = [NSIndexPath indexPathForItem:i inSection:s]; - ASCellNode *node = [cn.view nodeForItemAtIndexPath:ip]; - XCTAssertTrue(ASPrimitiveTraitCollectionIsEqualToASPrimitiveTraitCollection(traitCollection, node.primitiveTraitCollection)); - } - } -} - -/** - * This tests an issue where, since subnode insertions aren't applied until the UIKit layout pass, - * which we trigger during the display phase, subnodes like network image nodes are not preloading - * until this layout pass happens which is too late. - */ -- (void)DISABLED_testThatAutomaticallyManagedSubnodesGetPreloadCallBeforeDisplay -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - ASCollectionViewTestController *testController = [[ASCollectionViewTestController alloc] initWithNibName:nil bundle:nil]; - window.rootViewController = testController; - ASCollectionNode *cn = testController.collectionNode; - - __block NSInteger itemCount = 100; - testController.asyncDelegate->_itemCounts = {itemCount}; - [window makeKeyAndVisible]; - [window layoutIfNeeded]; - - [cn waitUntilAllUpdatesAreProcessed]; - for (NSInteger i = 0; i < itemCount; i++) { - ASTextCellNodeWithSetSelectedCounter *node = [cn nodeForItemAtIndexPath:[NSIndexPath indexPathForItem:i inSection:0]]; - XCTAssert(node.automaticallyManagesSubnodes, @"Expected test cell node to use automatic subnode management. Can modify the test with a different class if needed."); - ASDisplayNode *subnode = node.textNode; - XCTAssertEqualObjects(NSStringFromASInterfaceState(subnode.interfaceState), NSStringFromASInterfaceState(node.interfaceState), @"Subtree interface state should match cell node interface state for ASM nodes."); - XCTAssert(node.inDisplayState || !node.nodeLoaded, @"Only nodes in the display range should be loaded."); - } - -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASCollectionViewThrashTests.mm b/submodules/AsyncDisplayKit/Tests/ASCollectionViewThrashTests.mm deleted file mode 100644 index 4650639d1f..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASCollectionViewThrashTests.mm +++ /dev/null @@ -1,217 +0,0 @@ -// -// ASCollectionViewThrashTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import -#import -#import - -#import "ASThrashUtility.h" - -@interface ASCollectionViewThrashTests : XCTestCase - -@end - -@implementation ASCollectionViewThrashTests -{ - // The current update, which will be logged in case of a failure. - ASThrashUpdate *_update; - BOOL _failed; -} - -- (void)tearDown -{ - if (_failed && _update != nil) { - NSLog(@"Failed update %@: %@", _update, _update.logFriendlyBase64Representation); - } - _failed = NO; - _update = nil; -} - -// NOTE: Despite the documentation, this is not always called if an exception is caught. -- (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filePath atLine:(NSUInteger)lineNumber expected:(BOOL)expected -{ - _failed = YES; - [super recordFailureWithDescription:description inFile:filePath atLine:lineNumber expected:expected]; -} - -- (void)verifyDataSource:(ASThrashDataSource *)ds -{ - CollectionView *collectionView = ds.collectionView; - NSArray *data = [ds data]; - for (NSInteger i = 0; i < collectionView.numberOfSections; i++) { - XCTAssertEqual([collectionView numberOfItemsInSection:i], data[i].items.count); - - for (NSInteger j = 0; j < [collectionView numberOfItemsInSection:i]; j++) { - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:j inSection:i]; - ASThrashTestItem *item = data[i].items[j]; - ASThrashTestNode *node = (ASThrashTestNode *)[collectionView nodeForItemAtIndexPath:indexPath]; - XCTAssertEqualObjects(node.item, item, @"Wrong node at index path %@", indexPath); - } - } -} - -#pragma mark Test Methods - -- (void)testInitialDataRead -{ - ASThrashDataSource *ds = [[ASThrashDataSource alloc] initCollectionViewDataSourceWithData:[ASThrashTestSection sectionsWithCount:kInitialSectionCount]]; - [self verifyDataSource:ds]; -} - -/// Replays the Base64 representation of an ASThrashUpdate from "ASThrashTestRecordedCase" file -- (void)testRecordedThrashCase -{ - NSURL *caseURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"ASThrashTestRecordedCase" withExtension:nil subdirectory:@"TestResources"]; - NSString *base64 = [NSString stringWithContentsOfURL:caseURL encoding:NSUTF8StringEncoding error:NULL]; - - _update = [ASThrashUpdate thrashUpdateWithBase64String:base64]; - if (_update == nil) { - return; - } - - ASThrashDataSource *ds = [[ASThrashDataSource alloc] initCollectionViewDataSourceWithData:_update.oldData]; - [self applyUpdateUsingBatchUpdates:_update - toDataSource:ds - animated:NO - useXCTestWait:YES]; - [self verifyDataSource:ds]; -} - -- (void)testThrashingWildly -{ - for (NSInteger i = 0; i < kThrashingIterationCount; i++) { - [self setUp]; - @autoreleasepool { - NSArray *sections = [ASThrashTestSection sectionsWithCount:kInitialSectionCount]; - _update = [[ASThrashUpdate alloc] initWithData:sections]; - ASThrashDataSource *ds = [[ASThrashDataSource alloc] initCollectionViewDataSourceWithData:sections]; - - [self applyUpdateUsingBatchUpdates:_update - toDataSource:ds - animated:NO - useXCTestWait:NO]; - [self verifyDataSource:ds]; - [self expectationForPredicate:[ds predicateForDeallocatedHierarchy] evaluatedWithObject:(id)kCFNull handler:nil]; - } - [self waitForExpectationsWithTimeout:3 handler:nil]; - - [self tearDown]; - } -} - -- (void)testThrashingWildlyOnSameCollectionView -{ - XCTestExpectation *expectation = [self expectationWithDescription:@"last test ran"]; - ASThrashDataSource *ds = [[ASThrashDataSource alloc] initCollectionViewDataSourceWithData:nil]; - for (NSInteger i = 0; i < 1000; i++) { - [self setUp]; - @autoreleasepool { - NSArray *sections = [ASThrashTestSection sectionsWithCount:kInitialSectionCount]; - _update = [[ASThrashUpdate alloc] initWithData:sections]; - [ds setData:sections]; - [ds.collectionView reloadData]; - - [self applyUpdateUsingBatchUpdates:_update - toDataSource:ds - animated:NO - useXCTestWait:NO]; - [self verifyDataSource:ds]; - if (i == 999) { - [expectation fulfill]; - } - } - - [self tearDown]; - } - [self waitForExpectationsWithTimeout:3 handler:nil]; -} - -- (void)testThrashingWildlyDispatchWildly -{ - XCTestExpectation *expectation = [self expectationWithDescription:@"last test ran"]; - for (NSInteger i = 0; i < kThrashingIterationCount; i++) { - [self setUp]; - @autoreleasepool { - dispatch_async(dispatch_get_main_queue(), ^{ - NSArray *sections = [ASThrashTestSection sectionsWithCount:kInitialSectionCount]; - _update = [[ASThrashUpdate alloc] initWithData:sections]; - ASThrashDataSource *ds = [[ASThrashDataSource alloc] initCollectionViewDataSourceWithData:sections]; - - [self applyUpdateUsingBatchUpdates:_update - toDataSource:ds - animated:NO - useXCTestWait:NO]; - [self verifyDataSource:ds]; - if (i == kThrashingIterationCount-1) { - [expectation fulfill]; - } - }); - } - - [self tearDown]; - } - - [self waitForExpectationsWithTimeout:100 handler:nil]; -} - -#pragma mark Helpers - -- (void)applyUpdateUsingBatchUpdates:(ASThrashUpdate *)update - toDataSource:(ASThrashDataSource *)dataSource animated:(BOOL)animated - useXCTestWait:(BOOL)wait -{ - CollectionView *collectionView = dataSource.collectionView; - - XCTestExpectation *expectation; - if (wait) { - expectation = [self expectationWithDescription:@"Wait for collection view to update"]; - } - - void (^updateBlock)() = ^ void (){ - dataSource.data = update.data; - - [collectionView insertSections:update.insertedSectionIndexes]; - [collectionView deleteSections:update.deletedSectionIndexes]; - [collectionView reloadSections:update.replacedSectionIndexes]; - - [update.insertedItemIndexes enumerateObjectsUsingBlock:^(NSMutableIndexSet * _Nonnull indexes, NSUInteger idx, BOOL * _Nonnull stop) { - NSArray *indexPaths = [indexes indexPathsInSection:idx]; - [collectionView insertItemsAtIndexPaths:indexPaths]; - }]; - - [update.deletedItemIndexes enumerateObjectsUsingBlock:^(NSMutableIndexSet * _Nonnull indexes, NSUInteger idx, BOOL * _Nonnull stop) { - NSArray *indexPaths = [indexes indexPathsInSection:idx]; - [collectionView deleteItemsAtIndexPaths:indexPaths]; - }]; - - [update.replacedItemIndexes enumerateObjectsUsingBlock:^(NSMutableIndexSet * _Nonnull indexes, NSUInteger idx, BOOL * _Nonnull stop) { - NSArray *indexPaths = [indexes indexPathsInSection:idx]; - [collectionView reloadItemsAtIndexPaths:indexPaths]; - }]; - }; - - @try { - [collectionView performBatchAnimated:animated - updates:updateBlock - completion:^(BOOL finished) { - [expectation fulfill]; - }]; - } @catch (NSException *exception) { - _failed = YES; - XCTFail("TEST FAILED"); - @throw exception; - } - - if (wait) { - [self waitForExpectationsWithTimeout:1 handler:nil]; - } -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASCollectionsTests.mm b/submodules/AsyncDisplayKit/Tests/ASCollectionsTests.mm deleted file mode 100644 index ae0313d78c..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASCollectionsTests.mm +++ /dev/null @@ -1,55 +0,0 @@ -// -// ASCollectionsTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface ASCollectionsTests : XCTestCase - -@end - -@implementation ASCollectionsTests - -- (void)testTransferArray { - id objs[2]; - objs[0] = [NSObject new]; - id o0 = objs[0]; - objs[1] = [NSObject new]; - __weak id w0 = objs[0]; - __weak id w1 = objs[1]; - CFTypeRef cf0 = (__bridge CFTypeRef)objs[0]; - CFTypeRef cf1 = (__bridge CFTypeRef)objs[1]; - XCTAssertEqual(CFGetRetainCount(cf0), 2); - XCTAssertEqual(CFGetRetainCount(cf1), 1); - NSArray *arr = [NSArray arrayByTransferring:objs count:2]; - XCTAssertNil(objs[0]); - XCTAssertNil(objs[1]); - XCTAssertEqual(CFGetRetainCount(cf0), 2); - XCTAssertEqual(CFGetRetainCount(cf1), 1); - NSArray *immutableCopy = [arr copy]; - XCTAssertEqual(immutableCopy, arr); - XCTAssertEqual(CFGetRetainCount(cf0), 2); - XCTAssertEqual(CFGetRetainCount(cf1), 1); - NSMutableArray *mc = [arr mutableCopy]; - XCTAssertEqual(CFGetRetainCount(cf0), 3); - XCTAssertEqual(CFGetRetainCount(cf1), 2); - arr = nil; - immutableCopy = nil; - XCTAssertEqual(CFGetRetainCount(cf0), 2); - XCTAssertEqual(CFGetRetainCount(cf1), 1); - [mc removeObjectAtIndex:0]; - XCTAssertEqual(CFGetRetainCount(cf0), 1); - XCTAssertEqual(CFGetRetainCount(cf1), 1); - [mc removeObjectAtIndex:0]; - XCTAssertEqual(CFGetRetainCount(cf0), 1); - XCTAssertNil(w1); - o0 = nil; - XCTAssertNil(w0); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASConfigurationTests.mm b/submodules/AsyncDisplayKit/Tests/ASConfigurationTests.mm deleted file mode 100644 index 6952924851..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASConfigurationTests.mm +++ /dev/null @@ -1,139 +0,0 @@ -// -// ASConfigurationTests.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import -#import -#import -#import - -#import "ASTestCase.h" - -static ASExperimentalFeatures features[] = { - ASExperimentalGraphicsContexts, -#if AS_ENABLE_TEXTNODE - ASExperimentalTextNode, -#endif - ASExperimentalInterfaceStateCoalescing, - ASExperimentalUnfairLock, - ASExperimentalLayerDefaults, - ASExperimentalCollectionTeardown, - ASExperimentalFramesetterCache, - ASExperimentalSkipClearData, - ASExperimentalDidEnterPreloadSkipASMLayout, - ASExperimentalDisableAccessibilityCache, - ASExperimentalDispatchApply, - ASExperimentalImageDownloaderPriority, - ASExperimentalTextDrawing -}; - -@interface ASConfigurationTests : ASTestCase - -@end - -@implementation ASConfigurationTests { - void (^onActivate)(ASConfigurationTests *self, ASExperimentalFeatures feature); -} - -+ (NSArray *)names { - return @[ - @"exp_graphics_contexts", - @"exp_text_node", - @"exp_interface_state_coalesce", - @"exp_unfair_lock", - @"exp_infer_layer_defaults", - @"exp_collection_teardown", - @"exp_framesetter_cache", - @"exp_skip_clear_data", - @"exp_did_enter_preload_skip_asm_layout", - @"exp_disable_a11y_cache", - @"exp_dispatch_apply", - @"exp_image_downloader_priority", - @"exp_text_drawing" - ]; -} - -- (ASExperimentalFeatures)allFeatures { - ASExperimentalFeatures allFeatures = 0; - for (int i = 0; i < sizeof(features)/sizeof(ASExperimentalFeatures); i++) { - allFeatures |= features[i]; - } - return allFeatures; -} - -#if AS_ENABLE_TEXTNODE - -- (void)testExperimentalFeatureConfig -{ - // Set the config - ASConfiguration *config = [[ASConfiguration alloc] initWithDictionary:nil]; - config.experimentalFeatures = ASExperimentalGraphicsContexts; - config.delegate = self; - [ASConfigurationManager test_resetWithConfiguration:config]; - - // Set an expectation for a callback, and assert we only get one. - XCTestExpectation *e = [self expectationWithDescription:@"Callbacks done."]; - e.expectedFulfillmentCount = 2; - e.assertForOverFulfill = YES; - onActivate = ^(ASConfigurationTests *self, ASExperimentalFeatures feature) { - [e fulfill]; - }; - - // Now activate the graphics experiment and expect it works. - XCTAssertTrue(ASActivateExperimentalFeature(ASExperimentalGraphicsContexts)); - // We should get a callback here - // Now activate text node and expect it fails. - XCTAssertFalse(ASActivateExperimentalFeature(ASExperimentalTextNode)); - // But we should get another callback. - [self waitForExpectationsWithTimeout:3 handler:nil]; -} - -#endif - -- (void)textureDidActivateExperimentalFeatures:(ASExperimentalFeatures)feature -{ - if (onActivate) { - onActivate(self, feature); - } -} - -- (void)testMappingNamesToFlags -{ - // Throw in a bad bit. - ASExperimentalFeatures allFeatures = [self allFeatures]; - ASExperimentalFeatures featuresWithBadBit = allFeatures | (1 << 22); - NSArray *expectedNames = [ASConfigurationTests names]; - XCTAssertEqualObjects(expectedNames, ASExperimentalFeaturesGetNames(featuresWithBadBit)); -} - -- (void)testMappingFlagsFromNames -{ - // Throw in a bad name. - NSMutableArray *allNames = [[NSMutableArray alloc] initWithArray:[ASConfigurationTests names]]; - [allNames addObject:@"__invalid_name"]; - ASExperimentalFeatures expected = [self allFeatures]; - XCTAssertEqual(expected, ASExperimentalFeaturesFromArray(allNames)); -} - -- (void)testFlagMatchName -{ - NSArray *names = [ASConfigurationTests names]; - for (NSInteger i = 0; i < names.count; i++) { - XCTAssertEqual(features[i], ASExperimentalFeaturesFromArray(@[names[i]])); - } -} - -- (void)testNameMatchFlag { - NSArray *names = [ASConfigurationTests names]; - for (NSInteger i = 0; i < names.count; i++) { - XCTAssertEqualObjects(@[names[i]], ASExperimentalFeaturesGetNames(features[i])); - } -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASControlNodeTests.mm b/submodules/AsyncDisplayKit/Tests/ASControlNodeTests.mm deleted file mode 100644 index e1c0150a0d..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASControlNodeTests.mm +++ /dev/null @@ -1,225 +0,0 @@ -// -// ASControlNodeTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import -#import - -#define ACTION @selector(action) -#define ACTION_SENDER @selector(action:) -#define ACTION_SENDER_EVENT @selector(action:event:) -#define EVENT ASControlNodeEventTouchUpInside - -@interface ReceiverController : UIViewController -@property (nonatomic) NSInteger hits; -@end -@implementation ReceiverController -@end - -@interface ASActionController : ReceiverController -@end -@implementation ASActionController -- (void)action { self.hits++; } -- (void)firstAction { } -- (void)secondAction { } -- (void)thirdAction { } -@end - -@interface ASActionSenderController : ReceiverController -@end -@implementation ASActionSenderController -- (void)action:(id)sender { self.hits++; } -@end - -@interface ASActionSenderEventController : ReceiverController -@end -@implementation ASActionSenderEventController -- (void)action:(id)sender event:(UIEvent *)event { self.hits++; } -@end - -@interface ASGestureController : ReceiverController -@end -@implementation ASGestureController -- (void)onGesture:(UIGestureRecognizer *)recognizer { self.hits++; } -- (void)action:(id)sender { self.hits++; } -@end - -@interface ASControlNodeTests : XCTestCase - -@end - -@implementation ASControlNodeTests - -- (void)testActionWithoutParameters { - ASActionController *controller = [[ASActionController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:controller action:ACTION forControlEvents:EVENT]; - [controller.view addSubview:node.view]; - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssert(controller.hits == 1, @"Controller did not receive the action event"); -} - -- (void)testActionAndSender { - ASActionSenderController *controller = [[ASActionSenderController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:controller action:ACTION_SENDER forControlEvents:EVENT]; - [controller.view addSubview:node.view]; - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssert(controller.hits == 1, @"Controller did not receive the action event"); -} - -- (void)testActionAndSenderAndEvent { - ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [controller.view addSubview:node.view]; - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssert(controller.hits == 1, @"Controller did not receive the action event"); -} - -- (void)testActionWithoutTarget { - ASActionController *controller = [[ASActionController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:nil action:ACTION forControlEvents:EVENT]; - [controller.view addSubview:node.view]; - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssert(controller.hits == 1, @"Controller did not receive the action event"); -} - -- (void)testActionAndSenderWithoutTarget { - ASActionSenderController *controller = [[ASActionSenderController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:nil action:ACTION_SENDER forControlEvents:EVENT]; - [controller.view addSubview:node.view]; - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssert(controller.hits == 1, @"Controller did not receive the action event"); -} - -- (void)testActionAndSenderAndEventWithoutTarget { - ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:nil action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [controller.view addSubview:node.view]; - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssert(controller.hits == 1, @"Controller did not receive the action event"); -} - -- (void)testRemoveWithoutTargetRemovesTargetlessAction { - ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:nil action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [node removeTarget:nil action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [controller.view addSubview:node.view]; - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssertEqual(controller.hits, 0, @"Controller did not receive exactly zero action events"); -} - -- (void)testRemoveWithTarget { - ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [node removeTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [controller.view addSubview:node.view]; - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssertEqual(controller.hits, 0, @"Controller did not receive exactly zero action events"); -} - -- (void)testRemoveWithTargetRemovesAction { - ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [node removeTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [controller.view addSubview:node.view]; - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssertEqual(controller.hits, 0, @"Controller did not receive exactly zero action events"); -} - -- (void)testRemoveWithoutTargetRemovesTargetedAction { - ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [node removeTarget:nil action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [controller.view addSubview:node.view]; - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssertEqual(controller.hits, 0, @"Controller did not receive exactly zero action events"); -} - -- (void)testDuplicateEntriesWithoutTarget { - ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:nil action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [node addTarget:nil action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [controller.view addSubview:node.view]; - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssertEqual(controller.hits, 1, @"Controller did not receive exactly one action event"); -} - -- (void)testDuplicateEntriesWithTarget { - ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [node addTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [controller.view addSubview:node.view]; - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssertEqual(controller.hits, 1, @"Controller did not receive exactly one action event"); -} - -- (void)testDuplicateEntriesWithAndWithoutTarget { - ASActionSenderEventController *controller = [[ASActionSenderEventController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:controller action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [node addTarget:nil action:ACTION_SENDER_EVENT forControlEvents:EVENT]; - [controller.view addSubview:node.view]; - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssertEqual(controller.hits, 2, @"Controller did not receive exactly two action events"); -} - -- (void)testDeeperHierarchyWithoutTarget { - ASActionController *controller = [[ASActionController alloc] init]; - UIView *view = [[UIView alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:nil action:ACTION forControlEvents:EVENT]; - [view addSubview:node.view]; - [controller.view addSubview:view]; - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssert(controller.hits == 1, @"Controller did not receive the action event"); -} - -- (void)testTouchesWorkWithGestures { - ASGestureController *controller = [[ASGestureController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:controller action:@selector(action:) forControlEvents:ASControlNodeEventTouchUpInside]; - [node.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:controller action:@selector(onGesture:)]]; - [controller.view addSubnode:node]; - - [node sendActionsForControlEvents:EVENT withEvent:nil]; - XCTAssert(controller.hits == 1, @"Controller did not receive the tap event"); -} - -- (void)testActionsAreCalledInTheSameOrderAsTheyWereAdded { - ASActionController *controller = [[ASActionController alloc] init]; - ASControlNode *node = [[ASControlNode alloc] init]; - [node addTarget:controller action:@selector(firstAction) forControlEvents:ASControlNodeEventTouchUpInside]; - [node addTarget:controller action:@selector(secondAction) forControlEvents:ASControlNodeEventTouchUpInside]; - [node addTarget:controller action:@selector(thirdAction) forControlEvents:ASControlNodeEventTouchUpInside]; - [controller.view addSubnode:node]; - - id controllerMock = [OCMockObject partialMockForObject:controller]; - [controllerMock setExpectationOrderMatters:YES]; - [[controllerMock expect] firstAction]; - [[controllerMock expect] secondAction]; - [[controllerMock expect] thirdAction]; - - [node sendActionsForControlEvents:ASControlNodeEventTouchUpInside withEvent:nil]; - - [controllerMock verify]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASCornerLayoutSpecSnapshotTests.mm b/submodules/AsyncDisplayKit/Tests/ASCornerLayoutSpecSnapshotTests.mm deleted file mode 100644 index 2c496cd595..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASCornerLayoutSpecSnapshotTests.mm +++ /dev/null @@ -1,215 +0,0 @@ -// -// ASCornerLayoutSpecSnapshotTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASLayoutSpecSnapshotTestsHelper.h" -#import -#import - -typedef NS_ENUM(NSInteger, ASCornerLayoutSpecSnapshotTestsOffsetOption) { - ASCornerLayoutSpecSnapshotTestsOffsetOptionCenter, - ASCornerLayoutSpecSnapshotTestsOffsetOptionInner, - ASCornerLayoutSpecSnapshotTestsOffsetOptionOuter, -}; - - -@interface ASCornerLayoutSpecSnapshotTests : ASLayoutSpecSnapshotTestCase - -@property (nonatomic, copy) UIColor *boxColor; -@property (nonatomic, copy) UIColor *baseColor; -@property (nonatomic, copy) UIColor *cornerColor; -@property (nonatomic, copy) UIColor *contextColor; - -@property (nonatomic) CGSize baseSize; -@property (nonatomic) CGSize cornerSize; -@property (nonatomic) CGSize contextSize; - -@property (nonatomic) ASSizeRange contextSizeRange; - -@end - - -@implementation ASCornerLayoutSpecSnapshotTests - -- (void)setUp -{ - [super setUp]; - - self.recordMode = NO; - - _boxColor = [UIColor greenColor]; - _baseColor = [UIColor blueColor]; - _cornerColor = [UIColor orangeColor]; - _contextColor = [UIColor lightGrayColor]; - - _baseSize = CGSizeMake(60, 60); - _cornerSize = CGSizeMake(20, 20); - _contextSize = CGSizeMake(120, 120); - - _contextSizeRange = ASSizeRangeMake(CGSizeZero, _contextSize); -} - -- (void)testCornerSpecForAllLocations -{ - ASCornerLayoutSpecSnapshotTestsOffsetOption center = ASCornerLayoutSpecSnapshotTestsOffsetOptionCenter; - - [self testCornerSpecWithLocation:ASCornerLayoutLocationTopLeft offsetOption:center wrapsCorner:NO]; - [self testCornerSpecWithLocation:ASCornerLayoutLocationTopLeft offsetOption:center wrapsCorner:YES]; - - [self testCornerSpecWithLocation:ASCornerLayoutLocationTopRight offsetOption:center wrapsCorner:NO]; - [self testCornerSpecWithLocation:ASCornerLayoutLocationTopRight offsetOption:center wrapsCorner:YES]; - - [self testCornerSpecWithLocation:ASCornerLayoutLocationBottomLeft offsetOption:center wrapsCorner:NO]; - [self testCornerSpecWithLocation:ASCornerLayoutLocationBottomLeft offsetOption:center wrapsCorner:YES]; - - [self testCornerSpecWithLocation:ASCornerLayoutLocationBottomRight offsetOption:center wrapsCorner:NO]; - [self testCornerSpecWithLocation:ASCornerLayoutLocationBottomRight offsetOption:center wrapsCorner:YES]; -} - -- (void)testCornerSpecForAllLocationsWithInnerOffset -{ - ASCornerLayoutSpecSnapshotTestsOffsetOption inner = ASCornerLayoutSpecSnapshotTestsOffsetOptionInner; - - [self testCornerSpecWithLocation:ASCornerLayoutLocationTopLeft offsetOption:inner wrapsCorner:NO]; - [self testCornerSpecWithLocation:ASCornerLayoutLocationTopLeft offsetOption:inner wrapsCorner:YES]; - - [self testCornerSpecWithLocation:ASCornerLayoutLocationTopRight offsetOption:inner wrapsCorner:NO]; - [self testCornerSpecWithLocation:ASCornerLayoutLocationTopRight offsetOption:inner wrapsCorner:YES]; - - [self testCornerSpecWithLocation:ASCornerLayoutLocationBottomLeft offsetOption:inner wrapsCorner:NO]; - [self testCornerSpecWithLocation:ASCornerLayoutLocationBottomLeft offsetOption:inner wrapsCorner:YES]; - - [self testCornerSpecWithLocation:ASCornerLayoutLocationBottomRight offsetOption:inner wrapsCorner:NO]; - [self testCornerSpecWithLocation:ASCornerLayoutLocationBottomRight offsetOption:inner wrapsCorner:YES]; -} - -- (void)testCornerSpecForAllLocationsWithOuterOffset -{ - ASCornerLayoutSpecSnapshotTestsOffsetOption outer = ASCornerLayoutSpecSnapshotTestsOffsetOptionOuter; - - [self testCornerSpecWithLocation:ASCornerLayoutLocationTopLeft offsetOption:outer wrapsCorner:NO]; - [self testCornerSpecWithLocation:ASCornerLayoutLocationTopLeft offsetOption:outer wrapsCorner:YES]; - - [self testCornerSpecWithLocation:ASCornerLayoutLocationTopRight offsetOption:outer wrapsCorner:NO]; - [self testCornerSpecWithLocation:ASCornerLayoutLocationTopRight offsetOption:outer wrapsCorner:YES]; - - [self testCornerSpecWithLocation:ASCornerLayoutLocationBottomLeft offsetOption:outer wrapsCorner:NO]; - [self testCornerSpecWithLocation:ASCornerLayoutLocationBottomLeft offsetOption:outer wrapsCorner:YES]; - - [self testCornerSpecWithLocation:ASCornerLayoutLocationBottomRight offsetOption:outer wrapsCorner:NO]; - [self testCornerSpecWithLocation:ASCornerLayoutLocationBottomRight offsetOption:outer wrapsCorner:YES]; -} - -- (void)testCornerSpecWithLocation:(ASCornerLayoutLocation)location - offsetOption:(ASCornerLayoutSpecSnapshotTestsOffsetOption)offsetOption - wrapsCorner:(BOOL)wrapsCorner -{ - ASDisplayNode *baseNode = ASDisplayNodeWithBackgroundColor(_baseColor, _baseSize); - ASDisplayNode *cornerNode = ASDisplayNodeWithBackgroundColor(_cornerColor, _cornerSize); - ASDisplayNode *debugBoxNode = ASDisplayNodeWithBackgroundColor(_boxColor); - - baseNode.style.layoutPosition = CGPointMake((_contextSize.width - _baseSize.width) / 2, - (_contextSize.height - _baseSize.height) / 2); - - ASCornerLayoutSpec *cornerSpec = [ASCornerLayoutSpec cornerLayoutSpecWithChild:baseNode - corner:cornerNode - location:location]; - - CGPoint delta = (CGPoint){ _cornerSize.width / 2, _cornerSize.height / 2 }; - cornerSpec.offset = [self offsetForOption:offsetOption location:location delta:delta]; - cornerSpec.wrapsCorner = wrapsCorner; - - ASBackgroundLayoutSpec *backgroundSpec = [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild:cornerSpec - background:debugBoxNode]; - - [self testLayoutSpec:backgroundSpec - sizeRange:_contextSizeRange - subnodes:@[debugBoxNode, baseNode, cornerNode] - identifier:[self suffixWithLocation:location option:offsetOption wrapsCorner:wrapsCorner]]; -} - -- (CGPoint)offsetForOption:(ASCornerLayoutSpecSnapshotTestsOffsetOption)option - location:(ASCornerLayoutLocation)location - delta:(CGPoint)delta -{ - CGFloat x = delta.x; - CGFloat y = delta.y; - - switch (option) { - - case ASCornerLayoutSpecSnapshotTestsOffsetOptionCenter: - return CGPointZero; - - case ASCornerLayoutSpecSnapshotTestsOffsetOptionInner: - - switch (location) { - case ASCornerLayoutLocationTopLeft: return (CGPoint){ x, y }; - case ASCornerLayoutLocationTopRight: return (CGPoint){ -x, y }; - case ASCornerLayoutLocationBottomLeft: return (CGPoint){ x, -y }; - case ASCornerLayoutLocationBottomRight: return (CGPoint){ -x, -y }; - } - - case ASCornerLayoutSpecSnapshotTestsOffsetOptionOuter: - - switch (location) { - case ASCornerLayoutLocationTopLeft: return (CGPoint){ -x, -y }; - case ASCornerLayoutLocationTopRight: return (CGPoint){ x, -y }; - case ASCornerLayoutLocationBottomLeft: return (CGPoint){ -x, y }; - case ASCornerLayoutLocationBottomRight: return (CGPoint){ x, y }; - } - - } - -} - -- (NSString *)suffixWithLocation:(ASCornerLayoutLocation)location - option:(ASCornerLayoutSpecSnapshotTestsOffsetOption)option - wrapsCorner:(BOOL)wrapsCorner -{ - NSMutableString *desc = [NSMutableString string]; - - switch (location) { - case ASCornerLayoutLocationTopLeft: - [desc appendString:@"topLeft"]; - break; - case ASCornerLayoutLocationTopRight: - [desc appendString:@"topRight"]; - break; - case ASCornerLayoutLocationBottomLeft: - [desc appendString:@"bottomLeft"]; - break; - case ASCornerLayoutLocationBottomRight: - [desc appendString:@"bottomRight"]; - break; - } - - [desc appendString:@"_"]; - - switch (option) { - case ASCornerLayoutSpecSnapshotTestsOffsetOptionCenter: - [desc appendString:@"center"]; - break; - case ASCornerLayoutSpecSnapshotTestsOffsetOptionInner: - [desc appendString:@"inner"]; - break; - case ASCornerLayoutSpecSnapshotTestsOffsetOptionOuter: - [desc appendString:@"outer"]; - break; - } - - [desc appendString:@"_"]; - - if (wrapsCorner) { - [desc appendString:@"fullSize"]; - } else { - [desc appendString:@"childSize"]; - } - - return desc.copy; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASDimensionTests.mm b/submodules/AsyncDisplayKit/Tests/ASDimensionTests.mm deleted file mode 100644 index c3e30ae63c..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASDimensionTests.mm +++ /dev/null @@ -1,106 +0,0 @@ -// -// ASDimensionTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -#import "ASXCTExtensions.h" - - -@interface ASDimensionTests : XCTestCase -@end - -@implementation ASDimensionTests - -- (void)testCreatingDimensionUnitAutos -{ - XCTAssertNoThrow(ASDimensionMake(ASDimensionUnitAuto, 0)); - XCTAssertThrows(ASDimensionMake(ASDimensionUnitAuto, 100)); - ASXCTAssertEqualDimensions(ASDimensionAuto, ASDimensionMake(@"")); - ASXCTAssertEqualDimensions(ASDimensionAuto, ASDimensionMake(@"auto")); -} - -- (void)testCreatingDimensionUnitFraction -{ - XCTAssertNoThrow(ASDimensionMake(ASDimensionUnitFraction, 0.5)); - ASXCTAssertEqualDimensions(ASDimensionMake(ASDimensionUnitFraction, 0.5), ASDimensionMake(@"50%")); -} - -- (void)testCreatingDimensionUnitPoints -{ - XCTAssertNoThrow(ASDimensionMake(ASDimensionUnitPoints, 100)); - ASXCTAssertEqualDimensions(ASDimensionMake(ASDimensionUnitPoints, 100), ASDimensionMake(@"100pt")); -} - -- (void)testIntersectingOverlappingSizeRangesReturnsTheirIntersection -{ - // range: |---------| - // other: |----------| - // result: |----| - - ASSizeRange range = {{0,0}, {10,10}}; - ASSizeRange other = {{7,7}, {15,15}}; - ASSizeRange result = ASSizeRangeIntersect(range, other); - ASSizeRange expected = {{7,7}, {10,10}}; - XCTAssertTrue(ASSizeRangeEqualToSizeRange(result, expected), @"Expected %@ but got %@", NSStringFromASSizeRange(expected), NSStringFromASSizeRange(result)); -} - -- (void)testIntersectingSizeRangeWithRangeThatContainsItReturnsSameRange -{ - // range: |-----| - // other: |---------| - // result: |-----| - - ASSizeRange range = {{2,2}, {8,8}}; - ASSizeRange other = {{0,0}, {10,10}}; - ASSizeRange result = ASSizeRangeIntersect(range, other); - ASSizeRange expected = {{2,2}, {8,8}}; - XCTAssertTrue(ASSizeRangeEqualToSizeRange(result, expected), @"Expected %@ but got %@", NSStringFromASSizeRange(expected), NSStringFromASSizeRange(result)); -} - -- (void)testIntersectingSizeRangeWithRangeContainedWithinItReturnsContainedRange -{ - // range: |---------| - // other: |-----| - // result: |-----| - - ASSizeRange range = {{0,0}, {10,10}}; - ASSizeRange other = {{2,2}, {8,8}}; - ASSizeRange result = ASSizeRangeIntersect(range, other); - ASSizeRange expected = {{2,2}, {8,8}}; - XCTAssertTrue(ASSizeRangeEqualToSizeRange(result, expected), @"Expected %@ but got %@", NSStringFromASSizeRange(expected), NSStringFromASSizeRange(result)); -} - -- (void)testIntersectingSizeRangeWithNonOverlappingRangeToRightReturnsSinglePointNearestOtherRange -{ - // range: |-----| - // other: |---| - // result: * - - ASSizeRange range = {{0,0}, {5,5}}; - ASSizeRange other = {{10,10}, {15,15}}; - ASSizeRange result = ASSizeRangeIntersect(range, other); - ASSizeRange expected = {{5,5}, {5,5}}; - XCTAssertTrue(ASSizeRangeEqualToSizeRange(result, expected), @"Expected %@ but got %@", NSStringFromASSizeRange(expected), NSStringFromASSizeRange(result)); -} - -- (void)testIntersectingSizeRangeWithNonOverlappingRangeToLeftReturnsSinglePointNearestOtherRange -{ - // range: |---| - // other: |-----| - // result: * - - ASSizeRange range = {{10,10}, {15,15}}; - ASSizeRange other = {{0,0}, {5,5}}; - ASSizeRange result = ASSizeRangeIntersect(range, other); - ASSizeRange expected = {{10,10}, {10,10}}; - XCTAssertTrue(ASSizeRangeEqualToSizeRange(result, expected), @"Expected %@ but got %@", NSStringFromASSizeRange(expected), NSStringFromASSizeRange(result)); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASDispatchTests.mm b/submodules/AsyncDisplayKit/Tests/ASDispatchTests.mm deleted file mode 100644 index a90bce7ed8..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASDispatchTests.mm +++ /dev/null @@ -1,64 +0,0 @@ -// -// ASDispatchTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface ASDispatchTests : XCTestCase - -@end - -@implementation ASDispatchTests - -- (void)testDispatchApply -{ - dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - NSInteger expectedThreadCount = [NSProcessInfo processInfo].activeProcessorCount * 2; - NSLock *lock = [NSLock new]; - NSMutableSet *threads = [NSMutableSet set]; - NSMutableIndexSet *indices = [NSMutableIndexSet indexSet]; - - size_t const iterations = 1E5; - ASDispatchApply(iterations, q, 0, ^(size_t i) { - [lock lock]; - [threads addObject:[NSThread currentThread]]; - XCTAssertFalse([indices containsIndex:i]); - [indices addIndex:i]; - [lock unlock]; - }); - XCTAssertLessThanOrEqual(threads.count, expectedThreadCount); - XCTAssertEqualObjects(indices, [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, iterations)]); -} - -- (void)testDispatchAsync -{ - dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - NSInteger expectedThreadCount = [NSProcessInfo processInfo].activeProcessorCount * 2; - NSLock *lock = [NSLock new]; - NSMutableSet *threads = [NSMutableSet set]; - NSMutableIndexSet *indices = [NSMutableIndexSet indexSet]; - XCTestExpectation *expectation = [self expectationWithDescription:@"Executed all blocks"]; - - size_t const iterations = 1E5; - ASDispatchAsync(iterations, q, 0, ^(size_t i) { - [lock lock]; - [threads addObject:[NSThread currentThread]]; - XCTAssertFalse([indices containsIndex:i]); - [indices addIndex:i]; - if (indices.count == iterations) { - [expectation fulfill]; - } - [lock unlock]; - }); - [self waitForExpectationsWithTimeout:10 handler:nil]; - XCTAssertLessThanOrEqual(threads.count, expectedThreadCount); - XCTAssertEqualObjects(indices, [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, iterations)]); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASDisplayLayerTests.mm b/submodules/AsyncDisplayKit/Tests/ASDisplayLayerTests.mm deleted file mode 100644 index 2e03eb6da2..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASDisplayLayerTests.mm +++ /dev/null @@ -1,598 +0,0 @@ -// -// ASDisplayLayerTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import -#import -#import - -#import - -#import "ASDisplayNodeTestsHelper.h" - -static UIImage *bogusImage() { - static UIImage *bogusImage = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - - UIGraphicsBeginImageContext(CGSizeMake(10, 10)); - - bogusImage = UIGraphicsGetImageFromCurrentImageContext(); - - UIGraphicsEndImageContext(); - - }); - - return bogusImage; -} - -@interface _ASDisplayLayerTestContainerLayer : CALayer -@property (nonatomic, readonly) NSUInteger didCompleteTransactionCount; -@end - -@implementation _ASDisplayLayerTestContainerLayer - -- (void)asyncdisplaykit_asyncTransactionContainerDidCompleteTransaction:(_ASAsyncTransaction *)transaction -{ - _didCompleteTransactionCount++; -} - -@end - - -@interface ASDisplayNode (HackForTests) -- (id)initWithViewClass:(Class)viewClass; -- (id)initWithLayerClass:(Class)layerClass; -@end - - -@interface _ASDisplayLayerTestLayer : _ASDisplayLayer -{ - BOOL _isInCancelAsyncDisplay; - BOOL _isInDisplay; -} -@property (nonatomic, readonly) NSUInteger displayCount; -@property (nonatomic, readonly) NSUInteger drawInContextCount; -@property (nonatomic, readonly) NSUInteger setContentsAsyncCount; -@property (nonatomic, readonly) NSUInteger setContentsSyncCount; -@property (nonatomic, copy, readonly) NSString *setContentsCounts; -- (BOOL)checkSetContentsCountsWithSyncCount:(NSUInteger)syncCount asyncCount:(NSUInteger)asyncCount; -@end - -@implementation _ASDisplayLayerTestLayer - -- (NSString *)setContentsCounts -{ - return [NSString stringWithFormat:@"syncCount:%tu, asyncCount:%tu", _setContentsSyncCount, _setContentsAsyncCount]; -} - -- (BOOL)checkSetContentsCountsWithSyncCount:(NSUInteger)syncCount asyncCount:(NSUInteger)asyncCount -{ - return ((syncCount == _setContentsSyncCount) && - (asyncCount == _setContentsAsyncCount)); -} - -- (void)setContents:(id)contents -{ - [super setContents:contents]; - - if (self.displaysAsynchronously) { - if (_isInDisplay) { - [NSException raise:NSInvalidArgumentException format:@"There is no placeholder logic in _ASDisplayLayer, unknown caller for setContents:"]; - } else if (!_isInCancelAsyncDisplay) { - _setContentsAsyncCount++; - } - } else { - _setContentsSyncCount++; - } -} - -- (void)display -{ - _isInDisplay = YES; - [super display]; - _isInDisplay = NO; - _displayCount++; -} - -- (void)cancelAsyncDisplay -{ - _isInCancelAsyncDisplay = YES; - [super cancelAsyncDisplay]; - _isInCancelAsyncDisplay = NO; -} - -// This should never get called. This just records if it is. -- (void)drawInContext:(CGContextRef)context -{ - [super drawInContext:context]; - _drawInContextCount++; -} - -@end - -typedef NS_ENUM(NSUInteger, _ASDisplayLayerTestDelegateMode) -{ - _ASDisplayLayerTestDelegateModeNone = 0, - _ASDisplayLayerTestDelegateModeDrawParameters = 1 << 0, - _ASDisplayLayerTestDelegateModeWillDisplay = 1 << 1, - _ASDisplayLayerTestDelegateModeDidDisplay = 1 << 2, -}; - -typedef NS_ENUM(NSUInteger, _ASDisplayLayerTestDelegateClassModes) { - _ASDisplayLayerTestDelegateClassModeNone = 0, - _ASDisplayLayerTestDelegateClassModeDisplay = 1 << 0, - _ASDisplayLayerTestDelegateClassModeDrawInContext = 1 << 1, -}; - -@interface _ASDisplayLayerTestDelegate : ASDisplayNode <_ASDisplayLayerDelegate> - -@property (nonatomic) NSUInteger didDisplayCount; -@property (nonatomic) NSUInteger drawParametersCount; -@property (nonatomic) NSUInteger willDisplayCount; - -// for _ASDisplayLayerTestDelegateModeClassDisplay -@property (nonatomic) NSUInteger displayCount; -@property (nonatomic) UIImage *(^displayLayerBlock)(void); - -// for _ASDisplayLayerTestDelegateModeClassDrawInContext -@property (nonatomic) NSUInteger drawRectCount; - -@end - -@implementation _ASDisplayLayerTestDelegate { - _ASDisplayLayerTestDelegateMode _modes; -} - -static _ASDisplayLayerTestDelegateClassModes _class_modes; - -+ (void)setClassModes:(_ASDisplayLayerTestDelegateClassModes)classModes -{ - _class_modes = classModes; -} - -- (id)initWithModes:(_ASDisplayLayerTestDelegateMode)modes -{ - _modes = modes; - - if (!(self = [super initWithLayerClass:[_ASDisplayLayerTestLayer class]])) - return nil; - - return self; -} - -- (void)didDisplayAsyncLayer:(_ASDisplayLayer *)layer -{ - _didDisplayCount++; -} - -- (NSObject *)drawParametersForAsyncLayer:(_ASDisplayLayer *)layer -{ - _drawParametersCount++; - return self; -} - -- (void)willDisplayAsyncLayer:(_ASDisplayLayer *)layer -{ - _willDisplayCount++; -} - -- (BOOL)respondsToSelector:(SEL)selector -{ - if (sel_isEqual(selector, @selector(didDisplayAsyncLayer:))) { - return (_modes & _ASDisplayLayerTestDelegateModeDidDisplay); - } else if (sel_isEqual(selector, @selector(drawParametersForAsyncLayer:))) { - return (_modes & _ASDisplayLayerTestDelegateModeDrawParameters); - } else if (sel_isEqual(selector, @selector(willDisplayAsyncLayer:))) { - return (_modes & _ASDisplayLayerTestDelegateModeWillDisplay); - } else { - return [super respondsToSelector:selector]; - } -} - -+ (BOOL)respondsToSelector:(SEL)selector -{ - if (sel_isEqual(selector, @selector(displayWithParameters:isCancelled:))) { - return _class_modes & _ASDisplayLayerTestDelegateClassModeDisplay; - } else if (sel_isEqual(selector, @selector(drawRect:withParameters:isCancelled:isRasterizing:))) { - return _class_modes & _ASDisplayLayerTestDelegateClassModeDrawInContext; - } else { - return [super respondsToSelector:selector]; - } -} - -// DANGER: Don't use the delegate as the parameters in real code; this is not thread-safe and just for accounting in unit tests! -+ (UIImage *)displayWithParameters:(_ASDisplayLayerTestDelegate *)delegate isCancelled:(NS_NOESCAPE asdisplaynode_iscancelled_block_t)sentinelBlock -{ - UIImage *contents = bogusImage(); - if (delegate->_displayLayerBlock != NULL) { - contents = delegate->_displayLayerBlock(); - } - delegate->_displayCount++; - return contents; -} - -// DANGER: Don't use the delegate as the parameters in real code; this is not thread-safe and just for accounting in unit tests! -+ (void)drawRect:(CGRect)bounds withParameters:(_ASDisplayLayerTestDelegate *)delegate isCancelled:(NS_NOESCAPE asdisplaynode_iscancelled_block_t)sentinelBlock isRasterizing:(BOOL)isRasterizing -{ - __atomic_add_fetch(&delegate->_drawRectCount, 1, __ATOMIC_SEQ_CST); -} - -- (NSUInteger)drawRectCount -{ - return(__atomic_load_n(&_drawRectCount, __ATOMIC_SEQ_CST)); -} - -@end - -@interface _ASDisplayLayerTests : XCTestCase -@end - -@implementation _ASDisplayLayerTests - -- (void)setUp { - [super setUp]; - // Force bogusImage() to create+cache its image. This impacts any time-sensitive tests which call the method from - // within the timed portion of the test. It seems that, in rare cases, this image creation can take a bit too long, - // causing a test failure. - bogusImage(); -} - -// since we're not running in an application, we need to force this display on layer the hierarchy -- (void)displayLayerRecursively:(CALayer *)layer -{ - if (layer.needsDisplay) { - [layer displayIfNeeded]; - } - for (CALayer *sublayer in layer.sublayers) { - [self displayLayerRecursively:sublayer]; - } -} - -- (void)waitForDisplayQueue -{ - // make sure we don't lock up the tests indefinitely; fail after 1 sec by using an async barrier - __block BOOL didHitBarrier = NO; - dispatch_barrier_async([_ASDisplayLayer displayQueue], ^{ - __atomic_store_n(&didHitBarrier, YES, __ATOMIC_SEQ_CST); - }); - XCTAssertTrue(ASDisplayNodeRunRunLoopUntilBlockIsTrue(^BOOL{ return __atomic_load_n(&didHitBarrier, __ATOMIC_SEQ_CST); })); -} - -- (void)waitForLayer:(_ASDisplayLayerTestLayer *)layer asyncDisplayCount:(NSUInteger)count -{ - // make sure we don't lock up the tests indefinitely; fail after 1 sec of waiting for the setContents async count to increment - // NOTE: the layer sets its contents async back on the main queue, so we need to wait for main - XCTAssertTrue(ASDisplayNodeRunRunLoopUntilBlockIsTrue(^BOOL{ - return (layer.setContentsAsyncCount == count); - })); -} - -- (void)waitForAsyncDelegate:(_ASDisplayLayerTestDelegate *)asyncDelegate -{ - XCTAssertTrue(ASDisplayNodeRunRunLoopUntilBlockIsTrue(^BOOL{ - return (asyncDelegate.didDisplayCount == 1); - })); -} - -- (void)checkDelegateDisplay:(BOOL)displaysAsynchronously -{ - [_ASDisplayLayerTestDelegate setClassModes:_ASDisplayLayerTestDelegateClassModeDisplay]; - _ASDisplayLayerTestDelegate *asyncDelegate = [[_ASDisplayLayerTestDelegate alloc] initWithModes:_ASDisplayLayerTestDelegateMode(_ASDisplayLayerTestDelegateModeDidDisplay | _ASDisplayLayerTestDelegateModeDrawParameters)]; - - _ASDisplayLayerTestLayer *layer = (_ASDisplayLayerTestLayer *)asyncDelegate.layer; - layer.displaysAsynchronously = displaysAsynchronously; - - if (displaysAsynchronously) { - dispatch_suspend([_ASDisplayLayer displayQueue]); - } - layer.frame = CGRectMake(0.0, 0.0, 100.0, 100.0); - [layer setNeedsDisplay]; - [layer displayIfNeeded]; - - if (displaysAsynchronously) { - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:0 asyncCount:0], @"%@", layer.setContentsCounts); - XCTAssertEqual(layer.displayCount, 1u); - XCTAssertEqual(layer.drawInContextCount, 0u); - dispatch_resume([_ASDisplayLayer displayQueue]); - [self waitForDisplayQueue]; - [self waitForAsyncDelegate:asyncDelegate]; - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:0 asyncCount:1], @"%@", layer.setContentsCounts); - } else { - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:1 asyncCount:0], @"%@", layer.setContentsCounts); - } - - XCTAssertFalse(layer.needsDisplay); - XCTAssertEqual(layer.displayCount, 1u); - XCTAssertEqual(layer.drawInContextCount, 0u); - XCTAssertEqual(asyncDelegate.didDisplayCount, 1u); - XCTAssertEqual(asyncDelegate.displayCount, 1u); -} - -- (void)testDelegateDisplaySync -{ - [self checkDelegateDisplay:NO]; -} - -- (void)testDelegateDisplayAsync -{ - [self checkDelegateDisplay:YES]; -} - -- (void)checkDelegateDrawInContext:(BOOL)displaysAsynchronously -{ - [_ASDisplayLayerTestDelegate setClassModes:_ASDisplayLayerTestDelegateClassModeDrawInContext]; - _ASDisplayLayerTestDelegate *asyncDelegate = [[_ASDisplayLayerTestDelegate alloc] initWithModes:_ASDisplayLayerTestDelegateMode(_ASDisplayLayerTestDelegateModeDidDisplay | _ASDisplayLayerTestDelegateModeDrawParameters)]; - - _ASDisplayLayerTestLayer *layer = (_ASDisplayLayerTestLayer *)asyncDelegate.layer; - layer.displaysAsynchronously = displaysAsynchronously; - - if (displaysAsynchronously) { - dispatch_suspend([_ASDisplayLayer displayQueue]); - } - layer.frame = CGRectMake(0.0, 0.0, 100.0, 100.0); - [layer setNeedsDisplay]; - [layer displayIfNeeded]; - - if (displaysAsynchronously) { - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:0 asyncCount:0], @"%@", layer.setContentsCounts); - XCTAssertEqual(layer.displayCount, 1u); - XCTAssertEqual(layer.drawInContextCount, 0u); - XCTAssertEqual(asyncDelegate.drawRectCount, 0u); - dispatch_resume([_ASDisplayLayer displayQueue]); - [self waitForLayer:layer asyncDisplayCount:1]; - [self waitForAsyncDelegate:asyncDelegate]; - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:0 asyncCount:1], @"%@", layer.setContentsCounts); - } else { - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:1 asyncCount:0], @"%@", layer.setContentsCounts); - } - - XCTAssertFalse(layer.needsDisplay); - XCTAssertEqual(layer.displayCount, 1u); - XCTAssertEqual(layer.drawInContextCount, 0u); - XCTAssertEqual(asyncDelegate.didDisplayCount, 1u); - XCTAssertEqual(asyncDelegate.displayCount, 0u); - XCTAssertEqual(asyncDelegate.drawParametersCount, 1u); - XCTAssertEqual(asyncDelegate.drawRectCount, 1u); -} - -- (void)testDelegateDrawInContextSync -{ - [self checkDelegateDrawInContext:NO]; -} - -- (void)testDelegateDrawInContextAsync -{ - [self checkDelegateDrawInContext:YES]; -} - -- (void)checkDelegateDisplayAndDrawInContext:(BOOL)displaysAsynchronously -{ - [_ASDisplayLayerTestDelegate setClassModes:_ASDisplayLayerTestDelegateClassModes(_ASDisplayLayerTestDelegateClassModeDisplay | _ASDisplayLayerTestDelegateClassModeDrawInContext)]; - _ASDisplayLayerTestDelegate *asyncDelegate = [[_ASDisplayLayerTestDelegate alloc] initWithModes:_ASDisplayLayerTestDelegateMode(_ASDisplayLayerTestDelegateModeDidDisplay | _ASDisplayLayerTestDelegateModeDrawParameters)]; - - _ASDisplayLayerTestLayer *layer = (_ASDisplayLayerTestLayer *)asyncDelegate.layer; - layer.displaysAsynchronously = displaysAsynchronously; - - if (displaysAsynchronously) { - dispatch_suspend([_ASDisplayLayer displayQueue]); - } - layer.frame = CGRectMake(0.0, 0.0, 100.0, 100.0); - [layer setNeedsDisplay]; - [layer displayIfNeeded]; - - if (displaysAsynchronously) { - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:0 asyncCount:0], @"%@", layer.setContentsCounts); - XCTAssertEqual(layer.displayCount, 1u); - XCTAssertEqual(asyncDelegate.drawParametersCount, 1u); - XCTAssertEqual(asyncDelegate.drawRectCount, 0u); - dispatch_resume([_ASDisplayLayer displayQueue]); - [self waitForDisplayQueue]; - [self waitForAsyncDelegate:asyncDelegate]; - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:0 asyncCount:1], @"%@", layer.setContentsCounts); - } else { - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:1 asyncCount:0], @"%@", layer.setContentsCounts); - } - - XCTAssertFalse(layer.needsDisplay); - XCTAssertEqual(layer.displayCount, 1u); - XCTAssertEqual(layer.drawInContextCount, 0u); - XCTAssertEqual(asyncDelegate.didDisplayCount, 1u); - XCTAssertEqual(asyncDelegate.displayCount, 1u); - XCTAssertEqual(asyncDelegate.drawParametersCount, 1u); - XCTAssertEqual(asyncDelegate.drawRectCount, 0u); -} - -- (void)testDelegateDisplayAndDrawInContextSync -{ - [self checkDelegateDisplayAndDrawInContext:NO]; -} - -- (void)testDelegateDisplayAndDrawInContextAsync -{ - [self checkDelegateDisplayAndDrawInContext:YES]; -} - -- (void)testCancelAsyncDisplay -{ - [_ASDisplayLayerTestDelegate setClassModes:_ASDisplayLayerTestDelegateClassModeDisplay]; - _ASDisplayLayerTestDelegate *asyncDelegate = [[_ASDisplayLayerTestDelegate alloc] initWithModes:_ASDisplayLayerTestDelegateModeDidDisplay]; - _ASDisplayLayerTestLayer *layer = (_ASDisplayLayerTestLayer *)asyncDelegate.layer; - - dispatch_suspend([_ASDisplayLayer displayQueue]); - layer.frame = CGRectMake(0.0, 0.0, 100.0, 100.0); - [layer setNeedsDisplay]; - XCTAssertTrue(layer.needsDisplay); - [layer displayIfNeeded]; - - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:0 asyncCount:0], @"%@", layer.setContentsCounts); - XCTAssertFalse(layer.needsDisplay); - XCTAssertEqual(layer.displayCount, 1u); - XCTAssertEqual(layer.drawInContextCount, 0u); - - [layer cancelAsyncDisplay]; - - dispatch_resume([_ASDisplayLayer displayQueue]); - [self waitForDisplayQueue]; - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:0 asyncCount:0], @"%@", layer.setContentsCounts); - XCTAssertEqual(layer.displayCount, 1u); - XCTAssertEqual(layer.drawInContextCount, 0u); - XCTAssertEqual(asyncDelegate.didDisplayCount, 0u); - XCTAssertEqual(asyncDelegate.displayCount, 0u); - XCTAssertEqual(asyncDelegate.drawParametersCount, 0u); -} - -- (void)DISABLED_testTransaction -{ - auto delegateModes = _ASDisplayLayerTestDelegateMode(_ASDisplayLayerTestDelegateModeDidDisplay | _ASDisplayLayerTestDelegateModeDrawParameters); - [_ASDisplayLayerTestDelegate setClassModes:_ASDisplayLayerTestDelegateClassModeDisplay]; - - // Setup - _ASDisplayLayerTestContainerLayer *containerLayer = [[_ASDisplayLayerTestContainerLayer alloc] init]; - containerLayer.asyncdisplaykit_asyncTransactionContainer = YES; - containerLayer.frame = CGRectMake(0.0, 0.0, 100.0, 100.0); - - _ASDisplayLayerTestDelegate *layer1Delegate = [[_ASDisplayLayerTestDelegate alloc] initWithModes:delegateModes]; - _ASDisplayLayerTestLayer *layer1 = (_ASDisplayLayerTestLayer *)layer1Delegate.layer; - layer1.displaysAsynchronously = YES; - - dispatch_semaphore_t displayAsyncLayer1Sema = dispatch_semaphore_create(0); - layer1Delegate.displayLayerBlock = ^UIImage *{ - dispatch_semaphore_wait(displayAsyncLayer1Sema, DISPATCH_TIME_FOREVER); - return bogusImage(); - }; - layer1.backgroundColor = [UIColor blackColor].CGColor; - layer1.frame = CGRectMake(0.0, 0.0, 333.0, 123.0); - [containerLayer addSublayer:layer1]; - - _ASDisplayLayerTestDelegate *layer2Delegate = [[_ASDisplayLayerTestDelegate alloc] initWithModes:delegateModes]; - _ASDisplayLayerTestLayer *layer2 = (_ASDisplayLayerTestLayer *)layer2Delegate.layer; - layer2.displaysAsynchronously = YES; - layer2.backgroundColor = [UIColor blackColor].CGColor; - layer2.frame = CGRectMake(0.0, 50.0, 97.0, 50.0); - [containerLayer addSublayer:layer2]; - - dispatch_suspend([_ASDisplayLayer displayQueue]); - - // display below if needed - [layer1 setNeedsDisplay]; - [layer2 setNeedsDisplay]; - [containerLayer setNeedsDisplay]; - [self displayLayerRecursively:containerLayer]; - - // check state before running displayQueue - XCTAssertTrue([layer1 checkSetContentsCountsWithSyncCount:0 asyncCount:0], @"%@", layer1.setContentsCounts); - XCTAssertEqual(layer1.displayCount, 1u); - XCTAssertEqual(layer1Delegate.displayCount, 0u); - XCTAssertTrue([layer2 checkSetContentsCountsWithSyncCount:0 asyncCount:0], @"%@", layer2.setContentsCounts); - XCTAssertEqual(layer2.displayCount, 1u); - XCTAssertEqual(layer1Delegate.displayCount, 0u); - XCTAssertEqual(containerLayer.didCompleteTransactionCount, 0u); - - // run displayQueue until async display for layer2 has been run - dispatch_resume([_ASDisplayLayer displayQueue]); - XCTAssertTrue(ASDisplayNodeRunRunLoopUntilBlockIsTrue(^BOOL{ - return (layer2Delegate.displayCount == 1); - })); - - // check layer1 has not had async display run - XCTAssertTrue([layer1 checkSetContentsCountsWithSyncCount:0 asyncCount:0], @"%@", layer1.setContentsCounts); - XCTAssertEqual(layer1.displayCount, 1u); - XCTAssertEqual(layer1Delegate.displayCount, 0u); - // check layer2 has had async display run - XCTAssertTrue([layer2 checkSetContentsCountsWithSyncCount:0 asyncCount:0], @"%@", layer2.setContentsCounts); - XCTAssertEqual(layer2.displayCount, 1u); - XCTAssertEqual(layer2Delegate.displayCount, 1u); - XCTAssertEqual(containerLayer.didCompleteTransactionCount, 0u); - - - // allow layer1 to complete display - dispatch_semaphore_signal(displayAsyncLayer1Sema); - [self waitForLayer:layer1 asyncDisplayCount:1]; - - // check that both layers have completed display - XCTAssertTrue([layer1 checkSetContentsCountsWithSyncCount:0 asyncCount:1], @"%@", layer1.setContentsCounts); - XCTAssertEqual(layer1.displayCount, 1u); - XCTAssertEqual(layer1Delegate.displayCount, 1u); - XCTAssertTrue([layer2 checkSetContentsCountsWithSyncCount:0 asyncCount:1], @"%@", layer2.setContentsCounts); - XCTAssertEqual(layer2.displayCount, 1u); - XCTAssertEqual(layer2Delegate.displayCount, 1u); - - XCTAssertTrue(ASDisplayNodeRunRunLoopUntilBlockIsTrue(^BOOL{ - return (containerLayer.didCompleteTransactionCount == 1); - })); -} - -- (void)checkSuspendResume:(BOOL)displaysAsynchronously -{ - [_ASDisplayLayerTestDelegate setClassModes:_ASDisplayLayerTestDelegateClassModeDrawInContext]; - _ASDisplayLayerTestDelegate *asyncDelegate = [[_ASDisplayLayerTestDelegate alloc] initWithModes:_ASDisplayLayerTestDelegateMode(_ASDisplayLayerTestDelegateModeDidDisplay | _ASDisplayLayerTestDelegateModeDrawParameters)]; - - _ASDisplayLayerTestLayer *layer = (_ASDisplayLayerTestLayer *)asyncDelegate.layer; - layer.displaysAsynchronously = displaysAsynchronously; - layer.frame = CGRectMake(0.0, 0.0, 100.0, 100.0); - - if (displaysAsynchronously) { - dispatch_suspend([_ASDisplayLayer displayQueue]); - } - - // Layer shouldn't display because display is suspended - layer.displaySuspended = YES; - [layer setNeedsDisplay]; - [layer displayIfNeeded]; - XCTAssertEqual(layer.displayCount, 0u, @"Should not have displayed because display is suspended, thus -setNeedsDisplay is a no-op"); - XCTAssertFalse(layer.needsDisplay, @"Should not need display"); - if (displaysAsynchronously) { - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:0 asyncCount:0], @"%@", layer.setContentsCounts); - dispatch_resume([_ASDisplayLayer displayQueue]); - [self waitForDisplayQueue]; - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:0 asyncCount:0], @"%@", layer.setContentsCounts); - } else { - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:0 asyncCount:0], @"%@", layer.setContentsCounts); - } - XCTAssertFalse(layer.needsDisplay); - XCTAssertEqual(layer.drawInContextCount, 0u); - XCTAssertEqual(asyncDelegate.drawRectCount, 0u); - - // Layer should display because display is resumed - if (displaysAsynchronously) { - dispatch_suspend([_ASDisplayLayer displayQueue]); - } - layer.displaySuspended = NO; - XCTAssertTrue(layer.needsDisplay); - [layer displayIfNeeded]; - XCTAssertEqual(layer.displayCount, 1u); - if (displaysAsynchronously) { - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:0 asyncCount:0], @"%@", layer.setContentsCounts); - XCTAssertEqual(layer.drawInContextCount, 0u); - XCTAssertEqual(asyncDelegate.drawRectCount, 0u); - dispatch_resume([_ASDisplayLayer displayQueue]); - [self waitForLayer:layer asyncDisplayCount:1]; - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:0 asyncCount:1], @"%@", layer.setContentsCounts); - } else { - XCTAssertTrue([layer checkSetContentsCountsWithSyncCount:1 asyncCount:0], @"%@", layer.setContentsCounts); - } - XCTAssertEqual(layer.drawInContextCount, 0u); - XCTAssertEqual(asyncDelegate.drawParametersCount, 1u); - XCTAssertEqual(asyncDelegate.drawRectCount, 1u); - XCTAssertFalse(layer.needsDisplay); -} - -- (void)testSuspendResumeAsync -{ - [self checkSuspendResume:YES]; -} - -- (void)testSuspendResumeSync -{ - [self checkSuspendResume:NO]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeAppearanceTests.mm b/submodules/AsyncDisplayKit/Tests/ASDisplayNodeAppearanceTests.mm deleted file mode 100644 index 515bcf7cfc..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeAppearanceTests.mm +++ /dev/null @@ -1,417 +0,0 @@ -// -// ASDisplayNodeAppearanceTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import - -#import - -#import -#import -#import -#import - -// helper functions -IMP class_replaceMethodWithBlock(Class theClass, SEL originalSelector, id block); -IMP class_replaceMethodWithBlock(Class theClass, SEL originalSelector, id block) -{ - IMP newImplementation = imp_implementationWithBlock(block); - Method method = class_getInstanceMethod(theClass, originalSelector); - return class_replaceMethod(theClass, originalSelector, newImplementation, method_getTypeEncoding(method)); -} - -static dispatch_block_t modifyMethodByAddingPrologueBlockAndReturnCleanupBlock(Class theClass, SEL originalSelector, void (^block)(id)) -{ - __block IMP originalImp = NULL; - void (^blockActualSwizzle)(id) = ^(id swizzedSelf){ - block(swizzedSelf); - ((void(*)(id, SEL))originalImp)(swizzedSelf, originalSelector); - }; - originalImp = class_replaceMethodWithBlock(theClass, originalSelector, blockActualSwizzle); - void (^cleanupBlock)(void) = ^{ - // restore original method - Method method = class_getInstanceMethod(theClass, originalSelector); - class_replaceMethod(theClass, originalSelector, originalImp, method_getTypeEncoding(method)); - }; - return cleanupBlock; -}; - -@interface ASDisplayNode (PrivateStuffSoWeDontPullInCPPInternalH) -- (BOOL)__visibilityNotificationsDisabled; -- (BOOL)__selfOrParentHasVisibilityNotificationsDisabled; -- (id)initWithViewClass:(Class)viewClass; -- (id)initWithLayerClass:(Class)layerClass; -@end - -@interface ASDisplayNodeAppearanceTests : XCTestCase -@end - -// Conveniences for making nodes named a certain way -#define DeclareNodeNamed(n) ASDisplayNode *n = [[ASDisplayNode alloc] init]; n.debugName = @#n -#define DeclareViewNamed(v) \ - ASDisplayNode *node_##v = [[ASDisplayNode alloc] init]; \ - node_##v.debugName = @#v; \ - UIView *v = node_##v.view; - -@implementation ASDisplayNodeAppearanceTests -{ - _ASDisplayView *_view; - - NSMutableArray *_swizzleCleanupBlocks; - - NSCountedSet *_willEnterHierarchyCounts; - NSCountedSet *_didExitHierarchyCounts; - -} - -- (void)setUp -{ - [super setUp]; - - _swizzleCleanupBlocks = [[NSMutableArray alloc] init]; - - // Using this instead of mocks. Count # of times method called - _willEnterHierarchyCounts = [[NSCountedSet alloc] init]; - _didExitHierarchyCounts = [[NSCountedSet alloc] init]; - - dispatch_block_t cleanupBlock = modifyMethodByAddingPrologueBlockAndReturnCleanupBlock([ASDisplayNode class], @selector(willEnterHierarchy), ^(id blockSelf){ - [_willEnterHierarchyCounts addObject:blockSelf]; - }); - [_swizzleCleanupBlocks addObject:cleanupBlock]; - cleanupBlock = modifyMethodByAddingPrologueBlockAndReturnCleanupBlock([ASDisplayNode class], @selector(didExitHierarchy), ^(id blockSelf){ - [_didExitHierarchyCounts addObject:blockSelf]; - }); - [_swizzleCleanupBlocks addObject:cleanupBlock]; -} - -- (void)tearDown -{ - [super tearDown]; - - for(dispatch_block_t cleanupBlock in _swizzleCleanupBlocks) { - cleanupBlock(); - } - _swizzleCleanupBlocks = nil; - _willEnterHierarchyCounts = nil; - _didExitHierarchyCounts = nil; -} - -- (void)testAppearanceMethodsCalledWithRootNodeInWindowLayer -{ - [self checkAppearanceMethodsCalledWithRootNodeInWindowLayerBacked:YES]; -} - -- (void)testAppearanceMethodsCalledWithRootNodeInWindowView -{ - [self checkAppearanceMethodsCalledWithRootNodeInWindowLayerBacked:NO]; -} - -- (void)checkAppearanceMethodsCalledWithRootNodeInWindowLayerBacked:(BOOL)isLayerBacked -{ - // ASDisplayNode visibility does not change if modifying a hierarchy that is not in a window. So create one and add the superview to it. - UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectZero]; - - DeclareNodeNamed(n); - DeclareViewNamed(superview); - - n.layerBacked = isLayerBacked; - - if (isLayerBacked) { - [superview.layer addSublayer:n.layer]; - } else { - [superview addSubview:n.view]; - } - - XCTAssertEqual([_willEnterHierarchyCounts countForObject:n], 0u, @"willEnterHierarchy erroneously called"); - XCTAssertEqual([_didExitHierarchyCounts countForObject:n], 0u, @"didExitHierarchy erroneously called"); - - [window addSubview:superview]; - XCTAssertEqual([_willEnterHierarchyCounts countForObject:n], 1u, @"willEnterHierarchy not called when node's view added to hierarchy"); - XCTAssertEqual([_didExitHierarchyCounts countForObject:n], 0u, @"didExitHierarchy erroneously called"); - - XCTAssertTrue(n.inHierarchy, @"Node should be visible"); - - if (isLayerBacked) { - [n.layer removeFromSuperlayer]; - } else { - [n.view removeFromSuperview]; - } - - XCTAssertFalse(n.inHierarchy, @"Node should be not visible"); - - XCTAssertEqual([_willEnterHierarchyCounts countForObject:n], 1u, @"willEnterHierarchy not called when node's view added to hierarchy"); - XCTAssertEqual([_didExitHierarchyCounts countForObject:n], 1u, @"didExitHierarchy erroneously called"); -} - -- (void)checkManualAppearanceViewLoaded:(BOOL)isViewLoaded layerBacked:(BOOL)isLayerBacked -{ - // ASDisplayNode visibility does not change if modifying a hierarchy that is not in a window. So create one and add the superview to it. - UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectZero]; - - DeclareNodeNamed(parent); - DeclareNodeNamed(a); - DeclareNodeNamed(b); - DeclareNodeNamed(aa); - DeclareNodeNamed(ab); - - for (ASDisplayNode *n in @[parent, a, b, aa, ab]) { - n.layerBacked = isLayerBacked; - if (isViewLoaded) - [n layer]; - } - - [parent addSubnode:a]; - - XCTAssertFalse(parent.inHierarchy, @"Nothing should be visible"); - XCTAssertFalse(a.inHierarchy, @"Nothing should be visible"); - XCTAssertFalse(b.inHierarchy, @"Nothing should be visible"); - XCTAssertFalse(aa.inHierarchy, @"Nothing should be visible"); - XCTAssertFalse(ab.inHierarchy, @"Nothing should be visible"); - - if (isLayerBacked) { - [window.layer addSublayer:parent.layer]; - } else { - [window addSubview:parent.view]; - } - - XCTAssertEqual([_willEnterHierarchyCounts countForObject:parent], 1u, @"Should have -willEnterHierarchy called once"); - XCTAssertEqual([_willEnterHierarchyCounts countForObject:a], 1u, @"Should have -willEnterHierarchy called once"); - XCTAssertEqual([_willEnterHierarchyCounts countForObject:b], 0u, @"Should not have appeared yet"); - XCTAssertEqual([_willEnterHierarchyCounts countForObject:aa], 0u, @"Should not have appeared yet"); - XCTAssertEqual([_willEnterHierarchyCounts countForObject:ab], 0u, @"Should not have appeared yet"); - - XCTAssertTrue(parent.inHierarchy, @"Should be visible"); - XCTAssertTrue(a.inHierarchy, @"Should be visible"); - XCTAssertFalse(b.inHierarchy, @"Nothing should be visible"); - XCTAssertFalse(aa.inHierarchy, @"Nothing should be visible"); - XCTAssertFalse(ab.inHierarchy, @"Nothing should be visible"); - - // Add to an already-visible node should make the node visible - [parent addSubnode:b]; - [a insertSubnode:aa atIndex:0]; - [a insertSubnode:ab aboveSubnode:aa]; - - XCTAssertTrue(parent.inHierarchy, @"Should be visible"); - XCTAssertTrue(a.inHierarchy, @"Should be visible"); - XCTAssertTrue(b.inHierarchy, @"Should be visible after adding to visible parent"); - XCTAssertTrue(aa.inHierarchy, @"Nothing should be visible"); - XCTAssertTrue(ab.inHierarchy, @"Nothing should be visible"); - - XCTAssertEqual([_willEnterHierarchyCounts countForObject:parent], 1u, @"Should have -willEnterHierarchy called once"); - XCTAssertEqual([_willEnterHierarchyCounts countForObject:a], 1u, @"Should have -willEnterHierarchy called once"); - XCTAssertEqual([_willEnterHierarchyCounts countForObject:b], 1u, @"Should have -willEnterHierarchy called once"); - XCTAssertEqual([_willEnterHierarchyCounts countForObject:aa], 1u, @"Should have -willEnterHierarchy called once"); - XCTAssertEqual([_willEnterHierarchyCounts countForObject:ab], 1u, @"Should have -willEnterHierarchy called once"); - - if (isLayerBacked) { - [parent.layer removeFromSuperlayer]; - } else { - [parent.view removeFromSuperview]; - } - - XCTAssertFalse(parent.inHierarchy, @"Nothing should be visible"); - XCTAssertFalse(a.inHierarchy, @"Nothing should be visible"); - XCTAssertFalse(b.inHierarchy, @"Nothing should be visible"); - XCTAssertFalse(aa.inHierarchy, @"Nothing should be visible"); - XCTAssertFalse(ab.inHierarchy, @"Nothing should be visible"); -} - -- (void)testAppearanceMethodsNoLayer -{ - [self checkManualAppearanceViewLoaded:NO layerBacked:YES]; -} - -- (void)testAppearanceMethodsNoView -{ - [self checkManualAppearanceViewLoaded:NO layerBacked:NO]; -} - -- (void)testAppearanceMethodsLayer -{ - [self checkManualAppearanceViewLoaded:YES layerBacked:YES]; -} - -- (void)testAppearanceMethodsView -{ - [self checkManualAppearanceViewLoaded:YES layerBacked:NO]; -} - -- (void)testSynchronousIntermediaryView -{ - // Parent is a wrapper node for a scrollview - ASDisplayNode *parentSynchronousNode = [[ASDisplayNode alloc] initWithViewClass:[UIScrollView class]]; - DeclareNodeNamed(layerBackedNode); - DeclareNodeNamed(viewBackedNode); - - layerBackedNode.layerBacked = YES; - - UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectZero]; - [parentSynchronousNode addSubnode:layerBackedNode]; - [parentSynchronousNode addSubnode:viewBackedNode]; - - XCTAssertFalse(parentSynchronousNode.inHierarchy, @"Should not yet be visible"); - XCTAssertFalse(layerBackedNode.inHierarchy, @"Should not yet be visible"); - XCTAssertFalse(viewBackedNode.inHierarchy, @"Should not yet be visible"); - - [window addSubview:parentSynchronousNode.view]; - - // This is a known case that isn't supported - XCTAssertFalse(parentSynchronousNode.inHierarchy, @"Synchronous views are not currently marked visible"); - - XCTAssertTrue(layerBackedNode.inHierarchy, @"Synchronous views' subviews should get marked visible"); - XCTAssertTrue(viewBackedNode.inHierarchy, @"Synchronous views' subviews should get marked visible"); - - // Try moving a node to/from a synchronous node in the window with the node API - // Setup - [layerBackedNode removeFromSupernode]; - [viewBackedNode removeFromSupernode]; - XCTAssertFalse(layerBackedNode.inHierarchy, @"aoeu"); - XCTAssertFalse(viewBackedNode.inHierarchy, @"aoeu"); - - // now move to synchronous node - [parentSynchronousNode addSubnode:layerBackedNode]; - [parentSynchronousNode insertSubnode:viewBackedNode aboveSubnode:layerBackedNode]; - XCTAssertTrue(layerBackedNode.inHierarchy, @"Synchronous views' subviews should get marked visible"); - XCTAssertTrue(viewBackedNode.inHierarchy, @"Synchronous views' subviews should get marked visible"); - - [parentSynchronousNode.view removeFromSuperview]; - - XCTAssertFalse(parentSynchronousNode.inHierarchy, @"Should not have changed"); - XCTAssertFalse(layerBackedNode.inHierarchy, @"Should have been marked invisible when synchronous superview was removed from the window"); - XCTAssertFalse(viewBackedNode.inHierarchy, @"Should have been marked invisible when synchronous superview was removed from the window"); -} - -- (void)checkMoveAcrossHierarchyLayerBacked:(BOOL)isLayerBacked useManualCalls:(BOOL)useManualDisable useNodeAPI:(BOOL)useNodeAPI -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectZero]; - - DeclareNodeNamed(parentA); - DeclareNodeNamed(parentB); - DeclareNodeNamed(child); - DeclareNodeNamed(childSubnode); - - for (ASDisplayNode *n in @[parentA, parentB, child, childSubnode]) { - n.layerBacked = isLayerBacked; - } - - [parentA addSubnode:child]; - [child addSubnode:childSubnode]; - - XCTAssertFalse(parentA.inHierarchy, @"Should not yet be visible"); - XCTAssertFalse(parentB.inHierarchy, @"Should not yet be visible"); - XCTAssertFalse(child.inHierarchy, @"Should not yet be visible"); - XCTAssertFalse(childSubnode.inHierarchy, @"Should not yet be visible"); - XCTAssertFalse(childSubnode.inHierarchy, @"Should not yet be visible"); - - XCTAssertEqual([_willEnterHierarchyCounts countForObject:child], 0u, @"Should not have -willEnterHierarchy called"); - XCTAssertEqual([_willEnterHierarchyCounts countForObject:childSubnode], 0u, @"Should not have -willEnterHierarchy called"); - - if (isLayerBacked) { - [window.layer addSublayer:parentA.layer]; - [window.layer addSublayer:parentB.layer]; - } else { - [window addSubview:parentA.view]; - [window addSubview:parentB.view]; - } - - XCTAssertTrue(parentA.inHierarchy, @"Should be visible after added to window"); - XCTAssertTrue(parentB.inHierarchy, @"Should be visible after added to window"); - XCTAssertTrue(child.inHierarchy, @"Should be visible after parent added to window"); - XCTAssertTrue(childSubnode.inHierarchy, @"Should be visible after parent added to window"); - - XCTAssertEqual([_willEnterHierarchyCounts countForObject:child], 1u, @"Should have -willEnterHierarchy called once"); - XCTAssertEqual([_willEnterHierarchyCounts countForObject:childSubnode], 1u, @"Should have -willEnterHierarchy called once"); - - // Move subnode from A to B - if (useManualDisable) { - ASDisplayNodeDisableHierarchyNotifications(child); - } - if (!useNodeAPI) { - [child removeFromSupernode]; - [parentB addSubnode:child]; - } else { - [parentB addSubnode:child]; - } - if (useManualDisable) { - XCTAssertTrue([child __visibilityNotificationsDisabled], @"Should not have re-enabled yet"); - XCTAssertTrue([child __selfOrParentHasVisibilityNotificationsDisabled], @"Should not have re-enabled yet"); - ASDisplayNodeEnableHierarchyNotifications(child); - } - - XCTAssertEqual([_willEnterHierarchyCounts countForObject:child], 1u, @"Should not have -willEnterHierarchy called when moving child around in hierarchy"); - - // Move subnode back to A - if (useManualDisable) { - ASDisplayNodeDisableHierarchyNotifications(child); - } - if (!useNodeAPI) { - [child removeFromSupernode]; - [parentA insertSubnode:child atIndex:0]; - } else { - [parentA insertSubnode:child atIndex:0]; - } - if (useManualDisable) { - XCTAssertTrue([child __visibilityNotificationsDisabled], @"Should not have re-enabled yet"); - XCTAssertTrue([child __selfOrParentHasVisibilityNotificationsDisabled], @"Should not have re-enabled yet"); - ASDisplayNodeEnableHierarchyNotifications(child); - } - - - XCTAssertEqual([_willEnterHierarchyCounts countForObject:child], 1u, @"Should not have -willEnterHierarchy called when moving child around in hierarchy"); - - // Finally, remove subnode - [child removeFromSupernode]; - - XCTAssertEqual([_willEnterHierarchyCounts countForObject:child], 1u, @"Should appear and disappear just once"); - - // Make sure that we don't leave these unbalanced - XCTAssertFalse([child __visibilityNotificationsDisabled], @"Unbalanced visibility notifications calls"); - XCTAssertFalse([child __selfOrParentHasVisibilityNotificationsDisabled], @"Should not have re-enabled yet"); -} - -- (void)testMoveAcrossHierarchyLayer -{ - [self checkMoveAcrossHierarchyLayerBacked:YES useManualCalls:NO useNodeAPI:YES]; -} - -- (void)testMoveAcrossHierarchyView -{ - [self checkMoveAcrossHierarchyLayerBacked:NO useManualCalls:NO useNodeAPI:YES]; -} - -- (void)testMoveAcrossHierarchyManualLayer -{ - [self checkMoveAcrossHierarchyLayerBacked:YES useManualCalls:YES useNodeAPI:NO]; -} - -- (void)testMoveAcrossHierarchyManualView -{ - [self checkMoveAcrossHierarchyLayerBacked:NO useManualCalls:YES useNodeAPI:NO]; -} - -- (void)testDisableWithNodeAPILayer -{ - [self checkMoveAcrossHierarchyLayerBacked:YES useManualCalls:YES useNodeAPI:YES]; -} - -- (void)testDisableWithNodeAPIView -{ - [self checkMoveAcrossHierarchyLayerBacked:NO useManualCalls:YES useNodeAPI:YES]; -} - -- (void)testPreventManualAppearanceMethods -{ - DeclareNodeNamed(n); - - XCTAssertThrows([n willEnterHierarchy], @"Should not allow manually calling appearance methods."); - XCTAssertThrows([n didExitHierarchy], @"Should not allow manually calling appearance methods."); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeExtrasTests.mm b/submodules/AsyncDisplayKit/Tests/ASDisplayNodeExtrasTests.mm deleted file mode 100644 index 77d904c2e6..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeExtrasTests.mm +++ /dev/null @@ -1,76 +0,0 @@ -// -// ASDisplayNodeExtrasTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import -#import - -@interface ASDisplayNodeExtrasTests : XCTestCase - -@end - -@interface TestDisplayNode : ASDisplayNode -@end - -@implementation TestDisplayNode -@end - -@implementation ASDisplayNodeExtrasTests - -- (void)testShallowFindSubnodesOfSubclass { - ASDisplayNode *supernode = [[ASDisplayNode alloc] initWithLayerBlock:^CALayer * _Nonnull{ - return [CALayer layer]; - }]; - NSUInteger count = 10; - NSMutableArray *expected = [[NSMutableArray alloc] initWithCapacity:count]; - for (NSUInteger nodeIndex = 0; nodeIndex < count; nodeIndex++) { - TestDisplayNode *node = [[TestDisplayNode alloc] initWithLayerBlock:^CALayer * _Nonnull{ - return [CALayer layer]; - }]; - [supernode addSubnode:node]; - [expected addObject:node]; - } - NSArray *found = ASDisplayNodeFindAllSubnodesOfClass(supernode, [TestDisplayNode class]); - XCTAssertEqualObjects(found, expected, @"Expecting %lu %@ nodes, found %lu", (unsigned long)count, [TestDisplayNode class], (unsigned long)found.count); -} - -- (void)testDeepFindSubnodesOfSubclass { - ASDisplayNode *supernode = [[ASDisplayNode alloc] initWithLayerBlock:^CALayer * _Nonnull{ - return [CALayer layer]; - }]; - - const NSUInteger count = 2; - const NSUInteger levels = 2; - const NSUInteger capacity = [[self class] capacityForCount:count levels:levels]; - NSMutableArray *expected = [[NSMutableArray alloc] initWithCapacity:capacity]; - - [[self class] addSubnodesToNode:supernode number:count remainingLevels:levels accumulated:expected]; - - NSArray *found = ASDisplayNodeFindAllSubnodesOfClass(supernode, [TestDisplayNode class]); - XCTAssertEqualObjects(found, expected, @"Expecting %lu %@ nodes, found %lu", (unsigned long)count, [TestDisplayNode class], (unsigned long)found.count); -} - -+ (void)addSubnodesToNode:(ASDisplayNode *)supernode number:(NSUInteger)number remainingLevels:(NSUInteger)level accumulated:(inout NSMutableArray *)expected { - if (level == 0) return; - for (NSUInteger nodeIndex = 0; nodeIndex < number; nodeIndex++) { - TestDisplayNode *node = [[TestDisplayNode alloc] initWithLayerBlock:^CALayer * _Nonnull{ - return [CALayer layer]; - }]; - [supernode addSubnode:node]; - [expected addObject:node]; - [self addSubnodesToNode:node number:number remainingLevels:(level - 1) accumulated:expected]; - } -} - -// Graph theory is failing me atm. -+ (NSUInteger)capacityForCount:(NSUInteger)count levels:(NSUInteger)level { - if (level == 0) return 0; - return pow(count, level) + [self capacityForCount:count levels:(level - 1)]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeImplicitHierarchyTests.mm b/submodules/AsyncDisplayKit/Tests/ASDisplayNodeImplicitHierarchyTests.mm deleted file mode 100644 index ea41a322b3..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeImplicitHierarchyTests.mm +++ /dev/null @@ -1,329 +0,0 @@ -// -// ASDisplayNodeImplicitHierarchyTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import -#import - -#import "ASDisplayNodeTestsHelper.h" - -@interface ASSpecTestDisplayNode : ASDisplayNode - -/** - Simple state identifier to allow control of current spec inside of the layoutSpecBlock - */ -@property (nonatomic) NSNumber *layoutState; - -@end - -@implementation ASSpecTestDisplayNode - -- (instancetype)init -{ - self = [super init]; - if (self) { - _layoutState = @1; - } - return self; -} - -@end - -@interface ASDisplayNodeImplicitHierarchyTests : XCTestCase - -@end - -@implementation ASDisplayNodeImplicitHierarchyTests - -- (void)testFeatureFlag -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - XCTAssertFalse(node.automaticallyManagesSubnodes); - - node.automaticallyManagesSubnodes = YES; - XCTAssertTrue(node.automaticallyManagesSubnodes); -} - -- (void)testInitialNodeInsertionWithOrdering -{ - static CGSize kSize = {100, 100}; - - ASDisplayNode *node1 = [[ASDisplayNode alloc] init]; - ASDisplayNode *node2 = [[ASDisplayNode alloc] init]; - ASDisplayNode *node3 = [[ASDisplayNode alloc] init]; - ASDisplayNode *node4 = [[ASDisplayNode alloc] init]; - ASDisplayNode *node5 = [[ASDisplayNode alloc] init]; - - - // As we will involve a stack spec we have to give the nodes an intrinsic content size - node1.style.preferredSize = kSize; - node2.style.preferredSize = kSize; - node3.style.preferredSize = kSize; - node4.style.preferredSize = kSize; - node5.style.preferredSize = kSize; - - ASSpecTestDisplayNode *node = [[ASSpecTestDisplayNode alloc] init]; - node.automaticallyManagesSubnodes = YES; - node.layoutSpecBlock = ^(ASDisplayNode *weakNode, ASSizeRange constrainedSize) { - ASAbsoluteLayoutSpec *absoluteLayout = [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[node4]]; - - ASStackLayoutSpec *stack1 = [[ASStackLayoutSpec alloc] init]; - [stack1 setChildren:@[node1, node2]]; - - ASStackLayoutSpec *stack2 = [[ASStackLayoutSpec alloc] init]; - [stack2 setChildren:@[node3, absoluteLayout]]; - - return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[stack1, stack2, node5]]; - }; - - ASDisplayNodeSizeToFitSizeRange(node, ASSizeRangeMake(CGSizeZero, CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX))); - [node.view layoutIfNeeded]; - - XCTAssertEqual(node.subnodes[0], node1); - XCTAssertEqual(node.subnodes[1], node2); - XCTAssertEqual(node.subnodes[2], node3); - XCTAssertEqual(node.subnodes[3], node4); - XCTAssertEqual(node.subnodes[4], node5); -} - -- (void)testInitialNodeInsertionWhenEnterPreloadState -{ - static CGSize kSize = {100, 100}; - - static NSInteger subnodeCount = 5; - NSMutableArray *subnodes = [NSMutableArray arrayWithCapacity:subnodeCount]; - for (NSInteger i = 0; i < subnodeCount; i++) { - ASDisplayNode *subnode = [[ASDisplayNode alloc] init]; - // As we will involve a stack spec we have to give the nodes an intrinsic content size - subnode.style.preferredSize = kSize; - [subnodes addObject:subnode]; - } - - ASSpecTestDisplayNode *node = [[ASSpecTestDisplayNode alloc] init]; - [node setHierarchyState:ASHierarchyStateRangeManaged]; - node.automaticallyManagesSubnodes = YES; - node.layoutSpecBlock = ^(ASDisplayNode *weakNode, ASSizeRange constrainedSize) { - ASAbsoluteLayoutSpec *absoluteLayout = [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[subnodes[3]]]; - - ASStackLayoutSpec *stack1 = [[ASStackLayoutSpec alloc] init]; - [stack1 setChildren:@[subnodes[0], subnodes[1]]]; - - ASStackLayoutSpec *stack2 = [[ASStackLayoutSpec alloc] init]; - [stack2 setChildren:@[subnodes[2], absoluteLayout]]; - - return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[stack1, stack2, subnodes[4]]]; - }; - - ASDisplayNodeSizeToFitSizeRange(node, ASSizeRangeMake(CGSizeZero, CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX))); - [node recursivelySetInterfaceState:ASInterfaceStatePreload]; - - ASCATransactionQueueWait(nil); - // No premature view allocation - XCTAssertFalse(node.isNodeLoaded); - // Subnodes should be inserted, laid out and entered preload state - XCTAssertTrue([subnodes isEqualToArray:node.subnodes]); - for (NSInteger i = 0; i < subnodeCount; i++) { - ASDisplayNode *subnode = subnodes[i]; - XCTAssertTrue(CGSizeEqualToSize(kSize, subnode.bounds.size)); - XCTAssertTrue(ASInterfaceStateIncludesPreload(subnode.interfaceState)); - } -} - -- (void)testCalculatedLayoutHierarchyTransitions -{ - static CGSize kSize = {100, 100}; - - ASDisplayNode *node1 = [[ASDisplayNode alloc] init]; - ASDisplayNode *node2 = [[ASDisplayNode alloc] init]; - ASDisplayNode *node3 = [[ASDisplayNode alloc] init]; - - node1.debugName = @"a"; - node2.debugName = @"b"; - node3.debugName = @"c"; - - // As we will involve a stack spec we have to give the nodes an intrinsic content size - node1.style.preferredSize = kSize; - node2.style.preferredSize = kSize; - node3.style.preferredSize = kSize; - - ASSpecTestDisplayNode *node = [[ASSpecTestDisplayNode alloc] init]; - node.automaticallyManagesSubnodes = YES; - node.layoutSpecBlock = ^(ASDisplayNode *weakNode, ASSizeRange constrainedSize){ - ASSpecTestDisplayNode *strongNode = (ASSpecTestDisplayNode *)weakNode; - if ([strongNode.layoutState isEqualToNumber:@1]) { - return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[node1, node2]]; - } else { - ASStackLayoutSpec *stackLayout = [[ASStackLayoutSpec alloc] init]; - [stackLayout setChildren:@[node3, node2]]; - return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[node1, stackLayout]]; - } - }; - - ASDisplayNodeSizeToFitSizeRange(node, ASSizeRangeMake(CGSizeZero, CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX))); - [node.view layoutIfNeeded]; - XCTAssertEqual(node.subnodes[0], node1); - XCTAssertEqual(node.subnodes[1], node2); - - node.layoutState = @2; - [node setNeedsLayout]; // After a state change the layout needs to be invalidated - [node.view layoutIfNeeded]; // A new layout pass will trigger the hiearchy transition - - XCTAssertEqual(node.subnodes[0], node1); - XCTAssertEqual(node.subnodes[1], node3); - XCTAssertEqual(node.subnodes[2], node2); -} - -// Disable test for now as we disabled the assertion -//- (void)testLayoutTransitionWillThrowForManualSubnodeManagement -//{ -// ASDisplayNode *node1 = [[ASDisplayNode alloc] init]; -// node1.name = @"node1"; -// -// ASSpecTestDisplayNode *node = [[ASSpecTestDisplayNode alloc] init]; -// node.automaticallyManagesSubnodes = YES; -// node.layoutSpecBlock = ^ASLayoutSpec *(ASDisplayNode *weakNode, ASSizeRange constrainedSize){ -// return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[node1]]; -// }; -// -// XCTAssertNoThrow([node layoutThatFits:ASSizeRangeMake(CGSizeZero)]); -// XCTAssertThrows([node1 removeFromSupernode]); -//} - -- (void)testLayoutTransitionMeasurementCompletionBlockIsCalledOnMainThread -{ - const CGSize kSize = CGSizeMake(100, 100); - - ASDisplayNode *displayNode = [[ASDisplayNode alloc] init]; - displayNode.style.preferredSize = kSize; - - // Trigger explicit view creation to be able to use the Transition API - [displayNode view]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Call measurement completion block on main"]; - - [displayNode transitionLayoutWithSizeRange:ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY)) animated:YES shouldMeasureAsync:YES measurementCompletion:^{ - XCTAssertTrue(ASDisplayNodeThreadIsMain(), @"Measurement completion block should be called on main thread"); - [expectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:2.0 handler:nil]; -} - -- (void)testMeasurementInBackgroundThreadWithLoadedNode -{ - const CGSize kNodeSize = CGSizeMake(100, 100); - ASDisplayNode *node1 = [[ASDisplayNode alloc] init]; - ASDisplayNode *node2 = [[ASDisplayNode alloc] init]; - - ASSpecTestDisplayNode *node = [[ASSpecTestDisplayNode alloc] init]; - node.style.preferredSize = kNodeSize; - node.automaticallyManagesSubnodes = YES; - node.layoutSpecBlock = ^(ASDisplayNode *weakNode, ASSizeRange constrainedSize) { - ASSpecTestDisplayNode *strongNode = (ASSpecTestDisplayNode *)weakNode; - if ([strongNode.layoutState isEqualToNumber:@1]) { - return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[node1]]; - } else { - return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[node2]]; - } - }; - - // Intentionally trigger view creation - [node view]; - [node2 view]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Fix IHM layout also if one node is already loaded"]; - - dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - - // Measurement happens in the background - ASDisplayNodeSizeToFitSizeRange(node, ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY))); - - // Dispatch back to the main thread to let the insertion / deletion of subnodes happening - dispatch_async(dispatch_get_main_queue(), ^{ - - // Layout on main - [node setNeedsLayout]; - [node.view layoutIfNeeded]; - XCTAssertEqual(node.subnodes[0], node1); - - dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - - // Change state and measure in the background - node.layoutState = @2; - [node setNeedsLayout]; - - ASDisplayNodeSizeToFitSizeRange(node, ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY))); - - // Dispatch back to the main thread to let the insertion / deletion of subnodes happening - dispatch_async(dispatch_get_main_queue(), ^{ - - // Layout on main again - [node.view layoutIfNeeded]; - XCTAssertEqual(node.subnodes[0], node2); - - [expectation fulfill]; - }); - }); - }); - }); - - [self waitForExpectationsWithTimeout:5.0 handler:^(NSError *error) { - if (error) { - NSLog(@"Timeout Error: %@", error); - } - }]; -} - -- (void)testTransitionLayoutWithAnimationWithLoadedNodes -{ - const CGSize kNodeSize = CGSizeMake(100, 100); - ASDisplayNode *node1 = [[ASDisplayNode alloc] init]; - ASDisplayNode *node2 = [[ASDisplayNode alloc] init]; - - ASSpecTestDisplayNode *node = [[ASSpecTestDisplayNode alloc] init]; - node.automaticallyManagesSubnodes = YES; - node.style.preferredSize = kNodeSize; - node.layoutSpecBlock = ^(ASDisplayNode *weakNode, ASSizeRange constrainedSize) { - ASSpecTestDisplayNode *strongNode = (ASSpecTestDisplayNode *)weakNode; - if ([strongNode.layoutState isEqualToNumber:@1]) { - return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[node1]]; - } else { - return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[node2]]; - } - }; - - // Intentionally trigger view creation - [node1 view]; - [node2 view]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Fix IHM layout transition also if one node is already loaded"]; - - ASDisplayNodeSizeToFitSizeRange(node, ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY))); - [node.view layoutIfNeeded]; - XCTAssertEqual(node.subnodes[0], node1); - - node.layoutState = @2; - [node invalidateCalculatedLayout]; - [node transitionLayoutWithAnimation:YES shouldMeasureAsync:YES measurementCompletion:^{ - // Push this to the next runloop to let async insertion / removing of nodes finished before checking - dispatch_async(dispatch_get_main_queue(), ^{ - XCTAssertEqual(node.subnodes[0], node2); - [expectation fulfill]; - }); - }]; - - [self waitForExpectationsWithTimeout:5.0 handler:^(NSError *error) { - if (error) { - NSLog(@"Timeout Error: %@", error); - } - }]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeLayoutTests.mm b/submodules/AsyncDisplayKit/Tests/ASDisplayNodeLayoutTests.mm deleted file mode 100644 index 582e141634..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeLayoutTests.mm +++ /dev/null @@ -1,175 +0,0 @@ -// -// ASDisplayNodeLayoutTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASXCTExtensions.h" -#import -#import -#import - -#import "ASLayoutSpecSnapshotTestsHelper.h" - -@interface ASDisplayNodeLayoutTests : XCTestCase -@end - -@implementation ASDisplayNodeLayoutTests - -- (void)testMeasureOnLayoutIfNotHappenedBefore -{ - CGSize nodeSize = CGSizeMake(100, 100); - - ASDisplayNode *displayNode = [[ASDisplayNode alloc] init]; - displayNode.style.width = ASDimensionMake(100); - displayNode.style.height = ASDimensionMake(100); - - // Use a button node in here as ASButtonNode uses layoutSpecThatFits: - ASButtonNode *buttonNode = [ASButtonNode new]; - [displayNode addSubnode:buttonNode]; - - displayNode.frame = {.size = nodeSize}; - buttonNode.frame = {.size = nodeSize}; - - ASXCTAssertEqualSizes(displayNode.calculatedSize, CGSizeZero, @"Calculated size before measurement and layout should be 0"); - ASXCTAssertEqualSizes(buttonNode.calculatedSize, CGSizeZero, @"Calculated size before measurement and layout should be 0"); - - // Trigger view creation and layout pass without a manual -layoutThatFits: call before so the automatic measurement - // pass will trigger in the layout pass - [displayNode.view layoutIfNeeded]; - - ASXCTAssertEqualSizes(displayNode.calculatedSize, nodeSize, @"Automatic measurement pass should have happened in layout pass"); - ASXCTAssertEqualSizes(buttonNode.calculatedSize, nodeSize, @"Automatic measurement pass should have happened in layout pass"); -} - -#if DEBUG -- (void)testNotAllowAddingSubnodesInLayoutSpecThatFits -{ - ASDisplayNode *displayNode = [ASDisplayNode new]; - ASDisplayNode *someOtherNode = [ASDisplayNode new]; - - displayNode.layoutSpecBlock = ^(ASDisplayNode * _Nonnull node, ASSizeRange constrainedSize) { - [node addSubnode:someOtherNode]; - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsZero child:someOtherNode]; - }; - - XCTAssertThrows([displayNode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeMake(100, 100))], @"Should throw if subnode was added in layoutSpecThatFits:"); -} - -- (void)testNotAllowModifyingSubnodesInLayoutSpecThatFits -{ - ASDisplayNode *displayNode = [ASDisplayNode new]; - ASDisplayNode *someOtherNode = [ASDisplayNode new]; - - [displayNode addSubnode:someOtherNode]; - - displayNode.layoutSpecBlock = ^(ASDisplayNode * _Nonnull node, ASSizeRange constrainedSize) { - [someOtherNode removeFromSupernode]; - [node addSubnode:[ASDisplayNode new]]; - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsZero child:someOtherNode]; - }; - - XCTAssertThrows([displayNode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeMake(100, 100))], @"Should throw if subnodes where modified in layoutSpecThatFits:"); -} -#endif - -- (void)testMeasureOnLayoutIfNotHappenedBeforeNoRemeasureForSameBounds -{ - CGSize nodeSize = CGSizeMake(100, 100); - - ASDisplayNode *displayNode = [ASDisplayNode new]; - displayNode.style.width = ASDimensionMake(nodeSize.width); - displayNode.style.height = ASDimensionMake(nodeSize.height); - - ASButtonNode *buttonNode = [ASButtonNode new]; - [displayNode addSubnode:buttonNode]; - - __block atomic_int numberOfLayoutSpecThatFitsCalls = ATOMIC_VAR_INIT(0); - displayNode.layoutSpecBlock = ^(ASDisplayNode * _Nonnull node, ASSizeRange constrainedSize) { - atomic_fetch_add(&numberOfLayoutSpecThatFitsCalls, 1); - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsZero child:buttonNode]; - }; - - displayNode.frame = {.size = nodeSize}; - - // Trigger initial layout pass without a measurement pass before - [displayNode.view layoutIfNeeded]; - XCTAssertEqual(numberOfLayoutSpecThatFitsCalls, 1, @"Should measure during layout if not measured"); - - [displayNode layoutThatFits:ASSizeRangeMake(nodeSize, nodeSize)]; - XCTAssertEqual(numberOfLayoutSpecThatFitsCalls, 1, @"Should not remeasure with same bounds"); -} - -- (void)testThatLayoutWithInvalidSizeCausesException -{ - ASDisplayNode *displayNode = [[ASDisplayNode alloc] init]; - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.layoutSpecBlock = ^ASLayoutSpec *(ASDisplayNode *node, ASSizeRange constrainedSize) { - return [ASWrapperLayoutSpec wrapperWithLayoutElement:displayNode]; - }; - - XCTAssertThrows([node layoutThatFits:ASSizeRangeMake(CGSizeMake(0, FLT_MAX))]); -} - -- (void)testThatLayoutCreatedWithInvalidSizeCausesException -{ - ASDisplayNode *displayNode = [[ASDisplayNode alloc] init]; - XCTAssertThrows([ASLayout layoutWithLayoutElement:displayNode size:CGSizeMake(FLT_MAX, FLT_MAX)]); - XCTAssertThrows([ASLayout layoutWithLayoutElement:displayNode size:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)]); - XCTAssertThrows([ASLayout layoutWithLayoutElement:displayNode size:CGSizeMake(INFINITY, INFINITY)]); -} - -- (void)testThatLayoutElementCreatedInLayoutSpecThatFitsDoNotGetDeallocated -{ - const CGSize kSize = CGSizeMake(300, 300); - - ASDisplayNode *subNode = [[ASDisplayNode alloc] init]; - subNode.automaticallyManagesSubnodes = YES; - subNode.layoutSpecBlock = ^(ASDisplayNode * _Nonnull node, ASSizeRange constrainedSize) { - ASTextNode *textNode = [ASTextNode new]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"Test Test Test Test Test Test Test Test"]; - ASInsetLayoutSpec *insetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsZero child:textNode]; - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsZero child:insetSpec]; - }; - - ASDisplayNode *rootNode = [[ASDisplayNode alloc] init]; - rootNode.automaticallyManagesSubnodes = YES; - rootNode.layoutSpecBlock = ^(ASDisplayNode * _Nonnull node, ASSizeRange constrainedSize) { - ASTextNode *textNode = [ASTextNode new]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"Test Test Test Test Test"]; - ASInsetLayoutSpec *insetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsZero child:textNode]; - - return [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical - spacing:0.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStretch - children:@[insetSpec, subNode]]; - }; - - rootNode.frame = CGRectMake(0, 0, kSize.width, kSize.height); - [rootNode view]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Execute measure and layout pass"]; - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - - [rootNode layoutThatFits:ASSizeRangeMake(kSize)]; - - dispatch_async(dispatch_get_main_queue(), ^{ - XCTAssertNoThrow([rootNode.view layoutIfNeeded]); - [expectation fulfill]; - }); - }); - - [self waitForExpectationsWithTimeout:5.0 handler:^(NSError *error) { - if (error) { - XCTFail(@"Expectation failed: %@", error); - } - }]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeSnapshotTests.mm b/submodules/AsyncDisplayKit/Tests/ASDisplayNodeSnapshotTests.mm deleted file mode 100644 index 489727e3ba..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeSnapshotTests.mm +++ /dev/null @@ -1,36 +0,0 @@ -// -// ASDisplayNodeSnapshotTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASSnapshotTestCase.h" -#import - -@interface ASDisplayNodeSnapshotTests : ASSnapshotTestCase - -@end - -@implementation ASDisplayNodeSnapshotTests - -- (void)testBasicHierarchySnapshotTesting -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.backgroundColor = [UIColor blueColor]; - - ASTextNode *subnode = [[ASTextNode alloc] init]; - subnode.backgroundColor = [UIColor whiteColor]; - - subnode.attributedText = [[NSAttributedString alloc] initWithString:@"Hello"]; - node.automaticallyManagesSubnodes = YES; - node.layoutSpecBlock = ^(ASDisplayNode * _Nonnull node, ASSizeRange constrainedSize) { - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(5, 5, 5, 5) child:subnode]; - }; - - ASDisplayNodeSizeToFitSizeRange(node, ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY))); - ASSnapshotVerifyNode(node, nil); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeTests.mm b/submodules/AsyncDisplayKit/Tests/ASDisplayNodeTests.mm deleted file mode 100644 index d1e1698413..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeTests.mm +++ /dev/null @@ -1,2705 +0,0 @@ -// -// ASDisplayNodeTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -#import "ASXCTExtensions.h" -#import "ASDisplayNodeTestsHelper.h" - -// Conveniences for making nodes named a certain way -#define DeclareNodeNamed(n) ASDisplayNode *n = [[ASDisplayNode alloc] init]; n.debugName = @#n -#define DeclareViewNamed(v) \ - ASDisplayNode *node_##v = [[ASDisplayNode alloc] init]; \ - node_##v.debugName = @#v; \ - UIView *v = node_##v.view; -#define DeclareLayerNamed(l) \ - ASDisplayNode *node_##l = [[ASDisplayNode alloc] init]; \ - node_##l.debugName = @#l; \ - node_##l.layerBacked = YES; \ - CALayer *l = node_##l.layer; - -static NSString *orderStringFromSublayers(CALayer *l) { - return [[[l.sublayers valueForKey:@"asyncdisplaykit_node"] valueForKey:@"debugName"] componentsJoinedByString:@","]; -} - -static NSString *orderStringFromSubviews(UIView *v) { - return [[[v.subviews valueForKey:@"asyncdisplaykit_node"] valueForKey:@"debugName"] componentsJoinedByString:@","]; -} - -static NSString *orderStringFromSubnodes(ASDisplayNode *n) { - return [[n.subnodes valueForKey:@"debugName"] componentsJoinedByString:@","]; -} - -// Asserts subnode, subview, sublayer order match what you provide here -#define XCTAssertNodeSubnodeSubviewSublayerOrder(n, loaded, isLayerBacked, order, description) \ -XCTAssertEqualObjects(orderStringFromSubnodes(n), order, @"Incorrect node order for " description );\ -if (loaded) {\ - if (!isLayerBacked) {\ - XCTAssertEqualObjects(orderStringFromSubviews(n.view), order, @"Incorrect subviews for " description);\ - }\ - XCTAssertEqualObjects(orderStringFromSublayers(n.layer), order, @"Incorrect sublayers for " description);\ -} - -#define XCTAssertNodesHaveParent(parent, nodes ...) \ -for (ASDisplayNode *n in @[ nodes ]) {\ - XCTAssertEqualObjects(parent, n.supernode, @"%@ has the wrong parent", n.debugName);\ -} - -#define XCTAssertNodesLoaded(nodes ...) \ -for (ASDisplayNode *n in @[ nodes ]) {\ - XCTAssertTrue(n.nodeLoaded, @"%@ should be loaded", n.debugName);\ -} - -#define XCTAssertNodesNotLoaded(nodes ...) \ -for (ASDisplayNode *n in @[ nodes ]) {\ - XCTAssertFalse(n.nodeLoaded, @"%@ should not be loaded", n.debugName);\ -} - -@interface UIWindow (Testing) -// UIWindow has this handy method that is not public but great for testing -- (UIResponder *)firstResponder; -@end - -@interface ASDisplayNode (HackForTests) -- (id)initWithViewClass:(Class)viewClass; -- (id)initWithLayerClass:(Class)layerClass; -- (void)setInterfaceState:(ASInterfaceState)state; -// FIXME: Importing ASDisplayNodeInternal.h causes a heap of problems. -- (void)enterInterfaceState:(ASInterfaceState)interfaceState; -@end - -@interface ASTestDisplayNode : ASDisplayNode -@property (nonatomic) void (^willDeallocBlock)(__unsafe_unretained ASTestDisplayNode *node); -@property (nonatomic) CGSize(^calculateSizeBlock)(ASTestDisplayNode *node, CGSize size); - -@property (nonatomic, nullable) UIGestureRecognizer *gestureRecognizer; -@property (nonatomic, nullable) id idGestureRecognizer; -@property (nonatomic, nullable) UIImage *bigImage; -@property (nonatomic, nullable) NSArray *randomProperty; - -@property (nonatomic, nullable) UIGestureRecognizer *gestureRecognizer; -@property (nonatomic, nullable) id idGestureRecognizer; -@property (nonatomic, nullable) UIImage *bigImage; -@property (nonatomic, nullable) NSArray *randomProperty; - -@property (nonatomic) BOOL displayRangeStateChangedToYES; -@property (nonatomic) BOOL displayRangeStateChangedToNO; - -@property (nonatomic) BOOL hasPreloaded; -@property (nonatomic) BOOL preloadStateChangedToYES; -@property (nonatomic) BOOL preloadStateChangedToNO; - -@property (nonatomic) NSUInteger displayWillStartCount; -@property (nonatomic) NSUInteger didDisplayCount; - -@end - -@interface ASTestResponderNode : ASTestDisplayNode -@end - -@implementation ASTestDisplayNode - -- (void)setInterfaceState:(ASInterfaceState)state -{ - [super setInterfaceState:state]; - ASCATransactionQueueWait(nil); -} - -- (CGSize)calculateSizeThatFits:(CGSize)constrainedSize -{ - return _calculateSizeBlock ? _calculateSizeBlock(self, constrainedSize) : CGSizeZero; -} - -- (void)didEnterDisplayState -{ - [super didEnterDisplayState]; - self.displayRangeStateChangedToYES = YES; -} - -- (void)didExitDisplayState -{ - [super didExitDisplayState]; - self.displayRangeStateChangedToNO = YES; -} - -- (void)didEnterPreloadState -{ - [super didEnterPreloadState]; - self.preloadStateChangedToYES = YES; - self.hasPreloaded = YES; -} - -- (void)didExitPreloadState -{ - [super didExitPreloadState]; - self.preloadStateChangedToNO = YES; -} - -- (void)dealloc -{ - if (_willDeallocBlock) { - _willDeallocBlock(self); - } -} - -- (void)displayDidFinish -{ - [super displayDidFinish]; - _didDisplayCount++; -} - -- (void)displayWillStartAsynchronously:(BOOL)asynchronously -{ - [super displayWillStartAsynchronously:asynchronously]; - _displayWillStartCount++; -} - -- (CALayer *__strong (*)[NUM_CLIP_CORNER_LAYERS])clipCornerLayers -{ - return &self->_clipCornerLayers; -} - -@end - -@interface ASSynchronousTestDisplayNodeViaViewClass : ASDisplayNode -@end - -@implementation ASSynchronousTestDisplayNodeViaViewClass - -+ (Class)viewClass { - return [UIView class]; -} - -@end - -@interface ASSynchronousTestDisplayNodeViaLayerClass : ASDisplayNode -@end - -@implementation ASSynchronousTestDisplayNodeViaLayerClass - -+ (Class)layerClass { - return [CALayer class]; -} - -@end - -@interface UIDisplayNodeTestView : UIView -@end - -@interface UIResponderNodeTestView : _ASDisplayView -@property(nonatomic) BOOL testIsFirstResponder; -@end - -@implementation UIDisplayNodeTestView -@end - -@interface ASTestWindow : UIWindow -@end - -@implementation ASTestWindow - -- (id)firstResponder { - return self.subviews.firstObject; -} - -@end - -@implementation ASTestResponderNode - -+ (Class)viewClass { - return [UIResponderNodeTestView class]; -} - -- (BOOL)canBecomeFirstResponder { - return YES; -} - -@end - -@implementation UIResponderNodeTestView - -- (BOOL)becomeFirstResponder { - self.testIsFirstResponder = YES; - return YES; -} - -- (BOOL)canResignFirstResponder { - return YES; -} - -- (BOOL)resignFirstResponder { - [super resignFirstResponder]; - if (self.testIsFirstResponder) { - self.testIsFirstResponder = NO; - return YES; - } - return NO; -} - -@end - -@interface ASTestResponderNodeWithOverride : ASDisplayNode -@end -@implementation ASTestResponderNodeWithOverride -- (BOOL)canBecomeFirstResponder { - return YES; -} -@end - -@interface ASTestViewController: ASViewController -@end -@implementation ASTestViewController -- (BOOL)prefersStatusBarHidden { return YES; } -@end - -@interface UIResponderNodeTestDisplayViewCallingSuper : _ASDisplayView -@end -@implementation UIResponderNodeTestDisplayViewCallingSuper -- (BOOL)canBecomeFirstResponder { return YES; } -- (BOOL)becomeFirstResponder { return [super becomeFirstResponder]; } -@end - -@interface UIResponderNodeTestViewCallingSuper : UIView -@end -@implementation UIResponderNodeTestViewCallingSuper -- (BOOL)canBecomeFirstResponder { return YES; } -- (BOOL)becomeFirstResponder { return [super becomeFirstResponder]; } -@end - -@interface ASDisplayNodeTests : XCTestCase -@end - -@implementation ASDisplayNodeTests -{ - dispatch_queue_t queue; -} - -- (void)testOverriddenNodeFirstResponderBehavior -{ - ASTestDisplayNode *node = [[ASTestResponderNode alloc] init]; - XCTAssertTrue([node canBecomeFirstResponder]); - XCTAssertTrue([node becomeFirstResponder]); -} - -- (void)testOverriddenDisplayViewFirstResponderBehavior -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - ASDisplayNode *node = [[ASDisplayNode alloc] initWithViewClass:[UIResponderNodeTestDisplayViewCallingSuper class]]; - - // We have to add the node to a window otherwise the super responder methods call responses are undefined - // This will also create the backing view of the node - [window addSubnode:node]; - [window makeKeyAndVisible]; - - XCTAssertTrue([node canBecomeFirstResponder]); - XCTAssertTrue([node becomeFirstResponder]); -} - -- (void)testOverriddenViewFirstResponderBehavior -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - ASDisplayNode *node = [[ASDisplayNode alloc] initWithViewClass:[UIResponderNodeTestViewCallingSuper class]]; - - // We have to add the node to a window otherwise the super responder methods call responses are undefined - // This will also create the backing view of the node - [window addSubnode:node]; - [window makeKeyAndVisible]; - - XCTAssertTrue([node canBecomeFirstResponder]); - XCTAssertTrue([node becomeFirstResponder]); -} - -- (void)testDefaultFirstResponderBehavior -{ - ASTestDisplayNode *node = [[ASTestDisplayNode alloc] init]; - XCTAssertFalse([node canBecomeFirstResponder]); - XCTAssertFalse([node becomeFirstResponder]); -} - -- (void)testResponderMethodsBehavior -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - ASEditableTextNode *textNode = [[ASEditableTextNode alloc] init]; - - // We have to add the text node to a window otherwise the responder methods responses are undefined - // This will also create the backing view of the node - [window addSubnode:textNode]; - [window makeKeyAndVisible]; - - XCTAssertTrue([textNode canBecomeFirstResponder]); - XCTAssertTrue([textNode becomeFirstResponder]); - XCTAssertTrue([window firstResponder] == textNode.textView); - XCTAssertTrue([textNode resignFirstResponder]); - - // If the textNode resigns it's first responder the view should not be the first responder - XCTAssertTrue([window firstResponder] == nil); - XCTAssertFalse([textNode.view isFirstResponder]); -} - -- (void)testResponderOverrrideCanBecomeFirstResponder -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - ASTestResponderNodeWithOverride *node = [[ASTestResponderNodeWithOverride alloc] init]; - - // We have to add the text node to a window otherwise the responder methods responses are undefined - // This will also create the backing view of the node - [window addSubnode:node]; - [window makeKeyAndVisible]; - - XCTAssertTrue([node canBecomeFirstResponder]); - XCTAssertTrue([node becomeFirstResponder]); - XCTAssertTrue([window firstResponder] == node.view); -} - -- (void)testUnsupportedResponderSetupWillThrow -{ - ASTestResponderNode *node = [[ASTestResponderNode alloc] init]; - [node setViewBlock:^UIView * _Nonnull{ - return [[UIView alloc] init]; - }]; - XCTAssertThrows([node view], @"Externally provided views should be synchronous"); -} - -- (void)setUp -{ - [super setUp]; - queue = dispatch_queue_create("com.facebook.AsyncDisplayKit.ASDisplayNodeTestsQueue", NULL); -} - -- (void)testViewCreatedOffThreadCanBeRealizedOnThread -{ - __block ASDisplayNode *node = nil; - [self executeOffThread:^{ - node = [[ASDisplayNode alloc] init]; - }]; - - UIView *view = node.view; - XCTAssertNotNil(view, @"Getting node's view on-thread should succeed."); -} - -- (void)testNodeCreatedOffThreadWithExistingView -{ - UIView *view = [[UIDisplayNodeTestView alloc] init]; - - __block ASDisplayNode *node = nil; - [self executeOffThread:^{ - node = [[ASDisplayNode alloc] initWithViewBlock:^UIView *{ - return view; - }]; - }]; - - XCTAssertFalse(node.layerBacked, @"Can't be layer backed"); - XCTAssertTrue(node.synchronous, @"Node with plain view should be synchronous"); - XCTAssertFalse(node.nodeLoaded, @"Shouldn't have a view yet"); - XCTAssertEqual(view, node.view, @"Getting node's view on-thread should succeed."); -} - -- (void)testNodeCreatedOffThreadWithLazyView -{ - __block UIView *view = nil; - __block ASDisplayNode *node = nil; - [self executeOffThread:^{ - node = [[ASDisplayNode alloc] initWithViewBlock:^UIView *{ - XCTAssertTrue([NSThread isMainThread], @"View block must run on the main queue"); - view = [[UIDisplayNodeTestView alloc] init]; - return view; - }]; - }]; - - XCTAssertNil(view, @"View block should not be invoked yet"); - [node view]; - XCTAssertNotNil(view, @"View block should have been invoked"); - XCTAssertEqual(view, node.view, @"Getting node's view on-thread should succeed."); - XCTAssertTrue(node.synchronous, @"Node with plain view should be synchronous"); -} - -- (void)testNodeCreatedWithLazyAsyncView -{ - ASDisplayNode *node = [[ASDisplayNode alloc] initWithViewBlock:^UIView *{ - XCTAssertTrue([NSThread isMainThread], @"View block must run on the main queue"); - return [[_ASDisplayView alloc] init]; - }]; - - XCTAssertThrows([node view], @"Externally provided views should be synchronous"); - XCTAssertTrue(node.synchronous, @"Node with externally provided view should be synchronous"); -} - -- (void)checkValuesMatchDefaults:(ASDisplayNode *)node isLayerBacked:(BOOL)isLayerBacked -{ - NSString *targetName = isLayerBacked ? @"layer" : @"view"; - NSString *hasLoadedView = node.nodeLoaded ? @"with view" : [NSString stringWithFormat:@"after loading %@", targetName]; - -// id rgbBlackCGColorIdPtr = (id)[UIColor blackColor].CGColor; - - XCTAssertEqual((id)nil, node.contents, @"default contents broken %@", hasLoadedView); - XCTAssertEqual(NO, node.clipsToBounds, @"default clipsToBounds broken %@", hasLoadedView); - XCTAssertEqual(YES, node.opaque, @"default opaque broken %@", hasLoadedView); - XCTAssertEqual(NO, node.needsDisplayOnBoundsChange, @"default needsDisplayOnBoundsChange broken %@", hasLoadedView); - XCTAssertEqual(YES, node.allowsGroupOpacity, @"default allowsGroupOpacity broken %@", hasLoadedView); - XCTAssertEqual(NO, node.allowsEdgeAntialiasing, @"default allowsEdgeAntialiasing broken %@", hasLoadedView); - XCTAssertEqual((unsigned int)(kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge), node.edgeAntialiasingMask, @"default edgeAntialisingMask broken %@", hasLoadedView); - XCTAssertEqual(NO, node.hidden, @"default hidden broken %@", hasLoadedView); - XCTAssertEqual(1.0f, node.alpha, @"default alpha broken %@", hasLoadedView); - XCTAssertTrue(CGRectEqualToRect(CGRectZero, node.bounds), @"default bounds broken %@", hasLoadedView); - XCTAssertTrue(CGRectEqualToRect(CGRectZero, node.frame), @"default frame broken %@", hasLoadedView); - XCTAssertTrue(CGPointEqualToPoint(CGPointZero, node.position), @"default position broken %@", hasLoadedView); - XCTAssertEqual((CGFloat)0.0, node.zPosition, @"default zPosition broken %@", hasLoadedView); - XCTAssertEqual(1.0f, node.contentsScale, @"default contentsScale broken %@", hasLoadedView); - XCTAssertEqual([UIScreen mainScreen].scale, node.contentsScaleForDisplay, @"default contentsScaleForDisplay broken %@", hasLoadedView); - XCTAssertTrue(CATransform3DEqualToTransform(CATransform3DIdentity, node.transform), @"default transform broken %@", hasLoadedView); - XCTAssertTrue(CATransform3DEqualToTransform(CATransform3DIdentity, node.subnodeTransform), @"default subnodeTransform broken %@", hasLoadedView); - XCTAssertEqual((id)nil, node.backgroundColor, @"default backgroundColor broken %@", hasLoadedView); - XCTAssertEqual(UIViewContentModeScaleToFill, node.contentMode, @"default contentMode broken %@", hasLoadedView); -// XCTAssertEqualObjects(rgbBlackCGColorIdPtr, (id)node.shadowColor, @"default shadowColor broken %@", hasLoadedView); - XCTAssertEqual(0.0f, node.shadowOpacity, @"default shadowOpacity broken %@", hasLoadedView); - XCTAssertTrue(CGSizeEqualToSize(CGSizeMake(0, -3), node.shadowOffset), @"default shadowOffset broken %@", hasLoadedView); - XCTAssertEqual(3.f, node.shadowRadius, @"default shadowRadius broken %@", hasLoadedView); - XCTAssertEqual(0.0f, node.borderWidth, @"default borderWidth broken %@", hasLoadedView); -// XCTAssertEqualObjects(rgbBlackCGColorIdPtr, (id)node.borderColor, @"default borderColor broken %@", hasLoadedView); - XCTAssertEqual(NO, node.displaySuspended, @"default displaySuspended broken %@", hasLoadedView); - XCTAssertEqual(YES, node.displaysAsynchronously, @"default displaysAsynchronously broken %@", hasLoadedView); - XCTAssertEqual(NO, node.asyncdisplaykit_asyncTransactionContainer, @"default asyncdisplaykit_asyncTransactionContainer broken %@", hasLoadedView); - XCTAssertEqualObjects(nil, node.debugName, @"default name broken %@", hasLoadedView); - - XCTAssertEqual(NO, node.isAccessibilityElement, @"default isAccessibilityElement is broken %@", hasLoadedView); - XCTAssertEqual((id)nil, node.accessibilityLabel, @"default accessibilityLabel is broken %@", hasLoadedView); - XCTAssertEqual((id)nil, node.accessibilityHint, @"default accessibilityHint is broken %@", hasLoadedView); - XCTAssertEqual((id)nil, node.accessibilityValue, @"default accessibilityValue is broken %@", hasLoadedView); -// if (AS_AT_LEAST_IOS11) { -// XCTAssertEqual((id)nil, node.accessibilityAttributedLabel, @"default accessibilityAttributedLabel is broken %@", hasLoadedView); -// XCTAssertEqual((id)nil, node.accessibilityAttributedHint, @"default accessibilityAttributedHint is broken %@", hasLoadedView); -// XCTAssertEqual((id)nil, node.accessibilityAttributedValue, @"default accessibilityAttributedValue is broken %@", hasLoadedView); -// } - XCTAssertEqual(UIAccessibilityTraitNone, node.accessibilityTraits, @"default accessibilityTraits is broken %@", hasLoadedView); - XCTAssertTrue(CGRectEqualToRect(CGRectZero, node.accessibilityFrame), @"default accessibilityFrame is broken %@", hasLoadedView); - XCTAssertEqual((id)nil, node.accessibilityLanguage, @"default accessibilityLanguage is broken %@", hasLoadedView); - XCTAssertEqual(NO, node.accessibilityElementsHidden, @"default accessibilityElementsHidden is broken %@", hasLoadedView); - XCTAssertEqual(NO, node.accessibilityViewIsModal, @"default accessibilityViewIsModal is broken %@", hasLoadedView); - XCTAssertEqual(NO, node.shouldGroupAccessibilityChildren, @"default shouldGroupAccessibilityChildren is broken %@", hasLoadedView); - - if (!isLayerBacked) { - XCTAssertEqual(YES, node.userInteractionEnabled, @"default userInteractionEnabled broken %@", hasLoadedView); - XCTAssertEqual(NO, node.exclusiveTouch, @"default exclusiveTouch broken %@", hasLoadedView); - XCTAssertEqual(YES, node.autoresizesSubviews, @"default autoresizesSubviews broken %@", hasLoadedView); - XCTAssertEqual(UIViewAutoresizingNone, node.autoresizingMask, @"default autoresizingMask broken %@", hasLoadedView); - XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(UIEdgeInsetsMake(8, 8, 8, 8), node.layoutMargins), @"default layoutMargins broken %@", hasLoadedView); - XCTAssertEqual(NO, node.preservesSuperviewLayoutMargins, @"default preservesSuperviewLayoutMargins broken %@", hasLoadedView); - XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(UIEdgeInsetsZero, node.safeAreaInsets), @"default safeAreaInsets broken %@", hasLoadedView); - XCTAssertEqual(YES, node.insetsLayoutMarginsFromSafeArea, @"default insetsLayoutMarginsFromSafeArea broken %@", hasLoadedView); - } else { - XCTAssertEqual(NO, node.userInteractionEnabled, @"layer-backed nodes do not support userInteractionEnabled %@", hasLoadedView); - XCTAssertEqual(NO, node.exclusiveTouch, @"layer-backed nodes do not support exclusiveTouch %@", hasLoadedView); - } -} - -- (void)checkDefaultPropertyValuesWithLayerBacking:(BOOL)isLayerBacked -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - - XCTAssertEqual(NO, node.isLayerBacked, @"default isLayerBacked broken without view"); - node.layerBacked = isLayerBacked; - XCTAssertEqual(isLayerBacked, node.isLayerBacked, @"setIsLayerBacked: broken"); - - // Assert that the values can be fetched from the node before the view is realized. - [self checkValuesMatchDefaults:node isLayerBacked:isLayerBacked]; - - [node layer]; // Force either view or layer loading - XCTAssertTrue(node.nodeLoaded, @"Didn't load view"); - - // Assert that the values can be fetched from the node after the view is realized. - [self checkValuesMatchDefaults:node isLayerBacked:isLayerBacked]; -} - -- (void)testDefaultPropertyValuesLayer -{ - [self checkDefaultPropertyValuesWithLayerBacking:YES]; -} - -- (void)testDefaultPropertyValuesView -{ - [self checkDefaultPropertyValuesWithLayerBacking:NO]; -} - -- (UIImage *)bogusImage -{ - static UIImage *bogusImage; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - UIGraphicsBeginImageContext(CGSizeMake(1, 1)); - bogusImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - }); - return bogusImage; -} - -- (void)checkValuesMatchSetValues:(ASDisplayNode *)node isLayerBacked:(BOOL)isLayerBacked -{ - NSString *targetName = isLayerBacked ? @"layer" : @"view"; - NSString *hasLoadedView = node.nodeLoaded ? @"with view" : [NSString stringWithFormat:@"after loading %@", targetName]; - - XCTAssertEqual(isLayerBacked, node.isLayerBacked, @"isLayerBacked broken %@", hasLoadedView); - XCTAssertEqualObjects((id)[self bogusImage].CGImage, (id)node.contents, @"contents broken %@", hasLoadedView); - XCTAssertEqual(YES, node.clipsToBounds, @"clipsToBounds broken %@", hasLoadedView); - XCTAssertEqual(NO, node.opaque, @"opaque broken %@", hasLoadedView); - XCTAssertEqual(YES, node.needsDisplayOnBoundsChange, @"needsDisplayOnBoundsChange broken %@", hasLoadedView); - XCTAssertEqual(NO, node.allowsGroupOpacity, @"allowsGroupOpacity broken %@", hasLoadedView); - XCTAssertEqual(YES, node.allowsEdgeAntialiasing, @"allowsEdgeAntialiasing broken %@", hasLoadedView); - XCTAssertTrue((unsigned int)(kCALayerLeftEdge | kCALayerTopEdge) == node.edgeAntialiasingMask, @"edgeAntialiasingMask broken: %@", hasLoadedView); - XCTAssertEqual(YES, node.hidden, @"hidden broken %@", hasLoadedView); - XCTAssertEqual(.5f, node.alpha, @"alpha broken %@", hasLoadedView); - XCTAssertTrue(CGRectEqualToRect(CGRectMake(10, 15, 42, 115.2), node.bounds), @"bounds broken %@", hasLoadedView); - XCTAssertTrue(CGPointEqualToPoint(CGPointMake(10, 65), node.position), @"position broken %@", hasLoadedView); - XCTAssertEqual((CGFloat)5.6, node.zPosition, @"zPosition broken %@", hasLoadedView); - XCTAssertEqual(.5f, node.contentsScale, @"contentsScale broken %@", hasLoadedView); - XCTAssertTrue(CATransform3DEqualToTransform(CATransform3DMakeScale(0.5, 0.5, 1.0), node.transform), @"transform broken %@", hasLoadedView); - XCTAssertTrue(CATransform3DEqualToTransform(CATransform3DMakeTranslation(1337, 7357, 7007), node.subnodeTransform), @"subnodeTransform broken %@", hasLoadedView); - XCTAssertEqualObjects([UIColor clearColor], node.backgroundColor, @"backgroundColor broken %@", hasLoadedView); - XCTAssertEqual(UIViewContentModeBottom, node.contentMode, @"contentMode broken %@", hasLoadedView); - XCTAssertEqual([[UIColor cyanColor] CGColor], node.shadowColor, @"shadowColor broken %@", hasLoadedView); - XCTAssertEqual(.5f, node.shadowOpacity, @"shadowOpacity broken %@", hasLoadedView); - XCTAssertTrue(CGSizeEqualToSize(CGSizeMake(1.0f, 1.0f), node.shadowOffset), @"shadowOffset broken %@", hasLoadedView); - XCTAssertEqual(.5f, node.shadowRadius, @"shadowRadius broken %@", hasLoadedView); - XCTAssertEqual(.5f, node.borderWidth, @"borderWidth broken %@", hasLoadedView); - XCTAssertEqual([[UIColor orangeColor] CGColor], node.borderColor, @"borderColor broken %@", hasLoadedView); - XCTAssertEqual(YES, node.displaySuspended, @"displaySuspended broken %@", hasLoadedView); - XCTAssertEqual(NO, node.displaysAsynchronously, @"displaySuspended broken %@", hasLoadedView); - XCTAssertEqual(YES, node.asyncdisplaykit_asyncTransactionContainer, @"asyncTransactionContainer broken %@", hasLoadedView); - XCTAssertEqual(NO, node.userInteractionEnabled, @"userInteractionEnabled broken %@", hasLoadedView); - XCTAssertEqual((BOOL)!isLayerBacked, node.exclusiveTouch, @"exclusiveTouch broken %@", hasLoadedView); - XCTAssertEqualObjects(@"quack like a duck", node.debugName, @"debugName broken %@", hasLoadedView); - - XCTAssertEqual(YES, node.isAccessibilityElement, @"accessibilityElement broken %@", hasLoadedView); - XCTAssertEqualObjects(@"Ship love", node.accessibilityLabel, @"accessibilityLabel broken %@", hasLoadedView); - XCTAssertEqualObjects(@"Awesome things will happen", node.accessibilityHint, @"accessibilityHint broken %@", hasLoadedView); - XCTAssertEqualObjects(@"1 of 2", node.accessibilityValue, @"accessibilityValue broken %@", hasLoadedView); - - // setting the accessibilityLabel, accessibilityHint and accessibilityValue is supposed to be bridged to the attributed versions -// if (AS_AT_LEAST_IOS11) { -// XCTAssertEqualObjects(@"Ship love", node.accessibilityAttributedLabel.string, @"accessibilityAttributedLabel is broken %@", hasLoadedView); -// XCTAssertEqualObjects(@"Awesome things will happen", node.accessibilityAttributedHint.string, @"accessibilityAttributedHint is broken %@", hasLoadedView); -// XCTAssertEqualObjects(@"1 of 2", node.accessibilityAttributedValue.string, @"accessibilityAttributedValue is broken %@", hasLoadedView); -// } - XCTAssertEqual(UIAccessibilityTraitSelected | UIAccessibilityTraitButton, node.accessibilityTraits, @"accessibilityTraits broken %@", hasLoadedView); - XCTAssertTrue(CGRectEqualToRect(CGRectMake(1, 2, 3, 4), node.accessibilityFrame), @"accessibilityFrame broken %@", hasLoadedView); - XCTAssertEqualObjects(@"mas", node.accessibilityLanguage, @"accessibilityLanguage broken %@", hasLoadedView); - XCTAssertEqual(YES, node.accessibilityElementsHidden, @"accessibilityElementsHidden broken %@", hasLoadedView); - XCTAssertEqual(YES, node.accessibilityViewIsModal, @"accessibilityViewIsModal broken %@", hasLoadedView); - XCTAssertEqual(YES, node.shouldGroupAccessibilityChildren, @"shouldGroupAccessibilityChildren broken %@", hasLoadedView); - XCTAssertEqual(UIAccessibilityNavigationStyleSeparate, node.accessibilityNavigationStyle, @"accessibilityNavigationStyle broken %@", hasLoadedView); - XCTAssertTrue(CGPointEqualToPoint(CGPointMake(1.0, 1.0), node.accessibilityActivationPoint), @"accessibilityActivationPoint broken %@", hasLoadedView); - XCTAssertNotNil(node.accessibilityPath, @"accessibilityPath broken %@", hasLoadedView); - - - if (!isLayerBacked) { - XCTAssertEqual(UIViewAutoresizingFlexibleLeftMargin, node.autoresizingMask, @"autoresizingMask %@", hasLoadedView); - XCTAssertEqual(NO, node.autoresizesSubviews, @"autoresizesSubviews broken %@", hasLoadedView); - XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(UIEdgeInsetsMake(3, 5, 8, 11), node.layoutMargins), @"layoutMargins broken %@", hasLoadedView); - XCTAssertEqual(YES, node.preservesSuperviewLayoutMargins, @"preservesSuperviewLayoutMargins broken %@", hasLoadedView); - XCTAssertEqual(NO, node.insetsLayoutMarginsFromSafeArea, @"insetsLayoutMarginsFromSafeArea broken %@", hasLoadedView); - } -} - -- (void)checkSimpleBridgePropertiesSetPropagate:(BOOL)isLayerBacked -{ - __block ASDisplayNode *node = nil; - - [self executeOffThread:^{ - node = [[ASDisplayNode alloc] init]; - node.layerBacked = isLayerBacked; - - node.contents = (id)[self bogusImage].CGImage; - node.clipsToBounds = YES; - node.opaque = NO; - node.needsDisplayOnBoundsChange = YES; - node.allowsGroupOpacity = NO; - node.allowsEdgeAntialiasing = YES; - node.edgeAntialiasingMask = (kCALayerLeftEdge | kCALayerTopEdge); - node.hidden = YES; - node.alpha = .5f; - node.position = CGPointMake(10, 65); - node.zPosition = 5.6; - node.bounds = CGRectMake(10, 15, 42, 115.2); - node.contentsScale = .5f; - node.transform = CATransform3DMakeScale(0.5, 0.5, 1.0); - node.subnodeTransform = CATransform3DMakeTranslation(1337, 7357, 7007); - node.backgroundColor = [UIColor clearColor]; - node.contentMode = UIViewContentModeBottom; - node.shadowColor = [[UIColor cyanColor] CGColor]; - node.shadowOpacity = .5f; - node.shadowOffset = CGSizeMake(1.0f, 1.0f); - node.shadowRadius = .5f; - node.borderWidth = .5f; - node.borderColor = [[UIColor orangeColor] CGColor]; - node.displaySuspended = YES; - node.displaysAsynchronously = NO; - node.asyncdisplaykit_asyncTransactionContainer = YES; - node.userInteractionEnabled = NO; - node.debugName = @"quack like a duck"; - - node.isAccessibilityElement = YES; - - for (int i = 0; i < 4; i++) { - if (i % 2 == 0) { - XCTAssertNoThrow(node.accessibilityLabel = nil); - XCTAssertNoThrow(node.accessibilityHint = nil); - XCTAssertNoThrow(node.accessibilityValue = nil); - } else { - node.accessibilityLabel = @"Ship love"; - node.accessibilityHint = @"Awesome things will happen"; - node.accessibilityValue = @"1 of 2"; - } - } - - node.accessibilityTraits = UIAccessibilityTraitSelected | UIAccessibilityTraitButton; - node.accessibilityFrame = CGRectMake(1, 2, 3, 4); - node.accessibilityLanguage = @"mas"; - node.accessibilityElementsHidden = YES; - node.accessibilityViewIsModal = YES; - node.shouldGroupAccessibilityChildren = YES; - node.accessibilityNavigationStyle = UIAccessibilityNavigationStyleSeparate; - node.accessibilityActivationPoint = CGPointMake(1.0, 1.0); - node.accessibilityPath = [UIBezierPath bezierPath]; - - if (!isLayerBacked) { - node.exclusiveTouch = YES; - node.autoresizesSubviews = NO; - node.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; - node.insetsLayoutMarginsFromSafeArea = NO; - node.layoutMargins = UIEdgeInsetsMake(3, 5, 8, 11); - node.preservesSuperviewLayoutMargins = YES; - } - }]; - - // Assert that the values can be fetched from the node before the view is realized. - [self checkValuesMatchSetValues:node isLayerBacked:isLayerBacked]; - - // Assert that the realized view/layer have the correct values. - [node layer]; - - [self checkValuesMatchSetValues:node isLayerBacked:isLayerBacked]; - - // As a final sanity check, change a value on the realized view and ensure it is fetched through the node. - if (isLayerBacked) { - node.layer.hidden = NO; - } else { - node.view.hidden = NO; - } - XCTAssertEqual(NO, node.hidden, @"After the view is realized, the node should delegate properties to the view."); -} - -// Set each of the simple bridged UIView properties to a non-default value off-thread, then -// assert that they are correct on the node and propagated to the UIView realized on-thread. -- (void)testSimpleUIViewBridgePropertiesSetOffThreadPropagate -{ - [self checkSimpleBridgePropertiesSetPropagate:NO]; -} - -- (void)testSimpleCALayerBridgePropertiesSetOffThreadPropagate -{ - [self checkSimpleBridgePropertiesSetPropagate:YES]; -} - -- (void)testPropertiesSetOffThreadBeforeLoadingExternalView -{ - UIView *view = [[UIDisplayNodeTestView alloc] init]; - - __block ASDisplayNode *node = nil; - [self executeOffThread:^{ - node = [[ASDisplayNode alloc] initWithViewBlock:^{ - return view; - }]; - node.backgroundColor = [UIColor blueColor]; - node.frame = CGRectMake(10, 20, 30, 40); - node.autoresizingMask = UIViewAutoresizingFlexibleWidth; - node.userInteractionEnabled = YES; - }]; - - [self checkExternalViewAppliedPropertiesMatch:node]; -} - -- (void)testPropertiesSetOnThreadAfterLoadingExternalView -{ - UIView *view = [[UIDisplayNodeTestView alloc] init]; - ASDisplayNode *node = [[ASDisplayNode alloc] initWithViewBlock:^{ - return view; - }]; - - // Load the backing view first - [node view]; - - node.backgroundColor = [UIColor blueColor]; - node.frame = CGRectMake(10, 20, 30, 40); - node.autoresizingMask = UIViewAutoresizingFlexibleWidth; - node.userInteractionEnabled = YES; - - [self checkExternalViewAppliedPropertiesMatch:node]; -} - -- (void)checkExternalViewAppliedPropertiesMatch:(ASDisplayNode *)node -{ - UIView *view = node.view; - - XCTAssertEqualObjects([UIColor blueColor], view.backgroundColor, @"backgroundColor not propagated to view"); - XCTAssertTrue(CGRectEqualToRect(CGRectMake(10, 20, 30, 40), view.frame), @"frame not propagated to view"); - XCTAssertEqual(UIViewAutoresizingFlexibleWidth, view.autoresizingMask, @"autoresizingMask not propagated to view"); - XCTAssertEqual(YES, view.userInteractionEnabled, @"userInteractionEnabled not propagated to view"); -} - -- (void)testPropertiesSetOffThreadBeforeLoadingExternalLayer -{ - CALayer *layer = [[CAShapeLayer alloc] init]; - - __block ASDisplayNode *node = nil; - [self executeOffThread:^{ - node = [[ASDisplayNode alloc] initWithLayerBlock:^{ - return layer; - }]; - node.backgroundColor = [UIColor blueColor]; - node.frame = CGRectMake(10, 20, 30, 40); - }]; - - [self checkExternalLayerAppliedPropertiesMatch:node]; -} - -- (void)testPropertiesSetOnThreadAfterLoadingExternalLayer -{ - CALayer *layer = [[CAShapeLayer alloc] init]; - ASDisplayNode *node = [[ASDisplayNode alloc] initWithLayerBlock:^{ - return layer; - }]; - - // Load the backing layer first - [node layer]; - - node.backgroundColor = [UIColor blueColor]; - node.frame = CGRectMake(10, 20, 30, 40); - - [self checkExternalLayerAppliedPropertiesMatch:node]; -} - -- (void)checkExternalLayerAppliedPropertiesMatch:(ASDisplayNode *)node -{ - CALayer *layer = node.layer; - - XCTAssertTrue(CGColorEqualToColor([UIColor blueColor].CGColor, layer.backgroundColor), @"backgroundColor not propagated to layer"); - XCTAssertTrue(CGRectEqualToRect(CGRectMake(10, 20, 30, 40), layer.frame), @"frame not propagated to layer"); -} - - -// Perform parallel updates of a standard UIView/CALayer and an ASDisplayNode and ensure they are equivalent. -- (void)testDeriveFrameFromBoundsPositionAnchorPoint -{ - UIView *plainView = [[UIView alloc] initWithFrame:CGRectZero]; - plainView.layer.anchorPoint = CGPointMake(0.25f, 0.75f); - plainView.layer.position = CGPointMake(10, 20); - plainView.layer.bounds = CGRectMake(0, 0, 60, 80); - - __block ASDisplayNode *node = nil; - [self executeOffThread:^{ - node = [[ASDisplayNode alloc] init]; - node.anchorPoint = CGPointMake(0.25f, 0.75f); - node.bounds = CGRectMake(0, 0, 60, 80); - node.position = CGPointMake(10, 20); - }]; - - XCTAssertTrue(CGRectEqualToRect(plainView.frame, node.frame), @"Node frame should match UIView frame before realization."); - XCTAssertTrue(CGRectEqualToRect(plainView.frame, node.view.frame), @"Realized view frame should match UIView frame."); -} - -// Perform parallel updates of a standard UIView/CALayer and an ASDisplayNode and ensure they are equivalent. -- (void)testSetFrameSetsBoundsPosition -{ - UIView *plainView = [[UIView alloc] initWithFrame:CGRectZero]; - plainView.layer.anchorPoint = CGPointMake(0.25f, 0.75f); - plainView.layer.frame = CGRectMake(10, 20, 60, 80); - - __block ASDisplayNode *node = nil; - [self executeOffThread:^{ - node = [[ASDisplayNode alloc] init]; - node.anchorPoint = CGPointMake(0.25f, 0.75f); - node.frame = CGRectMake(10, 20, 60, 80); - }]; - - XCTAssertTrue(CGPointEqualToPoint(plainView.layer.position, node.position), @"Node position should match UIView position before realization."); - XCTAssertTrue(CGRectEqualToRect(plainView.layer.bounds, node.bounds), @"Node bounds should match UIView bounds before realization."); - XCTAssertTrue(CGPointEqualToPoint(plainView.layer.position, node.view.layer.position), @"Realized view position should match UIView position before realization."); - XCTAssertTrue(CGRectEqualToRect(plainView.layer.bounds, node.view.layer.bounds), @"Realized view bounds should match UIView bounds before realization."); -} - -- (void)testDisplayNodePointConversionWithFrames -{ - ASDisplayNode *node = nil; - ASDisplayNode *innerNode = nil; - - // Setup - CGPoint originalPoint = CGPointZero, convertedPoint = CGPointZero, correctPoint = CGPointZero; - node = [[ASDisplayNode alloc] init]; - innerNode = [[ASDisplayNode alloc] init]; - [node addSubnode:innerNode]; - - // Convert point *FROM* outer node's coordinate space to inner node's coordinate space - node.frame = CGRectMake(100, 100, 100, 100); - innerNode.frame = CGRectMake(10, 10, 20, 20); - originalPoint = CGPointMake(105, 105); - correctPoint = CGPointMake(95, 95); - convertedPoint = [self checkConvertPoint:originalPoint fromNode:node selfNode:innerNode]; - XCTAssertTrue(CGPointEqualToPoint(convertedPoint, correctPoint), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(correctPoint), NSStringFromCGPoint(convertedPoint)); - - // Setup - node = [[ASDisplayNode alloc] init]; - innerNode = [[ASDisplayNode alloc] init]; - [node addSubnode:innerNode]; - - // Convert point *FROM* inner node's coordinate space to outer node's coordinate space - node.frame = CGRectMake(100, 100, 100, 100); - innerNode.frame = CGRectMake(10, 10, 20, 20); - originalPoint = CGPointMake(5, 5); - correctPoint = CGPointMake(15, 15); - convertedPoint = [self checkConvertPoint:originalPoint fromNode:innerNode selfNode:node]; - XCTAssertTrue(CGPointEqualToPoint(convertedPoint, correctPoint), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(correctPoint), NSStringFromCGPoint(convertedPoint)); - - // Setup - node = [[ASDisplayNode alloc] init]; - innerNode = [[ASDisplayNode alloc] init]; - [node addSubnode:innerNode]; - - // Convert point in inner node's coordinate space *TO* outer node's coordinate space - node.frame = CGRectMake(100, 100, 100, 100); - innerNode.frame = CGRectMake(10, 10, 20, 20); - originalPoint = CGPointMake(95, 95); - correctPoint = CGPointMake(105, 105); - convertedPoint = [self checkConvertPoint:originalPoint toNode:node selfNode:innerNode]; - XCTAssertTrue(CGPointEqualToPoint(convertedPoint, correctPoint), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(correctPoint), NSStringFromCGPoint(convertedPoint)); - - // Setup - node = [[ASDisplayNode alloc] init]; - innerNode = [[ASDisplayNode alloc] init]; - [node addSubnode:innerNode]; - - // Convert point in outer node's coordinate space *TO* inner node's coordinate space - node.frame = CGRectMake(0, 0, 100, 100); - innerNode.frame = CGRectMake(10, 10, 20, 20); - originalPoint = CGPointMake(5, 5); - correctPoint = CGPointMake(-5, -5); - convertedPoint = [self checkConvertPoint:originalPoint toNode:innerNode selfNode:node]; - XCTAssertTrue(CGPointEqualToPoint(convertedPoint, correctPoint), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(correctPoint), NSStringFromCGPoint(convertedPoint)); -} - -// Test conversions when bounds is not null. -// NOTE: Esoteric values were picked to facilitate visual inspection by demonstrating the relevance of certain numbers and lack of relevance of others -- (void)testDisplayNodePointConversionWithNonZeroBounds -{ - ASDisplayNode *node = nil; - ASDisplayNode *innerNode = nil; - - // Setup - CGPoint originalPoint = CGPointZero, convertedPoint = CGPointZero, correctPoint = CGPointZero; - node = [[ASDisplayNode alloc] init]; - innerNode = [[ASDisplayNode alloc] init]; - [node addSubnode:innerNode]; - - // Convert point *FROM* outer node's coordinate space to inner node's coordinate space - node.anchorPoint = CGPointZero; - innerNode.anchorPoint = CGPointZero; - node.bounds = CGRectMake(20, 20, 100, 100); - innerNode.position = CGPointMake(23, 23); - innerNode.bounds = CGRectMake(17, 17, 20, 20); - originalPoint = CGPointMake(42, 42); - correctPoint = CGPointMake(36, 36); - convertedPoint = [self checkConvertPoint:originalPoint fromNode:node selfNode:innerNode]; - XCTAssertTrue(CGPointEqualToPoint(convertedPoint, correctPoint), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(correctPoint), NSStringFromCGPoint(convertedPoint)); - - // Setup - node = [[ASDisplayNode alloc] init]; - innerNode = [[ASDisplayNode alloc] init]; - [node addSubnode:innerNode]; - - // Convert point *FROM* inner node's coordinate space to outer node's coordinate space - node.anchorPoint = CGPointZero; - innerNode.anchorPoint = CGPointZero; - node.bounds = CGRectMake(-1000, -1000, 1337, 1337); - innerNode.position = CGPointMake(23, 23); - innerNode.bounds = CGRectMake(17, 17, 200, 200); - originalPoint = CGPointMake(5, 5); - correctPoint = CGPointMake(11, 11); - convertedPoint = [self checkConvertPoint:originalPoint fromNode:innerNode selfNode:node]; - XCTAssertTrue(CGPointEqualToPoint(convertedPoint, correctPoint), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(correctPoint), NSStringFromCGPoint(convertedPoint)); - - // Setup - node = [[ASDisplayNode alloc] init]; - innerNode = [[ASDisplayNode alloc] init]; - [node addSubnode:innerNode]; - - // Convert point in inner node's coordinate space *TO* outer node's coordinate space - node.anchorPoint = CGPointZero; - innerNode.anchorPoint = CGPointZero; - node.bounds = CGRectMake(20, 20, 100, 100); - innerNode.position = CGPointMake(23, 23); - innerNode.bounds = CGRectMake(17, 17, 20, 20); - originalPoint = CGPointMake(36, 36); - correctPoint = CGPointMake(42, 42); - convertedPoint = [self checkConvertPoint:originalPoint toNode:node selfNode:innerNode]; - XCTAssertTrue(CGPointEqualToPoint(convertedPoint, correctPoint), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(correctPoint), NSStringFromCGPoint(convertedPoint)); - - // Setup - node = [[ASDisplayNode alloc] init]; - innerNode = [[ASDisplayNode alloc] init]; - [node addSubnode:innerNode]; - - // Convert point in outer node's coordinate space *TO* inner node's coordinate space - node.anchorPoint = CGPointZero; - innerNode.anchorPoint = CGPointZero; - node.bounds = CGRectMake(-1000, -1000, 1337, 1337); - innerNode.position = CGPointMake(23, 23); - innerNode.bounds = CGRectMake(17, 17, 200, 200); - originalPoint = CGPointMake(11, 11); - correctPoint = CGPointMake(5, 5); - convertedPoint = [self checkConvertPoint:originalPoint toNode:innerNode selfNode:node]; - XCTAssertTrue(CGPointEqualToPoint(convertedPoint, correctPoint), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(correctPoint), NSStringFromCGPoint(convertedPoint)); -} - -// Test conversions when the anchorPoint is not {0.0, 0.0}. -- (void)testDisplayNodePointConversionWithNonZeroAnchorPoint -{ - ASDisplayNode *node = nil; - ASDisplayNode *innerNode = nil; - - // Setup - CGPoint originalPoint = CGPointZero, convertedPoint = CGPointZero, correctPoint = CGPointZero; - node = [[ASDisplayNode alloc] init]; - innerNode = [[ASDisplayNode alloc] init]; - [node addSubnode:innerNode]; - - // Convert point *FROM* outer node's coordinate space to inner node's coordinate space - node.bounds = CGRectMake(20, 20, 100, 100); - innerNode.anchorPoint = CGPointMake(0.75, 1); - innerNode.position = CGPointMake(23, 23); - innerNode.bounds = CGRectMake(17, 17, 20, 20); - originalPoint = CGPointMake(42, 42); - correctPoint = CGPointMake(51, 56); - convertedPoint = [self checkConvertPoint:originalPoint fromNode:node selfNode:innerNode]; - XCTAssertTrue(_CGPointEqualToPointWithEpsilon(convertedPoint, correctPoint, 0.001), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(correctPoint), NSStringFromCGPoint(convertedPoint)); - - // Setup - node = [[ASDisplayNode alloc] init]; - innerNode = [[ASDisplayNode alloc] init]; - [node addSubnode:innerNode]; - - // Convert point *FROM* inner node's coordinate space to outer node's coordinate space - node.bounds = CGRectMake(-1000, -1000, 1337, 1337); - innerNode.anchorPoint = CGPointMake(0.3, 0.3); - innerNode.position = CGPointMake(23, 23); - innerNode.bounds = CGRectMake(17, 17, 200, 200); - originalPoint = CGPointMake(55, 55); - correctPoint = CGPointMake(1, 1); - convertedPoint = [self checkConvertPoint:originalPoint fromNode:innerNode selfNode:node]; - XCTAssertTrue(_CGPointEqualToPointWithEpsilon(convertedPoint, correctPoint, 0.001), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(correctPoint), NSStringFromCGPoint(convertedPoint)); - - // Setup - node = [[ASDisplayNode alloc] init]; - innerNode = [[ASDisplayNode alloc] init]; - [node addSubnode:innerNode]; - - // Convert point in inner node's coordinate space *TO* outer node's coordinate space - node.bounds = CGRectMake(20, 20, 100, 100); - innerNode.anchorPoint = CGPointMake(0.75, 1); - innerNode.position = CGPointMake(23, 23); - innerNode.bounds = CGRectMake(17, 17, 20, 20); - originalPoint = CGPointMake(51, 56); - correctPoint = CGPointMake(42, 42); - convertedPoint = [self checkConvertPoint:originalPoint toNode:node selfNode:innerNode]; - XCTAssertTrue(_CGPointEqualToPointWithEpsilon(convertedPoint, correctPoint, 0.001), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(correctPoint), NSStringFromCGPoint(convertedPoint)); - - // Setup - node = [[ASDisplayNode alloc] init]; - innerNode = [[ASDisplayNode alloc] init]; - [node addSubnode:innerNode]; - - // Convert point in outer node's coordinate space *TO* inner node's coordinate space - node.bounds = CGRectMake(-1000, -1000, 1337, 1337); - innerNode.anchorPoint = CGPointMake(0.3, 0.3); - innerNode.position = CGPointMake(23, 23); - innerNode.bounds = CGRectMake(17, 17, 200, 200); - originalPoint = CGPointMake(1, 1); - correctPoint = CGPointMake(55, 55); - convertedPoint = [self checkConvertPoint:originalPoint toNode:innerNode selfNode:node]; - XCTAssertTrue(_CGPointEqualToPointWithEpsilon(convertedPoint, correctPoint, 0.001), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(correctPoint), NSStringFromCGPoint(convertedPoint)); -} - -- (void)testDisplayNodePointConversionAgainstSelf { - ASDisplayNode *innerNode = nil; - CGPoint originalPoint = CGPointZero, convertedPoint = CGPointZero; - - innerNode = [[ASDisplayNode alloc] init]; - innerNode.frame = CGRectMake(10, 10, 20, 20); - originalPoint = CGPointMake(105, 105); - convertedPoint = [self checkConvertPoint:originalPoint fromNode:innerNode selfNode:innerNode]; - XCTAssertTrue(_CGPointEqualToPointWithEpsilon(convertedPoint, originalPoint, 0.001), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(convertedPoint)); - - innerNode = [[ASDisplayNode alloc] init]; - innerNode.position = CGPointMake(23, 23); - innerNode.bounds = CGRectMake(17, 17, 20, 20); - originalPoint = CGPointMake(42, 42); - convertedPoint = [self checkConvertPoint:originalPoint fromNode:innerNode selfNode:innerNode]; - XCTAssertTrue(CGPointEqualToPoint(convertedPoint, originalPoint), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(convertedPoint)); - - innerNode = [[ASDisplayNode alloc] init]; - innerNode.anchorPoint = CGPointMake(0.3, 0.3); - innerNode.position = CGPointMake(23, 23); - innerNode.bounds = CGRectMake(17, 17, 200, 200); - originalPoint = CGPointMake(55, 55); - convertedPoint = [self checkConvertPoint:originalPoint fromNode:innerNode selfNode:innerNode]; - XCTAssertTrue(CGPointEqualToPoint(convertedPoint, originalPoint), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(convertedPoint)); - - innerNode = [[ASDisplayNode alloc] init]; - innerNode.frame = CGRectMake(10, 10, 20, 20); - originalPoint = CGPointMake(95, 95); - convertedPoint = [self checkConvertPoint:originalPoint toNode:innerNode selfNode:innerNode]; - XCTAssertTrue(CGPointEqualToPoint(convertedPoint, originalPoint), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(convertedPoint)); - - innerNode = [[ASDisplayNode alloc] init]; - innerNode.position = CGPointMake(23, 23); - innerNode.bounds = CGRectMake(17, 17, 20, 20); - originalPoint = CGPointMake(36, 36); - convertedPoint = [self checkConvertPoint:originalPoint toNode:innerNode selfNode:innerNode]; - XCTAssertTrue(CGPointEqualToPoint(convertedPoint, originalPoint), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(convertedPoint)); - - innerNode = [[ASDisplayNode alloc] init]; - innerNode.anchorPoint = CGPointMake(0.75, 1); - innerNode.position = CGPointMake(23, 23); - innerNode.bounds = CGRectMake(17, 17, 20, 20); - originalPoint = CGPointMake(51, 56); - convertedPoint = [self checkConvertPoint:originalPoint toNode:innerNode selfNode:innerNode]; - XCTAssertTrue(CGPointEqualToPoint(convertedPoint, originalPoint), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(convertedPoint)); -} - -- (void)testDisplayNodePointConversionFailureFromDisjointHierarchies -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - ASDisplayNode *childNode = [[ASDisplayNode alloc] init]; - ASDisplayNode *otherNode = [[ASDisplayNode alloc] init]; - [node addSubnode:childNode]; - - XCTAssertNoThrow([self checkConvertPoint:CGPointZero fromNode:node selfNode:childNode], @"Assertion should have succeeded; nodes are in the same hierarchy"); - XCTAssertThrows([self checkConvertPoint:CGPointZero fromNode:node selfNode:otherNode], @"Assertion should have failed for nodes that are not in the same node hierarchy"); - XCTAssertThrows([self checkConvertPoint:CGPointZero fromNode:childNode selfNode:otherNode], @"Assertion should have failed for nodes that are not in the same node hierarchy"); - - XCTAssertNoThrow([self checkConvertPoint:CGPointZero fromNode:childNode selfNode:node], @"Assertion should have succeeded; nodes are in the same hierarchy"); - XCTAssertThrows([self checkConvertPoint:CGPointZero fromNode:otherNode selfNode:node], @"Assertion should have failed for nodes that are not in the same node hierarchy"); - XCTAssertThrows([self checkConvertPoint:CGPointZero fromNode:otherNode selfNode:childNode], @"Assertion should have failed for nodes that are not in the same node hierarchy"); - - XCTAssertNoThrow([self checkConvertPoint:CGPointZero toNode:node selfNode:childNode], @"Assertion should have succeeded; nodes are in the same hierarchy"); - XCTAssertThrows([self checkConvertPoint:CGPointZero toNode:node selfNode:otherNode], @"Assertion should have failed for nodes that are not in the same node hierarchy"); - XCTAssertThrows([self checkConvertPoint:CGPointZero toNode:childNode selfNode:otherNode], @"Assertion should have failed for nodes that are not in the same node hierarchy"); - - XCTAssertNoThrow([self checkConvertPoint:CGPointZero toNode:childNode selfNode:node], @"Assertion should have succeeded; nodes are in the same hierarchy"); - XCTAssertThrows([self checkConvertPoint:CGPointZero toNode:otherNode selfNode:node], @"Assertion should have failed for nodes that are not in the same node hierarchy"); - XCTAssertThrows([self checkConvertPoint:CGPointZero toNode:otherNode selfNode:childNode], @"Assertion should have failed for nodes that are not in the same node hierarchy"); -} - -- (void)testDisplayNodePointConversionOnDeepHierarchies -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - - // 7 deep (six below root); each one positioned at position = (1, 1) - _addTonsOfSubnodes(node, 2, 6, ^(ASDisplayNode *createdNode) { - createdNode.position = CGPointMake(1, 1); - }); - - ASDisplayNode *deepSubNode = [self _getDeepSubnodeForRoot:node withIndices:@[@1, @1, @1, @1, @1, @1]]; - - CGPoint originalPoint = CGPointMake(55, 55); - CGPoint correctPoint = CGPointMake(61, 61); - CGPoint convertedPoint = [deepSubNode convertPoint:originalPoint toNode:node]; - XCTAssertTrue(CGPointEqualToPoint(convertedPoint, correctPoint), @"Unexpected point conversion result. Point: %@ Expected conversion: %@ Actual conversion: %@", NSStringFromCGPoint(originalPoint), NSStringFromCGPoint(correctPoint), NSStringFromCGPoint(convertedPoint)); -} - -// Adds nodes (breadth-first rather than depth-first addition) -static void _addTonsOfSubnodes(ASDisplayNode *parent, NSUInteger fanout, NSUInteger depth, void (^onCreate)(ASDisplayNode *createdNode)) { - if (depth == 0) { - return; - } - - for (NSUInteger i = 0; i < fanout; i++) { - ASDisplayNode *subnode = [[ASDisplayNode alloc] init]; - [parent addSubnode:subnode]; - onCreate(subnode); - } - for (NSUInteger i = 0; i < fanout; i++) { - _addTonsOfSubnodes(parent.subnodes[i], fanout, depth - 1, onCreate); - } -} - -// Convenience function for getting a node deep within a node hierarchy -- (ASDisplayNode *)_getDeepSubnodeForRoot:(ASDisplayNode *)root withIndices:(NSArray *)indexArray { - if ([indexArray count] == 0) { - return root; - } - - NSArray *subnodes = root.subnodes; - if ([subnodes count] == 0) { - XCTFail(@"Node hierarchy isn't deep enough for given index array"); - } - - NSUInteger index = [indexArray[0] unsignedIntegerValue]; - NSArray *otherIndices = [indexArray subarrayWithRange:NSMakeRange(1, [indexArray count] -1)]; - - return [self _getDeepSubnodeForRoot:subnodes[index] withIndices:otherIndices]; -} - -static inline BOOL _CGPointEqualToPointWithEpsilon(CGPoint point1, CGPoint point2, CGFloat epsilon) { - CGFloat absEpsilon = fabs(epsilon); - BOOL xOK = fabs(point1.x - point2.x) < absEpsilon; - BOOL yOK = fabs(point1.y - point2.y) < absEpsilon; - return xOK && yOK; -} - -- (CGPoint)checkConvertPoint:(CGPoint)point fromNode:(ASDisplayNode *)fromNode selfNode:(ASDisplayNode *)toNode -{ - CGPoint nodeConversion = [toNode convertPoint:point fromNode:fromNode]; - - UIView *fromView = fromNode.view; - UIView *toView = toNode.view; - CGPoint viewConversion = [toView convertPoint:point fromView:fromView]; - XCTAssertTrue(_CGPointEqualToPointWithEpsilon(nodeConversion, viewConversion, 0.001), @"Conversion mismatch: node: %@ view: %@", NSStringFromCGPoint(nodeConversion), NSStringFromCGPoint(viewConversion)); - return nodeConversion; -} - -- (CGPoint)checkConvertPoint:(CGPoint)point toNode:(ASDisplayNode *)toNode selfNode:(ASDisplayNode *)fromNode -{ - CGPoint nodeConversion = [fromNode convertPoint:point toNode:toNode]; - - UIView *fromView = fromNode.view; - UIView *toView = toNode.view; - CGPoint viewConversion = [fromView convertPoint:point toView:toView]; - XCTAssertTrue(_CGPointEqualToPointWithEpsilon(nodeConversion, viewConversion, 0.001), @"Conversion mismatch: node: %@ view: %@", NSStringFromCGPoint(nodeConversion), NSStringFromCGPoint(viewConversion)); - return nodeConversion; -} - -- (void)executeOffThread:(void (^)(void))block -{ - __block BOOL blockExecuted = NO; - dispatch_group_t g = dispatch_group_create(); - dispatch_group_async(g, queue, ^{ - block(); - blockExecuted = YES; - }); - dispatch_group_wait(g, DISPATCH_TIME_FOREVER); - XCTAssertTrue(blockExecuted, @"Block did not finish executing. Timeout or exception?"); -} - -- (void)testReferenceCounting -{ - __weak ASTestDisplayNode *weakNode = nil; - { - NS_VALID_UNTIL_END_OF_SCOPE ASTestDisplayNode *node = [[ASTestDisplayNode alloc] init]; - weakNode = node; - } - XCTAssertNil(weakNode); -} - -- (void)testAddingNodeToHierarchyRetainsNode -{ - UIView *v = [[UIView alloc] initWithFrame:CGRectZero]; - __weak ASTestDisplayNode *weakNode = nil; - { - NS_VALID_UNTIL_END_OF_SCOPE ASTestDisplayNode *node = [[ASTestDisplayNode alloc] init]; - [v addSubview:node.view]; - weakNode = node; - } - XCTAssertNotNil(weakNode); -} - -- (void)testAddingSubnodeDoesNotCreateRetainCycle -{ - __weak ASTestDisplayNode *weakNode = nil; - __weak ASTestDisplayNode *weakSubnode = nil; - { - NS_VALID_UNTIL_END_OF_SCOPE ASTestDisplayNode *node = [[ASTestDisplayNode alloc] init]; - NS_VALID_UNTIL_END_OF_SCOPE ASTestDisplayNode *subnode = [[ASTestDisplayNode alloc] init]; - [node addSubnode:subnode]; - weakNode = node; - weakSubnode = subnode; - - XCTAssertNotNil(weakNode); - XCTAssertNotNil(weakSubnode); - } - XCTAssertNil(weakNode); - XCTAssertNil(weakSubnode); -} - -- (void)testThatUIKitDeallocationTrampoliningWorks -{ - NS_VALID_UNTIL_END_OF_SCOPE __weak UIGestureRecognizer *weakRecognizer = nil; - NS_VALID_UNTIL_END_OF_SCOPE __weak UIGestureRecognizer *weakIdRecognizer = nil; - NS_VALID_UNTIL_END_OF_SCOPE __weak UIView *weakView = nil; - NS_VALID_UNTIL_END_OF_SCOPE __weak CALayer *weakLayer = nil; - NS_VALID_UNTIL_END_OF_SCOPE __weak UIImage *weakImage = nil; - NS_VALID_UNTIL_END_OF_SCOPE __weak NSArray *weakArray = nil; - __block NS_VALID_UNTIL_END_OF_SCOPE ASTestDisplayNode *node = nil; - @autoreleasepool { - node = [[ASTestDisplayNode alloc] init]; - node.gestureRecognizer = [[UIGestureRecognizer alloc] init]; - node.idGestureRecognizer = [[UIGestureRecognizer alloc] init]; - UIGraphicsBeginImageContextWithOptions(CGSizeMake(1000, 1000), YES, 1); - node.bigImage = UIGraphicsGetImageFromCurrentImageContext(); - node.randomProperty = @[ @"Hello, world!" ]; - UIGraphicsEndImageContext(); - weakImage = node.bigImage; - weakView = node.view; - weakLayer = node.layer; - weakArray = node.randomProperty; - weakIdRecognizer = node.idGestureRecognizer; - weakRecognizer = node.gestureRecognizer; - } - - [self executeOffThread:^{ - node = nil; - }]; - - XCTAssertNotNil(weakRecognizer, @"UIGestureRecognizer ivars should be deallocated on main."); - XCTAssertNotNil(weakIdRecognizer, @"UIGestureRecognizer-backed 'id' ivars should be deallocated on main."); - XCTAssertNotNil(weakView, @"UIView ivars should be deallocated on main."); - XCTAssertNotNil(weakLayer, @"CALayer ivars should be deallocated on main."); - XCTAssertNil(weakImage, @"UIImage ivars should be deallocated normally."); - XCTAssertNil(weakArray, @"NSArray ivars should be deallocated normally."); - XCTAssertNil(node); - - [self expectationForPredicate:[NSPredicate predicateWithBlock:^BOOL(id _Nonnull evaluatedObject, NSDictionary * _Nullable bindings) { - return (weakRecognizer == nil && weakIdRecognizer == nil && weakView == nil); - }] evaluatedWithObject:(id)kCFNull handler:nil]; - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testSubnodes -{ - ASDisplayNode *parent = [[ASDisplayNode alloc] init]; - ASDisplayNode *nilNode = nil; - XCTAssertThrows([parent addSubnode:nilNode], @"Don't try to add nil, but we'll deal with it in production, but throw in development."); - XCTAssertNoThrow([parent addSubnode:parent], @"Not good, test that we recover"); - XCTAssertEqual(0u, parent.subnodes.count, @"We shouldn't have any subnodes"); -} - -- (void)testReplaceSubnodeNoView -{ - [self checkReplaceSubnodeLoaded:NO layerBacked:NO]; -} - -- (void)testReplaceSubnodeNoLayer -{ - [self checkReplaceSubnodeLoaded:NO layerBacked:YES]; -} - -- (void)testReplaceSubnodeView -{ - [self checkReplaceSubnodeLoaded:YES layerBacked:NO]; -} - -- (void)testReplaceSubnodeLayer -{ - [self checkReplaceSubnodeLoaded:YES layerBacked:YES]; -} - - -- (void)checkReplaceSubnodeLoaded:(BOOL)loaded layerBacked:(BOOL)isLayerBacked -{ - DeclareNodeNamed(parent); - DeclareNodeNamed(a); - DeclareNodeNamed(b); - DeclareNodeNamed(c); - DeclareNodeNamed(d); - - for (ASDisplayNode *n in @[parent, a, b, c, d]) { - n.layerBacked = isLayerBacked; - } - - [parent addSubnode:a]; - [parent addSubnode:b]; - [parent addSubnode:c]; - - if (loaded) { - [parent layer]; - } - - if (loaded) { - XCTAssertFalse(d.nodeLoaded, @"Should not yet be loaded"); - } - - // Shut the type mismatch up - ASDisplayNode *nilParent = nil; - - // Check initial state - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,b,c", @"initial state"); - XCTAssertNodesHaveParent(parent, a, b, c); - XCTAssertNodesHaveParent(nilParent, d); - - // Check replace 0th - [parent replaceSubnode:a withSubnode:d]; - - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"d,b,c", @"after replace 0th"); - XCTAssertNodesHaveParent(parent, d, b, c); - XCTAssertNodesHaveParent(nilParent, a); - if (loaded) { - XCTAssertNodesLoaded(d); - } - - [parent replaceSubnode:d withSubnode:a]; - - // Check replace 1st - [parent replaceSubnode:b withSubnode:d]; - - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,d,c", @"Replace"); - XCTAssertNodesHaveParent(parent, a, c, d); - XCTAssertNodesHaveParent(nilParent, b); - - [parent replaceSubnode:d withSubnode:b]; - - // Check replace 2nd - [parent replaceSubnode:c withSubnode:d]; - - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,b,d", @"Replace"); - XCTAssertNodesHaveParent(parent, a, b, d); - XCTAssertNodesHaveParent(nilParent, c); - - [parent replaceSubnode:d withSubnode:c]; - - //Check initial again - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,b,c", @"check should back to initial"); - XCTAssertNodesHaveParent(parent, a, b, c); - XCTAssertNodesHaveParent(nilParent, d); - - // Check replace 0th with 2nd - [parent replaceSubnode:a withSubnode:c]; - - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"c,b", @"After replace 0th"); - XCTAssertNodesHaveParent(parent, c, b); - XCTAssertNodesHaveParent(nilParent, a,d); - - //TODO: assert that things deallocate immediately and don't have latent autoreleases in here -} - -- (void)testInsertSubnodeAtIndexView -{ - [self checkInsertSubnodeAtIndexWithViewLoaded:YES layerBacked:NO]; -} - -- (void)testInsertSubnodeAtIndexLayer -{ - [self checkInsertSubnodeAtIndexWithViewLoaded:YES layerBacked:YES]; -} - -- (void)testInsertSubnodeAtIndexNoView -{ - [self checkInsertSubnodeAtIndexWithViewLoaded:NO layerBacked:NO]; -} - -- (void)testInsertSubnodeAtIndexNoLayer -{ - [self checkInsertSubnodeAtIndexWithViewLoaded:NO layerBacked:YES]; -} - -- (void)checkInsertSubnodeAtIndexWithViewLoaded:(BOOL)loaded layerBacked:(BOOL)isLayerBacked -{ - DeclareNodeNamed(parent); - DeclareNodeNamed(a); - DeclareNodeNamed(b); - DeclareNodeNamed(c); - - for (ASDisplayNode *v in @[parent, a, b, c]) { - v.layerBacked = isLayerBacked; - } - - // Load parent - if (loaded) { - (void)[parent layer]; - } - - // Add another subnode to test creation after parent is loaded - DeclareNodeNamed(d); - d.layerBacked = isLayerBacked; - if (loaded) { - XCTAssertFalse(d.nodeLoaded, @"Should not yet be loaded"); - } - - // Shut the type mismatch up - ASDisplayNode *nilParent = nil; - - // Check initial state - XCTAssertEqual(0u, parent.subnodes.count, @"Should have the right subnode count"); - - // Check insert at 0th () => (a,b,c) - [parent insertSubnode:c atIndex:0]; - [parent insertSubnode:b atIndex:0]; - [parent insertSubnode:a atIndex:0]; - - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,b,c", @"initial state"); - XCTAssertNodesHaveParent(parent, a, b, c); - XCTAssertNodesHaveParent(nilParent, d); - - if (loaded) { - XCTAssertNodesLoaded(a, b, c); - } else { - XCTAssertNodesNotLoaded(a, b, c); - } - - // Check insert at 1st (a,b,c) => (a,d,b,c) - [parent insertSubnode:d atIndex:1]; - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,d,b,c", @"initial state"); - XCTAssertNodesHaveParent(parent, a, b, c, d); - if (loaded) { - XCTAssertNodesLoaded(d); - } - - // Reset - [d removeFromSupernode]; - XCTAssertEqual(3u, parent.subnodes.count, @"Should have the right subnode count"); - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,b,c", @"Bad removal of d"); - XCTAssertNodesHaveParent(nilParent, d); - - // Check insert at last position - [parent insertSubnode:d atIndex:3]; - - XCTAssertEqual(4u, parent.subnodes.count, @"Should have the right subnode count"); - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,b,c,d", @"insert at last position."); - XCTAssertNodesHaveParent(parent, a, b, c, d); - - // Reset - [d removeFromSupernode]; - XCTAssertEqual(3u, parent.subnodes.count, @"Should have the right subnode count"); - XCTAssertEqualObjects(nilParent, d.supernode, @"d's parent is messed up"); - - // Check insert a nil node - ASDisplayNode *nilNode = nil; - XCTAssertThrows([parent insertSubnode:nilNode atIndex:0], @"Should not allow insertion of nil node. We will throw in development and deal with it in production"); - - // Check insert at invalid index - XCTAssertThrows([parent insertSubnode:d atIndex:NSNotFound], @"Should not allow insertion at invalid index"); - XCTAssertThrows([parent insertSubnode:d atIndex:-1], @"Should not allow insertion at invalid index"); - - // Should have same state as before - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,b,c", @"Funny business should not corrupt state"); - XCTAssertNodesHaveParent(parent, a, b, c); - XCTAssertNodesHaveParent(nilParent, d); - - // Check reordering existing subnodes with the insert API - // Move c to front - [parent insertSubnode:c atIndex:0]; - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"c,a,b", @"Move to front when already a subnode"); - XCTAssertNodesHaveParent(parent, a, b, c); - XCTAssertNodesHaveParent(nilParent, d); - - // Move c to middle - [parent insertSubnode:c atIndex:1]; - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,c,b", @"Move c to middle"); - XCTAssertNodesHaveParent(parent, a, b, c); - XCTAssertNodesHaveParent(nilParent, d); - - // Insert c at the index it's already at - [parent insertSubnode:c atIndex:1]; - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,c,b", @"Funny business should not corrupt state"); - XCTAssertNodesHaveParent(parent, a, b, c); - XCTAssertNodesHaveParent(nilParent, d); - - // Insert c at 0th when it's already in the array - [parent insertSubnode:c atIndex:2]; - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,b,c", @"Funny business should not corrupt state"); - XCTAssertNodesHaveParent(parent, a, b, c); - XCTAssertNodesHaveParent(nilParent, d); - - //TODO: assert that things deallocate immediately and don't have latent autoreleases in here -} - -// This tests our resiliancy to having other views and layers inserted into our view or layer -- (void)testInsertSubviewAtIndexWithMeddlingViewsAndLayersViewBacked -{ - ASDisplayNode *parent = [[ASDisplayNode alloc] init]; - - DeclareNodeNamed(a); - DeclareNodeNamed(b); - DeclareNodeNamed(c); - DeclareViewNamed(d); - DeclareLayerNamed(e); - - [parent layer]; - - // (a,b) - [parent addSubnode:a]; - [parent addSubnode:b]; - XCTAssertEqualObjects(orderStringFromSublayers(parent.layer), @"a,b", @"Didn't match"); - - // (a,b) => (a,d,b) - [parent.view insertSubview:d aboveSubview:a.view]; - XCTAssertEqualObjects(orderStringFromSublayers(parent.layer), @"a,d,b", @"Didn't match"); - - // (a,d,b) => (a,e,d,b) - [parent.layer insertSublayer:e above:a.layer]; - XCTAssertEqualObjects(orderStringFromSublayers(parent.layer), @"a,e,d,b", @"Didn't match"); - - // (a,e,d,b) => (a,e,d,c,b) - [parent insertSubnode:c belowSubnode:b]; - XCTAssertEqualObjects(orderStringFromSublayers(parent.layer), @"a,e,d,c,b", @"Didn't match"); - - XCTAssertEqual(4u, parent.subnodes.count, @"Should have the right subnode count"); - XCTAssertEqual(4u, parent.view.subviews.count, @"Should have the right subview count"); - XCTAssertEqual(5u, parent.layer.sublayers.count, @"Should have the right sublayer count"); - - [e removeFromSuperlayer]; - XCTAssertEqual(4u, parent.layer.sublayers.count, @"Should have the right sublayer count"); - - //TODO: assert that things deallocate immediately and don't have latent autoreleases in here -} - -- (void)testAppleBugInsertSubview -{ - DeclareViewNamed(parent); - - DeclareLayerNamed(aa); - DeclareLayerNamed(ab); - DeclareViewNamed(a); - DeclareLayerNamed(ba); - DeclareLayerNamed(bb); - DeclareLayerNamed(bc); - DeclareLayerNamed(bd); - DeclareViewNamed(c); - DeclareViewNamed(d); - DeclareLayerNamed(ea); - DeclareLayerNamed(eb); - DeclareLayerNamed(ec); - - [parent.layer addSublayer:aa]; - [parent.layer addSublayer:ab]; - [parent addSubview:a]; - [parent.layer addSublayer:ba]; - [parent.layer addSublayer:bb]; - [parent.layer addSublayer:bc]; - [parent.layer addSublayer:bd]; - [parent addSubview:d]; - [parent.layer addSublayer:ea]; - [parent.layer addSublayer:eb]; - [parent.layer addSublayer:ec]; - - XCTAssertEqualObjects(orderStringFromSublayers(parent.layer), @"aa,ab,a,ba,bb,bc,bd,d,ea,eb,ec", @"Should be in order"); - - // Should insert at SUBVIEW index 1, right?? - [parent insertSubview:c atIndex:1]; - - // You would think that this would be true, but instead it inserts it at the SUBLAYER index 1 -// XCTAssertEquals([parent.subviews indexOfObjectIdenticalTo:c], 1u, @"Should have index 1 after insert"); -// XCTAssertEqualObjects(orderStringFromSublayers(parent.layer), @"aa,ab,a,ba,bb,bc,bd,c,d,ea,eb,ec", @"Should be in order"); - - XCTAssertEqualObjects(orderStringFromSublayers(parent.layer), @"aa,c,ab,a,ba,bb,bc,bd,d,ea,eb,ec", @"Apple has fixed insertSubview:atIndex:. You must update insertSubnode: etc. APIS to accomidate this."); -} - -// This tests our resiliancy to having other views and layers inserted into our view or layer -- (void)testInsertSubviewAtIndexWithMeddlingView -{ - DeclareNodeNamed(parent); - DeclareNodeNamed(a); - DeclareNodeNamed(b); - DeclareNodeNamed(c); - DeclareViewNamed(d); - - [parent layer]; - - // (a,b) - [parent addSubnode:a]; - [parent addSubnode:b]; - XCTAssertEqualObjects(orderStringFromSublayers(parent.layer), @"a,b", @"Didn't match"); - - // (a,b) => (a,d,b) - [parent.view insertSubview:d aboveSubview:a.view]; - XCTAssertEqualObjects(orderStringFromSublayers(parent.layer), @"a,d,b", @"Didn't match"); - - // (a,d,b) => (a,d,>c<,b) - [parent insertSubnode:c belowSubnode:b]; - XCTAssertEqualObjects(orderStringFromSublayers(parent.layer), @"a,d,c,b", @"Didn't match"); - - XCTAssertEqual(4u, parent.subnodes.count, @"Should have the right subnode count"); - XCTAssertEqual(4u, parent.view.subviews.count, @"Should have the right subview count"); - XCTAssertEqual(4u, parent.layer.sublayers.count, @"Should have the right sublayer count"); - - //TODO: assert that things deallocate immediately and don't have latent autoreleases in here -} - - -- (void)testInsertSubnodeBelowWithView -{ - [self checkInsertSubnodeBelowWithView:YES layerBacked:NO]; -} - -- (void)testInsertSubnodeBelowWithNoView -{ - [self checkInsertSubnodeBelowWithView:NO layerBacked:NO]; -} - -- (void)testInsertSubnodeBelowWithNoLayer -{ - [self checkInsertSubnodeBelowWithView:NO layerBacked:YES]; -} - -- (void)testInsertSubnodeBelowWithLayer -{ - [self checkInsertSubnodeBelowWithView:YES layerBacked:YES]; -} - - -- (void)checkInsertSubnodeBelowWithView:(BOOL)loaded layerBacked:(BOOL)isLayerBacked -{ - DeclareNodeNamed(parent); - DeclareNodeNamed(a); - DeclareNodeNamed(b); - DeclareNodeNamed(c); - - for (ASDisplayNode *v in @[parent, a, b, c]) { - v.layerBacked = isLayerBacked; - } - - [parent addSubnode:b]; - - if (loaded) { - [parent layer]; - } - - // Shut the type mismatch up - ASDisplayNode *nilParent = nil; - - // (b) => (a, b) - [parent insertSubnode:a belowSubnode:b]; - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,b", @"Incorrect insertion below"); - XCTAssertNodesHaveParent(parent, a, b); - XCTAssertNodesHaveParent(nilParent, c); - - // (a,b) => (c,a,b) - [parent insertSubnode:c belowSubnode:a]; - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"c,a,b", @"Incorrect insertion below"); - XCTAssertNodesHaveParent(parent, a, b, c); - - // Check insertSubnode with no below - ASDisplayNode *nilNode = nil; - XCTAssertThrows([parent insertSubnode:b belowSubnode:nilNode], @"Can't insert below a nil"); - // Check nothing was inserted - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"c,a,b", @"Incorrect insertion below"); - - - XCTAssertThrows([parent insertSubnode:nilNode belowSubnode:nilNode], @"Can't insert a nil subnode"); - XCTAssertThrows([parent insertSubnode:nilNode belowSubnode:a], @"Can't insert a nil subnode"); - - // Check inserting below when you're already in the array - // (c,a,b) => (a,c,b) - [parent insertSubnode:c belowSubnode:b]; - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,c,b", @"Incorrect insertion below"); - XCTAssertNodesHaveParent(parent, a, c, b); - - // Check what happens when you try to insert a node below itself (should do nothing) - // (a,c,b) => (a,c,b) - [parent insertSubnode:c belowSubnode:c]; - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,c,b", @"Incorrect insertion below"); - XCTAssertNodesHaveParent(parent, a, c, b); - - //TODO: assert that things deallocate immediately and don't have latent autoreleases in here -} - -- (void)testInsertSubnodeAboveWithView -{ - [self checkInsertSubnodeAboveLoaded:YES layerBacked:NO]; -} - -- (void)testInsertSubnodeAboveWithNoView -{ - [self checkInsertSubnodeAboveLoaded:NO layerBacked:NO]; -} - -- (void)testInsertSubnodeAboveWithLayer -{ - [self checkInsertSubnodeAboveLoaded:YES layerBacked:YES]; -} - -- (void)testInsertSubnodeAboveWithNoLayer -{ - [self checkInsertSubnodeAboveLoaded:NO layerBacked:YES]; -} - - -- (void)checkInsertSubnodeAboveLoaded:(BOOL)loaded layerBacked:(BOOL)isLayerBacked -{ - DeclareNodeNamed(parent); - DeclareNodeNamed(a); - DeclareNodeNamed(b); - DeclareNodeNamed(c); - - for (ASDisplayNode *n in @[parent, a, b, c]) { - n.layerBacked = isLayerBacked; - } - - [parent addSubnode:a]; - - if (loaded) { - [parent layer]; - } - - // Shut the type mismatch up - ASDisplayNode *nilParent = nil; - - // (a) => (a,b) - [parent insertSubnode:b aboveSubnode:a]; - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,b", @"Insert subnode above"); - XCTAssertNodesHaveParent(parent, a,b); - XCTAssertNodesHaveParent(nilParent, c); - - // (a,b) => (a,c,b) - [parent insertSubnode:c aboveSubnode:a]; - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,c,b", @"After insert c above a"); - - // Check insertSubnode with invalid parameters throws and doesn't change anything - // (a,c,b) => (a,c,b) - ASDisplayNode *nilNode = nil; - XCTAssertThrows([parent insertSubnode:b aboveSubnode:nilNode], @"Can't insert below a nil"); - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,c,b", @"Check no monkey business"); - - XCTAssertThrows([parent insertSubnode:nilNode aboveSubnode:nilNode], @"Can't insert a nil subnode"); - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,c,b", @"Check no monkey business"); - - XCTAssertThrows([parent insertSubnode:nilNode aboveSubnode:a], @"Can't insert a nil subnode"); - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"a,c,b", @"Check no monkey business"); - - // Check inserting above when you're already in the array - // (a,c,b) => (c,b,a) - [parent insertSubnode:a aboveSubnode:b]; - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"c,b,a", @"Check inserting above when you're already in the array"); - XCTAssertNodesHaveParent(parent, a, c, b); - - // Check what happens when you try to insert a node above itself (should do nothing) - // (c,b,a) => (c,b,a) - [parent insertSubnode:a aboveSubnode:a]; - XCTAssertNodeSubnodeSubviewSublayerOrder(parent, loaded, isLayerBacked, @"c,b,a", @"Insert above self should not change anything"); - XCTAssertNodesHaveParent(parent, a, c, b); - - //TODO: assert that things deallocate immediately and don't have latent autoreleases in here -} - -- (void)testRemoveFromViewBackedLoadedSupernode -{ - DeclareNodeNamed(a); - DeclareNodeNamed(b); - [b addSubnode:a]; - [a view]; - [b view]; - XCTAssertNodesLoaded(a, b); - XCTAssertEqual(a.supernode, b); - XCTAssertEqual(a.view.superview, b.view); - - [a removeFromSupernode]; - XCTAssertNil(a.supernode); - XCTAssertNil(a.view.superview); -} - -- (void)testRemoveFromLayerBackedLoadedSupernode -{ - DeclareNodeNamed(a); - a.layerBacked = YES; - DeclareNodeNamed(b); - b.layerBacked = YES; - [b addSubnode:a]; - [a layer]; - [b layer]; - XCTAssertNodesLoaded(a, b); - XCTAssertEqual(a.supernode, b); - XCTAssertEqual(a.layer.superlayer, b.layer); - - [a removeFromSupernode]; - XCTAssertNil(a.supernode); - XCTAssertNil(a.layer.superlayer); -} - -- (void)testRemoveLayerBackedFromViewBackedLoadedSupernode -{ - DeclareNodeNamed(a); - a.layerBacked = YES; - DeclareNodeNamed(b); - [b addSubnode:a]; - [a layer]; - [b view]; - XCTAssertNodesLoaded(a, b); - XCTAssertEqual(a.supernode, b); - XCTAssertEqual(a.layer.superlayer, b.layer); - - [a removeFromSupernode]; - XCTAssertNil(a.supernode); - XCTAssertNil(a.layer.superlayer); -} - -- (void)testSubnodeAddedBeforeLoadingExternalView -{ - UIView *view = [[UIDisplayNodeTestView alloc] init]; - - __block ASDisplayNode *parent = nil; - __block ASDisplayNode *child = nil; - [self executeOffThread:^{ - parent = [[ASDisplayNode alloc] initWithViewBlock:^{ - return view; - }]; - child = [[ASDisplayNode alloc] init]; - [parent addSubnode:child]; - }]; - - XCTAssertEqual(1, parent.subnodes.count, @"Parent should have 1 subnode"); - XCTAssertEqualObjects(parent, child.supernode, @"Child has the wrong parent"); - XCTAssertEqual(0, view.subviews.count, @"View shouldn't have any subviews"); - - [parent view]; - - XCTAssertEqual(1, view.subviews.count, @"View should have 1 subview"); -} - -- (void)testSubnodeAddedAfterLoadingExternalView -{ - UIView *view = [[UIDisplayNodeTestView alloc] init]; - ASDisplayNode *parent = [[ASDisplayNode alloc] initWithViewBlock:^{ - return view; - }]; - - [parent view]; - - ASDisplayNode *child = [[ASDisplayNode alloc] init]; - [parent addSubnode:child]; - - XCTAssertEqual(1, parent.subnodes.count, @"Parent should have 1 subnode"); - XCTAssertEqualObjects(parent, child.supernode, @"Child has the wrong parent"); - XCTAssertEqual(1, view.subviews.count, @"View should have 1 subview"); -} - -- (void)checkBackgroundColorOpaqueRelationshipWithViewLoaded:(BOOL)loaded layerBacked:(BOOL)isLayerBacked -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.layerBacked = isLayerBacked; - - if (loaded) { - // Force load - [node layer]; - } - - XCTAssertTrue(node.opaque, @"Node should start opaque"); - XCTAssertTrue(node.layer.opaque, @"Node should start opaque"); - - node.backgroundColor = [UIColor clearColor]; - - // This could be debated, but at the moment we differ from UIView's behavior to change the other property in response - XCTAssertTrue(node.opaque, @"Set background color should not have made this not opaque"); - XCTAssertTrue(node.layer.opaque, @"Set background color should not have made this not opaque"); - - [node layer]; - - XCTAssertTrue(node.opaque, @"Set background color should not have made this not opaque"); - XCTAssertTrue(node.layer.opaque, @"Set background color should not have made this not opaque"); -} - -- (void)testBackgroundColorOpaqueRelationshipView -{ - [self checkBackgroundColorOpaqueRelationshipWithViewLoaded:YES layerBacked:NO]; -} - -- (void)testBackgroundColorOpaqueRelationshipLayer -{ - [self checkBackgroundColorOpaqueRelationshipWithViewLoaded:YES layerBacked:YES]; -} - -- (void)testBackgroundColorOpaqueRelationshipNoView -{ - [self checkBackgroundColorOpaqueRelationshipWithViewLoaded:NO layerBacked:NO]; -} - -- (void)testBackgroundColorOpaqueRelationshipNoLayer -{ - [self checkBackgroundColorOpaqueRelationshipWithViewLoaded:NO layerBacked:YES]; -} - -// Check that nodes who have no cell node (no range controller) -// do get their `preload` called, and they do report -// the preload interface state. -- (void)testInterfaceStateForNonCellNode -{ - ASTestWindow *window = [ASTestWindow new]; - ASTestDisplayNode *node = [ASTestDisplayNode new]; - XCTAssert(node.interfaceState == ASInterfaceStateNone); - XCTAssert(!node.hasPreloaded); - - [window addSubview:node.view]; - XCTAssert(node.hasPreloaded); - XCTAssert(node.interfaceState == ASInterfaceStateInHierarchy); - - [node.view removeFromSuperview]; - // We don't want to call -didExitPreloadState on nodes that aren't being managed by a range controller. - // Otherwise we get flashing behavior from normal UIKit manipulations like navigation controller push / pop. - // Still, the interfaceState should be None to reflect the current state of the node. - // We just don't proactively clear contents or fetched data for this state transition. - XCTAssert(node.hasPreloaded); - XCTAssert(node.interfaceState == ASInterfaceStateNone); -} - -// Check that nodes who have no cell node (no range controller) -// do get their `preload` called, and they do report -// the preload interface state. -- (void)testInterfaceStateForCellNode -{ - ASCellNode *cellNode = [ASCellNode new]; - ASTestDisplayNode *node = [ASTestDisplayNode new]; - XCTAssert(node.interfaceState == ASInterfaceStateNone); - XCTAssert(!node.hasPreloaded); - - // Simulate range handler updating cell node. - [cellNode addSubnode:node]; - [cellNode enterInterfaceState:ASInterfaceStatePreload]; - XCTAssert(node.hasPreloaded); - XCTAssert(node.interfaceState == ASInterfaceStatePreload); - - // If the node goes into a view it should not adopt the `InHierarchy` state. - ASTestWindow *window = [ASTestWindow new]; - [window addSubview:cellNode.view]; - XCTAssert(node.hasPreloaded); - XCTAssert(node.interfaceState == ASInterfaceStateInHierarchy); -} - -- (void)testSetNeedsPreloadImmediateState -{ - ASCellNode *cellNode = [ASCellNode new]; - ASTestDisplayNode *node = [ASTestDisplayNode new]; - [cellNode addSubnode:node]; - [cellNode enterInterfaceState:ASInterfaceStatePreload]; - node.hasPreloaded = NO; - [cellNode setNeedsPreload]; - XCTAssert(node.hasPreloaded); -} - -- (void)testPreloadExitingAndEnteringRange -{ - ASCellNode *cellNode = [ASCellNode new]; - ASTestDisplayNode *node = [ASTestDisplayNode new]; - [cellNode addSubnode:node]; - [cellNode setHierarchyState:ASHierarchyStateRangeManaged]; - - // Simulate enter range, preload, exit range - [cellNode enterInterfaceState:ASInterfaceStatePreload]; - [cellNode exitInterfaceState:ASInterfaceStatePreload]; - node.hasPreloaded = NO; - [cellNode enterInterfaceState:ASInterfaceStatePreload]; - - XCTAssert(node.hasPreloaded); -} - -- (void)testInitWithViewClass -{ - ASDisplayNode *scrollNode = [[ASDisplayNode alloc] initWithViewClass:[UIScrollView class]]; - - XCTAssertFalse(scrollNode.isLayerBacked, @"Can't be layer backed"); - XCTAssertFalse(scrollNode.nodeLoaded, @"Shouldn't have a view yet"); - - scrollNode.frame = CGRectMake(12, 52, 100, 53); - scrollNode.alpha = 0.5; - - XCTAssertTrue([scrollNode.view isKindOfClass:[UIScrollView class]], @"scrollview should load as expected"); - XCTAssertTrue(CGRectEqualToRect(CGRectMake(12, 52, 100, 53), scrollNode.frame), @"Should have set the frame on the scroll node"); - XCTAssertEqual(0.5f, scrollNode.alpha, @"Alpha not working"); -} - -- (void)testInitWithLayerClass -{ - ASDisplayNode *transformNode = [[ASDisplayNode alloc] initWithLayerClass:[CATransformLayer class]]; - - XCTAssertTrue(transformNode.isLayerBacked, @"Created with layer class => should be layer-backed by default"); - XCTAssertFalse(transformNode.nodeLoaded, @"Shouldn't have a view yet"); - - transformNode.frame = CGRectMake(12, 52, 100, 53); - transformNode.alpha = 0.5; - - XCTAssertTrue([transformNode.layer isKindOfClass:[CATransformLayer class]], @"scrollview should load as expected"); - XCTAssertTrue(CGRectEqualToRect(CGRectMake(12, 52, 100, 53), transformNode.frame), @"Should have set the frame on the scroll node"); - XCTAssertEqual(0.5f, transformNode.alpha, @"Alpha not working"); -} - -static bool stringContainsPointer(NSString *description, id p) { - return [description rangeOfString:[NSString stringWithFormat:@"%p", p]].location != NSNotFound; -} - -- (void)testDebugDescription -{ - // View node has subnodes. Make sure all of the nodes are included in the description - ASDisplayNode *parent = [[ASDisplayNode alloc] init]; - - ASDisplayNode *a = [[ASDisplayNode alloc] init]; - a.layerBacked = YES; - ASDisplayNode *b = [[ASDisplayNode alloc] init]; - b.layerBacked = YES; - b.frame = CGRectMake(0, 0, 100, 123); - ASDisplayNode *c = [[ASDisplayNode alloc] init]; - - for (ASDisplayNode *child in @[a, b, c]) { - [parent addSubnode:child]; - } - - NSString *nodeDescription = [parent displayNodeRecursiveDescription]; - - // Make sure [parent recursiveDescription] contains a, b, and c's pointer string - XCTAssertTrue(stringContainsPointer(nodeDescription, a), @"Layer backed node not present in [parent displayNodeRecursiveDescription]"); - XCTAssertTrue(stringContainsPointer(nodeDescription, b), @"Layer-backed node not present in [parent displayNodeRecursiveDescription]"); - XCTAssertTrue(stringContainsPointer(nodeDescription, c), @"View-backed node not present in [parent displayNodeRecursiveDescription]"); - - NSString *viewDescription = [parent.view valueForKey:@"recursiveDescription"]; - - // Make sure string contains a, b, and c's pointer string - XCTAssertTrue(stringContainsPointer(viewDescription, a), @"Layer backed node not present"); - XCTAssertTrue(stringContainsPointer(viewDescription, b), @"Layer-backed node not present"); - XCTAssertTrue(stringContainsPointer(viewDescription, c), @"View-backed node not present"); - - // Make sure layer names have display node in description - XCTAssertTrue(stringContainsPointer([a.layer debugDescription], a), @"Layer backed node not present"); - XCTAssertTrue(stringContainsPointer([b.layer debugDescription], b), @"Layer-backed node not present"); -} - -- (void)checkNameInDescriptionIsLayerBacked:(BOOL)isLayerBacked -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.layerBacked = isLayerBacked; - - XCTAssertFalse([node.description containsString:@"debugName"], @"Shouldn't reference 'debugName' in description"); - node.debugName = @"big troll eater name"; - - XCTAssertTrue([node.description containsString:node.debugName], @"debugName didn't end up in description"); - [node layer]; - XCTAssertTrue([node.description containsString:node.debugName], @"debugName didn't end up in description"); -} - -- (void)testNameInDescriptionLayer -{ - [self checkNameInDescriptionIsLayerBacked:YES]; -} - -- (void)testNameInDescriptionView -{ - [self checkNameInDescriptionIsLayerBacked:NO]; -} - -- (void)testBounds -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.bounds = CGRectMake(1, 2, 3, 4); - node.frame = CGRectMake(5, 6, 7, 8); - - XCTAssert(node.bounds.origin.x == 1, @"Wrong ASDisplayNode.bounds.origin.x"); - XCTAssert(node.bounds.origin.y == 2, @"Wrong ASDisplayNode.bounds.origin.y"); - XCTAssert(node.bounds.size.width == 7, @"Wrong ASDisplayNode.bounds.size.width"); - XCTAssert(node.bounds.size.height == 8, @"Wrong ASDisplayNode.bounds.size.height"); -} - -- (void)testDidEnterDisplayIsCalledWhenNodesEnterDisplayRange -{ - ASTestDisplayNode *node = [[ASTestDisplayNode alloc] init]; - - [node recursivelySetInterfaceState:ASInterfaceStateDisplay]; - - XCTAssert([node displayRangeStateChangedToYES]); -} - -- (void)testDidExitDisplayIsCalledWhenNodesExitDisplayRange -{ - ASTestDisplayNode *node = [[ASTestDisplayNode alloc] init]; - - [node recursivelySetInterfaceState:ASInterfaceStateDisplay]; - [node recursivelySetInterfaceState:ASInterfaceStatePreload]; - - XCTAssert([node displayRangeStateChangedToNO]); -} - -- (void)testDidEnterPreloadIsCalledWhenNodesEnterPreloadRange -{ - ASTestDisplayNode *node = [[ASTestDisplayNode alloc] init]; - - [node recursivelySetInterfaceState:ASInterfaceStatePreload]; - - XCTAssert([node preloadStateChangedToYES]); -} - -- (void)testDidExitPreloadIsCalledWhenNodesExitPreloadRange -{ - ASTestDisplayNode *node = [[ASTestDisplayNode alloc] init]; - [node setHierarchyState:ASHierarchyStateRangeManaged]; - - [node recursivelySetInterfaceState:ASInterfaceStatePreload]; - [node recursivelySetInterfaceState:ASInterfaceStateDisplay]; - - XCTAssert([node preloadStateChangedToNO]); -} - - -- (void)testThatNodeGetsRenderedIfItGoesFromZeroSizeToRealSizeButOnlyOnce -{ - NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"logo-square" - ofType:@"png" inDirectory:@"TestResources"]; - UIImage *image = [UIImage imageWithContentsOfFile:path]; - ASImageNode *node = [[ASImageNode alloc] init]; - node.image = image; - - // When rendered at zero-size, we get no contents - XCTAssert(CGSizeEqualToSize(node.bounds.size, CGSizeZero)); - [node recursivelyEnsureDisplaySynchronously:YES]; - XCTAssertNil(node.contents); - - // When size becomes positive, we got some new contents - node.bounds = CGRectMake(0, 0, 100, 100); - [node recursivelyEnsureDisplaySynchronously:YES]; - id contentsAfterRedisplay = node.contents; - XCTAssertNotNil(contentsAfterRedisplay); - - // When size changes again, we do not get new contents - node.bounds = CGRectMake(0, 0, 1000, 1000); - [node recursivelyEnsureDisplaySynchronously:YES]; - XCTAssertEqual(contentsAfterRedisplay, node.contents); -} - -// Underlying issue for: https://github.com/facebook/AsyncDisplayKit/issues/2205 -- (void)testThatRasterizedNodesGetInterfaceStateUpdatesWhenContainerEntersHierarchy -{ - ASDisplayNode *supernode = [[ASTestDisplayNode alloc] init]; - [supernode enableSubtreeRasterization]; - ASDisplayNode *subnode = [[ASTestDisplayNode alloc] init]; - ASSetDebugNames(supernode, subnode); - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - [supernode addSubnode:subnode]; - [window addSubnode:supernode]; - [window makeKeyAndVisible]; - XCTAssertTrue(ASHierarchyStateIncludesRasterized(subnode.hierarchyState)); - XCTAssertTrue(subnode.isVisible); - [supernode.view removeFromSuperview]; - XCTAssertTrue(ASHierarchyStateIncludesRasterized(subnode.hierarchyState)); - XCTAssertFalse(subnode.isVisible); -} - -// Underlying issue for: https://github.com/facebook/AsyncDisplayKit/issues/2205 -- (void)testThatRasterizedNodesGetInterfaceStateUpdatesWhenAddedToContainerThatIsInHierarchy -{ - ASDisplayNode *supernode = [[ASTestDisplayNode alloc] init]; - [supernode enableSubtreeRasterization]; - ASDisplayNode *subnode = [[ASTestDisplayNode alloc] init]; - ASSetDebugNames(supernode, subnode); - - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - [window addSubnode:supernode]; - [window makeKeyAndVisible]; - [supernode addSubnode:subnode]; - XCTAssertTrue(ASHierarchyStateIncludesRasterized(subnode.hierarchyState)); - XCTAssertTrue(subnode.isVisible); - [subnode removeFromSupernode]; - XCTAssertFalse(ASHierarchyStateIncludesRasterized(subnode.hierarchyState)); - XCTAssertFalse(subnode.isVisible); -} - -- (void)testThatRasterizingWrapperNodesIsNotAllowed -{ - ASDisplayNode *rasterizedSupernode = [[ASDisplayNode alloc] init]; - [rasterizedSupernode enableSubtreeRasterization]; - ASDisplayNode *subnode = [[ASDisplayNode alloc] initWithViewBlock:^UIView * _Nonnull{ - return [[UIView alloc] init]; - }]; - ASSetDebugNames(rasterizedSupernode, subnode); - XCTAssertThrows([rasterizedSupernode addSubnode:subnode]); -} - -- (void)testThatSubnodesGetDisplayUpdatesIfRasterized -{ - ASTestDisplayNode *supernode = [[ASTestDisplayNode alloc] init]; - supernode.frame = CGRectMake(0.0, 0.0, 100.0, 100.0); - [supernode enableSubtreeRasterization]; - - ASTestDisplayNode *subnode = [[ASTestDisplayNode alloc] init]; - ASTestDisplayNode *subSubnode = [[ASTestDisplayNode alloc] init]; - - ASSetDebugNames(supernode, subnode); - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - [subnode addSubnode:subSubnode]; - [supernode addSubnode:subnode]; - [window addSubnode:supernode]; - [window makeKeyAndVisible]; - - XCTAssertTrue(ASDisplayNodeRunRunLoopUntilBlockIsTrue(^BOOL{ - return (subnode.didDisplayCount == 1); - })); - - XCTAssertTrue(ASDisplayNodeRunRunLoopUntilBlockIsTrue(^BOOL{ - return (subSubnode.didDisplayCount == 1); - })); - - XCTAssertTrue(ASDisplayNodeRunRunLoopUntilBlockIsTrue(^BOOL{ - return (subnode.displayWillStartCount == 1); - })); - - XCTAssertTrue(ASDisplayNodeRunRunLoopUntilBlockIsTrue(^BOOL{ - return (subSubnode.displayWillStartCount == 1); - })); -} - -// Underlying issue for: https://github.com/facebook/AsyncDisplayKit/issues/2011 -- (void)testThatLayerBackedSubnodesAreMarkedInvisibleBeforeDeallocWhenSupernodesViewIsRemovedFromHierarchyWhileBeingRetained -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - - NS_VALID_UNTIL_END_OF_SCOPE UIView *nodeView = nil; - { - NS_VALID_UNTIL_END_OF_SCOPE ASDisplayNode *node = [[ASDisplayNode alloc] init]; - nodeView = node.view; - node.debugName = @"Node"; - - NS_VALID_UNTIL_END_OF_SCOPE ASDisplayNode *subnode = [[ASDisplayNode alloc] init]; - subnode.layerBacked = YES; - [node addSubnode:subnode]; - subnode.debugName = @"Subnode"; - - [window addSubview:nodeView]; - } - - // nodeView must continue to be retained across this call, but the nodes must not. - XCTAssertNoThrow([nodeView removeFromSuperview]); -} - -// Running on main thread -// Cause retain count of node to fall to zero synchronously on a background thread (pausing main thread) -// ASDealloc2MainObject queues actual call to -dealloc to occur on the main thread -// Continue execution on main, before the dealloc can run, to dealloc the host view -// Node is in an invalid state (about to dealloc, not valid to retain) but accesses to sublayer delegates -// causes attempted retain — unless weak variable works correctly -- (void)testThatLayerDelegateDoesntDangleAndCauseCrash -{ - NS_VALID_UNTIL_END_OF_SCOPE UIView *host = [[UIView alloc] init]; - - __block NS_VALID_UNTIL_END_OF_SCOPE ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.layerBacked = YES; - - [host addSubnode:node]; - [self executeOffThread:^{ - node = nil; - }]; - host = nil; // <- Would crash here, when UIView accesses its sublayers' delegates in -dealloc. -} - -- (void)testThatSubnodeGetsInterfaceStateSetIfRasterized -{ - ASTestDisplayNode *node = [[ASTestDisplayNode alloc] init]; - node.debugName = @"Node"; - [node enableSubtreeRasterization]; - - ASTestDisplayNode *subnode = [[ASTestDisplayNode alloc] init]; - subnode.debugName = @"Subnode"; - [node addSubnode:subnode]; - - [node view]; // Node needs to be loaded - - [node enterInterfaceState:ASInterfaceStatePreload]; - - XCTAssertTrue((node.interfaceState & ASInterfaceStatePreload) == ASInterfaceStatePreload); - XCTAssertTrue((subnode.interfaceState & ASInterfaceStatePreload) == ASInterfaceStatePreload); - XCTAssertTrue(node.hasPreloaded); - XCTAssertTrue(subnode.hasPreloaded); -} - -// FIXME -// Supernode is measured, subnode isnt, transition starts, UIKit does a layout pass before measurement finishes -- (void)testThatItsSafeToAutomeasureANodeMidTransition -{ - ASDisplayNode *supernode = [[ASDisplayNode alloc] init]; - [supernode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeMake(100, 100))]; - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.bounds = CGRectMake(0, 0, 50, 50); - [supernode addSubnode:node]; - - XCTAssertNil(node.calculatedLayout); - XCTAssertTrue(node.layer.needsLayout); - - [supernode transitionLayoutWithAnimation:NO shouldMeasureAsync:YES measurementCompletion:nil]; - - XCTAssertNoThrow([node.view layoutIfNeeded]); -} - -- (void)testThatOnDidLoadThrowsIfCalledOnLoadedOffMain -{ - ASTestDisplayNode *node = [[ASTestDisplayNode alloc] init]; - [node view]; - [self executeOffThread:^{ - XCTAssertThrows([node onDidLoad:^(ASDisplayNode * _Nonnull node) { }]); - }]; -} - -- (void)testThatOnDidLoadWorks -{ - ASTestDisplayNode *node = [[ASTestDisplayNode alloc] init]; - NSMutableArray *calls = [NSMutableArray array]; - [node onDidLoad:^(ASTestDisplayNode * _Nonnull node) { - [calls addObject:@0]; - }]; - [node onDidLoad:^(ASTestDisplayNode * _Nonnull node) { - [calls addObject:@1]; - }]; - [node onDidLoad:^(ASTestDisplayNode * _Nonnull node) { - [calls addObject:@2]; - }]; - [node view]; - NSArray *expected = @[ @0, @1, @2 ]; - XCTAssertEqualObjects(calls, expected); -} - -- (void)testSettingPropertiesViaStyllableProtocol -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - id returnedNode = - [node styledWithBlock:^(ASLayoutElementStyle * _Nonnull style) { - style.width = ASDimensionMake(100); - style.flexGrow = 1.0; - style.flexShrink = 1.0; - }]; - - XCTAssertEqualObjects(node, returnedNode); - ASXCTAssertEqualDimensions(node.style.width, ASDimensionMake(100)); - XCTAssertEqual(node.style.flexGrow, 1.0, @"flexGrow should have have the value 1.0"); - XCTAssertEqual(node.style.flexShrink, 1.0, @"flexShrink should have have the value 1.0"); -} - -- (void)testSubnodesFastEnumeration -{ - DeclareNodeNamed(parentNode); - DeclareNodeNamed(a); - DeclareNodeNamed(b); - DeclareNodeNamed(c); - DeclareViewNamed(d); - - NSArray *subnodes = @[a, b, c, d]; - for (ASDisplayNode *node in subnodes) { - [parentNode addSubnode:node]; - } - - NSInteger i = 0; - for (ASDisplayNode *subnode in parentNode.subnodes) { - XCTAssertEqualObjects(subnode, subnodes[i]); - i++; - } -} - -- (void)testThatHavingTheSameNodeTwiceInALayoutSpecCausesExceptionOnLayoutCalculation -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - ASDisplayNode *subnode = [[ASDisplayNode alloc] init]; - node.layoutSpecBlock = ^ASLayoutSpec *(ASDisplayNode *node, ASSizeRange constrainedSize) { - return [ASOverlayLayoutSpec overlayLayoutSpecWithChild:[ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsZero child:subnode] overlay:subnode]; - }; - XCTAssertThrowsSpecificNamed([node calculateLayoutThatFits:ASSizeRangeMake(CGSizeMake(100, 100))], NSException, NSInternalInconsistencyException); -} - -- (void)testThatStackSpecOrdersSubnodesCorrectlyRandomness -{ - // This test ensures that the z-order of nodes matches the stack spec, including after several random relayouts / transitions. - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.automaticallyManagesSubnodes = YES; - - DeclareNodeNamed(a); - DeclareNodeNamed(b); - DeclareNodeNamed(c); - DeclareNodeNamed(d); - DeclareNodeNamed(e); - DeclareNodeNamed(f); - DeclareNodeNamed(g); - DeclareNodeNamed(h); - DeclareNodeNamed(i); - DeclareNodeNamed(j); - - NSMutableArray *allNodes = [@[a, b, c, d, e, f, g, h, i, j] mutableCopy]; - NSArray *testPrevious = @[]; - NSArray __block *testPending = @[]; - - int len1 = 1 + arc4random_uniform(9); - for (NSUInteger n = 0; n < len1; n++) { // shuffle and add - [allNodes exchangeObjectAtIndex:n withObjectAtIndex:n + arc4random_uniform(10 - (uint32_t) n)]; - testPrevious = [testPrevious arrayByAddingObject:allNodes[n]]; - } - - __block NSUInteger testCount = 0; - node.layoutSpecBlock = ^(ASDisplayNode *node, ASSizeRange size) { - ASStackLayoutSpec *stack = [ASStackLayoutSpec verticalStackLayoutSpec]; - - if (testCount++ == 0) { - stack.children = testPrevious; - } - else { - testPending = @[]; - int len2 = 1 + arc4random_uniform(9); - for (NSUInteger n = 0; n < len2; n++) { // shuffle and add - [allNodes exchangeObjectAtIndex:n withObjectAtIndex:n + arc4random_uniform(10 - (uint32_t) n)]; - testPending = [testPending arrayByAddingObject:allNodes[n]]; - } - stack.children = testPending; - } - - return stack; - }; - - ASDisplayNodeSizeToFitSize(node, CGSizeMake(100, 100)); - [node.view layoutIfNeeded]; - - // Because automaticallyManagesSubnodes is used, the subnodes array is constructed from the layout spec's children. - NSString *expected = [[testPrevious valueForKey:@"debugName"] componentsJoinedByString:@","]; - XCTAssert([node.subnodes isEqualToArray:testPrevious], @"subnodes: %@, array: %@", node.subnodes, testPrevious); - XCTAssertNodeSubnodeSubviewSublayerOrder(node, YES /* isLoaded */, NO /* isLayerBacked */, - expected, @"Initial order"); - - for (NSUInteger n = 0; n < 25; n++) { - [node invalidateCalculatedLayout]; - [node.view setNeedsLayout]; - [node.view layoutIfNeeded]; - - - XCTAssert([node.subnodes isEqualToArray:testPending], @"subnodes: %@, array: %@", node.subnodes, testPending); - expected = [[testPending valueForKey:@"debugName"] componentsJoinedByString:@","]; - - XCTAssertEqualObjects(orderStringFromSubnodes(node), expected, @"Incorrect node order for Random order #%ld", (unsigned long) n); - XCTAssertEqualObjects(orderStringFromSubviews(node.view), expected, @"Incorrect subviews for Random order #%ld", (unsigned long) n); - XCTAssertEqualObjects(orderStringFromSublayers(node.layer), expected, @"Incorrect sublayers for Random order #%ld", (unsigned long) n); - } -} - -- (void)testThatStackSpecOrdersSubnodesCorrectly -{ - // This test ensures that the z-order of nodes matches the stack spec, including after relayout / transition. - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.automaticallyManagesSubnodes = YES; - - DeclareNodeNamed(a); - DeclareNodeNamed(b); - DeclareNodeNamed(c); - DeclareNodeNamed(d); - DeclareNodeNamed(e); - - NSArray *nodesForwardOrder = @[a, b, c, d]; - NSArray *nodesReverseOrder = @[d, c, b, a]; - NSArray *addAndMoveOrder = @[a, b, e, d, c]; - __block BOOL flipItemOrder = NO; - - __block NSUInteger testCount = 0; - node.layoutSpecBlock = ^(ASDisplayNode *node, ASSizeRange size) { - ASStackLayoutSpec *stack = [ASStackLayoutSpec verticalStackLayoutSpec]; - switch(testCount) { - case 0: - stack.children = nodesForwardOrder; break; - case 1: - stack.children = nodesReverseOrder; break; - case 2: - default: - stack.children = addAndMoveOrder; break; - } - testCount++; - return stack; - }; - - ASDisplayNodeSizeToFitSize(node, CGSizeMake(100, 100)); - [node.view layoutIfNeeded]; - - // Because automaticallyManagesSubnodes is used, the subnodes array is constructed from the layout spec's children. - XCTAssert([node.subnodes isEqualToArray:nodesForwardOrder], @"subnodes: %@, array: %@", node.subnodes, nodesForwardOrder); - XCTAssertNodeSubnodeSubviewSublayerOrder(node, YES /* isLoaded */, NO /* isLayerBacked */, - @"a,b,c,d", @"Forward order"); - - flipItemOrder = YES; - [node invalidateCalculatedLayout]; - [node.view setNeedsLayout]; - [node.view layoutIfNeeded]; - - // In this case, it's critical that the items are in the new order so that event handling and apparent z-position are correct. - // FIXME: The reversal case is not currently passing. - XCTAssert([node.subnodes isEqualToArray:nodesReverseOrder], @"subnodes: %@, array: %@", node.subnodes, nodesReverseOrder); - XCTAssertNodeSubnodeSubviewSublayerOrder(node, YES /* isLoaded */, NO /* isLayerBacked */, - @"d,c,b,a", @"Reverse order"); - - [node invalidateCalculatedLayout]; - [node.view setNeedsLayout]; - [node.view layoutIfNeeded]; - XCTAssert([node.subnodes isEqualToArray:addAndMoveOrder], @"subnodes: %@, array: %@", node.subnodes, addAndMoveOrder); - XCTAssertNodeSubnodeSubviewSublayerOrder(node, YES /* isLoaded */, NO /* isLayerBacked */, - @"a,b,e,d,c", @"AddAndMove order"); - -} - -- (void)testThatOverlaySpecOrdersSubnodesCorrectly -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.automaticallyManagesSubnodes = YES; - ASDisplayNode *underlay = [[ASDisplayNode alloc] init]; - underlay.debugName = @"underlay"; - ASDisplayNode *overlay = [[ASDisplayNode alloc] init]; - overlay.debugName = @"overlay"; - node.layoutSpecBlock = ^(ASDisplayNode *node, ASSizeRange size) { - // The inset spec here is crucial. If the nodes themselves are children, it passed before the fix. - return [ASOverlayLayoutSpec overlayLayoutSpecWithChild:[ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsZero child:underlay] overlay:overlay]; - }; - - ASDisplayNodeSizeToFitSize(node, CGSizeMake(100, 100)); - [node.view layoutIfNeeded]; - - NSInteger underlayIndex = [node.subnodes indexOfObjectIdenticalTo:underlay]; - NSInteger overlayIndex = [node.subnodes indexOfObjectIdenticalTo:overlay]; - XCTAssertLessThan(underlayIndex, overlayIndex); -} - -- (void)testThatBackgroundLayoutSpecOrdersSubnodesCorrectly -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.automaticallyManagesSubnodes = YES; - ASDisplayNode *underlay = [[ASDisplayNode alloc] init]; - underlay.debugName = @"underlay"; - ASDisplayNode *overlay = [[ASDisplayNode alloc] init]; - overlay.debugName = @"overlay"; - node.layoutSpecBlock = ^(ASDisplayNode *node, ASSizeRange size) { - // The inset spec here is crucial. If the nodes themselves are children, it passed before the fix. - return [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild:overlay background:[ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsZero child:underlay]]; - }; - - ASDisplayNodeSizeToFitSize(node, CGSizeMake(100, 100)); - [node.view layoutIfNeeded]; - - NSInteger underlayIndex = [node.subnodes indexOfObjectIdenticalTo:underlay]; - NSInteger overlayIndex = [node.subnodes indexOfObjectIdenticalTo:overlay]; - XCTAssertLessThan(underlayIndex, overlayIndex); -} - -- (void)testThatConvertPointGoesToWindowWhenPassedNil -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.frame = CGRectMake(10, 10, 10, 10); - [window addSubnode:node]; - CGPoint expectedOrigin = CGPointMake(10, 10); - ASXCTAssertEqualPoints([node convertPoint:node.bounds.origin toNode:nil], expectedOrigin); -} - -- (void)testThatConvertPointGoesToWindowWhenPassedNil_layerBacked -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.layerBacked = YES; - node.frame = CGRectMake(10, 10, 10, 10); - [window addSubnode:node]; - CGPoint expectedOrigin = CGPointMake(10, 10); - ASXCTAssertEqualPoints([node convertPoint:node.bounds.origin toNode:nil], expectedOrigin); -} - -- (void)testThatItIsAllowedToRetrieveDebugDescriptionIncludingVCOffMainThread -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - UIViewController *vc = [[UIViewController alloc] init]; - [vc.view addSubnode:node]; - dispatch_group_t g = dispatch_group_create(); - __block NSString *debugDescription; - dispatch_group_async(g, dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{ - debugDescription = [node debugDescription]; - }); - dispatch_group_wait(g, DISPATCH_TIME_FOREVER); - // Ensure the debug description contains the VC string. - // Have to split into two lines because XCTAssert macro can't handle the stringWithFormat:. - BOOL hasVC = [debugDescription containsString:[NSString stringWithFormat:@"%p", vc]]; - XCTAssert(hasVC); -} - -- (void)testThatSubnodeSafeAreaInsetsAreCalculatedCorrectly -{ - ASDisplayNode *rootNode = [[ASDisplayNode alloc] init]; - ASDisplayNode *subnode = [[ASDisplayNode alloc] init]; - - rootNode.automaticallyManagesSubnodes = YES; - rootNode.layoutSpecBlock = ^ASLayoutSpec * _Nonnull(__kindof ASDisplayNode * _Nonnull node, ASSizeRange constrainedSize) { - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(1, 2, 3, 4) child:subnode]; - }; - - ASTestViewController *viewController = [[ASTestViewController alloc] initWithNode:rootNode]; - viewController.additionalSafeAreaInsets = UIEdgeInsetsMake(10, 10, 10, 10); - - // It looks like iOS 11 suppresses safeAreaInsets calculation for the views that are not on screen. - UIWindow *window = [[UIWindow alloc] init]; - window.rootViewController = viewController; - [window setHidden:NO]; - [window layoutIfNeeded]; - - UIEdgeInsets expectedRootNodeSafeArea = UIEdgeInsetsMake(10, 10, 10, 10); - UIEdgeInsets expectedSubnodeSafeArea = UIEdgeInsetsMake(9, 8, 7, 6); - - UIEdgeInsets windowSafeArea = UIEdgeInsetsZero; - if (AS_AVAILABLE_IOS(11.0)) { - windowSafeArea = window.safeAreaInsets; - } - - expectedRootNodeSafeArea = ASConcatInsets(expectedRootNodeSafeArea, windowSafeArea); - expectedSubnodeSafeArea = ASConcatInsets(expectedSubnodeSafeArea, windowSafeArea); - - XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(expectedRootNodeSafeArea, rootNode.safeAreaInsets), - @"expected rootNode.safeAreaInsets to be %@ but got %@ (window.safeAreaInsets %@)", - NSStringFromUIEdgeInsets(expectedRootNodeSafeArea), - NSStringFromUIEdgeInsets(rootNode.safeAreaInsets), - NSStringFromUIEdgeInsets(windowSafeArea)); - XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(expectedSubnodeSafeArea, subnode.safeAreaInsets), - @"expected subnode.safeAreaInsets to be %@ but got %@ (window.safeAreaInsets %@)", - NSStringFromUIEdgeInsets(expectedSubnodeSafeArea), - NSStringFromUIEdgeInsets(subnode.safeAreaInsets), - NSStringFromUIEdgeInsets(windowSafeArea)); - - [window setHidden:YES]; -} - -- (void)testScreenScale -{ - XCTAssertEqual(ASScreenScale(), UIScreen.mainScreen.scale); -} - -- (void)testThatIfViewClassIsOverwrittenItsSynchronous -{ - ASSynchronousTestDisplayNodeViaViewClass *node = [[ASSynchronousTestDisplayNodeViaViewClass alloc] init]; - XCTAssertTrue([node isSynchronous], @"Node should be synchronous if viewClass is ovewritten and not a subclass of _ASDisplayView"); -} - -- (void)testThatIfLayerClassIsOverwrittenItsSynchronous -{ - ASSynchronousTestDisplayNodeViaLayerClass *node = [[ASSynchronousTestDisplayNodeViaLayerClass alloc] init]; - XCTAssertTrue([node isSynchronous], @"Node should be synchronous if viewClass is ovewritten and not a subclass of _ASDisplayView"); -} - -- (void)testCornerRoundingTypeClippingRoundedCornersIsUsingASDisplayNodeCornerLayerDelegate -{ - ASTestDisplayNode *node = [[ASTestDisplayNode alloc] init]; - node.cornerRoundingType = ASCornerRoundingTypeClipping; - node.cornerRadius = 10.0; - auto l = node.clipCornerLayers; - for (int i = 0; i < NUM_CLIP_CORNER_LAYERS; i++) { - CALayer *cornerLayer = (*l)[i]; - XCTAssertTrue([cornerLayer.delegate isKindOfClass:[ASDisplayNodeCornerLayerDelegate class]], @""); - } -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeTestsHelper.h b/submodules/AsyncDisplayKit/Tests/ASDisplayNodeTestsHelper.h deleted file mode 100644 index 4e884f4428..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeTestsHelper.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// ASDisplayNodeTestsHelper.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@class ASCATransactionQueue, ASDisplayNode; - -typedef BOOL (^as_condition_block_t)(void); - -AS_EXTERN BOOL ASDisplayNodeRunRunLoopUntilBlockIsTrue(as_condition_block_t block); - -AS_EXTERN void ASDisplayNodeSizeToFitSize(ASDisplayNode *node, CGSize size); -AS_EXTERN void ASDisplayNodeSizeToFitSizeRange(ASDisplayNode *node, ASSizeRange sizeRange); -AS_EXTERN void ASCATransactionQueueWait(ASCATransactionQueue *q); // nil means shared queue diff --git a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeTestsHelper.mm b/submodules/AsyncDisplayKit/Tests/ASDisplayNodeTestsHelper.mm deleted file mode 100644 index ae20549117..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASDisplayNodeTestsHelper.mm +++ /dev/null @@ -1,69 +0,0 @@ -// -// ASDisplayNodeTestsHelper.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASDisplayNodeTestsHelper.h" -#import -#import -#import - -#import - -#import - -// Poll the condition 1000 times a second. -static CFTimeInterval kSingleRunLoopTimeout = 0.001; - -// Time out after 30 seconds. -static CFTimeInterval kTimeoutInterval = 30.0f; - -BOOL ASDisplayNodeRunRunLoopUntilBlockIsTrue(as_condition_block_t block) -{ - CFTimeInterval timeoutDate = CACurrentMediaTime() + kTimeoutInterval; - BOOL passed = NO; - while (true) { - OSMemoryBarrier(); - passed = block(); - OSMemoryBarrier(); - if (passed) { - break; - } - CFTimeInterval now = CACurrentMediaTime(); - if (now > timeoutDate) { - break; - } - // Run until the poll timeout or until timeoutDate, whichever is first. - CFTimeInterval runLoopTimeout = MIN(kSingleRunLoopTimeout, timeoutDate - now); - CFRunLoopRunInMode(kCFRunLoopDefaultMode, runLoopTimeout, true); - } - return passed; -} - -void ASDisplayNodeSizeToFitSize(ASDisplayNode *node, CGSize size) -{ - CGSize sizeThatFits = [node layoutThatFits:ASSizeRangeMake(size)].size; - node.bounds = (CGRect){.origin = CGPointZero, .size = sizeThatFits}; -} - -void ASDisplayNodeSizeToFitSizeRange(ASDisplayNode *node, ASSizeRange sizeRange) -{ - CGSize sizeThatFits = [node layoutThatFits:sizeRange].size; - node.bounds = (CGRect){.origin = CGPointZero, .size = sizeThatFits}; -} - -void ASCATransactionQueueWait(ASCATransactionQueue *q) -{ - if (!q) { q = ASCATransactionQueueGet(); } - NSDate *date = [NSDate dateWithTimeIntervalSinceNow:1]; - BOOL whileResult = YES; - while ([date timeIntervalSinceNow] > 0 && - (whileResult = ![q isEmpty])) { - [[NSRunLoop currentRunLoop] runUntilDate: - [NSDate dateWithTimeIntervalSinceNow:0.01]]; - } -} diff --git a/submodules/AsyncDisplayKit/Tests/ASDisplayViewAccessibilityTests.mm b/submodules/AsyncDisplayKit/Tests/ASDisplayViewAccessibilityTests.mm deleted file mode 100644 index bbc28cf0b3..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASDisplayViewAccessibilityTests.mm +++ /dev/null @@ -1,303 +0,0 @@ -// -// ASDisplayViewAccessibilityTests.mm -// Texture -// -// Copyright (c) 2018-present, Pinterest, Inc. All rights reserved. -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import -#import -#import -#import -#import -#import - -@interface ASDisplayViewAccessibilityTests : XCTestCase -@end - -@implementation ASDisplayViewAccessibilityTests - -- (void)setUp -{ - ASConfiguration *config = [[ASConfiguration alloc] initWithDictionary:nil]; - config.experimentalFeatures = ASExperimentalDisableAccessibilityCache; - [ASConfigurationManager test_resetWithConfiguration:config]; -} - -- (void)testAccessibilityElementsAccessors -{ - // Setup nodes with accessibility info - ASDisplayNode *node = nil; - ASDisplayNode *subnode = nil; - node = [[ASDisplayNode alloc] init]; - subnode = [[ASDisplayNode alloc] init]; - NSString *label = @"foo"; - subnode.isAccessibilityElement = YES; - subnode.accessibilityLabel = label; - [node addSubnode:subnode]; - XCTAssertEqualObjects([node.view.accessibilityElements.firstObject accessibilityLabel], label); - // NOTE: The following tests will fail unless accessibility is enabled, e.g. by turning the - // accessibility inspector on. See https://github.com/TextureGroup/Texture/pull/1069 for details. - /*XCTAssertEqualObjects([[node.view accessibilityElementAtIndex:0] accessibilityLabel], label); - XCTAssertEqual(node.view.accessibilityElementCount, 1); - XCTAssertEqual([node.view indexOfAccessibilityElement:node.view.accessibilityElements.firstObject], 0);*/ -} - -- (void)testThatSubnodeAccessibilityLabelAggregationWorks -{ - // Setup nodes - ASDisplayNode *node = nil; - ASDisplayNode *innerNode1 = nil; - ASDisplayNode *innerNode2 = nil; - node = [[ASDisplayNode alloc] init]; - innerNode1 = [[ASDisplayNode alloc] init]; - innerNode2 = [[ASDisplayNode alloc] init]; - - // Initialize nodes with relevant accessibility data - node.isAccessibilityContainer = YES; - innerNode1.accessibilityLabel = @"hello"; - innerNode2.accessibilityLabel = @"world"; - - // Attach the subnodes to the parent node, then ensure their accessibility labels have been' - // aggregated to the parent's accessibility label - [node addSubnode:innerNode1]; - [node addSubnode:innerNode2]; - XCTAssertEqualObjects([node.view.accessibilityElements.firstObject accessibilityLabel], - @"hello, world", @"Subnode accessibility label aggregation broken %@", - [node.view.accessibilityElements.firstObject accessibilityLabel]); -} - -- (void)testThatContainerAccessibilityLabelOverrideStopsAggregation -{ - // Setup nodes - ASDisplayNode *node = nil; - ASDisplayNode *innerNode = nil; - node = [[ASDisplayNode alloc] init]; - innerNode = [[ASDisplayNode alloc] init]; - - // Initialize nodes with relevant accessibility data - node.isAccessibilityContainer = YES; - node.accessibilityLabel = @"hello"; - innerNode.accessibilityLabel = @"world"; - - // Attach the subnode to the parent node, then ensure the parent's accessibility label does not - // get aggregated with the subnode's label - [node addSubnode:innerNode]; - XCTAssertEqualObjects([node.view.accessibilityElements.firstObject accessibilityLabel], @"hello", - @"Container accessibility label override broken %@", - [node.view.accessibilityElements.firstObject accessibilityLabel]); -} - -- (void)testAccessibilityLayerbackedNodesOperationInContainer { - ASDisplayNode *contianer = [[ASDisplayNode alloc] init]; - contianer.frame = CGRectMake(50, 50, 200, 400); - contianer.backgroundColor = [UIColor grayColor]; - contianer.isAccessibilityContainer = YES; - // Do any additional setup after loading the view, typically from a nib. - ASTextNode *text1 = [[ASTextNode alloc] init]; - text1.layerBacked = YES; - text1.attributedText = [[NSAttributedString alloc] initWithString:@"hello"]; - text1.frame = CGRectMake(50, 100, 200, 200); - [contianer addSubnode:text1]; - [contianer layoutIfNeeded]; - [contianer.layer displayIfNeeded]; - NSArray *elements = contianer.view.accessibilityElements; - XCTAssertTrue(elements.count == 1); - XCTAssertTrue([[elements.firstObject accessibilityLabel] isEqualToString:@"hello"]); - ASTextNode *text2 = [[ASTextNode alloc] init]; - text2.layerBacked = YES; - text2.attributedText = [[NSAttributedString alloc] initWithString:@"world"]; - text2.frame = CGRectMake(50, 300, 200, 200); - [contianer addSubnode:text2]; - [contianer layoutIfNeeded]; - [contianer.layer displayIfNeeded]; - NSArray *updatedElements = contianer.view.accessibilityElements; - XCTAssertTrue(updatedElements.count == 1); - XCTAssertTrue([[updatedElements.firstObject accessibilityLabel] isEqualToString:@"hello, world"]); - ASTextNode *text3 = [[ASTextNode alloc] init]; - text3.attributedText = [[NSAttributedString alloc] initWithString:@"!!!!"]; - text3.frame = CGRectMake(50, 400, 200, 100); - text3.layerBacked = YES; - [text2 addSubnode:text3]; - [contianer layoutIfNeeded]; - [contianer.layer displayIfNeeded]; - NSArray *updatedElements2 = contianer.view.accessibilityElements; - XCTAssertTrue([[updatedElements2.firstObject accessibilityLabel] isEqualToString:@"hello, world, !!!!"]); -} - -- (void)testAccessibilityNonLayerbackedNodesOperationInContainer -{ - ASDisplayNode *contianer = [[ASDisplayNode alloc] init]; - contianer.frame = CGRectMake(50, 50, 200, 600); - contianer.backgroundColor = [UIColor grayColor]; - contianer.isAccessibilityContainer = YES; - // Do any additional setup after loading the view, typically from a nib. - ASTextNode *text1 = [[ASTextNode alloc] init]; - text1.attributedText = [[NSAttributedString alloc] initWithString:@"hello"]; - text1.frame = CGRectMake(50, 100, 200, 200); - [contianer addSubnode:text1]; - [contianer layoutIfNeeded]; - [contianer.layer displayIfNeeded]; - NSArray *elements = contianer.view.accessibilityElements; - XCTAssertTrue(elements.count == 1); - XCTAssertTrue([[elements.firstObject accessibilityLabel] isEqualToString:@"hello"]); - ASTextNode *text2 = [[ASTextNode alloc] init]; - text2.attributedText = [[NSAttributedString alloc] initWithString:@"world"]; - text2.frame = CGRectMake(50, 300, 200, 200); - [contianer addSubnode:text2]; - [contianer layoutIfNeeded]; - [contianer.layer displayIfNeeded]; - NSArray *updatedElements = contianer.view.accessibilityElements; - XCTAssertTrue(updatedElements.count == 1); - XCTAssertTrue([[updatedElements.firstObject accessibilityLabel] isEqualToString:@"hello, world"]); - ASTextNode *text3 = [[ASTextNode alloc] init]; - text3.attributedText = [[NSAttributedString alloc] initWithString:@"!!!!"]; - text3.frame = CGRectMake(50, 400, 200, 100); - [text2 addSubnode:text3]; - [contianer layoutIfNeeded]; - [contianer.layer displayIfNeeded]; - NSArray *updatedElements2 = contianer.view.accessibilityElements; - XCTAssertTrue([[updatedElements2.firstObject accessibilityLabel] isEqualToString:@"hello, world, !!!!"]); -} - -- (void)testAccessibilityNonLayerbackedNodesOperationInNonContainer -{ - ASDisplayNode *contianer = [[ASDisplayNode alloc] init]; - contianer.frame = CGRectMake(50, 50, 200, 600); - contianer.backgroundColor = [UIColor grayColor]; - // Do any additional setup after loading the view, typically from a nib. - ASTextNode *text1 = [[ASTextNode alloc] init]; - text1.attributedText = [[NSAttributedString alloc] initWithString:@"hello"]; - text1.frame = CGRectMake(50, 100, 200, 200); - [contianer addSubnode:text1]; - [contianer layoutIfNeeded]; - [contianer.layer displayIfNeeded]; - NSArray *elements = contianer.view.accessibilityElements; - XCTAssertTrue(elements.count == 1); - XCTAssertTrue([[elements.firstObject accessibilityLabel] isEqualToString:@"hello"]); - ASTextNode *text2 = [[ASTextNode alloc] init]; - text2.attributedText = [[NSAttributedString alloc] initWithString:@"world"]; - text2.frame = CGRectMake(50, 300, 200, 200); - [contianer addSubnode:text2]; - [contianer layoutIfNeeded]; - [contianer.layer displayIfNeeded]; - NSArray *updatedElements = contianer.view.accessibilityElements; - XCTAssertTrue(updatedElements.count == 2); - XCTAssertTrue([[updatedElements.firstObject accessibilityLabel] isEqualToString:@"hello"]); - XCTAssertTrue([[updatedElements.lastObject accessibilityLabel] isEqualToString:@"world"]); - ASTextNode *text3 = [[ASTextNode alloc] init]; - text3.attributedText = [[NSAttributedString alloc] initWithString:@"!!!!"]; - text3.frame = CGRectMake(50, 400, 200, 100); - [text2 addSubnode:text3]; - [contianer layoutIfNeeded]; - [contianer.layer displayIfNeeded]; - NSArray *updatedElements2 = contianer.view.accessibilityElements; - //text3 won't be read out cause it's overshadowed by text2 - XCTAssertTrue(updatedElements2.count == 2); - XCTAssertTrue([[updatedElements2.firstObject accessibilityLabel] isEqualToString:@"hello"]); - XCTAssertTrue([[updatedElements2.lastObject accessibilityLabel] isEqualToString:@"world"]); -} -- (void)testAccessibilityLayerbackedNodesOperationInNonContainer -{ - ASDisplayNode *contianer = [[ASDisplayNode alloc] init]; - contianer.frame = CGRectMake(50, 50, 200, 600); - contianer.backgroundColor = [UIColor grayColor]; - // Do any additional setup after loading the view, typically from a nib. - ASTextNode *text1 = [[ASTextNode alloc] init]; - text1.layerBacked = YES; - text1.attributedText = [[NSAttributedString alloc] initWithString:@"hello"]; - text1.frame = CGRectMake(50, 0, 100, 100); - [contianer addSubnode:text1]; - [contianer layoutIfNeeded]; - [contianer.layer displayIfNeeded]; - NSArray *elements = contianer.view.accessibilityElements; - XCTAssertTrue(elements.count == 1); - XCTAssertTrue([[elements.firstObject accessibilityLabel] isEqualToString:@"hello"]); - ASTextNode *text2 = [[ASTextNode alloc] init]; - text2.layerBacked = YES; - text2.attributedText = [[NSAttributedString alloc] initWithString:@"world"]; - text2.frame = CGRectMake(50, 100, 100, 100); - [contianer addSubnode:text2]; - [contianer layoutIfNeeded]; - [contianer.layer displayIfNeeded]; - NSArray *updatedElements = contianer.view.accessibilityElements; - XCTAssertTrue(updatedElements.count == 2); - XCTAssertTrue([[updatedElements.firstObject accessibilityLabel] isEqualToString:@"hello"]); - XCTAssertTrue([[updatedElements.lastObject accessibilityLabel] isEqualToString:@"world"]); - ASTextNode *text3 = [[ASTextNode alloc] init]; - text3.layerBacked = YES; - text3.attributedText = [[NSAttributedString alloc] initWithString:@"!!!!"]; - text3.frame = CGRectMake(50, 200, 100, 100); - [text2 addSubnode:text3]; - [contianer layoutIfNeeded]; - [contianer.layer displayIfNeeded]; - NSArray *updatedElements2 = contianer.view.accessibilityElements; - //text3 won't be read out cause it's overshadowed by text2 - XCTAssertTrue(updatedElements2.count == 2); - XCTAssertTrue([[updatedElements2.firstObject accessibilityLabel] isEqualToString:@"hello"]); - XCTAssertTrue([[updatedElements2.lastObject accessibilityLabel] isEqualToString:@"world"]); -} - -- (void)testAccessibilityUpdatesWithElementsChanges -{ - ASDisplayNode *contianer = [[ASDisplayNode alloc] init]; - contianer.frame = CGRectMake(50, 50, 200, 600); - contianer.backgroundColor = [UIColor grayColor]; - contianer.isAccessibilityContainer = YES; - // Do any additional setup after loading the view, typically from a nib. - ASTextNode *text1 = [[ASTextNode alloc] init]; - text1.layerBacked = YES; - text1.attributedText = [[NSAttributedString alloc] initWithString:@"hello"]; - text1.frame = CGRectMake(50, 0, 100, 100); - [contianer addSubnode:text1]; - [contianer layoutIfNeeded]; - [contianer.layer displayIfNeeded]; - NSArray *elements = contianer.view.accessibilityElements; - XCTAssertTrue(elements.count == 1); - XCTAssertTrue([[elements.firstObject accessibilityLabel] isEqualToString:@"hello"]); - text1.attributedText = [[NSAttributedString alloc] initWithString:@"greeting"]; - [contianer layoutIfNeeded]; - [contianer.layer displayIfNeeded]; - NSArray *elements2 = contianer.view.accessibilityElements; - XCTAssertTrue(elements2.count == 1); - XCTAssertTrue([[elements2.firstObject accessibilityLabel] isEqualToString:@"greeting"]); -} - -#pragma mark - -#pragma mark UIAccessibilityAction Forwarding - -- (void)testActionForwarding { - ASDisplayNode *node = [ASDisplayNode new]; - UIView *view = node.view; - - id mockNode = OCMPartialMock(node); - - OCMExpect([mockNode accessibilityActivate]); - [view accessibilityActivate]; - - OCMExpect([mockNode accessibilityIncrement]); - [view accessibilityIncrement]; - - OCMExpect([mockNode accessibilityDecrement]); - [view accessibilityDecrement]; - - OCMExpect([mockNode accessibilityScroll:UIAccessibilityScrollDirectionDown]); - [view accessibilityScroll:UIAccessibilityScrollDirectionDown]; - - OCMExpect([mockNode accessibilityPerformEscape]); - [view accessibilityPerformEscape]; - - OCMExpect([mockNode accessibilityPerformMagicTap]); - [view accessibilityPerformMagicTap]; - - OCMVerifyAll(mockNode); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASEditableTextNodeTests.mm b/submodules/AsyncDisplayKit/Tests/ASEditableTextNodeTests.mm deleted file mode 100644 index a359629014..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASEditableTextNodeTests.mm +++ /dev/null @@ -1,171 +0,0 @@ -// -// ASEditableTextNodeTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import -#import - -static BOOL CGSizeEqualToSizeWithIn(CGSize size1, CGSize size2, CGFloat delta) -{ - return fabs(size1.width - size2.width) < delta && fabs(size1.height - size2.height) < delta; -} - -@interface ASEditableTextNodeTests : XCTestCase -@property (nonatomic) ASEditableTextNode *editableTextNode; -@property (nonatomic, copy) NSAttributedString *attributedText; -@end - -@implementation ASEditableTextNodeTests - -- (void)setUp -{ - [super setUp]; - - _editableTextNode = [[ASEditableTextNode alloc] init]; - - NSMutableAttributedString *mas = [[NSMutableAttributedString alloc] initWithString:@"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."]; - NSMutableParagraphStyle *para = [NSMutableParagraphStyle new]; - para.alignment = NSTextAlignmentCenter; - para.lineSpacing = 1.0; - [mas addAttribute:NSParagraphStyleAttributeName value:para - range:NSMakeRange(0, mas.length - 1)]; - - // Vary the linespacing on the last line - NSMutableParagraphStyle *lastLinePara = [NSMutableParagraphStyle new]; - lastLinePara.alignment = para.alignment; - lastLinePara.lineSpacing = 5.0; - [mas addAttribute:NSParagraphStyleAttributeName value:lastLinePara - range:NSMakeRange(mas.length - 1, 1)]; - - _attributedText = mas; - _editableTextNode.attributedText = _attributedText; -} - -#pragma mark - ASEditableTextNode - -- (void)testAllocASEditableTextNode -{ - ASEditableTextNode *node = [[ASEditableTextNode alloc] init]; - XCTAssertTrue([[node class] isSubclassOfClass:[ASEditableTextNode class]], @"ASEditableTextNode alloc should return an instance of ASEditableTextNode, instead returned %@", [node class]); -} - -#pragma mark - ASEditableTextNode Tests - -- (void)testUITextInputTraitDefaults -{ - ASEditableTextNode *editableTextNode = [[ASEditableTextNode alloc] init]; - - XCTAssertTrue(editableTextNode.autocapitalizationType == UITextAutocapitalizationTypeSentences, @"_ASTextInputTraitsPendingState's autocapitalizationType default should be UITextAutocapitalizationTypeSentences."); - XCTAssertTrue(editableTextNode.autocorrectionType == UITextAutocorrectionTypeDefault, @"_ASTextInputTraitsPendingState's autocorrectionType default should be UITextAutocorrectionTypeDefault."); - XCTAssertTrue(editableTextNode.spellCheckingType == UITextSpellCheckingTypeDefault, @"_ASTextInputTraitsPendingState's spellCheckingType default should be UITextSpellCheckingTypeDefault."); - XCTAssertTrue(editableTextNode.keyboardType == UIKeyboardTypeDefault, @"_ASTextInputTraitsPendingState's keyboardType default should be UIKeyboardTypeDefault."); - XCTAssertTrue(editableTextNode.keyboardAppearance == UIKeyboardAppearanceDefault, @"_ASTextInputTraitsPendingState's keyboardAppearance default should be UIKeyboardAppearanceDefault."); - XCTAssertTrue(editableTextNode.returnKeyType == UIReturnKeyDefault, @"_ASTextInputTraitsPendingState's returnKeyType default should be UIReturnKeyDefault."); - XCTAssertTrue(editableTextNode.enablesReturnKeyAutomatically == NO, @"_ASTextInputTraitsPendingState's enablesReturnKeyAutomatically default should be NO."); - XCTAssertTrue(editableTextNode.isSecureTextEntry == NO, @"_ASTextInputTraitsPendingState's isSecureTextEntry default should be NO."); - - XCTAssertTrue(editableTextNode.textView.autocapitalizationType == UITextAutocapitalizationTypeSentences, @"textView's autocapitalizationType default should be UITextAutocapitalizationTypeSentences."); - XCTAssertTrue(editableTextNode.textView.autocorrectionType == UITextAutocorrectionTypeDefault, @"textView's autocorrectionType default should be UITextAutocorrectionTypeDefault."); - XCTAssertTrue(editableTextNode.textView.spellCheckingType == UITextSpellCheckingTypeDefault, @"textView's spellCheckingType default should be UITextSpellCheckingTypeDefault."); - XCTAssertTrue(editableTextNode.textView.keyboardType == UIKeyboardTypeDefault, @"textView's keyboardType default should be UIKeyboardTypeDefault."); - XCTAssertTrue(editableTextNode.textView.keyboardAppearance == UIKeyboardAppearanceDefault, @"textView's keyboardAppearance default should be UIKeyboardAppearanceDefault."); - XCTAssertTrue(editableTextNode.textView.returnKeyType == UIReturnKeyDefault, @"textView's returnKeyType default should be UIReturnKeyDefault."); - XCTAssertTrue(editableTextNode.textView.enablesReturnKeyAutomatically == NO, @"textView's enablesReturnKeyAutomatically default should be NO."); - XCTAssertTrue(editableTextNode.textView.isSecureTextEntry == NO, @"textView's isSecureTextEntry default should be NO."); -} - -- (void)testUITextInputTraitsSetTraitsBeforeViewLoaded -{ - // UITextView ignores any values set on the first 3 properties below if secureTextEntry is enabled. - // Because of this UIKit behavior, we'll test secure entry seperately - ASEditableTextNode *editableTextNode = [[ASEditableTextNode alloc] init]; - - editableTextNode.autocapitalizationType = UITextAutocapitalizationTypeWords; - editableTextNode.autocorrectionType = UITextAutocorrectionTypeYes; - editableTextNode.spellCheckingType = UITextSpellCheckingTypeYes; - editableTextNode.keyboardType = UIKeyboardTypeTwitter; - editableTextNode.keyboardAppearance = UIKeyboardAppearanceDark; - editableTextNode.returnKeyType = UIReturnKeyGo; - editableTextNode.enablesReturnKeyAutomatically = YES; - - XCTAssertTrue(editableTextNode.textView.autocapitalizationType == UITextAutocapitalizationTypeWords, @"textView's autocapitalizationType should be UITextAutocapitalizationTypeAllCharacters."); - XCTAssertTrue(editableTextNode.textView.autocorrectionType == UITextAutocorrectionTypeYes, @"textView's autocorrectionType should be UITextAutocorrectionTypeYes."); - XCTAssertTrue(editableTextNode.textView.spellCheckingType == UITextSpellCheckingTypeYes, @"textView's spellCheckingType should be UITextSpellCheckingTypeYes."); - XCTAssertTrue(editableTextNode.textView.keyboardType == UIKeyboardTypeTwitter, @"textView's keyboardType should be UIKeyboardTypeTwitter."); - XCTAssertTrue(editableTextNode.textView.keyboardAppearance == UIKeyboardAppearanceDark, @"textView's keyboardAppearance should be UIKeyboardAppearanceDark."); - XCTAssertTrue(editableTextNode.textView.returnKeyType == UIReturnKeyGo, @"textView's returnKeyType should be UIReturnKeyGo."); - XCTAssertTrue(editableTextNode.textView.enablesReturnKeyAutomatically == YES, @"textView's enablesReturnKeyAutomatically should be YES."); - - ASEditableTextNode *secureEditableTextNode = [[ASEditableTextNode alloc] init]; - secureEditableTextNode.secureTextEntry = YES; - - XCTAssertTrue(secureEditableTextNode.textView.secureTextEntry == YES, @"textView's isSecureTextEntry should be YES."); -} - -- (void)testUITextInputTraitsChangeTraitAfterViewLoaded -{ - // UITextView ignores any values set on the first 3 properties below if secureTextEntry is enabled. - // Because of this UIKit behavior, we'll test secure entry seperately - ASEditableTextNode *editableTextNode = [[ASEditableTextNode alloc] init]; - - editableTextNode.textView.autocapitalizationType = UITextAutocapitalizationTypeWords; - editableTextNode.textView.autocorrectionType = UITextAutocorrectionTypeYes; - editableTextNode.textView.spellCheckingType = UITextSpellCheckingTypeYes; - editableTextNode.textView.keyboardType = UIKeyboardTypeTwitter; - editableTextNode.textView.keyboardAppearance = UIKeyboardAppearanceDark; - editableTextNode.textView.returnKeyType = UIReturnKeyGo; - editableTextNode.textView.enablesReturnKeyAutomatically = YES; - - XCTAssertTrue(editableTextNode.textView.autocapitalizationType == UITextAutocapitalizationTypeWords, @"textView's autocapitalizationType should be UITextAutocapitalizationTypeAllCharacters."); - XCTAssertTrue(editableTextNode.textView.autocorrectionType == UITextAutocorrectionTypeYes, @"textView's autocorrectionType should be UITextAutocorrectionTypeYes."); - XCTAssertTrue(editableTextNode.textView.spellCheckingType == UITextSpellCheckingTypeYes, @"textView's spellCheckingType should be UITextSpellCheckingTypeYes."); - XCTAssertTrue(editableTextNode.textView.keyboardType == UIKeyboardTypeTwitter, @"textView's keyboardType should be UIKeyboardTypeTwitter."); - XCTAssertTrue(editableTextNode.textView.keyboardAppearance == UIKeyboardAppearanceDark, @"textView's keyboardAppearance should be UIKeyboardAppearanceDark."); - XCTAssertTrue(editableTextNode.textView.returnKeyType == UIReturnKeyGo, @"textView's returnKeyType should be UIReturnKeyGo."); - XCTAssertTrue(editableTextNode.textView.enablesReturnKeyAutomatically == YES, @"textView's enablesReturnKeyAutomatically should be YES."); - - ASEditableTextNode *secureEditableTextNode = [[ASEditableTextNode alloc] init]; - secureEditableTextNode.textView.secureTextEntry = YES; - - XCTAssertTrue(secureEditableTextNode.textView.secureTextEntry == YES, @"textView's isSecureTextEntry should be YES."); -} - -- (void)testCalculatedSizeIsGreaterThanOrEqualToConstrainedSize -{ - for (NSInteger i = 10; i < 500; i += 50) { - CGSize constrainedSize = CGSizeMake(i, i); - CGSize calculatedSize = [_editableTextNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - XCTAssertTrue(calculatedSize.width <= constrainedSize.width, @"Calculated width (%f) should be less than or equal to constrained width (%f)", calculatedSize.width, constrainedSize.width); - XCTAssertTrue(calculatedSize.height <= constrainedSize.height, @"Calculated height (%f) should be less than or equal to constrained height (%f)", calculatedSize.height, constrainedSize.height); - } -} - -- (void)testRecalculationOfSizeIsSameAsOriginallyCalculatedSize -{ - for (NSInteger i = 10; i < 500; i += 50) { - CGSize constrainedSize = CGSizeMake(i, i); - CGSize calculatedSize = [_editableTextNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - CGSize recalculatedSize = [_editableTextNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - - XCTAssertTrue(CGSizeEqualToSizeWithIn(calculatedSize, recalculatedSize, 4.0), @"Recalculated size %@ should be same as original size %@", NSStringFromCGSize(recalculatedSize), NSStringFromCGSize(calculatedSize)); - } -} - -- (void)testRecalculationOfSizeIsSameAsOriginallyCalculatedFloatingPointSize -{ - for (CGFloat i = 10; i < 500; i *= 1.3) { - CGSize constrainedSize = CGSizeMake(i, i); - CGSize calculatedSize = [_editableTextNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - CGSize recalculatedSize = [_editableTextNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - - XCTAssertTrue(CGSizeEqualToSizeWithIn(calculatedSize, recalculatedSize, 11.0), @"Recalculated size %@ should be same as original size %@", NSStringFromCGSize(recalculatedSize), NSStringFromCGSize(calculatedSize)); - } -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASImageNodeSnapshotTests.mm b/submodules/AsyncDisplayKit/Tests/ASImageNodeSnapshotTests.mm deleted file mode 100644 index 55cb5f866e..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASImageNodeSnapshotTests.mm +++ /dev/null @@ -1,94 +0,0 @@ -// -// ASImageNodeSnapshotTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASSnapshotTestCase.h" - -#import - -@interface ASImageNodeSnapshotTests : ASSnapshotTestCase -@end - -@implementation ASImageNodeSnapshotTests - -- (void)setUp -{ - [super setUp]; - - self.recordMode = NO; -} - -- (UIImage *)testImage -{ - NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"logo-square" - ofType:@"png" - inDirectory:@"TestResources"]; - return [UIImage imageWithContentsOfFile:path]; -} - -- (void)testRenderLogoSquare -{ - // trivial test case to ensure ASSnapshotTestCase works - ASImageNode *imageNode = [[ASImageNode alloc] init]; - imageNode.image = [self testImage]; - ASDisplayNodeSizeToFitSize(imageNode, CGSizeMake(100, 100)); - - ASSnapshotVerifyNode(imageNode, nil); -} - -- (void)testForcedScaling -{ - CGSize forcedImageSize = CGSizeMake(100, 100); - - ASImageNode *imageNode = [[ASImageNode alloc] init]; - imageNode.forcedSize = forcedImageSize; - imageNode.image = [self testImage]; - - // Snapshot testing requires that node is formally laid out. - imageNode.style.width = ASDimensionMake(forcedImageSize.width); - imageNode.style.height = ASDimensionMake(forcedImageSize.height); - ASDisplayNodeSizeToFitSize(imageNode, forcedImageSize); - ASSnapshotVerifyNode(imageNode, @"first"); - - imageNode.style.width = ASDimensionMake(200); - imageNode.style.height = ASDimensionMake(200); - ASDisplayNodeSizeToFitSize(imageNode, CGSizeMake(200, 200)); - ASSnapshotVerifyNode(imageNode, @"second"); - - XCTAssert(CGImageGetWidth((CGImageRef)imageNode.contents) == forcedImageSize.width * imageNode.contentsScale && - CGImageGetHeight((CGImageRef)imageNode.contents) == forcedImageSize.height * imageNode.contentsScale, - @"Contents should be 100 x 100 by contents scale."); -} - -- (void)testTintColorBlock -{ - UIImage *test = [self testImage]; - UIImage *tinted = ASImageNodeTintColorModificationBlock([UIColor redColor])(test); - ASImageNode *node = [[ASImageNode alloc] init]; - node.image = tinted; - ASDisplayNodeSizeToFitSize(node, test.size); - - ASSnapshotVerifyNode(node, nil); -} - -- (void)testRoundedCornerBlock -{ - UIGraphicsBeginImageContext(CGSizeMake(100, 100)); - [[UIColor blueColor] setFill]; - UIRectFill(CGRectMake(0, 0, 100, 100)); - UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - UIImage *rounded = ASImageNodeRoundBorderModificationBlock(2, [UIColor redColor])(result); - ASImageNode *node = [[ASImageNode alloc] init]; - node.image = rounded; - ASDisplayNodeSizeToFitSize(node, rounded.size); - - ASSnapshotVerifyNode(node, nil); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASInsetLayoutSpecSnapshotTests.mm b/submodules/AsyncDisplayKit/Tests/ASInsetLayoutSpecSnapshotTests.mm deleted file mode 100644 index d6047d35f3..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASInsetLayoutSpecSnapshotTests.mm +++ /dev/null @@ -1,117 +0,0 @@ -// -// ASInsetLayoutSpecSnapshotTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASLayoutSpecSnapshotTestsHelper.h" - -#import -#import - -typedef NS_OPTIONS(NSUInteger, ASInsetLayoutSpecTestEdge) { - ASInsetLayoutSpecTestEdgeTop = 1 << 0, - ASInsetLayoutSpecTestEdgeLeft = 1 << 1, - ASInsetLayoutSpecTestEdgeBottom = 1 << 2, - ASInsetLayoutSpecTestEdgeRight = 1 << 3, -}; - -static CGFloat insetForEdge(NSUInteger combination, ASInsetLayoutSpecTestEdge edge, CGFloat insetValue) -{ - return combination & edge ? INFINITY : insetValue; -} - -static UIEdgeInsets insetsForCombination(NSUInteger combination, CGFloat insetValue) -{ - return { - .top = insetForEdge(combination, ASInsetLayoutSpecTestEdgeTop, insetValue), - .left = insetForEdge(combination, ASInsetLayoutSpecTestEdgeLeft, insetValue), - .bottom = insetForEdge(combination, ASInsetLayoutSpecTestEdgeBottom, insetValue), - .right = insetForEdge(combination, ASInsetLayoutSpecTestEdgeRight, insetValue), - }; -} - -static NSString *nameForInsets(UIEdgeInsets insets) -{ - return [NSString stringWithFormat:@"%.f-%.f-%.f-%.f", insets.top, insets.left, insets.bottom, insets.right]; -} - -@interface ASInsetLayoutSpecSnapshotTests : ASLayoutSpecSnapshotTestCase -@end - -@implementation ASInsetLayoutSpecSnapshotTests - -- (void)testInsetsWithVariableSize -{ - for (NSUInteger combination = 0; combination < 16; combination++) { - UIEdgeInsets insets = insetsForCombination(combination, 10); - ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor grayColor]); - ASDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor greenColor], {10, 10}); - - ASLayoutSpec *layoutSpec = - [ASBackgroundLayoutSpec - backgroundLayoutSpecWithChild: - [ASInsetLayoutSpec - insetLayoutSpecWithInsets:insets - child:foregroundNode] - background:backgroundNode]; - - static ASSizeRange kVariableSize = {{0, 0}, {300, 300}}; - [self testLayoutSpec:layoutSpec - sizeRange:kVariableSize - subnodes:@[backgroundNode, foregroundNode] - identifier:nameForInsets(insets)]; - } -} - -- (void)testInsetsWithFixedSize -{ - for (NSUInteger combination = 0; combination < 16; combination++) { - UIEdgeInsets insets = insetsForCombination(combination, 10); - ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor grayColor]); - ASDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor greenColor], {10, 10}); - - ASLayoutSpec *layoutSpec = - [ASBackgroundLayoutSpec - backgroundLayoutSpecWithChild: - [ASInsetLayoutSpec - insetLayoutSpecWithInsets:insets - child:foregroundNode] - background:backgroundNode]; - - static ASSizeRange kFixedSize = {{300, 300}, {300, 300}}; - [self testLayoutSpec:layoutSpec - sizeRange:kFixedSize - subnodes:@[backgroundNode, foregroundNode] - identifier:nameForInsets(insets)]; - } -} - -/** Regression test, there was a bug mixing insets with infinite and zero sizes */ -- (void)testInsetsWithInfinityAndZeroInsetValue -{ - for (NSUInteger combination = 0; combination < 16; combination++) { - UIEdgeInsets insets = insetsForCombination(combination, 0); - ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor grayColor]); - ASDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor greenColor], {10, 10}); - - ASLayoutSpec *layoutSpec = - [ASBackgroundLayoutSpec - backgroundLayoutSpecWithChild: - [ASInsetLayoutSpec - insetLayoutSpecWithInsets:insets - child:foregroundNode] - background:backgroundNode]; - - static ASSizeRange kFixedSize = {{300, 300}, {300, 300}}; - [self testLayoutSpec:layoutSpec - sizeRange:kFixedSize - subnodes:@[backgroundNode, foregroundNode] - identifier:nameForInsets(insets)]; - } -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASIntegerMapTests.mm b/submodules/AsyncDisplayKit/Tests/ASIntegerMapTests.mm deleted file mode 100644 index d23e5bf49f..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASIntegerMapTests.mm +++ /dev/null @@ -1,113 +0,0 @@ -// -// ASIntegerMapTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASTestCase.h" -#import "ASIntegerMap.h" - -@interface ASIntegerMapTests : ASTestCase - -@end - -@implementation ASIntegerMapTests - -- (void)testIsEqual -{ - ASIntegerMap *map = [[ASIntegerMap alloc] init]; - [map setInteger:1 forKey:0]; - ASIntegerMap *alsoMap = [[ASIntegerMap alloc] init]; - [alsoMap setInteger:1 forKey:0]; - ASIntegerMap *notMap = [[ASIntegerMap alloc] init]; - [notMap setInteger:2 forKey:0]; - XCTAssertEqualObjects(map, alsoMap); - XCTAssertNotEqualObjects(map, notMap); -} - -#pragma mark - Changeset mapping - -/// 1 item, no changes -> identity map -- (void)testEmptyChange -{ - ASIntegerMap *map = [ASIntegerMap mapForUpdateWithOldCount:1 deleted:nil inserted:nil]; - XCTAssertEqual(map, ASIntegerMap.identityMap); -} - -/// 0 items -> empty map -- (void)testChangeOnNoData -{ - ASIntegerMap *map = [ASIntegerMap mapForUpdateWithOldCount:0 deleted:nil inserted:nil]; - XCTAssertEqual(map, ASIntegerMap.emptyMap); -} - -/// 2 items, delete 0 -- (void)testBasicChange1 -{ - ASIntegerMap *map = [ASIntegerMap mapForUpdateWithOldCount:2 deleted:[NSIndexSet indexSetWithIndex:0] inserted:nil]; - XCTAssertEqual([map integerForKey:0], NSNotFound); - XCTAssertEqual([map integerForKey:1], 0); - XCTAssertEqual([map integerForKey:2], NSNotFound); -} - -/// 2 items, insert 0 -- (void)testBasicChange2 -{ - ASIntegerMap *map = [ASIntegerMap mapForUpdateWithOldCount:2 deleted:nil inserted:[NSIndexSet indexSetWithIndex:0]]; - XCTAssertEqual([map integerForKey:0], 1); - XCTAssertEqual([map integerForKey:1], 2); - XCTAssertEqual([map integerForKey:2], NSNotFound); -} - -/// 2 items, insert 0, delete 0 -- (void)testChange1 -{ - ASIntegerMap *map = [ASIntegerMap mapForUpdateWithOldCount:2 deleted:[NSIndexSet indexSetWithIndex:0] inserted:[NSIndexSet indexSetWithIndex:0]]; - XCTAssertEqual([map integerForKey:0], NSNotFound); - XCTAssertEqual([map integerForKey:1], 1); - XCTAssertEqual([map integerForKey:2], NSNotFound); -} - -/// 4 items, insert {0-1, 3} -- (void)testChange2 -{ - NSMutableIndexSet *inserts = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)]; - [inserts addIndex:3]; - ASIntegerMap *map = [ASIntegerMap mapForUpdateWithOldCount:4 deleted:nil inserted:inserts]; - XCTAssertEqual([map integerForKey:0], 2); - XCTAssertEqual([map integerForKey:1], 4); - XCTAssertEqual([map integerForKey:2], 5); - XCTAssertEqual([map integerForKey:3], 6); -} - -/// 4 items, delete {0-1, 3} -- (void)testChange3 -{ - NSMutableIndexSet *deletes = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)]; - [deletes addIndex:3]; - ASIntegerMap *map = [ASIntegerMap mapForUpdateWithOldCount:4 deleted:deletes inserted:nil]; - XCTAssertEqual([map integerForKey:0], NSNotFound); - XCTAssertEqual([map integerForKey:1], NSNotFound); - XCTAssertEqual([map integerForKey:2], 0); - XCTAssertEqual([map integerForKey:3], NSNotFound); -} - -/// 5 items, delete {0-1, 3} insert {1-2, 4} -- (void)testChange4 -{ - NSMutableIndexSet *deletes = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)]; - [deletes addIndex:3]; - NSMutableIndexSet *inserts = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 2)]; - [inserts addIndex:4]; - ASIntegerMap *map = [ASIntegerMap mapForUpdateWithOldCount:5 deleted:deletes inserted:inserts]; - XCTAssertEqual([map integerForKey:0], NSNotFound); - XCTAssertEqual([map integerForKey:1], NSNotFound); - XCTAssertEqual([map integerForKey:2], 0); - XCTAssertEqual([map integerForKey:3], NSNotFound); - XCTAssertEqual([map integerForKey:4], 3); - XCTAssertEqual([map integerForKey:5], NSNotFound); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASLayoutElementStyleTests.mm b/submodules/AsyncDisplayKit/Tests/ASLayoutElementStyleTests.mm deleted file mode 100644 index f6f95066e8..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASLayoutElementStyleTests.mm +++ /dev/null @@ -1,127 +0,0 @@ -// -// ASLayoutElementStyleTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "ASXCTExtensions.h" -#import - -#pragma mark - ASLayoutElementStyleTestsDelegate - -@interface ASLayoutElementStyleTestsDelegate : NSObject -@property (copy, nonatomic) NSString *propertyNameChanged; -@end - -@implementation ASLayoutElementStyleTestsDelegate - -- (void)style:(id)style propertyDidChange:(NSString *)propertyName -{ - self.propertyNameChanged = propertyName; -} - -@end - -#pragma mark - ASLayoutElementStyleTests - -@interface ASLayoutElementStyleTests : XCTestCase - -@end - -@implementation ASLayoutElementStyleTests - -- (void)testSettingSize -{ - ASLayoutElementStyle *style = [ASLayoutElementStyle new]; - - style.width = ASDimensionMake(100); - style.height = ASDimensionMake(100); - XCTAssertTrue(ASDimensionEqualToDimension(style.width, ASDimensionMake(100))); - XCTAssertTrue(ASDimensionEqualToDimension(style.height, ASDimensionMake(100))); - - style.minWidth = ASDimensionMake(100); - style.minHeight = ASDimensionMake(100); - XCTAssertTrue(ASDimensionEqualToDimension(style.width, ASDimensionMake(100))); - XCTAssertTrue(ASDimensionEqualToDimension(style.height, ASDimensionMake(100))); - - style.maxWidth = ASDimensionMake(100); - style.maxHeight = ASDimensionMake(100); - XCTAssertTrue(ASDimensionEqualToDimension(style.width, ASDimensionMake(100))); - XCTAssertTrue(ASDimensionEqualToDimension(style.height, ASDimensionMake(100))); -} - -- (void)testSettingSizeViaCGSize -{ - ASLayoutElementStyle *style = [ASLayoutElementStyle new]; - - ASXCTAssertEqualSizes(style.preferredSize, CGSizeZero); - - CGSize size = CGSizeMake(100, 100); - - style.preferredSize = size; - ASXCTAssertEqualSizes(style.preferredSize, size); - XCTAssertTrue(ASDimensionEqualToDimension(style.width, ASDimensionMakeWithPoints(size.width))); - XCTAssertTrue(ASDimensionEqualToDimension(style.height, ASDimensionMakeWithPoints(size.height))); - - style.minSize = size; - XCTAssertTrue(ASDimensionEqualToDimension(style.minWidth, ASDimensionMakeWithPoints(size.width))); - XCTAssertTrue(ASDimensionEqualToDimension(style.minHeight, ASDimensionMakeWithPoints(size.height))); - - style.maxSize = size; - XCTAssertTrue(ASDimensionEqualToDimension(style.maxWidth, ASDimensionMakeWithPoints(size.width))); - XCTAssertTrue(ASDimensionEqualToDimension(style.maxHeight, ASDimensionMakeWithPoints(size.height))); -} - -- (void)testReadingInvalidSizeForPreferredSize -{ - ASLayoutElementStyle *style = [ASLayoutElementStyle new]; - - XCTAssertNoThrow(style.preferredSize); - - style.width = ASDimensionMake(ASDimensionUnitFraction, 0.5); - XCTAssertThrows(style.preferredSize); - - style.preferredSize = CGSizeMake(100, 100); - XCTAssertNoThrow(style.preferredSize); -} - -- (void)testSettingSizeViaLayoutSize -{ - ASLayoutElementStyle *style = [ASLayoutElementStyle new]; - - ASLayoutSize layoutSize = ASLayoutSizeMake(ASDimensionMake(100), ASDimensionMake(100)); - - style.preferredLayoutSize = layoutSize; - XCTAssertTrue(ASDimensionEqualToDimension(style.width, layoutSize.width)); - XCTAssertTrue(ASDimensionEqualToDimension(style.height, layoutSize.height)); - XCTAssertTrue(ASDimensionEqualToDimension(style.preferredLayoutSize.width, layoutSize.width)); - XCTAssertTrue(ASDimensionEqualToDimension(style.preferredLayoutSize.height, layoutSize.height)); - - style.minLayoutSize = layoutSize; - XCTAssertTrue(ASDimensionEqualToDimension(style.minWidth, layoutSize.width)); - XCTAssertTrue(ASDimensionEqualToDimension(style.minHeight, layoutSize.height)); - XCTAssertTrue(ASDimensionEqualToDimension(style.minLayoutSize.width, layoutSize.width)); - XCTAssertTrue(ASDimensionEqualToDimension(style.minLayoutSize.height, layoutSize.height)); - - style.maxLayoutSize = layoutSize; - XCTAssertTrue(ASDimensionEqualToDimension(style.maxWidth, layoutSize.width)); - XCTAssertTrue(ASDimensionEqualToDimension(style.maxHeight, layoutSize.height)); - XCTAssertTrue(ASDimensionEqualToDimension(style.maxLayoutSize.width, layoutSize.width)); - XCTAssertTrue(ASDimensionEqualToDimension(style.maxLayoutSize.height, layoutSize.height)); -} - -- (void)testSettingPropertiesWillCallDelegate -{ - ASLayoutElementStyleTestsDelegate *delegate = [ASLayoutElementStyleTestsDelegate new]; - ASLayoutElementStyle *style = [[ASLayoutElementStyle alloc] initWithDelegate:delegate]; - XCTAssertTrue(ASDimensionEqualToDimension(style.width, ASDimensionAuto)); - style.width = ASDimensionMake(100); - XCTAssertTrue(ASDimensionEqualToDimension(style.width, ASDimensionMake(100))); - XCTAssertTrue([delegate.propertyNameChanged isEqualToString:ASLayoutElementStyleWidthProperty]); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASLayoutEngineTests.mm b/submodules/AsyncDisplayKit/Tests/ASLayoutEngineTests.mm deleted file mode 100644 index 3222f78b5f..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASLayoutEngineTests.mm +++ /dev/null @@ -1,591 +0,0 @@ -// -// ASLayoutEngineTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASTestCase.h" -#import "ASLayoutTestNode.h" -#import "ASXCTExtensions.h" -#import "ASTLayoutFixture.h" - -@interface ASLayoutEngineTests : ASTestCase - -@end - -@implementation ASLayoutEngineTests { - ASLayoutTestNode *nodeA; - ASLayoutTestNode *nodeB; - ASLayoutTestNode *nodeC; - ASLayoutTestNode *nodeD; - ASLayoutTestNode *nodeE; - ASTLayoutFixture *fixture1; - ASTLayoutFixture *fixture2; - ASTLayoutFixture *fixture3; - ASTLayoutFixture *fixture4; - ASTLayoutFixture *fixture5; - - // fixtures 1, 3 and 5 share the same exact node A layout spec block. - // we don't want the infra to call -setNeedsLayout when we switch fixtures - // so we need to use the same exact block. - ASLayoutSpecBlock fixture1and3and5NodeALayoutSpecBlock; - - UIWindow *window; - UIViewController *vc; - NSArray *allNodes; - NSTimeInterval verifyDelay; - // See -stubCalculatedLayoutDidChange. - BOOL stubbedCalculatedLayoutDidChange; -} - -- (void)setUp -{ - [super setUp]; - verifyDelay = 3; - window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 10, 1)]; - vc = [[UIViewController alloc] init]; - nodeA = [ASLayoutTestNode new]; - nodeA.backgroundColor = [UIColor redColor]; - - // NOTE: nodeB has flexShrink, the others don't - nodeB = [ASLayoutTestNode new]; - nodeB.style.flexShrink = 1; - nodeB.backgroundColor = [UIColor orangeColor]; - - nodeC = [ASLayoutTestNode new]; - nodeC.backgroundColor = [UIColor yellowColor]; - nodeD = [ASLayoutTestNode new]; - nodeD.backgroundColor = [UIColor greenColor]; - nodeE = [ASLayoutTestNode new]; - nodeE.backgroundColor = [UIColor blueColor]; - allNodes = @[ nodeA, nodeB, nodeC, nodeD, nodeE ]; - ASSetDebugNames(nodeA, nodeB, nodeC, nodeD, nodeE); - ASLayoutSpecBlock b = ^ASLayoutSpec * _Nonnull(__kindof ASDisplayNode * _Nonnull node, ASSizeRange constrainedSize) { - return [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal spacing:0 justifyContent:ASStackLayoutJustifyContentSpaceBetween alignItems:ASStackLayoutAlignItemsStart children:@[ nodeB, nodeC, nodeD ]]; - }; - fixture1and3and5NodeALayoutSpecBlock = b; - fixture1 = [self createFixture1]; - fixture2 = [self createFixture2]; - fixture3 = [self createFixture3]; - fixture4 = [self createFixture4]; - fixture5 = [self createFixture5]; - - nodeA.frame = vc.view.bounds; - nodeA.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - [vc.view addSubnode:nodeA]; - - window.rootViewController = vc; - [window makeKeyAndVisible]; -} - -- (void)tearDown -{ - nodeA.layoutSpecBlock = nil; - for (ASLayoutTestNode *node in allNodes) { - OCMVerifyAllWithDelay(node.mock, verifyDelay); - } - [super tearDown]; -} - -- (void)testFirstLayoutPassWhenInWindow -{ - [self runFirstLayoutPassWithFixture:fixture1]; -} - -- (void)testSetNeedsLayoutAndNormalLayoutPass -{ - [self runFirstLayoutPassWithFixture:fixture1]; - - [fixture2 apply]; - - // skip nodeB because its layout doesn't change. - for (ASLayoutTestNode *node in @[ nodeA, nodeC, nodeE ]) { - [fixture2 withSizeRangesForNode:node block:^(ASSizeRange sizeRange) { - OCMExpect([node.mock calculateLayoutThatFits:sizeRange]).onMainThread(); - }]; - OCMExpect([node.mock calculatedLayoutDidChange]).onMainThread(); - } - - [window layoutIfNeeded]; - [self verifyFixture:fixture2]; -} - -/** - * Transition from fixture1 to Fixture2 on node A. - * - * Expect A and D to calculate once off main, and - * to receive calculatedLayoutDidChange on main, - * then to get the measurement completion call on main, - * then to get animateLayoutTransition: and didCompleteLayoutTransition: on main. - */ -- (void)testLayoutTransitionWithAsyncMeasurement -{ - [self stubCalculatedLayoutDidChange]; - [self runFirstLayoutPassWithFixture:fixture1]; - - [fixture2 apply]; - - // Expect A, C, E to calculate new layouts off-main - // dispatch_once onto main to run our injectedMainThread work while the transition calculates. - __block dispatch_block_t injectedMainThreadWork = nil; - for (ASLayoutTestNode *node in @[ nodeA, nodeC, nodeE ]) { - [fixture2 withSizeRangesForNode:node block:^(ASSizeRange sizeRange) { - OCMExpect([node.mock calculateLayoutThatFits:sizeRange]) - .offMainThread() - .andDo(^(NSInvocation *inv) { - // On first calculateLayoutThatFits, schedule our injected main thread work. - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - dispatch_async(dispatch_get_main_queue(), ^{ - injectedMainThreadWork(); - }); - }); - }); - }]; - } - - // The code in this section is designed to move in time order, all on the main thread: - - OCMExpect([nodeA.mock animateLayoutTransition:OCMOCK_ANY]).onMainThread(); - OCMExpect([nodeA.mock didCompleteLayoutTransition:OCMOCK_ANY]).onMainThread(); - - // Trigger the layout transition. - __block dispatch_block_t measurementCompletionBlock = nil; - [nodeA transitionLayoutWithAnimation:NO shouldMeasureAsync:YES measurementCompletion:^{ - measurementCompletionBlock(); - }]; - - // This block will get run after bg layout calculate starts, but before measurementCompletion - __block BOOL injectedMainThreadWorkDone = NO; - injectedMainThreadWork = ^{ - injectedMainThreadWorkDone = YES; - - [window layoutIfNeeded]; - - // Ensure we're still on the old layout. We should stay on this until the transition completes. - [self verifyFixture:fixture1]; - }; - - measurementCompletionBlock = ^{ - XCTAssert(injectedMainThreadWorkDone, @"We hoped to get onto the main thread before the measurementCompletion callback ran."); - }; - - for (ASLayoutTestNode *node in allNodes) { - OCMVerifyAllWithDelay(node.mock, verifyDelay); - } - - [self verifyFixture:fixture2]; -} - -/** - * Transition from fixture1 to Fixture2 on node A. - * - * Expect A and D to calculate once on main, and - * to receive calculatedLayoutDidChange on main, - * then to get animateLayoutTransition: and didCompleteLayoutTransition: on main. - */ -- (void)testLayoutTransitionWithSyncMeasurement -{ - [self stubCalculatedLayoutDidChange]; - - // Precondition - XCTAssertFalse(CGSizeEqualToSize(fixture5.layout.size, fixture1.layout.size)); - - // First, apply fixture 5 and run a measurement pass, but don't run a layout pass - // After this step, nodes will have pending layouts that are not yet applied - [fixture5 apply]; - [fixture5 withSizeRangesForAllNodesUsingBlock:^(ASLayoutTestNode * _Nonnull node, ASSizeRange sizeRange) { - OCMExpect([node.mock calculateLayoutThatFits:sizeRange]) - .onMainThread(); - }]; - - [nodeA layoutThatFits:ASSizeRangeMake(fixture5.layout.size)]; - - // Assert that node A has layout size and size range from fixture 5 - XCTAssertTrue(CGSizeEqualToSize(fixture5.layout.size, nodeA.calculatedSize)); - XCTAssertTrue(ASSizeRangeEqualToSizeRange([fixture5 firstSizeRangeForNode:nodeA], nodeA.constrainedSizeForCalculatedLayout)); - - // Then switch to fixture 1 and kick off a synchronous layout transition - // Unapplied pending layouts from the previous measurement pass will be outdated - [fixture1 apply]; - [fixture1 withSizeRangesForAllNodesUsingBlock:^(ASLayoutTestNode * _Nonnull node, ASSizeRange sizeRange) { - OCMExpect([node.mock calculateLayoutThatFits:sizeRange]) - .onMainThread(); - }]; - - OCMExpect([nodeA.mock animateLayoutTransition:OCMOCK_ANY]).onMainThread(); - OCMExpect([nodeA.mock didCompleteLayoutTransition:OCMOCK_ANY]).onMainThread(); - - [nodeA transitionLayoutWithAnimation:NO shouldMeasureAsync:NO measurementCompletion:nil]; - - // Assert that node A picks up new layout size and size range from fixture 1 - XCTAssertTrue(CGSizeEqualToSize(fixture1.layout.size, nodeA.calculatedSize)); - XCTAssertTrue(ASSizeRangeEqualToSizeRange([fixture1 firstSizeRangeForNode:nodeA], nodeA.constrainedSizeForCalculatedLayout)); - - [window layoutIfNeeded]; - [self verifyFixture:fixture1]; -} - -/** - * Start at fixture 1. - * Trigger an async transition to fixture 2. - * While it's measuring, on main switch to fixture 4 (setNeedsLayout A, D) and run a CA layout pass. - * - * Correct behavior, we end up at fixture 4 since it's newer. - * Current incorrect behavior, we end up at fixture 2 and we remeasure surviving node C. - * Note: incorrect behavior likely introduced by the early check in __layout added in - * https://github.com/facebookarchive/AsyncDisplayKit/pull/2657 - */ -- (void)DISABLE_testASetNeedsLayoutInterferingWithTheCurrentTransition -{ - static BOOL enforceCorrectBehavior = NO; - - [self stubCalculatedLayoutDidChange]; - [self runFirstLayoutPassWithFixture:fixture1]; - - [fixture2 apply]; - - // Expect A, C, E to calculate new layouts off-main - // dispatch_once onto main to run our injectedMainThread work while the transition calculates. - __block dispatch_block_t injectedMainThreadWork = nil; - for (ASLayoutTestNode *node in @[ nodeA, nodeC, nodeE ]) { - [fixture2 withSizeRangesForNode:node block:^(ASSizeRange sizeRange) { - OCMExpect([node.mock calculateLayoutThatFits:sizeRange]) - .offMainThread() - .andDo(^(NSInvocation *inv) { - // On first calculateLayoutThatFits, schedule our injected main thread work. - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - dispatch_async(dispatch_get_main_queue(), ^{ - injectedMainThreadWork(); - }); - }); - }); - }]; - } - - // The code in this section is designed to move in time order, all on the main thread: - - // With the current behavior, the transition will continue and complete. - if (!enforceCorrectBehavior) { - OCMExpect([nodeA.mock animateLayoutTransition:OCMOCK_ANY]).onMainThread(); - OCMExpect([nodeA.mock didCompleteLayoutTransition:OCMOCK_ANY]).onMainThread(); - } - - // Trigger the layout transition. - __block dispatch_block_t measurementCompletionBlock = nil; - [nodeA transitionLayoutWithAnimation:NO shouldMeasureAsync:YES measurementCompletion:^{ - measurementCompletionBlock(); - }]; - - // Injected block will get run on main after bg layout calculate starts, but before measurementCompletion - __block BOOL injectedMainThreadWorkDone = NO; - injectedMainThreadWork = ^{ - as_log_verbose(OS_LOG_DEFAULT, "Begin injectedMainThreadWork"); - injectedMainThreadWorkDone = YES; - - [fixture4 apply]; - as_log_verbose(OS_LOG_DEFAULT, "Did apply new fixture"); - - if (enforceCorrectBehavior) { - // Correct measurement behavior here is unclear, may depend on whether the layouts which - // are common to both fixture2 and fixture4 are available from the cache. - } else { - // Incorrect behavior: nodeC will get measured against its new bounds on main. - const auto cPendingSize = [fixture2 layoutForNode:nodeC].size; - OCMExpect([nodeC.mock calculateLayoutThatFits:ASSizeRangeMake(cPendingSize)]).onMainThread(); - } - [window layoutIfNeeded]; - as_log_verbose(OS_LOG_DEFAULT, "End injectedMainThreadWork"); - }; - - measurementCompletionBlock = ^{ - XCTAssert(injectedMainThreadWorkDone, @"We hoped to get onto the main thread before the measurementCompletion callback ran."); - }; - - for (ASLayoutTestNode *node in allNodes) { - OCMVerifyAllWithDelay(node.mock, verifyDelay); - } - - // Incorrect behavior: The transition will "win" even though its transitioning to stale data. - if (enforceCorrectBehavior) { - [self verifyFixture:fixture4]; - } else { - [self verifyFixture:fixture2]; - } -} - -/** - * Start on fixture 3 where nodeB is force-shrunk via multipass layout. - * Apply fixture 1, which just changes nodeB's size and calls -setNeedsLayout on it. - * - * This behavior is currently broken. See implementation for correct behavior and incorrect behavior. - */ -- (void)testCallingSetNeedsLayoutOnANodeThatWasSubjectToMultipassLayout -{ - static BOOL const enforceCorrectBehavior = NO; - [self stubCalculatedLayoutDidChange]; - [self runFirstLayoutPassWithFixture:fixture3]; - - // Switch to fixture 1, updating nodeB's desired size and calling -setNeedsLayout - // Now nodeB will fit happily into the stack. - [fixture1 apply]; - - if (enforceCorrectBehavior) { - /* - * Correct behavior: nodeB is remeasured against the first (unconstrained) size - * and when it's discovered that now nodeB fits, nodeA will re-layout and we'll - * end up correctly at fixture1. - */ - OCMExpect([nodeB.mock calculateLayoutThatFits:[fixture3 firstSizeRangeForNode:nodeB]]); - - [fixture1 withSizeRangesForNode:nodeA block:^(ASSizeRange sizeRange) { - OCMExpect([nodeA.mock calculateLayoutThatFits:sizeRange]); - }]; - - [window layoutIfNeeded]; - [self verifyFixture:fixture1]; - } else { - /* - * Incorrect behavior: nodeB is remeasured against the second (fixed-width) constraint. - * The returned value (8) is clamped to the fixed with (7), and then compared to the previous - * width (7) and we decide not to propagate up the invalidation, and we stay stuck on the old - * layout (fixture3). - */ - OCMExpect([nodeB.mock calculateLayoutThatFits:nodeB.constrainedSizeForCalculatedLayout]); - [window layoutIfNeeded]; - [self verifyFixture:fixture3]; - } -} - -#pragma mark - Helpers - -- (void)verifyFixture:(ASTLayoutFixture *)fixture -{ - const auto expected = fixture.layout; - - // Ensure expected == frames - const auto frames = [fixture.rootNode currentLayoutBasedOnFrames]; - if (![expected isEqual:frames]) { - XCTFail(@"\n*** Layout verification failed – frames don't match expected. ***\nGot:\n%@\nExpected:\n%@", [frames recursiveDescription], [expected recursiveDescription]); - } - - // Ensure expected == calculatedLayout - const auto calculated = fixture.rootNode.calculatedLayout; - if (![expected isEqual:calculated]) { - XCTFail(@"\n*** Layout verification failed – calculated layout doesn't match expected. ***\nGot:\n%@\nExpected:\n%@", [calculated recursiveDescription], [expected recursiveDescription]); - } -} - -/** - * Stubs calculatedLayoutDidChange for all nodes. - * - * It's not really a core layout engine method, and it's also - * currently bugged and gets called a lot so for most - * tests its better not to have expectations about it littered around. - * https://github.com/TextureGroup/Texture/issues/422 - */ -- (void)stubCalculatedLayoutDidChange -{ - stubbedCalculatedLayoutDidChange = YES; - for (ASLayoutTestNode *node in allNodes) { - OCMStub([node.mock calculatedLayoutDidChange]); - } -} - -/** - * Fixture 1: A basic horizontal stack, all single-pass. - * - * [A: HorizStack([B, C, D])]. A is (10x1), B is (1x1), C is (2x1), D is (1x1) - */ -- (ASTLayoutFixture *)createFixture1 -{ - const auto fixture = [[ASTLayoutFixture alloc] init]; - - // nodeB - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeB]; - const auto layoutB = [ASLayout layoutWithLayoutElement:nodeB size:{1,1} position:{0,0} sublayouts:nil]; - - // nodeC - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeC]; - const auto layoutC = [ASLayout layoutWithLayoutElement:nodeC size:{2,1} position:{4,0} sublayouts:nil]; - - // nodeD - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeD]; - const auto layoutD = [ASLayout layoutWithLayoutElement:nodeD size:{1,1} position:{9,0} sublayouts:nil]; - - [fixture addSizeRange:{{10, 1}, {10, 1}} forNode:nodeA]; - const auto layoutA = [ASLayout layoutWithLayoutElement:nodeA size:{10,1} position:ASPointNull sublayouts:@[ layoutB, layoutC, layoutD ]]; - fixture.layout = layoutA; - - [fixture.layoutSpecBlocks setObject:fixture1and3and5NodeALayoutSpecBlock forKey:nodeA]; - return fixture; -} - -/** - * Fixture 2: A simple transition away from fixture 1. - * - * [A: HorizStack([B, C, E])]. A is (10x1), B is (1x1), C is (4x1), E is (1x1) - * - * From fixture 1: - * B survives with same layout - * C survives with new layout - * D is removed - * E joins with first layout - */ -- (ASTLayoutFixture *)createFixture2 -{ - const auto fixture = [[ASTLayoutFixture alloc] init]; - - // nodeB - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeB]; - const auto layoutB = [ASLayout layoutWithLayoutElement:nodeB size:{1,1} position:{0,0} sublayouts:nil]; - - // nodeC - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeC]; - const auto layoutC = [ASLayout layoutWithLayoutElement:nodeC size:{4,1} position:{3,0} sublayouts:nil]; - - // nodeE - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeE]; - const auto layoutE = [ASLayout layoutWithLayoutElement:nodeE size:{1,1} position:{9,0} sublayouts:nil]; - - [fixture addSizeRange:{{10, 1}, {10, 1}} forNode:nodeA]; - const auto layoutA = [ASLayout layoutWithLayoutElement:nodeA size:{10,1} position:ASPointNull sublayouts:@[ layoutB, layoutC, layoutE ]]; - fixture.layout = layoutA; - - ASLayoutSpecBlock specBlockA = ^ASLayoutSpec * _Nonnull(__kindof ASDisplayNode * _Nonnull node, ASSizeRange constrainedSize) { - return [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal spacing:0 justifyContent:ASStackLayoutJustifyContentSpaceBetween alignItems:ASStackLayoutAlignItemsStart children:@[ nodeB, nodeC, nodeE ]]; - }; - [fixture.layoutSpecBlocks setObject:specBlockA forKey:nodeA]; - return fixture; -} - -/** - * Fixture 3: Multipass stack layout - * - * [A: HorizStack([B, C, D])]. A is (10x1), B is (7x1), C is (2x1), D is (1x1) - * - * nodeB (which has flexShrink=1) will return 8x1 for its size during the first - * stack pass, and it'll be subject to a second pass where it returns 7x1. - * - */ -- (ASTLayoutFixture *)createFixture3 -{ - const auto fixture = [[ASTLayoutFixture alloc] init]; - - // nodeB wants 8,1 but it will settle for 7,1 - [fixture setReturnedSize:{8,1} forNode:nodeB]; - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeB]; - [fixture addSizeRange:{{7, 0}, {7, 1}} forNode:nodeB]; - const auto layoutB = [ASLayout layoutWithLayoutElement:nodeB size:{7,1} position:{0,0} sublayouts:nil]; - - // nodeC - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeC]; - const auto layoutC = [ASLayout layoutWithLayoutElement:nodeC size:{2,1} position:{7,0} sublayouts:nil]; - - // nodeD - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeD]; - const auto layoutD = [ASLayout layoutWithLayoutElement:nodeD size:{1,1} position:{9,0} sublayouts:nil]; - - [fixture addSizeRange:{{10, 1}, {10, 1}} forNode:nodeA]; - const auto layoutA = [ASLayout layoutWithLayoutElement:nodeA size:{10,1} position:ASPointNull sublayouts:@[ layoutB, layoutC, layoutD ]]; - fixture.layout = layoutA; - - [fixture.layoutSpecBlocks setObject:fixture1and3and5NodeALayoutSpecBlock forKey:nodeA]; - return fixture; -} - -/** - * Fixture 4: A different simple transition away from fixture 1. - * - * [A: HorizStack([B, D, E])]. A is (10x1), B is (1x1), D is (2x1), E is (1x1) - * - * From fixture 1: - * B survives with same layout - * C is removed - * D survives with new layout - * E joins with first layout - * - * From fixture 2: - * B survives with same layout - * C is removed - * D joins with first layout - * E survives with same layout - */ -- (ASTLayoutFixture *)createFixture4 -{ - const auto fixture = [[ASTLayoutFixture alloc] init]; - - // nodeB - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeB]; - const auto layoutB = [ASLayout layoutWithLayoutElement:nodeB size:{1,1} position:{0,0} sublayouts:nil]; - - // nodeD - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeD]; - const auto layoutD = [ASLayout layoutWithLayoutElement:nodeD size:{2,1} position:{4,0} sublayouts:nil]; - - // nodeE - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeE]; - const auto layoutE = [ASLayout layoutWithLayoutElement:nodeE size:{1,1} position:{9,0} sublayouts:nil]; - - [fixture addSizeRange:{{10, 1}, {10, 1}} forNode:nodeA]; - const auto layoutA = [ASLayout layoutWithLayoutElement:nodeA size:{10,1} position:ASPointNull sublayouts:@[ layoutB, layoutD, layoutE ]]; - fixture.layout = layoutA; - - ASLayoutSpecBlock specBlockA = ^ASLayoutSpec * _Nonnull(__kindof ASDisplayNode * _Nonnull node, ASSizeRange constrainedSize) { - return [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal spacing:0 justifyContent:ASStackLayoutJustifyContentSpaceBetween alignItems:ASStackLayoutAlignItemsStart children:@[ nodeB, nodeD, nodeE ]]; - }; - [fixture.layoutSpecBlocks setObject:specBlockA forKey:nodeA]; - return fixture; -} - -/** - * Fixture 5: Same as fixture 1, but with a bigger root node (node A). - * - * [A: HorizStack([B, C, D])]. A is (15x1), B is (1x1), C is (2x1), D is (1x1) - */ -- (ASTLayoutFixture *)createFixture5 -{ - const auto fixture = [[ASTLayoutFixture alloc] init]; - - // nodeB - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeB]; - const auto layoutB = [ASLayout layoutWithLayoutElement:nodeB size:{1,1} position:{0,0} sublayouts:nil]; - - // nodeC - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeC]; - const auto layoutC = [ASLayout layoutWithLayoutElement:nodeC size:{2,1} position:{4,0} sublayouts:nil]; - - // nodeD - [fixture addSizeRange:{{0, 0}, {INFINITY, 1}} forNode:nodeD]; - const auto layoutD = [ASLayout layoutWithLayoutElement:nodeD size:{1,1} position:{9,0} sublayouts:nil]; - - [fixture addSizeRange:{{15, 1}, {15, 1}} forNode:nodeA]; - const auto layoutA = [ASLayout layoutWithLayoutElement:nodeA size:{15,1} position:ASPointNull sublayouts:@[ layoutB, layoutC, layoutD ]]; - fixture.layout = layoutA; - - [fixture.layoutSpecBlocks setObject:fixture1and3and5NodeALayoutSpecBlock forKey:nodeA]; - return fixture; -} - -- (void)runFirstLayoutPassWithFixture:(ASTLayoutFixture *)fixture -{ - [fixture apply]; - [fixture withSizeRangesForAllNodesUsingBlock:^(ASLayoutTestNode * _Nonnull node, ASSizeRange sizeRange) { - OCMExpect([node.mock calculateLayoutThatFits:sizeRange]).onMainThread(); - - if (!stubbedCalculatedLayoutDidChange) { - OCMExpect([node.mock calculatedLayoutDidChange]).onMainThread(); - } - }]; - - // Trigger CA layout pass. - [window layoutIfNeeded]; - - // Make sure it went through. - [self verifyFixture:fixture]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASLayoutFlatteningTests.mm b/submodules/AsyncDisplayKit/Tests/ASLayoutFlatteningTests.mm deleted file mode 100644 index 0a1fa02261..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASLayoutFlatteningTests.mm +++ /dev/null @@ -1,206 +0,0 @@ -// -// ASLayoutFlatteningTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import -#import -#import - -@interface ASLayoutFlatteningTests : XCTestCase -@end - -@implementation ASLayoutFlatteningTests - -static ASLayout *layoutWithCustomPosition(CGPoint position, id element, NSArray *sublayouts) -{ - return [ASLayout layoutWithLayoutElement:element - size:CGSizeMake(100, 100) - position:position - sublayouts:sublayouts]; -} - -static ASLayout *layout(id element, NSArray *sublayouts) -{ - return layoutWithCustomPosition(CGPointZero, element, sublayouts); -} - -- (void)testThatFlattenedLayoutContainsOnlyDirectSubnodesInValidOrder -{ - ASLayout *flattenedLayout; - - @autoreleasepool { - NSMutableArray *subnodes = [NSMutableArray array]; - NSMutableArray *layoutSpecs = [NSMutableArray array]; - NSMutableArray *indirectSubnodes = [NSMutableArray array]; - - ASDisplayNode *(^subnode)(void) = ^ASDisplayNode *() { [subnodes addObject:[[ASDisplayNode alloc] init]]; return [subnodes lastObject]; }; - ASLayoutSpec *(^layoutSpec)(void) = ^ASLayoutSpec *() { [layoutSpecs addObject:[[ASLayoutSpec alloc] init]]; return [layoutSpecs lastObject]; }; - ASDisplayNode *(^indirectSubnode)(void) = ^ASDisplayNode *() { [indirectSubnodes addObject:[[ASDisplayNode alloc] init]]; return [indirectSubnodes lastObject]; }; - - NSArray *sublayouts = @[ - layout(subnode(), @[ - layout(indirectSubnode(), @[]), - ]), - layout(layoutSpec(), @[ - layout(subnode(), @[]), - layout(layoutSpec(), @[ - layout(layoutSpec(), @[]), - layout(subnode(), @[]), - ]), - layout(layoutSpec(), @[]), - ]), - layout(layoutSpec(), @[ - layout(subnode(), @[ - layout(indirectSubnode(), @[]), - layout(indirectSubnode(), @[ - layout(indirectSubnode(), @[]) - ]), - ]) - ]), - layout(subnode(), @[]), - ]; - - ASDisplayNode *rootNode = [[ASDisplayNode alloc] init]; - ASLayout *originalLayout = [ASLayout layoutWithLayoutElement:rootNode - size:CGSizeMake(1000, 1000) - sublayouts:sublayouts]; - flattenedLayout = [originalLayout filteredNodeLayoutTree]; - NSArray *flattenedSublayouts = flattenedLayout.sublayouts; - NSUInteger sublayoutsCount = flattenedSublayouts.count; - - XCTAssertEqualObjects(originalLayout.layoutElement, flattenedLayout.layoutElement, @"The root node should be reserved"); - XCTAssertTrue(ASPointIsNull(flattenedLayout.position), @"Position of the root layout should be null"); - XCTAssertEqual(subnodes.count, sublayoutsCount, @"Flattened layout should only contain direct subnodes"); - for (int i = 0; i < sublayoutsCount; i++) { - XCTAssertEqualObjects(subnodes[i], flattenedSublayouts[i].layoutElement, @"Sublayouts should be in correct order (flattened in DFS fashion)"); - } - } - - for (ASLayout *sublayout in flattenedLayout.sublayouts) { - XCTAssertNotNil(sublayout.layoutElement, @"Sublayout elements should be retained"); - XCTAssertEqual(0, sublayout.sublayouts.count, @"Sublayouts should not have their own sublayouts"); - } -} - -#pragma mark - Test reusing ASLayouts while flattening - -- (void)testThatLayoutWithNonNullPositionIsNotReused -{ - ASDisplayNode *rootNode = [[ASDisplayNode alloc] init]; - ASLayout *originalLayout = layoutWithCustomPosition(CGPointMake(10, 10), rootNode, @[]); - ASLayout *flattenedLayout = [originalLayout filteredNodeLayoutTree]; - XCTAssertNotEqualObjects(originalLayout, flattenedLayout, "@Layout should be reused"); - XCTAssertTrue(ASPointIsNull(flattenedLayout.position), @"Position of a root layout should be null"); -} - -- (void)testThatLayoutWithNullPositionAndNoSublayoutIsReused -{ - ASDisplayNode *rootNode = [[ASDisplayNode alloc] init]; - ASLayout *originalLayout = layoutWithCustomPosition(ASPointNull, rootNode, @[]); - ASLayout *flattenedLayout = [originalLayout filteredNodeLayoutTree]; - XCTAssertEqualObjects(originalLayout, flattenedLayout, "@Layout should be reused"); - XCTAssertTrue(ASPointIsNull(flattenedLayout.position), @"Position of a root layout should be null"); -} - -- (void)testThatLayoutWithNullPositionAndFlattenedNodeSublayoutsIsReused -{ - ASLayout *flattenedLayout; - - @autoreleasepool { - ASDisplayNode *rootNode = [[ASDisplayNode alloc] init]; - NSMutableArray *subnodes = [NSMutableArray array]; - ASDisplayNode *(^subnode)(void) = ^ASDisplayNode *() { [subnodes addObject:[[ASDisplayNode alloc] init]]; return [subnodes lastObject]; }; - ASLayout *originalLayout = layoutWithCustomPosition(ASPointNull, - rootNode, - @[ - layoutWithCustomPosition(CGPointMake(10, 10), subnode(), @[]), - layoutWithCustomPosition(CGPointMake(20, 20), subnode(), @[]), - layoutWithCustomPosition(CGPointMake(30, 30), subnode(), @[]), - ]); - flattenedLayout = [originalLayout filteredNodeLayoutTree]; - XCTAssertEqualObjects(originalLayout, flattenedLayout, "@Layout should be reused"); - XCTAssertTrue(ASPointIsNull(flattenedLayout.position), @"Position of the root layout should be null"); - } - - for (ASLayout *sublayout in flattenedLayout.sublayouts) { - XCTAssertNotNil(sublayout.layoutElement, @"Sublayout elements should be retained"); - XCTAssertEqual(0, sublayout.sublayouts.count, @"Sublayouts should not have their own sublayouts"); - } -} - -- (void)testThatLayoutWithNullPositionAndUnflattenedSublayoutsIsNotReused -{ - ASLayout *flattenedLayout; - - @autoreleasepool { - ASDisplayNode *rootNode = [[ASDisplayNode alloc] init]; - NSMutableArray *subnodes = [NSMutableArray array]; - NSMutableArray *layoutSpecs = [NSMutableArray array]; - NSMutableArray *indirectSubnodes = [NSMutableArray array]; - NSMutableArray *reusedLayouts = [NSMutableArray array]; - - ASDisplayNode *(^subnode)(void) = ^ASDisplayNode *() { [subnodes addObject:[[ASDisplayNode alloc] init]]; return [subnodes lastObject]; }; - ASLayoutSpec *(^layoutSpec)(void) = ^ASLayoutSpec *() { [layoutSpecs addObject:[[ASLayoutSpec alloc] init]]; return [layoutSpecs lastObject]; }; - ASDisplayNode *(^indirectSubnode)(void) = ^ASDisplayNode *() { [indirectSubnodes addObject:[[ASDisplayNode alloc] init]]; return [indirectSubnodes lastObject]; }; - ASLayout *(^reusedLayout)(ASDisplayNode *) = ^ASLayout *(ASDisplayNode *subnode) { [reusedLayouts addObject:layout(subnode, @[])]; return [reusedLayouts lastObject]; }; - - /* - * Layouts with sublayouts of both nodes and layout specs should not be reused. - * However, all flattened node sublayouts with valid position should be reused. - */ - ASLayout *originalLayout = layoutWithCustomPosition(ASPointNull, - rootNode, - @[ - reusedLayout(subnode()), - // The 2 node sublayouts below should be reused although they are in a layout spec sublayout. - // That is because each of them have an absolute position of zero. - // This case can happen, for example, as the result of a background/overlay layout spec. - layout(layoutSpec(), @[ - reusedLayout(subnode()), - reusedLayout(subnode()) - ]), - layout(subnode(), @[ - layout(layoutSpec(), @[]) - ]), - layout(subnode(), @[ - layout(indirectSubnode(), @[]) - ]), - layoutWithCustomPosition(CGPointMake(10, 10), subnode(), @[]), - // The 2 node sublayouts below shouldn't be reused because they have non-zero absolute positions. - layoutWithCustomPosition(CGPointMake(20, 20), layoutSpec(), @[ - layout(subnode(), @[]), - layout(subnode(), @[]) - ]), - ]); - flattenedLayout = [originalLayout filteredNodeLayoutTree]; - NSArray *flattenedSublayouts = flattenedLayout.sublayouts; - NSUInteger sublayoutsCount = flattenedSublayouts.count; - - XCTAssertNotEqualObjects(originalLayout, flattenedLayout, @"Original layout should not be reused"); - XCTAssertEqualObjects(originalLayout.layoutElement, flattenedLayout.layoutElement, @"The root node should be reserved"); - XCTAssertTrue(ASPointIsNull(flattenedLayout.position), @"Position of the root layout should be null"); - XCTAssertTrue(reusedLayouts.count <= sublayoutsCount, @"Some sublayouts can't be reused"); - XCTAssertEqual(subnodes.count, sublayoutsCount, @"Flattened layout should only contain direct subnodes"); - int numOfActualReusedLayouts = 0; - for (int i = 0; i < sublayoutsCount; i++) { - ASLayout *sublayout = flattenedSublayouts[i]; - XCTAssertEqualObjects(subnodes[i], sublayout.layoutElement, @"Sublayouts should be in correct order (flattened in DFS fashion)"); - if ([reusedLayouts containsObject:sublayout]) { - numOfActualReusedLayouts++; - } - } - XCTAssertEqual(numOfActualReusedLayouts, reusedLayouts.count, @"Should reuse all layouts that can be reused"); - } - - for (ASLayout *sublayout in flattenedLayout.sublayouts) { - XCTAssertNotNil(sublayout.layoutElement, @"Sublayout elements should be retained"); - XCTAssertEqual(0, sublayout.sublayouts.count, @"Sublayouts should not have their own sublayouts"); - } -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASLayoutSpecSnapshotTestsHelper.h b/submodules/AsyncDisplayKit/Tests/ASLayoutSpecSnapshotTestsHelper.h deleted file mode 100644 index 740017ee9e..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASLayoutSpecSnapshotTestsHelper.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// ASLayoutSpecSnapshotTestsHelper.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASSnapshotTestCase.h" -#import - -@class ASLayoutSpec; - -@interface ASLayoutSpecSnapshotTestCase: ASSnapshotTestCase -/** - Test the layout spec or records a snapshot if recordMode is YES. - @param layoutSpec The layout spec under test or to snapshot - @param sizeRange The size range used to calculate layout of the given layout spec. - @param subnodes An array of ASDisplayNodes used within the layout spec. - @param identifier An optional identifier, used to identify this snapshot test. - - @discussion In order to make the layout spec visible, it is embeded to a ASDisplayNode host. - Any subnodes used within the layout spec must be provided. - They will be added to the host in the same order as the array. - */ -- (void)testLayoutSpec:(ASLayoutSpec *)layoutSpec - sizeRange:(ASSizeRange)sizeRange - subnodes:(NSArray *)subnodes - identifier:(NSString *)identifier; -@end - -__attribute__((overloadable)) static inline ASDisplayNode *ASDisplayNodeWithBackgroundColor(UIColor *backgroundColor, CGSize size) { - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.layerBacked = YES; - node.backgroundColor = backgroundColor; - node.style.width = ASDimensionMakeWithPoints(size.width); - node.style.height = ASDimensionMakeWithPoints(size.height); - return node; -} - -__attribute__((overloadable)) static inline ASDisplayNode *ASDisplayNodeWithBackgroundColor(UIColor *backgroundColor) -{ - return ASDisplayNodeWithBackgroundColor(backgroundColor, CGSizeZero); -} diff --git a/submodules/AsyncDisplayKit/Tests/ASLayoutSpecSnapshotTestsHelper.mm b/submodules/AsyncDisplayKit/Tests/ASLayoutSpecSnapshotTestsHelper.mm deleted file mode 100644 index dec82d4c39..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASLayoutSpecSnapshotTestsHelper.mm +++ /dev/null @@ -1,62 +0,0 @@ -// -// ASLayoutSpecSnapshotTestsHelper.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASLayoutSpecSnapshotTestsHelper.h" - -#import -#import -#import -#import - -@interface ASTestNode : ASDisplayNode -@property (nonatomic, nullable) ASLayoutSpec *layoutSpecUnderTest; -@end - -@implementation ASLayoutSpecSnapshotTestCase - -- (void)setUp -{ - [super setUp]; - self.recordMode = NO; -} - -- (void)testLayoutSpec:(ASLayoutSpec *)layoutSpec - sizeRange:(ASSizeRange)sizeRange - subnodes:(NSArray *)subnodes - identifier:(NSString *)identifier -{ - ASTestNode *node = [[ASTestNode alloc] init]; - - for (ASDisplayNode *subnode in subnodes) { - [node addSubnode:subnode]; - } - - node.layoutSpecUnderTest = layoutSpec; - - ASDisplayNodeSizeToFitSizeRange(node, sizeRange); - ASSnapshotVerifyNode(node, identifier); -} - -@end - -@implementation ASTestNode -- (instancetype)init -{ - if (self = [super init]) { - self.layerBacked = YES; - } - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - return _layoutSpecUnderTest; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASLayoutSpecTests.mm b/submodules/AsyncDisplayKit/Tests/ASLayoutSpecTests.mm deleted file mode 100644 index ff13b66553..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASLayoutSpecTests.mm +++ /dev/null @@ -1,112 +0,0 @@ -// -// ASLayoutSpecTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import -#import - -#pragma mark - ASDKExtendedLayoutSpec - -/* - * Extend the ASDKExtendedLayoutElement - * It adds a - * - primitive / CGFloat (extendedWidth) - * - struct / ASDimension (extendedDimension) - * - primitive / ASStackLayoutDirection (extendedDirection) - */ -@protocol ASDKExtendedLayoutElement -@property (nonatomic) CGFloat extendedWidth; -@property (nonatomic) ASDimension extendedDimension; -@property (copy, nonatomic) NSString *extendedName; -@end - -/* - * Let the ASLayoutElementStyle conform to the ASDKExtendedLayoutElement protocol and add properties implementation - */ -@interface ASLayoutElementStyle (ASDKExtendedLayoutElement) -@end - -@implementation ASLayoutElementStyle (ASDKExtendedLayoutElement) -ASDK_STYLE_PROP_PRIM(CGFloat, extendedWidth, setExtendedWidth, 0); -ASDK_STYLE_PROP_STR(ASDimension, extendedDimension, setExtendedDimension, ASDimensionMake(ASDimensionUnitAuto, 0)); -ASDK_STYLE_PROP_OBJ(NSString *, extendedName, setExtendedName); -@end - -/* - * As the ASLayoutElementStyle conforms to the ASDKExtendedLayoutElement protocol now, ASDKExtendedLayoutElement properties - * can be accessed in ASDKExtendedLayoutSpec - */ -@interface ASDKExtendedLayoutSpec : ASLayoutSpec -@end - -@implementation ASDKExtendedLayoutSpec - -- (void)doSetSomeStyleValuesToChildren -{ - for (id child in self.children) { - child.style.extendedWidth = 100; - child.style.extendedDimension = ASDimensionMake(100); - child.style.extendedName = @"ASDK"; - } -} - -- (void)doUseSomeStyleValuesFromChildren -{ - for (id child in self.children) { - __unused CGFloat extendedWidth = child.style.extendedWidth; - __unused ASDimension extendedDimension = child.style.extendedDimension; - __unused NSString *extendedName = child.style.extendedName; - } -} - -@end - - -#pragma mark - ASLayoutSpecTests - -@interface ASLayoutSpecTests : XCTestCase - -@end - -@implementation ASLayoutSpecTests - -- (void)testSetPrimitiveToExtendedStyle -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.style.extendedWidth = 100; - XCTAssert(node.style.extendedWidth == 100, @"Primitive value should be set on extended style"); -} - -- (void)testSetStructToExtendedStyle -{ - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.style.extendedDimension = ASDimensionMake(100); - XCTAssertTrue(ASDimensionEqualToDimension(node.style.extendedDimension, ASDimensionMake(100)), @"Struct should be set on extended style"); -} - -- (void)testSetObjectToExtendedStyle -{ - NSString *extendedName = @"ASDK"; - - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.style.extendedName = extendedName; - XCTAssertEqualObjects(node.style.extendedName, extendedName, @"Object should be set on extended style"); -} - - -- (void)testUseOfExtendedStyleProperties -{ - ASDKExtendedLayoutSpec *extendedLayoutSpec = [ASDKExtendedLayoutSpec new]; - extendedLayoutSpec.children = @[[[ASDisplayNode alloc] init], [[ASDisplayNode alloc] init]]; - XCTAssertNoThrow([extendedLayoutSpec doSetSomeStyleValuesToChildren]); - XCTAssertNoThrow([extendedLayoutSpec doUseSomeStyleValuesFromChildren]); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASLayoutTestNode.h b/submodules/AsyncDisplayKit/Tests/ASLayoutTestNode.h deleted file mode 100644 index 231447abe1..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASLayoutTestNode.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// ASLayoutTestNode.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface ASLayoutTestNode : ASDisplayNode - -/** - * Mocking ASDisplayNodes directly isn't very safe because when you pump mock objects - * into the guts of the framework, bad things happen e.g. direct-ivar-access on mock - * objects will return garbage data. - * - * Instead we create a strict mock for each node, and forward a selected set of calls to it. - */ -@property (nonatomic, readonly) id mock; - -/** - * The size that this node will return in calculateLayoutThatFits (if it doesn't have a layoutSpecBlock). - * - * Changing this value will call -setNeedsLayout on the node. - */ -@property (nonatomic) CGSize testSize; - -/** - * Generate a layout based on the frame of this node and its subtree. - * - * The root layout will be unpositioned. This is so that the returned layout can be directly - * compared to `calculatedLayout` - */ -- (ASLayout *)currentLayoutBasedOnFrames; - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASLayoutTestNode.mm b/submodules/AsyncDisplayKit/Tests/ASLayoutTestNode.mm deleted file mode 100644 index 2805aa36c9..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASLayoutTestNode.mm +++ /dev/null @@ -1,88 +0,0 @@ -// -// ASLayoutTestNode.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASLayoutTestNode.h" -#import -#import "OCMockObject+ASAdditions.h" - -@implementation ASLayoutTestNode - -- (instancetype)init -{ - if (self = [super init]) { - _mock = OCMStrictClassMock([ASDisplayNode class]); - - // If errors occur (e.g. unexpected method) we need to quickly figure out - // which node is at fault, so we inject the node name into the mock instance - // description. - __weak __typeof(self) weakSelf = self; - [_mock setModifyDescriptionBlock:^(id mock, NSString *baseDescription){ - return [NSString stringWithFormat:@"Mock(%@)", weakSelf.description]; - }]; - } - return self; -} - -- (ASLayout *)currentLayoutBasedOnFrames -{ - return [self _currentLayoutBasedOnFramesForRootNode:YES]; -} - -- (ASLayout *)_currentLayoutBasedOnFramesForRootNode:(BOOL)isRootNode -{ - const auto sublayouts = [[NSMutableArray alloc] init]; - for (ASLayoutTestNode *subnode in self.subnodes) { - [sublayouts addObject:[subnode _currentLayoutBasedOnFramesForRootNode:NO]]; - } - CGPoint rootPosition = isRootNode ? ASPointNull : self.frame.origin; - return [ASLayout layoutWithLayoutElement:self size:self.frame.size position:rootPosition sublayouts:sublayouts]; -} - -- (void)setTestSize:(CGSize)testSize -{ - if (!CGSizeEqualToSize(testSize, _testSize)) { - _testSize = testSize; - [self setNeedsLayout]; - } -} - -- (ASLayout *)calculateLayoutThatFits:(ASSizeRange)constrainedSize -{ - [_mock calculateLayoutThatFits:constrainedSize]; - - // If we have a layout spec block, or no test size, return super. - if (self.layoutSpecBlock || CGSizeEqualToSize(self.testSize, CGSizeZero)) { - return [super calculateLayoutThatFits:constrainedSize]; - } else { - // Interestingly, the infra will auto-clamp sizes from calculateSizeThatFits, but not from calculateLayoutThatFits. - const auto size = ASSizeRangeClamp(constrainedSize, self.testSize); - return [ASLayout layoutWithLayoutElement:self size:size]; - } -} - -#pragma mark - Forwarding to mock - -- (void)calculatedLayoutDidChange -{ - [_mock calculatedLayoutDidChange]; - [super calculatedLayoutDidChange]; -} - -- (void)didCompleteLayoutTransition:(id)context -{ - [_mock didCompleteLayoutTransition:context]; - [super didCompleteLayoutTransition:context]; -} - -- (void)animateLayoutTransition:(id)context -{ - [_mock animateLayoutTransition:context]; - [super animateLayoutTransition:context]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASMultiplexImageNodeTests.mm b/submodules/AsyncDisplayKit/Tests/ASMultiplexImageNodeTests.mm deleted file mode 100644 index caf86bb48e..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASMultiplexImageNodeTests.mm +++ /dev/null @@ -1,265 +0,0 @@ -// -// ASMultiplexImageNodeTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "NSInvocation+ASTestHelpers.h" - -#import -#import -#import - -#import - -@interface ASMultiplexImageNodeTests : XCTestCase -{ -@private - id mockCache; - id mockDownloader; - id mockDataSource; - id mockDelegate; - ASMultiplexImageNode *imageNode; -} - -@end - -@implementation ASMultiplexImageNodeTests - -#pragma mark - Helpers. - -- (NSURL *)_testImageURL -{ - return [[NSBundle bundleForClass:[self class]] URLForResource:@"logo-square" - withExtension:@"png" - subdirectory:@"TestResources"]; -} - -- (UIImage *)_testImage -{ - return [UIImage imageWithContentsOfFile:[self _testImageURL].path]; -} - -#pragma mark - Unit tests. - -// TODO: add tests for delegate display notifications - -- (void)setUp -{ - [super setUp]; - - mockCache = OCMStrictProtocolMock(@protocol(ASImageCacheProtocol)); - [mockCache setExpectationOrderMatters:YES]; - mockDownloader = OCMStrictProtocolMock(@protocol(ASImageDownloaderProtocol)); - [mockDownloader setExpectationOrderMatters:YES]; - imageNode = [[ASMultiplexImageNode alloc] initWithCache:mockCache downloader:mockDownloader]; - - mockDataSource = OCMStrictProtocolMock(@protocol(ASMultiplexImageNodeDataSource)); - [mockDataSource setExpectationOrderMatters:YES]; - imageNode.dataSource = mockDataSource; - - mockDelegate = OCMProtocolMock(@protocol(ASMultiplexImageNodeDelegate)); - [mockDelegate setExpectationOrderMatters:YES]; - imageNode.delegate = mockDelegate; -} - -- (void)tearDown -{ - OCMVerifyAll(mockDelegate); - OCMVerifyAll(mockDataSource); - OCMVerifyAll(mockDownloader); - OCMVerifyAll(mockCache); - [super tearDown]; -} - -- (void)testDataSourceImageMethod -{ - NSNumber *imageIdentifier = @1; - - OCMExpect([mockDataSource multiplexImageNode:imageNode imageForImageIdentifier:imageIdentifier]) - .andReturn([self _testImage]); - - imageNode.imageIdentifiers = @[imageIdentifier]; - [imageNode reloadImageIdentifierSources]; - - // Also expect it to be loaded immediately. - XCTAssertEqualObjects(imageNode.loadedImageIdentifier, imageIdentifier, @"imageIdentifier was not loaded"); - // And for the image to be equivalent to the image we provided. - XCTAssertEqualObjects(UIImagePNGRepresentation(imageNode.image), - UIImagePNGRepresentation([self _testImage]), - @"Loaded image isn't the one we provided"); -} - -- (void)testDataSourceURLMethod -{ - NSNumber *imageIdentifier = @1; - - // First expect to be hit for the image directly, and fail to return it. - OCMExpect([mockDataSource multiplexImageNode:imageNode imageForImageIdentifier:imageIdentifier]) - .andReturn((id)nil); - // BUG: -imageForImageIdentifier is called twice in this case (where we return nil). - OCMExpect([mockDataSource multiplexImageNode:imageNode imageForImageIdentifier:imageIdentifier]) - .andReturn((id)nil); - // Then expect to be hit for the URL, which we'll return. - OCMExpect([mockDataSource multiplexImageNode:imageNode URLForImageIdentifier:imageIdentifier]) - .andReturn([self _testImageURL]); - - // Mock the cache to do a cache-hit for the test image URL. - OCMExpect([mockCache cachedImageWithURL:[self _testImageURL] callbackQueue:OCMOCK_ANY completion:[OCMArg isNotNil]]) - .andDo(^(NSInvocation *inv) { - ASImageCacherCompletion completionBlock = [inv as_argumentAtIndexAsObject:4]; - completionBlock([self _testImage]); - }); - - imageNode.imageIdentifiers = @[imageIdentifier]; - // Kick off loading. - [imageNode reloadImageIdentifierSources]; - - // Also expect it to be loaded immediately. - XCTAssertEqualObjects(imageNode.loadedImageIdentifier, imageIdentifier, @"imageIdentifier was not loaded"); - // And for the image to be equivalent to the image we provided. - XCTAssertEqualObjects(UIImagePNGRepresentation(imageNode.image), - UIImagePNGRepresentation([self _testImage]), - @"Loaded image isn't the one we provided"); -} - -- (void)testAddLowerQualityImageIdentifier -{ - // Adding a lower quality image identifier should not cause any loading. - NSNumber *highResIdentifier = @2, *lowResIdentifier = @1; - - OCMExpect([mockDataSource multiplexImageNode:imageNode imageForImageIdentifier:highResIdentifier]) - .andReturn([self _testImage]); - imageNode.imageIdentifiers = @[highResIdentifier]; - [imageNode reloadImageIdentifierSources]; - - // At this point, we should have the high-res identifier loaded and the DS should have been hit once. - XCTAssertEqualObjects(imageNode.loadedImageIdentifier, highResIdentifier, @"High res identifier should be loaded."); - - // BUG: We should not get another -imageForImageIdentifier:highResIdentifier. - OCMExpect([mockDataSource multiplexImageNode:imageNode imageForImageIdentifier:highResIdentifier]) - .andReturn([self _testImage]); - - imageNode.imageIdentifiers = @[highResIdentifier, lowResIdentifier]; - [imageNode reloadImageIdentifierSources]; - - // At this point the high-res should still be loaded, and the data source should not have been hit again (see BUG above). - XCTAssertEqualObjects(imageNode.loadedImageIdentifier, highResIdentifier, @"High res identifier should be loaded."); -} - -- (void)testAddHigherQualityImageIdentifier -{ - NSNumber *lowResIdentifier = @1, *highResIdentifier = @2; - - OCMExpect([mockDataSource multiplexImageNode:imageNode imageForImageIdentifier:lowResIdentifier]) - .andReturn([self _testImage]); - - imageNode.imageIdentifiers = @[lowResIdentifier]; - [imageNode reloadImageIdentifierSources]; - - // At this point, we should have the low-res identifier loaded and the DS should have been hit once. - XCTAssertEqualObjects(imageNode.loadedImageIdentifier, lowResIdentifier, @"Low res identifier should be loaded."); - - OCMExpect([mockDataSource multiplexImageNode:imageNode imageForImageIdentifier:highResIdentifier]) - .andReturn([self _testImage]); - - imageNode.imageIdentifiers = @[highResIdentifier, lowResIdentifier]; - [imageNode reloadImageIdentifierSources]; - - // At this point the high-res should be loaded, and the data source should been hit twice. - XCTAssertEqualObjects(imageNode.loadedImageIdentifier, highResIdentifier, @"High res identifier should be loaded."); -} - -- (void)testIntermediateImageDownloading -{ - imageNode.downloadsIntermediateImages = YES; - - // Let them call URLForImageIdentifier all they want. - OCMStub([mockDataSource multiplexImageNode:imageNode URLForImageIdentifier:[OCMArg isNotNil]]); - - // Set up a few identifiers to load. - NSInteger identifierCount = 5; - NSMutableArray *imageIdentifiers = [NSMutableArray array]; - for (NSInteger identifier = identifierCount; identifier > 0; identifier--) { - [imageIdentifiers addObject:@(identifier)]; - } - - // Create the array of IDs in the order we expect them to get -imageForImageIdentifier: - // BUG: The second to last ID (the last one that returns nil) will get -imageForImageIdentifier: called - // again after the last ID (the one that returns non-nil). - id secondToLastID = imageIdentifiers[identifierCount - 2]; - NSArray *imageIdentifiersThatWillBeCalled = [imageIdentifiers arrayByAddingObject:secondToLastID]; - - for (id imageID in imageIdentifiersThatWillBeCalled) { - // Return nil for everything except the worst ID. - OCMExpect([mockDataSource multiplexImageNode:imageNode imageForImageIdentifier:imageID]) - .andDo(^(NSInvocation *inv){ - id imageID = [inv as_argumentAtIndexAsObject:3]; - if ([imageID isEqual:imageIdentifiers.lastObject]) { - [inv as_setReturnValueWithObject:[self _testImage]]; - } else { - [inv as_setReturnValueWithObject:nil]; - } - }); - } - - imageNode.imageIdentifiers = imageIdentifiers; - [imageNode reloadImageIdentifierSources]; -} - -- (void)testUncachedDownload -{ - // Mock a cache miss. - OCMExpect([mockCache cachedImageWithURL:[self _testImageURL] callbackQueue:OCMOCK_ANY completion:[OCMArg isNotNil]]) - .andDo(^(NSInvocation *inv){ - ASImageCacherCompletion completion = [inv as_argumentAtIndexAsObject:4]; - completion(nil); - }); - - // Mock a 50%-progress URL download. - const CGFloat mockedProgress = 0.5; - OCMExpect([mockDownloader downloadImageWithURL:[self _testImageURL] callbackQueue:OCMOCK_ANY downloadProgress:[OCMArg isNotNil] completion:[OCMArg isNotNil]]) - .andDo(^(NSInvocation *inv){ - // Simulate progress. - ASImageDownloaderProgress progressBlock = [inv as_argumentAtIndexAsObject:4]; - progressBlock(mockedProgress); - - // Simulate completion. - ASImageDownloaderCompletion completionBlock = [inv as_argumentAtIndexAsObject:5]; - completionBlock([self _testImage], nil, nil, nil); - }); - - NSNumber *imageIdentifier = @1; - - // Mock the data source to return nil image, and our test URL. - OCMExpect([mockDataSource multiplexImageNode:imageNode imageForImageIdentifier:imageIdentifier]); - // BUG: Multiplex image node will call imageForImageIdentifier twice if we return nil. - OCMExpect([mockDataSource multiplexImageNode:imageNode imageForImageIdentifier:imageIdentifier]); - OCMExpect([mockDataSource multiplexImageNode:imageNode URLForImageIdentifier:imageIdentifier]) - .andReturn([self _testImageURL]); - - // Mock the delegate to expect start, 50% progress, and completion invocations. - OCMExpect([mockDelegate multiplexImageNode:imageNode didStartDownloadOfImageWithIdentifier:imageIdentifier]); - OCMExpect([mockDelegate multiplexImageNode:imageNode didUpdateDownloadProgress:mockedProgress forImageWithIdentifier:imageIdentifier]); - OCMExpect([mockDelegate multiplexImageNode:imageNode didUpdateImage:[OCMArg isNotNil] withIdentifier:imageIdentifier fromImage:[OCMArg isNil] withIdentifier:[OCMArg isNil]]); - OCMExpect([mockDelegate multiplexImageNode:imageNode didFinishDownloadingImageWithIdentifier:imageIdentifier error:[OCMArg isNil]]); - - imageNode.imageIdentifiers = @[imageIdentifier]; - // Kick off loading. - [imageNode reloadImageIdentifierSources]; - - // Wait until the image is loaded. - [self expectationForPredicate:[NSPredicate predicateWithFormat:@"loadedImageIdentifier = %@", imageIdentifier] evaluatedWithObject:imageNode handler:nil]; - [self waitForExpectationsWithTimeout:30 handler:nil]; -} - -- (void)testThatSettingAnImageExternallyWillThrow -{ - XCTAssertThrows(imageNode.image = [UIImage imageNamed:@""]); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASMutableAttributedStringBuilderTests.mm b/submodules/AsyncDisplayKit/Tests/ASMutableAttributedStringBuilderTests.mm deleted file mode 100644 index 2415dfc626..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASMutableAttributedStringBuilderTests.mm +++ /dev/null @@ -1,78 +0,0 @@ -// -// ASMutableAttributedStringBuilderTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import - -@interface ASMutableAttributedStringBuilderTests : XCTestCase - -@end - -@implementation ASMutableAttributedStringBuilderTests - -- (NSString *)_string -{ - return @"Normcore PBR hella, viral slow-carb mustache chillwave church-key cornhole messenger bag swag vinyl biodiesel ethnic. Fashion axe messenger bag raw denim street art. Flannel Wes Anderson normcore church-key 8-bit. Master cleanse four loko try-hard Carles stumptown ennui, twee literally wayfarers kitsch tofu PBR. Cliche organic post-ironic Wes Anderson kale chips fashion axe. Narwhal Blue Bottle sustainable, Odd Future Godard sriracha banjo disrupt Marfa irony pug Wes Anderson YOLO yr church-key. Mlkshk Intelligentsia semiotics quinoa, butcher meggings wolf Bushwick keffiyeh ethnic pour-over Pinterest letterpress."; -} - -- (ASMutableAttributedStringBuilder *)_builder -{ - return [[ASMutableAttributedStringBuilder alloc] initWithString:[self _string]]; -} - -- (NSRange)_randomizedRangeForStringBuilder:(ASMutableAttributedStringBuilder *)builder -{ - NSUInteger loc = arc4random() % (builder.length - 1); - NSUInteger len = arc4random() % (builder.length - loc); - len = ((len > 0) ? len : 1); - return NSMakeRange(loc, len); -} - -- (void)testSimpleAttributions -{ - // Add a attributes, and verify that they get set on the correct locations. - for (int i = 0; i < 100; i++) { - ASMutableAttributedStringBuilder *builder = [self _builder]; - NSRange range = [self _randomizedRangeForStringBuilder:builder]; - NSString *keyValue = [NSString stringWithFormat:@"%d", i]; - [builder addAttribute:keyValue value:keyValue range:range]; - NSAttributedString *attrStr = [builder composedAttributedString]; - XCTAssertEqual(builder.length, attrStr.length, @"out string should have same length as builder"); - __block BOOL found = NO; - [attrStr enumerateAttributesInRange:NSMakeRange(0, attrStr.length) options:0 usingBlock:^(NSDictionary *attrs, NSRange r, BOOL *stop) { - if ([attrs[keyValue] isEqualToString:keyValue]) { - XCTAssertTrue(NSEqualRanges(range, r), @"enumerated range %@ should be equal to the set range %@", NSStringFromRange(r), NSStringFromRange(range)); - found = YES; - } - }]; - XCTAssertTrue(found, @"enumeration should have found the attribute we set"); - } -} - -- (void)testSetOverAdd -{ - ASMutableAttributedStringBuilder *builder = [self _builder]; - NSRange addRange = NSMakeRange(0, builder.length); - NSRange setRange = NSMakeRange(0, 1); - [builder addAttribute:@"attr" value:@"val1" range:addRange]; - [builder setAttributes:@{@"attr" : @"val2"} range:setRange]; - NSAttributedString *attrStr = [builder composedAttributedString]; - NSRange setRangeOut; - NSString *setAttr = [attrStr attribute:@"attr" atIndex:0 effectiveRange:&setRangeOut]; - XCTAssertTrue(NSEqualRanges(setRange, setRangeOut), @"The out set range should equal the range we used originally"); - XCTAssertEqualObjects(setAttr, @"val2", @"the set value should be val2"); - - NSRange addRangeOut; - NSString *addAttr = [attrStr attribute:@"attr" atIndex:2 effectiveRange:&addRangeOut]; - XCTAssertTrue(NSEqualRanges(NSMakeRange(1, builder.length - 1), addRangeOut), @"the add range should only cover beyond the set range"); - XCTAssertEqualObjects(addAttr, @"val1", @"the added attribute should be present at index 2"); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASNavigationControllerTests.mm b/submodules/AsyncDisplayKit/Tests/ASNavigationControllerTests.mm deleted file mode 100644 index d9ed2464c0..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASNavigationControllerTests.mm +++ /dev/null @@ -1,52 +0,0 @@ -// -// ASNavigationControllerTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import - -@interface ASNavigationControllerTests : XCTestCase -@end - -@implementation ASNavigationControllerTests - -- (void)testSetViewControllers { - ASViewController *firstController = [ASViewController new]; - ASViewController *secondController = [ASViewController new]; - NSArray *expectedViewControllerStack = @[firstController, secondController]; - ASNavigationController *navigationController = [ASNavigationController new]; - [navigationController setViewControllers:@[firstController, secondController]]; - XCTAssertEqual(navigationController.topViewController, secondController); - XCTAssertEqual(navigationController.visibleViewController, secondController); - XCTAssertTrue([navigationController.viewControllers isEqualToArray:expectedViewControllerStack]); -} - -- (void)testPopViewController { - ASViewController *firstController = [ASViewController new]; - ASViewController *secondController = [ASViewController new]; - NSArray *expectedViewControllerStack = @[firstController]; - ASNavigationController *navigationController = [ASNavigationController new]; - [navigationController setViewControllers:@[firstController, secondController]]; - [navigationController popViewControllerAnimated:false]; - XCTAssertEqual(navigationController.topViewController, firstController); - XCTAssertEqual(navigationController.visibleViewController, firstController); - XCTAssertTrue([navigationController.viewControllers isEqualToArray:expectedViewControllerStack]); -} - -- (void)testPushViewController { - ASViewController *firstController = [ASViewController new]; - ASViewController *secondController = [ASViewController new]; - NSArray *expectedViewControllerStack = @[firstController, secondController]; - ASNavigationController *navigationController = [[ASNavigationController new] initWithRootViewController:firstController]; - [navigationController pushViewController:secondController animated:false]; - XCTAssertEqual(navigationController.topViewController, secondController); - XCTAssertEqual(navigationController.visibleViewController, secondController); - XCTAssertTrue([navigationController.viewControllers isEqualToArray:expectedViewControllerStack]); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASNetworkImageNodeTests.mm b/submodules/AsyncDisplayKit/Tests/ASNetworkImageNodeTests.mm deleted file mode 100644 index f794ba9e7f..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASNetworkImageNodeTests.mm +++ /dev/null @@ -1,135 +0,0 @@ -// -// ASNetworkImageNodeTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import -#import -#import - -@interface ASNetworkImageNodeTests : XCTestCase - -@end - -@interface ASTestImageDownloader : NSObject -@end -@interface ASTestImageCache : NSObject -@end - -@implementation ASNetworkImageNodeTests { - ASNetworkImageNode *node; - id downloader; - id cache; -} - -- (void)setUp -{ - [super setUp]; - cache = [OCMockObject partialMockForObject:[[ASTestImageCache alloc] init]]; - downloader = [OCMockObject partialMockForObject:[[ASTestImageDownloader alloc] init]]; - node = [[ASNetworkImageNode alloc] initWithCache:cache downloader:downloader]; -} - -/// Test is flaky: https://github.com/facebook/AsyncDisplayKit/issues/2898 -- (void)DISABLED_testThatProgressBlockIsSetAndClearedCorrectlyOnVisibility -{ - node.URL = [NSURL URLWithString:@"http://imageA"]; - - // Enter preload range, wait for download start. - [[[downloader expect] andForwardToRealObject] downloadImageWithURL:[OCMArg isNotNil] callbackQueue:OCMOCK_ANY downloadProgress:OCMOCK_ANY completion:OCMOCK_ANY]; - [node enterInterfaceState:ASInterfaceStatePreload]; - [downloader verifyWithDelay:5]; - - // Make the node visible. - [[downloader expect] setProgressImageBlock:[OCMArg isNotNil] callbackQueue:OCMOCK_ANY withDownloadIdentifier:@0]; - [node enterInterfaceState:ASInterfaceStateInHierarchy]; - [downloader verify]; - - // Make the node invisible. - [[downloader expect] setProgressImageBlock:[OCMArg isNil] callbackQueue:OCMOCK_ANY withDownloadIdentifier:@0]; - [node exitInterfaceState:ASInterfaceStateInHierarchy]; - [downloader verify]; -} - -- (void)testThatProgressBlockIsSetAndClearedCorrectlyOnChangeURL -{ - [node layer]; - [node enterInterfaceState:ASInterfaceStateInHierarchy]; - - // Set URL while visible, should set progress block - [[downloader expect] setProgressImageBlock:[OCMArg isNotNil] callbackQueue:OCMOCK_ANY withDownloadIdentifier:@0]; - node.URL = [NSURL URLWithString:@"http://imageA"]; - [downloader verifyWithDelay:5]; - - // Change URL while visible, should clear prior block and set new one - [[downloader expect] setProgressImageBlock:[OCMArg isNil] callbackQueue:OCMOCK_ANY withDownloadIdentifier:@0]; - [[downloader expect] cancelImageDownloadForIdentifier:@0]; - [[downloader expect] setProgressImageBlock:[OCMArg isNotNil] callbackQueue:OCMOCK_ANY withDownloadIdentifier:@1]; - node.URL = [NSURL URLWithString:@"http://imageB"]; - [downloader verifyWithDelay:5]; -} - -- (void)testThatSettingAnImageWillStayForEnteringAndExitingPreloadState -{ - UIImage *image = [[UIImage alloc] init]; - ASNetworkImageNode *networkImageNode = [[ASNetworkImageNode alloc] init]; - networkImageNode.image = image; - [networkImageNode enterHierarchyState:ASHierarchyStateRangeManaged]; // Ensures didExitPreloadState is called - XCTAssertEqualObjects(image, networkImageNode.image); - [networkImageNode enterInterfaceState:ASInterfaceStatePreload]; - XCTAssertEqualObjects(image, networkImageNode.image); - [networkImageNode exitInterfaceState:ASInterfaceStatePreload]; - XCTAssertEqualObjects(image, networkImageNode.image); - [networkImageNode exitHierarchyState:ASHierarchyStateRangeManaged]; - XCTAssertEqualObjects(image, networkImageNode.image); -} - -- (void)testThatSettingADefaultImageWillStayForEnteringAndExitingPreloadState -{ - UIImage *image = [[UIImage alloc] init]; - ASNetworkImageNode *networkImageNode = [[ASNetworkImageNode alloc] init]; - networkImageNode.defaultImage = image; - [networkImageNode enterHierarchyState:ASHierarchyStateRangeManaged]; // Ensures didExitPreloadState is called - XCTAssertEqualObjects(image, networkImageNode.defaultImage); - [networkImageNode enterInterfaceState:ASInterfaceStatePreload]; - XCTAssertEqualObjects(image, networkImageNode.defaultImage); - [networkImageNode exitInterfaceState:ASInterfaceStatePreload]; - XCTAssertEqualObjects(image, networkImageNode.defaultImage); - [networkImageNode exitHierarchyState:ASHierarchyStateRangeManaged]; - XCTAssertEqualObjects(image, networkImageNode.defaultImage); -} - -@end - -@implementation ASTestImageCache - -- (void)cachedImageWithURL:(NSURL *)URL callbackQueue:(dispatch_queue_t)callbackQueue completion:(ASImageCacherCompletion)completion -{ - completion(nil); -} - -@end - -@implementation ASTestImageDownloader { - NSInteger _currentDownloadID; -} - -- (void)cancelImageDownloadForIdentifier:(id)downloadIdentifier -{ - // nop -} - -- (id)downloadImageWithURL:(NSURL *)URL callbackQueue:(dispatch_queue_t)callbackQueue downloadProgress:(ASImageDownloaderProgress)downloadProgress completion:(ASImageDownloaderCompletion)completion -{ - return @(_currentDownloadID++); -} - -- (void)setProgressImageBlock:(ASImageDownloaderProgressImage)progressBlock callbackQueue:(dispatch_queue_t)callbackQueue withDownloadIdentifier:(id)downloadIdentifier -{ - // nop -} -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASOverlayLayoutSpecSnapshotTests.mm b/submodules/AsyncDisplayKit/Tests/ASOverlayLayoutSpecSnapshotTests.mm deleted file mode 100644 index a50baa9ef4..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASOverlayLayoutSpecSnapshotTests.mm +++ /dev/null @@ -1,39 +0,0 @@ -// -// ASOverlayLayoutSpecSnapshotTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASLayoutSpecSnapshotTestsHelper.h" - -#import -#import - -static const ASSizeRange kSize = {{320, 320}, {320, 320}}; - -@interface ASOverlayLayoutSpecSnapshotTests : ASLayoutSpecSnapshotTestCase -@end - -@implementation ASOverlayLayoutSpecSnapshotTests - -- (void)testOverlay -{ - ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor blueColor]); - ASDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor blackColor], {20, 20}); - - ASLayoutSpec *layoutSpec = - [ASOverlayLayoutSpec - overlayLayoutSpecWithChild:backgroundNode - overlay: - [ASCenterLayoutSpec - centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringXY - sizingOptions:{} - child:foregroundNode]]; - - [self testLayoutSpec:layoutSpec sizeRange:kSize subnodes:@[backgroundNode, foregroundNode] identifier: nil]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASPagerNodeTests.mm b/submodules/AsyncDisplayKit/Tests/ASPagerNodeTests.mm deleted file mode 100644 index 416efaae3d..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASPagerNodeTests.mm +++ /dev/null @@ -1,179 +0,0 @@ -// -// ASPagerNodeTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface ASPagerNodeTestDataSource : NSObject -@end - -@implementation ASPagerNodeTestDataSource - -- (instancetype)init -{ - if (!(self = [super init])) { - return nil; - } - return self; -} - -- (NSInteger)numberOfPagesInPagerNode:(ASPagerNode *)pagerNode -{ - return 2; -} - -- (ASCellNode *)pagerNode:(ASPagerNode *)pagerNode nodeAtIndex:(NSInteger)index -{ - return [[ASCellNode alloc] init]; -} - -@end - -@interface ASPagerNodeTestController: UIViewController -@property (nonatomic) ASPagerNodeTestDataSource *testDataSource; -@property (nonatomic) ASPagerNode *pagerNode; -@end - -@implementation ASPagerNodeTestController - -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Populate these immediately so that they're not unexpectedly nil during tests. - self.testDataSource = [[ASPagerNodeTestDataSource alloc] init]; - - self.pagerNode = [[ASPagerNode alloc] init]; - self.pagerNode.dataSource = self.testDataSource; - - [self.view addSubnode:self.pagerNode]; - } - return self; -} - -@end - -@interface ASPagerNodeTests : XCTestCase -@property (nonatomic) ASPagerNode *pagerNode; - -@property (nonatomic) ASPagerNodeTestDataSource *testDataSource; -@end - -@implementation ASPagerNodeTests - -- (void)testPagerReturnsIndexOfPages -{ - ASPagerNodeTestController *testController = [self testController]; - - ASCellNode *cellNode = [testController.pagerNode nodeForPageAtIndex:0]; - - XCTAssertEqual([testController.pagerNode indexOfPageWithNode:cellNode], 0); -} - -- (void)testPagerReturnsNotFoundForCellThatDontExistInPager -{ - ASPagerNodeTestController *testController = [self testController]; - - ASCellNode *badNode = [[ASCellNode alloc] init]; - - XCTAssertEqual([testController.pagerNode indexOfPageWithNode:badNode], NSNotFound); -} - -- (void)testScrollPageToIndex -{ - ASPagerNodeTestController *testController = [self testController]; - testController.pagerNode.frame = CGRectMake(0, 0, 500, 500); - [testController.pagerNode scrollToPageAtIndex:1 animated:false]; - - XCTAssertEqual(testController.pagerNode.currentPageIndex, 1); -} - -- (ASPagerNodeTestController *)testController -{ - ASPagerNodeTestController *testController = [[ASPagerNodeTestController alloc] initWithNibName:nil bundle:nil]; - UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - [window makeKeyAndVisible]; - window.rootViewController = testController; - - [testController.pagerNode reloadData]; - [testController.pagerNode setNeedsLayout]; - - return testController; -} - -// Disabled due to flakiness https://github.com/facebook/AsyncDisplayKit/issues/2818 -- (void)DISABLED_testThatRootPagerNodeDoesGetTheRightInsetWhilePoppingBack -{ - UICollectionViewCell *cell = nil; - - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.automaticallyManagesSubnodes = YES; - - ASPagerNodeTestDataSource *dataSource = [[ASPagerNodeTestDataSource alloc] init]; - ASPagerNode *pagerNode = [[ASPagerNode alloc] init]; - pagerNode.dataSource = dataSource; - node.layoutSpecBlock = ^(ASDisplayNode *node, ASSizeRange constrainedSize){ - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsZero child:pagerNode]; - }; - ASViewController *vc = [[ASViewController alloc] initWithNode:node]; - UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc]; - window.rootViewController = nav; - [window makeKeyAndVisible]; - [window layoutIfNeeded]; - - // Wait until view controller is visible - XCTestExpectation *e = [self expectationWithDescription:@"Transition completed"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ - [e fulfill]; - }); - [self waitForExpectationsWithTimeout:2 handler:nil]; - - // Test initial values -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - cell = [pagerNode.view cellForItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; -#pragma clang diagnostic pop - XCTAssertEqualObjects(NSStringFromCGRect(window.bounds), NSStringFromCGRect(node.frame)); - XCTAssertEqualObjects(NSStringFromCGRect(window.bounds), NSStringFromCGRect(cell.frame)); - XCTAssertEqual(pagerNode.contentOffset.y, 0); - XCTAssertEqual(pagerNode.contentInset.top, 0); - - e = [self expectationWithDescription:@"Transition completed"]; - // Push another view controller - UIViewController *vc2 = [[UIViewController alloc] init]; - vc2.view.frame = nav.view.bounds; - vc2.view.backgroundColor = [UIColor blueColor]; - [nav pushViewController:vc2 animated:YES]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.505 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ - [e fulfill]; - }); - [self waitForExpectationsWithTimeout:2 handler:nil]; - - // Pop view controller - e = [self expectationWithDescription:@"Transition completed"]; - [vc2.navigationController popViewControllerAnimated:YES]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.505 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ - [e fulfill]; - }); - [self waitForExpectationsWithTimeout:2 handler:nil]; - - // Test values again after popping the view controller -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - cell = [pagerNode.view cellForItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; -#pragma clang diagnostic pop - XCTAssertEqualObjects(NSStringFromCGRect(window.bounds), NSStringFromCGRect(node.frame)); - XCTAssertEqualObjects(NSStringFromCGRect(window.bounds), NSStringFromCGRect(cell.frame)); - XCTAssertEqual(pagerNode.contentOffset.y, 0); - XCTAssertEqual(pagerNode.contentInset.top, 0); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASPerformanceTestContext.h b/submodules/AsyncDisplayKit/Tests/ASPerformanceTestContext.h deleted file mode 100644 index 49196d451c..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASPerformanceTestContext.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// ASPerformanceTestContext.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import -#import - -#define ASXCTAssertRelativePerformanceInRange(test, caseName, min, max) \ - _XCTPrimitiveAssertLessThanOrEqual(self, test.results[caseName].relativePerformance, @#caseName, max, @#max);\ - _XCTPrimitiveAssertGreaterThanOrEqual(self, test.results[caseName].relativePerformance, @#caseName, min, @#min) - -NS_ASSUME_NONNULL_BEGIN - -typedef void (^ASTestPerformanceCaseBlock)(NSUInteger i, dispatch_block_t startMeasuring, dispatch_block_t stopMeasuring); - -@interface ASPerformanceTestResult : NSObject -@property (nonatomic, readonly) NSTimeInterval timePer1000; -@property (nonatomic, readonly) NSString *caseName; - -@property (nonatomic, readonly, getter=isReferenceCase) BOOL referenceCase; -@property (nonatomic, readonly) float relativePerformance; - -@property (nonatomic, readonly) NSMutableDictionary *userInfo; -@end - -@interface ASPerformanceTestContext : NSObject - -/** - * The first case you add here will be considered the reference case. - */ -- (void)addCaseWithName:(NSString *)caseName block:(AS_NOESCAPE ASTestPerformanceCaseBlock)block; - -@property (nonatomic, copy, readonly) NSDictionary *results; - -- (BOOL)areAllUserInfosEqual; - -@end - -NS_ASSUME_NONNULL_END diff --git a/submodules/AsyncDisplayKit/Tests/ASPerformanceTestContext.mm b/submodules/AsyncDisplayKit/Tests/ASPerformanceTestContext.mm deleted file mode 100644 index 15c6787596..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASPerformanceTestContext.mm +++ /dev/null @@ -1,135 +0,0 @@ -// -// ASPerformanceTestContext.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASPerformanceTestContext.h" - -#import - -#import -#import - -@interface ASPerformanceTestResult () -@property (nonatomic) NSTimeInterval timePer1000; -@property (nonatomic) NSString *caseName; - -@property (nonatomic, getter=isReferenceCase) BOOL referenceCase; -@property (nonatomic) float relativePerformance; -@end - -@implementation ASPerformanceTestResult - -- (instancetype)init -{ - self = [super init]; - if (self != nil) { - _userInfo = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (NSString *)description -{ - NSString *userInfoStr = [_userInfo.description stringByReplacingOccurrencesOfString:@"\n" withString:@" "]; - return [NSString stringWithFormat:@"<%-20s: time-per-1000=%04.2f rel-perf=%04.2f user-info=%@>", _caseName.UTF8String, _timePer1000, _relativePerformance, userInfoStr]; -} - -@end - -@implementation ASPerformanceTestContext { - NSMutableDictionary *_results; - NSInteger _iterationCount; - ASPerformanceTestResult * _Nullable _referenceResult; -} - -- (instancetype)init -{ - self = [super init]; - if (self != nil) { - _iterationCount = 1E4; - _results = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (NSDictionary *)results -{ - return _results; -} - -- (void)dealloc -{ - /** - * I know this seems wacky but it's a pain to have to put this in every single test method. - */ - NSLog(@"%@", self.description); -} - -- (BOOL)areAllUserInfosEqual -{ - ASDisplayNodeAssert(_results.count >= 2, nil); - NSEnumerator *resultsEnumerator = [_results objectEnumerator]; - NSDictionary *userInfo = [[resultsEnumerator nextObject] userInfo]; - for (ASPerformanceTestResult *otherResult in resultsEnumerator) { - if ([userInfo isEqualToDictionary:otherResult.userInfo] == NO) { - return NO; - } - } - return YES; -} - -- (void)addCaseWithName:(NSString *)caseName block:(AS_NOESCAPE ASTestPerformanceCaseBlock)block -{ - ASDisplayNodeAssert(_results[caseName] == nil, @"Already have a case named %@", caseName); - ASPerformanceTestResult *result = [[ASPerformanceTestResult alloc] init]; - result.caseName = caseName; - result.timePer1000 = [self _testPerformanceForCaseWithBlock:block] / (_iterationCount / 1000); - if (_referenceResult == nil) { - result.referenceCase = YES; - result.relativePerformance = 1.0f; - _referenceResult = result; - } else { - result.relativePerformance = _referenceResult.timePer1000 / result.timePer1000; - } - _results[caseName] = result; -} - -/// Returns total work time -- (CFTimeInterval)_testPerformanceForCaseWithBlock:(AS_NOESCAPE ASTestPerformanceCaseBlock)block -{ - __block CFTimeInterval time = 0; - for (NSInteger i = 0; i < _iterationCount; i++) { - __block CFTimeInterval start = 0; - __block BOOL calledStop = NO; - @autoreleasepool { - block(i, ^{ - ASDisplayNodeAssert(start == 0, @"Called startMeasuring block twice."); - start = CACurrentMediaTime(); - }, ^{ - time += (CACurrentMediaTime() - start); - ASDisplayNodeAssert(calledStop == NO, @"Called stopMeasuring block twice."); - ASDisplayNodeAssert(start != 0, @"Failed to call startMeasuring block"); - calledStop = YES; - }); - } - - ASDisplayNodeAssert(calledStop, @"Failed to call stopMeasuring block."); - } - return time; -} - -- (NSString *)description -{ - NSMutableString *str = [NSMutableString stringWithString:@"Results:\n"]; - for (ASPerformanceTestResult *result in [_results objectEnumerator]) { - [str appendFormat:@"\t%@\n", result]; - } - return str; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASPhotosFrameworkImageRequestTests.mm b/submodules/AsyncDisplayKit/Tests/ASPhotosFrameworkImageRequestTests.mm deleted file mode 100644 index fe1cb408b4..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASPhotosFrameworkImageRequestTests.mm +++ /dev/null @@ -1,65 +0,0 @@ -// -// ASPhotosFrameworkImageRequestTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#if AS_USE_PHOTOS - -#import -#import - -static NSString *const kTestAssetID = @"testAssetID"; - -@interface ASPhotosFrameworkImageRequestTests : XCTestCase - -@end - -@implementation ASPhotosFrameworkImageRequestTests - -#pragma mark Example Data - -+ (ASPhotosFrameworkImageRequest *)exampleImageRequest -{ - ASPhotosFrameworkImageRequest *req = [[ASPhotosFrameworkImageRequest alloc] initWithAssetIdentifier:kTestAssetID]; - req.options.networkAccessAllowed = YES; - req.options.normalizedCropRect = CGRectMake(0.2, 0.1, 0.6, 0.8); - req.targetSize = CGSizeMake(1024, 1536); - req.contentMode = PHImageContentModeAspectFill; - req.options.version = PHImageRequestOptionsVersionOriginal; - req.options.resizeMode = PHImageRequestOptionsResizeModeFast; - return req; -} - -+ (NSURL *)urlForExampleImageRequest -{ - NSString *str = [NSString stringWithFormat:@"ph://%@?width=1024&height=1536&version=2&contentmode=1&network=1&resizemode=1&deliverymode=0&crop_x=0.2&crop_y=0.1&crop_w=0.6&crop_h=0.8", kTestAssetID]; - return [NSURL URLWithString:str]; -} - -#pragma mark Test cases - -- (void)testThatConvertingToURLWorks -{ - XCTAssertEqualObjects([self.class exampleImageRequest].url, [self.class urlForExampleImageRequest]); -} - -- (void)testThatParsingFromURLWorks -{ - NSURL *url = [self.class urlForExampleImageRequest]; - XCTAssertEqualObjects([ASPhotosFrameworkImageRequest requestWithURL:url], [self.class exampleImageRequest]); -} - -- (void)testThatCopyingWorks -{ - ASPhotosFrameworkImageRequest *example = [self.class exampleImageRequest]; - ASPhotosFrameworkImageRequest *copy = [[self.class exampleImageRequest] copy]; - XCTAssertEqualObjects(example, copy); -} - -@end - -#endif diff --git a/submodules/AsyncDisplayKit/Tests/ASRatioLayoutSpecSnapshotTests.mm b/submodules/AsyncDisplayKit/Tests/ASRatioLayoutSpecSnapshotTests.mm deleted file mode 100644 index f5bad2723f..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASRatioLayoutSpecSnapshotTests.mm +++ /dev/null @@ -1,38 +0,0 @@ -// -// ASRatioLayoutSpecSnapshotTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASLayoutSpecSnapshotTestsHelper.h" - -#import - -static const ASSizeRange kFixedSize = {{0, 0}, {100, 100}}; - -@interface ASRatioLayoutSpecSnapshotTests : ASLayoutSpecSnapshotTestCase -@end - -@implementation ASRatioLayoutSpecSnapshotTests - -- (void)testRatioLayoutSpecWithRatio:(CGFloat)ratio childSize:(CGSize)childSize identifier:(NSString *)identifier -{ - ASDisplayNode *subnode = ASDisplayNodeWithBackgroundColor([UIColor greenColor], childSize); - - ASLayoutSpec *layoutSpec = [ASRatioLayoutSpec ratioLayoutSpecWithRatio:ratio child:subnode]; - - [self testLayoutSpec:layoutSpec sizeRange:kFixedSize subnodes:@[subnode] identifier:identifier]; -} - -- (void)testRatioLayout -{ - [self testRatioLayoutSpecWithRatio:0.5 childSize:CGSizeMake(100, 100) identifier:@"HalfRatio"]; - [self testRatioLayoutSpecWithRatio:2.0 childSize:CGSizeMake(100, 100) identifier:@"DoubleRatio"]; - [self testRatioLayoutSpecWithRatio:7.0 childSize:CGSizeMake(100, 100) identifier:@"SevenTimesRatio"]; - [self testRatioLayoutSpecWithRatio:10.0 childSize:CGSizeMake(20, 200) identifier:@"TenTimesRatioWithItemTooBig"]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASRecursiveUnfairLockTests.mm b/submodules/AsyncDisplayKit/Tests/ASRecursiveUnfairLockTests.mm deleted file mode 100644 index 3916b319e3..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASRecursiveUnfairLockTests.mm +++ /dev/null @@ -1,184 +0,0 @@ -// -// ASRecursiveUnfairLockTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASTestCase.h" -#import -#import -#import - -@interface ASRecursiveUnfairLockTests : ASTestCase - -@end - -@implementation ASRecursiveUnfairLockTests { - ASRecursiveUnfairLock lock; -} - -- (void)setUp -{ - [super setUp]; - lock = AS_RECURSIVE_UNFAIR_LOCK_INIT; -} - -- (void)testTheAtomicIsLockFree -{ - XCTAssertTrue(atomic_is_lock_free(&lock._thread)); -} - -- (void)testRelockingFromSameThread -{ - ASRecursiveUnfairLockLock(&lock); - ASRecursiveUnfairLockLock(&lock); - ASRecursiveUnfairLockUnlock(&lock); - // Now try locking from another thread. - XCTestExpectation *e1 = [self expectationWithDescription:@"Other thread tried lock."]; - [NSThread detachNewThreadWithBlock:^{ - XCTAssertFalse(ASRecursiveUnfairLockTryLock(&self->lock)); - [e1 fulfill]; - }]; - [self waitForExpectationsWithTimeout:1 handler:nil]; - ASRecursiveUnfairLockUnlock(&lock); - - XCTestExpectation *e2 = [self expectationWithDescription:@"Other thread tried lock again"]; - [NSThread detachNewThreadWithBlock:^{ - XCTAssertTrue(ASRecursiveUnfairLockTryLock(&self->lock)); - ASRecursiveUnfairLockUnlock(&self->lock); - [e2 fulfill]; - }]; - [self waitForExpectationsWithTimeout:1 handler:nil]; -} - -- (void)testThatUnlockingWithoutHoldingMakesAssertion -{ -#ifdef NS_BLOCK_ASSERTIONS -#warning Assertions should be on for `testThatUnlockingWithoutHoldingMakesAssertion` - NSLog(@"Passing because assertions are off."); -#else - ASRecursiveUnfairLockLock(&lock); - XCTestExpectation *e1 = [self expectationWithDescription:@"Other thread tried lock."]; - [NSThread detachNewThreadWithBlock:^{ - XCTAssertThrows(ASRecursiveUnfairLockUnlock(&lock)); - [e1 fulfill]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - ASRecursiveUnfairLockUnlock(&lock); -#endif -} - -#define CHAOS_TEST_BODY(contested, prefix, infix, postfix) \ -dispatch_group_t g = dispatch_group_create(); \ -for (int i = 0; i < (contested ? 16 : 2); i++) {\ -dispatch_group_enter(g);\ -[NSThread detachNewThreadWithBlock:^{\ - for (int i = 0; i < 20000; i++) {\ - prefix;\ - value += 150;\ - infix;\ - value -= 150;\ - postfix;\ - }\ - dispatch_group_leave(g);\ -}];\ -}\ -dispatch_group_wait(g, DISPATCH_TIME_FOREVER); - -#pragma mark - Correctness Tests - -- (void)testRecursiveUnfairLockContested -{ - __block int value = 0; - [self measureBlock:^{ - CHAOS_TEST_BODY(YES, ASRecursiveUnfairLockLock(&lock), {}, ASRecursiveUnfairLockUnlock(&lock)); - }]; - XCTAssertEqual(value, 0); -} - -- (void)testRecursiveUnfairLockUncontested -{ - __block int value = 0; - [self measureBlock:^{ - CHAOS_TEST_BODY(NO, ASRecursiveUnfairLockLock(&lock), {}, ASRecursiveUnfairLockUnlock(&lock)); - }]; - XCTAssertEqual(value, 0); -} - -#pragma mark - Lock performance tests - -#if RUN_LOCK_PERF_TESTS -- (void)testNoLockContested -{ - __block int value = 0; - [self measureBlock:^{ - CHAOS_TEST_BODY(YES, {}, {}, {}); - }]; - XCTAssertNotEqual(value, 0); -} - -- (void)testPlainUnfairLockContested -{ - __block int value = 0; - __block os_unfair_lock unfairLock = OS_UNFAIR_LOCK_INIT; - [self measureBlock:^{ - CHAOS_TEST_BODY(YES, os_unfair_lock_lock(&unfairLock), {}, os_unfair_lock_unlock(&unfairLock)); - }]; - XCTAssertEqual(value, 0); -} - -- (void)testRecursiveMutexContested -{ - __block int value = 0; - pthread_mutexattr_t attr; - pthread_mutexattr_init (&attr); - pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE); - __block pthread_mutex_t m; - pthread_mutex_init (&m, &attr); - pthread_mutexattr_destroy (&attr); - - [self measureBlock:^{ - CHAOS_TEST_BODY(YES, pthread_mutex_lock(&m), {}, pthread_mutex_unlock(&m)); - }]; - pthread_mutex_destroy(&m); -} - -- (void)testNoLockUncontested -{ - __block int value = 0; - [self measureBlock:^{ - CHAOS_TEST_BODY(NO, {}, {}, {}); - }]; - XCTAssertNotEqual(value, 0); -} - -- (void)testPlainUnfairLockUncontested -{ - __block int value = 0; - __block os_unfair_lock unfairLock = OS_UNFAIR_LOCK_INIT; - [self measureBlock:^{ - CHAOS_TEST_BODY(NO, os_unfair_lock_lock(&unfairLock), {}, os_unfair_lock_unlock(&unfairLock)); - }]; - XCTAssertEqual(value, 0); -} - -- (void)testRecursiveMutexUncontested -{ - __block int value = 0; - pthread_mutexattr_t attr; - pthread_mutexattr_init (&attr); - pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE); - __block pthread_mutex_t m; - pthread_mutex_init (&m, &attr); - pthread_mutexattr_destroy (&attr); - - [self measureBlock:^{ - CHAOS_TEST_BODY(NO, pthread_mutex_lock(&m), {}, pthread_mutex_unlock(&m)); - }]; - pthread_mutex_destroy(&m); -} - -#endif // RUN_LOCK_PERF_TESTS -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASRelativeLayoutSpecSnapshotTests.mm b/submodules/AsyncDisplayKit/Tests/ASRelativeLayoutSpecSnapshotTests.mm deleted file mode 100644 index 93887a9ce8..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASRelativeLayoutSpecSnapshotTests.mm +++ /dev/null @@ -1,135 +0,0 @@ -// -// ASRelativeLayoutSpecSnapshotTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASLayoutSpecSnapshotTestsHelper.h" - -#import -#import -#import - -static const ASSizeRange kSize = {{100, 120}, {320, 160}}; - -@interface ASRelativeLayoutSpecSnapshotTests : ASLayoutSpecSnapshotTestCase -@end - -@implementation ASRelativeLayoutSpecSnapshotTests - -#pragma mark - XCTestCase - -- (void)testWithOptions -{ - [self testAllVerticalPositionsForHorizontalPosition:ASRelativeLayoutSpecPositionStart]; - [self testAllVerticalPositionsForHorizontalPosition:ASRelativeLayoutSpecPositionCenter]; - [self testAllVerticalPositionsForHorizontalPosition:ASRelativeLayoutSpecPositionEnd]; - -} - -- (void)testAllVerticalPositionsForHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition -{ - [self testWithHorizontalPosition:horizontalPosition verticalPosition:ASRelativeLayoutSpecPositionStart sizingOptions:{}]; - [self testWithHorizontalPosition:horizontalPosition verticalPosition:ASRelativeLayoutSpecPositionCenter sizingOptions:{}]; - [self testWithHorizontalPosition:horizontalPosition verticalPosition:ASRelativeLayoutSpecPositionEnd sizingOptions:{}]; -} - -- (void)testWithSizingOptions -{ - [self testWithHorizontalPosition:ASRelativeLayoutSpecPositionStart - verticalPosition:ASRelativeLayoutSpecPositionStart - sizingOptions:ASRelativeLayoutSpecSizingOptionDefault]; - [self testWithHorizontalPosition:ASRelativeLayoutSpecPositionStart - verticalPosition:ASRelativeLayoutSpecPositionStart - sizingOptions:ASRelativeLayoutSpecSizingOptionMinimumWidth]; - [self testWithHorizontalPosition:ASRelativeLayoutSpecPositionStart - verticalPosition:ASRelativeLayoutSpecPositionStart - sizingOptions:ASRelativeLayoutSpecSizingOptionMinimumHeight]; - [self testWithHorizontalPosition:ASRelativeLayoutSpecPositionStart - verticalPosition:ASRelativeLayoutSpecPositionStart - sizingOptions:ASRelativeLayoutSpecSizingOptionMinimumSize]; -} - -- (void)testWithHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition - verticalPosition:(ASRelativeLayoutSpecPosition)verticalPosition - sizingOptions:(ASRelativeLayoutSpecSizingOption)sizingOptions -{ - ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor redColor]); - ASDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor greenColor], CGSizeMake(70, 100)); - - ASLayoutSpec *layoutSpec = - [ASBackgroundLayoutSpec - backgroundLayoutSpecWithChild: - [ASRelativeLayoutSpec - relativePositionLayoutSpecWithHorizontalPosition:horizontalPosition - verticalPosition:verticalPosition - sizingOption:sizingOptions - child:foregroundNode] - background:backgroundNode]; - - [self testLayoutSpec:layoutSpec - sizeRange:kSize - subnodes:@[backgroundNode, foregroundNode] - identifier:suffixForPositionOptions(horizontalPosition, verticalPosition, sizingOptions)]; -} - -static NSString *suffixForPositionOptions(ASRelativeLayoutSpecPosition horizontalPosition, - ASRelativeLayoutSpecPosition verticalPosition, - ASRelativeLayoutSpecSizingOption sizingOptions) -{ - NSMutableString *suffix = [NSMutableString string]; - - if (horizontalPosition == ASRelativeLayoutSpecPositionCenter) { - [suffix appendString:@"CenterX"]; - } else if (horizontalPosition == ASRelativeLayoutSpecPositionEnd) { - [suffix appendString:@"EndX"]; - } - - if (verticalPosition == ASRelativeLayoutSpecPositionCenter) { - [suffix appendString:@"CenterY"]; - } else if (verticalPosition == ASRelativeLayoutSpecPositionEnd) { - [suffix appendString:@"EndY"]; - } - - if ((sizingOptions & ASRelativeLayoutSpecSizingOptionMinimumWidth) != 0) { - [suffix appendString:@"SizingMinimumWidth"]; - } - - if ((sizingOptions & ASRelativeLayoutSpecSizingOptionMinimumHeight) != 0) { - [suffix appendString:@"SizingMinimumHeight"]; - } - - return suffix; -} - -- (void)testMinimumSizeRangeIsGivenToChildWhenNotPositioning -{ - ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor redColor]); - ASDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor redColor], CGSizeMake(10, 10)); - foregroundNode.style.flexGrow = 1; - - ASLayoutSpec *childSpec = - [ASBackgroundLayoutSpec - backgroundLayoutSpecWithChild: - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical - spacing:0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStart - children:@[foregroundNode]] - background:backgroundNode]; - - ASRelativeLayoutSpec *layoutSpec = - [ASRelativeLayoutSpec - relativePositionLayoutSpecWithHorizontalPosition:ASRelativeLayoutSpecPositionNone - verticalPosition:ASRelativeLayoutSpecPositionNone - sizingOption:{} - child:childSpec]; - - [self testLayoutSpec:layoutSpec sizeRange:kSize subnodes:@[backgroundNode, foregroundNode] identifier:nil]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASRunLoopQueueTests.mm b/submodules/AsyncDisplayKit/Tests/ASRunLoopQueueTests.mm deleted file mode 100644 index 2881e30187..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASRunLoopQueueTests.mm +++ /dev/null @@ -1,201 +0,0 @@ -// -// ASRunLoopQueueTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASTestCase.h" - -#import - -#import "ASDisplayNodeTestsHelper.h" - -static NSTimeInterval const kRunLoopRunTime = 0.001; // Allow the RunLoop to run for one millisecond each time. - -@interface QueueObject : NSObject -@property (nonatomic) BOOL queueObjectProcessed; -@end - -@implementation QueueObject -- (void)prepareForCATransactionCommit -{ - self.queueObjectProcessed = YES; -} -@end - -@interface ASRunLoopQueueTests : ASTestCase - -@end - -@implementation ASRunLoopQueueTests - -#pragma mark enqueue tests - -- (void)testEnqueueNilObjectsToQueue -{ - ASRunLoopQueue *queue = [[ASRunLoopQueue alloc] initWithRunLoop:CFRunLoopGetMain() retainObjects:YES handler:nil]; - id object = nil; - [queue enqueue:object]; - XCTAssertTrue(queue.isEmpty); -} - -- (void)testEnqueueSameObjectTwiceToDefaultQueue -{ - id object = [[NSObject alloc] init]; - __unsafe_unretained id weakObject = object; - __block NSUInteger dequeuedCount = 0; - ASRunLoopQueue *queue = [[ASRunLoopQueue alloc] initWithRunLoop:CFRunLoopGetMain() retainObjects:YES handler:^(id _Nonnull dequeuedItem, BOOL isQueueDrained) { - if (dequeuedItem == weakObject) { - dequeuedCount++; - } - }]; - [queue enqueue:object]; - [queue enqueue:object]; - [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:kRunLoopRunTime]]; - XCTAssert(dequeuedCount == 1); -} - -- (void)testEnqueueSameObjectTwiceToNonExclusiveMembershipQueue -{ - id object = [[NSObject alloc] init]; - __unsafe_unretained id weakObject = object; - __block NSUInteger dequeuedCount = 0; - ASRunLoopQueue *queue = [[ASRunLoopQueue alloc] initWithRunLoop:CFRunLoopGetMain() retainObjects:YES handler:^(id _Nonnull dequeuedItem, BOOL isQueueDrained) { - if (dequeuedItem == weakObject) { - dequeuedCount++; - } - }]; - queue.ensureExclusiveMembership = NO; - [queue enqueue:object]; - [queue enqueue:object]; - [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:kRunLoopRunTime]]; - XCTAssert(dequeuedCount == 2); -} - -#pragma mark processQueue tests - -- (void)testDefaultQueueProcessObjectsOneAtATime -{ - ASRunLoopQueue *queue = [[ASRunLoopQueue alloc] initWithRunLoop:CFRunLoopGetMain() retainObjects:YES handler:^(id _Nonnull dequeuedItem, BOOL isQueueDrained) { - [NSThread sleepForTimeInterval:kRunLoopRunTime * 2]; // So each element takes more time than the available - }]; - [queue enqueue:[[NSObject alloc] init]]; - [queue enqueue:[[NSObject alloc] init]]; - [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:kRunLoopRunTime]]; - XCTAssertFalse(queue.isEmpty); -} - -- (void)testQueueProcessObjectsInBatchesOfSpecifiedSize -{ - ASRunLoopQueue *queue = [[ASRunLoopQueue alloc] initWithRunLoop:CFRunLoopGetMain() retainObjects:YES handler:^(id _Nonnull dequeuedItem, BOOL isQueueDrained) { - [NSThread sleepForTimeInterval:kRunLoopRunTime * 2]; // So each element takes more time than the available - }]; - queue.batchSize = 2; - [queue enqueue:[[NSObject alloc] init]]; - [queue enqueue:[[NSObject alloc] init]]; - [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:kRunLoopRunTime]]; - XCTAssertTrue(queue.isEmpty); -} - -- (void)testQueueOnlySendsIsDrainedForLastObjectInBatch -{ - id objectA = [[NSObject alloc] init]; - id objectB = [[NSObject alloc] init]; - __unsafe_unretained id weakObjectA = objectA; - __unsafe_unretained id weakObjectB = objectB; - __block BOOL isQueueDrainedWhenProcessingA = NO; - __block BOOL isQueueDrainedWhenProcessingB = NO; - ASRunLoopQueue *queue = [[ASRunLoopQueue alloc] initWithRunLoop:CFRunLoopGetMain() retainObjects:YES handler:^(id _Nonnull dequeuedItem, BOOL isQueueDrained) { - if (dequeuedItem == weakObjectA) { - isQueueDrainedWhenProcessingA = isQueueDrained; - } else if (dequeuedItem == weakObjectB) { - isQueueDrainedWhenProcessingB = isQueueDrained; - } - }]; - queue.batchSize = 2; - [queue enqueue:objectA]; - [queue enqueue:objectB]; - [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:kRunLoopRunTime]]; - XCTAssertFalse(isQueueDrainedWhenProcessingA); - XCTAssertTrue(isQueueDrainedWhenProcessingB); -} - -#pragma mark strong/weak tests - -- (void)testStrongQueueRetainsObjects -{ - id object = [[NSObject alloc] init]; - __unsafe_unretained id weakObject = object; - __block BOOL didProcessObject = NO; - ASRunLoopQueue *queue = [[ASRunLoopQueue alloc] initWithRunLoop:CFRunLoopGetMain() retainObjects:YES handler:^(id _Nonnull dequeuedItem, BOOL isQueueDrained) { - if (dequeuedItem == weakObject) { - didProcessObject = YES; - } - }]; - [queue enqueue:object]; - object = nil; - [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:kRunLoopRunTime]]; - XCTAssertTrue(didProcessObject); -} - -- (void)testWeakQueueDoesNotRetainsObjects -{ - id object = [[NSObject alloc] init]; - __unsafe_unretained id weakObject = object; - __block BOOL didProcessObject = NO; - ASRunLoopQueue *queue = [[ASRunLoopQueue alloc] initWithRunLoop:CFRunLoopGetMain() retainObjects:NO handler:^(id _Nonnull dequeuedItem, BOOL isQueueDrained) { - if (dequeuedItem == weakObject) { - didProcessObject = YES; - } - }]; - [queue enqueue:object]; - object = nil; - [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:kRunLoopRunTime]]; - XCTAssertFalse(didProcessObject); -} - -- (void)testWeakQueueWithAllDeallocatedObjectsIsDrained -{ - ASRunLoopQueue *queue = [[ASRunLoopQueue alloc] initWithRunLoop:CFRunLoopGetMain() retainObjects:NO handler:nil]; - id object = [[NSObject alloc] init]; - [queue enqueue:object]; - object = nil; - XCTAssertFalse(queue.isEmpty); - [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:kRunLoopRunTime]]; - XCTAssertTrue(queue.isEmpty); -} - -- (void)testASCATransactionQueueDisable -{ - // Disable coalescing. - ASConfiguration *config = [[ASConfiguration alloc] init]; - config.experimentalFeatures = kNilOptions; - [ASConfigurationManager test_resetWithConfiguration:config]; - - ASCATransactionQueue *queue = [[ASCATransactionQueue alloc] init]; - QueueObject *object = [[QueueObject alloc] init]; - XCTAssertFalse(object.queueObjectProcessed); - [queue enqueue:object]; - XCTAssertTrue(object.queueObjectProcessed); - XCTAssertTrue([queue isEmpty]); - XCTAssertFalse(queue.enabled); -} - -- (void)testASCATransactionQueueProcess -{ - ASConfiguration *config = [[ASConfiguration alloc] initWithDictionary:nil]; - config.experimentalFeatures = ASExperimentalInterfaceStateCoalescing; - [ASConfigurationManager test_resetWithConfiguration:config]; - - ASCATransactionQueue *queue = [[ASCATransactionQueue alloc] init]; - QueueObject *object = [[QueueObject alloc] init]; - [queue enqueue:object]; - XCTAssertFalse(object.queueObjectProcessed); - ASCATransactionQueueWait(queue); - XCTAssertTrue(object.queueObjectProcessed); - XCTAssertTrue(queue.enabled); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASScrollNodeTests.mm b/submodules/AsyncDisplayKit/Tests/ASScrollNodeTests.mm deleted file mode 100644 index fe2c4540c8..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASScrollNodeTests.mm +++ /dev/null @@ -1,168 +0,0 @@ -// -// ASScrollNodeTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -#import - -#import "ASXCTExtensions.h" - -@interface ASScrollNodeTests : XCTestCase - -@property (nonatomic) ASScrollNode *scrollNode; -@property (nonatomic) ASDisplayNode *subnode; - -@end - -@implementation ASScrollNodeTests - -- (void)setUp -{ - ASDisplayNode *subnode = [[ASDisplayNode alloc] init]; - self.subnode = subnode; - - self.scrollNode = [[ASScrollNode alloc] init]; - self.scrollNode.scrollableDirections = ASScrollDirectionVerticalDirections; - self.scrollNode.automaticallyManagesContentSize = YES; - self.scrollNode.automaticallyManagesSubnodes = YES; - self.scrollNode.layoutSpecBlock = ^ASLayoutSpec * _Nonnull(__kindof ASDisplayNode * _Nonnull node, ASSizeRange constrainedSize) { - return [[ASWrapperLayoutSpec alloc] initWithLayoutElement:subnode]; - }; - [self.scrollNode view]; -} - -- (void)testSubnodeLayoutCalculatedWithUnconstrainedMaxSizeInScrollableDirection -{ - CGSize parentSize = CGSizeMake(100, 100); - ASSizeRange sizeRange = ASSizeRangeMake(parentSize); - - [self.scrollNode layoutThatFits:sizeRange parentSize:parentSize]; - - ASSizeRange subnodeSizeRange = sizeRange; - subnodeSizeRange.max.height = CGFLOAT_MAX; - XCTAssertEqual(self.scrollNode.scrollableDirections, ASScrollDirectionVerticalDirections); - ASXCTAssertEqualSizeRanges(self.subnode.constrainedSizeForCalculatedLayout, subnodeSizeRange); - - // Same test for horizontal scrollable directions - self.scrollNode.scrollableDirections = ASScrollDirectionHorizontalDirections; - [self.scrollNode layoutThatFits:sizeRange parentSize:parentSize]; - - subnodeSizeRange = sizeRange; - subnodeSizeRange.max.width = CGFLOAT_MAX; - - ASXCTAssertEqualSizeRanges(self.subnode.constrainedSizeForCalculatedLayout, subnodeSizeRange); -} - -- (void)testAutomaticallyManagesContentSizeUnderflow -{ - CGSize subnodeSize = CGSizeMake(100, 100); - CGSize parentSize = CGSizeMake(100, 200); - ASSizeRange sizeRange = ASSizeRangeUnconstrained; - - self.subnode.style.preferredSize = subnodeSize; - - [self.scrollNode layoutThatFits:sizeRange parentSize:parentSize]; - [self.scrollNode layout]; - - ASXCTAssertEqualSizes(self.scrollNode.calculatedSize, parentSize); - ASXCTAssertEqualSizes(self.scrollNode.view.contentSize, subnodeSize); -} - -- (void)testAutomaticallyManagesContentSizeOverflow -{ - CGSize subnodeSize = CGSizeMake(100, 500); - CGSize parentSize = CGSizeMake(100, 200); - ASSizeRange sizeRange = ASSizeRangeUnconstrained; - - self.subnode.style.preferredSize = subnodeSize; - - [self.scrollNode layoutThatFits:sizeRange parentSize:parentSize]; - [self.scrollNode layout]; - - ASXCTAssertEqualSizes(self.scrollNode.calculatedSize, parentSize); - ASXCTAssertEqualSizes(self.scrollNode.view.contentSize, subnodeSize); -} - -- (void)testAutomaticallyManagesContentSizeWithSizeRangeSmallerThanParentSize -{ - CGSize subnodeSize = CGSizeMake(100, 100); - CGSize parentSize = CGSizeMake(100, 500); - ASSizeRange sizeRange = ASSizeRangeMake(CGSizeMake(100, 100), CGSizeMake(100, 200)); - - self.subnode.style.preferredSize = subnodeSize; - - [self.scrollNode layoutThatFits:sizeRange parentSize:parentSize]; - [self.scrollNode layout]; - - ASXCTAssertEqualSizes(self.scrollNode.calculatedSize, sizeRange.max); - ASXCTAssertEqualSizes(self.scrollNode.view.contentSize, subnodeSize); -} - -- (void)testAutomaticallyManagesContentSizeWithSizeRangeBiggerThanParentSize -{ - CGSize subnodeSize = CGSizeMake(100, 200); - CGSize parentSize = CGSizeMake(100, 100); - ASSizeRange sizeRange = ASSizeRangeMake(CGSizeMake(100, 150)); - - self.subnode.style.preferredSize = subnodeSize; - - [self.scrollNode layoutThatFits:sizeRange parentSize:parentSize]; - [self.scrollNode layout]; - - ASXCTAssertEqualSizes(self.scrollNode.calculatedSize, sizeRange.min); - ASXCTAssertEqualSizes(self.scrollNode.view.contentSize, subnodeSize); -} - -- (void)testAutomaticallyManagesContentSizeWithInvalidCalculatedSizeForLayout -{ - CGSize subnodeSize = CGSizeMake(100, 200); - CGSize parentSize = CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX); - ASSizeRange sizeRange = ASSizeRangeUnconstrained; - - self.subnode.style.preferredSize = subnodeSize; - - [self.scrollNode layoutThatFits:sizeRange parentSize:parentSize]; - [self.scrollNode layout]; - - ASXCTAssertEqualSizes(self.scrollNode.calculatedSize, subnodeSize); - ASXCTAssertEqualSizes(self.scrollNode.view.contentSize, subnodeSize); -} - -- (void)testASScrollNodeAccessibility { - ASDisplayNode *scrollNode = [[ASDisplayNode alloc] init]; - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.isAccessibilityContainer = YES; - node.accessibilityLabel = @"node"; - [scrollNode addSubnode:node]; - node.frame = CGRectMake(0,0,100,100); - ASTextNode2 *text = [[ASTextNode2 alloc] init]; - text.attributedText = [[NSAttributedString alloc] initWithString:@"text"]; - [node addSubnode:text]; - - ASTextNode2 *text2 = [[ASTextNode2 alloc] init]; - text2.attributedText = [[NSAttributedString alloc] initWithString:@"text2"]; - [node addSubnode:text2]; - __unused UIView *view = scrollNode.view; - XCTAssertTrue(node.view.accessibilityElements.firstObject, @"node"); - - // Following tests will only pass when accessibility is enabled. - // More details: https://github.com/TextureGroup/Texture/pull/1188 - - // A bunch of a11y containers each of which hold aggregated labels. - /* NSArray *a11yElements = [scrollNode.view accessibilityElements]; - XCTAssertTrue(a11yElements.count > 0, @"accessibilityElements should exist"); - - UIAccessibilityElement *container = a11yElements.firstObject; - XCTAssertTrue(container.isAccessibilityElement == false && container.accessibilityElements.count > 0); - UIAccessibilityElement *ae = container.accessibilityElements.firstObject; - XCTAssertTrue([[ae accessibilityLabel] isEqualToString:@"node, text, text2"]); - */ -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASSnapshotTestCase.h b/submodules/AsyncDisplayKit/Tests/ASSnapshotTestCase.h deleted file mode 100644 index 195e4b7918..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASSnapshotTestCase.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// ASSnapshotTestCase.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdocumentation" -#import -#pragma clang diagnostic pop - -#import "ASDisplayNodeTestsHelper.h" - -@class ASDisplayNode; - -NSOrderedSet *ASSnapshotTestCaseDefaultSuffixes(void); - -#define ASSnapshotVerifyNode(node__, identifier__) \ -{ \ - [ASSnapshotTestCase hackilySynchronouslyRecursivelyRenderNode:node__]; \ - FBSnapshotVerifyLayerWithOptions(node__.layer, identifier__, ASSnapshotTestCaseDefaultSuffixes(), 0) \ -} - -#define ASSnapshotVerifyLayer(layer__, identifier__) \ - FBSnapshotVerifyLayerWithOptions(layer__, identifier__, ASSnapshotTestCaseDefaultSuffixes(), 0); - -#define ASSnapshotVerifyView(view__, identifier__) \ - FBSnapshotVerifyViewWithOptions(view__, identifier__, ASSnapshotTestCaseDefaultSuffixes(), 0); - -#define ASSnapshotVerifyViewWithTolerance(view__, identifier__, tolerance__) \ - FBSnapshotVerifyViewWithOptions(view__, identifier__, ASSnapshotTestCaseDefaultSuffixes(), tolerance__); - -@interface ASSnapshotTestCase : FBSnapshotTestCase - -/** - * Hack for testing. ASDisplayNode lacks an explicit -render method, so we manually hit its layout & display codepaths. - */ -+ (void)hackilySynchronouslyRecursivelyRenderNode:(ASDisplayNode *)node; - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASSnapshotTestCase.mm b/submodules/AsyncDisplayKit/Tests/ASSnapshotTestCase.mm deleted file mode 100644 index 560c25988e..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASSnapshotTestCase.mm +++ /dev/null @@ -1,40 +0,0 @@ -// -// ASSnapshotTestCase.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASSnapshotTestCase.h" -#import -#import -#import -#import - -NSOrderedSet *ASSnapshotTestCaseDefaultSuffixes(void) -{ - NSMutableOrderedSet *suffixesSet = [[NSMutableOrderedSet alloc] init]; - // In some rare cases, slightly different rendering may occur on iOS 10 (text rasterization). - // If the test folders find any image that exactly matches, they pass; - // if an image is not present at all, or it fails, it moves on to check the others. - // This means the order doesn't matter besides reducing logging / performance. - if (AS_AT_LEAST_IOS10) { - [suffixesSet addObject:@"_iOS_10"]; - } - [suffixesSet addObject:@"_64"]; - return [suffixesSet copy]; -} - -@implementation ASSnapshotTestCase - -+ (void)hackilySynchronouslyRecursivelyRenderNode:(ASDisplayNode *)node -{ - ASDisplayNodePerformBlockOnEveryNode(nil, node, YES, ^(ASDisplayNode * _Nonnull node) { - [node.layer setNeedsDisplay]; - }); - [node recursivelyEnsureDisplaySynchronously:YES]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASStackLayoutSpecSnapshotTests.mm b/submodules/AsyncDisplayKit/Tests/ASStackLayoutSpecSnapshotTests.mm deleted file mode 100644 index ac6a2a254d..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASStackLayoutSpecSnapshotTests.mm +++ /dev/null @@ -1,1387 +0,0 @@ -// -// ASStackLayoutSpecSnapshotTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASLayoutSpecSnapshotTestsHelper.h" - -#import -#import -#import -#import -#import -#import - -@interface ASStackLayoutSpecSnapshotTests : ASLayoutSpecSnapshotTestCase -@end - -@implementation ASStackLayoutSpecSnapshotTests - -#pragma mark - Utility methods - -static NSArray *defaultSubnodes() -{ - return defaultSubnodesWithSameSize(CGSizeZero, 0); -} - -static NSArray *defaultSubnodesWithSameSize(CGSize subnodeSize, CGFloat flex) -{ - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor redColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor greenColor], subnodeSize) - ]; - for (ASDisplayNode *subnode in subnodes) { - subnode.style.flexGrow = flex; - subnode.style.flexShrink = flex; - } - return subnodes; -} - -static void setCGSizeToNode(CGSize size, ASDisplayNode *node) -{ - node.style.width = ASDimensionMakeWithPoints(size.width); - node.style.height = ASDimensionMakeWithPoints(size.height); -} - -static NSArray *defaultTextNodes() -{ - ASTextNode *textNode1 = [[ASTextNode alloc] init]; - textNode1.attributedText = [[NSAttributedString alloc] initWithString:@"Hello" - attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:20]}]; - textNode1.backgroundColor = [UIColor redColor]; - textNode1.layerBacked = YES; - - ASTextNode *textNode2 = [[ASTextNode alloc] init]; - textNode2.attributedText = [[NSAttributedString alloc] initWithString:@"Why, hello there! How are you?" - attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:12]}]; - textNode2.backgroundColor = [UIColor blueColor]; - textNode2.layerBacked = YES; - - return @[textNode1, textNode2]; -} - -- (void)testStackLayoutSpecWithJustify:(ASStackLayoutJustifyContent)justify - flexFactor:(CGFloat)flex - sizeRange:(ASSizeRange)sizeRange - identifier:(NSString *)identifier -{ - ASStackLayoutSpecStyle style = { - .direction = ASStackLayoutDirectionHorizontal, - .justifyContent = justify - }; - - NSArray *subnodes = defaultSubnodesWithSameSize({50, 50}, flex); - - [self testStackLayoutSpecWithStyle:style sizeRange:sizeRange subnodes:subnodes identifier:identifier]; -} - -- (void)testStackLayoutSpecWithStyle:(ASStackLayoutSpecStyle)style - sizeRange:(ASSizeRange)sizeRange - subnodes:(NSArray *)subnodes - identifier:(NSString *)identifier -{ - [self testStackLayoutSpecWithStyle:style children:subnodes sizeRange:sizeRange subnodes:subnodes identifier:identifier]; -} - -- (void)testStackLayoutSpecWithStyle:(ASStackLayoutSpecStyle)style - children:(NSArray *)children - sizeRange:(ASSizeRange)sizeRange - subnodes:(NSArray *)subnodes - identifier:(NSString *)identifier -{ - ASStackLayoutSpec *stackLayoutSpec = - [ASStackLayoutSpec - stackLayoutSpecWithDirection:style.direction - spacing:style.spacing - justifyContent:style.justifyContent - alignItems:style.alignItems - flexWrap:style.flexWrap - alignContent:style.alignContent - lineSpacing:style.lineSpacing - children:children]; - - [self testStackLayoutSpec:stackLayoutSpec sizeRange:sizeRange subnodes:subnodes identifier:identifier]; -} - -- (void)testStackLayoutSpecWithDirection:(ASStackLayoutDirection)direction - itemsHorizontalAlignment:(ASHorizontalAlignment)horizontalAlignment - itemsVerticalAlignment:(ASVerticalAlignment)verticalAlignment - identifier:(NSString *)identifier -{ - NSArray *subnodes = defaultSubnodesWithSameSize({50, 50}, 0); - - ASStackLayoutSpec *stackLayoutSpec = [[ASStackLayoutSpec alloc] init]; - stackLayoutSpec.direction = direction; - stackLayoutSpec.children = subnodes; - stackLayoutSpec.horizontalAlignment = horizontalAlignment; - stackLayoutSpec.verticalAlignment = verticalAlignment; - - CGSize exactSize = CGSizeMake(200, 200); - static ASSizeRange kSize = ASSizeRangeMake(exactSize, exactSize); - [self testStackLayoutSpec:stackLayoutSpec sizeRange:kSize subnodes:subnodes identifier:identifier]; -} - -- (void)testStackLayoutSpecWithBaselineAlignment:(ASStackLayoutAlignItems)baselineAlignment - identifier:(NSString *)identifier -{ - NSAssert(baselineAlignment == ASStackLayoutAlignItemsBaselineFirst || baselineAlignment == ASStackLayoutAlignItemsBaselineLast, @"Unexpected baseline alignment"); - NSArray *textNodes = defaultTextNodes(); - textNodes[1].style.flexShrink = 1.0; - - ASStackLayoutSpec *stackLayoutSpec = [ASStackLayoutSpec horizontalStackLayoutSpec]; - stackLayoutSpec.children = textNodes; - stackLayoutSpec.alignItems = baselineAlignment; - - static ASSizeRange kSize = ASSizeRangeMake(CGSizeMake(150, 0), CGSizeMake(150, CGFLOAT_MAX)); - [self testStackLayoutSpec:stackLayoutSpec sizeRange:kSize subnodes:textNodes identifier:identifier]; -} - -- (void)testStackLayoutSpec:(ASStackLayoutSpec *)stackLayoutSpec - sizeRange:(ASSizeRange)sizeRange - subnodes:(NSArray *)subnodes - identifier:(NSString *)identifier -{ - ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor whiteColor]); - ASLayoutSpec *layoutSpec = [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild:stackLayoutSpec background:backgroundNode]; - - NSMutableArray *newSubnodes = [NSMutableArray arrayWithObject:backgroundNode]; - [newSubnodes addObjectsFromArray:subnodes]; - - [self testLayoutSpec:layoutSpec sizeRange:sizeRange subnodes:newSubnodes identifier:identifier]; -} - -- (void)testStackLayoutSpecWithAlignContent:(ASStackLayoutAlignContent)alignContent - lineSpacing:(CGFloat)lineSpacing - sizeRange:(ASSizeRange)sizeRange - identifier:(NSString *)identifier -{ - ASStackLayoutSpecStyle style = { - .direction = ASStackLayoutDirectionHorizontal, - .flexWrap = ASStackLayoutFlexWrapWrap, - .alignContent = alignContent, - .lineSpacing = lineSpacing, - }; - - CGSize subnodeSize = {50, 50}; - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor redColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor yellowColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor magentaColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor greenColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor cyanColor], subnodeSize), - ]; - - [self testStackLayoutSpecWithStyle:style sizeRange:sizeRange subnodes:subnodes identifier:identifier]; -} - -- (void)testStackLayoutSpecWithAlignContent:(ASStackLayoutAlignContent)alignContent - sizeRange:(ASSizeRange)sizeRange - identifier:(NSString *)identifier -{ - [self testStackLayoutSpecWithAlignContent:alignContent lineSpacing:0.0 sizeRange:sizeRange identifier:identifier]; -} - -#pragma mark - - -- (void)testDefaultStackLayoutElementFlexProperties -{ - ASDisplayNode *displayNode = [[ASDisplayNode alloc] init]; - - XCTAssertEqual(displayNode.style.flexShrink, NO); - XCTAssertEqual(displayNode.style.flexGrow, NO); - - const ASDimension unconstrainedDimension = ASDimensionAuto; - const ASDimension flexBasis = displayNode.style.flexBasis; - XCTAssertEqual(flexBasis.unit, unconstrainedDimension.unit); - XCTAssertEqual(flexBasis.value, unconstrainedDimension.value); -} - -- (void)testUnderflowBehaviors -{ - // width 300px; height 0-300px - static ASSizeRange kSize = {{300, 0}, {300, 300}}; - [self testStackLayoutSpecWithJustify:ASStackLayoutJustifyContentStart flexFactor:0 sizeRange:kSize identifier:@"justifyStart"]; - [self testStackLayoutSpecWithJustify:ASStackLayoutJustifyContentCenter flexFactor:0 sizeRange:kSize identifier:@"justifyCenter"]; - [self testStackLayoutSpecWithJustify:ASStackLayoutJustifyContentEnd flexFactor:0 sizeRange:kSize identifier:@"justifyEnd"]; - [self testStackLayoutSpecWithJustify:ASStackLayoutJustifyContentStart flexFactor:1 sizeRange:kSize identifier:@"flex"]; - [self testStackLayoutSpecWithJustify:ASStackLayoutJustifyContentSpaceBetween flexFactor:0 sizeRange:kSize identifier:@"justifySpaceBetween"]; - [self testStackLayoutSpecWithJustify:ASStackLayoutJustifyContentSpaceAround flexFactor:0 sizeRange:kSize identifier:@"justifySpaceAround"]; -} - -- (void)testOverflowBehaviors -{ - // width 110px; height 0-300px - static ASSizeRange kSize = {{110, 0}, {110, 300}}; - [self testStackLayoutSpecWithJustify:ASStackLayoutJustifyContentStart flexFactor:0 sizeRange:kSize identifier:@"justifyStart"]; - [self testStackLayoutSpecWithJustify:ASStackLayoutJustifyContentCenter flexFactor:0 sizeRange:kSize identifier:@"justifyCenter"]; - [self testStackLayoutSpecWithJustify:ASStackLayoutJustifyContentEnd flexFactor:0 sizeRange:kSize identifier:@"justifyEnd"]; - [self testStackLayoutSpecWithJustify:ASStackLayoutJustifyContentStart flexFactor:1 sizeRange:kSize identifier:@"flex"]; - // On overflow, "space between" is identical to "content start" - [self testStackLayoutSpecWithJustify:ASStackLayoutJustifyContentSpaceBetween flexFactor:0 sizeRange:kSize identifier:@"justifyStart"]; - // On overflow, "space around" is identical to "content center" - [self testStackLayoutSpecWithJustify:ASStackLayoutJustifyContentSpaceAround flexFactor:0 sizeRange:kSize identifier:@"justifyCenter"]; -} - -- (void)testOverflowBehaviorsWhenAllFlexShrinkChildrenHaveBeenClampedToZeroButViolationStillExists -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - NSArray *subnodes = defaultSubnodesWithSameSize({50, 50}, 0); - subnodes[1].style.flexShrink = 1; - - // Width is 75px--that's less than the sum of the widths of the children, which is 100px. - static ASSizeRange kSize = {{75, 0}, {75, 150}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testFlexWithUnequalIntrinsicSizes -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - NSArray *subnodes = defaultSubnodesWithSameSize({50, 50}, 1); - setCGSizeToNode({150, 150}, subnodes[1]); - - // width 300px; height 0-150px. - static ASSizeRange kUnderflowSize = {{300, 0}, {300, 150}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kUnderflowSize subnodes:subnodes identifier:@"underflow"]; - - // width 200px; height 0-150px. - static ASSizeRange kOverflowSize = {{200, 0}, {200, 150}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kOverflowSize subnodes:subnodes identifier:@"overflow"]; -} - -- (void)testCrossAxisSizeBehaviors -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; - - NSArray *subnodes = defaultSubnodes(); - setCGSizeToNode({50, 50}, subnodes[0]); - setCGSizeToNode({100, 50}, subnodes[1]); - setCGSizeToNode({150, 50}, subnodes[2]); - - // width 0-300px; height 300px - static ASSizeRange kVariableHeight = {{0, 300}, {300, 300}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kVariableHeight subnodes:subnodes identifier:@"variableHeight"]; - - // width 300px; height 300px - static ASSizeRange kFixedHeight = {{300, 300}, {300, 300}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kFixedHeight subnodes:subnodes identifier:@"fixedHeight"]; -} - -- (void)testStackSpacing -{ - ASStackLayoutSpecStyle style = { - .direction = ASStackLayoutDirectionVertical, - .spacing = 10 - }; - - NSArray *subnodes = defaultSubnodes(); - setCGSizeToNode({50, 50}, subnodes[0]); - setCGSizeToNode({100, 50}, subnodes[1]); - setCGSizeToNode({150, 50}, subnodes[2]); - - // width 0-300px; height 300px - static ASSizeRange kVariableHeight = {{0, 300}, {300, 300}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kVariableHeight subnodes:subnodes identifier:@"variableHeight"]; -} - -- (void)testStackSpacingWithChildrenHavingNilObjects -{ - // This should take a zero height since all children have a nil node. If it takes a height > 0, a blue background - // will show up, hence failing the test. - ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor blueColor]); - - ASLayoutSpec *layoutSpec = - [ASInsetLayoutSpec - insetLayoutSpecWithInsets:{10, 10, 10, 10} - child: - [ASBackgroundLayoutSpec - backgroundLayoutSpecWithChild: - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical - spacing:10 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStretch - children:@[]] - background:backgroundNode]]; - - // width 300px; height 0-300px - static ASSizeRange kVariableHeight = {{300, 0}, {300, 300}}; - [self testLayoutSpec:layoutSpec sizeRange:kVariableHeight subnodes:@[backgroundNode] identifier:@"variableHeight"]; -} - -- (void)testChildSpacing -{ - // width 0-INF; height 0-INF - static ASSizeRange kAnySize = {{0, 0}, {INFINITY, INFINITY}}; - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; - - NSArray *subnodes = defaultSubnodes(); - setCGSizeToNode({50, 50}, subnodes[0]); - setCGSizeToNode({100, 70}, subnodes[1]); - setCGSizeToNode({150, 90}, subnodes[2]); - - subnodes[1].style.spacingBefore = 10; - subnodes[2].style.spacingBefore = 20; - [self testStackLayoutSpecWithStyle:style sizeRange:kAnySize subnodes:subnodes identifier:@"spacingBefore"]; - // Reset above spacing values - subnodes[1].style.spacingBefore = 0; - subnodes[2].style.spacingBefore = 0; - - subnodes[1].style.spacingAfter = 10; - subnodes[2].style.spacingAfter = 20; - [self testStackLayoutSpecWithStyle:style sizeRange:kAnySize subnodes:subnodes identifier:@"spacingAfter"]; - // Reset above spacing values - subnodes[1].style.spacingAfter = 0; - subnodes[2].style.spacingAfter = 0; - - style.spacing = 10; - subnodes[1].style.spacingBefore = -10; - subnodes[1].style.spacingAfter = -10; - [self testStackLayoutSpecWithStyle:style sizeRange:kAnySize subnodes:subnodes identifier:@"spacingBalancedOut"]; -} - -- (void)testJustifiedCenterWithChildSpacing -{ - ASStackLayoutSpecStyle style = { - .direction = ASStackLayoutDirectionVertical, - .justifyContent = ASStackLayoutJustifyContentCenter - }; - - NSArray *subnodes = defaultSubnodes(); - setCGSizeToNode({50, 50}, subnodes[0]); - setCGSizeToNode({100, 70}, subnodes[1]); - setCGSizeToNode({150, 90}, subnodes[2]); - - subnodes[0].style.spacingBefore = 0; - subnodes[1].style.spacingBefore = 20; - subnodes[2].style.spacingBefore = 30; - - // width 0-300px; height 300px - static ASSizeRange kVariableHeight = {{0, 300}, {300, 300}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kVariableHeight subnodes:subnodes identifier:@"variableHeight"]; -} - -- (void)testJustifiedSpaceBetweenWithOneChild -{ - ASStackLayoutSpecStyle style = { - .direction = ASStackLayoutDirectionHorizontal, - .justifyContent = ASStackLayoutJustifyContentSpaceBetween - }; - - ASDisplayNode *child = ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 50}); - - // width 300px; height 0-INF - static ASSizeRange kVariableHeight = {{300, 0}, {300, INFINITY}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kVariableHeight subnodes:@[child] identifier:nil]; -} - -- (void)testJustifiedSpaceAroundWithOneChild -{ - ASStackLayoutSpecStyle style = { - .direction = ASStackLayoutDirectionHorizontal, - .justifyContent = ASStackLayoutJustifyContentSpaceAround - }; - - ASDisplayNode *child = ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 50}); - - // width 300px; height 0-INF - static ASSizeRange kVariableHeight = {{300, 0}, {300, INFINITY}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kVariableHeight subnodes:@[child] identifier:nil]; -} - -- (void)testJustifiedSpaceBetweenWithRemainingSpace -{ - // width 301px; height 0-300px; - static ASSizeRange kSize = {{301, 0}, {301, 300}}; - [self testStackLayoutSpecWithJustify:ASStackLayoutJustifyContentSpaceBetween flexFactor:0 sizeRange:kSize identifier:nil]; -} - -- (void)testJustifiedSpaceAroundWithRemainingSpace -{ - // width 305px; height 0-300px; - static ASSizeRange kSize = {{305, 0}, {305, 300}}; - [self testStackLayoutSpecWithJustify:ASStackLayoutJustifyContentSpaceAround flexFactor:0 sizeRange:kSize identifier:nil]; -} - -- (void)testChildThatChangesCrossSizeWhenMainSizeIsFlexed -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - ASDisplayNode *subnode1 = ASDisplayNodeWithBackgroundColor([UIColor blueColor]); - ASDisplayNode *subnode2 = ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 50}); - - ASRatioLayoutSpec *child1 = [ASRatioLayoutSpec ratioLayoutSpecWithRatio:1.5 child:subnode1]; - child1.style.flexBasis = ASDimensionMakeWithFraction(1); - child1.style.flexGrow = 1; - child1.style.flexShrink = 1; - - static ASSizeRange kFixedWidth = {{150, 0}, {150, INFINITY}}; - [self testStackLayoutSpecWithStyle:style children:@[child1, subnode2] sizeRange:kFixedWidth subnodes:@[subnode1, subnode2] identifier:nil]; -} - -- (void)testAlignCenterWithFlexedMainDimension -{ - ASStackLayoutSpecStyle style = { - .direction = ASStackLayoutDirectionVertical, - .alignItems = ASStackLayoutAlignItemsCenter - }; - - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor redColor], {100, 100}), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], {50, 50}) - ]; - subnodes[0].style.flexShrink = 1; - subnodes[1].style.flexShrink = 1; - - static ASSizeRange kFixedWidth = {{150, 0}, {150, 100}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kFixedWidth subnodes:subnodes identifier:nil]; -} - -- (void)testAlignCenterWithIndefiniteCrossDimension -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - ASDisplayNode *subnode1 = ASDisplayNodeWithBackgroundColor([UIColor redColor], {100, 100}); - - ASDisplayNode *subnode2 = ASDisplayNodeWithBackgroundColor([UIColor blueColor], {50, 50}); - subnode2.style.alignSelf = ASStackLayoutAlignSelfCenter; - - NSArray *subnodes = @[subnode1, subnode2]; - static ASSizeRange kFixedWidth = {{150, 0}, {150, INFINITY}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kFixedWidth subnodes:subnodes identifier:nil]; -} - -- (void)testAlignedStart -{ - ASStackLayoutSpecStyle style = { - .direction = ASStackLayoutDirectionVertical, - .justifyContent = ASStackLayoutJustifyContentCenter, - .alignItems = ASStackLayoutAlignItemsStart - }; - - NSArray *subnodes = defaultSubnodes(); - setCGSizeToNode({50, 50}, subnodes[0]); - setCGSizeToNode({100, 70}, subnodes[1]); - setCGSizeToNode({150, 90}, subnodes[2]); - - subnodes[0].style.spacingBefore = 0; - subnodes[1].style.spacingBefore = 20; - subnodes[2].style.spacingBefore = 30; - - static ASSizeRange kExactSize = {{300, 300}, {300, 300}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kExactSize subnodes:subnodes identifier:nil]; -} - -- (void)testAlignedEnd -{ - ASStackLayoutSpecStyle style = { - .direction = ASStackLayoutDirectionVertical, - .justifyContent = ASStackLayoutJustifyContentCenter, - .alignItems = ASStackLayoutAlignItemsEnd - }; - - NSArray *subnodes = defaultSubnodes(); - setCGSizeToNode({50, 50}, subnodes[0]); - setCGSizeToNode({100, 70}, subnodes[1]); - setCGSizeToNode({150, 90}, subnodes[2]); - - subnodes[0].style.spacingBefore = 0; - subnodes[1].style.spacingBefore = 20; - subnodes[2].style.spacingBefore = 30; - - static ASSizeRange kExactSize = {{300, 300}, {300, 300}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kExactSize subnodes:subnodes identifier:nil]; -} - -- (void)testAlignedCenter -{ - ASStackLayoutSpecStyle style = { - .direction = ASStackLayoutDirectionVertical, - .justifyContent = ASStackLayoutJustifyContentCenter, - .alignItems = ASStackLayoutAlignItemsCenter - }; - - NSArray *subnodes = defaultSubnodes(); - setCGSizeToNode({50, 50}, subnodes[0]); - setCGSizeToNode({100, 70}, subnodes[1]); - setCGSizeToNode({150, 90}, subnodes[2]); - - subnodes[0].style.spacingBefore = 0; - subnodes[1].style.spacingBefore = 20; - subnodes[2].style.spacingBefore = 30; - - static ASSizeRange kExactSize = {{300, 300}, {300, 300}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kExactSize subnodes:subnodes identifier:nil]; -} - -- (void)testAlignedStretchNoChildExceedsMin -{ - ASStackLayoutSpecStyle style = { - .direction = ASStackLayoutDirectionVertical, - .justifyContent = ASStackLayoutJustifyContentCenter, - .alignItems = ASStackLayoutAlignItemsStretch - }; - - NSArray *subnodes = defaultSubnodes(); - setCGSizeToNode({50, 50}, subnodes[0]); - setCGSizeToNode({100, 70}, subnodes[1]); - setCGSizeToNode({150, 90}, subnodes[2]); - - subnodes[0].style.spacingBefore = 0; - subnodes[1].style.spacingBefore = 20; - subnodes[2].style.spacingBefore = 30; - - static ASSizeRange kVariableSize = {{200, 200}, {300, 300}}; - // all children should be 200px wide - [self testStackLayoutSpecWithStyle:style sizeRange:kVariableSize subnodes:subnodes identifier:nil]; -} - -- (void)testAlignedStretchOneChildExceedsMin -{ - ASStackLayoutSpecStyle style = { - .direction = ASStackLayoutDirectionVertical, - .justifyContent = ASStackLayoutJustifyContentCenter, - .alignItems = ASStackLayoutAlignItemsStretch - }; - - NSArray *subnodes = defaultSubnodes(); - setCGSizeToNode({50, 50}, subnodes[0]); - setCGSizeToNode({100, 70}, subnodes[1]); - setCGSizeToNode({150, 90}, subnodes[2]); - - subnodes[0].style.spacingBefore = 0; - subnodes[1].style.spacingBefore = 20; - subnodes[2].style.spacingBefore = 30; - - static ASSizeRange kVariableSize = {{50, 50}, {300, 300}}; - // all children should be 150px wide - [self testStackLayoutSpecWithStyle:style sizeRange:kVariableSize subnodes:subnodes identifier:nil]; -} - -- (void)testEmptyStack -{ - static ASSizeRange kVariableSize = {{50, 50}, {300, 300}}; - [self testStackLayoutSpecWithStyle:{} sizeRange:kVariableSize subnodes:@[] identifier:nil]; -} - -- (void)testFixedFlexBasisAppliedWhenFlexingItems -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - NSArray *subnodes = defaultSubnodesWithSameSize({50, 50}, 0); - setCGSizeToNode({150, 150}, subnodes[1]); - - for (ASDisplayNode *subnode in subnodes) { - subnode.style.flexGrow = 1; - subnode.style.flexBasis = ASDimensionMakeWithPoints(10); - } - - // width 300px; height 0-150px. - static ASSizeRange kUnderflowSize = {{300, 0}, {300, 150}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kUnderflowSize subnodes:subnodes identifier:@"underflow"]; - - // width 200px; height 0-150px. - static ASSizeRange kOverflowSize = {{200, 0}, {200, 150}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kOverflowSize subnodes:subnodes identifier:@"overflow"]; -} - -- (void)testFractionalFlexBasisResolvesAgainstParentSize -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - NSArray *subnodes = defaultSubnodesWithSameSize({50, 50}, 0); - for (ASDisplayNode *subnode in subnodes) { - subnode.style.flexGrow = 1; - } - - // This should override the intrinsic size of 50pts and instead compute to 50% = 100pts. - // The result should be that the red box is twice as wide as the blue and gree boxes after flexing. - subnodes[0].style.flexBasis = ASDimensionMakeWithFraction(0.5); - - static ASSizeRange kSize = {{200, 0}, {200, INFINITY}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testFixedFlexBasisOverridesIntrinsicSizeForNonFlexingChildren -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - NSArray *subnodes = defaultSubnodes(); - setCGSizeToNode({50, 50}, subnodes[0]); - setCGSizeToNode({150, 150}, subnodes[1]); - setCGSizeToNode({150, 50}, subnodes[2]); - - for (ASDisplayNode *subnode in subnodes) { - subnode.style.flexBasis = ASDimensionMakeWithPoints(20); - } - - static ASSizeRange kSize = {{300, 0}, {300, 150}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testCrossAxisStretchingOccursAfterStackAxisFlexing -{ - // If cross axis stretching occurred *before* flexing, then the blue child would be stretched to 3000 points tall. - // Instead it should be stretched to 300 points tall, matching the red child and not overlapping the green inset. - - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor greenColor]), // Inset background node - ASDisplayNodeWithBackgroundColor([UIColor blueColor]), // child1 of stack - ASDisplayNodeWithBackgroundColor([UIColor redColor], {500, 500}) // child2 of stack - ]; - - subnodes[1].style.width = ASDimensionMake(10); - - ASDisplayNode *child2 = subnodes[2]; - child2.style.flexGrow = 1; - child2.style.flexShrink = 1; - - // If cross axis stretching occurred *before* flexing, then the blue child would be stretched to 3000 points tall. - // Instead it should be stretched to 300 points tall, matching the red child and not overlapping the green inset. - ASLayoutSpec *layoutSpec = - [ASBackgroundLayoutSpec - backgroundLayoutSpecWithChild: - [ASInsetLayoutSpec - insetLayoutSpecWithInsets:UIEdgeInsetsMake(10, 10, 10, 10) - child: - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStretch - children:@[subnodes[1], child2]] - ] - background:subnodes[0]]; - - static ASSizeRange kSize = {{300, 0}, {300, INFINITY}}; - [self testLayoutSpec:layoutSpec sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testPositiveViolationIsDistributedEqually -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - NSArray *subnodes = defaultSubnodesWithSameSize({50, 50}, 0); - subnodes[0].style.flexGrow = 1; - subnodes[2].style.flexGrow = 1; - - // In this scenario a width of 350 results in a positive violation of 200. - // Due to each flexible subnode specifying a flex grow factor of 1 the violation will be distributed evenly. - static ASSizeRange kSize = {{350, 350}, {350, 350}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testPositiveViolationIsDistributedEquallyWithArbitraryFloats -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - NSArray *subnodes = defaultSubnodesWithSameSize({50, 50}, 0); - subnodes[0].style.flexGrow = 0.5; - subnodes[2].style.flexGrow = 0.5; - - // In this scenario a width of 350 results in a positive violation of 200. - // Due to each flexible child component specifying a flex grow factor of 0.5 the violation will be distributed evenly. - static ASSizeRange kSize = {{350, 350}, {350, 350}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testPositiveViolationIsDistributedProportionally -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; - - NSArray *subnodes = defaultSubnodesWithSameSize({50, 50}, 0); - subnodes[0].style.flexGrow = 1; - subnodes[1].style.flexGrow = 2; - subnodes[2].style.flexGrow = 1; - - // In this scenario a width of 350 results in a positive violation of 200. - // The first and third subnodes specify a flex grow factor of 1 and will flex by 50. - // The second subnode specifies a flex grow factor of 2 and will flex by 100. - static ASSizeRange kSize = {{350, 350}, {350, 350}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testPositiveViolationIsDistributedProportionallyWithArbitraryFloats -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; - - NSArray *subnodes = defaultSubnodesWithSameSize({50, 50}, 0); - subnodes[0].style.flexGrow = 0.25; - subnodes[1].style.flexGrow = 0.50; - subnodes[2].style.flexGrow = 0.25; - - // In this scenario a width of 350 results in a positive violation of 200. - // The first and third child components specify a flex grow factor of 0.25 and will flex by 50. - // The second child component specifies a flex grow factor of 0.25 and will flex by 100. - static ASSizeRange kSize = {{350, 350}, {350, 350}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testPositiveViolationIsDistributedEquallyAmongMixedChildren -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - const CGSize kSubnodeSize = {50, 50}; - NSArray *subnodes = defaultSubnodesWithSameSize(kSubnodeSize, 0); - subnodes = [subnodes arrayByAddingObject:ASDisplayNodeWithBackgroundColor([UIColor yellowColor], kSubnodeSize)]; - - subnodes[0].style.flexShrink = 1; - subnodes[1].style.flexGrow = 1; - subnodes[2].style.flexShrink = 0; - subnodes[3].style.flexGrow = 1; - - // In this scenario a width of 400 results in a positive violation of 200. - // The first and third subnode specify a flex shrink factor of 1 and 0, respectively. They won't flex. - // The second and fourth subnode specify a flex grow factor of 1 and will flex by 100. - static ASSizeRange kSize = {{400, 400}, {400, 400}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testPositiveViolationIsDistributedEquallyAmongMixedChildrenWithArbitraryFloats -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - const CGSize kSubnodeSize = {50, 50}; - NSArray *subnodes = defaultSubnodesWithSameSize(kSubnodeSize, 0); - subnodes = [subnodes arrayByAddingObject:ASDisplayNodeWithBackgroundColor([UIColor yellowColor], kSubnodeSize)]; - - subnodes[0].style.flexShrink = 1.0; - subnodes[1].style.flexGrow = 0.5; - subnodes[2].style.flexShrink = 0.0; - subnodes[3].style.flexGrow = 0.5; - - // In this scenario a width of 400 results in a positive violation of 200. - // The first and third child components specify a flex shrink factor of 1 and 0, respectively. They won't flex. - // The second and fourth child components specify a flex grow factor of 0.5 and will flex by 100. - static ASSizeRange kSize = {{400, 400}, {400, 400}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testPositiveViolationIsDistributedProportionallyAmongMixedChildren -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; - - const CGSize kSubnodeSize = {50, 50}; - NSArray *subnodes = defaultSubnodesWithSameSize(kSubnodeSize, 0); - subnodes = [subnodes arrayByAddingObject:ASDisplayNodeWithBackgroundColor([UIColor yellowColor], kSubnodeSize)]; - - subnodes[0].style.flexShrink = 1; - subnodes[1].style.flexGrow = 3; - subnodes[2].style.flexShrink = 0; - subnodes[3].style.flexGrow = 1; - - // In this scenario a width of 400 results in a positive violation of 200. - // The first and third subnodes specify a flex shrink factor of 1 and 0, respectively. They won't flex. - // The second child subnode specifies a flex grow factor of 3 and will flex by 150. - // The fourth child subnode specifies a flex grow factor of 1 and will flex by 50. - static ASSizeRange kSize = {{400, 400}, {400, 400}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testPositiveViolationIsDistributedProportionallyAmongMixedChildrenWithArbitraryFloats -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; - - const CGSize kSubnodeSize = {50, 50}; - NSArray *subnodes = defaultSubnodesWithSameSize(kSubnodeSize, 0); - subnodes = [subnodes arrayByAddingObject:ASDisplayNodeWithBackgroundColor([UIColor yellowColor], kSubnodeSize)]; - - subnodes[0].style.flexShrink = 1.0; - subnodes[1].style.flexGrow = 0.75; - subnodes[2].style.flexShrink = 0.0; - subnodes[3].style.flexGrow = 0.25; - - // In this scenario a width of 400 results in a positive violation of 200. - // The first and third child components specify a flex shrink factor of 1 and 0, respectively. They won't flex. - // The second child component specifies a flex grow factor of 0.75 and will flex by 150. - // The fourth child component specifies a flex grow factor of 0.25 and will flex by 50. - static ASSizeRange kSize = {{400, 400}, {400, 400}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testRemainingViolationIsAppliedProperlyToFirstFlexibleChild -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; - - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor greenColor], {50, 25}), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], {50, 0}), - ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 100}) - ]; - - subnodes[0].style.flexGrow = 0; - subnodes[1].style.flexGrow = 1; - subnodes[2].style.flexGrow = 1; - - // In this scenario a width of 300 results in a positive violation of 175. - // The second and third subnodes specify a flex grow factor of 1 and will flex by 88 and 87, respectively. - static ASSizeRange kSize = {{300, 300}, {300, 300}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testRemainingViolationIsAppliedProperlyToFirstFlexibleChildWithArbitraryFloats -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; - - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor greenColor], {50, 25}), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], {50, 0}), - ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 100}) - ]; - - subnodes[0].style.flexGrow = 0.0; - subnodes[1].style.flexGrow = 0.5; - subnodes[2].style.flexGrow = 0.5; - - // In this scenario a width of 300 results in a positive violation of 175. - // The second and third child components specify a flex grow factor of 0.5 and will flex by 88 and 87, respectively. - static ASSizeRange kSize = {{300, 300}, {300, 300}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testNegativeViolationIsDistributedBasedOnSize -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor greenColor], {300, 50}), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], {100, 50}), - ASDisplayNodeWithBackgroundColor([UIColor redColor], {200, 50}) - ]; - - subnodes[0].style.flexShrink = 1; - subnodes[1].style.flexShrink = 0; - subnodes[2].style.flexShrink = 1; - - // In this scenario a width of 400 results in a negative violation of 200. - // The first and third subnodes specify a flex shrink factor of 1 and will flex by -120 and -80, respectively. - static ASSizeRange kSize = {{400, 400}, {400, 400}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testNegativeViolationIsDistributedBasedOnSizeWithArbitraryFloats -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor greenColor], {300, 50}), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], {100, 50}), - ASDisplayNodeWithBackgroundColor([UIColor redColor], {200, 50}) - ]; - - subnodes[0].style.flexShrink = 0.5; - subnodes[1].style.flexShrink = 0.0; - subnodes[2].style.flexShrink = 0.5; - - // In this scenario a width of 400 results in a negative violation of 200. - // The first and third child components specify a flex shrink factor of 0.5 and will flex by -120 and -80, respectively. - static ASSizeRange kSize = {{400, 400}, {400, 400}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testNegativeViolationIsDistributedBasedOnSizeAndFlexFactor -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; - - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor greenColor], {50, 300}), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], {50, 100}), - ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 200}) - ]; - - subnodes[0].style.flexShrink = 2; - subnodes[1].style.flexShrink = 1; - subnodes[2].style.flexShrink = 2; - - // In this scenario a width of 400 results in a negative violation of 200. - // The first and third subnodes specify a flex shrink factor of 2 and will flex by -109 and -72, respectively. - // The second subnode specifies a flex shrink factor of 1 and will flex by -18. - static ASSizeRange kSize = {{400, 400}, {400, 400}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorWithArbitraryFloats -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; - - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor greenColor], {50, 300}), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], {50, 100}), - ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 200}) - ]; - - subnodes[0].style.flexShrink = 0.4; - subnodes[1].style.flexShrink = 0.2; - subnodes[2].style.flexShrink = 0.4; - - // In this scenario a width of 400 results in a negative violation of 200. - // The first and third child components specify a flex shrink factor of 0.4 and will flex by -109 and -72, respectively. - // The second child component specifies a flex shrink factor of 0.2 and will flex by -18. - static ASSizeRange kSize = {{400, 400}, {400, 400}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenChildren -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - const CGSize kSubnodeSize = {150, 50}; - NSArray *subnodes = defaultSubnodesWithSameSize(kSubnodeSize, 0); - subnodes = [subnodes arrayByAddingObject:ASDisplayNodeWithBackgroundColor([UIColor yellowColor], kSubnodeSize)]; - - subnodes[0].style.flexGrow = 1; - subnodes[1].style.flexShrink = 1; - subnodes[2].style.flexGrow = 0; - subnodes[3].style.flexShrink = 1; - - // In this scenario a width of 400 results in a negative violation of 200. - // The first and third subnodes specify a flex grow factor of 1 and 0, respectively. They won't flex. - // The second and fourth subnodes specify a flex grow factor of 1 and will flex by -100. - static ASSizeRange kSize = {{400, 400}, {400, 400}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenWithArbitraryFloats -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - const CGSize kSubnodeSize = {150, 50}; - NSArray *subnodes = defaultSubnodesWithSameSize(kSubnodeSize, 0); - subnodes = [subnodes arrayByAddingObject:ASDisplayNodeWithBackgroundColor([UIColor yellowColor], kSubnodeSize)]; - - subnodes[0].style.flexGrow = 1.0; - subnodes[1].style.flexShrink = 0.5; - subnodes[2].style.flexGrow = 0.0; - subnodes[3].style.flexShrink = 0.5; - - // In this scenario a width of 400 results in a negative violation of 200. - // The first and third child components specify a flex grow factor of 1 and 0, respectively. They won't flex. - // The second and fourth child components specify a flex shrink factor of 0.5 and will flex by -100. - static ASSizeRange kSize = {{400, 400}, {400, 400}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildren -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; - - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor greenColor], {50, 150}), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], {50, 100}), - ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 150}), - ASDisplayNodeWithBackgroundColor([UIColor yellowColor], {50, 200}) - ]; - - subnodes[0].style.flexGrow = 1; - subnodes[1].style.flexShrink = 1; - subnodes[2].style.flexGrow = 0; - subnodes[3].style.flexShrink = 3; - - // In this scenario a width of 400 results in a negative violation of 200. - // The first and third subnodes specify a flex grow factor of 1 and 0, respectively. They won't flex. - // The second subnode specifies a flex grow factor of 1 and will flex by -28. - // The fourth subnode specifies a flex grow factor of 3 and will flex by -171. - static ASSizeRange kSize = {{400, 400}, {400, 400}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildrenArbitraryFloats -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; - - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor greenColor], {50, 150}), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], {50, 100}), - ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 150}), - ASDisplayNodeWithBackgroundColor([UIColor yellowColor], {50, 200}) - ]; - - subnodes[0].style.flexGrow = 1.0; - subnodes[1].style.flexShrink = 0.25; - subnodes[2].style.flexGrow = 0.0; - subnodes[3].style.flexShrink = 0.75; - - // In this scenario a width of 400 results in a negative violation of 200. - // The first and third child components specify a flex grow factor of 1 and 0, respectively. They won't flex. - // The second child component specifies a flex shrink factor of 0.25 and will flex by -28. - // The fourth child component specifies a flex shrink factor of 0.75 and will flex by -171. - static ASSizeRange kSize = {{400, 400}, {400, 400}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZero -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor greenColor], {300, 50}), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], {100, 50}), - ASDisplayNodeWithBackgroundColor([UIColor redColor], {200, 50}) - ]; - - subnodes[0].style.flexShrink = 1; - subnodes[1].style.flexShrink = 2; - subnodes[2].style.flexShrink = 1; - - // In this scenario a width of 400 results in a negative violation of 200. - // The first and third subnodes specify a flex shrink factor of 1 and will flex by 50. - // The second subnode specifies a flex shrink factor of 2 and will flex by -57. It will have a width of 43. - static ASSizeRange kSize = {{400, 400}, {400, 400}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWithArbitraryFloats -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor greenColor], {300, 50}), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], {100, 50}), - ASDisplayNodeWithBackgroundColor([UIColor redColor], {200, 50}) - ]; - - subnodes[0].style.flexShrink = 0.25; - subnodes[1].style.flexShrink = 0.50; - subnodes[2].style.flexShrink = 0.25; - - // In this scenario a width of 400 results in a negative violation of 200. - // The first and third child components specify a flex shrink factor of 0.25 and will flex by 50. - // The second child specifies a flex shrink factor of 0.50 and will flex by -57. It will have a width of 43. - static ASSizeRange kSize = {{400, 400}, {400, 400}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - - -- (void)testNegativeViolationAndFlexFactorIsNotRespected -{ - ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; - - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 50}), - ASDisplayNodeWithBackgroundColor([UIColor yellowColor], CGSizeZero), - ]; - - subnodes[0].style.flexShrink = 0; - subnodes[1].style.flexShrink = 1; - - // In this scenario a width of 40 results in a negative violation of 10. - // The first child will not flex. - // The second child specifies a flex shrink factor of 1 but it has a zero size, so the factor won't be respected and it will not shrink. - static ASSizeRange kSize = {{40, 50}, {40, 50}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testNestedStackLayoutStretchDoesNotViolateWidth -{ - ASStackLayoutSpec *stackLayoutSpec = [[ASStackLayoutSpec alloc] init]; // Default direction is horizontal - stackLayoutSpec.direction = ASStackLayoutDirectionHorizontal; - stackLayoutSpec.alignItems = ASStackLayoutAlignItemsStretch; - stackLayoutSpec.style.width = ASDimensionMake(100); - stackLayoutSpec.style.height = ASDimensionMake(100); - - ASDisplayNode *child = ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 50}); - stackLayoutSpec.children = @[child]; - - static ASSizeRange kSize = {{0, 0}, {300, INFINITY}}; - [self testStackLayoutSpec:stackLayoutSpec sizeRange:kSize subnodes:@[child] identifier:nil]; -} - -- (void)testHorizontalAndVerticalAlignments -{ - [self testStackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal itemsHorizontalAlignment:ASHorizontalAlignmentLeft itemsVerticalAlignment:ASVerticalAlignmentTop identifier:@"horizontalTopLeft"]; - [self testStackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal itemsHorizontalAlignment:ASHorizontalAlignmentMiddle itemsVerticalAlignment:ASVerticalAlignmentCenter identifier:@"horizontalCenter"]; - [self testStackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal itemsHorizontalAlignment:ASHorizontalAlignmentRight itemsVerticalAlignment:ASVerticalAlignmentBottom identifier:@"horizontalBottomRight"]; - [self testStackLayoutSpecWithDirection:ASStackLayoutDirectionVertical itemsHorizontalAlignment:ASHorizontalAlignmentLeft itemsVerticalAlignment:ASVerticalAlignmentTop identifier:@"verticalTopLeft"]; - [self testStackLayoutSpecWithDirection:ASStackLayoutDirectionVertical itemsHorizontalAlignment:ASHorizontalAlignmentMiddle itemsVerticalAlignment:ASVerticalAlignmentCenter identifier:@"verticalCenter"]; - [self testStackLayoutSpecWithDirection:ASStackLayoutDirectionVertical itemsHorizontalAlignment:ASHorizontalAlignmentRight itemsVerticalAlignment:ASVerticalAlignmentBottom identifier:@"verticalBottomRight"]; -} - -- (void)testDirectionChangeAfterSettingHorizontalAndVerticalAlignments -{ - ASStackLayoutSpec *stackLayoutSpec = [[ASStackLayoutSpec alloc] init]; // Default direction is horizontal - stackLayoutSpec.horizontalAlignment = ASHorizontalAlignmentRight; - stackLayoutSpec.verticalAlignment = ASVerticalAlignmentCenter; - XCTAssertEqual(stackLayoutSpec.alignItems, ASStackLayoutAlignItemsCenter); - XCTAssertEqual(stackLayoutSpec.justifyContent, ASStackLayoutJustifyContentEnd); - - stackLayoutSpec.direction = ASStackLayoutDirectionVertical; - XCTAssertEqual(stackLayoutSpec.alignItems, ASStackLayoutAlignItemsEnd); - XCTAssertEqual(stackLayoutSpec.justifyContent, ASStackLayoutJustifyContentCenter); -} - -- (void)testAlignItemsAndJustifyContentRestrictionsIfHorizontalAndVerticalAlignmentsAreUsed -{ - ASStackLayoutSpec *stackLayoutSpec = [[ASStackLayoutSpec alloc] init]; - - // No assertions should be thrown here because alignments are not used - stackLayoutSpec.alignItems = ASStackLayoutAlignItemsEnd; - stackLayoutSpec.justifyContent = ASStackLayoutJustifyContentEnd; - - // Set alignments and assert that assertions are thrown - stackLayoutSpec.horizontalAlignment = ASHorizontalAlignmentMiddle; - stackLayoutSpec.verticalAlignment = ASVerticalAlignmentCenter; - XCTAssertThrows(stackLayoutSpec.alignItems = ASStackLayoutAlignItemsEnd); - XCTAssertThrows(stackLayoutSpec.justifyContent = ASStackLayoutJustifyContentEnd); - - // Unset alignments. alignItems and justifyContent should not be changed - stackLayoutSpec.horizontalAlignment = ASHorizontalAlignmentNone; - stackLayoutSpec.verticalAlignment = ASVerticalAlignmentNone; - XCTAssertEqual(stackLayoutSpec.alignItems, ASStackLayoutAlignItemsCenter); - XCTAssertEqual(stackLayoutSpec.justifyContent, ASStackLayoutJustifyContentCenter); - - // Now that alignments are none, setting alignItems and justifyContent should be allowed again - stackLayoutSpec.alignItems = ASStackLayoutAlignItemsEnd; - stackLayoutSpec.justifyContent = ASStackLayoutJustifyContentEnd; - XCTAssertEqual(stackLayoutSpec.alignItems, ASStackLayoutAlignItemsEnd); - XCTAssertEqual(stackLayoutSpec.justifyContent, ASStackLayoutJustifyContentEnd); -} - -#pragma mark - Baseline alignment tests - -- (void)testBaselineAlignment -{ - [self testStackLayoutSpecWithBaselineAlignment:ASStackLayoutAlignItemsBaselineFirst identifier:@"baselineFirst"]; - [self testStackLayoutSpecWithBaselineAlignment:ASStackLayoutAlignItemsBaselineLast identifier:@"baselineLast"]; -} - -- (void)testNestedBaselineAlignments -{ - NSArray *textNodes = defaultTextNodes(); - - ASDisplayNode *stretchedNode = [[ASDisplayNode alloc] init]; - stretchedNode.layerBacked = YES; - stretchedNode.backgroundColor = [UIColor greenColor]; - stretchedNode.style.alignSelf = ASStackLayoutAlignSelfStretch; - stretchedNode.style.height = ASDimensionMake(100); - - ASStackLayoutSpec *verticalStack = [ASStackLayoutSpec verticalStackLayoutSpec]; - verticalStack.children = @[stretchedNode, textNodes[1]]; - verticalStack.style.flexShrink = 1.0; - - ASStackLayoutSpec *horizontalStack = [ASStackLayoutSpec horizontalStackLayoutSpec]; - horizontalStack.children = @[textNodes[0], verticalStack]; - horizontalStack.alignItems = ASStackLayoutAlignItemsBaselineLast; - - NSArray *subnodes = @[textNodes[0], textNodes[1], stretchedNode]; - - static ASSizeRange kSize = ASSizeRangeMake(CGSizeMake(150, 0), CGSizeMake(150, CGFLOAT_MAX)); - [self testStackLayoutSpec:horizontalStack sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testBaselineAlignmentWithSpaceBetween -{ - NSArray *textNodes = defaultTextNodes(); - - ASStackLayoutSpec *stackLayoutSpec = [ASStackLayoutSpec horizontalStackLayoutSpec]; - stackLayoutSpec.children = textNodes; - stackLayoutSpec.alignItems = ASStackLayoutAlignItemsBaselineFirst; - stackLayoutSpec.justifyContent = ASStackLayoutJustifyContentSpaceBetween; - - static ASSizeRange kSize = ASSizeRangeMake(CGSizeMake(300, 0), CGSizeMake(300, CGFLOAT_MAX)); - [self testStackLayoutSpec:stackLayoutSpec sizeRange:kSize subnodes:textNodes identifier:nil]; -} - -- (void)testBaselineAlignmentWithStretchedItem -{ - NSArray *textNodes = defaultTextNodes(); - - ASDisplayNode *stretchedNode = [[ASDisplayNode alloc] init]; - stretchedNode.layerBacked = YES; - stretchedNode.backgroundColor = [UIColor greenColor]; - stretchedNode.style.alignSelf = ASStackLayoutAlignSelfStretch; - stretchedNode.style.flexShrink = 1.0; - stretchedNode.style.flexGrow = 1.0; - - NSMutableArray *children = [NSMutableArray arrayWithArray:textNodes]; - [children insertObject:stretchedNode atIndex:1]; - - ASStackLayoutSpec *stackLayoutSpec = [ASStackLayoutSpec horizontalStackLayoutSpec]; - stackLayoutSpec.children = children; - stackLayoutSpec.alignItems = ASStackLayoutAlignItemsBaselineLast; - stackLayoutSpec.justifyContent = ASStackLayoutJustifyContentSpaceBetween; - - static ASSizeRange kSize = ASSizeRangeMake(CGSizeMake(300, 0), CGSizeMake(300, CGFLOAT_MAX)); - [self testStackLayoutSpec:stackLayoutSpec sizeRange:kSize subnodes:children identifier:nil]; -} - -#pragma mark - Flex wrap and item spacings test - -- (void)testFlexWrapWithItemSpacings -{ - ASStackLayoutSpecStyle style = { - .spacing = 50, - .direction = ASStackLayoutDirectionHorizontal, - .flexWrap = ASStackLayoutFlexWrapWrap, - .alignContent = ASStackLayoutAlignContentStart, - .lineSpacing = 5, - }; - - CGSize subnodeSize = {50, 50}; - NSArray *subnodes = @[ - ASDisplayNodeWithBackgroundColor([UIColor redColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor yellowColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], subnodeSize), - ]; - - for (ASDisplayNode *subnode in subnodes) { - subnode.style.spacingBefore = 5; - subnode.style.spacingAfter = 5; - } - - // 3 items, each item has a size of {50, 50} - // width is 230px, enough to fit all items without taking all spacings into account - // Test that all spacings are included and therefore the last item is pushed to a second line. - // See: https://github.com/TextureGroup/Texture/pull/472 - static ASSizeRange kSize = {{230, 300}, {230, 300}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -- (void)testFlexWrapWithItemSpacingsBeingResetOnNewLines -{ - ASStackLayoutSpecStyle style = { - .spacing = 5, - .direction = ASStackLayoutDirectionHorizontal, - .flexWrap = ASStackLayoutFlexWrapWrap, - .alignContent = ASStackLayoutAlignContentStart, - .lineSpacing = 5, - }; - - CGSize subnodeSize = {50, 50}; - NSArray *subnodes = @[ - // 1st line - ASDisplayNodeWithBackgroundColor([UIColor redColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor yellowColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor blueColor], subnodeSize), - // 2nd line - ASDisplayNodeWithBackgroundColor([UIColor magentaColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor greenColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor cyanColor], subnodeSize), - // 3rd line - ASDisplayNodeWithBackgroundColor([UIColor brownColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor orangeColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor purpleColor], subnodeSize), - ]; - - for (ASDisplayNode *subnode in subnodes) { - subnode.style.spacingBefore = 5; - subnode.style.spacingAfter = 5; - } - - // 3 lines, each line has 3 items, each item has a size of {50, 50} - // width is 190px, enough to fit 3 items into a line - // Test that interitem spacing is reset on new lines. Otherwise, lines after the 1st line would have only 2 items. - // See: https://github.com/TextureGroup/Texture/pull/472 - static ASSizeRange kSize = {{190, 300}, {190, 300}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -#pragma mark - Content alignment tests - -- (void)testAlignContentUnderflow -{ - // 3 lines, each line has 2 items, each item has a size of {50, 50} - // width is 110px. It's 10px bigger than the required width of each line (110px vs 100px) to test that items are still correctly collected into lines - static ASSizeRange kSize = {{110, 300}, {110, 300}}; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentStart sizeRange:kSize identifier:@"alignContentStart"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentCenter sizeRange:kSize identifier:@"alignContentCenter"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentEnd sizeRange:kSize identifier:@"alignContentEnd"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentSpaceBetween sizeRange:kSize identifier:@"alignContentSpaceBetween"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentSpaceAround sizeRange:kSize identifier:@"alignContentSpaceAround"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentStretch sizeRange:kSize identifier:@"alignContentStretch"]; -} - -- (void)testAlignContentOverflow -{ - // 6 lines, each line has 1 item, each item has a size of {50, 50} - // width is 40px. It's 10px smaller than the width of each item (40px vs 50px) to test that items are still correctly collected into lines - static ASSizeRange kSize = {{40, 260}, {40, 260}}; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentStart sizeRange:kSize identifier:@"alignContentStart"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentCenter sizeRange:kSize identifier:@"alignContentCenter"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentEnd sizeRange:kSize identifier:@"alignContentEnd"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentSpaceBetween sizeRange:kSize identifier:@"alignContentSpaceBetween"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentSpaceAround sizeRange:kSize identifier:@"alignContentSpaceAround"]; -} - -- (void)testAlignContentWithUnconstrainedCrossSize -{ - // 3 lines, each line has 2 items, each item has a size of {50, 50} - // width is 110px. It's 10px bigger than the required width of each line (110px vs 100px) to test that items are still correctly collected into lines - // height is unconstrained. It causes no cross size violation and the end results are all similar to ASStackLayoutAlignContentStart. - static ASSizeRange kSize = {{110, 0}, {110, CGFLOAT_MAX}}; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentStart sizeRange:kSize identifier:nil]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentCenter sizeRange:kSize identifier:nil]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentEnd sizeRange:kSize identifier:nil]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentSpaceBetween sizeRange:kSize identifier:nil]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentSpaceAround sizeRange:kSize identifier:nil]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentStretch sizeRange:kSize identifier:nil]; -} - -- (void)testAlignContentStretchAndOtherAlignments -{ - ASStackLayoutSpecStyle style = { - .direction = ASStackLayoutDirectionHorizontal, - .flexWrap = ASStackLayoutFlexWrapWrap, - .alignContent = ASStackLayoutAlignContentStretch, - .alignItems = ASStackLayoutAlignItemsStart, - }; - - CGSize subnodeSize = {50, 50}; - NSArray *subnodes = @[ - // 1st line - ASDisplayNodeWithBackgroundColor([UIColor redColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor yellowColor], subnodeSize), - // 2nd line - ASDisplayNodeWithBackgroundColor([UIColor blueColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor magentaColor], subnodeSize), - // 3rd line - ASDisplayNodeWithBackgroundColor([UIColor greenColor], subnodeSize), - ASDisplayNodeWithBackgroundColor([UIColor cyanColor], subnodeSize), - ]; - - subnodes[1].style.alignSelf = ASStackLayoutAlignSelfStart; - subnodes[3].style.alignSelf = ASStackLayoutAlignSelfCenter; - subnodes[5].style.alignSelf = ASStackLayoutAlignSelfEnd; - - // 3 lines, each line has 2 items, each item has a size of {50, 50} - // width is 110px. It's 10px bigger than the required width of each line (110px vs 100px) to test that items are still correctly collected into lines - static ASSizeRange kSize = {{110, 300}, {110, 300}}; - [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; -} - -#pragma mark - Line spacing tests - -- (void)testAlignContentAndLineSpacingUnderflow -{ - // 3 lines, each line has 2 items, each item has a size of {50, 50} - // 10px between lines - // width is 110px. It's 10px bigger than the required width of each line (110px vs 100px) to test that items are still correctly collected into lines - static ASSizeRange kSize = {{110, 320}, {110, 320}}; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentStart lineSpacing:10 sizeRange:kSize identifier:@"alignContentStart"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentCenter lineSpacing:10 sizeRange:kSize identifier:@"alignContentCenter"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentEnd lineSpacing:10 sizeRange:kSize identifier:@"alignContentEnd"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentSpaceBetween lineSpacing:10 sizeRange:kSize identifier:@"alignContentSpaceBetween"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentSpaceAround lineSpacing:10 sizeRange:kSize identifier:@"alignContentSpaceAround"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentStretch lineSpacing:10 sizeRange:kSize identifier:@"alignContentStretch"]; -} - -- (void)testAlignContentAndLineSpacingOverflow -{ - // 6 lines, each line has 1 item, each item has a size of {50, 50} - // 10px between lines - // width is 40px. It's 10px smaller than the width of each item (40px vs 50px) to test that items are still correctly collected into lines - static ASSizeRange kSize = {{40, 310}, {40, 310}}; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentStart lineSpacing:10 sizeRange:kSize identifier:@"alignContentStart"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentCenter lineSpacing:10 sizeRange:kSize identifier:@"alignContentCenter"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentEnd lineSpacing:10 sizeRange:kSize identifier:@"alignContentEnd"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentSpaceBetween lineSpacing:10 sizeRange:kSize identifier:@"alignContentSpaceBetween"]; - [self testStackLayoutSpecWithAlignContent:ASStackLayoutAlignContentSpaceAround lineSpacing:10 sizeRange:kSize identifier:@"alignContentSpaceAround"]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASTLayoutFixture.h b/submodules/AsyncDisplayKit/Tests/ASTLayoutFixture.h deleted file mode 100644 index 23b2024126..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTLayoutFixture.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// ASTLayoutFixture.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "ASTestCase.h" -#import "ASLayoutTestNode.h" - -NS_ASSUME_NONNULL_BEGIN - -AS_SUBCLASSING_RESTRICTED -@interface ASTLayoutFixture : NSObject - -/// The correct layout. The root should be unpositioned (same as -calculatedLayout). -@property (nonatomic, nullable) ASLayout *layout; - -/// The layoutSpecBlocks for non-leaf nodes. -@property (nonatomic, readonly) NSMapTable *layoutSpecBlocks; - -@property (nonatomic, readonly) ASLayoutTestNode *rootNode; - -@property (nonatomic, readonly) NSSet *allNodes; - -/// Get the (correct) layout for the specified node. -- (ASLayout *)layoutForNode:(ASLayoutTestNode *)node; - -/// Add this to the list of expected size ranges for the given node. -- (void)addSizeRange:(ASSizeRange)sizeRange forNode:(ASLayoutTestNode *)node; - -/// If you have a node that wants a size different than it gets, set it here. -/// For any leaf nodes that you don't call this on, the node will return the correct size -/// based on the fixture's layout. This is useful for triggering multipass stack layout. -- (void)setReturnedSize:(CGSize)size forNode:(ASLayoutTestNode *)node; - -/// Get the first expected size range for the node. -- (ASSizeRange)firstSizeRangeForNode:(ASLayoutTestNode *)node; - -/// Enumerate all the size ranges for all the nodes using the provided block. -- (void)withSizeRangesForAllNodesUsingBlock:(void (^)(ASLayoutTestNode *node, ASSizeRange sizeRange))block; - -/// Enumerate all the size ranges for the node. -- (void)withSizeRangesForNode:(ASLayoutTestNode *)node block:(void (^)(ASSizeRange sizeRange))block; - -/// Configure the nodes for this fixture. Set testSize on leaf nodes, layoutSpecBlock on container nodes. -- (void)apply; - -@end - -@interface ASLayout (TestHelpers) - -@property (nonatomic, readonly) NSArray *allNodes; - -@end - -NS_ASSUME_NONNULL_END diff --git a/submodules/AsyncDisplayKit/Tests/ASTLayoutFixture.mm b/submodules/AsyncDisplayKit/Tests/ASTLayoutFixture.mm deleted file mode 100644 index 7b12cd4b59..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTLayoutFixture.mm +++ /dev/null @@ -1,139 +0,0 @@ -// -// ASTLayoutFixture.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASTLayoutFixture.h" - -@interface ASTLayoutFixture () - -/// The size ranges against which nodes are expected to be measured. -@property (nonatomic, readonly) NSMapTable *> *sizeRanges; - -/// The overridden returned sizes for nodes where you want to trigger multipass layout. -@property (nonatomic, readonly) NSMapTable *returnedSizes; - -@end - -@implementation ASTLayoutFixture - -- (instancetype)init -{ - if (self = [super init]) { - _sizeRanges = [NSMapTable mapTableWithKeyOptions:NSMapTableObjectPointerPersonality valueOptions:NSMapTableStrongMemory]; - _layoutSpecBlocks = [NSMapTable mapTableWithKeyOptions:NSMapTableObjectPointerPersonality valueOptions:NSMapTableStrongMemory]; - _returnedSizes = [NSMapTable mapTableWithKeyOptions:NSMapTableObjectPointerPersonality valueOptions:NSMapTableStrongMemory]; - - } - return self; -} - -- (void)addSizeRange:(ASSizeRange)sizeRange forNode:(ASLayoutTestNode *)node -{ - auto ranges = [_sizeRanges objectForKey:node]; - if (ranges == nil) { - ranges = [[NSMutableArray alloc] init]; - [_sizeRanges setObject:ranges forKey:node]; - } - [ranges addObject:[NSValue valueWithBytes:&sizeRange objCType:@encode(ASSizeRange)]]; -} - -- (void)setReturnedSize:(CGSize)size forNode:(ASLayoutTestNode *)node -{ - [_returnedSizes setObject:[NSValue valueWithCGSize:size] forKey:node]; -} - -- (ASSizeRange)firstSizeRangeForNode:(ASLayoutTestNode *)node -{ - const auto val = [_sizeRanges objectForKey:node].firstObject; - ASSizeRange r; - [val getValue:&r]; - return r; -} - -- (void)withSizeRangesForAllNodesUsingBlock:(void (^)(ASLayoutTestNode * _Nonnull, ASSizeRange))block -{ - for (ASLayoutTestNode *node in self.allNodes) { - [self withSizeRangesForNode:node block:^(ASSizeRange sizeRange) { - block(node, sizeRange); - }]; - } -} - -- (void)withSizeRangesForNode:(ASLayoutTestNode *)node block:(void (^)(ASSizeRange))block -{ - for (NSValue *value in [_sizeRanges objectForKey:node]) { - ASSizeRange r; - [value getValue:&r]; - block(r); - } -} - -- (ASLayout *)layoutForNode:(ASLayoutTestNode *)node -{ - NSMutableArray *allLayouts = [NSMutableArray array]; - [ASTLayoutFixture collectAllLayoutsFromLayout:self.layout array:allLayouts]; - for (ASLayout *layout in allLayouts) { - if (layout.layoutElement == node) { - return layout; - } - } - return nil; -} - -/// A very dumb tree iteration approach. NSEnumerator or something would be way better. -+ (void)collectAllLayoutsFromLayout:(ASLayout *)layout array:(NSMutableArray *)array -{ - [array addObject:layout]; - for (ASLayout *sublayout in layout.sublayouts) { - [self collectAllLayoutsFromLayout:sublayout array:array]; - } -} - -- (ASLayoutTestNode *)rootNode -{ - return (ASLayoutTestNode *)self.layout.layoutElement; -} - -- (NSSet *)allNodes -{ - const auto allLayouts = [NSMutableArray array]; - [ASTLayoutFixture collectAllLayoutsFromLayout:self.layout array:allLayouts]; - return [NSSet setWithArray:[allLayouts valueForKey:@"layoutElement"]]; -} - -- (void)apply -{ - // Update layoutSpecBlock for parent nodes, set automatic subnode management - for (ASDisplayNode *node in _layoutSpecBlocks) { - const auto block = [_layoutSpecBlocks objectForKey:node]; - if (node.layoutSpecBlock != block) { - node.automaticallyManagesSubnodes = YES; - node.layoutSpecBlock = block; - [node setNeedsLayout]; - } - } - - [self setTestSizesOfLeafNodesInLayout:self.layout]; -} - -/// Go through the given layout, and for all the leaf nodes, set their preferredSize -/// to the layout size if needed, then call -setNeedsLayout -- (void)setTestSizesOfLeafNodesInLayout:(ASLayout *)layout -{ - const auto node = (ASLayoutTestNode *)layout.layoutElement; - if (layout.sublayouts.count == 0) { - const auto override = [self.returnedSizes objectForKey:node]; - node.testSize = override ? override.CGSizeValue : layout.size; - } else { - node.testSize = CGSizeZero; - for (ASLayout *sublayout in layout.sublayouts) { - [self setTestSizesOfLeafNodesInLayout:sublayout]; - } - } -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASTabBarControllerTests.mm b/submodules/AsyncDisplayKit/Tests/ASTabBarControllerTests.mm deleted file mode 100644 index 764ab9b545..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTabBarControllerTests.mm +++ /dev/null @@ -1,41 +0,0 @@ -// -// ASTabBarControllerTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import -#import - -@interface ASTabBarControllerTests: XCTestCase - -@end - -@implementation ASTabBarControllerTests - -- (void)testTabBarControllerSelectIndex { - ASViewController *firstViewController = [ASViewController new]; - ASViewController *secondViewController = [ASViewController new]; - NSArray *viewControllers = @[firstViewController, secondViewController]; - ASTabBarController *tabBarController = [ASTabBarController new]; - [tabBarController setViewControllers:viewControllers]; - [tabBarController setSelectedIndex:1]; - XCTAssertTrue([tabBarController.viewControllers isEqualToArray:viewControllers]); - XCTAssertEqual(tabBarController.selectedViewController, secondViewController); -} - -- (void)testTabBarControllerSelectViewController { - ASViewController *firstViewController = [ASViewController new]; - ASViewController *secondViewController = [ASViewController new]; - NSArray *viewControllers = @[firstViewController, secondViewController]; - ASTabBarController *tabBarController = [ASTabBarController new]; - [tabBarController setViewControllers:viewControllers]; - [tabBarController setSelectedViewController:secondViewController]; - XCTAssertTrue([tabBarController.viewControllers isEqualToArray:viewControllers]); - XCTAssertEqual(tabBarController.selectedViewController, secondViewController); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASTableViewTests.mm b/submodules/AsyncDisplayKit/Tests/ASTableViewTests.mm deleted file mode 100644 index 7295b20ba5..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTableViewTests.mm +++ /dev/null @@ -1,930 +0,0 @@ -// -// ASTableViewTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdocumentation" -#import -#pragma clang diagnostic pop - -#import -#import -#import -#import -#import -#import -#import -#import - -#import "ASXCTExtensions.h" - -#define NumberOfSections 10 -#define NumberOfReloadIterations 50 - -@interface ASTestDataController : ASDataController -@property (nonatomic) int numberOfAllNodesRelayouts; -@end - -@implementation ASTestDataController - -- (void)relayoutAllNodesWithInvalidationBlock:(nullable void (^)())invalidationBlock -{ - _numberOfAllNodesRelayouts++; - [super relayoutAllNodesWithInvalidationBlock:invalidationBlock]; -} - -@end - -@interface UITableView (Testing) -// This will start recording all editing calls to UITableView -// into the provided array. -// Make sure to call [UITableView deswizzleInstanceMethods] to reset this. -+ (void)as_recordEditingCallsIntoArray:(NSMutableArray *)selectors; -@end - -@interface ASTestTableView : ASTableView -@property (nonatomic) void (^willDeallocBlock)(ASTableView *tableView); -@end - -@implementation ASTestTableView - -- (instancetype)__initWithFrame:(CGRect)frame style:(UITableViewStyle)style -{ - - return [super _initWithFrame:frame style:style dataControllerClass:[ASTestDataController class] owningNode:nil eventLog:nil]; -} - -- (ASTestDataController *)testDataController -{ - return (ASTestDataController *)self.dataController; -} - -- (void)dealloc -{ - if (_willDeallocBlock) { - _willDeallocBlock(self); - } -} - -@end - -@interface ASTableViewTestDelegate : NSObject -@property (nonatomic) void (^willDeallocBlock)(ASTableViewTestDelegate *delegate); -@property (nonatomic) CGFloat headerHeight; -@property (nonatomic) CGFloat footerHeight; -@end - -@implementation ASTableViewTestDelegate - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return 0; -} - -- (ASCellNode *)tableView:(ASTableView *)tableView nodeForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return nil; -} - -- (ASCellNodeBlock)tableView:(ASTableView *)tableView nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return nil; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section -{ - return _footerHeight; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section -{ - return _headerHeight; -} - -- (void)dealloc -{ - if (_willDeallocBlock) { - _willDeallocBlock(self); - } -} - -@end - -@interface ASTestTextCellNode : ASTextCellNode -/** Calculated by counting how many times -layoutSpecThatFits: is called on the main thread. */ -@property (nonatomic) int numberOfLayoutsOnMainThread; -@end - -@implementation ASTestTextCellNode - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - if ([NSThread isMainThread]) { - _numberOfLayoutsOnMainThread++; - } - return [super layoutSpecThatFits:constrainedSize]; -} - -@end - -@interface ASTableViewFilledDataSource : NSObject -@property (nonatomic) BOOL usesSectionIndex; -@property (nonatomic) NSInteger numberOfSections; -@property (nonatomic) NSInteger rowsPerSection; -@property (nonatomic, nullable) ASCellNodeBlock(^nodeBlockForItem)(NSIndexPath *); -@end - -@implementation ASTableViewFilledDataSource - -- (instancetype)init -{ - self = [super init]; - if (self != nil) { - _numberOfSections = NumberOfSections; - _rowsPerSection = 20; - } - return self; -} - -- (BOOL)respondsToSelector:(SEL)aSelector -{ - if (aSelector == @selector(sectionIndexTitlesForTableView:) || aSelector == @selector(tableView:sectionForSectionIndexTitle:atIndex:)) { - return _usesSectionIndex; - } else { - return [super respondsToSelector:aSelector]; - } -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return _numberOfSections; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return _rowsPerSection; -} - -- (ASCellNode *)tableView:(ASTableView *)tableView nodeForRowAtIndexPath:(NSIndexPath *)indexPath -{ - ASTestTextCellNode *textCellNode = [ASTestTextCellNode new]; - textCellNode.text = indexPath.description; - - return textCellNode; -} - -- (ASCellNodeBlock)tableView:(ASTableView *)tableView nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath -{ - if (_nodeBlockForItem) { - return _nodeBlockForItem(indexPath); - } - - return ^{ - ASTestTextCellNode *textCellNode = [ASTestTextCellNode new]; - textCellNode.text = [NSString stringWithFormat:@"{%d, %d}", (int)indexPath.section, (int)indexPath.row]; - textCellNode.backgroundColor = [UIColor whiteColor]; - return textCellNode; - }; -} - -- (nullable NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView -{ - return @[ @"A", @"B", @"C" ]; -} - -- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index -{ - return 0; -} - -@end - -@interface ASTableViewFilledDelegate : NSObject -@end - -@implementation ASTableViewFilledDelegate - -- (ASSizeRange)tableView:(ASTableView *)tableView constrainedSizeForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return ASSizeRangeMake(CGSizeMake(10, 42)); -} - -@end - -@interface ASTableViewTests : XCTestCase -@property (nonatomic, retain) ASTableView *testTableView; -@end - -@implementation ASTableViewTests - -- (void)testDataSourceImplementsNecessaryMethods -{ - ASTestTableView *tableView = [[ASTestTableView alloc] __initWithFrame:CGRectMake(0, 0, 100, 400) - style:UITableViewStylePlain]; - - - - ASTableViewFilledDataSource *dataSource = (ASTableViewFilledDataSource *)[NSObject new]; - XCTAssertThrows((tableView.asyncDataSource = dataSource)); - - dataSource = [ASTableViewFilledDataSource new]; - XCTAssertNoThrow((tableView.asyncDataSource = dataSource)); -} - -- (void)testConstrainedSizeForRowAtIndexPath -{ - // Initial width of the table view is non-zero and all nodes are measured with this size. - // Any subsequent size change must trigger a relayout. - // Width and height are swapped so that a later size change will simulate a rotation - ASTestTableView *tableView = [[ASTestTableView alloc] __initWithFrame:CGRectMake(0, 0, 100, 400) - style:UITableViewStylePlain]; - - ASTableViewFilledDelegate *delegate = [ASTableViewFilledDelegate new]; - ASTableViewFilledDataSource *dataSource = [ASTableViewFilledDataSource new]; - - tableView.asyncDelegate = delegate; - tableView.asyncDataSource = dataSource; - - [tableView reloadData]; - [tableView waitUntilAllUpdatesAreCommitted]; - [tableView setNeedsLayout]; - [tableView layoutIfNeeded]; - - CGFloat separatorHeight = 1.0 / ASScreenScale(); - for (int section = 0; section < NumberOfSections; section++) { - for (int row = 0; row < [tableView numberOfRowsInSection:section]; row++) { - NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section]; - CGRect rect = [tableView rectForRowAtIndexPath:indexPath]; - XCTAssertEqual(rect.size.width, 100); // specified width should be ignored for table - XCTAssertEqual(rect.size.height, 42 + separatorHeight); - } - } -} - -// TODO: Convert this to ARC. -- (void)DISABLED_testTableViewDoesNotRetainItselfAndDelegate -{ - ASTestTableView *tableView = [[ASTestTableView alloc] __initWithFrame:CGRectZero style:UITableViewStylePlain]; - - __block BOOL tableViewDidDealloc = NO; - tableView.willDeallocBlock = ^(ASTableView *v){ - tableViewDidDealloc = YES; - }; - - ASTableViewTestDelegate *delegate = [[ASTableViewTestDelegate alloc] init]; - - __block BOOL delegateDidDealloc = NO; - delegate.willDeallocBlock = ^(ASTableViewTestDelegate *d){ - delegateDidDealloc = YES; - }; - - tableView.asyncDataSource = delegate; - tableView.asyncDelegate = delegate; - -// [delegate release]; - XCTAssertTrue(delegateDidDealloc, @"unexpected delegate lifetime:%@", delegate); - -// XCTAssertNoThrow([tableView release], @"unexpected exception when deallocating table view:%@", tableView); - XCTAssertTrue(tableViewDidDealloc, @"unexpected table view lifetime:%@", tableView); -} - -- (NSIndexSet *)randomIndexSet -{ - NSInteger randA = arc4random_uniform(NumberOfSections - 1); - NSInteger randB = arc4random_uniform(NumberOfSections - 1); - - return [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(MIN(randA, randB), MAX(randA, randB) - MIN(randA, randB))]; -} - -- (NSArray *)randomIndexPathsExisting:(BOOL)existing rowCount:(NSInteger)rowCount -{ - NSMutableArray *indexPaths = [NSMutableArray array]; - [[self randomIndexSet] enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { - NSIndexPath *sectionIndex = [[NSIndexPath alloc] initWithIndex:idx]; - for (NSUInteger i = (existing ? 0 : rowCount); i < (existing ? rowCount : rowCount * 2); i++) { - // Maximize evility by sporadically skipping indicies 1/3rd of the time, but only if reloading existing rows - if (existing && arc4random_uniform(2) == 0) { - continue; - } - - NSIndexPath *indexPath = [sectionIndex indexPathByAddingIndex:i]; - [indexPaths addObject:indexPath]; - } - }]; - return indexPaths; -} - -- (void)DISABLED_testReloadData -{ - // Keep the viewport moderately sized so that new cells are loaded on scrolling - ASTableView *tableView = [[ASTestTableView alloc] __initWithFrame:CGRectMake(0, 0, 100, 500) - style:UITableViewStylePlain]; - - ASTableViewFilledDataSource *dataSource = [ASTableViewFilledDataSource new]; - - tableView.asyncDelegate = dataSource; - tableView.asyncDataSource = dataSource; - - XCTestExpectation *reloadDataExpectation = [self expectationWithDescription:@"reloadData"]; - - [tableView reloadDataWithCompletion:^{ - NSLog(@"*** Reload Complete ***"); - [reloadDataExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:5 handler:^(NSError *error) { - if (error) { - XCTFail(@"Expectation failed: %@", error); - } - }]; - - for (int i = 0; i < NumberOfReloadIterations; ++i) { - UITableViewRowAnimation rowAnimation = (arc4random_uniform(2) == 0 ? UITableViewRowAnimationMiddle : UITableViewRowAnimationNone); - BOOL animatedScroll = (arc4random_uniform(2) == 0 ? YES : NO); - BOOL reloadRowsInsteadOfSections = (arc4random_uniform(2) == 0 ? YES : NO); - NSTimeInterval runLoopDelay = ((arc4random_uniform(2) == 0) ? (1.0 / (1 + arc4random_uniform(500))) : 0); - BOOL useBeginEndUpdates = (arc4random_uniform(3) == 0 ? YES : NO); - - // instrument our instrumentation ;) - //NSLog(@"Iteration %03d: %@|%@|%@|%@|%g", i, (rowAnimation == UITableViewRowAnimationNone) ? @"NONE " : @"MIDDLE", animatedScroll ? @"ASCR" : @" ", reloadRowsInsteadOfSections ? @"ROWS" : @"SECS", useBeginEndUpdates ? @"BEGEND" : @" ", runLoopDelay); - - if (useBeginEndUpdates) { - [tableView beginUpdates]; - } - - if (reloadRowsInsteadOfSections) { - NSArray *indexPaths = [self randomIndexPathsExisting:YES rowCount:dataSource.rowsPerSection]; - //NSLog(@"reloading rows: %@", indexPaths); - [tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:rowAnimation]; - } else { - NSIndexSet *sections = [self randomIndexSet]; - //NSLog(@"reloading sections: %@", sections); - [tableView reloadSections:sections withRowAnimation:rowAnimation]; - } - - [tableView setContentOffset:CGPointMake(0, arc4random_uniform(tableView.contentSize.height - tableView.bounds.size.height)) animated:animatedScroll]; - - if (runLoopDelay > 0) { - // Run other stuff on the main queue for between 2ms and 1000ms. - [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:runLoopDelay]]; - } - - if (useBeginEndUpdates) { - [tableView endUpdates]; - } - } -} - -- (void)testRelayoutAllNodesWithNonZeroSizeInitially -{ - // Initial width of the table view is non-zero and all nodes are measured with this size. - // Any subsequence size change must trigger a relayout. - CGSize tableViewFinalSize = CGSizeMake(100, 500); - // Width and height are swapped so that a later size change will simulate a rotation - ASTestTableView *tableView = [[ASTestTableView alloc] __initWithFrame:CGRectMake(0, 0, tableViewFinalSize.height, tableViewFinalSize.width) - style:UITableViewStylePlain]; - - ASTableViewFilledDataSource *dataSource = [ASTableViewFilledDataSource new]; - - tableView.asyncDelegate = dataSource; - tableView.asyncDataSource = dataSource; - - [tableView layoutIfNeeded]; - - XCTAssertEqual(tableView.testDataController.numberOfAllNodesRelayouts, 0); - [self triggerSizeChangeAndAssertRelayoutAllNodesForTableView:tableView newSize:tableViewFinalSize]; -} - -- (void)testRelayoutVisibleRowsWhenEditingModeIsChanged -{ - CGSize tableViewSize = CGSizeMake(100, 500); - ASTestTableView *tableView = [[ASTestTableView alloc] __initWithFrame:CGRectMake(0, 0, tableViewSize.width, tableViewSize.height) - style:UITableViewStylePlain]; - ASTableViewFilledDataSource *dataSource = [ASTableViewFilledDataSource new]; - // Currently this test requires that the text in the cell node fills the - // visible width, so we use the long description for the index path. - dataSource.nodeBlockForItem = ^(NSIndexPath *indexPath) { - return (ASCellNodeBlock)^{ - ASTestTextCellNode *textCellNode = [[ASTestTextCellNode alloc] init]; - textCellNode.text = indexPath.description; - return textCellNode; - }; - }; - tableView.asyncDelegate = dataSource; - tableView.asyncDataSource = dataSource; - - [self triggerFirstLayoutMeasurementForTableView:tableView]; - - NSArray *visibleNodes = [tableView visibleNodes]; - XCTAssertGreaterThan(visibleNodes.count, 0); - - // Cause table view to enter editing mode. - // Visibile nodes should be re-measured on main thread with the new (smaller) content view width. - // Other nodes are untouched. - XCTestExpectation *relayoutAfterEnablingEditingExpectation = [self expectationWithDescription:@"relayoutAfterEnablingEditing"]; - [tableView beginUpdates]; - [tableView setEditing:YES]; - [tableView endUpdatesAnimated:YES completion:^(BOOL completed) { - for (int section = 0; section < NumberOfSections; section++) { - for (int row = 0; row < dataSource.rowsPerSection; row++) { - NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section]; - ASTestTextCellNode *node = (ASTestTextCellNode *)[tableView nodeForRowAtIndexPath:indexPath]; - if ([visibleNodes containsObject:node]) { - XCTAssertEqual(node.numberOfLayoutsOnMainThread, 1); - XCTAssertLessThan(node.constrainedSizeForCalculatedLayout.max.width, tableViewSize.width); - } else { - XCTAssertEqual(node.numberOfLayoutsOnMainThread, 0); - XCTAssertEqual(node.constrainedSizeForCalculatedLayout.max.width, tableViewSize.width); - } - } - } - [relayoutAfterEnablingEditingExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:5 handler:^(NSError *error) { - if (error) { - XCTFail(@"Expectation failed: %@", error); - } - }]; - - // Cause table view to leave editing mode. - // Visibile nodes should be re-measured again. - // All nodes should have max constrained width equals to the table view width. - XCTestExpectation *relayoutAfterDisablingEditingExpectation = [self expectationWithDescription:@"relayoutAfterDisablingEditing"]; - [tableView beginUpdates]; - [tableView setEditing:NO]; - [tableView endUpdatesAnimated:YES completion:^(BOOL completed) { - for (int section = 0; section < NumberOfSections; section++) { - for (int row = 0; row < dataSource.rowsPerSection; row++) { - NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section]; - ASTestTextCellNode *node = (ASTestTextCellNode *)[tableView nodeForRowAtIndexPath:indexPath]; - BOOL visible = [visibleNodes containsObject:node]; - XCTAssertEqual(node.numberOfLayoutsOnMainThread, visible ? 2: 0); - XCTAssertEqual(node.constrainedSizeForCalculatedLayout.max.width, tableViewSize.width); - } - } - [relayoutAfterDisablingEditingExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:5 handler:^(NSError *error) { - if (error) { - XCTFail(@"Expectation failed: %@", error); - } - }]; -} - -- (void)DISABLED_testRelayoutRowsAfterEditingModeIsChangedAndTheyBecomeVisible -{ - CGSize tableViewSize = CGSizeMake(100, 500); - ASTestTableView *tableView = [[ASTestTableView alloc] __initWithFrame:CGRectMake(0, 0, tableViewSize.width, tableViewSize.height) - style:UITableViewStylePlain]; - ASTableViewFilledDataSource *dataSource = [ASTableViewFilledDataSource new]; - - tableView.asyncDelegate = dataSource; - tableView.asyncDataSource = dataSource; - - [self triggerFirstLayoutMeasurementForTableView:tableView]; - - // Cause table view to enter editing mode and then scroll to the bottom. - // The last node should be re-measured on main thread with the new (smaller) content view width. - NSIndexPath *lastRowIndexPath = [NSIndexPath indexPathForRow:(dataSource.rowsPerSection - 1) inSection:(NumberOfSections - 1)]; - XCTestExpectation *relayoutExpectation = [self expectationWithDescription:@"relayout"]; - [tableView beginUpdates]; - [tableView setEditing:YES]; - [tableView setContentOffset:CGPointMake(0, CGFLOAT_MAX) animated:YES]; - [tableView endUpdatesAnimated:YES completion:^(BOOL completed) { - ASTestTextCellNode *node = (ASTestTextCellNode *)[tableView nodeForRowAtIndexPath:lastRowIndexPath]; - XCTAssertEqual(node.numberOfLayoutsOnMainThread, 1); - XCTAssertLessThan(node.constrainedSizeForCalculatedLayout.max.width, tableViewSize.width); - [relayoutExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:5 handler:^(NSError *error) { - if (error) { - XCTFail(@"Expectation failed: %@", error); - } - }]; -} - -- (void)testIndexPathForNode -{ - CGSize tableViewSize = CGSizeMake(100, 500); - ASTestTableView *tableView = [[ASTestTableView alloc] initWithFrame:CGRectMake(0, 0, tableViewSize.width, tableViewSize.height) - style:UITableViewStylePlain]; - ASTableViewFilledDataSource *dataSource = [ASTableViewFilledDataSource new]; - - tableView.asyncDelegate = dataSource; - tableView.asyncDataSource = dataSource; - - [tableView reloadDataWithCompletion:^{ - for (NSUInteger i = 0; i < NumberOfSections; i++) { - for (NSUInteger j = 0; j < dataSource.rowsPerSection; j++) { - NSIndexPath *indexPath = [NSIndexPath indexPathForRow:j inSection:i]; - ASCellNode *cellNode = [tableView nodeForRowAtIndexPath:indexPath]; - NSIndexPath *reportedIndexPath = [tableView indexPathForNode:cellNode]; - XCTAssertEqual(indexPath.row, reportedIndexPath.row); - } - } - self.testTableView = nil; - }]; -} - -- (void)triggerFirstLayoutMeasurementForTableView:(ASTableView *)tableView{ - XCTestExpectation *reloadDataExpectation = [self expectationWithDescription:@"reloadData"]; - [tableView reloadDataWithCompletion:^{ - for (int section = 0; section < NumberOfSections; section++) { - for (int row = 0; row < [tableView numberOfRowsInSection:section]; row++) { - NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section]; - ASTestTextCellNode *node = (ASTestTextCellNode *)[tableView nodeForRowAtIndexPath:indexPath]; - XCTAssertEqual(node.numberOfLayoutsOnMainThread, 0); - XCTAssertEqual(node.constrainedSizeForCalculatedLayout.max.width, tableView.frame.size.width); - } - } - [reloadDataExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:5 handler:^(NSError *error) { - if (error) { - XCTFail(@"Expectation failed: %@", error); - } - }]; - [tableView setNeedsLayout]; - [tableView layoutIfNeeded]; - [tableView waitUntilAllUpdatesAreCommitted]; -} - -- (void)triggerSizeChangeAndAssertRelayoutAllNodesForTableView:(ASTestTableView *)tableView newSize:(CGSize)newSize -{ - XCTestExpectation *nodesMeasuredUsingNewConstrainedSizeExpectation = [self expectationWithDescription:@"nodesMeasuredUsingNewConstrainedSize"]; - - [tableView beginUpdates]; - - CGRect frame = tableView.frame; - frame.size = newSize; - tableView.frame = frame; - [tableView layoutIfNeeded]; - - [tableView endUpdatesAnimated:NO completion:^(BOOL completed) { - XCTAssertEqual(tableView.testDataController.numberOfAllNodesRelayouts, 1); - - for (int section = 0; section < NumberOfSections; section++) { - for (int row = 0; row < [tableView numberOfRowsInSection:section]; row++) { - NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section]; - ASTestTextCellNode *node = (ASTestTextCellNode *)[tableView nodeForRowAtIndexPath:indexPath]; - XCTAssertLessThanOrEqual(node.numberOfLayoutsOnMainThread, 1); - XCTAssertEqual(node.constrainedSizeForCalculatedLayout.max.width, newSize.width); - } - } - [nodesMeasuredUsingNewConstrainedSizeExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:5 handler:^(NSError *error) { - if (error) { - XCTFail(@"Expectation failed: %@", error); - } - }]; -} - -/** - * This may seem silly, but we had issues where the runtime sometimes wouldn't correctly report - * conformances declared on categories. - */ -- (void)testThatTableNodeConformsToExpectedProtocols -{ - ASTableNode *node = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain]; - XCTAssert([node conformsToProtocol:@protocol(ASRangeControllerUpdateRangeProtocol)]); -} - -- (void)testThatInitialDataLoadHappensInOneShot -{ - NSMutableArray *selectors = [NSMutableArray array]; - ASTableNode *node = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain]; - - ASTableViewFilledDataSource *dataSource = [ASTableViewFilledDataSource new]; - node.frame = CGRectMake(0, 0, 100, 100); - - node.dataSource = dataSource; - node.delegate = dataSource; - - [UITableView as_recordEditingCallsIntoArray:selectors]; - XCTAssertGreaterThan(node.numberOfSections, 0); - [node waitUntilAllUpdatesAreProcessed]; - XCTAssertGreaterThan(node.view.numberOfSections, 0); - - // The first reloadData call helps prevent UITableView from calling it multiple times while ASDataController is working. - // The second reloadData call is the real one. - NSArray *expectedSelectors = @[ NSStringFromSelector(@selector(reloadData)), - NSStringFromSelector(@selector(reloadData)) ]; - XCTAssertEqualObjects(selectors, expectedSelectors); - - [UITableView deswizzleAllInstanceMethods]; -} - -- (void)testThatReloadDataHappensInOneShot -{ - NSMutableArray *selectors = [NSMutableArray array]; - ASTableNode *node = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain]; - - ASTableViewFilledDataSource *dataSource = [ASTableViewFilledDataSource new]; - node.frame = CGRectMake(0, 0, 100, 100); - - node.dataSource = dataSource; - node.delegate = dataSource; - - // Load initial data. - XCTAssertGreaterThan(node.numberOfSections, 0); - [node waitUntilAllUpdatesAreProcessed]; - XCTAssertGreaterThan(node.view.numberOfSections, 0); - - // Reload data. - [UITableView as_recordEditingCallsIntoArray:selectors]; - [node reloadData]; - [node waitUntilAllUpdatesAreProcessed]; - - // Assert that the beginning of the call pattern is correct. - // There is currently noise that comes after that we will allow for this test. - NSArray *expectedSelectors = @[ NSStringFromSelector(@selector(reloadData)) ]; - XCTAssertEqualObjects(selectors, expectedSelectors); - - [UITableView deswizzleAllInstanceMethods]; -} - -/** - * This tests an issue where, if the table is loaded before the first layout pass, - * the nodes are first measured with a constrained width of 0 which isn't ideal. - */ -- (void)testThatNodeConstrainedSizesAreCorrectIfReloadIsPreempted -{ - ASTableNode *node = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain]; - - ASTableViewFilledDataSource *dataSource = [ASTableViewFilledDataSource new]; - CGFloat cellWidth = 320; - node.frame = CGRectMake(0, 0, cellWidth, 480); - - node.dataSource = dataSource; - node.delegate = dataSource; - - // Trigger data load BEFORE first layout pass, to ensure constrained size is correct. - XCTAssertGreaterThan(node.numberOfSections, 0); - [node waitUntilAllUpdatesAreProcessed]; - - ASSizeRange expectedSizeRange = ASSizeRangeMake(CGSizeMake(cellWidth, 0)); - expectedSizeRange.max.height = CGFLOAT_MAX; - - for (NSInteger i = 0; i < node.numberOfSections; i++) { - for (NSInteger j = 0; j < [node numberOfRowsInSection:i]; j++) { - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:j inSection:i]; - ASTestTextCellNode *cellNode = (id)[node nodeForRowAtIndexPath:indexPath]; - ASXCTAssertEqualSizeRanges(cellNode.constrainedSizeForCalculatedLayout, expectedSizeRange); - XCTAssertEqual(cellNode.numberOfLayoutsOnMainThread, 0); - } - } -} - -- (void)testSectionIndexHandling -{ - ASTableNode *node = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain]; - - ASTableViewFilledDataSource *dataSource = [ASTableViewFilledDataSource new]; - dataSource.usesSectionIndex = YES; - node.frame = CGRectMake(0, 0, 320, 480); - - node.dataSource = dataSource; - node.delegate = dataSource; - - // Trigger data load - XCTAssertGreaterThan(node.numberOfSections, 0); - XCTAssertGreaterThan([node numberOfRowsInSection:0], 0); - - // UITableView's section index view is added only after some rows were inserted to the table. - // All nodes loaded and measured during the initial reloadData used an outdated constrained width (i.e full width: 320). - // So we need to force a new layout pass so that the table will pick up a new constrained size and apply to its node. - [node setNeedsLayout]; - [node.view layoutIfNeeded]; - [node waitUntilAllUpdatesAreProcessed]; - - UITableViewCell *cell = [node.view cellForRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; - XCTAssertNotNil(cell); - - CGFloat cellWidth = cell.contentView.frame.size.width; - XCTAssert(cellWidth > 0 && cellWidth < 320, @"Expected cell width to be about 305. Width: %@", @(cellWidth)); - - ASSizeRange expectedSizeRange = ASSizeRangeMake(CGSizeMake(cellWidth, 0)); - expectedSizeRange.max.height = CGFLOAT_MAX; - - for (NSInteger i = 0; i < node.numberOfSections; i++) { - for (NSInteger j = 0; j < [node numberOfRowsInSection:i]; j++) { - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:j inSection:i]; - ASTestTextCellNode *cellNode = (id)[node nodeForRowAtIndexPath:indexPath]; - ASXCTAssertEqualSizeRanges(cellNode.constrainedSizeForCalculatedLayout, expectedSizeRange); - // We will have to accept a relayout on main thread, since the index bar won't show - // up until some of the cells are inserted. - XCTAssertLessThanOrEqual(cellNode.numberOfLayoutsOnMainThread, 1); - } - } -} - -- (void)testThatNilBatchUpdatesCanBeSubmitted -{ - ASTableNode *node = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain]; - - // Passing nil blocks should not crash - [node performBatchUpdates:nil completion:nil]; - [node performBatchAnimated:NO updates:nil completion:nil]; -} - -// https://github.com/facebook/AsyncDisplayKit/issues/2252#issuecomment-263689979 -- (void)testIssue2252 -{ - // Hard-code an iPhone 7 screen. There's something particular about this geometry that causes the issue to repro. - UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 375, 667)]; - - ASTableNode *node = [[ASTableNode alloc] initWithStyle:UITableViewStyleGrouped]; - node.frame = window.bounds; - ASTableViewTestDelegate *del = [[ASTableViewTestDelegate alloc] init]; - del.headerHeight = 32; - del.footerHeight = 0.01; - node.delegate = del; - ASTableViewFilledDataSource *ds = [[ASTableViewFilledDataSource alloc] init]; - ds.rowsPerSection = 1; - node.dataSource = ds; - ASViewController *vc = [[ASViewController alloc] initWithNode:node]; - UITabBarController *tabCtrl = [[UITabBarController alloc] init]; - tabCtrl.viewControllers = @[ vc ]; - tabCtrl.tabBar.translucent = NO; - window.rootViewController = tabCtrl; - [window makeKeyAndVisible]; - - [window layoutIfNeeded]; - [node waitUntilAllUpdatesAreProcessed]; - XCTAssertEqual(node.view.numberOfSections, NumberOfSections); - ASXCTAssertEqualRects(CGRectMake(0, 32, 375, 44), [node rectForRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]], @"This text requires very specific geometry. The rect for the first row should match up."); - - __unused XCTestExpectation *e = [self expectationWithDescription:@"Did a bunch of rounds of updates."]; - NSInteger totalCount = 20; - __block NSInteger count = 0; - dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue()); - dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 0.2 * NSEC_PER_SEC, 0.01 * NSEC_PER_SEC); - dispatch_source_set_event_handler(timer, ^{ - [node performBatchUpdates:^{ - [node reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, NumberOfSections)] withRowAnimation:UITableViewRowAnimationNone]; - } completion:^(BOOL finished) { - if (++count == totalCount) { - dispatch_cancel(timer); - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [e fulfill]; - }); - } - }]; - }); - dispatch_resume(timer); - [self waitForExpectationsWithTimeout:60 handler:nil]; -} - -- (void)testThatInvalidUpdateExceptionReasonContainsDataSourceClassName -{ - ASTableNode *node = [[ASTableNode alloc] initWithStyle:UITableViewStyleGrouped]; - node.bounds = CGRectMake(0, 0, 100, 100); - ASTableViewFilledDataSource *ds = [[ASTableViewFilledDataSource alloc] init]; - node.dataSource = ds; - - // Force node to load initial data. - [node.view layoutIfNeeded]; - - // Submit an invalid update, ensure exception name matches and that data source is included in the reason. - @try { - [node deleteSections:[NSIndexSet indexSetWithIndex:1000] withRowAnimation:UITableViewRowAnimationNone]; - XCTFail(@"Expected validation to fail."); - } @catch (NSException *e) { - XCTAssertEqual(e.name, ASCollectionInvalidUpdateException); - XCTAssert([e.reason containsString:NSStringFromClass([ds class])], @"Expected validation reason to contain the data source class name. Got:\n%@", e.reason); - } -} - -- (void)testAutomaticallyAdjustingContentOffset -{ - ASTableNode *node = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain]; - node.automaticallyAdjustsContentOffset = YES; - node.bounds = CGRectMake(0, 0, 100, 100); - ASTableViewFilledDataSource *ds = [[ASTableViewFilledDataSource alloc] init]; - node.dataSource = ds; - - [node.view layoutIfNeeded]; - [node waitUntilAllUpdatesAreProcessed]; - CGFloat rowHeight = [node.view rectForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]].size.height; - // Scroll to row (0,1) + 10pt - node.contentOffset = CGPointMake(0, rowHeight + 10); - - [node performBatchAnimated:NO updates:^{ - // Delete row 0 from all sections. - // This is silly but it's a consequence of how ASTableViewFilledDataSource is built. - ds.rowsPerSection -= 1; - for (NSInteger i = 0; i < NumberOfSections; i++) { - [node deleteRowsAtIndexPaths:@[ [NSIndexPath indexPathForItem:0 inSection:i]] withRowAnimation:UITableViewRowAnimationAutomatic]; - } - } completion:nil]; - [node waitUntilAllUpdatesAreProcessed]; - - // Now that row (0,0) is deleted, we should have slid up to be at just 10 - // i.e. we should have subtracted the deleted row height from our content offset. - XCTAssertEqual(node.contentOffset.y, 10); -} - -- (void)testTableViewReloadDoesReloadIfEditableTextNodeIsFirstResponder -{ - ASEditableTextNode *editableTextNode = [[ASEditableTextNode alloc] init]; - - UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 375, 667)]; - ASTableNode *node = [[ASTableNode alloc] initWithStyle:UITableViewStyleGrouped]; - node.frame = window.bounds; - [window addSubnode:node]; - - ASTableViewFilledDataSource *dataSource = [ASTableViewFilledDataSource new]; - dataSource.rowsPerSection = 1; - dataSource.numberOfSections = 1; - // Currently this test requires that the text in the cell node fills the - // visible width, so we use the long description for the index path. - dataSource.nodeBlockForItem = ^(NSIndexPath *indexPath) { - return (ASCellNodeBlock)^{ - ASCellNode *cellNode = [[ASCellNode alloc] init]; - cellNode.automaticallyManagesSubnodes = YES; - cellNode.layoutSpecBlock = ^ASLayoutSpec * _Nonnull(__kindof ASDisplayNode * _Nonnull node, ASSizeRange constrainedSize) { - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(10, 10, 10, 10) child:editableTextNode]; - }; - return cellNode; - }; - }; - node.delegate = dataSource; - node.dataSource = dataSource; - - // Reload the data for the initial load - [node reloadData]; - [node waitUntilAllUpdatesAreProcessed]; - [node setNeedsLayout]; - [node layoutIfNeeded]; - - // Set the textView as first responder - [editableTextNode.textView becomeFirstResponder]; - - // Change data source count and try to reload a second time - dataSource.rowsPerSection = 2; - [node reloadData]; - [node waitUntilAllUpdatesAreProcessed]; - - // Check that numberOfRows in section 0 is 2 - XCTAssertEqual([node numberOfRowsInSection:0], 2); - XCTAssertEqual([node.view numberOfRowsInSection:0], 2); -} - -@end - -@implementation UITableView (Testing) - -+ (void)as_recordEditingCallsIntoArray:(NSMutableArray *)selectors -{ - [UITableView swizzleInstanceMethod:@selector(reloadData) withReplacement:JGMethodReplacementProviderBlock { - return JGMethodReplacement(void, UITableView *) { - JGOriginalImplementation(void); - [selectors addObject:NSStringFromSelector(_cmd)]; - }; - }]; - [UITableView swizzleInstanceMethod:@selector(beginUpdates) withReplacement:JGMethodReplacementProviderBlock { - return JGMethodReplacement(void, UITableView *) { - JGOriginalImplementation(void); - [selectors addObject:NSStringFromSelector(_cmd)]; - }; - }]; - [UITableView swizzleInstanceMethod:@selector(endUpdates) withReplacement:JGMethodReplacementProviderBlock { - return JGMethodReplacement(void, UITableView *) { - JGOriginalImplementation(void); - [selectors addObject:NSStringFromSelector(_cmd)]; - }; - }]; - [UITableView swizzleInstanceMethod:@selector(insertRowsAtIndexPaths:withRowAnimation:) withReplacement:JGMethodReplacementProviderBlock { - return JGMethodReplacement(void, UITableView *, NSArray *indexPaths, UITableViewRowAnimation anim) { - JGOriginalImplementation(void, indexPaths, anim); - [selectors addObject:NSStringFromSelector(_cmd)]; - }; - }]; - [UITableView swizzleInstanceMethod:@selector(deleteRowsAtIndexPaths:withRowAnimation:) withReplacement:JGMethodReplacementProviderBlock { - return JGMethodReplacement(void, UITableView *, NSArray *indexPaths, UITableViewRowAnimation anim) { - JGOriginalImplementation(void, indexPaths, anim); - [selectors addObject:NSStringFromSelector(_cmd)]; - }; - }]; - [UITableView swizzleInstanceMethod:@selector(insertSections:withRowAnimation:) withReplacement:JGMethodReplacementProviderBlock { - return JGMethodReplacement(void, UITableView *, NSIndexSet *indexes, UITableViewRowAnimation anim) { - JGOriginalImplementation(void, indexes, anim); - [selectors addObject:NSStringFromSelector(_cmd)]; - }; - }]; - [UITableView swizzleInstanceMethod:@selector(deleteSections:withRowAnimation:) withReplacement:JGMethodReplacementProviderBlock { - return JGMethodReplacement(void, UITableView *, NSIndexSet *indexes, UITableViewRowAnimation anim) { - JGOriginalImplementation(void, indexes, anim); - [selectors addObject:NSStringFromSelector(_cmd)]; - }; - }]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASTableViewThrashTests.mm b/submodules/AsyncDisplayKit/Tests/ASTableViewThrashTests.mm deleted file mode 100644 index 8d7064cd00..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTableViewThrashTests.mm +++ /dev/null @@ -1,154 +0,0 @@ -// -// ASTableViewThrashTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import -#import -#import -#import - -#import "ASThrashUtility.h" - -@interface ASTableViewThrashTests: XCTestCase -@end - -@implementation ASTableViewThrashTests -{ - // The current update, which will be logged in case of a failure. - ASThrashUpdate *_update; - BOOL _failed; -} - -#pragma mark Overrides - -- (void)tearDown -{ - if (_failed && _update != nil) { - NSLog(@"Failed update %@: %@", _update, _update.logFriendlyBase64Representation); - } - _failed = NO; - _update = nil; -} - -// NOTE: Despite the documentation, this is not always called if an exception is caught. -- (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filePath atLine:(NSUInteger)lineNumber expected:(BOOL)expected -{ - _failed = YES; - [super recordFailureWithDescription:description inFile:filePath atLine:lineNumber expected:expected]; -} - -#pragma mark Test Methods - -// Disabled temporarily due to issue where cell nodes are not marked invisible before deallocation. -- (void)testInitialDataRead -{ - ASThrashDataSource *ds = [[ASThrashDataSource alloc] initTableViewDataSourceWithData:[ASThrashTestSection sectionsWithCount:kInitialSectionCount]]; - [self verifyDataSource:ds]; -} - -/// Replays the Base64 representation of an ASThrashUpdate from "ASThrashTestRecordedCase" file -- (void)testRecordedThrashCase -{ - NSURL *caseURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"ASThrashTestRecordedCase" withExtension:nil subdirectory:@"TestResources"]; - NSString *base64 = [NSString stringWithContentsOfURL:caseURL encoding:NSUTF8StringEncoding error:NULL]; - - _update = [ASThrashUpdate thrashUpdateWithBase64String:base64]; - if (_update == nil) { - return; - } - - ASThrashDataSource *ds = [[ASThrashDataSource alloc] initTableViewDataSourceWithData:_update.oldData]; - ds.tableView.test_enableSuperUpdateCallLogging = YES; - [self applyUpdate:_update toDataSource:ds]; - [self verifyDataSource:ds]; -} - -// Disabled temporarily due to issue where cell nodes are not marked invisible before deallocation. -- (void)testThrashingWildly -{ - for (NSInteger i = 0; i < kThrashingIterationCount; i++) { - [self setUp]; - @autoreleasepool { - NSArray *sections = [ASThrashTestSection sectionsWithCount:kInitialSectionCount]; - _update = [[ASThrashUpdate alloc] initWithData:sections]; - ASThrashDataSource *ds = [[ASThrashDataSource alloc] initTableViewDataSourceWithData:sections]; - - [self applyUpdate:_update toDataSource:ds]; - [self verifyDataSource:ds]; - [self expectationForPredicate:[ds predicateForDeallocatedHierarchy] evaluatedWithObject:(id)kCFNull handler:nil]; - } - [self waitForExpectationsWithTimeout:3 handler:nil]; - - [self tearDown]; - } -} - -#pragma mark Helpers - -- (void)applyUpdate:(ASThrashUpdate *)update toDataSource:(ASThrashDataSource *)dataSource -{ - TableView *tableView = dataSource.tableView; - - [tableView beginUpdates]; - dataSource.data = update.data; - - [tableView insertSections:update.insertedSectionIndexes withRowAnimation:UITableViewRowAnimationNone]; - - [tableView deleteSections:update.deletedSectionIndexes withRowAnimation:UITableViewRowAnimationNone]; - - [tableView reloadSections:update.replacedSectionIndexes withRowAnimation:UITableViewRowAnimationNone]; - - [update.insertedItemIndexes enumerateObjectsUsingBlock:^(NSMutableIndexSet * _Nonnull indexes, NSUInteger idx, BOOL * _Nonnull stop) { - NSArray *indexPaths = [indexes indexPathsInSection:idx]; - [tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]; - }]; - - [update.deletedItemIndexes enumerateObjectsUsingBlock:^(NSMutableIndexSet * _Nonnull indexes, NSUInteger sec, BOOL * _Nonnull stop) { - NSArray *indexPaths = [indexes indexPathsInSection:sec]; - [tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]; - }]; - - [update.replacedItemIndexes enumerateObjectsUsingBlock:^(NSMutableIndexSet * _Nonnull indexes, NSUInteger sec, BOOL * _Nonnull stop) { - NSArray *indexPaths = [indexes indexPathsInSection:sec]; - [tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]; - }]; - @try { - [tableView endUpdatesAnimated:NO completion:nil]; -#if !USE_UIKIT_REFERENCE - [tableView waitUntilAllUpdatesAreCommitted]; -#endif - } @catch (NSException *exception) { - _failed = YES; - @throw exception; - } -} - -- (void)verifyDataSource:(ASThrashDataSource *)ds -{ - TableView *tableView = ds.tableView; - NSArray *data = [ds data]; - XCTAssertEqual(data.count, tableView.numberOfSections); - for (NSInteger i = 0; i < tableView.numberOfSections; i++) { - XCTAssertEqual([tableView numberOfRowsInSection:i], data[i].items.count); - XCTAssertEqual([tableView rectForHeaderInSection:i].size.height, data[i].headerHeight); - - for (NSInteger j = 0; j < [tableView numberOfRowsInSection:i]; j++) { - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:j inSection:i]; - ASThrashTestItem *item = data[i].items[j]; -#if USE_UIKIT_REFERENCE - XCTAssertEqual([tableView rectForRowAtIndexPath:indexPath].size.height, item.rowHeight); -#else - ASThrashTestNode *node = (ASThrashTestNode *)[tableView nodeForRowAtIndexPath:indexPath]; - XCTAssertEqualObjects(node.item, item, @"Wrong node at index path %@", indexPath); -#endif - } - } -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASTextKitCoreTextAdditionsTests.mm b/submodules/AsyncDisplayKit/Tests/ASTextKitCoreTextAdditionsTests.mm deleted file mode 100644 index 8b0c47be8d..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTextKitCoreTextAdditionsTests.mm +++ /dev/null @@ -1,74 +0,0 @@ -// -// ASTextKitCoreTextAdditionsTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import - -#import - -#if AS_ENABLE_TEXTNODE - -BOOL floatsCloseEnough(CGFloat float1, CGFloat float2) { - CGFloat epsilon = 0.00001; - return (fabs(float1 - float2) < epsilon); -} - -@interface ASTextKitCoreTextAdditionsTests : XCTestCase - -@end - -@implementation ASTextKitCoreTextAdditionsTests - -- (void)testAttributeCleansing -{ - UIFont *font = [UIFont systemFontOfSize:12.0]; - NSMutableAttributedString *testString = [[NSMutableAttributedString alloc] initWithString:@"Test" attributes:@{NSFontAttributeName:font}]; - CFRange cfRange = CFRangeMake(0, testString.length); - CGColorRef blueColor = CGColorRetain([UIColor blueColor].CGColor); - CFAttributedStringSetAttribute((CFMutableAttributedStringRef)testString, - cfRange, - kCTForegroundColorAttributeName, - blueColor); - UIColor *color = [UIColor colorWithCGColor:blueColor]; - - NSAttributedString *actualCleansedString = ASCleanseAttributedStringOfCoreTextAttributes(testString); - XCTAssertTrue([[actualCleansedString attribute:NSForegroundColorAttributeName atIndex:0 effectiveRange:NULL] isEqual:color], @"Expected the %@ core text attribute to be cleansed from the string %@\n Should match %@", kCTForegroundColorFromContextAttributeName, actualCleansedString, color); - CGColorRelease(blueColor); -} - -- (void)testNoAttributeCleansing -{ - NSMutableAttributedString *testString = [[NSMutableAttributedString alloc] initWithString:@"Test" attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:12.0], - NSForegroundColorAttributeName : [UIColor blueColor]}]; - - NSAttributedString *actualCleansedString = ASCleanseAttributedStringOfCoreTextAttributes(testString); - XCTAssertTrue([testString isEqualToAttributedString:actualCleansedString], @"Expected the output string %@ to be the same as the input %@ if there are no core text attributes", actualCleansedString, testString); -} - -- (void)testNSParagraphStyleNoCleansing -{ - NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; - paragraphStyle.lineSpacing = 10.0; - - //NSUnderlineStyleAttributeName flags the unsupported CT attribute check - NSDictionary *attributes = @{NSParagraphStyleAttributeName:paragraphStyle, - NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle)}; - - NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:@"Test" attributes:attributes]; - NSAttributedString *cleansedString = ASCleanseAttributedStringOfCoreTextAttributes(attributedString); - - NSParagraphStyle *cleansedParagraphStyle = [cleansedString attribute:NSParagraphStyleAttributeName atIndex:0 effectiveRange:NULL]; - - XCTAssertTrue(floatsCloseEnough(cleansedParagraphStyle.lineSpacing, paragraphStyle.lineSpacing), @"Expected the output line spacing: %f to be equal to the input line spacing: %f", cleansedParagraphStyle.lineSpacing, paragraphStyle.lineSpacing); -} - -@end - -#endif diff --git a/submodules/AsyncDisplayKit/Tests/ASTextKitFontSizeAdjusterTests.mm b/submodules/AsyncDisplayKit/Tests/ASTextKitFontSizeAdjusterTests.mm deleted file mode 100644 index c91ff99a49..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTextKitFontSizeAdjusterTests.mm +++ /dev/null @@ -1,51 +0,0 @@ -// -// ASTextKitFontSizeAdjusterTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -#if AS_ENABLE_TEXTNODE - -@interface ASFontSizeAdjusterTests : XCTestCase - -@end - -@implementation ASFontSizeAdjusterTests - -- (void)testFontSizeAdjusterAttributes -{ - NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; - paragraphStyle.lineHeightMultiple = 2.0; - paragraphStyle.lineSpacing = 2.0; - paragraphStyle.paragraphSpacing = 4.0; - paragraphStyle.firstLineHeadIndent = 6.0; - paragraphStyle.headIndent = 8.0; - paragraphStyle.tailIndent = 10.0; - paragraphStyle.minimumLineHeight = 12.0; - paragraphStyle.maximumLineHeight = 14.0; - - NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Lorem ipsum dolor sit amet" - attributes:@{ NSParagraphStyleAttributeName: paragraphStyle }]; - - [ASTextKitFontSizeAdjuster adjustFontSizeForAttributeString:string withScaleFactor:0.5]; - - NSParagraphStyle *adjustedParagraphStyle = [string attribute:NSParagraphStyleAttributeName atIndex:0 effectiveRange:nil]; - - XCTAssertEqual(adjustedParagraphStyle.lineHeightMultiple, 2.0); - XCTAssertEqual(adjustedParagraphStyle.lineSpacing, 1.0); - XCTAssertEqual(adjustedParagraphStyle.paragraphSpacing, 2.0); - XCTAssertEqual(adjustedParagraphStyle.firstLineHeadIndent, 3.0); - XCTAssertEqual(adjustedParagraphStyle.headIndent, 4.0); - XCTAssertEqual(adjustedParagraphStyle.tailIndent, 5.0); - XCTAssertEqual(adjustedParagraphStyle.minimumLineHeight, 6.0); - XCTAssertEqual(adjustedParagraphStyle.maximumLineHeight, 7.0); -} - -@end - -#endif diff --git a/submodules/AsyncDisplayKit/Tests/ASTextKitTests.mm b/submodules/AsyncDisplayKit/Tests/ASTextKitTests.mm deleted file mode 100644 index efd93cf809..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTextKitTests.mm +++ /dev/null @@ -1,231 +0,0 @@ -// -// ASTextKitTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdocumentation" -#import -#pragma clang diagnostic pop - -#import - -#if AS_ENABLE_TEXTNODE - -#import -#import -#import -#import - -#import - -@interface ASTextKitTests : XCTestCase - -@end - -static UITextView *UITextViewWithAttributes(const ASTextKitAttributes &attributes, - const CGSize constrainedSize, - NSDictionary *linkTextAttributes) -{ - UITextView *textView = [[UITextView alloc] initWithFrame:{ .size = constrainedSize }]; - textView.backgroundColor = [UIColor clearColor]; - textView.textContainer.lineBreakMode = attributes.lineBreakMode; - textView.textContainer.lineFragmentPadding = 0.f; - textView.textContainer.maximumNumberOfLines = attributes.maximumNumberOfLines; - textView.textContainerInset = UIEdgeInsetsZero; - textView.layoutManager.usesFontLeading = NO; - textView.attributedText = attributes.attributedString; - textView.linkTextAttributes = linkTextAttributes; - return textView; -} - -static UIImage *UITextViewImageWithAttributes(const ASTextKitAttributes &attributes, - const CGSize constrainedSize, - NSDictionary *linkTextAttributes) -{ - UITextView *textView = UITextViewWithAttributes(attributes, constrainedSize, linkTextAttributes); - UIGraphicsBeginImageContextWithOptions(constrainedSize, NO, 0); - CGContextRef context = UIGraphicsGetCurrentContext(); - - CGContextSaveGState(context); - { - [textView.layer renderInContext:context]; - } - CGContextRestoreGState(context); - - UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return snapshot; -} - -static UIImage *ASTextKitImageWithAttributes(const ASTextKitAttributes &attributes, const CGSize constrainedSize) -{ - ASTextKitRenderer *renderer = [[ASTextKitRenderer alloc] initWithTextKitAttributes:attributes - constrainedSize:constrainedSize]; - UIGraphicsBeginImageContextWithOptions(constrainedSize, NO, 0); - CGContextRef context = UIGraphicsGetCurrentContext(); - - CGContextSaveGState(context); - { - [renderer drawInContext:context bounds:{.size = constrainedSize}]; - } - CGContextRestoreGState(context); - - UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return snapshot; -} - -// linkTextAttributes are only applied to UITextView -static BOOL checkAttributes(const ASTextKitAttributes &attributes, const CGSize constrainedSize, NSDictionary *linkTextAttributes) -{ - FBSnapshotTestController *controller = [[FBSnapshotTestController alloc] init]; - UIImage *labelImage = UITextViewImageWithAttributes(attributes, constrainedSize, linkTextAttributes); - UIImage *textKitImage = ASTextKitImageWithAttributes(attributes, constrainedSize); - return [controller compareReferenceImage:labelImage toImage:textKitImage tolerance:0.0 error:nil]; -} - -@implementation ASTextKitTests - -- (void)testSimpleStrings -{ - ASTextKitAttributes attributes { - .attributedString = [[NSAttributedString alloc] initWithString:@"hello" attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:12]}] - }; - XCTAssert(checkAttributes(attributes, { 100, 100 }, nil)); -} - -- (void)testChangingAPropertyChangesHash -{ - NSAttributedString *as = [[NSAttributedString alloc] initWithString:@"hello" attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:12]}]; - - ASTextKitAttributes attrib1 { - .attributedString = as, - .lineBreakMode = NSLineBreakByClipping, - }; - ASTextKitAttributes attrib2 { - .attributedString = as, - }; - - XCTAssertNotEqual(attrib1.hash(), attrib2.hash(), @"Hashes should differ when NSLineBreakByClipping changes."); -} - -- (void)testSameStringHashesSame -{ - ASTextKitAttributes attrib1 { - .attributedString = [[NSAttributedString alloc] initWithString:@"hello" attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:12]}], - }; - ASTextKitAttributes attrib2 { - .attributedString = [[NSAttributedString alloc] initWithString:@"hello" attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:12]}], - }; - - XCTAssertEqual(attrib1.hash(), attrib2.hash(), @"Hashes should be the same!"); -} - - -- (void)testStringsWithVariableAttributes -{ - NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:@"hello" attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:12]}]; - for (int i = 0; i < attrStr.length; i++) { - // Color each character something different - CGFloat factor = ((CGFloat)i) / ((CGFloat)attrStr.length); - [attrStr addAttribute:NSForegroundColorAttributeName - value:[UIColor colorWithRed:factor - green:1.0 - factor - blue:0.0 - alpha:1.0] - range:NSMakeRange(i, 1)]; - } - ASTextKitAttributes attributes { - .attributedString = attrStr - }; - XCTAssert(checkAttributes(attributes, { 100, 100 }, nil)); -} - -- (void)testLinkInTextUsesForegroundColor -{ - NSDictionary *linkTextAttributes = @{ NSForegroundColorAttributeName : [UIColor redColor], - // UITextView adds underline by default and we can't get rid of it - // so we have to choose a style and color and match it in the text kit version - // for this test - NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle), - NSUnderlineColorAttributeName: [UIColor blueColor], - }; - NSDictionary *textAttributes = @{NSFontAttributeName : [UIFont systemFontOfSize:12], - }; - - NSString *prefixString = @"click "; - NSString *linkString = @"this link"; - NSString *textString = [prefixString stringByAppendingString:linkString]; - - NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:textString attributes:textAttributes]; - NSURL *linkURL = [NSURL URLWithString:@"https://github.com/facebook/AsyncDisplayKit/issues/967"]; - NSRange selectedRange = (NSRange){prefixString.length, linkString.length}; - - [attrStr addAttribute:NSLinkAttributeName value:linkURL range:selectedRange]; - - for (NSString *attributeName in linkTextAttributes.keyEnumerator) { - [attrStr addAttribute:attributeName - value:linkTextAttributes[attributeName] - range:selectedRange]; - } - - ASTextKitAttributes textKitattributes { - .attributedString = attrStr - }; - - XCTAssert(checkAttributes(textKitattributes, { 100, 100 }, linkTextAttributes)); -} - -- (void)testRectsForRangeBeyondTruncationSizeReturnsNonZeroNumberOfRects -{ - NSAttributedString *attributedString = - [[NSAttributedString alloc] - initWithString:@"90's cray photo booth tote bag bespoke Carles. Plaid wayfarers Odd Future master cleanse tattooed four dollar toast small batch kale chips leggings meh photo booth occupy irony. " attributes:@{ASTextKitEntityAttributeName : [[ASTextKitEntityAttribute alloc] initWithEntity:@"entity"]}]; - ASTextKitRenderer *renderer = - [[ASTextKitRenderer alloc] - initWithTextKitAttributes:{ - .attributedString = attributedString, - .maximumNumberOfLines = 1, - .truncationAttributedString = [[NSAttributedString alloc] initWithString:@"... Continue Reading"] - } - constrainedSize:{ 100, 100 }]; - XCTAssert([renderer rectsForTextRange:NSMakeRange(0, attributedString.length) measureOption:ASTextKitRendererMeasureOptionBlock].count > 0); -} - -- (void)testTextKitComponentsCanCalculateSizeInBackground -{ - NSAttributedString *attributedString = - [[NSAttributedString alloc] - initWithString:@"90's cray photo booth tote bag bespoke Carles. Plaid wayfarers Odd Future master cleanse tattooed four dollar toast small batch kale chips leggings meh photo booth occupy irony. " attributes:@{ASTextKitEntityAttributeName : [[ASTextKitEntityAttribute alloc] initWithEntity:@"entity"]}]; - ASTextKitComponents *components = [ASTextKitComponents componentsWithAttributedSeedString:attributedString textContainerSize:CGSizeZero]; - components.textView = [[ASTextKitComponentsTextView alloc] initWithFrame:CGRectZero textContainer:components.textContainer]; - components.textView.frame = CGRectMake(0, 0, 20, 1000); - - XCTestExpectation *expectation = [self expectationWithDescription:@"Components deallocated in background"]; - - ASPerformBlockOnBackgroundThread(^{ - // Use an autorelease pool here to ensure temporary components are (and can be) released in background - @autoreleasepool { - [components sizeForConstrainedWidth:100]; - [components sizeForConstrainedWidth:50 forMaxNumberOfLines:5]; - } - - [expectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:1 handler:nil]; -} - -@end - -#endif diff --git a/submodules/AsyncDisplayKit/Tests/ASTextKitTruncationTests.mm b/submodules/AsyncDisplayKit/Tests/ASTextKitTruncationTests.mm deleted file mode 100644 index a9d5544c3e..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTextKitTruncationTests.mm +++ /dev/null @@ -1,165 +0,0 @@ -// -// ASTextKitTruncationTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -#import - -#if AS_ENABLE_TEXTNODE - -#import - -@interface ASTextKitTruncationTests : XCTestCase - -@end - -@implementation ASTextKitTruncationTests - -- (NSString *)_sentenceString -{ - return @"90's cray photo booth tote bag bespoke Carles. Plaid wayfarers Odd Future master cleanse tattooed four dollar toast small batch kale chips leggings meh photo booth occupy irony."; -} - -- (NSAttributedString *)_sentenceAttributedString -{ - return [[NSAttributedString alloc] initWithString:[self _sentenceString] attributes:@{}]; -} - -- (NSAttributedString *)_simpleTruncationAttributedString -{ - return [[NSAttributedString alloc] initWithString:@"..." attributes:@{}]; -} - -- (void)testEmptyTruncationStringSameAsStraightTextKitTailTruncation -{ - CGSize constrainedSize = CGSizeMake(100, 50); - NSAttributedString *attributedString = [self _sentenceAttributedString]; - ASTextKitContext *context = [[ASTextKitContext alloc] initWithAttributedString:attributedString - lineBreakMode:NSLineBreakByWordWrapping - maximumNumberOfLines:0 - exclusionPaths:nil - constrainedSize:constrainedSize]; - __block NSRange textKitVisibleRange; - [context performBlockWithLockedTextKitComponents:^(NSLayoutManager *layoutManager, NSTextStorage *textStorage, NSTextContainer *textContainer) { - textKitVisibleRange = [layoutManager characterRangeForGlyphRange:[layoutManager glyphRangeForTextContainer:textContainer] - actualGlyphRange:NULL]; - }]; - ASTextKitTailTruncater *tailTruncater = [[ASTextKitTailTruncater alloc] initWithContext:context - truncationAttributedString:nil - avoidTailTruncationSet:nil]; - [tailTruncater truncate]; - XCTAssert(NSEqualRanges(textKitVisibleRange, tailTruncater.visibleRanges[0])); - XCTAssert(NSEqualRanges(textKitVisibleRange, tailTruncater.firstVisibleRange)); -} - -- (void)testSimpleTailTruncation -{ - CGSize constrainedSize = CGSizeMake(100, 60); - NSAttributedString *attributedString = [self _sentenceAttributedString]; - ASTextKitContext *context = [[ASTextKitContext alloc] initWithAttributedString:attributedString - lineBreakMode:NSLineBreakByWordWrapping - maximumNumberOfLines:0 - exclusionPaths:nil - constrainedSize:constrainedSize]; - ASTextKitTailTruncater *tailTruncater = [[ASTextKitTailTruncater alloc] initWithContext:context - truncationAttributedString:[self _simpleTruncationAttributedString] - avoidTailTruncationSet:[NSCharacterSet characterSetWithCharactersInString:@""]]; - [tailTruncater truncate]; - __block NSString *drawnString; - [context performBlockWithLockedTextKitComponents:^(NSLayoutManager *layoutManager, NSTextStorage *textStorage, NSTextContainer *textContainer) { - drawnString = textStorage.string; - }]; - NSString *expectedString = @"90's cray photo booth tote bag bespoke Carles. Plaid wayfarers..."; - XCTAssertEqualObjects(expectedString, drawnString); - XCTAssert(NSEqualRanges(NSMakeRange(0, 62), tailTruncater.visibleRanges[0])); - XCTAssert(NSEqualRanges(NSMakeRange(0, 62), tailTruncater.firstVisibleRange)); -} - -- (void)testAvoidedCharTailWordBoundaryTruncation -{ - CGSize constrainedSize = CGSizeMake(100, 50); - NSAttributedString *attributedString = [self _sentenceAttributedString]; - ASTextKitContext *context = [[ASTextKitContext alloc] initWithAttributedString:attributedString - lineBreakMode:NSLineBreakByWordWrapping - maximumNumberOfLines:0 - exclusionPaths:nil - constrainedSize:constrainedSize]; - ASTextKitTailTruncater *tailTruncater = [[ASTextKitTailTruncater alloc] initWithContext:context - truncationAttributedString:[self _simpleTruncationAttributedString] - avoidTailTruncationSet:[NSCharacterSet characterSetWithCharactersInString:@"."]]; - [tailTruncater truncate]; - __block NSString *drawnString; - [context performBlockWithLockedTextKitComponents:^(NSLayoutManager *layoutManager, NSTextStorage *textStorage, NSTextContainer *textContainer) { - drawnString = textStorage.string; - }]; - // This should have removed the additional "." in the string right after Carles. - NSString *expectedString = @"90's cray photo booth tote bag bespoke Carles..."; - XCTAssertEqualObjects(expectedString, drawnString); -} - -- (void)testAvoidedCharTailCharBoundaryTruncation -{ - CGSize constrainedSize = CGSizeMake(50, 50); - NSAttributedString *attributedString = [self _sentenceAttributedString]; - ASTextKitContext *context = [[ASTextKitContext alloc] initWithAttributedString:attributedString - lineBreakMode:NSLineBreakByCharWrapping - maximumNumberOfLines:0 - exclusionPaths:nil - constrainedSize:constrainedSize]; - ASTextKitTailTruncater *tailTruncater = [[ASTextKitTailTruncater alloc] initWithContext:context - truncationAttributedString:[self _simpleTruncationAttributedString] - avoidTailTruncationSet:[NSCharacterSet characterSetWithCharactersInString:@"."]]; - [tailTruncater truncate]; - __block NSString *drawnString; - [context performBlockWithLockedTextKitComponents:^(NSLayoutManager *layoutManager, NSTextStorage *textStorage, NSTextContainer *textContainer) { - drawnString = textStorage.string; - }]; - // This should have removed the additional "." in the string right after Carles. - NSString *expectedString = @"90's cray photo booth t..."; - XCTAssertEqualObjects(expectedString, drawnString); -} - -- (void)testHandleZeroSizeConstrainedSize -{ - CGSize constrainedSize = CGSizeZero; - NSAttributedString *attributedString = [self _sentenceAttributedString]; - - ASTextKitContext *context = [[ASTextKitContext alloc] initWithAttributedString:attributedString - lineBreakMode:NSLineBreakByWordWrapping - maximumNumberOfLines:0 - exclusionPaths:nil - constrainedSize:constrainedSize]; - ASTextKitTailTruncater *tailTruncater = [[ASTextKitTailTruncater alloc] initWithContext:context - truncationAttributedString:[self _simpleTruncationAttributedString] - avoidTailTruncationSet:nil]; - XCTAssertNoThrow([tailTruncater truncate]); - XCTAssert(tailTruncater.visibleRanges.size() == 0); - NSEqualRanges(NSMakeRange(0, 0), tailTruncater.firstVisibleRange); -} - -- (void)testHandleZeroHeightConstrainedSize -{ - CGSize constrainedSize = CGSizeMake(50, 0); - NSAttributedString *attributedString = [self _sentenceAttributedString]; - ASTextKitContext *context = [[ASTextKitContext alloc] initWithAttributedString:attributedString - lineBreakMode:NSLineBreakByCharWrapping - maximumNumberOfLines:0 - exclusionPaths:nil - constrainedSize:constrainedSize]; - - ASTextKitTailTruncater *tailTruncater = [[ASTextKitTailTruncater alloc] initWithContext:context - truncationAttributedString:[self _simpleTruncationAttributedString] - avoidTailTruncationSet:[NSCharacterSet characterSetWithCharactersInString:@"."]]; - XCTAssertNoThrow([tailTruncater truncate]); -} - -@end - -#endif diff --git a/submodules/AsyncDisplayKit/Tests/ASTextNode2SnapshotTests.mm b/submodules/AsyncDisplayKit/Tests/ASTextNode2SnapshotTests.mm deleted file mode 100644 index 9b48a82e4a..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTextNode2SnapshotTests.mm +++ /dev/null @@ -1,301 +0,0 @@ -// -// ASTextNode2SnapshotTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - - -#import "ASTestCase.h" -#import "ASSnapshotTestCase.h" -#import - -@interface ASTextNode2SnapshotTests : ASSnapshotTestCase - -@end - -@interface LineBreakConfig : NSObject - -@property (nonatomic, assign) NSUInteger numberOfLines; -@property (nonatomic, assign) NSLineBreakMode lineBreakMode; - -+ (NSArray *)configs; - -- (instancetype)initWithNumberOfLines:(NSUInteger)numberOfLines lineBreakMode:(NSLineBreakMode)lineBreakMode; -- (NSString *)breakModeDescription; - -@end - -@implementation LineBreakConfig - -+ (NSArray *)configs -{ - static dispatch_once_t init_predicate; - static NSArray *allConfigs = nil; - - dispatch_once(&init_predicate, ^{ - NSMutableArray *setup = [NSMutableArray new]; - for (int i = 0; i <= 3; i++) { - for (int j = NSLineBreakByWordWrapping; j <= NSLineBreakByTruncatingMiddle; j++) { - if (j == NSLineBreakByClipping) continue; - [setup addObject:[[LineBreakConfig alloc] initWithNumberOfLines:i lineBreakMode:(NSLineBreakMode) j]]; - } - - allConfigs = [NSArray arrayWithArray:setup]; - } - }); - return allConfigs; -} - -- (instancetype)initWithNumberOfLines:(NSUInteger)numberOfLines lineBreakMode:(NSLineBreakMode)lineBreakMode -{ - self = [super init]; - if (self != nil) { - _numberOfLines = numberOfLines; - _lineBreakMode = lineBreakMode; - - return self; - } - return nil; -} - -- (NSString *)breakModeDescription { - NSString *lineBreak = nil; - switch (self.lineBreakMode) { - case NSLineBreakByTruncatingHead: - lineBreak = @"NSLineBreakByTruncatingHead"; - break; - case NSLineBreakByCharWrapping: - lineBreak = @"NSLineBreakByCharWrapping"; - break; - case NSLineBreakByClipping: - lineBreak = @"NSLineBreakByClipping"; - break; - case NSLineBreakByWordWrapping: - lineBreak = @"NSLineBreakByWordWrapping"; - break; - case NSLineBreakByTruncatingTail: - lineBreak = @"NSLineBreakByTruncatingTail"; - break; - case NSLineBreakByTruncatingMiddle: - lineBreak = @"NSLineBreakByTruncatingMiddle"; - break; - default: - lineBreak = @"Unknown?"; - break; - } - return lineBreak; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"numberOfLines: %lu\nlineBreakMode: %@", (unsigned long) self.numberOfLines, [self breakModeDescription]]; -} - -@end - -@implementation ASTextNode2SnapshotTests - -- (void)setUp -{ - [super setUp]; - - // This will use ASTextNode2 for snapshot tests. - // All tests are duplicated from ASTextNodeSnapshotTests. - ASConfiguration *config = [[ASConfiguration alloc] initWithDictionary:nil]; -#if AS_ENABLE_TEXTNODE - config.experimentalFeatures = ASExperimentalTextNode; -#endif - [ASConfigurationManager test_resetWithConfiguration:config]; - - self.recordMode = NO; -} - -- (void)tearDown -{ - [super tearDown]; - ASConfiguration *config = [[ASConfiguration alloc] initWithDictionary:nil]; - config.experimentalFeatures = kNilOptions; - [ASConfigurationManager test_resetWithConfiguration:config]; -} - -- (void)testTextContainerInset_ASTextNode2 -{ - // trivial test case to ensure ASSnapshotTestCase works - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"judar" - attributes:@{NSFontAttributeName: [UIFont italicSystemFontOfSize:24]}]; - textNode.textContainerInset = UIEdgeInsetsMake(0, 2, 0, 2); - ASDisplayNodeSizeToFitSizeRange(textNode, ASSizeRangeMake(CGSizeZero, CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX))); - - ASSnapshotVerifyNode(textNode, nil); -} - -- (void)testTextTruncationModes_ASTextNode2 -{ - UIView *container = [[UIView alloc] initWithFrame:(CGRect) {CGPointZero, (CGSize) {375.0f, 667.0f}}]; - - UILabel *textNodeLabel = [[UILabel alloc] init]; - UILabel *uiLabelLabel = [[UILabel alloc] init]; - UILabel *description = [[UILabel alloc] init]; - textNodeLabel.text = @"ASTextNode2:"; - textNodeLabel.font = [UIFont boldSystemFontOfSize:16.0]; - textNodeLabel.textColor = [UIColor colorWithRed:0.0 green:0.7 blue:0.0 alpha:1.0]; - uiLabelLabel.text = @"UILabel:"; - uiLabelLabel.font = [UIFont boldSystemFontOfSize:16.0]; - uiLabelLabel.textColor = [UIColor colorWithRed:0.0 green:0.7 blue:0.0 alpha:1.0]; - - description.text = @""; - description.font = [UIFont italicSystemFontOfSize:16.0]; - description.numberOfLines = 0; - - uiLabelLabel.textColor = [UIColor colorWithRed:0.0 green:0.7 blue:0.0 alpha:1.0]; - - UILabel *reference = [[UILabel alloc] init]; - ASTextNode *textNode = [[ASTextNode alloc] init]; // ASTextNode2 - - NSMutableAttributedString *refString = [[NSMutableAttributedString alloc] initWithString:@"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." - attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:18.0f] }]; - NSMutableAttributedString *asString = [refString mutableCopy]; - - reference.attributedText = refString; - textNode.attributedText = asString; - - CGSize size = (CGSize) {container.bounds.size.width, 120.0}; - CGPoint origin = (CGPoint) {CGRectGetWidth(container.bounds) / 2 - size.width / 2, CGRectGetHeight(container.bounds) / 2 - size.height / 2}; // center - - textNode.frame = (CGRect) {origin, size}; - reference.frame = CGRectOffset(textNode.frame, 0, -160.0f); - - textNodeLabel.bounds = (CGRect) {CGPointZero, (CGSize) {container.bounds.size.width, textNodeLabel.font.lineHeight}}; - origin = (CGPoint) {textNode.frame.origin.x, textNode.frame.origin.y - textNodeLabel.bounds.size.height}; - textNodeLabel.frame = (CGRect) {origin, textNodeLabel.bounds.size}; - - uiLabelLabel.bounds = (CGRect) {CGPointZero, (CGSize) {container.bounds.size.width, uiLabelLabel.font.lineHeight}}; - origin = (CGPoint) {reference.frame.origin.x, reference.frame.origin.y - uiLabelLabel.bounds.size.height}; - uiLabelLabel.frame = (CGRect) {origin, uiLabelLabel.bounds.size}; - - uiLabelLabel.bounds = (CGRect) {CGPointZero, (CGSize) {container.bounds.size.width, uiLabelLabel.font.lineHeight}}; - origin = (CGPoint) {textNode.frame.origin.x, textNode.frame.origin.y - uiLabelLabel.bounds.size.height}; - uiLabelLabel.frame = (CGRect) {origin, uiLabelLabel.bounds.size}; - - uiLabelLabel.bounds = (CGRect) {CGPointZero, (CGSize) {container.bounds.size.width, uiLabelLabel.font.lineHeight}}; - origin = (CGPoint) {reference.frame.origin.x, reference.frame.origin.y - uiLabelLabel.bounds.size.height}; - uiLabelLabel.frame = (CGRect) {origin, uiLabelLabel.bounds.size}; - - description.bounds = textNode.bounds; - description.frame = (CGRect) {(CGPoint) {0, container.bounds.size.height * 0.8}, description.bounds.size}; - - [container addSubview:reference]; - [container addSubview:textNode.view]; - [container addSubview:textNodeLabel]; - [container addSubview:uiLabelLabel]; - [container addSubview:description]; - - NSArray *c = [LineBreakConfig configs]; - for (LineBreakConfig *config in c) { - reference.lineBreakMode = textNode.truncationMode = config.lineBreakMode; - reference.numberOfLines = textNode.maximumNumberOfLines = config.numberOfLines; - description.text = config.description; - [container setNeedsLayout]; - NSString *identifier = [NSString stringWithFormat:@"%@_%luLines", [config breakModeDescription], (unsigned long)config.numberOfLines]; - [ASSnapshotTestCase hackilySynchronouslyRecursivelyRenderNode:textNode]; - ASSnapshotVerifyViewWithTolerance(container, identifier, 0.01); - } -} - -- (void)testTextContainerInsetIsIncludedWithSmallerConstrainedSize_ASTextNode2 -{ - UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectZero]; - backgroundView.layer.as_allowsHighlightDrawing = YES; - - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"judar judar judar judar judar judar" - attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:30] }]; - - textNode.textContainerInset = UIEdgeInsetsMake(10, 10, 10, 10); - - ASLayout *layout = [textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeMake(100, 80))]; - textNode.frame = CGRectMake(50, 50, layout.size.width, layout.size.height); - - [backgroundView addSubview:textNode.view]; - backgroundView.frame = UIEdgeInsetsInsetRect(textNode.bounds, UIEdgeInsetsMake(-50, -50, -50, -50)); - - textNode.highlightRange = NSMakeRange(0, textNode.attributedText.length); - - [ASSnapshotTestCase hackilySynchronouslyRecursivelyRenderNode:textNode]; - ASSnapshotVerifyLayer(backgroundView.layer, nil); -} - -- (void)testTextContainerInsetHighlight_ASTextNode2 -{ - UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectZero]; - backgroundView.layer.as_allowsHighlightDrawing = YES; - - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"yolo" - attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:30] }]; - - textNode.textContainerInset = UIEdgeInsetsMake(5, 10, 10, 5); - ASLayout *layout = [textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY))]; - textNode.frame = CGRectMake(50, 50, layout.size.width, layout.size.height); - - [backgroundView addSubview:textNode.view]; - backgroundView.frame = UIEdgeInsetsInsetRect(textNode.bounds, UIEdgeInsetsMake(-50, -50, -50, -50)); - - textNode.highlightRange = NSMakeRange(0, textNode.attributedText.length); - - [ASSnapshotTestCase hackilySynchronouslyRecursivelyRenderNode:textNode]; - ASSnapshotVerifyView(backgroundView, nil); -} - -// This test is disabled because the fast-path is disabled. -- (void)DISABLED_testThatFastPathTruncationWorks_ASTextNode2 -{ - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"Quality is Important" attributes:@{ NSForegroundColorAttributeName: [UIColor blueColor], NSFontAttributeName: [UIFont italicSystemFontOfSize:24] }]; - [textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeMake(100, 50))]; - ASSnapshotVerifyNode(textNode, nil); -} - -- (void)testThatSlowPathTruncationWorks_ASTextNode2 -{ - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"Quality is Important" attributes:@{ NSForegroundColorAttributeName: [UIColor blueColor], NSFontAttributeName: [UIFont italicSystemFontOfSize:24] }]; - // Set exclusion paths to trigger slow path - textNode.exclusionPaths = @[ [UIBezierPath bezierPath] ]; - ASDisplayNodeSizeToFitSizeRange(textNode, ASSizeRangeMake(CGSizeZero, CGSizeMake(100, 50))); - ASSnapshotVerifyNode(textNode, nil); -} - -- (void)testShadowing_ASTextNode2 -{ - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"Quality is Important"]; - textNode.shadowColor = [UIColor blackColor].CGColor; - textNode.shadowOpacity = 0.3; - textNode.shadowRadius = 3; - textNode.shadowOffset = CGSizeMake(0, 1); - ASDisplayNodeSizeToFitSizeRange(textNode, ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY))); - ASSnapshotVerifyNode(textNode, nil); -} - -/** - * https://github.com/TextureGroup/Texture/issues/822 - */ -- (void)DISABLED_testThatTruncationTokenAttributesPrecedeThoseInheritedFromTextWhenTruncateTailMode_ASTextNode2 -{ - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.style.maxSize = CGSizeMake(20, 80); - NSMutableAttributedString *mas = [[NSMutableAttributedString alloc] initWithString:@"Quality is an important "]; - [mas appendAttributedString:[[NSAttributedString alloc] initWithString:@"thing" attributes:@{ NSBackgroundColorAttributeName : UIColor.yellowColor}]]; - textNode.attributedText = mas; - textNode.truncationMode = NSLineBreakByTruncatingTail; - - textNode.truncationAttributedText = [[NSAttributedString alloc] initWithString:@"\u2026" attributes:@{ NSBackgroundColorAttributeName: UIColor.greenColor }]; - ASDisplayNodeSizeToFitSizeRange(textNode, ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY))); - ASSnapshotVerifyNode(textNode, nil); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASTextNode2Tests.mm b/submodules/AsyncDisplayKit/Tests/ASTextNode2Tests.mm deleted file mode 100644 index b8f08ed451..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTextNode2Tests.mm +++ /dev/null @@ -1,94 +0,0 @@ -// -// ASTextNode2Tests.mm -// TextureTests -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import - -#import -#import -#import - -#import "ASTestCase.h" - -@interface ASTextNode2Tests : XCTestCase - -@property(nonatomic) ASTextNode2 *textNode; -@property(nonatomic, copy) NSAttributedString *attributedText; - -@end - -@implementation ASTextNode2Tests - -- (void)setUp -{ - [super setUp]; - _textNode = [[ASTextNode2 alloc] init]; - - UIFontDescriptor *desc = [UIFontDescriptor fontDescriptorWithName:@"Didot" size:18]; - NSArray *arr = @[ @{ - UIFontFeatureTypeIdentifierKey : @(kLetterCaseType), - UIFontFeatureSelectorIdentifierKey : @(kSmallCapsSelector) - } ]; - desc = [desc fontDescriptorByAddingAttributes:@{UIFontDescriptorFeatureSettingsAttribute : arr}]; - UIFont *f = [UIFont fontWithDescriptor:desc size:0]; - NSDictionary *d = @{NSFontAttributeName : f}; - NSMutableAttributedString *mas = [[NSMutableAttributedString alloc] - initWithString: - @"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor " - @"incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud " - @"exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure " - @"dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. " - @"Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt " - @"mollit anim id est laborum." - attributes:d]; - NSMutableParagraphStyle *para = [NSMutableParagraphStyle new]; - para.alignment = NSTextAlignmentCenter; - para.lineSpacing = 1.0; - [mas addAttribute:NSParagraphStyleAttributeName value:para range:NSMakeRange(0, mas.length - 1)]; - - // Vary the linespacing on the last line - NSMutableParagraphStyle *lastLinePara = [NSMutableParagraphStyle new]; - lastLinePara.alignment = para.alignment; - lastLinePara.lineSpacing = 5.0; - [mas addAttribute:NSParagraphStyleAttributeName - value:lastLinePara - range:NSMakeRange(mas.length - 1, 1)]; - - _attributedText = mas; - _textNode.attributedText = _attributedText; -} - -- (void)testTruncation -{ - XCTAssertTrue([(ASTextNode *)_textNode shouldTruncateForConstrainedSize:ASSizeRangeMake(CGSizeMake(100, 100))], @"Text Node should truncate"); - - _textNode.frame = CGRectMake(0, 0, 100, 100); - XCTAssertTrue(_textNode.isTruncated, @"Text Node should be truncated"); -} - -- (void)testAccessibility -{ - XCTAssertTrue(_textNode.isAccessibilityElement, @"Should be an accessibility element"); - XCTAssertTrue(_textNode.accessibilityTraits == UIAccessibilityTraitStaticText, - @"Should have static text accessibility trait, instead has %llu", - _textNode.accessibilityTraits); - XCTAssertTrue(_textNode.defaultAccessibilityTraits == UIAccessibilityTraitStaticText, - @"Default accessibility traits should return static text accessibility trait, " - @"instead returns %llu", - _textNode.defaultAccessibilityTraits); - - XCTAssertTrue([_textNode.accessibilityLabel isEqualToString:_attributedText.string], - @"Accessibility label is incorrectly set to \n%@\n when it should be \n%@\n", - _textNode.accessibilityLabel, _attributedText.string); - XCTAssertTrue([_textNode.defaultAccessibilityLabel isEqualToString:_attributedText.string], - @"Default accessibility label incorrectly returns \n%@\n when it should be \n%@\n", - _textNode.defaultAccessibilityLabel, _attributedText.string); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASTextNodePerformanceTests.mm b/submodules/AsyncDisplayKit/Tests/ASTextNodePerformanceTests.mm deleted file mode 100644 index 961d192aa7..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTextNodePerformanceTests.mm +++ /dev/null @@ -1,234 +0,0 @@ -// -// ASTextNodePerformanceTests.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "ASPerformanceTestContext.h" -#import -#import -#import -#import - -#import "ASXCTExtensions.h" - -/** - * NOTE: This test case is not run during the "test" action. You have to run it manually (click the little diamond.) - */ - -@interface ASTextNodePerformanceTests : XCTestCase - -@end - -@implementation ASTextNodePerformanceTests - -#pragma mark Performance Tests - -static NSString *const kTestCaseUIKit = @"UIKit"; -static NSString *const kTestCaseASDK = @"ASDK"; -static NSString *const kTestCaseUIKitPrivateCaching = @"UIKitPrivateCaching"; -static NSString *const kTestCaseUIKitWithNoContext = @"UIKitNoContext"; -static NSString *const kTestCaseUIKitWithFreshContext = @"UIKitFreshContext"; -static NSString *const kTestCaseUIKitWithReusedContext = @"UIKitReusedContext"; - -+ (NSArray *)realisticDataSet -{ - static NSArray *array; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSString *file = [[NSBundle bundleForClass:self] pathForResource:@"AttributedStringsFixture0" ofType:@"plist" inDirectory:@"TestResources"]; - if (file != nil) { - array = [NSKeyedUnarchiver unarchiveObjectWithFile:file]; - } - NSAssert([array isKindOfClass:[NSArray class]], nil); - NSSet *unique = [NSSet setWithArray:array]; - NSLog(@"Loaded realistic text data set with %d attributed strings, %d unique.", (int)array.count, (int)unique.count); - }); - return array; -} - -- (void)testPerformance_RealisticData -{ - NSArray *data = [self.class realisticDataSet]; - - CGSize maxSize = CGSizeMake(355, CGFLOAT_MAX); - CGSize __block uiKitSize, __block asdkSize; - - ASPerformanceTestContext *ctx = [[ASPerformanceTestContext alloc] init]; - [ctx addCaseWithName:kTestCaseUIKit block:^(NSUInteger i, dispatch_block_t _Nonnull startMeasuring, dispatch_block_t _Nonnull stopMeasuring) { - NSAttributedString *text = data[i % data.count]; - startMeasuring(); - uiKitSize = [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine context:nil].size; - stopMeasuring(); - }]; - uiKitSize.width = ASCeilPixelValue(uiKitSize.width); - uiKitSize.height = ASCeilPixelValue(uiKitSize.height); - ctx.results[kTestCaseUIKit].userInfo[@"size"] = NSStringFromCGSize(uiKitSize); - - [ctx addCaseWithName:kTestCaseASDK block:^(NSUInteger i, dispatch_block_t _Nonnull startMeasuring, dispatch_block_t _Nonnull stopMeasuring) { - ASTextNode *node = [[ASTextNode alloc] init]; - NSAttributedString *text = data[i % data.count]; - startMeasuring(); - node.attributedText = text; - asdkSize = [node layoutThatFits:ASSizeRangeMake(CGSizeZero, maxSize)].size; - stopMeasuring(); - }]; - ctx.results[kTestCaseASDK].userInfo[@"size"] = NSStringFromCGSize(asdkSize); - - ASXCTAssertEqualSizes(uiKitSize, asdkSize); - ASXCTAssertRelativePerformanceInRange(ctx, kTestCaseASDK, 0.2, 0.5); -} - -- (void)testPerformance_TwoParagraphLatinNoTruncation -{ - NSAttributedString *text = [ASTextNodePerformanceTests twoParagraphLatinText]; - - CGSize maxSize = CGSizeMake(355, CGFLOAT_MAX); - CGSize __block uiKitSize, __block asdkSize; - - ASPerformanceTestContext *ctx = [[ASPerformanceTestContext alloc] init]; - [ctx addCaseWithName:kTestCaseUIKit block:^(NSUInteger i, dispatch_block_t _Nonnull startMeasuring, dispatch_block_t _Nonnull stopMeasuring) { - startMeasuring(); - uiKitSize = [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine context:nil].size; - stopMeasuring(); - }]; - uiKitSize.width = ASCeilPixelValue(uiKitSize.width); - uiKitSize.height = ASCeilPixelValue(uiKitSize.height); - ctx.results[kTestCaseUIKit].userInfo[@"size"] = NSStringFromCGSize(uiKitSize); - - [ctx addCaseWithName:kTestCaseASDK block:^(NSUInteger i, dispatch_block_t _Nonnull startMeasuring, dispatch_block_t _Nonnull stopMeasuring) { - ASTextNode *node = [[ASTextNode alloc] init]; - startMeasuring(); - node.attributedText = text; - asdkSize = [node layoutThatFits:ASSizeRangeMake(CGSizeZero, maxSize)].size; - stopMeasuring(); - }]; - ctx.results[kTestCaseASDK].userInfo[@"size"] = NSStringFromCGSize(asdkSize); - - ASXCTAssertEqualSizes(uiKitSize, asdkSize); - ASXCTAssertRelativePerformanceInRange(ctx, kTestCaseASDK, 0.5, 0.9); -} - -- (void)testPerformance_OneParagraphLatinWithTruncation -{ - NSAttributedString *text = [ASTextNodePerformanceTests oneParagraphLatinText]; - - CGSize maxSize = CGSizeMake(355, 150); - CGSize __block uiKitSize, __block asdkSize; - - ASPerformanceTestContext *testCtx = [[ASPerformanceTestContext alloc] init]; - [testCtx addCaseWithName:kTestCaseUIKit block:^(NSUInteger i, dispatch_block_t _Nonnull startMeasuring, dispatch_block_t _Nonnull stopMeasuring) { - startMeasuring(); - uiKitSize = [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine context:nil].size; - stopMeasuring(); - }]; - uiKitSize.width = ASCeilPixelValue(uiKitSize.width); - uiKitSize.height = ASCeilPixelValue(uiKitSize.height); - testCtx.results[kTestCaseUIKit].userInfo[@"size"] = NSStringFromCGSize(uiKitSize); - - [testCtx addCaseWithName:kTestCaseASDK block:^(NSUInteger i, dispatch_block_t _Nonnull startMeasuring, dispatch_block_t _Nonnull stopMeasuring) { - ASTextNode *node = [[ASTextNode alloc] init]; - startMeasuring(); - node.attributedText = text; - asdkSize = [node layoutThatFits:ASSizeRangeMake(CGSizeZero, maxSize)].size; - stopMeasuring(); - }]; - testCtx.results[kTestCaseASDK].userInfo[@"size"] = NSStringFromCGSize(asdkSize); - - XCTAssert(CGSizeEqualToSizeWithIn(uiKitSize, asdkSize, 5)); - ASXCTAssertRelativePerformanceInRange(testCtx, kTestCaseASDK, 0.1, 0.3); -} - -- (void)testThatNotUsingAStringDrawingContextHasSimilarPerformanceToHavingOne -{ - ASPerformanceTestContext *ctx = [[ASPerformanceTestContext alloc] init]; - - NSAttributedString *text = [ASTextNodePerformanceTests oneParagraphLatinText]; - CGSize maxSize = CGSizeMake(355, 150); - NSStringDrawingOptions options = NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine; - __block CGSize size; - // nil context - [ctx addCaseWithName:kTestCaseUIKitWithNoContext block:^(NSUInteger i, dispatch_block_t _Nonnull startMeasuring, dispatch_block_t _Nonnull stopMeasuring) { - startMeasuring(); - size = [text boundingRectWithSize:maxSize options:options context:nil].size; - stopMeasuring(); - }]; - ctx.results[kTestCaseUIKitWithNoContext].userInfo[@"size"] = NSStringFromCGSize(size); - - // Fresh context - [ctx addCaseWithName:kTestCaseUIKitWithFreshContext block:^(NSUInteger i, dispatch_block_t _Nonnull startMeasuring, dispatch_block_t _Nonnull stopMeasuring) { - NSStringDrawingContext *stringDrawingCtx = [[NSStringDrawingContext alloc] init]; - startMeasuring(); - size = [text boundingRectWithSize:maxSize options:options context:stringDrawingCtx].size; - stopMeasuring(); - }]; - ctx.results[kTestCaseUIKitWithFreshContext].userInfo[@"size"] = NSStringFromCGSize(size); - - // Reused context - NSStringDrawingContext *stringDrawingCtx = [[NSStringDrawingContext alloc] init]; - [ctx addCaseWithName:kTestCaseUIKitWithReusedContext block:^(NSUInteger i, dispatch_block_t _Nonnull startMeasuring, dispatch_block_t _Nonnull stopMeasuring) { - startMeasuring(); - size = [text boundingRectWithSize:maxSize options:options context:stringDrawingCtx].size; - stopMeasuring(); - }]; - ctx.results[kTestCaseUIKitWithReusedContext].userInfo[@"size"] = NSStringFromCGSize(size); - - XCTAssertTrue([ctx areAllUserInfosEqual]); - ASXCTAssertRelativePerformanceInRange(ctx, kTestCaseUIKitWithReusedContext, 0.8, 1.2); - ASXCTAssertRelativePerformanceInRange(ctx, kTestCaseUIKitWithFreshContext, 0.8, 1.2); -} - -- (void)testThatUIKitPrivateLayoutCachingIsAwesome -{ - NSAttributedString *text = [ASTextNodePerformanceTests oneParagraphLatinText]; - ASPerformanceTestContext *ctx = [[ASPerformanceTestContext alloc] init]; - CGSize maxSize = CGSizeMake(355, 150); - __block CGSize uncachedSize, cachedSize; - NSStringDrawingOptions options = NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine; - - // No caching, reused ctx - NSStringDrawingContext *defaultCtx = [[NSStringDrawingContext alloc] init]; - XCTAssertFalse([[defaultCtx valueForKey:@"cachesLayout"] boolValue]); - [ctx addCaseWithName:kTestCaseUIKit block:^(NSUInteger i, dispatch_block_t _Nonnull startMeasuring, dispatch_block_t _Nonnull stopMeasuring) { - startMeasuring(); - uncachedSize = [text boundingRectWithSize:maxSize options:options context:defaultCtx].size; - stopMeasuring(); - }]; - XCTAssertFalse([[defaultCtx valueForKey:@"cachesLayout"] boolValue]); - ctx.results[kTestCaseUIKit].userInfo[@"size"] = NSStringFromCGSize(uncachedSize); - - // Caching - NSStringDrawingContext *cachingCtx = [[NSStringDrawingContext alloc] init]; - [cachingCtx setValue:@YES forKey:@"cachesLayout"]; - [ctx addCaseWithName:kTestCaseUIKitPrivateCaching block:^(NSUInteger i, dispatch_block_t _Nonnull startMeasuring, dispatch_block_t _Nonnull stopMeasuring) { - startMeasuring(); - cachedSize = [text boundingRectWithSize:maxSize options:options context:cachingCtx].size; - stopMeasuring(); - }]; - ctx.results[kTestCaseUIKitPrivateCaching].userInfo[@"size"] = NSStringFromCGSize(cachedSize); - - XCTAssertTrue([ctx areAllUserInfosEqual]); - ASXCTAssertRelativePerformanceInRange(ctx, kTestCaseUIKitPrivateCaching, 1.2, FLT_MAX); -} - -#pragma mark Fixture Data - -+ (NSMutableAttributedString *)oneParagraphLatinText -{ - NSDictionary *attributes = @{ - NSFontAttributeName: [UIFont systemFontOfSize:14] - }; - return [[NSMutableAttributedString alloc] initWithString:@"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam gravida, metus non tincidunt tincidunt, arcu quam vulputate magna, nec semper libero mi in lorem. Quisque turpis erat, congue sit amet eros at, gravida gravida lacus. Maecenas maximus lectus in efficitur pulvinar. Nam elementum massa eget luctus condimentum. Curabitur egestas mauris urna. Fusce lacus ante, laoreet vitae leo quis, mattis aliquam est. Donec bibendum augue at elit lacinia lobortis. Cras imperdiet ac justo eget sollicitudin. Pellentesque malesuada nec tellus vitae dictum. Proin vestibulum tempus odio in condimentum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis vel turpis at velit dignissim rutrum. Nunc lorem felis, molestie eget ornare id, luctus at nunc. Maecenas suscipit nisi sit amet nulla cursus, id eleifend odio laoreet." attributes:attributes]; -} - -+ (NSMutableAttributedString *)twoParagraphLatinText -{ - NSDictionary *attributes = @{ - NSFontAttributeName: [UIFont systemFontOfSize:14] - }; - return [[NSMutableAttributedString alloc] initWithString:@"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam gravida, metus non tincidunt tincidunt, arcu quam vulputate magna, nec semper libero mi in lorem. Quisque turpis erat, congue sit amet eros at, gravida gravida lacus. Maecenas maximus lectus in efficitur pulvinar. Nam elementum massa eget luctus condimentum. Curabitur egestas mauris urna. Fusce lacus ante, laoreet vitae leo quis, mattis aliquam est. Donec bibendum augue at elit lacinia lobortis. Cras imperdiet ac justo eget sollicitudin. Pellentesque malesuada nec tellus vitae dictum. Proin vestibulum tempus odio in condimentum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis vel turpis at velit dignissim rutrum. Nunc lorem felis, molestie eget ornare id, luctus at nunc. Maecenas suscipit nisi sit amet nulla cursus, id eleifend odio laoreet.\n\nPellentesque auctor pulvinar velit, venenatis elementum ex tempus eu. Vestibulum iaculis hendrerit tortor quis sagittis. Pellentesque quam sem, varius ac orci nec, tincidunt ultricies mauris. Aliquam est nunc, eleifend et posuere sed, vestibulum eu elit. Pellentesque pharetra bibendum finibus. Aliquam interdum metus ac feugiat congue. Donec suscipit neque quis mauris volutpat, at molestie tortor aliquam. Aenean posuere nulla a ex posuere finibus. Integer tincidunt quam urna, et vulputate enim tempor sit amet. Nullam ut tellus ac arcu fringilla cursus." attributes:attributes]; -} -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASTextNodeSnapshotTests.mm b/submodules/AsyncDisplayKit/Tests/ASTextNodeSnapshotTests.mm deleted file mode 100644 index 1b21ac35f2..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTextNodeSnapshotTests.mm +++ /dev/null @@ -1,147 +0,0 @@ -// -// ASTextNodeSnapshotTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASSnapshotTestCase.h" -#import - -@interface ASTextNodeSnapshotTests : ASSnapshotTestCase - -@end - -@implementation ASTextNodeSnapshotTests - -- (void)setUp -{ - [super setUp]; - - self.recordMode = NO; -} - -- (void)testTextContainerInset -{ - // trivial test case to ensure ASSnapshotTestCase works - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"judar" - attributes:@{NSFontAttributeName : [UIFont italicSystemFontOfSize:24]}]; - textNode.textContainerInset = UIEdgeInsetsMake(0, 2, 0, 2); - ASDisplayNodeSizeToFitSizeRange(textNode, ASSizeRangeMake(CGSizeZero, CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX))); - - ASSnapshotVerifyNode(textNode, nil); -} - -- (void)testTextContainerInsetIsIncludedWithSmallerConstrainedSize -{ - UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectZero]; - backgroundView.layer.as_allowsHighlightDrawing = YES; - - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"judar judar judar judar judar judar" - attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:30] }]; - - textNode.textContainerInset = UIEdgeInsetsMake(10, 10, 10, 10); - - ASLayout *layout = [textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeMake(100, 80))]; - textNode.frame = CGRectMake(50, 50, layout.size.width, layout.size.height); - - [backgroundView addSubview:textNode.view]; - backgroundView.frame = UIEdgeInsetsInsetRect(textNode.bounds, UIEdgeInsetsMake(-50, -50, -50, -50)); - - textNode.highlightRange = NSMakeRange(0, textNode.attributedText.length); - - [ASSnapshotTestCase hackilySynchronouslyRecursivelyRenderNode:textNode]; - ASSnapshotVerifyLayer(backgroundView.layer, nil); -} - -- (void)testTextContainerInsetHighlight -{ - UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectZero]; - backgroundView.layer.as_allowsHighlightDrawing = YES; - - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"yolo" - attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:30] }]; - - textNode.textContainerInset = UIEdgeInsetsMake(5, 10, 10, 5); - ASLayout *layout = [textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY))]; - textNode.frame = CGRectMake(50, 50, layout.size.width, layout.size.height); - - [backgroundView addSubview:textNode.view]; - backgroundView.frame = UIEdgeInsetsInsetRect(textNode.bounds, UIEdgeInsetsMake(-50, -50, -50, -50)); - - textNode.highlightRange = NSMakeRange(0, textNode.attributedText.length); - - [ASSnapshotTestCase hackilySynchronouslyRecursivelyRenderNode:textNode]; - ASSnapshotVerifyView(backgroundView, nil); -} - -// This test is disabled because the fast-path is disabled. -- (void)DISABLED_testThatFastPathTruncationWorks -{ - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"Quality is Important" attributes:@{ NSForegroundColorAttributeName: [UIColor blueColor], NSFontAttributeName: [UIFont italicSystemFontOfSize:24] }]; - [textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeMake(100, 50))]; - ASSnapshotVerifyNode(textNode, nil); -} - -- (void)testThatSlowPathTruncationWorks -{ - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"Quality is Important" attributes:@{ NSForegroundColorAttributeName: [UIColor blueColor], NSFontAttributeName: [UIFont italicSystemFontOfSize:24] }]; - // Set exclusion paths to trigger slow path - textNode.exclusionPaths = @[ [UIBezierPath bezierPath] ]; - ASDisplayNodeSizeToFitSizeRange(textNode, ASSizeRangeMake(CGSizeZero, CGSizeMake(100, 50))); - ASSnapshotVerifyNode(textNode, nil); -} - -- (void)testShadowing -{ - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"Quality is Important"]; - textNode.shadowColor = [UIColor blackColor].CGColor; - textNode.shadowOpacity = 0.3; - textNode.shadowRadius = 3; - textNode.shadowOffset = CGSizeMake(0, 1); - ASDisplayNodeSizeToFitSizeRange(textNode, ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY))); - ASSnapshotVerifyNode(textNode, nil); -} - -/** - * https://github.com/TextureGroup/Texture/issues/822 - */ -- (void)DISABLED_testThatTruncationTokenAttributesPrecedeThoseInheritedFromTextWhenTruncateTailMode -{ - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.style.maxSize = CGSizeMake(20, 80); - NSMutableAttributedString *mas = [[NSMutableAttributedString alloc] initWithString:@"Quality is an important "]; - [mas appendAttributedString:[[NSAttributedString alloc] initWithString:@"thing" attributes:@{ NSBackgroundColorAttributeName : UIColor.yellowColor}]]; - textNode.attributedText = mas; - textNode.truncationMode = NSLineBreakByTruncatingTail; - - textNode.truncationAttributedText = [[NSAttributedString alloc] initWithString:@"\u2026" attributes:@{ NSBackgroundColorAttributeName: UIColor.greenColor }]; - ASDisplayNodeSizeToFitSizeRange(textNode, ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY))); - ASSnapshotVerifyNode(textNode, nil); -} - -- (void)testFontPointSizeScaling -{ - NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; - paragraphStyle.lineHeightMultiple = 0.5; - paragraphStyle.lineSpacing = 2.0; - - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.style.maxSize = CGSizeMake(60, 80); - textNode.pointSizeScaleFactors = @[@0.5]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"Quality is an important thing" - attributes:@{ NSParagraphStyleAttributeName: paragraphStyle }]; - - ASDisplayNodeSizeToFitSizeRange(textNode, ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY))); - ASSnapshotVerifyNode(textNode, nil); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASTextNodeTests.mm b/submodules/AsyncDisplayKit/Tests/ASTextNodeTests.mm deleted file mode 100644 index dd6ae4c942..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTextNodeTests.mm +++ /dev/null @@ -1,324 +0,0 @@ -// -// ASTextNodeTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import -#import - -#import -#import -#import -#import -#import - -#import "ASTestCase.h" - - - -@interface ASTextNodeTestDelegate : NSObject - -@property (nonatomic, copy, readonly) NSString *tappedLinkAttribute; -@property (nonatomic, readonly) id tappedLinkValue; - -@end -@interface ASTextNodeSubclass : ASTextNode -@end -@interface ASTextNodeSecondSubclass : ASTextNodeSubclass -@end - -@implementation ASTextNodeTestDelegate - -- (void)textNode:(ASTextNode *)textNode tappedLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point textRange:(NSRange)textRange -{ - _tappedLinkAttribute = attribute; - _tappedLinkValue = value; -} - -- (BOOL)textNode:(ASTextNode *)textNode shouldHighlightLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point -{ - return YES; -} - -@end - -@interface ASTextNodeTests : XCTestCase - -@property (nonatomic) ASTextNode *textNode; -@property (nonatomic, copy) NSAttributedString *attributedText; -@property (nonatomic) NSMutableArray *textNodeBucket; - -@end - -@implementation ASTextNodeTests - -- (void)setUp -{ - [super setUp]; - _textNode = [[ASTextNode alloc] init]; - _textNodeBucket = [[NSMutableArray alloc] init]; - - UIFontDescriptor *desc = - [UIFontDescriptor fontDescriptorWithName:@"Didot" size:18]; - NSArray *arr = - @[@{UIFontFeatureTypeIdentifierKey:@(kLetterCaseType), - UIFontFeatureSelectorIdentifierKey:@(kSmallCapsSelector)}]; - desc = - [desc fontDescriptorByAddingAttributes: - @{UIFontDescriptorFeatureSettingsAttribute:arr}]; - UIFont *f = [UIFont fontWithDescriptor:desc size:0]; - NSDictionary *d = @{NSFontAttributeName: f}; - NSMutableAttributedString *mas = - [[NSMutableAttributedString alloc] initWithString:@"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." attributes:d]; - NSMutableParagraphStyle *para = [NSMutableParagraphStyle new]; - para.alignment = NSTextAlignmentCenter; - para.lineSpacing = 1.0; - [mas addAttribute:NSParagraphStyleAttributeName value:para - range:NSMakeRange(0, mas.length - 1)]; - - // Vary the linespacing on the last line - NSMutableParagraphStyle *lastLinePara = [NSMutableParagraphStyle new]; - lastLinePara.alignment = para.alignment; - lastLinePara.lineSpacing = 5.0; - [mas addAttribute:NSParagraphStyleAttributeName value:lastLinePara - range:NSMakeRange(mas.length - 1, 1)]; - - _attributedText = mas; - _textNode.attributedText = _attributedText; -} - -#pragma mark - ASTextNode - -- (void)testAllocASTextNode -{ - ASTextNode *node = [[ASTextNode alloc] init]; - XCTAssertTrue([[node class] isSubclassOfClass:[ASTextNode class]], @"ASTextNode alloc should return an instance of ASTextNode, instead returned %@", [node class]); -} - -#pragma mark - ASTextNode - -- (void)testTruncation -{ - XCTAssertTrue([_textNode shouldTruncateForConstrainedSize:ASSizeRangeMake(CGSizeMake(100, 100))], @""); - - _textNode.frame = CGRectMake(0, 0, 100, 100); - XCTAssertTrue(_textNode.isTruncated, @"Text Node should be truncated"); -} - -- (void)testSettingTruncationMessage -{ - NSAttributedString *truncation = [[NSAttributedString alloc] initWithString:@"..." attributes:nil]; - _textNode.truncationAttributedText = truncation; - XCTAssertTrue([_textNode.truncationAttributedText isEqualToAttributedString:truncation], @"Failed to set truncation message"); -} - -- (void)testSettingAdditionalTruncationMessage -{ - NSAttributedString *additionalTruncationMessage = [[NSAttributedString alloc] initWithString:@"read more" attributes:nil]; - _textNode.additionalTruncationMessage = additionalTruncationMessage; - XCTAssertTrue([_textNode.additionalTruncationMessage isEqualToAttributedString:additionalTruncationMessage], @"Failed to set additionalTruncationMessage message"); -} - -- (void)testCalculatedSizeIsGreaterThanOrEqualToConstrainedSize -{ - for (NSInteger i = 10; i < 500; i += 50) { - CGSize constrainedSize = CGSizeMake(i, i); - CGSize calculatedSize = [_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - XCTAssertTrue(calculatedSize.width <= constrainedSize.width, @"Calculated width (%f) should be less than or equal to constrained width (%f)", calculatedSize.width, constrainedSize.width); - XCTAssertTrue(calculatedSize.height <= constrainedSize.height, @"Calculated height (%f) should be less than or equal to constrained height (%f)", calculatedSize.height, constrainedSize.height); - } -} - -- (void)testRecalculationOfSizeIsSameAsOriginallyCalculatedSize -{ - for (NSInteger i = 10; i < 500; i += 50) { - CGSize constrainedSize = CGSizeMake(i, i); - CGSize calculatedSize = [_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - CGSize recalculatedSize = [_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - - XCTAssertTrue(CGSizeEqualToSizeWithIn(calculatedSize, recalculatedSize, 4.0), @"Recalculated size %@ should be same as original size %@", NSStringFromCGSize(recalculatedSize), NSStringFromCGSize(calculatedSize)); - } -} - -- (void)testRecalculationOfSizeIsSameAsOriginallyCalculatedFloatingPointSize -{ - for (CGFloat i = 10; i < 500; i *= 1.3) { - CGSize constrainedSize = CGSizeMake(i, i); - CGSize calculatedSize = [_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - CGSize recalculatedSize = [_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - - XCTAssertTrue(CGSizeEqualToSizeWithIn(calculatedSize, recalculatedSize, 11.0), @"Recalculated size %@ should be same as original size %@", NSStringFromCGSize(recalculatedSize), NSStringFromCGSize(calculatedSize)); - } -} - -- (void)testMeasureWithZeroSizeAndPlaceholder -{ - _textNode.placeholderEnabled = YES; - - XCTAssertNoThrow([_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeZero)], @"Measure with zero size and placeholder enabled should not throw an exception"); - XCTAssertNoThrow([_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeMake(0, 100))], @"Measure with zero width and placeholder enabled should not throw an exception"); - XCTAssertNoThrow([_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeMake(100, 0))], @"Measure with zero height and placeholder enabled should not throw an exception"); -} - -- (void)testAccessibility -{ - _textNode.attributedText = _attributedText; - XCTAssertTrue(_textNode.isAccessibilityElement, @"Should be an accessibility element"); - XCTAssertTrue(_textNode.accessibilityTraits == UIAccessibilityTraitStaticText, @"Should have static text accessibility trait, instead has %llu", _textNode.accessibilityTraits); - - XCTAssertTrue([_textNode.accessibilityLabel isEqualToString:_attributedText.string], @"Accessibility label is incorrectly set to \n%@\n when it should be \n%@\n", _textNode.accessibilityLabel, _attributedText.string); -} - -- (void)testLinkAttribute -{ - NSString *linkAttributeName = @"MockLinkAttributeName"; - NSString *linkAttributeValue = @"MockLinkAttributeValue"; - NSString *linkString = @"Link"; - NSRange linkRange = NSMakeRange(0, linkString.length); - NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:linkString attributes:@{ linkAttributeName : linkAttributeValue}]; - _textNode.attributedText = attributedString; - _textNode.linkAttributeNames = @[linkAttributeName]; - - ASTextNodeTestDelegate *delegate = [ASTextNodeTestDelegate new]; - _textNode.delegate = delegate; - - ASLayout *layout = [_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeMake(100, 100))]; - _textNode.frame = CGRectMake(0, 0, layout.size.width, layout.size.height); - - NSRange returnedLinkRange; - NSString *returnedAttributeName; - NSString *returnedLinkAttributeValue = [_textNode linkAttributeValueAtPoint:CGPointMake(3, 3) attributeName:&returnedAttributeName range:&returnedLinkRange]; - XCTAssertTrue([linkAttributeName isEqualToString:returnedAttributeName], @"Expecting a link attribute name of %@, returned %@", linkAttributeName, returnedAttributeName); - XCTAssertTrue([linkAttributeValue isEqualToString:returnedLinkAttributeValue], @"Expecting a link attribute value of %@, returned %@", linkAttributeValue, returnedLinkAttributeValue); - XCTAssertTrue(NSEqualRanges(linkRange, returnedLinkRange), @"Expected a range of %@, got a link range of %@", NSStringFromRange(linkRange), NSStringFromRange(returnedLinkRange)); -} - -- (void)testTapNotOnALinkAttribute -{ - NSString *linkAttributeName = @"MockLinkAttributeName"; - NSString *linkAttributeValue = @"MockLinkAttributeValue"; - NSString *linkString = @"Link notalink"; - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:linkString]; - [attributedString addAttribute:linkAttributeName value:linkAttributeValue range:NSMakeRange(0, 4)]; - _textNode.attributedText = attributedString; - _textNode.linkAttributeNames = @[linkAttributeName]; - - ASTextNodeTestDelegate *delegate = [ASTextNodeTestDelegate new]; - _textNode.delegate = delegate; - - CGSize calculatedSize = [_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeMake(100, 100))].size; - NSRange returnedLinkRange = NSMakeRange(NSNotFound, 0); - NSRange expectedRange = NSMakeRange(NSNotFound, 0); - NSString *returnedAttributeName; - CGPoint pointNearEndOfString = CGPointMake(calculatedSize.width - 3, calculatedSize.height / 2); - NSString *returnedLinkAttributeValue = [_textNode linkAttributeValueAtPoint:pointNearEndOfString attributeName:&returnedAttributeName range:&returnedLinkRange]; - XCTAssertFalse(returnedAttributeName, @"Expecting no link attribute name, returned %@", returnedAttributeName); - XCTAssertFalse(returnedLinkAttributeValue, @"Expecting no link attribute value, returned %@", returnedLinkAttributeValue); - XCTAssertTrue(NSEqualRanges(expectedRange, returnedLinkRange), @"Expected a range of %@, got a link range of %@", NSStringFromRange(expectedRange), NSStringFromRange(returnedLinkRange)); - - XCTAssertFalse(delegate.tappedLinkAttribute, @"Expected the delegate to be told that %@ was tapped, instead it thinks the tapped attribute is %@", linkAttributeName, delegate.tappedLinkAttribute); - XCTAssertFalse(delegate.tappedLinkValue, @"Expected the delegate to be told that the value %@ was tapped, instead it thinks the tapped attribute value is %@", linkAttributeValue, delegate.tappedLinkValue); -} - -#pragma mark exclusion Paths - -- (void)testSettingExclusionPaths -{ - NSArray *exclusionPaths = @[[UIBezierPath bezierPathWithRect:CGRectMake(10, 20, 30, 40)]]; - _textNode.exclusionPaths = exclusionPaths; - XCTAssertTrue([_textNode.exclusionPaths isEqualToArray:exclusionPaths], @"Failed to set exclusion paths"); -} - -- (void)testAddingExclusionPathsShouldInvalidateAndIncreaseTheSize -{ - CGSize constrainedSize = CGSizeMake(100, CGFLOAT_MAX); - CGSize sizeWithoutExclusionPaths = [_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - _textNode.exclusionPaths = @[[UIBezierPath bezierPathWithRect:CGRectMake(50, 20, 30, 40)]]; - CGSize sizeWithExclusionPaths = [_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - - XCTAssertGreaterThan(sizeWithExclusionPaths.height, sizeWithoutExclusionPaths.height, @"Setting exclusions paths should invalidate the calculated size and return a greater size"); -} - -#if AS_ENABLE_TEXTNODE -- (void)testThatTheExperimentWorksCorrectly -{ - ASConfiguration *config = [ASConfiguration new]; - config.experimentalFeatures = ASExperimentalTextNode; - [ASConfigurationManager test_resetWithConfiguration:config]; - - ASTextNode *plainTextNode = [[ASTextNode alloc] init]; - XCTAssertEqualObjects(plainTextNode.class, [ASTextNode2 class]); - - ASTextNodeSecondSubclass *sc2 = [[ASTextNodeSecondSubclass alloc] init]; - XCTAssertEqualObjects([ASTextNodeSubclass superclass], [ASTextNode2 class]); - XCTAssertEqualObjects(sc2.superclass, [ASTextNodeSubclass class]); -} - -- (void)testTextNodeSwitchWorksInMultiThreadEnvironment -{ - ASConfiguration *config = [ASConfiguration new]; - config.experimentalFeatures = ASExperimentalTextNode; - [ASConfigurationManager test_resetWithConfiguration:config]; - XCTestExpectation *exp = [self expectationWithDescription:@"wait for full bucket"]; - - dispatch_queue_t queue = dispatch_queue_create("com.texture.AsyncDisplayKit.ASTextNodeTestsQueue", DISPATCH_QUEUE_CONCURRENT); - dispatch_group_t g = dispatch_group_create(); - for (int i = 0; i < 20; i++) { - dispatch_group_async(g, queue, ^{ - ASTextNode *textNode = [[ASTextNodeSecondSubclass alloc] init]; - XCTAssert([textNode isKindOfClass:[ASTextNode2 class]]); - @synchronized(self.textNodeBucket) { - [self.textNodeBucket addObject:textNode]; - if (self.textNodeBucket.count == 20) { - [exp fulfill]; - } - } - }); - } - [self waitForExpectations:@[exp] timeout:3]; - exp = nil; - [self.textNodeBucket removeAllObjects]; -} - -- (void)testTextNodeSwitchWorksInMultiThreadEnvironment2 -{ - ASConfiguration *config = [ASConfiguration new]; - config.experimentalFeatures = ASExperimentalTextNode; - [ASConfigurationManager test_resetWithConfiguration:config]; - XCTestExpectation *exp = [self expectationWithDescription:@"wait for full bucket"]; - - NSLock *lock = [[NSLock alloc] init]; - NSMutableArray *textNodeBucket = [[NSMutableArray alloc] init]; - - dispatch_queue_t queue = dispatch_queue_create("com.texture.AsyncDisplayKit.ASTextNodeTestsQueue", DISPATCH_QUEUE_CONCURRENT); - dispatch_group_t g = dispatch_group_create(); - for (int i = 0; i < 20; i++) { - dispatch_group_async(g, queue, ^{ - ASTextNode *textNode = [[ASTextNodeSecondSubclass alloc] init]; - XCTAssert([textNode isKindOfClass:[ASTextNode2 class]]); - [lock lock]; - [textNodeBucket addObject:textNode]; - if (textNodeBucket.count == 20) { - [exp fulfill]; - } - [lock unlock]; - }); - } - [self waitForExpectations:@[exp] timeout:3]; - exp = nil; - [textNodeBucket removeAllObjects]; -} -#endif - -@end - -@implementation ASTextNodeSubclass -@end -@implementation ASTextNodeSecondSubclass -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASTextNodeWordKernerTests.mm b/submodules/AsyncDisplayKit/Tests/ASTextNodeWordKernerTests.mm deleted file mode 100644 index 7b9773574b..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASTextNodeWordKernerTests.mm +++ /dev/null @@ -1,149 +0,0 @@ -// -// ASTextNodeWordKernerTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import -#import -#import - -#pragma mark - Tests - -@interface ASTextNodeWordKernerTests : XCTestCase - -@property (nonatomic) ASTextNodeWordKerner *layoutManagerDelegate; -@property (nonatomic) ASTextKitComponents *components; -@property (nonatomic, copy) NSAttributedString *attributedString; - -@end - -@implementation ASTextNodeWordKernerTests - -- (void)setUp -{ - [super setUp]; - _layoutManagerDelegate = [[ASTextNodeWordKerner alloc] init]; - _components.layoutManager.delegate = _layoutManagerDelegate; -} - -- (void)setupTextKitComponentsWithoutWordKerning -{ - CGSize size = CGSizeMake(200, 200); - NSDictionary *attributes = nil; - NSString *seedString = @"Hello world"; - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:seedString attributes:attributes]; - _components = [ASTextKitComponents componentsWithAttributedSeedString:attributedString textContainerSize:size]; -} - -- (void)setupTextKitComponentsWithWordKerning -{ - CGSize size = CGSizeMake(200, 200); - NSDictionary *attributes = @{ASTextNodeWordKerningAttributeName: @".5"}; - NSString *seedString = @"Hello world"; - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:seedString attributes:attributes]; - _components = [ASTextKitComponents componentsWithAttributedSeedString:attributedString textContainerSize:size]; -} - -- (void)setupTextKitComponentsWithWordKerningDifferentFontSizes -{ - CGSize size = CGSizeMake(200, 200); - NSDictionary *attributes = @{ASTextNodeWordKerningAttributeName: @".5"}; - NSString *seedString = @" "; - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:seedString attributes:attributes]; - UIFont *bigFont = [UIFont systemFontOfSize:36]; - UIFont *normalFont = [UIFont systemFontOfSize:12]; - [attributedString addAttribute:NSFontAttributeName value:bigFont range:NSMakeRange(0, 1)]; - [attributedString addAttribute:NSFontAttributeName value:normalFont range:NSMakeRange(1, 1)]; - _components = [ASTextKitComponents componentsWithAttributedSeedString:attributedString textContainerSize:size]; -} - -- (void)testSomeGlyphsToChangeIfWordKerning -{ - [self setupTextKitComponentsWithWordKerning]; - - NSInteger glyphsToChange = [self _layoutManagerShouldGenerateGlyphs]; - XCTAssertTrue(glyphsToChange > 0, @"Should have changed the properties on some glyphs"); -} - -- (void)testSpaceBoundingBoxForNoWordKerning -{ - CGSize size = CGSizeMake(200, 200); - UIFont *font = [UIFont systemFontOfSize:12.0]; - NSDictionary *attributes = @{NSFontAttributeName : font}; - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@" " attributes:attributes]; - _components = [ASTextKitComponents componentsWithAttributedSeedString:attributedString textContainerSize:size]; - CGFloat expectedWidth = [@" " sizeWithAttributes:@{ NSFontAttributeName : font }].width; - - CGRect boundingBox = [_layoutManagerDelegate layoutManager:_components.layoutManager boundingBoxForControlGlyphAtIndex:0 forTextContainer:_components.textContainer proposedLineFragment:CGRectZero glyphPosition:CGPointZero characterIndex:0]; - - XCTAssertEqualWithAccuracy(boundingBox.size.width, expectedWidth, FLT_EPSILON, @"Word kerning shouldn't alter the default width of %f. Encountered space width was %f", expectedWidth, boundingBox.size.width); -} - -- (void)testSpaceBoundingBoxForWordKerning -{ - CGSize size = CGSizeMake(200, 200); - UIFont *font = [UIFont systemFontOfSize:12]; - - CGFloat kernValue = 0.5; - NSDictionary *attributes = @{ASTextNodeWordKerningAttributeName: @(kernValue), - NSFontAttributeName : font}; - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@" " attributes:attributes]; - _components = [ASTextKitComponents componentsWithAttributedSeedString:attributedString textContainerSize:size]; - CGFloat expectedWidth = [@" " sizeWithAttributes:@{ NSFontAttributeName : font }].width + kernValue; - - CGRect boundingBox = [_layoutManagerDelegate layoutManager:_components.layoutManager boundingBoxForControlGlyphAtIndex:0 forTextContainer:_components.textContainer proposedLineFragment:CGRectZero glyphPosition:CGPointZero characterIndex:0]; - XCTAssertEqualWithAccuracy(boundingBox.size.width, expectedWidth, FLT_EPSILON, @"Word kerning shouldn't alter the default width of %f. Encountered space width was %f", expectedWidth, boundingBox.size.width); -} - -- (NSInteger)_layoutManagerShouldGenerateGlyphs -{ - NSRange stringRange = NSMakeRange(0, _components.textStorage.length); - NSRange glyphRange = [_components.layoutManager glyphRangeForCharacterRange:stringRange actualCharacterRange:NULL]; - NSInteger glyphCount = glyphRange.length; - NSUInteger *characterIndexes = (NSUInteger *)malloc(sizeof(NSUInteger) * glyphCount); - for (NSUInteger i=0; i < stringRange.length; i++) { - characterIndexes[i] = i; - } - NSGlyphProperty *glyphProperties = (NSGlyphProperty *)malloc(sizeof(NSGlyphProperty) * glyphCount); - CGGlyph *glyphs = (CGGlyph *)malloc(sizeof(CGGlyph) * glyphCount); - NSInteger glyphsToChange = [_layoutManagerDelegate layoutManager:_components.layoutManager shouldGenerateGlyphs:glyphs properties:glyphProperties characterIndexes:characterIndexes font:[UIFont systemFontOfSize:12.0] forGlyphRange:stringRange]; - free(characterIndexes); - free(glyphProperties); - free(glyphs); - return glyphsToChange; -} - -- (void)testPerCharacterWordKerning -{ - [self setupTextKitComponentsWithWordKerningDifferentFontSizes]; - CGPoint glyphPosition = CGPointZero; - NSUInteger bigSpaceIndex = 0; - NSUInteger normalSpaceIndex = 1; - CGRect bigBoundingBox = [_layoutManagerDelegate layoutManager:_components.layoutManager boundingBoxForControlGlyphAtIndex:bigSpaceIndex forTextContainer:_components.textContainer proposedLineFragment:CGRectZero glyphPosition:glyphPosition characterIndex:bigSpaceIndex]; - CGRect normalBoundingBox = [_layoutManagerDelegate layoutManager:_components.layoutManager boundingBoxForControlGlyphAtIndex:normalSpaceIndex forTextContainer:_components.textContainer proposedLineFragment:CGRectZero glyphPosition:glyphPosition characterIndex:normalSpaceIndex]; - XCTAssertTrue(bigBoundingBox.size.width > normalBoundingBox.size.width, @"Unbolded and bolded spaces should have different kerning"); -} - -- (void)testWordKerningDoesNotAlterGlyphOrigin -{ - CGSize size = CGSizeMake(200, 200); - NSDictionary *attributes = @{ASTextNodeWordKerningAttributeName: @".5"}; - NSString *seedString = @" "; - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:seedString attributes:attributes]; - UIFont *normalFont = [UIFont systemFontOfSize:12]; - [attributedString addAttribute:NSFontAttributeName value:normalFont range:NSMakeRange(0, 1)]; - _components = [ASTextKitComponents componentsWithAttributedSeedString:attributedString textContainerSize:size]; - - CGPoint glyphPosition = CGPointMake(42, 54); - - CGRect boundingBox = [_layoutManagerDelegate layoutManager:_components.layoutManager boundingBoxForControlGlyphAtIndex:0 forTextContainer:_components.textContainer proposedLineFragment:CGRectZero glyphPosition:glyphPosition characterIndex:0]; - XCTAssertTrue(CGPointEqualToPoint(glyphPosition, boundingBox.origin), @"Word kerning shouldn't alter the origin point of a glyph"); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASThrashUtility.h b/submodules/AsyncDisplayKit/Tests/ASThrashUtility.h deleted file mode 100644 index 09e7847750..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASThrashUtility.h +++ /dev/null @@ -1,111 +0,0 @@ -// -// Tests/ASThrashUtility.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -#define kInitialSectionCount 10 -#define kInitialItemCount 10 -#define kMinimumItemCount 5 -#define kMinimumSectionCount 3 -#define kFickleness 0.1 -#define kThrashingIterationCount 10 - -// Set to 1 to use UITableView and see if the issue still exists. -#define USE_UIKIT_REFERENCE 0 - -#if USE_UIKIT_REFERENCE -#define TableView UITableView -#define CollectionView UICollectionView -#define kCellReuseID @"ASThrashTestCellReuseID" -#else -#define TableView ASTableView -#define CollectionView ASCollectionNode -#endif - -static NSInteger ASThrashUpdateCurrentSerializationVersion = 1; - -@class ASThrashTestSection; -static atomic_uint ASThrashTestItemNextID; -@interface ASThrashTestItem: NSObject -@property (nonatomic, readonly) NSInteger itemID; - -+ (NSMutableArray *)itemsWithCount:(NSInteger)count; - -- (CGFloat)rowHeight; -@end - - -@interface ASThrashTestSection: NSObject -@property (nonatomic, readonly) NSMutableArray *items; -@property (nonatomic, readonly) NSInteger sectionID; - -+ (NSMutableArray *)sectionsWithCount:(NSInteger)count; - -- (instancetype)initWithCount:(NSInteger)count; -- (CGFloat)headerHeight; -@end - -@interface ASThrashDataSource: NSObject -#if USE_UIKIT_REFERENCE - -#else - -#endif - -@property (nonatomic, readonly) UIWindow *window; -@property (nonatomic, readonly) TableView *tableView; -@property (nonatomic, readonly) CollectionView *collectionView; -@property (nonatomic) NSArray *data; -// Only access on main -@property (nonatomic) ASWeakSet *allNodes; - -- (instancetype)initTableViewDataSourceWithData:(NSArray *)data; -- (instancetype)initCollectionViewDataSourceWithData:(NSArray * _Nullable)data; -- (NSPredicate *)predicateForDeallocatedHierarchy; -@end - -@interface NSIndexSet (ASThrashHelpers) -- (NSArray *)indexPathsInSection:(NSInteger)section; -/// `insertMode` means that for each index selected, the max goes up by one. -+ (NSMutableIndexSet *)randomIndexesLessThan:(NSInteger)max probability:(float)probability insertMode:(BOOL)insertMode; -@end - -#if !USE_UIKIT_REFERENCE -@interface ASThrashTestNode: ASCellNode -@property (nonatomic) ASThrashTestItem *item; -@end -#endif - -@interface ASThrashUpdate : NSObject -@property (nonatomic, readonly) NSArray *oldData; -@property (nonatomic, readonly) NSMutableArray *data; -@property (nonatomic, readonly) NSMutableIndexSet *deletedSectionIndexes; -@property (nonatomic, readonly) NSMutableIndexSet *replacedSectionIndexes; -/// The sections used to replace the replaced sections. -@property (nonatomic, readonly) NSMutableArray *replacingSections; -@property (nonatomic, readonly) NSMutableIndexSet *insertedSectionIndexes; -@property (nonatomic, readonly) NSMutableArray *insertedSections; -@property (nonatomic, readonly) NSMutableArray *deletedItemIndexes; -@property (nonatomic, readonly) NSMutableArray *replacedItemIndexes; -/// The items used to replace the replaced items. -@property (nonatomic, readonly) NSMutableArray *> *replacingItems; -@property (nonatomic, readonly) NSMutableArray *insertedItemIndexes; -@property (nonatomic, readonly) NSMutableArray *> *insertedItems; - -- (instancetype)initWithData:(NSArray *)data; - -+ (ASThrashUpdate *)thrashUpdateWithBase64String:(NSString *)base64; -- (NSString *)base64Representation; -- (NSString *)logFriendlyBase64Representation; -@end - -NS_ASSUME_NONNULL_END diff --git a/submodules/AsyncDisplayKit/Tests/ASThrashUtility.m b/submodules/AsyncDisplayKit/Tests/ASThrashUtility.m deleted file mode 100644 index c555d3f776..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASThrashUtility.m +++ /dev/null @@ -1,467 +0,0 @@ -// -// ASTableViewThrashTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASThrashUtility.h" -#import -#import - -static NSString *ASThrashArrayDescription(NSArray *array) -{ - NSMutableString *str = [NSMutableString stringWithString:@"(\n"]; - NSInteger i = 0; - for (id obj in array) { - [str appendFormat:@"\t[%ld]: \"%@\",\n", (long)i, obj]; - i += 1; - } - [str appendString:@")"]; - return str; -} - -@implementation ASThrashTestItem - -+ (BOOL)supportsSecureCoding -{ - return YES; -} - -- (instancetype)init -{ - self = [super init]; - if (self != nil) { - _itemID = atomic_fetch_add(&ASThrashTestItemNextID, 1); - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder -{ - self = [super init]; - if (self != nil) { - _itemID = [aDecoder decodeIntegerForKey:@"itemID"]; - NSAssert(_itemID > 0, @"Failed to decode %@", self); - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder -{ - [aCoder encodeInteger:_itemID forKey:@"itemID"]; -} - -+ (NSMutableArray *)itemsWithCount:(NSInteger)count -{ - NSMutableArray *result = [NSMutableArray arrayWithCapacity:count]; - for (NSInteger i = 0; i < count; i += 1) { - [result addObject:[[ASThrashTestItem alloc] init]]; - } - return result; -} - -- (CGFloat)rowHeight -{ - return (self.itemID % 400) ?: 44; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"", (unsigned long)_itemID]; -} - -@end - -static atomic_uint ASThrashTestSectionNextID = 1; -@implementation ASThrashTestSection - -/// Create an array of sections with the given count -+ (NSMutableArray *)sectionsWithCount:(NSInteger)count -{ - NSMutableArray *result = [NSMutableArray arrayWithCapacity:count]; - for (NSInteger i = 0; i < count; i += 1) { - [result addObject:[[ASThrashTestSection alloc] initWithCount:kInitialItemCount]]; - } - return result; -} - -- (instancetype)initWithCount:(NSInteger)count -{ - self = [super init]; - if (self != nil) { - _sectionID = atomic_fetch_add(&ASThrashTestSectionNextID, 1); - _items = [ASThrashTestItem itemsWithCount:count]; - } - return self; -} - -- (instancetype)init -{ - return [self initWithCount:0]; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder -{ - self = [super init]; - if (self != nil) { - _items = [aDecoder decodeObjectOfClass:[NSArray class] forKey:@"items"]; - _sectionID = [aDecoder decodeIntegerForKey:@"sectionID"]; - NSAssert(_sectionID > 0, @"Failed to decode %@", self); - } - return self; -} - -+ (BOOL)supportsSecureCoding -{ - return YES; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder -{ - [aCoder encodeObject:_items forKey:@"items"]; - [aCoder encodeInteger:_sectionID forKey:@"sectionID"]; -} - -- (CGFloat)headerHeight -{ - return self.sectionID % 400 ?: 44; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"
", (unsigned long)_sectionID, (unsigned long)self.items.count, ASThrashArrayDescription(self.items)]; -} - -- (id)copyWithZone:(NSZone *)zone -{ - ASThrashTestSection *copy = [[ASThrashTestSection alloc] init]; - copy->_sectionID = _sectionID; - copy->_items = [_items mutableCopy]; - return copy; -} - -- (BOOL)isEqual:(id)object -{ - if ([object isKindOfClass:[ASThrashTestSection class]]) { - return [(ASThrashTestSection *)object sectionID] == _sectionID; - } else { - return NO; - } -} - -@end - -@implementation NSIndexSet (ASThrashHelpers) - -- (NSArray *)indexPathsInSection:(NSInteger)section -{ - NSMutableArray *result = [NSMutableArray arrayWithCapacity:self.count]; - [self enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) { - [result addObject:[NSIndexPath indexPathForItem:idx inSection:section]]; - }]; - return result; -} - -/// `insertMode` means that for each index selected, the max goes up by one. -+ (NSMutableIndexSet *)randomIndexesLessThan:(NSInteger)max probability:(float)probability insertMode:(BOOL)insertMode -{ - NSMutableIndexSet *indexes = [[NSMutableIndexSet alloc] init]; - u_int32_t cutoff = probability * 100; - for (NSInteger i = 0; i < max; i++) { - if (arc4random_uniform(100) < cutoff) { - [indexes addIndex:i]; - if (insertMode) { - max += 1; - } - } - } - return indexes; -} - -@end - -@implementation ASThrashDataSource - -- (instancetype)initTableViewDataSourceWithData:(NSArray *)data -{ - self = [super init]; - if (self != nil) { - _data = [[NSArray alloc] initWithArray:data copyItems:YES]; - _window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - _tableView = [[TableView alloc] initWithFrame:_window.bounds style:UITableViewStylePlain]; - _allNodes = [[ASWeakSet alloc] init]; - [_window addSubview:_tableView]; -#if USE_UIKIT_REFERENCE - _tableView.dataSource = self; - _tableView.delegate = self; - [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:kCellReuseID]; -#else - _tableView.asyncDelegate = self; - _tableView.asyncDataSource = self; - [_tableView reloadData]; - [_tableView waitUntilAllUpdatesAreCommitted]; -#endif - [_tableView layoutIfNeeded]; - } - return self; -} - -- (instancetype)initCollectionViewDataSourceWithData:(NSArray *)data -{ - self = [super init]; - if (self != nil) { - _data = data != nil ? [[NSArray alloc] initWithArray:data copyItems:YES] : [[NSArray alloc] init]; - _window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - _collectionView = [[CollectionView alloc] initWithCollectionViewLayout:[[UICollectionViewFlowLayout alloc] init]]; - _allNodes = [[ASWeakSet alloc] init]; - [_window addSubview:_tableView]; - _collectionView.delegate = self; - _collectionView.dataSource = self; -#if USE_UIKIT_REFERENCE - [_collectionView registerClass:[UITableViewCell class] forCellReuseIdentifier:kCellReuseID]; -#else - [_collectionView reloadData]; - [_collectionView waitUntilAllUpdatesAreProcessed]; -#endif - [_collectionView layoutIfNeeded]; - } - return self; -} - -- (void)setData:(NSArray *)data -{ - _data = data; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.data[section].items.count; -} - - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return self.data.count; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section -{ - return self.data[section].headerHeight; -} - -- (NSInteger)collectionNode:(ASCollectionNode *)collectionNode numberOfItemsInSection:(NSInteger)section -{ - return self.data[section].items.count; -} - - -- (NSInteger)numberOfSectionsInCollectionNode:(ASCollectionNode *)collectionNode -{ - return self.data.count; -} - -/// Object passed into predicate is ignored. -- (NSPredicate *)predicateForDeallocatedHierarchy -{ - ASWeakSet *allNodes = self.allNodes; - __weak UIWindow *window = _window; - __weak ASTableView *view = _tableView; - return [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary * _Nullable bindings) { - return window == nil && view == nil && allNodes.isEmpty; - }]; -} - -#if USE_UIKIT_REFERENCE - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return [tableView dequeueReusableCellWithIdentifier:kCellReuseID forIndexPath:indexPath]; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - ASThrashTestItem *item = self.data[indexPath.section].items[indexPath.item]; - return item.rowHeight; -} - -#else - -- (ASCellNode *)collectionNode:(ASCollectionNode *)collectionNode nodeForItemAtIndexPath:(NSIndexPath *)indexPath -{ - ASThrashTestNode *node = [[ASThrashTestNode alloc] init]; - node.item = self.data[indexPath.section].items[indexPath.row]; - [self.allNodes addObject:node]; - return node; -} - -- (ASCellNode *)tableView:(ASTableView *)tableView nodeForRowAtIndexPath:(NSIndexPath *)indexPath -{ - ASThrashTestNode *node = [[ASThrashTestNode alloc] init]; - node.item = self.data[indexPath.section].items[indexPath.item]; - [self.allNodes addObject:node]; - return node; -} - -#endif - -@end - -#if !USE_UIKIT_REFERENCE -@implementation ASThrashTestNode - -- (CGSize)calculateSizeThatFits:(CGSize)constrainedSize -{ - ASDisplayNodeAssertFalse(isinf(constrainedSize.width)); - return CGSizeMake(constrainedSize.width, 44); -} - -@end -#endif - -@implementation ASThrashUpdate - -- (instancetype)initWithData:(NSArray *)data -{ - self = [super init]; - if (self != nil) { - _data = [[NSMutableArray alloc] initWithArray:data copyItems:YES]; - _oldData = [[NSArray alloc] initWithArray:data copyItems:YES]; - - _deletedItemIndexes = [NSMutableArray array]; - _replacedItemIndexes = [NSMutableArray array]; - _insertedItemIndexes = [NSMutableArray array]; - _replacingItems = [NSMutableArray array]; - _insertedItems = [NSMutableArray array]; - - // Randomly reload some items - for (ASThrashTestSection *section in _data) { - NSMutableIndexSet *indexes = [NSIndexSet randomIndexesLessThan:section.items.count probability:kFickleness insertMode:NO]; - NSArray *newItems = [ASThrashTestItem itemsWithCount:indexes.count]; - [section.items replaceObjectsAtIndexes:indexes withObjects:newItems]; - [_replacingItems addObject:newItems]; - [_replacedItemIndexes addObject:indexes]; - } - - // Randomly replace some sections - _replacedSectionIndexes = [NSIndexSet randomIndexesLessThan:_data.count probability:kFickleness insertMode:NO]; - _replacingSections = [ASThrashTestSection sectionsWithCount:_replacedSectionIndexes.count]; - [_data replaceObjectsAtIndexes:_replacedSectionIndexes withObjects:_replacingSections]; - - // Randomly delete some items - [_data enumerateObjectsUsingBlock:^(ASThrashTestSection * _Nonnull section, NSUInteger idx, BOOL * _Nonnull stop) { - if (section.items.count >= kMinimumItemCount) { - NSMutableIndexSet *indexes = [NSIndexSet randomIndexesLessThan:section.items.count probability:kFickleness insertMode:NO]; - - /// Cannot reload & delete the same item. - [indexes removeIndexes:_replacedItemIndexes[idx]]; - - [section.items removeObjectsAtIndexes:indexes]; - [_deletedItemIndexes addObject:indexes]; - } else { - [_deletedItemIndexes addObject:[NSMutableIndexSet indexSet]]; - } - }]; - - // Randomly delete some sections - if (_data.count >= kMinimumSectionCount) { - _deletedSectionIndexes = [NSIndexSet randomIndexesLessThan:_data.count probability:kFickleness insertMode:NO]; - } else { - _deletedSectionIndexes = [NSMutableIndexSet indexSet]; - } - // Cannot replace & delete the same section. - [_deletedSectionIndexes removeIndexes:_replacedSectionIndexes]; - - // Cannot delete/replace item in deleted/replaced section - [_deletedSectionIndexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) { - [_replacedItemIndexes[idx] removeAllIndexes]; - [_deletedItemIndexes[idx] removeAllIndexes]; - }]; - [_replacedSectionIndexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) { - [_replacedItemIndexes[idx] removeAllIndexes]; - [_deletedItemIndexes[idx] removeAllIndexes]; - }]; - [_data removeObjectsAtIndexes:_deletedSectionIndexes]; - - // Randomly insert some sections - _insertedSectionIndexes = [NSIndexSet randomIndexesLessThan:(_data.count + 1) probability:kFickleness insertMode:YES]; - _insertedSections = [ASThrashTestSection sectionsWithCount:_insertedSectionIndexes.count]; - [_data insertObjects:_insertedSections atIndexes:_insertedSectionIndexes]; - - // Randomly insert some items - for (ASThrashTestSection *section in _data) { - // Only insert items into the old sections – not replaced/inserted sections. - if ([_oldData containsObject:section]) { - NSMutableIndexSet *indexes = [NSIndexSet randomIndexesLessThan:(section.items.count + 1) probability:kFickleness insertMode:YES]; - NSArray *newItems = [ASThrashTestItem itemsWithCount:indexes.count]; - [section.items insertObjects:newItems atIndexes:indexes]; - [_insertedItems addObject:newItems]; - [_insertedItemIndexes addObject:indexes]; - } else { - [_insertedItems addObject:@[]]; - [_insertedItemIndexes addObject:[NSMutableIndexSet indexSet]]; - } - } - } - return self; -} - -+ (BOOL)supportsSecureCoding -{ - return YES; -} - -+ (ASThrashUpdate *)thrashUpdateWithBase64String:(NSString *)base64 -{ - return [NSKeyedUnarchiver unarchiveObjectWithData:[[NSData alloc] initWithBase64EncodedString:base64 options:kNilOptions]]; -} - -- (NSString *)base64Representation -{ - return [[NSKeyedArchiver archivedDataWithRootObject:self] base64EncodedStringWithOptions:kNilOptions]; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder -{ - NSDictionary *dict = [self dictionaryWithValuesForKeys:@[ - @"oldData", - @"data", - @"deletedSectionIndexes", - @"replacedSectionIndexes", - @"replacingSections", - @"insertedSectionIndexes", - @"insertedSections", - @"deletedItemIndexes", - @"replacedItemIndexes", - @"replacingItems", - @"insertedItemIndexes", - @"insertedItems" - ]]; - [aCoder encodeObject:dict forKey:@"_dict"]; - [aCoder encodeInteger:ASThrashUpdateCurrentSerializationVersion forKey:@"_version"]; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder -{ - self = [super init]; - if (self != nil) { - NSAssert(ASThrashUpdateCurrentSerializationVersion == [aDecoder decodeIntegerForKey:@"_version"], @"This thrash update was archived from a different version and can't be read. Sorry."); - NSDictionary *dict = [aDecoder decodeObjectOfClass:[NSDictionary class] forKey:@"_dict"]; - [self setValuesForKeysWithDictionary:dict]; - } - return self; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"", self, ASThrashArrayDescription(_oldData), ASThrashArrayDescription(_deletedItemIndexes), _deletedSectionIndexes, ASThrashArrayDescription(_replacedItemIndexes), _replacedSectionIndexes, ASThrashArrayDescription(_insertedItemIndexes), _insertedSectionIndexes, ASThrashArrayDescription(_data)]; -} - -- (NSString *)logFriendlyBase64Representation -{ - return [NSString stringWithFormat:@"\n\n**********\nBase64 Representation:\n**********\n%@\n**********\nEnd Base64 Representation\n**********", self.base64Representation]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASUICollectionViewTests.mm b/submodules/AsyncDisplayKit/Tests/ASUICollectionViewTests.mm deleted file mode 100644 index 6f99590a84..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASUICollectionViewTests.mm +++ /dev/null @@ -1,141 +0,0 @@ -// -// ASUICollectionViewTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import -#import "NSInvocation+ASTestHelpers.h" - -@interface ASUICollectionViewTests : XCTestCase - -@end - -@implementation ASUICollectionViewTests - -/// Test normal item-affiliated supplementary node -- (void)testNormalTwoIndexSupplementaryElement -{ - [self _testSupplementaryNodeAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:1] sectionCount:2 expectException:NO]; -} - -/// If your supp is indexPathForItem:inSection:, the section index must be in bounds -- (void)testThatSupplementariesWithItemIndexesMustBeWithinNormalSections -{ - [self _testSupplementaryNodeAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:3] sectionCount:2 expectException:YES]; -} - -/// If your supp is indexPathWithIndex:, that's OK even if that section is out of bounds! -- (void)testThatSupplementariesWithOneIndexAreOKOutOfSectionBounds -{ - [self _testSupplementaryNodeAtIndexPath:[NSIndexPath indexPathWithIndex:3] sectionCount:2 expectException:NO]; -} - -- (void)testThatNestedBatchCompletionsAreCalledInOrder -{ - UICollectionViewLayout *layout = [[UICollectionViewLayout alloc] init]; - id layoutMock = [OCMockObject partialMockForObject:layout]; - - UICollectionView *cv = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) collectionViewLayout:layoutMock]; - id dataSource = [OCMockObject niceMockForProtocol:@protocol(UICollectionViewDataSource)]; - - cv.dataSource = dataSource; - - XCTestExpectation *inner0 = [self expectationWithDescription:@"Inner completion 0 is called"]; - XCTestExpectation *inner1 = [self expectationWithDescription:@"Inner completion 1 is called"]; - XCTestExpectation *outer = [self expectationWithDescription:@"Outer completion is called"]; - - NSMutableArray *completions = [NSMutableArray array]; - - [cv performBatchUpdates:^{ - [cv performBatchUpdates:^{ - - } completion:^(BOOL finished) { - [completions addObject:inner0]; - [inner0 fulfill]; - }]; - [cv performBatchUpdates:^{ - - } completion:^(BOOL finished) { - [completions addObject:inner1]; - [inner1 fulfill]; - }]; - } completion:^(BOOL finished) { - [completions addObject:outer]; - [outer fulfill]; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; - XCTAssertEqualObjects(completions, (@[ outer, inner0, inner1 ]), @"Expected completion order to be correct"); -} - -- (void)_testSupplementaryNodeAtIndexPath:(NSIndexPath *)indexPath sectionCount:(NSInteger)sectionCount expectException:(BOOL)shouldFail -{ - UICollectionViewLayoutAttributes *attr = [UICollectionViewLayoutAttributes layoutAttributesForSupplementaryViewOfKind:@"SuppKind" withIndexPath:indexPath]; - attr.frame = CGRectMake(0, 0, 20, 20); - UICollectionViewLayout *layout = [[UICollectionViewLayout alloc] init]; - id layoutMock = [OCMockObject partialMockForObject:layout]; - - [[[[layoutMock expect] ignoringNonObjectArgs] andReturn:@[ attr ]] layoutAttributesForElementsInRect:CGRectZero]; - UICollectionView *cv = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) collectionViewLayout:layoutMock]; - [cv registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:@"SuppKind" withReuseIdentifier:@"ReuseID"]; - - id dataSource = [OCMockObject niceMockForProtocol:@protocol(UICollectionViewDataSource)]; - __block id view = nil; - [[[dataSource expect] andDo:^(NSInvocation *invocation) { - NSIndexPath *indexPath = [invocation as_argumentAtIndexAsObject:4]; - view = [cv dequeueReusableSupplementaryViewOfKind:@"SuppKind" withReuseIdentifier:@"ReuseID" forIndexPath:indexPath]; - [invocation setReturnValue:&view]; - }] collectionView:cv viewForSupplementaryElementOfKind:@"SuppKind" atIndexPath:indexPath]; - [[[dataSource expect] andReturnValue:[NSNumber numberWithInteger:sectionCount]] numberOfSectionsInCollectionView:cv]; - - cv.dataSource = dataSource; - if (shouldFail) { - XCTAssertThrowsSpecificNamed([cv layoutIfNeeded], NSException, NSInternalInconsistencyException); - // Early return because behavior after exception is thrown is undefined. - return; - } - - [cv layoutIfNeeded]; - XCTAssertEqualObjects(attr, [cv layoutAttributesForSupplementaryElementOfKind:@"SuppKind" atIndexPath:indexPath]); - XCTAssertEqual(view, [cv supplementaryViewForElementKind:@"SuppKind" atIndexPath:indexPath]); - [dataSource verify]; - [layoutMock verify]; -} - -- (void)testThatIssuingAnUpdateBeforeInitialReloadIsUnacceptable -{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - UICollectionView *cv = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) collectionViewLayout:layout]; - id dataSource = [OCMockObject niceMockForProtocol:@protocol(UICollectionViewDataSource)]; - - // Setup empty data source – 0 sections, 0 items - [[[dataSource stub] andDo:^(NSInvocation *invocation) { - NSIndexPath *indexPath = [invocation as_argumentAtIndexAsObject:3]; - __autoreleasing UICollectionViewCell *view = [cv dequeueReusableCellWithReuseIdentifier:@"CellID" forIndexPath:indexPath]; - [invocation setReturnValue:&view]; - }] collectionView:cv cellForItemAtIndexPath:OCMOCK_ANY]; - [[[dataSource stub] andReturnValue:[NSNumber numberWithInteger:0]] numberOfSectionsInCollectionView:cv]; - [[[dataSource stub] andReturnValue:[NSNumber numberWithInteger:0]] collectionView:cv numberOfItemsInSection:0]; - [cv registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"CellID"]; - cv.dataSource = dataSource; - - // Update data source – 1 section, 0 items - [[[dataSource stub] andReturnValue:[NSNumber numberWithInteger:1]] numberOfSectionsInCollectionView:cv]; - - /** - * Inform collection view – insert section 0 - * Throws exception because collection view never saw the data source have 0 sections. - * so it's going to read "oldSectionCount" now and get 1. It will also read - * "newSectionCount" and get 1. Then it'll throw because "oldSectionCount(1) + insertedCount(1) != newSectionCount(1)". - * To workaround this, you could add `[cv numberOfSections]` before the data source is updated to - * trigger the collection view to read oldSectionCount=0. - */ - XCTAssertThrowsSpecificNamed([cv insertSections:[NSIndexSet indexSetWithIndex:0]], NSException, NSInternalInconsistencyException); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASVideoNodeTests.mm b/submodules/AsyncDisplayKit/Tests/ASVideoNodeTests.mm deleted file mode 100644 index 60c7f89c42..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASVideoNodeTests.mm +++ /dev/null @@ -1,428 +0,0 @@ -// -// ASVideoNodeTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import -#import -#import - -#import - -#import "ASDisplayNodeTestsHelper.h" - -#if AS_USE_VIDEO -@interface ASVideoNodeTests : XCTestCase -{ - ASVideoNode *_videoNode; - AVURLAsset *_firstAsset; - AVAsset *_secondAsset; - NSURL *_url; - NSArray *_requestedKeys; -} -@end - -@interface ASVideoNode () { - ASDisplayNode *_playerNode; - AVPlayer *_player; -} - - -@property ASInterfaceState interfaceState; -@property (readonly) ASDisplayNode *spinner; -@property ASDisplayNode *playerNode; -@property AVPlayer *player; -@property BOOL shouldBePlaying; - -- (void)setVideoPlaceholderImage:(UIImage *)image; -- (void)prepareToPlayAsset:(AVAsset *)asset withKeys:(NSArray *)requestedKeys; - -@end - -@implementation ASVideoNodeTests - -- (void)setUp -{ - _videoNode = [[ASVideoNode alloc] init]; - _firstAsset = [AVURLAsset assetWithURL:[NSURL URLWithString:@"firstURL"]]; - _secondAsset = [AVAsset assetWithURL:[NSURL URLWithString:@"secondURL"]]; - _url = [NSURL URLWithString:@"testURL"]; - _requestedKeys = @[ @"playable" ]; -} - -- (void)testOnPlayIfVideoIsNotReadyInitializeSpinnerAndAddAsSubnode -{ - _videoNode.asset = _firstAsset; - [self doOnPlayIfVideoIsNotReadyInitializeSpinnerAndAddAsSubnodeWithUrl]; -} - -- (void)testOnPlayIfVideoIsNotReadyInitializeSpinnerAndAddAsSubnodeWithUrl -{ - _videoNode.asset = [AVAsset assetWithURL:_url]; - [self doOnPlayIfVideoIsNotReadyInitializeSpinnerAndAddAsSubnodeWithUrl]; -} - -- (void)doOnPlayIfVideoIsNotReadyInitializeSpinnerAndAddAsSubnodeWithUrl -{ - _videoNode.interfaceState = ASInterfaceStatePreload; - [_videoNode play]; -} - - -- (void)testOnPauseSpinnerIsPausedIfPresent -{ - _videoNode.asset = _firstAsset; - [self doOnPauseSpinnerIsPausedIfPresentWithURL]; -} - -- (void)testOnPauseSpinnerIsPausedIfPresentWithURL -{ - _videoNode.asset = [AVAsset assetWithURL:_url]; - [self doOnPauseSpinnerIsPausedIfPresentWithURL]; -} - -- (void)doOnPauseSpinnerIsPausedIfPresentWithURL -{ - _videoNode.interfaceState = ASInterfaceStatePreload; - - [_videoNode play]; - [_videoNode pause]; - -} - - -- (void)testOnVideoReadySpinnerIsStoppedAndRemoved -{ - _videoNode.asset = _firstAsset; - [self doOnVideoReadySpinnerIsStoppedAndRemovedWithURL]; -} - -- (void)testOnVideoReadySpinnerIsStoppedAndRemovedWithURL -{ - _videoNode.asset = [AVAsset assetWithURL:_url]; - [self doOnVideoReadySpinnerIsStoppedAndRemovedWithURL]; -} - -- (void)doOnVideoReadySpinnerIsStoppedAndRemovedWithURL -{ - _videoNode.interfaceState = ASInterfaceStatePreload; - - [_videoNode play]; - [_videoNode observeValueForKeyPath:@"status" ofObject:[_videoNode currentItem] change:@{NSKeyValueChangeNewKey : @(AVPlayerItemStatusReadyToPlay)} context:NULL]; -} - - -- (void)testPlayerDefaultsToNil -{ - _videoNode.asset = _firstAsset; - XCTAssertNil(_videoNode.player); -} - -- (void)testPlayerDefaultsToNilWithURL -{ - _videoNode.asset = [AVAsset assetWithURL:_url]; - XCTAssertNil(_videoNode.player); -} - -- (void)testPlayerIsCreatedAsynchronouslyInPreload -{ - AVAsset *asset = _firstAsset; - - id assetMock = [OCMockObject partialMockForObject:asset]; - id videoNodeMock = [OCMockObject partialMockForObject:_videoNode]; - - [[[assetMock stub] andReturnValue:@YES] isPlayable]; - [[[videoNodeMock expect] andForwardToRealObject] prepareToPlayAsset:assetMock withKeys:_requestedKeys]; - - _videoNode.asset = assetMock; - _videoNode.interfaceState = ASInterfaceStatePreload; - - [videoNodeMock verifyWithDelay:1.0f]; - - XCTAssertNotNil(_videoNode.player); -} - -- (void)testPlayerIsCreatedAsynchronouslyInPreloadWithURL -{ - AVAsset *asset = [AVAsset assetWithURL:_url]; - - id assetMock = [OCMockObject partialMockForObject:asset]; - id videoNodeMock = [OCMockObject partialMockForObject:_videoNode]; - - [[[assetMock stub] andReturnValue:@YES] isPlayable]; - [[[videoNodeMock expect] andForwardToRealObject] prepareToPlayAsset:assetMock withKeys:_requestedKeys]; - - _videoNode.asset = assetMock; - _videoNode.interfaceState = ASInterfaceStatePreload; - - [videoNodeMock verifyWithDelay:1.0f]; - - XCTAssertNotNil(_videoNode.player); -} - -- (void)testPlayerLayerNodeIsAddedOnDidLoadIfVisibleAndAutoPlaying -{ - _videoNode.asset = _firstAsset; - [self doPlayerLayerNodeIsAddedOnDidLoadIfVisibleAndAutoPlayingWithURL]; -} - -- (void)testPlayerLayerNodeIsAddedOnDidLoadIfVisibleAndAutoPlayingWithURL -{ - _videoNode.asset = [AVAsset assetWithURL:_url]; - [self doPlayerLayerNodeIsAddedOnDidLoadIfVisibleAndAutoPlayingWithURL]; -} - -- (void)doPlayerLayerNodeIsAddedOnDidLoadIfVisibleAndAutoPlayingWithURL -{ - [_videoNode setInterfaceState:ASInterfaceStateNone]; - [_videoNode didLoad]; - - XCTAssert(![_videoNode.subnodes containsObject:_videoNode.playerNode]); -} - - -- (void)testPlayerLayerNodeIsNotAddedIfVisibleButShouldNotBePlaying -{ - _videoNode.asset = _firstAsset; - [self doPlayerLayerNodeIsNotAddedIfVisibleButShouldNotBePlaying]; -} - -- (void)testPlayerLayerNodeIsNotAddedIfVisibleButShouldNotBePlayingWithUrl -{ - _videoNode.asset = [AVAsset assetWithURL:_url]; - [self doPlayerLayerNodeIsNotAddedIfVisibleButShouldNotBePlaying]; -} - -- (void)doPlayerLayerNodeIsNotAddedIfVisibleButShouldNotBePlaying -{ - [_videoNode pause]; - [_videoNode layer]; - [_videoNode setInterfaceState:ASInterfaceStateVisible | ASInterfaceStateDisplay]; - - XCTAssert(![_videoNode.subnodes containsObject:_videoNode.playerNode]); -} - - -- (void)testVideoStartsPlayingOnDidDidBecomeVisibleWhenShouldAutoplay -{ - _videoNode.asset = _firstAsset; - [self doVideoStartsPlayingOnDidDidBecomeVisibleWhenShouldAutoplay]; -} - -- (void)testVideoStartsPlayingOnDidDidBecomeVisibleWhenShouldAutoplayWithURL -{ - _videoNode.asset = [AVAsset assetWithURL:_url]; - [self doVideoStartsPlayingOnDidDidBecomeVisibleWhenShouldAutoplay]; -} - -- (void)doVideoStartsPlayingOnDidDidBecomeVisibleWhenShouldAutoplay -{ - _videoNode.shouldAutoplay = YES; - _videoNode.playerNode = [[ASDisplayNode alloc] initWithLayerBlock:^CALayer *{ - AVPlayerLayer *playerLayer = [[AVPlayerLayer alloc] init]; - return playerLayer; - }]; - _videoNode.playerNode.layer.frame = CGRectZero; - - [_videoNode layer]; - [_videoNode didEnterVisibleState]; - - XCTAssertTrue(_videoNode.shouldBePlaying); -} - -- (void)testVideoShouldPauseWhenItLeavesVisibleButShouldKnowPlayingShouldRestartLater -{ - _videoNode.asset = _firstAsset; - [self doVideoShouldPauseWhenItLeavesVisibleButShouldKnowPlayingShouldRestartLater]; -} - -- (void)testVideoShouldPauseWhenItLeavesVisibleButShouldKnowPlayingShouldRestartLaterWithURL -{ - _videoNode.asset = [AVAsset assetWithURL:_url]; - [self doVideoShouldPauseWhenItLeavesVisibleButShouldKnowPlayingShouldRestartLater]; -} - -- (void)doVideoShouldPauseWhenItLeavesVisibleButShouldKnowPlayingShouldRestartLater -{ - [_videoNode play]; - - [_videoNode interfaceStateDidChange:ASInterfaceStateNone fromState:ASInterfaceStateVisible]; - - XCTAssertFalse(_videoNode.isPlaying); - XCTAssertTrue(_videoNode.shouldBePlaying); -} - - -- (void)testVideoThatIsPlayingWhenItLeavesVisibleRangeStartsAgainWhenItComesBack -{ - _videoNode.asset = _firstAsset; - [self doVideoThatIsPlayingWhenItLeavesVisibleRangeStartsAgainWhenItComesBack]; -} - -- (void)testVideoThatIsPlayingWhenItLeavesVisibleRangeStartsAgainWhenItComesBackWithURL -{ - _videoNode.asset = [AVAsset assetWithURL:_url]; - [self doVideoThatIsPlayingWhenItLeavesVisibleRangeStartsAgainWhenItComesBack]; -} - -- (void)doVideoThatIsPlayingWhenItLeavesVisibleRangeStartsAgainWhenItComesBack -{ - [_videoNode play]; - - [_videoNode interfaceStateDidChange:ASInterfaceStateVisible fromState:ASInterfaceStateNone]; - [_videoNode interfaceStateDidChange:ASInterfaceStateNone fromState:ASInterfaceStateVisible]; - - XCTAssertTrue(_videoNode.shouldBePlaying); -} - -- (void)testMutingShouldMutePlayer -{ - [_videoNode setPlayer:[[AVPlayer alloc] init]]; - - _videoNode.muted = YES; - - XCTAssertTrue(_videoNode.player.muted); -} - -- (void)testUnMutingShouldUnMutePlayer -{ - [_videoNode setPlayer:[[AVPlayer alloc] init]]; - - _videoNode.muted = YES; - _videoNode.muted = NO; - - XCTAssertFalse(_videoNode.player.muted); -} - -- (void)testVideoThatDoesNotAutorepeatsShouldPauseOnPlaybackEnd -{ - id assetMock = [OCMockObject partialMockForObject:_firstAsset]; - [[[assetMock stub] andReturnValue:@YES] isPlayable]; - - _videoNode.asset = assetMock; - _videoNode.shouldAutorepeat = NO; - - [_videoNode layer]; - [_videoNode setInterfaceState:ASInterfaceStateVisible | ASInterfaceStateDisplay | ASInterfaceStatePreload]; - [_videoNode prepareToPlayAsset:assetMock withKeys:_requestedKeys]; - [_videoNode play]; - - XCTAssertTrue(_videoNode.isPlaying); - - [[NSNotificationCenter defaultCenter] postNotificationName:AVPlayerItemDidPlayToEndTimeNotification object:_videoNode.currentItem]; - - XCTAssertFalse(_videoNode.isPlaying); - XCTAssertEqual(0, CMTimeGetSeconds(_videoNode.player.currentTime)); -} - -- (void)testVideoThatAutorepeatsShouldRepeatOnPlaybackEnd -{ - id assetMock = [OCMockObject partialMockForObject:_firstAsset]; - [[[assetMock stub] andReturnValue:@YES] isPlayable]; - - _videoNode.asset = assetMock; - _videoNode.shouldAutorepeat = YES; - - [_videoNode layer]; - [_videoNode setInterfaceState:ASInterfaceStateVisible | ASInterfaceStateDisplay | ASInterfaceStatePreload]; - [_videoNode prepareToPlayAsset:assetMock withKeys:_requestedKeys]; - [_videoNode play]; - - [[NSNotificationCenter defaultCenter] postNotificationName:AVPlayerItemDidPlayToEndTimeNotification object:_videoNode.currentItem]; - - XCTAssertTrue(_videoNode.isPlaying); -} - -- (void)testVideoResumedWhenBufferIsLikelyToKeepUp -{ - id assetMock = [OCMockObject partialMockForObject:_firstAsset]; - [[[assetMock stub] andReturnValue:@YES] isPlayable]; - - _videoNode.asset = assetMock; - - [_videoNode layer]; - [_videoNode setInterfaceState:ASInterfaceStateVisible | ASInterfaceStateDisplay | ASInterfaceStatePreload]; - [_videoNode prepareToPlayAsset:assetMock withKeys:_requestedKeys]; - ASCATransactionQueueWait(nil); - [_videoNode pause]; - _videoNode.shouldBePlaying = YES; - XCTAssertFalse(_videoNode.isPlaying); - - [_videoNode observeValueForKeyPath:@"playbackLikelyToKeepUp" ofObject:[_videoNode currentItem] change:@{NSKeyValueChangeNewKey : @YES} context:NULL]; - - XCTAssertTrue(_videoNode.isPlaying); -} - -- (void)testSettingVideoGravityChangesPlaceholderContentMode -{ - [_videoNode setVideoPlaceholderImage:[[UIImage alloc] init]]; - XCTAssertEqual(UIViewContentModeScaleAspectFit, _videoNode.contentMode); - - _videoNode.gravity = AVLayerVideoGravityResize; - XCTAssertEqual(UIViewContentModeScaleToFill, _videoNode.contentMode); - - _videoNode.gravity = AVLayerVideoGravityResizeAspect; - XCTAssertEqual(UIViewContentModeScaleAspectFit, _videoNode.contentMode); - - _videoNode.gravity = AVLayerVideoGravityResizeAspectFill; - XCTAssertEqual(UIViewContentModeScaleAspectFill, _videoNode.contentMode); -} - -- (void)testChangingAssetsChangesPlaceholderImage -{ - UIImage *firstImage = [[UIImage alloc] init]; - - _videoNode.asset = _firstAsset; - [_videoNode setVideoPlaceholderImage:firstImage]; - XCTAssertEqual(firstImage, _videoNode.image); - - _videoNode.asset = _secondAsset; - XCTAssertNotEqual(firstImage, _videoNode.image); -} - -- (void)testClearingPreloadedContentShouldClearAssetData -{ - AVAsset *asset = _firstAsset; - - id assetMock = [OCMockObject partialMockForObject:asset]; - id videoNodeMock = [OCMockObject partialMockForObject:_videoNode]; - - [[[assetMock stub] andReturnValue:@YES] isPlayable]; - [[[videoNodeMock expect] andForwardToRealObject] prepareToPlayAsset:assetMock withKeys:_requestedKeys]; - - _videoNode.asset = assetMock; - [_videoNode didEnterPreloadState]; - [_videoNode setVideoPlaceholderImage:[[UIImage alloc] init]]; - - [videoNodeMock verifyWithDelay:1.0f]; - - XCTAssertNotNil(_videoNode.player); - XCTAssertNotNil(_videoNode.currentItem); - XCTAssertNotNil(_videoNode.image); - - [_videoNode didExitPreloadState]; - XCTAssertNil(_videoNode.player); - XCTAssertNil(_videoNode.currentItem); -} - -- (void)testDelegateProperlySetForClassHierarchy -{ - _videoNode.delegate = self; - - XCTAssertTrue([_videoNode.delegate conformsToProtocol:@protocol(ASVideoNodeDelegate)]); - XCTAssertTrue([_videoNode.delegate conformsToProtocol:@protocol(ASNetworkImageNodeDelegate)]); - XCTAssertTrue([((ASNetworkImageNode*)_videoNode).delegate conformsToProtocol:@protocol(ASNetworkImageNodeDelegate)]); - - XCTAssertEqual(_videoNode.delegate, self); - XCTAssertEqual(((ASNetworkImageNode*)_videoNode).delegate, self); -} - -@end - -#endif \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/Tests/ASViewControllerTests.mm b/submodules/AsyncDisplayKit/Tests/ASViewControllerTests.mm deleted file mode 100644 index f6b26e9756..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASViewControllerTests.mm +++ /dev/null @@ -1,88 +0,0 @@ -// -// ASViewControllerTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import - -#import - -#import "NSInvocation+ASTestHelpers.h" - -@interface ASViewControllerTests : XCTestCase - -@end - -@implementation ASViewControllerTests - -- (void)testThatAutomaticSubnodeManagementScrollViewInsetsAreApplied -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - node.automaticallyManagesSubnodes = YES; - ASScrollNode *scrollNode = [[ASScrollNode alloc] init]; - node.layoutSpecBlock = ^(ASDisplayNode *node, ASSizeRange constrainedSize){ - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsZero child:scrollNode]; - }; - ASViewController *vc = [[ASViewController alloc] initWithNode:node]; - window.rootViewController = [[UINavigationController alloc] initWithRootViewController:vc]; - [window makeKeyAndVisible]; - [window layoutIfNeeded]; - XCTAssertEqualObjects(NSStringFromCGRect(window.bounds), NSStringFromCGRect(node.frame)); - XCTAssertNotEqual(scrollNode.view.contentInset.top, 0); -} - -- (void)testThatViewControllerFrameIsRightAfterCustomTransitionWithNonextendedEdges -{ - UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - ASDisplayNode *node = [[ASDisplayNode alloc] init]; - - ASViewController *vc = [[ASViewController alloc] initWithNode:node]; - vc.node.backgroundColor = [UIColor greenColor]; - vc.edgesForExtendedLayout = UIRectEdgeNone; - - UIViewController * oldVC = [[UIViewController alloc] init]; - UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:oldVC]; - id navDelegate = [OCMockObject niceMockForProtocol:@protocol(UINavigationControllerDelegate)]; - id animator = [OCMockObject niceMockForProtocol:@protocol(UIViewControllerAnimatedTransitioning)]; - [[[[navDelegate expect] ignoringNonObjectArgs] andReturn:animator] navigationController:[OCMArg any] animationControllerForOperation:UINavigationControllerOperationPush fromViewController:[OCMArg any] toViewController:[OCMArg any]]; - [[[animator expect] andReturnValue:@0.3] transitionDuration:[OCMArg any]]; - XCTestExpectation *e = [self expectationWithDescription:@"Transition completed"]; - [[[animator expect] andDo:^(NSInvocation *invocation) { - id ctx = [invocation as_argumentAtIndexAsObject:2]; - UIView *container = [ctx containerView]; - [container addSubview:vc.view]; - vc.view.alpha = 0; - vc.view.frame = [ctx finalFrameForViewController:vc]; - [UIView animateWithDuration:0.3 animations:^{ - vc.view.alpha = 1; - oldVC.view.alpha = 0; - } completion:^(BOOL finished) { - [oldVC.view removeFromSuperview]; - [ctx completeTransition:finished]; - [e fulfill]; - }]; - }] animateTransition:[OCMArg any]]; - nav.delegate = navDelegate; - window.rootViewController = nav; - [window makeKeyAndVisible]; - [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate date]]; - [nav pushViewController:vc animated:YES]; - - [self waitForExpectationsWithTimeout:2 handler:nil]; - - CGFloat navHeight = CGRectGetMaxY([nav.navigationBar convertRect:nav.navigationBar.bounds toView:window]); - CGRect expectedRect, slice; - CGRectDivide(window.bounds, &slice, &expectedRect, navHeight, CGRectMinYEdge); - XCTAssertEqualObjects(NSStringFromCGRect(expectedRect), NSStringFromCGRect(node.frame)); - [navDelegate verify]; - [animator verify]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASWeakMapTests.mm b/submodules/AsyncDisplayKit/Tests/ASWeakMapTests.mm deleted file mode 100644 index fd0c0835be..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASWeakMapTests.mm +++ /dev/null @@ -1,54 +0,0 @@ -// -// ASWeakMapTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface ASWeakMapTests : XCTestCase - -@end - -@implementation ASWeakMapTests - -- (void)testKeyAndValueAreReleasedWhenEntryIsReleased -{ - ASWeakMap *weakMap = [[ASWeakMap alloc] init]; - - __weak NSObject *weakKey; - __weak NSObject *weakValue; - @autoreleasepool { - NSObject *key = [[NSObject alloc] init]; - NSObject *value = [[NSObject alloc] init]; - ASWeakMapEntry *entry = [weakMap setObject:value forKey:key]; - XCTAssertEqual([weakMap entryForKey:key], entry); - - weakKey = key; - weakValue = value; -} - XCTAssertNil(weakKey); - XCTAssertNil(weakValue); -} - -- (void)testKeyEquality -{ - ASWeakMap *weakMap = [[ASWeakMap alloc] init]; - NSString *keyA = @"key"; - NSString *keyB = [keyA copy]; // `isEqual` but not pointer equal - NSObject *value = [[NSObject alloc] init]; - - ASWeakMapEntry *entryA = [weakMap setObject:value forKey:keyA]; - ASWeakMapEntry *entryB = [weakMap entryForKey:keyB]; - XCTAssertEqual(entryA, entryB); -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/submodules/AsyncDisplayKit/Tests/ASWeakSetTests.mm b/submodules/AsyncDisplayKit/Tests/ASWeakSetTests.mm deleted file mode 100644 index 31af91de0f..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASWeakSetTests.mm +++ /dev/null @@ -1,135 +0,0 @@ -// -// ASWeakSetTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface ASWeakSetTests : XCTestCase - -@end - -@implementation ASWeakSetTests - -- (void)testAddingACoupleRetainedObjects -{ - ASWeakSet *weakSet = [ASWeakSet new]; - NSString *hello = @"hello"; - NSString *world = @"hello"; - [weakSet addObject:hello]; - [weakSet addObject:world]; - XCTAssert([weakSet containsObject:hello]); - XCTAssert([weakSet containsObject:world]); - XCTAssert(![weakSet containsObject:@"apple"]); -} - -- (void)testThatCountIncorporatesDeallocatedObjects -{ - ASWeakSet *weakSet = [ASWeakSet new]; - XCTAssertEqual(weakSet.count, 0); - NSObject *a = [NSObject new]; - NSObject *b = [NSObject new]; - [weakSet addObject:a]; - [weakSet addObject:b]; - XCTAssertEqual(weakSet.count, 2); - - @autoreleasepool { - NSObject *doomedObject = [NSObject new]; - [weakSet addObject:doomedObject]; - XCTAssertEqual(weakSet.count, 3); - } - - XCTAssertEqual(weakSet.count, 2); -} - -- (void)testThatIsEmptyIncorporatesDeallocatedObjects -{ - ASWeakSet *weakSet = [ASWeakSet new]; - XCTAssertTrue(weakSet.isEmpty); - @autoreleasepool { - NSObject *doomedObject = [NSObject new]; - [weakSet addObject:doomedObject]; - XCTAssertFalse(weakSet.isEmpty); - } - XCTAssertTrue(weakSet.isEmpty); -} - -- (void)testThatContainsObjectWorks -{ - ASWeakSet *weakSet = [ASWeakSet new]; - NSObject *a = [NSObject new]; - NSObject *b = [NSObject new]; - [weakSet addObject:a]; - XCTAssertTrue([weakSet containsObject:a]); - XCTAssertFalse([weakSet containsObject:b]); -} - -- (void)testThatRemoveObjectWorks -{ - ASWeakSet *weakSet = [ASWeakSet new]; - NSObject *a = [NSObject new]; - NSObject *b = [NSObject new]; - [weakSet addObject:a]; - [weakSet addObject:b]; - XCTAssertTrue([weakSet containsObject:a]); - XCTAssertTrue([weakSet containsObject:b]); - XCTAssertEqual(weakSet.count, 2); - - [weakSet removeObject:b]; - XCTAssertTrue([weakSet containsObject:a]); - XCTAssertFalse([weakSet containsObject:b]); - XCTAssertEqual(weakSet.count, 1); -} - -- (void)testThatFastEnumerationWorks -{ - ASWeakSet *weakSet = [ASWeakSet new]; - NSObject *a = [NSObject new]; - NSObject *b = [NSObject new]; - [weakSet addObject:a]; - [weakSet addObject:b]; - - @autoreleasepool { - NSObject *doomedObject = [NSObject new]; - [weakSet addObject:doomedObject]; - XCTAssertEqual(weakSet.count, 3); - } - - NSInteger i = 0; - NSMutableSet *awaitingObjects = [NSMutableSet setWithObjects:a, b, nil]; - for (NSObject *object in weakSet) { - XCTAssertTrue([awaitingObjects containsObject:object]); - [awaitingObjects removeObject:object]; - i += 1; - } - - XCTAssertEqual(i, 2); -} - -- (void)testThatRemoveAllObjectsWorks -{ - ASWeakSet *weakSet = [ASWeakSet new]; - NSObject *a = [NSObject new]; - NSObject *b = [NSObject new]; - [weakSet addObject:a]; - [weakSet addObject:b]; - XCTAssertEqual(weakSet.count, 2); - - [weakSet removeAllObjects]; - - XCTAssertEqual(weakSet.count, 0); - - NSInteger i = 0; - for (__unused NSObject *object in weakSet) { - i += 1; - } - - XCTAssertEqual(i, 0); -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ASWrapperSpecSnapshotTests.mm b/submodules/AsyncDisplayKit/Tests/ASWrapperSpecSnapshotTests.mm deleted file mode 100644 index 91ddd45fe5..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ASWrapperSpecSnapshotTests.mm +++ /dev/null @@ -1,52 +0,0 @@ -// -// ASWrapperSpecSnapshotTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - - -#import "ASLayoutSpecSnapshotTestsHelper.h" -#import - -@interface ASWrapperSpecSnapshotTests : ASLayoutSpecSnapshotTestCase -@end - -@implementation ASWrapperSpecSnapshotTests - -- (void)testWrapperSpecWithOneElementShouldSizeToElement -{ - ASDisplayNode *child = ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 50}); - - ASSizeRange sizeRange = ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY)); - [self testWithChildren:@[child] sizeRange:sizeRange identifier:nil]; -} - -- (void)testWrapperSpecWithMultipleElementsShouldSizeToLargestElement -{ - ASDisplayNode *firstChild = ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 50}); - ASDisplayNode *secondChild = ASDisplayNodeWithBackgroundColor([UIColor greenColor], {100, 100}); - - ASSizeRange sizeRange = ASSizeRangeMake(CGSizeZero, CGSizeMake(INFINITY, INFINITY)); - [self testWithChildren:@[secondChild, firstChild] sizeRange:sizeRange identifier:nil]; -} - -- (void)testWithChildren:(NSArray *)children sizeRange:(ASSizeRange)sizeRange identifier:(NSString *)identifier -{ - ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor whiteColor]); - - NSMutableArray *subnodes = [NSMutableArray arrayWithArray:children]; - [subnodes insertObject:backgroundNode atIndex:0]; - - ASLayoutSpec *layoutSpec = - [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild: - [ASWrapperLayoutSpec - wrapperWithLayoutElements:children] - background:backgroundNode]; - - [self testLayoutSpec:layoutSpec sizeRange:sizeRange subnodes:subnodes identifier:identifier]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/ArrayDiffingTests.mm b/submodules/AsyncDisplayKit/Tests/ArrayDiffingTests.mm deleted file mode 100644 index 5151449d79..0000000000 --- a/submodules/AsyncDisplayKit/Tests/ArrayDiffingTests.mm +++ /dev/null @@ -1,311 +0,0 @@ -// -// ArrayDiffingTests.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import - -@interface NSArray (ArrayDiffingTests) -- (NSIndexSet *)_asdk_commonIndexesWithArray:(NSArray *)array compareBlock:(BOOL (^)(id lhs, id rhs))comparison; -@end - -@interface ArrayDiffingTests : XCTestCase - -@end - -@implementation ArrayDiffingTests - -- (void)testDiffingCommonIndexes -{ - NSArray *tests = @[ - @[ - @[@"bob", @"alice", @"dave"], - @[@"bob", @"alice", @"dave", @"gary"], - @[@0, @1, @2] - ], - @[ - @[@"bob", @"alice", @"dave"], - @[@"bob", @"gary", @"dave"], - @[@0, @2] - ], - @[ - @[@"bob", @"alice"], - @[@"gary", @"dave"], - @[], - ], - @[ - @[@"bob", @"alice", @"dave"], - @[], - @[], - ], - @[ - @[], - @[@"bob", @"alice", @"dave"], - @[], - ], - ]; - - for (NSArray *test in tests) { - NSIndexSet *indexSet = [test[0] _asdk_commonIndexesWithArray:test[1] compareBlock:^BOOL(id lhs, id rhs) { - return [lhs isEqual:rhs]; - }]; - NSMutableIndexSet *mutableIndexSet = [indexSet mutableCopy]; - - for (NSNumber *index in (NSArray *)test[2]) { - XCTAssert([indexSet containsIndex:[index integerValue]]); - [mutableIndexSet removeIndex:[index integerValue]]; - } - - XCTAssert([mutableIndexSet count] == 0, @"Unaccounted deletions: %@", mutableIndexSet); - } -} - -- (void)testDiffingInsertionsAndDeletions { - NSArray *tests = @[ - @[ - @[@"bob", @"alice", @"dave"], - @[@"bob", @"alice", @"dave", @"gary"], - @[@3], - @[], - ], - @[ - @[@"a", @"b", @"c", @"d"], - @[@"d", @"c", @"b", @"a"], - @[@1, @2, @3], - @[@0, @1, @2], - ], - @[ - @[@"bob", @"alice", @"dave"], - @[@"bob", @"gary", @"alice", @"dave"], - @[@1], - @[], - ], - @[ - @[@"bob", @"alice", @"dave"], - @[@"bob", @"alice"], - @[], - @[@2], - ], - @[ - @[@"bob", @"alice", @"dave"], - @[], - @[], - @[@0, @1, @2], - ], - @[ - @[@"bob", @"alice", @"dave"], - @[@"gary", @"alice", @"dave", @"jack"], - @[@0, @3], - @[@0], - ], - @[ - @[@"bob", @"alice", @"dave", @"judy", @"lynda", @"tony"], - @[@"gary", @"bob", @"suzy", @"tony"], - @[@0, @2], - @[@1, @2, @3, @4], - ], - @[ - @[@"bob", @"alice", @"dave", @"judy"], - @[@"judy", @"dave", @"alice", @"bob"], - @[@1, @2, @3], - @[@0, @1, @2], - ], - ]; - - long n = 0; - for (NSArray *test in tests) { - NSIndexSet *insertions, *deletions; - [test[0] asdk_diffWithArray:test[1] insertions:&insertions deletions:&deletions]; - NSMutableIndexSet *mutableInsertions = [insertions mutableCopy]; - NSMutableIndexSet *mutableDeletions = [deletions mutableCopy]; - - for (NSNumber *index in (NSArray *)test[2]) { - XCTAssert([mutableInsertions containsIndex:[index integerValue]], @"Test #%ld: insertions %@ does not contain %@", - n, insertions, index); - [mutableInsertions removeIndex:[index integerValue]]; - } - for (NSNumber *index in (NSArray *)test[3]) { - XCTAssert([mutableDeletions containsIndex:[index integerValue]], @"Test #%ld: deletions %@ does not contain %@", - n, deletions, index - ); - [mutableDeletions removeIndex:[index integerValue]]; - } - - XCTAssert([mutableInsertions count] == 0, @"Test #%ld: Unaccounted insertions: %@", n, mutableInsertions); - XCTAssert([mutableDeletions count] == 0, @"Test #%ld: Unaccounted deletions: %@", n, mutableDeletions); - n++; - } -} - -- (void)testDiffingInsertsDeletesAndMoves -{ - NSArray *tests = @[ - @[ - @[@"a", @"b"], - @[@"b", @"a"], - @[], - @[], - @[[NSIndexPath indexPathWithIndexes:(NSUInteger[]) {1, 0} length:2], - [NSIndexPath indexPathWithIndexes:(NSUInteger[]) {0, 1} length:2] - ]], - @[ - @[@"bob", @"alice", @"dave"], - @[@"bob", @"alice", @"dave", @"gary"], - @[@3], - @[], - @[]], - @[ - @[@"a", @"b", @"c", @"d"], - @[@"d", @"c", @"b", @"a"], - @[], - @[], - @[[NSIndexPath indexPathWithIndexes:(NSUInteger[]){3, 0} length:2], - [NSIndexPath indexPathWithIndexes:(NSUInteger[]){2, 1} length:2], - [NSIndexPath indexPathWithIndexes:(NSUInteger[]){1, 2} length:2], - [NSIndexPath indexPathWithIndexes:(NSUInteger[]){0, 3} length:2] - ]], - @[ - @[@"bob", @"alice", @"dave"], - @[@"bob", @"gary", @"dave", @"alice"], - @[@1], - @[], - @[[NSIndexPath indexPathWithIndexes:(NSUInteger[]) {1, 3} length:2] - ]], - @[ - @[@"bob", @"alice", @"dave"], - @[@"bob", @"alice"], - @[], - @[@2], - @[]], - @[ - @[@"bob", @"alice", @"dave"], - @[], - @[], - @[@0, @1, @2], - @[]], - @[ - @[@"bob", @"alice", @"dave"], - @[@"gary", @"alice", @"dave", @"jack"], - @[@0, @3], - @[@0], - @[]], - @[ - @[@"bob", @"alice", @"dave", @"judy", @"lynda", @"tony"], - @[@"gary", @"bob", @"suzy", @"tony"], - @[@0, @2], - @[@1, @2, @3, @4], - @[[NSIndexPath indexPathWithIndexes:(NSUInteger[]){0, 1} length:2], - [NSIndexPath indexPathWithIndexes:(NSUInteger[]){5, 3} length:2] - ]], - @[ - @[@"bob", @"alice", @"dave", @"judy"], - @[@"judy", @"dave", @"alice", @"bob"], - @[], - @[], - @[[NSIndexPath indexPathWithIndexes:(NSUInteger[]){3, 0} length:2], - [NSIndexPath indexPathWithIndexes:(NSUInteger[]){2, 1} length:2], - [NSIndexPath indexPathWithIndexes:(NSUInteger[]){1, 2} length:2], - [NSIndexPath indexPathWithIndexes:(NSUInteger[]){0, 3} length:2] - ]] - - ]; - - long n = 0; - for (NSArray *test in tests) { - NSIndexSet *insertions, *deletions; - NSArray *moves; - [test[0] asdk_diffWithArray:test[1] insertions:&insertions deletions:&deletions moves:&moves]; - NSMutableIndexSet *mutableInsertions = [insertions mutableCopy]; - NSMutableIndexSet *mutableDeletions = [deletions mutableCopy]; - - for (NSNumber *index in (NSArray *) test[2]) { - XCTAssert([mutableInsertions containsIndex:[index integerValue]], @"Test #%ld, insertions does not contain %ld", - n, (long)[index integerValue]); - [mutableInsertions removeIndex:(NSUInteger) [index integerValue]]; - } - for (NSNumber *index in (NSArray *) test[3]) { - XCTAssert([mutableDeletions containsIndex:[index integerValue]], @"Test #%ld, deletions does not contain %ld", - n, (long)[index integerValue]); - [mutableDeletions removeIndex:(NSUInteger) [index integerValue]]; - } - - XCTAssert([mutableInsertions count] == 0, @"Test #%ld, Unaccounted insertions: %@", n, mutableInsertions); - XCTAssert([mutableDeletions count] == 0, @"Test #%ld, Unaccounted deletions: %@", n, mutableDeletions); - - XCTAssert([moves isEqual:test[4]], @"Test #%ld, %@ !isEqual: %@", n, moves, test[4]); - n++; - } -} - -- (void)testArrayDiffingRebuildingWithRandomElements -{ - NSArray *original = @[]; - NSArray *pending = @[]; - - NSIndexSet *insertions = nil; - NSIndexSet *deletions = nil; - NSArray *moves; - - for (int testNumber = 0; testNumber <= 25; testNumber++) { - int len = arc4random_uniform(10); - for (int j = 0; j < len; j++) { - original = [original arrayByAddingObject:@(arc4random_uniform(25))]; - } - len = arc4random_uniform(10); - for (int j = 0; j < len; j++) { - pending = [pending arrayByAddingObject:@(arc4random_uniform(25))]; - } - // Some sequences that presented issues in the past: - if (testNumber == 0) { - original = @[@20, @11, @14, @2, @14, @5, @4, @18, @0]; - pending = @[@9, @18, @18, @19, @20, @18, @22, @10, @3]; - } - if (testNumber == 1) { - original = @[@5, @9, @21, @11, @5, @9, @8]; - pending = @[@2, @12, @17, @19, @9, @1, @8, @5, @21]; - } - if (testNumber == 2) { - original = @[@14, @14, @12, @8, @20, @4, @0, @10]; - pending = @[@14]; - } - - [original asdk_diffWithArray:pending insertions:&insertions deletions:&deletions moves:&moves]; - - NSMutableArray *deletionsList = [NSMutableArray new]; - [deletions enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { - [deletionsList addObject:@(idx)]; - }]; - NSMutableArray *insertionsList = [NSMutableArray new]; - [insertions enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { - [insertionsList addObject:@(idx)]; - }]; - - NSUInteger i = 0; - NSUInteger j = 0; - NSMutableArray *test = [NSMutableArray new]; - for (NSUInteger count = 0; count < [pending count]; count++) { - if (i < [insertionsList count] && [insertionsList[i] unsignedIntegerValue] == count) { - [test addObject:pending[[insertionsList[i] unsignedIntegerValue]]]; - i++; - } else if (j < [moves count] && [moves[j] indexAtPosition:1] == count) { - [test addObject:original[[moves[j] indexAtPosition:0]]]; - j++; - } else { - [test addObject:original[count]]; - } - } - - XCTAssert([test isEqualToArray:pending], @"Did not mutate to expected new array:\n [%@] -> [%@], actual: [%@]\ninsertions: %@\nmoves: %@\ndeletions: %@", - [original componentsJoinedByString:@","], [pending componentsJoinedByString:@","], [test componentsJoinedByString:@","], - insertions, moves, deletions); - original = @[]; - pending = @[]; - } -} -@end diff --git a/submodules/AsyncDisplayKit/Tests/AsyncDisplayKitTests-Info.plist b/submodules/AsyncDisplayKit/Tests/AsyncDisplayKitTests-Info.plist deleted file mode 100644 index 169b6f710e..0000000000 --- a/submodules/AsyncDisplayKit/Tests/AsyncDisplayKitTests-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/submodules/AsyncDisplayKit/Tests/AsyncDisplayKitTests-Prefix.pch b/submodules/AsyncDisplayKit/Tests/AsyncDisplayKitTests-Prefix.pch deleted file mode 100644 index 625be4d28b..0000000000 --- a/submodules/AsyncDisplayKit/Tests/AsyncDisplayKitTests-Prefix.pch +++ /dev/null @@ -1,9 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#ifdef __OBJC__ - #import -#endif diff --git a/submodules/AsyncDisplayKit/Tests/Common/ASDisplayNode+OCMock.mm b/submodules/AsyncDisplayKit/Tests/Common/ASDisplayNode+OCMock.mm deleted file mode 100644 index 8776fd7bde..0000000000 --- a/submodules/AsyncDisplayKit/Tests/Common/ASDisplayNode+OCMock.mm +++ /dev/null @@ -1,27 +0,0 @@ -// -// ASDisplayNode+OCMock.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -/** - * For some reason, when creating partial mocks of nodes, OCMock fails to find - * these class methods that it swizzled! - */ -@implementation ASDisplayNode (OCMock) - -+ (Class)ocmock_replaced_viewClass -{ - return [_ASDisplayView class]; -} - -+ (Class)ocmock_replaced_layerClass -{ - return [_ASDisplayLayer class]; -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/Common/ASTestCase.h b/submodules/AsyncDisplayKit/Tests/Common/ASTestCase.h deleted file mode 100644 index 72fcd259f9..0000000000 --- a/submodules/AsyncDisplayKit/Tests/Common/ASTestCase.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// ASTestCase.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -// Not strictly necessary, but convenient -#import - -#import - -#import "OCMockObject+ASAdditions.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface ASTestCase : XCTestCase - -@property (class, nonatomic, nullable, readonly) ASTestCase *currentTestCase; - -@end - -NS_ASSUME_NONNULL_END diff --git a/submodules/AsyncDisplayKit/Tests/Common/ASTestCase.mm b/submodules/AsyncDisplayKit/Tests/Common/ASTestCase.mm deleted file mode 100644 index 30b42bde4c..0000000000 --- a/submodules/AsyncDisplayKit/Tests/Common/ASTestCase.mm +++ /dev/null @@ -1,109 +0,0 @@ -// -// ASTestCase.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASTestCase.h" -#import -#import -#import -#import "OCMockObject+ASAdditions.h" - -static __weak ASTestCase *currentTestCase; - -@implementation ASTestCase { - ASWeakSet *registeredMockObjects; -} - -- (void)setUp -{ - [super setUp]; - currentTestCase = self; - registeredMockObjects = [ASWeakSet new]; -} - -- (void)tearDown -{ - [ASConfigurationManager test_resetWithConfiguration:nil]; - - // Clear out all application windows. Note: the system will retain these sometimes on its - // own but we'll do our best. - for (UIWindow *window in [UIApplication sharedApplication].windows) { - [window resignKeyWindow]; - window.hidden = YES; - window.rootViewController = nil; - for (UIView *view in window.subviews) { - [view removeFromSuperview]; - } - } - - // Set nil for all our subclasses' ivars. Use setValue:forKey: so memory is managed correctly. - // This is important to do _inside_ the test-perform, so that we catch any issues caused by the - // deallocation, and so that we're inside the @autoreleasepool for the test invocation. - Class c = [self class]; - while (c != [ASTestCase class]) { - unsigned int ivarCount; - Ivar *ivars = class_copyIvarList(c, &ivarCount); - for (unsigned int i = 0; i < ivarCount; i++) { - Ivar ivar = ivars[i]; - NSString *key = [NSString stringWithCString:ivar_getName(ivar) encoding:NSUTF8StringEncoding]; - if (OCMIsObjectType(ivar_getTypeEncoding(ivar))) { - [self setValue:nil forKey:key]; - } - } - if (ivars) { - free(ivars); - } - - c = [c superclass]; - } - - for (OCMockObject *mockObject in registeredMockObjects) { - OCMVerifyAll(mockObject); - [mockObject stopMocking]; - - // Invocations retain arguments, which may cause retain cycles. - // Manually clear them all out. - NSMutableArray *invocations = object_getIvar(mockObject, class_getInstanceVariable(OCMockObject.class, "invocations")); - [invocations removeAllObjects]; - } - - // Go ahead and spin the run loop before finishing, so the system - // unregisters/cleans up whatever possible. - [NSRunLoop.mainRunLoop runMode:NSDefaultRunLoopMode beforeDate:NSDate.distantPast]; - - [super tearDown]; -} - -- (void)invokeTest -{ - // This will call setup, run, then teardown. - @autoreleasepool { - [super invokeTest]; - } - - // Now that the autorelease pool is drained, drain the dealloc queue also. - [[ASDeallocQueue sharedDeallocationQueue] drain]; -} - -+ (ASTestCase *)currentTestCase -{ - return currentTestCase; -} - -@end - -@implementation ASTestCase (OCMockObjectRegistering) - -- (void)registerMockObject:(id)mockObject -{ - @synchronized (registeredMockObjects) { - [registeredMockObjects addObject:mockObject]; - } -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/Common/ASXCTExtensions.h b/submodules/AsyncDisplayKit/Tests/Common/ASXCTExtensions.h deleted file mode 100644 index 2d882f922a..0000000000 --- a/submodules/AsyncDisplayKit/Tests/Common/ASXCTExtensions.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// ASXCTExtensions.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#define ASXCTAssertEqualSizes(s0, s1, ...) \ - _XCTPrimitiveAssertEqualObjects(self, NSStringFromCGSize(s0), @#s0, NSStringFromCGSize(s1), @#s1, __VA_ARGS__) - -#define ASXCTAssertNotEqualSizes(s0, s1, ...) \ - _XCTPrimitiveAssertNotEqualObjects(self, NSStringFromCGSize(s0), @#s0, NSStringFromCGSize(s1), @#s1, __VA_ARGS__) - -#define ASXCTAssertEqualPoints(p0, p1, ...) \ - _XCTPrimitiveAssertEqualObjects(self, NSStringFromCGPoint(p0), @#p0, NSStringFromCGPoint(p1), @#p1, __VA_ARGS__) - -#define ASXCTAssertNotEqualPoints(p0, p1, ...) \ - _XCTPrimitiveAssertNotEqualObjects(self, NSStringFromCGPoint(p0), @#p0, NSStringFromCGPoint(p1), @#p1, __VA_ARGS__) - -#define ASXCTAssertEqualRects(r0, r1, ...) \ - _XCTPrimitiveAssertEqualObjects(self, NSStringFromCGRect(r0), @#r0, NSStringFromCGRect(r1), @#r1, __VA_ARGS__) - -#define ASXCTAssertNotEqualRects(r0, r1, ...) \ - _XCTPrimitiveAssertNotEqualObjects(self, NSStringFromCGRect(r0), @#r0, NSStringFromCGRect(r1), @#r1, __VA_ARGS__) - -#define ASXCTAssertEqualDimensions(r0, r1, ...) \ - _XCTPrimitiveAssertEqualObjects(self, NSStringFromASDimension(r0), @#r0, NSStringFromASDimension(r1), @#r1, __VA_ARGS__) - -#define ASXCTAssertNotEqualDimensions(r0, r1, ...) \ - _XCTPrimitiveAssertNotEqualObjects(self, NSStringFromASDimension(r0), @#r0, NSStringFromASDimension(r1), @#r1, __VA_ARGS__) - -#define ASXCTAssertEqualSizeRanges(r0, r1, ...) \ - _XCTPrimitiveAssertEqualObjects(self, NSStringFromASSizeRange(r0), @#r0, NSStringFromASSizeRange(r1), @#r1, __VA_ARGS__) diff --git a/submodules/AsyncDisplayKit/Tests/Common/NSInvocation+ASTestHelpers.h b/submodules/AsyncDisplayKit/Tests/Common/NSInvocation+ASTestHelpers.h deleted file mode 100644 index 3248cdd283..0000000000 --- a/submodules/AsyncDisplayKit/Tests/Common/NSInvocation+ASTestHelpers.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// NSInvocation+ASTestHelpers.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSInvocation (ASTestHelpers) - -/** - * Formats the argument at the given index as an object and returns it. - * - * Currently only supports arguments that are themselves objects, but handles - * getting the argument into ARC safely. - */ -- (nullable id)as_argumentAtIndexAsObject:(NSInteger)index; - -/** - * Sets the return value, simulating ARC behavior. - * - * Currently only supports invocations whose return values are already object types. - */ -- (void)as_setReturnValueWithObject:(nullable id)object; - -@end - -NS_ASSUME_NONNULL_END diff --git a/submodules/AsyncDisplayKit/Tests/Common/NSInvocation+ASTestHelpers.mm b/submodules/AsyncDisplayKit/Tests/Common/NSInvocation+ASTestHelpers.mm deleted file mode 100644 index dc5a4279f7..0000000000 --- a/submodules/AsyncDisplayKit/Tests/Common/NSInvocation+ASTestHelpers.mm +++ /dev/null @@ -1,32 +0,0 @@ -// -// NSInvocation+ASTestHelpers.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "NSInvocation+ASTestHelpers.h" - -@implementation NSInvocation (ASTestHelpers) - -- (id)as_argumentAtIndexAsObject:(NSInteger)index -{ - void *buf; - [self getArgument:&buf atIndex:index]; - return (__bridge id)buf; -} - -- (void)as_setReturnValueWithObject:(id)object -{ - if (object == nil) { - const void *fixedBuf = NULL; - [self setReturnValue:&fixedBuf]; - } else { - // Retain, then autorelease. - const void *fixedBuf = CFAutorelease((__bridge_retained void *)object); - [self setReturnValue:&fixedBuf]; - } -} - -@end diff --git a/submodules/AsyncDisplayKit/Tests/Common/OCMockObject+ASAdditions.h b/submodules/AsyncDisplayKit/Tests/Common/OCMockObject+ASAdditions.h deleted file mode 100644 index 2ad99e676e..0000000000 --- a/submodules/AsyncDisplayKit/Tests/Common/OCMockObject+ASAdditions.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// OCMockObject+ASAdditions.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface OCMockObject (ASAdditions) - -/** - * NOTE: All OCMockObjects created during an ASTestCase call OCMVerifyAll during -tearDown. - */ - -/** - * A method to manually specify which optional protocol methods should return YES - * from -respondsToSelector:. - * - * If you don't call this method, the default OCMock behavior is to - * "implement" all optional protocol methods, which makes it impossible to - * test scenarios where only a subset of optional protocol methods are implemented. - * - * You should only call this on protocol mocks. - */ -- (void)addImplementedOptionalProtocolMethods:(SEL)aSelector, ... NS_REQUIRES_NIL_TERMINATION; - -/// An optional block to modify description text. Only used in OCClassMockObject currently. -@property NSString *(^modifyDescriptionBlock)(OCMockObject *object, NSString *baseDescription); - -@end - -/** - * Additional stub recorders useful in ASDK. - */ -@interface OCMStubRecorder (ASProperties) - -/** - * Add a debug-break side effect to this stub/expectation. - * - * You will usually need to jump to frame 12 "fr s 12" - */ -#define andDebugBreak() _andDebugBreak() -@property (nonatomic, readonly) OCMStubRecorder *(^ _andDebugBreak)(void); - -#define ignoringNonObjectArgs() _ignoringNonObjectArgs() -@property (nonatomic, readonly) OCMStubRecorder *(^ _ignoringNonObjectArgs)(void); - -#define onMainThread() _onMainThread() -@property (nonatomic, readonly) OCMStubRecorder *(^ _onMainThread)(void); - -#define offMainThread() _offMainThread() -@property (nonatomic, readonly) OCMStubRecorder *(^ _offMainThread)(void); - -@end diff --git a/submodules/AsyncDisplayKit/Tests/Common/OCMockObject+ASAdditions.mm b/submodules/AsyncDisplayKit/Tests/Common/OCMockObject+ASAdditions.mm deleted file mode 100644 index e6d3f711d3..0000000000 --- a/submodules/AsyncDisplayKit/Tests/Common/OCMockObject+ASAdditions.mm +++ /dev/null @@ -1,237 +0,0 @@ -// -// OCMockObject+ASAdditions.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "OCMockObject+ASAdditions.h" - -#import -#import -#import "ASTestCase.h" -#import -#import "debugbreak.h" - -@interface ASTestCase (OCMockObjectRegistering) - -- (void)registerMockObject:(id)mockObject; - -@end - -@implementation OCMockObject (ASAdditions) - -+ (void)load -{ - // [OCProtocolMockObject respondsToSelector:] <-> [(self) swizzled_protocolMockRespondsToSelector:] - Method orig = class_getInstanceMethod(OCMockObject.protocolMockObjectClass, @selector(respondsToSelector:)); - Method newMethod = class_getInstanceMethod(self, @selector(swizzled_protocolMockRespondsToSelector:)); - method_exchangeImplementations(orig, newMethod); - - // init <-> swizzled_init - { - Method origInit = class_getInstanceMethod([OCMockObject class], @selector(init)); - Method newInit = class_getInstanceMethod(self, @selector(swizzled_init)); - method_exchangeImplementations(origInit, newInit); - } - - // (class mock) description <-> swizzled_classMockDescription - { - Method orig = class_getInstanceMethod(OCMockObject.classMockObjectClass, @selector(description)); - Method newMethod = class_getInstanceMethod(self, @selector(swizzled_classMockDescription)); - method_exchangeImplementations(orig, newMethod); - } -} - -/// Since OCProtocolMockObject is private, use this method to get the class. -+ (Class)protocolMockObjectClass -{ - static Class c; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - c = NSClassFromString(@"OCProtocolMockObject"); - NSAssert(c != Nil, nil); - }); - return c; -} - -/// Since OCClassMockObject is private, use this method to get the class. -+ (Class)classMockObjectClass -{ - static Class c; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - c = NSClassFromString(@"OCClassMockObject"); - NSAssert(c != Nil, nil); - }); - return c; -} - -/// Whether the user has opted-in to specify which optional methods are implemented for this object. -- (BOOL)hasSpecifiedOptionalProtocolMethods -{ - return objc_getAssociatedObject(self, @selector(optionalImplementedMethods)) != nil; -} - -/// The optional protocol selectors the user has added via -addImplementedOptionalProtocolMethods: -- (NSMutableSet *)optionalImplementedMethods -{ - NSMutableSet *result = objc_getAssociatedObject(self, _cmd); - if (result == nil) { - result = [NSMutableSet set]; - objc_setAssociatedObject(self, _cmd, result, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - return result; -} - -- (void)addImplementedOptionalProtocolMethods:(SEL)aSelector, ... -{ - // Can't use isKindOfClass: since we're a proxy. - NSAssert(object_getClass(self) == OCMockObject.protocolMockObjectClass, @"Cannot call this method on non-protocol mocks."); - NSMutableSet *methods = self.optionalImplementedMethods; - - // First arg is not returned by va_arg, needs to be handled separately. - if (aSelector != NULL) { - [methods addObject:NSStringFromSelector(aSelector)]; - } - - va_list args; - va_start(args, aSelector); - SEL s; - while((s = va_arg(args, SEL))) - { - [methods addObject:NSStringFromSelector(s)]; - } - va_end(args); -} - -- (BOOL)implementsOptionalProtocolMethod:(SEL)aSelector -{ - NSAssert(self.hasSpecifiedOptionalProtocolMethods, @"Shouldn't call this method if the user hasn't opted-in to specifying optional protocol methods."); - - // Check our collection first. It'll be in here if they explicitly marked the method as implemented. - for (NSString *str in self.optionalImplementedMethods) { - if (sel_isEqual(NSSelectorFromString(str), aSelector)) { - return YES; - } - } - - // If they didn't explicitly mark it implemented, check if they stubbed/expected it. That counts too, but - // we still want them to have the option to declare that the method exists without - // stubbing it or making an expectation, so the rest of OCMock's mechanisms work as expected. - return [self handleSelector:aSelector]; -} - -- (BOOL)swizzled_protocolMockRespondsToSelector:(SEL)aSelector -{ - // Can't use isKindOfClass: since we're a proxy. - NSAssert(object_getClass(self) == OCMockObject.protocolMockObjectClass, @"Swizzled method should only ever be called for protocol mocks."); - - // If they haven't called our public method to opt-in, use the default behavior. - if (!self.hasSpecifiedOptionalProtocolMethods) { - return [self swizzled_protocolMockRespondsToSelector:aSelector]; - } - - Ivar i = class_getInstanceVariable([self class], "mockedProtocol"); - NSAssert(i != NULL, nil); - Protocol *mockedProtocol = object_getIvar(self, i); - NSAssert(mockedProtocol != NULL, nil); - - // Check if it's an optional protocol method. If not, just return the default implementation (which has now swapped). - struct objc_method_description methodDescription; - methodDescription = protocol_getMethodDescription(mockedProtocol, aSelector, NO, YES); - if (methodDescription.name == NULL) { - methodDescription = protocol_getMethodDescription(mockedProtocol, aSelector, NO, NO); - if (methodDescription.name == NULL) { - return [self swizzled_protocolMockRespondsToSelector:aSelector]; - } - } - - // It's an optional instance or class method. Override the return value. - return [self implementsOptionalProtocolMethod:aSelector]; -} - -// Whenever a mock object is initted, register it with the current test case -// so that it gets verified and its invocations are cleared during -tearDown. -- (instancetype)swizzled_init -{ - [self swizzled_init]; - [ASTestCase.currentTestCase registerMockObject:self]; - return self; -} - -- (NSString *)swizzled_classMockDescription -{ - NSString *orig = [self swizzled_classMockDescription]; - __auto_type block = self.modifyDescriptionBlock; - if (block) { - return block(self, orig); - } - return orig; -} - -- (void)setModifyDescriptionBlock:(NSString *(^)(OCMockObject *, NSString *))modifyDescriptionBlock -{ - objc_setAssociatedObject(self, @selector(modifyDescriptionBlock), modifyDescriptionBlock, OBJC_ASSOCIATION_COPY); -} - -- (NSString *(^)(OCMockObject *, NSString *))modifyDescriptionBlock -{ - return objc_getAssociatedObject(self, _cmd); -} - -@end - -@implementation OCMStubRecorder (ASProperties) - -@dynamic _ignoringNonObjectArgs; - -- (OCMStubRecorder *(^)(void))_ignoringNonObjectArgs -{ - id (^theBlock)(void) = ^ () - { - return [self ignoringNonObjectArgs]; - }; - return theBlock; -} - -@dynamic _onMainThread; - -- (OCMStubRecorder *(^)(void))_onMainThread -{ - id (^theBlock)(void) = ^ () - { - return [self andDo:^(NSInvocation *invocation) { - ASDisplayNodeAssertMainThread(); - }]; - }; - return theBlock; -} - -@dynamic _offMainThread; - -- (OCMStubRecorder *(^)(void))_offMainThread -{ - id (^theBlock)(void) = ^ () - { - return [self andDo:^(NSInvocation *invocation) { - ASDisplayNodeAssertNotMainThread(); - }]; - }; - return theBlock; -} - -@dynamic _andDebugBreak; - -- (OCMStubRecorder *(^)(void))_andDebugBreak -{ - id (^theBlock)(void) = ^ () - { - return [self andDo:^(NSInvocation *invocation) { - debug_break(); - }]; - }; - return theBlock; -} -@end diff --git a/submodules/AsyncDisplayKit/Tests/Common/debugbreak.h b/submodules/AsyncDisplayKit/Tests/Common/debugbreak.h deleted file mode 100644 index 96f1e9e59a..0000000000 --- a/submodules/AsyncDisplayKit/Tests/Common/debugbreak.h +++ /dev/null @@ -1,142 +0,0 @@ -// -// debugbreak.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -/* Copyright (c) 2011-2015, Scott Tsai - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef DEBUG_BREAK_H -#define DEBUG_BREAK_H - -#ifdef _MSC_VER - -#define debug_break __debugbreak - -#else - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -enum { - /* gcc optimizers consider code after __builtin_trap() dead. - * Making __builtin_trap() unsuitable for breaking into the debugger */ - DEBUG_BREAK_PREFER_BUILTIN_TRAP_TO_SIGTRAP = 0, -}; - -#if defined(__i386__) || defined(__x86_64__) -enum { HAVE_TRAP_INSTRUCTION = 1, }; -__attribute__((gnu_inline, always_inline)) -__inline__ static void trap_instruction(void) -{ - __asm__ volatile("int $0x03"); -} -#elif defined(__thumb__) -enum { HAVE_TRAP_INSTRUCTION = 1, }; -/* FIXME: handle __THUMB_INTERWORK__ */ -__attribute__((gnu_inline, always_inline)) -__inline__ static void trap_instruction(void) -{ - /* See 'arm-linux-tdep.c' in GDB source. - * Both instruction sequences below work. */ -#if 1 - /* 'eabi_linux_thumb_le_breakpoint' */ - __asm__ volatile(".inst 0xde01"); -#else - /* 'eabi_linux_thumb2_le_breakpoint' */ - __asm__ volatile(".inst.w 0xf7f0a000"); -#endif - - /* Known problem: - * After a breakpoint hit, can't stepi, step, or continue in GDB. - * 'step' stuck on the same instruction. - * - * Workaround: a new GDB command, - * 'debugbreak-step' is defined in debugbreak-gdb.py - * that does: - * (gdb) set $instruction_len = 2 - * (gdb) tbreak *($pc + $instruction_len) - * (gdb) jump *($pc + $instruction_len) - */ -} -#elif defined(__arm__) && !defined(__thumb__) -enum { HAVE_TRAP_INSTRUCTION = 1, }; -__attribute__((gnu_inline, always_inline)) -__inline__ static void trap_instruction(void) -{ - /* See 'arm-linux-tdep.c' in GDB source, - * 'eabi_linux_arm_le_breakpoint' */ - __asm__ volatile(".inst 0xe7f001f0"); - /* Has same known problem and workaround - * as Thumb mode */ -} -#elif defined(__aarch64__) -enum { HAVE_TRAP_INSTRUCTION = 1, }; -__attribute__((gnu_inline, always_inline)) -__inline__ static void trap_instruction(void) -{ - /* See 'aarch64-tdep.c' in GDB source, - * 'aarch64_default_breakpoint' */ - __asm__ volatile(".inst 0xd4200000"); -} -#else -enum { HAVE_TRAP_INSTRUCTION = 0, }; -#endif - -__attribute__((gnu_inline, always_inline)) -__inline__ static void debug_break(void) -{ - if (HAVE_TRAP_INSTRUCTION) { - trap_instruction(); - } else if (DEBUG_BREAK_PREFER_BUILTIN_TRAP_TO_SIGTRAP) { - /* raises SIGILL on Linux x86{,-64}, to continue in gdb: - * (gdb) handle SIGILL stop nopass - * */ - __builtin_trap(); - } else { - #ifdef _WIN32 - /* SIGTRAP available only on POSIX-compliant operating systems - * use builtin trap instead */ - __builtin_trap(); - #else - raise(SIGTRAP); - #endif - } -} - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASAbsoluteLayoutSpecSnapshotTests/testChildrenMeasuredWithAutoMaxSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASAbsoluteLayoutSpecSnapshotTests/testChildrenMeasuredWithAutoMaxSize@2x.png deleted file mode 100644 index 2b60cf2bcf..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASAbsoluteLayoutSpecSnapshotTests/testChildrenMeasuredWithAutoMaxSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASAbsoluteLayoutSpecSnapshotTests/testSizingBehaviour_overflowChildren@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASAbsoluteLayoutSpecSnapshotTests/testSizingBehaviour_overflowChildren@2x.png deleted file mode 100644 index 1687dc24f6..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASAbsoluteLayoutSpecSnapshotTests/testSizingBehaviour_overflowChildren@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASAbsoluteLayoutSpecSnapshotTests/testSizingBehaviour_underflowChildren@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASAbsoluteLayoutSpecSnapshotTests/testSizingBehaviour_underflowChildren@2x.png deleted file mode 100644 index 2233813979..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASAbsoluteLayoutSpecSnapshotTests/testSizingBehaviour_underflowChildren@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASAbsoluteLayoutSpecSnapshotTests/testSizingBehaviour_wrappedChildren@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASAbsoluteLayoutSpecSnapshotTests/testSizingBehaviour_wrappedChildren@2x.png deleted file mode 100644 index 3d76853c01..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASAbsoluteLayoutSpecSnapshotTests/testSizingBehaviour_wrappedChildren@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASBackgroundLayoutSpecSnapshotTests/testBackground@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASBackgroundLayoutSpecSnapshotTests/testBackground@2x.png deleted file mode 100644 index 198e5394cc..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASBackgroundLayoutSpecSnapshotTests/testBackground@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testMinimumSizeRangeIsGivenToChildWhenNotCentering@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testMinimumSizeRangeIsGivenToChildWhenNotCentering@2x.png deleted file mode 100644 index 02717f8fdb..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testMinimumSizeRangeIsGivenToChildWhenNotCentering@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithOptions@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithOptions@2x.png deleted file mode 100644 index 50cb613c24..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithOptions@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithOptions_CenteringX@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithOptions_CenteringX@2x.png deleted file mode 100644 index 69e7392384..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithOptions_CenteringX@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithOptions_CenteringXCenteringY@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithOptions_CenteringXCenteringY@2x.png deleted file mode 100644 index 311ef9ed32..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithOptions_CenteringXCenteringY@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithOptions_CenteringY@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithOptions_CenteringY@2x.png deleted file mode 100644 index 28036afad5..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithOptions_CenteringY@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithSizingOptions@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithSizingOptions@2x.png deleted file mode 100644 index 50cb613c24..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithSizingOptions@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumX@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumX@2x.png deleted file mode 100644 index 270b15feb6..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumX@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumXSizingMinimumY@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumXSizingMinimumY@2x.png deleted file mode 100644 index 7fddbff94e..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumXSizingMinimumY@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumY@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumY@2x.png deleted file mode 100644 index b14c267b42..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASCenterLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumY@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASDisplayNodeSnapshotTests/testBasicHierarchySnapshotTesting@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASDisplayNodeSnapshotTests/testBasicHierarchySnapshotTesting@2x.png deleted file mode 100644 index e5f40f70fd..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASDisplayNodeSnapshotTests/testBasicHierarchySnapshotTesting@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testForcedScaling_first@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testForcedScaling_first@2x.png deleted file mode 100644 index 896dc7abf0..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testForcedScaling_first@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testForcedScaling_second@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testForcedScaling_second@2x.png deleted file mode 100644 index 79d4c747d8..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testForcedScaling_second@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testRenderLogoSquare@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testRenderLogoSquare@2x.png deleted file mode 100644 index 896dc7abf0..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testRenderLogoSquare@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testRoundedCornerBlock@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testRoundedCornerBlock@2x.png deleted file mode 100644 index b4c17dd803..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testRoundedCornerBlock@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testTintColorBlock@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testTintColorBlock@2x.png deleted file mode 100644 index 0cc74697a6..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASImageNodeSnapshotTests/testTintColorBlock@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-10-10-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-10-10-10@2x.png deleted file mode 100644 index ec0a4cf3c7..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-10-10-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-10-10-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-10-10-inf@2x.png deleted file mode 100644 index fb4775c0f5..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-10-10-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-10-inf-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-10-inf-10@2x.png deleted file mode 100644 index 993d4c0592..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-10-inf-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-10-inf-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-10-inf-inf@2x.png deleted file mode 100644 index d0b2cbd912..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-10-inf-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-inf-10-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-inf-10-10@2x.png deleted file mode 100644 index 537326b3db..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-inf-10-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-inf-10-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-inf-10-inf@2x.png deleted file mode 100644 index b38c9ccb1c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-inf-10-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-inf-inf-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-inf-inf-10@2x.png deleted file mode 100644 index 797e7ac410..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-inf-inf-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-inf-inf-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-inf-inf-inf@2x.png deleted file mode 100644 index 8c88149380..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_10-inf-inf-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-10-10-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-10-10-10@2x.png deleted file mode 100644 index f9decf0282..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-10-10-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-10-10-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-10-10-inf@2x.png deleted file mode 100644 index e3efdda0a1..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-10-10-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-10-inf-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-10-inf-10@2x.png deleted file mode 100644 index f494863bc7..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-10-inf-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-10-inf-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-10-inf-inf@2x.png deleted file mode 100644 index 5653f7f6fc..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-10-inf-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-inf-10-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-inf-10-10@2x.png deleted file mode 100644 index 5fa79d8a92..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-inf-10-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-inf-10-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-inf-10-inf@2x.png deleted file mode 100644 index bece9190a6..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-inf-10-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-inf-inf-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-inf-inf-10@2x.png deleted file mode 100644 index e8132c50b9..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-inf-inf-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-inf-inf-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-inf-inf-inf@2x.png deleted file mode 100644 index 6da1b998c0..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithFixedSize_inf-inf-inf-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-0-0-0@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-0-0-0@2x.png deleted file mode 100644 index 5104ab98be..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-0-0-0@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-0-0-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-0-0-inf@2x.png deleted file mode 100644 index 8ac22fa361..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-0-0-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-0-inf-0@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-0-inf-0@2x.png deleted file mode 100644 index 2054fac7ea..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-0-inf-0@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-0-inf-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-0-inf-inf@2x.png deleted file mode 100644 index d09eb720c8..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-0-inf-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-inf-0-0@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-inf-0-0@2x.png deleted file mode 100644 index 8fe02d548d..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-inf-0-0@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-inf-0-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-inf-0-inf@2x.png deleted file mode 100644 index 21f8ad6169..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-inf-0-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-inf-inf-0@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-inf-inf-0@2x.png deleted file mode 100644 index a77ce6a0c9..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-inf-inf-0@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-inf-inf-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-inf-inf-inf@2x.png deleted file mode 100644 index c4e1791769..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_0-inf-inf-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-0-0-0@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-0-0-0@2x.png deleted file mode 100644 index 19f457874e..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-0-0-0@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-0-0-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-0-0-inf@2x.png deleted file mode 100644 index 81a07b2570..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-0-0-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-0-inf-0@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-0-inf-0@2x.png deleted file mode 100644 index 31422ea5d7..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-0-inf-0@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-0-inf-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-0-inf-inf@2x.png deleted file mode 100644 index 63cff77a6f..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-0-inf-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-inf-0-0@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-inf-0-0@2x.png deleted file mode 100644 index 1c55fe57ed..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-inf-0-0@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-inf-0-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-inf-0-inf@2x.png deleted file mode 100644 index 5d0bfee89e..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-inf-0-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-inf-inf-0@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-inf-inf-0@2x.png deleted file mode 100644 index 2b6430c5b5..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-inf-inf-0@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-inf-inf-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-inf-inf-inf@2x.png deleted file mode 100644 index 6da1b998c0..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithInfinityAndZeroInsetValue_inf-inf-inf-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-10-10-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-10-10-10@2x.png deleted file mode 100644 index c9255d62e8..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-10-10-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-10-10-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-10-10-inf@2x.png deleted file mode 100644 index db62499472..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-10-10-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-10-inf-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-10-inf-10@2x.png deleted file mode 100644 index 2b052c4e38..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-10-inf-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-10-inf-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-10-inf-inf@2x.png deleted file mode 100644 index d0b2cbd912..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-10-inf-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-inf-10-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-inf-10-10@2x.png deleted file mode 100644 index 69368ee671..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-inf-10-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-inf-10-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-inf-10-inf@2x.png deleted file mode 100644 index 55efcf5dba..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-inf-10-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-inf-inf-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-inf-inf-10@2x.png deleted file mode 100644 index 797e7ac410..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-inf-inf-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-inf-inf-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-inf-inf-inf@2x.png deleted file mode 100644 index 8c88149380..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_10-inf-inf-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-10-10-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-10-10-10@2x.png deleted file mode 100644 index 01411e3f2c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-10-10-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-10-10-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-10-10-inf@2x.png deleted file mode 100644 index e3efdda0a1..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-10-10-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-10-inf-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-10-inf-10@2x.png deleted file mode 100644 index f0cd235628..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-10-inf-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-10-inf-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-10-inf-inf@2x.png deleted file mode 100644 index 5653f7f6fc..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-10-inf-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-inf-10-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-inf-10-10@2x.png deleted file mode 100644 index 5fa79d8a92..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-inf-10-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-inf-10-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-inf-10-inf@2x.png deleted file mode 100644 index bece9190a6..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-inf-10-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-inf-inf-10@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-inf-inf-10@2x.png deleted file mode 100644 index e8132c50b9..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-inf-inf-10@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-inf-inf-inf@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-inf-inf-inf@2x.png deleted file mode 100644 index 6da1b998c0..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASInsetLayoutSpecSnapshotTests/testInsetsWithVariableSize_inf-inf-inf-inf@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASOverlayLayoutSpecSnapshotTests/testOverlay@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASOverlayLayoutSpecSnapshotTests/testOverlay@2x.png deleted file mode 100644 index 198e5394cc..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASOverlayLayoutSpecSnapshotTests/testOverlay@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRatioLayoutSpecSnapshotTests/testRatioLayout_DoubleRatio@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRatioLayoutSpecSnapshotTests/testRatioLayout_DoubleRatio@2x.png deleted file mode 100644 index a10ef96975..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRatioLayoutSpecSnapshotTests/testRatioLayout_DoubleRatio@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRatioLayoutSpecSnapshotTests/testRatioLayout_HalfRatio@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRatioLayoutSpecSnapshotTests/testRatioLayout_HalfRatio@2x.png deleted file mode 100644 index 0cbc831393..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRatioLayoutSpecSnapshotTests/testRatioLayout_HalfRatio@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRatioLayoutSpecSnapshotTests/testRatioLayout_SevenTimesRatio@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRatioLayoutSpecSnapshotTests/testRatioLayout_SevenTimesRatio@2x.png deleted file mode 100644 index 48be1e63a7..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRatioLayoutSpecSnapshotTests/testRatioLayout_SevenTimesRatio@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRatioLayoutSpecSnapshotTests/testRatioLayout_TenTimesRatioWithItemTooBig@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRatioLayoutSpecSnapshotTests/testRatioLayout_TenTimesRatioWithItemTooBig@2x.png deleted file mode 100644 index ce593f7ad7..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRatioLayoutSpecSnapshotTests/testRatioLayout_TenTimesRatioWithItemTooBig@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testMinimumSizeRangeIsGivenToChildWhenNotPositioning@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testMinimumSizeRangeIsGivenToChildWhenNotPositioning@2x.png deleted file mode 100644 index 02717f8fdb..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testMinimumSizeRangeIsGivenToChildWhenNotPositioning@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions@2x.png deleted file mode 100644 index 1192d72e8d..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterX@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterX@2x.png deleted file mode 100644 index e2c7e8266b..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterX@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXCenterY@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXCenterY@2x.png deleted file mode 100644 index 311ef9ed32..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXCenterY@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXEndY@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXEndY@2x.png deleted file mode 100644 index 385fc3e817..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXEndY@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterY@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterY@2x.png deleted file mode 100644 index 94db1b131f..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterY@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndX@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndX@2x.png deleted file mode 100644 index e464619571..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndX@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndXCenterY@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndXCenterY@2x.png deleted file mode 100644 index 04ee2d6115..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndXCenterY@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndXEndY@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndXEndY@2x.png deleted file mode 100644 index 3d9d16b5d2..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndXEndY@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndY@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndY@2x.png deleted file mode 100644 index 8ba7270db2..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndY@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions@2x.png deleted file mode 100644 index 1192d72e8d..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumHeight@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumHeight@2x.png deleted file mode 100644 index 467bb6fa8c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumHeight@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidth@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidth@2x.png deleted file mode 100644 index 8e9c66caa1..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidth@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidthSizingMinimumHeight@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidthSizingMinimumHeight@2x.png deleted file mode 100644 index ddafb41db7..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidthSizingMinimumHeight@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignCenterWithFlexedMainDimension@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignCenterWithFlexedMainDimension@2x.png deleted file mode 100644 index ea22b081a8..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignCenterWithFlexedMainDimension@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignCenterWithIndefiniteCrossDimension@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignCenterWithIndefiniteCrossDimension@2x.png deleted file mode 100644 index 00b3bfb369..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignCenterWithIndefiniteCrossDimension@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentCenter@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentCenter@2x.png deleted file mode 100644 index 188cd6007e..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentCenter@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentEnd@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentEnd@2x.png deleted file mode 100644 index 18f614cf47..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentEnd@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentSpaceAround@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentSpaceAround@2x.png deleted file mode 100644 index 188cd6007e..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentSpaceAround@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentSpaceBetween@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentSpaceBetween@2x.png deleted file mode 100644 index 20d303b586..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentSpaceBetween@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentStart@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentStart@2x.png deleted file mode 100644 index 20d303b586..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingOverflow_alignContentStart@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentCenter@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentCenter@2x.png deleted file mode 100644 index 27b26426db..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentCenter@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentEnd@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentEnd@2x.png deleted file mode 100644 index 740100fce2..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentEnd@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentSpaceAround@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentSpaceAround@2x.png deleted file mode 100644 index 40bae9ef39..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentSpaceAround@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentSpaceBetween@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentSpaceBetween@2x.png deleted file mode 100644 index a60f63f145..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentSpaceBetween@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentStart@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentStart@2x.png deleted file mode 100644 index a89a941bf1..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentStart@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentStretch@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentStretch@2x.png deleted file mode 100644 index 461c786922..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentAndLineSpacingUnderflow_alignContentStretch@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentCenter@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentCenter@2x.png deleted file mode 100644 index 032e9fac3a..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentCenter@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentEnd@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentEnd@2x.png deleted file mode 100644 index 6d08d18e4a..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentEnd@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentSpaceAround@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentSpaceAround@2x.png deleted file mode 100644 index 032e9fac3a..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentSpaceAround@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentSpaceBetween@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentSpaceBetween@2x.png deleted file mode 100644 index 4df2a81184..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentSpaceBetween@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentStart@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentStart@2x.png deleted file mode 100644 index 4df2a81184..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentOverflow_alignContentStart@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentStretchAndOtherAlignments@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentStretchAndOtherAlignments@2x.png deleted file mode 100644 index 51d060062c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentStretchAndOtherAlignments@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentCenter@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentCenter@2x.png deleted file mode 100644 index fea7203a26..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentCenter@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentEnd@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentEnd@2x.png deleted file mode 100644 index 9e0bdad429..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentEnd@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentSpaceAround@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentSpaceAround@2x.png deleted file mode 100644 index bb608622fd..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentSpaceAround@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentSpaceBetween@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentSpaceBetween@2x.png deleted file mode 100644 index 17b8dbfbc4..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentSpaceBetween@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentStart@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentStart@2x.png deleted file mode 100644 index ab969dd638..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentStart@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentStretch@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentStretch@2x.png deleted file mode 100644 index 584aca77db..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentUnderflow_alignContentStretch@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentWithUnconstrainedCrossSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentWithUnconstrainedCrossSize@2x.png deleted file mode 100644 index 12936781c0..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignContentWithUnconstrainedCrossSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedCenter@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedCenter@2x.png deleted file mode 100644 index 46b73e6a6e..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedCenter@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedEnd@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedEnd@2x.png deleted file mode 100644 index d2131dd83f..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedEnd@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedStart@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedStart@2x.png deleted file mode 100644 index 5f9dc090e0..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedStart@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedStretchNoChildExceedsMin@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedStretchNoChildExceedsMin@2x.png deleted file mode 100644 index 537b1f6f13..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedStretchNoChildExceedsMin@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedStretchOneChildExceedsMin@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedStretchOneChildExceedsMin@2x.png deleted file mode 100644 index 8fbd29f3b5..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testAlignedStretchOneChildExceedsMin@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testBaselineAlignmentWithSpaceBetween@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testBaselineAlignmentWithSpaceBetween@2x.png deleted file mode 100644 index 5174b92e27..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testBaselineAlignmentWithSpaceBetween@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testBaselineAlignmentWithStretchedItem@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testBaselineAlignmentWithStretchedItem@2x.png deleted file mode 100644 index f3e20dbe00..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testBaselineAlignmentWithStretchedItem@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testBaselineAlignment_baselineFirst@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testBaselineAlignment_baselineFirst@2x.png deleted file mode 100644 index e45ab35c68..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testBaselineAlignment_baselineFirst@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testBaselineAlignment_baselineLast@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testBaselineAlignment_baselineLast@2x.png deleted file mode 100644 index 6cd4909902..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testBaselineAlignment_baselineLast@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testChildSpacing_spacingAfter@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testChildSpacing_spacingAfter@2x.png deleted file mode 100644 index f253af0a20..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testChildSpacing_spacingAfter@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testChildSpacing_spacingBalancedOut@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testChildSpacing_spacingBalancedOut@2x.png deleted file mode 100644 index 60ffcd81bc..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testChildSpacing_spacingBalancedOut@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testChildSpacing_spacingBefore@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testChildSpacing_spacingBefore@2x.png deleted file mode 100644 index e74a5b5a28..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testChildSpacing_spacingBefore@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testChildThatChangesCrossSizeWhenMainSizeIsFlexed@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testChildThatChangesCrossSizeWhenMainSizeIsFlexed@2x.png deleted file mode 100644 index fcb8d934c0..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testChildThatChangesCrossSizeWhenMainSizeIsFlexed@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testCrossAxisSizeBehaviors_fixedHeight@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testCrossAxisSizeBehaviors_fixedHeight@2x.png deleted file mode 100644 index 435a4cf60e..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testCrossAxisSizeBehaviors_fixedHeight@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testCrossAxisSizeBehaviors_variableHeight@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testCrossAxisSizeBehaviors_variableHeight@2x.png deleted file mode 100644 index 718b60304f..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testCrossAxisSizeBehaviors_variableHeight@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testCrossAxisStretchingOccursAfterStackAxisFlexing@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testCrossAxisStretchingOccursAfterStackAxisFlexing@2x.png deleted file mode 100644 index cd7489cb20..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testCrossAxisStretchingOccursAfterStackAxisFlexing@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testEmptyStack@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testEmptyStack@2x.png deleted file mode 100644 index 94dc9a5d2b..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testEmptyStack@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFixedFlexBasisAppliedWhenFlexingItems_overflow@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFixedFlexBasisAppliedWhenFlexingItems_overflow@2x.png deleted file mode 100644 index d224b220fd..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFixedFlexBasisAppliedWhenFlexingItems_overflow@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFixedFlexBasisAppliedWhenFlexingItems_underflow@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFixedFlexBasisAppliedWhenFlexingItems_underflow@2x.png deleted file mode 100644 index df55d754f1..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFixedFlexBasisAppliedWhenFlexingItems_underflow@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFixedFlexBasisOverridesIntrinsicSizeForNonFlexingChildren@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFixedFlexBasisOverridesIntrinsicSizeForNonFlexingChildren@2x.png deleted file mode 100644 index 64048bbd05..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFixedFlexBasisOverridesIntrinsicSizeForNonFlexingChildren@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFlexWithUnequalIntrinsicSizes_overflow@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFlexWithUnequalIntrinsicSizes_overflow@2x.png deleted file mode 100644 index eebc4bb9e4..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFlexWithUnequalIntrinsicSizes_overflow@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFlexWithUnequalIntrinsicSizes_underflow@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFlexWithUnequalIntrinsicSizes_underflow@2x.png deleted file mode 100644 index 54929c089c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFlexWithUnequalIntrinsicSizes_underflow@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFlexWrapWithItemSpacings@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFlexWrapWithItemSpacings@2x.png deleted file mode 100644 index 31df2f6199..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFlexWrapWithItemSpacings@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFlexWrapWithItemSpacingsBeingResetOnNewLines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFlexWrapWithItemSpacingsBeingResetOnNewLines@2x.png deleted file mode 100644 index 1824a25085..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFlexWrapWithItemSpacingsBeingResetOnNewLines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFractionalFlexBasisResolvesAgainstParentSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFractionalFlexBasisResolvesAgainstParentSize@2x.png deleted file mode 100644 index eba4df4df3..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testFractionalFlexBasisResolvesAgainstParentSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_horizontalBottomRight@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_horizontalBottomRight@2x.png deleted file mode 100644 index 489764fe6e..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_horizontalBottomRight@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_horizontalCenter@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_horizontalCenter@2x.png deleted file mode 100644 index eb0ea8c3da..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_horizontalCenter@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_horizontalTopLeft@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_horizontalTopLeft@2x.png deleted file mode 100644 index 8864402768..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_horizontalTopLeft@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_verticalBottomRight@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_verticalBottomRight@2x.png deleted file mode 100644 index 4e46d0f9dd..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_verticalBottomRight@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_verticalCenter@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_verticalCenter@2x.png deleted file mode 100644 index a0b412886f..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_verticalCenter@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_verticalTopLeft@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_verticalTopLeft@2x.png deleted file mode 100644 index 8277b97c00..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testHorizontalAndVerticalAlignments_verticalTopLeft@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedCenterWithChildSpacing_variableHeight@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedCenterWithChildSpacing_variableHeight@2x.png deleted file mode 100644 index 46dab172c1..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedCenterWithChildSpacing_variableHeight@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedSpaceAroundWithOneChild@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedSpaceAroundWithOneChild@2x.png deleted file mode 100644 index da37b62262..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedSpaceAroundWithOneChild@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedSpaceAroundWithRemainingSpace@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedSpaceAroundWithRemainingSpace@2x.png deleted file mode 100644 index 6de6f28efc..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedSpaceAroundWithRemainingSpace@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedSpaceBetweenWithOneChild@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedSpaceBetweenWithOneChild@2x.png deleted file mode 100644 index 88d0aaf203..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedSpaceBetweenWithOneChild@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedSpaceBetweenWithRemainingSpace@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedSpaceBetweenWithRemainingSpace@2x.png deleted file mode 100644 index 8ee77c8de5..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testJustifiedSpaceBetweenWithRemainingSpace@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationAndFlexFactorIsNotRespected@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationAndFlexFactorIsNotRespected@2x.png deleted file mode 100644 index d5cdcfb602..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationAndFlexFactorIsNotRespected@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSize@2x.png deleted file mode 100644 index ebea9c1eaa..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenChildren@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenChildren@2x.png deleted file mode 100644 index 5318559608..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenChildren@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenWithArbitraryFloats@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenWithArbitraryFloats@2x.png deleted file mode 100644 index 5318559608..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenWithArbitraryFloats@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactor@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactor@2x.png deleted file mode 100644 index 4dda03f985..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactor@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildren@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildren@2x.png deleted file mode 100644 index 8792b39b8f..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildren@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildrenArbitraryFloats@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildrenArbitraryFloats@2x.png deleted file mode 100644 index 8792b39b8f..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildrenArbitraryFloats@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZero@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZero@2x.png deleted file mode 100644 index 405fa880d3..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZero@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWithArbitraryFloats@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWithArbitraryFloats@2x.png deleted file mode 100644 index 405fa880d3..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWithArbitraryFloats@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorWithArbitraryFloats@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorWithArbitraryFloats@2x.png deleted file mode 100644 index 4dda03f985..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorWithArbitraryFloats@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeWithArbitraryFloats@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeWithArbitraryFloats@2x.png deleted file mode 100644 index ebea9c1eaa..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeWithArbitraryFloats@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNestedBaselineAlignments@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNestedBaselineAlignments@2x.png deleted file mode 100644 index 67f32cb4df..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNestedBaselineAlignments@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNestedStackLayoutStretchDoesNotViolateWidth@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNestedStackLayoutStretchDoesNotViolateWidth@2x.png deleted file mode 100644 index 2a5fd841b8..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNestedStackLayoutStretchDoesNotViolateWidth@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviorsWhenAllFlexShrinkChildrenHaveBeenClampedToZeroButViolationStillExists@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviorsWhenAllFlexShrinkChildrenHaveBeenClampedToZeroButViolationStillExists@2x.png deleted file mode 100644 index 0471d0cc08..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviorsWhenAllFlexShrinkChildrenHaveBeenClampedToZeroButViolationStillExists@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviors_flex@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviors_flex@2x.png deleted file mode 100644 index 3c15de518f..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviors_flex@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviors_justifyCenter@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviors_justifyCenter@2x.png deleted file mode 100644 index 07bf66b685..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviors_justifyCenter@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviors_justifyEnd@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviors_justifyEnd@2x.png deleted file mode 100644 index a68c624868..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviors_justifyEnd@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviors_justifyStart@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviors_justifyStart@2x.png deleted file mode 100644 index e078398440..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testOverflowBehaviors_justifyStart@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEqually@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEqually@2x.png deleted file mode 100644 index 12a70c6a6d..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEqually@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildren@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildren@2x.png deleted file mode 100644 index 5ab4b9fd6c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildren@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildrenWithArbitraryFloats@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildrenWithArbitraryFloats@2x.png deleted file mode 100644 index 5ab4b9fd6c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildrenWithArbitraryFloats@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyWithArbitraryFloats@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyWithArbitraryFloats@2x.png deleted file mode 100644 index 12a70c6a6d..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyWithArbitraryFloats@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionally@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionally@2x.png deleted file mode 100644 index 262cf4c26c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionally@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildren@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildren@2x.png deleted file mode 100644 index 584294ebcb..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildren@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildrenWithArbitraryFloats@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildrenWithArbitraryFloats@2x.png deleted file mode 100644 index 584294ebcb..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildrenWithArbitraryFloats@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyWithArbitraryFloats@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyWithArbitraryFloats@2x.png deleted file mode 100644 index 262cf4c26c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyWithArbitraryFloats@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testRemainingViolationIsAppliedProperlyToFirstFlexibleChild@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testRemainingViolationIsAppliedProperlyToFirstFlexibleChild@2x.png deleted file mode 100644 index c555157918..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testRemainingViolationIsAppliedProperlyToFirstFlexibleChild@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testRemainingViolationIsAppliedProperlyToFirstFlexibleChildWithArbitraryFloats@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testRemainingViolationIsAppliedProperlyToFirstFlexibleChildWithArbitraryFloats@2x.png deleted file mode 100644 index c555157918..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testRemainingViolationIsAppliedProperlyToFirstFlexibleChildWithArbitraryFloats@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testStackSpacingWithChildrenHavingNilObjects_variableHeight@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testStackSpacingWithChildrenHavingNilObjects_variableHeight@2x.png deleted file mode 100644 index ca249a5daa..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testStackSpacingWithChildrenHavingNilObjects_variableHeight@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testStackSpacing_variableHeight@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testStackSpacing_variableHeight@2x.png deleted file mode 100644 index 77d64be4cb..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testStackSpacing_variableHeight@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_flex@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_flex@2x.png deleted file mode 100644 index 89dac5e442..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_flex@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifyCenter@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifyCenter@2x.png deleted file mode 100644 index 2dfbc80025..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifyCenter@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifyEnd@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifyEnd@2x.png deleted file mode 100644 index 6fb41b79f8..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifyEnd@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifySpaceAround@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifySpaceAround@2x.png deleted file mode 100644 index 1d71834f70..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifySpaceAround@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifySpaceBetween@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifySpaceBetween@2x.png deleted file mode 100644 index 49943caaa8..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifySpaceBetween@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifyStart@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifyStart@2x.png deleted file mode 100644 index 4be46ae87f..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testUnderflowBehaviors_justifyStart@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testFontPointSizeScaling@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testFontPointSizeScaling@2x.png deleted file mode 100644 index 111bd50048..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testFontPointSizeScaling@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testShadowing@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testShadowing@2x.png deleted file mode 100644 index edb68c14aa..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testShadowing@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testTextContainerInset@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testTextContainerInset@2x.png deleted file mode 100644 index 7e6cac14b8..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testTextContainerInset@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testTextContainerInsetHighlight@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testTextContainerInsetHighlight@2x.png deleted file mode 100644 index 4a2fa33448..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testTextContainerInsetHighlight@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testTextContainerInsetIsIncludedWithSmallerConstrainedSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testTextContainerInsetIsIncludedWithSmallerConstrainedSize@2x.png deleted file mode 100644 index 5e2062b8e7..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testTextContainerInsetIsIncludedWithSmallerConstrainedSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testThatFastPathTruncationWorks@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testThatFastPathTruncationWorks@2x.png deleted file mode 100644 index d9f01fce31..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testThatFastPathTruncationWorks@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testThatSlowPathTruncationWorks@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testThatSlowPathTruncationWorks@2x.png deleted file mode 100644 index 4d68f59813..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASTextNodeSnapshotTests/testThatSlowPathTruncationWorks@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASWrapperSpecSnapshotTests/testWrapperSpecWithMultipleElementsShouldSizeToLargestElement@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASWrapperSpecSnapshotTests/testWrapperSpecWithMultipleElementsShouldSizeToLargestElement@2x.png deleted file mode 100644 index e34eef76c7..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASWrapperSpecSnapshotTests/testWrapperSpecWithMultipleElementsShouldSizeToLargestElement@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASWrapperSpecSnapshotTests/testWrapperSpecWithOneElementShouldSizeToElement@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASWrapperSpecSnapshotTests/testWrapperSpecWithOneElementShouldSizeToElement@2x.png deleted file mode 100644 index d63856e6ec..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_64/ASWrapperSpecSnapshotTests/testWrapperSpecWithOneElementShouldSizeToElement@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_bottomLeft_inner_childSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_bottomLeft_inner_childSize@2x.png deleted file mode 100644 index 3b78fb5e7d..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_bottomLeft_inner_childSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_bottomLeft_inner_fullSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_bottomLeft_inner_fullSize@2x.png deleted file mode 100644 index 3b78fb5e7d..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_bottomLeft_inner_fullSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_bottomRight_inner_childSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_bottomRight_inner_childSize@2x.png deleted file mode 100644 index 34851067b9..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_bottomRight_inner_childSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_bottomRight_inner_fullSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_bottomRight_inner_fullSize@2x.png deleted file mode 100644 index 34851067b9..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_bottomRight_inner_fullSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_topLeft_inner_childSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_topLeft_inner_childSize@2x.png deleted file mode 100644 index aa4c3ee8d8..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_topLeft_inner_childSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_topLeft_inner_fullSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_topLeft_inner_fullSize@2x.png deleted file mode 100644 index aa4c3ee8d8..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_topLeft_inner_fullSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_topRight_inner_childSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_topRight_inner_childSize@2x.png deleted file mode 100644 index 23082ede8c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_topRight_inner_childSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_topRight_inner_fullSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_topRight_inner_fullSize@2x.png deleted file mode 100644 index 23082ede8c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithInnerOffset_topRight_inner_fullSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_bottomLeft_outer_childSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_bottomLeft_outer_childSize@2x.png deleted file mode 100644 index 18e211ae8e..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_bottomLeft_outer_childSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_bottomLeft_outer_fullSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_bottomLeft_outer_fullSize@2x.png deleted file mode 100644 index 393143a214..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_bottomLeft_outer_fullSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_bottomRight_outer_childSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_bottomRight_outer_childSize@2x.png deleted file mode 100644 index 18e211ae8e..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_bottomRight_outer_childSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_bottomRight_outer_fullSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_bottomRight_outer_fullSize@2x.png deleted file mode 100644 index 12498681e0..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_bottomRight_outer_fullSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_topLeft_outer_childSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_topLeft_outer_childSize@2x.png deleted file mode 100644 index 18e211ae8e..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_topLeft_outer_childSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_topLeft_outer_fullSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_topLeft_outer_fullSize@2x.png deleted file mode 100644 index dc4f1ab2b3..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_topLeft_outer_fullSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_topRight_outer_childSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_topRight_outer_childSize@2x.png deleted file mode 100644 index 18e211ae8e..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_topRight_outer_childSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_topRight_outer_fullSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_topRight_outer_fullSize@2x.png deleted file mode 100644 index fa7e15a554..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocationsWithOuterOffset_topRight_outer_fullSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_bottomLeft_center_childSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_bottomLeft_center_childSize@2x.png deleted file mode 100644 index 90f411aff2..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_bottomLeft_center_childSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_bottomLeft_center_fullSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_bottomLeft_center_fullSize@2x.png deleted file mode 100644 index 6d49323c17..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_bottomLeft_center_fullSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_bottomRight_center_childSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_bottomRight_center_childSize@2x.png deleted file mode 100644 index 9d23e2b646..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_bottomRight_center_childSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_bottomRight_center_fullSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_bottomRight_center_fullSize@2x.png deleted file mode 100644 index 58257ffef6..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_bottomRight_center_fullSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_topLeft_center_childSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_topLeft_center_childSize@2x.png deleted file mode 100644 index 3503fd79dd..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_topLeft_center_childSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_topLeft_center_fullSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_topLeft_center_fullSize@2x.png deleted file mode 100644 index 263f50d29c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_topLeft_center_fullSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_topRight_center_childSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_topRight_center_childSize@2x.png deleted file mode 100644 index 492fc049b8..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_topRight_center_childSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_topRight_center_fullSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_topRight_center_fullSize@2x.png deleted file mode 100644 index 9e39a3c5c4..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASCornerLayoutSpecSnapshotTests/testCornerSpecForAllLocations_topRight_center_fullSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testBaselineAlignmentWithSpaceBetween@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testBaselineAlignmentWithSpaceBetween@2x.png deleted file mode 100644 index 259778c672..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testBaselineAlignmentWithSpaceBetween@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testBaselineAlignmentWithStretchedItem@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testBaselineAlignmentWithStretchedItem@2x.png deleted file mode 100644 index 9e8286a88c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testBaselineAlignmentWithStretchedItem@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testBaselineAlignment_baselineFirst@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testBaselineAlignment_baselineFirst@2x.png deleted file mode 100644 index 7f4045ee98..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testBaselineAlignment_baselineFirst@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testBaselineAlignment_baselineLast@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testBaselineAlignment_baselineLast@2x.png deleted file mode 100644 index c81f3e9ca4..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testBaselineAlignment_baselineLast@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testNestedBaselineAlignments@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testNestedBaselineAlignments@2x.png deleted file mode 100644 index 679b98a52c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASStackLayoutSpecSnapshotTests/testNestedBaselineAlignments@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testShadowing_ASTextNode2@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testShadowing_ASTextNode2@2x.png deleted file mode 100644 index 7a336db723..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testShadowing_ASTextNode2@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextContainerInsetHighlight_ASTextNode2@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextContainerInsetHighlight_ASTextNode2@2x.png deleted file mode 100644 index 37dfc5986d..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextContainerInsetHighlight_ASTextNode2@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextContainerInsetIsIncludedWithSmallerConstrainedSize_ASTextNode2@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextContainerInsetIsIncludedWithSmallerConstrainedSize_ASTextNode2@2x.png deleted file mode 100644 index dd3b0ccf4d..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextContainerInsetIsIncludedWithSmallerConstrainedSize_ASTextNode2@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextContainerInset_ASTextNode2@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextContainerInset_ASTextNode2@2x.png deleted file mode 100644 index d66bb3bce9..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextContainerInset_ASTextNode2@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByCharWrapping_0Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByCharWrapping_0Lines@2x.png deleted file mode 100644 index e080782fa8..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByCharWrapping_0Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByCharWrapping_1Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByCharWrapping_1Lines@2x.png deleted file mode 100644 index 7139ae654a..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByCharWrapping_1Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByCharWrapping_2Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByCharWrapping_2Lines@2x.png deleted file mode 100644 index 7cab68aa7e..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByCharWrapping_2Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByCharWrapping_3Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByCharWrapping_3Lines@2x.png deleted file mode 100644 index 79c7db1ee7..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByCharWrapping_3Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingHead_0Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingHead_0Lines@2x.png deleted file mode 100644 index 4293eb9df1..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingHead_0Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingHead_1Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingHead_1Lines@2x.png deleted file mode 100644 index 1422cb5b1b..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingHead_1Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingHead_2Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingHead_2Lines@2x.png deleted file mode 100644 index e9472fc15b..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingHead_2Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingHead_3Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingHead_3Lines@2x.png deleted file mode 100644 index 85f8b9688c..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingHead_3Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingMiddle_0Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingMiddle_0Lines@2x.png deleted file mode 100644 index c1a4f2b499..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingMiddle_0Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingMiddle_1Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingMiddle_1Lines@2x.png deleted file mode 100644 index d534022d55..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingMiddle_1Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingMiddle_2Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingMiddle_2Lines@2x.png deleted file mode 100644 index c52a7e6dde..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingMiddle_2Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingMiddle_3Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingMiddle_3Lines@2x.png deleted file mode 100644 index e5cde0ab00..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingMiddle_3Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingTail_0Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingTail_0Lines@2x.png deleted file mode 100644 index 387d0b8d47..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingTail_0Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingTail_1Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingTail_1Lines@2x.png deleted file mode 100644 index fd36b638c1..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingTail_1Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingTail_2Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingTail_2Lines@2x.png deleted file mode 100644 index ebfd109103..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingTail_2Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingTail_3Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingTail_3Lines@2x.png deleted file mode 100644 index 29e13b8d01..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByTruncatingTail_3Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByWordWrapping_0Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByWordWrapping_0Lines@2x.png deleted file mode 100644 index 6202ed9874..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByWordWrapping_0Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByWordWrapping_1Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByWordWrapping_1Lines@2x.png deleted file mode 100644 index 6316fb81f9..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByWordWrapping_1Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByWordWrapping_2Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByWordWrapping_2Lines@2x.png deleted file mode 100644 index ffe6f9c3a2..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByWordWrapping_2Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByWordWrapping_3Lines@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByWordWrapping_3Lines@2x.png deleted file mode 100644 index f9248c2ecb..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testTextTruncationModes_ASTextNode2_NSLineBreakByWordWrapping_3Lines@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testThatSlowPathTruncationWorks_ASTextNode2@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testThatSlowPathTruncationWorks_ASTextNode2@2x.png deleted file mode 100644 index b8123efd43..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNode2SnapshotTests/testThatSlowPathTruncationWorks_ASTextNode2@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testFontPointSizeScaling@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testFontPointSizeScaling@2x.png deleted file mode 100644 index 111bd50048..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testFontPointSizeScaling@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testShadowing@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testShadowing@2x.png deleted file mode 100644 index edb68c14aa..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testShadowing@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testTextContainerInset2@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testTextContainerInset2@2x.png deleted file mode 100644 index d66bb3bce9..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testTextContainerInset2@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testTextContainerInset@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testTextContainerInset@2x.png deleted file mode 100644 index d66bb3bce9..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testTextContainerInset@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testTextContainerInsetHighlight@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testTextContainerInsetHighlight@2x.png deleted file mode 100644 index 01234cff97..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testTextContainerInsetHighlight@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testTextContainerInsetIsIncludedWithSmallerConstrainedSize@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testTextContainerInsetIsIncludedWithSmallerConstrainedSize@2x.png deleted file mode 100644 index 65c801d4df..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testTextContainerInsetIsIncludedWithSmallerConstrainedSize@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testThatFastPathTruncationWorks@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testThatFastPathTruncationWorks@2x.png deleted file mode 100644 index 37b5444efa..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testThatFastPathTruncationWorks@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testThatSlowPathTruncationWorks@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testThatSlowPathTruncationWorks@2x.png deleted file mode 100644 index 18de8b27fe..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testThatSlowPathTruncationWorks@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testThatTruncationTokenAttributesPrecedeThoseInheritedFromTextWhenTruncateTailMode@2x.png b/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testThatTruncationTokenAttributesPrecedeThoseInheritedFromTextWhenTruncateTailMode@2x.png deleted file mode 100644 index 40351ad62b..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/ReferenceImages_iOS_10/ASTextNodeSnapshotTests/testThatTruncationTokenAttributesPrecedeThoseInheritedFromTextWhenTruncateTailMode@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/TestHost/AppDelegate.h b/submodules/AsyncDisplayKit/Tests/TestHost/AppDelegate.h deleted file mode 100644 index 1cdc488736..0000000000 --- a/submodules/AsyncDisplayKit/Tests/TestHost/AppDelegate.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@end diff --git a/submodules/AsyncDisplayKit/Tests/TestHost/AppDelegate.mm b/submodules/AsyncDisplayKit/Tests/TestHost/AppDelegate.mm deleted file mode 100644 index 91dc913326..0000000000 --- a/submodules/AsyncDisplayKit/Tests/TestHost/AppDelegate.mm +++ /dev/null @@ -1,14 +0,0 @@ -// -// AppDelegate.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -@implementation AppDelegate - -@end diff --git a/submodules/AsyncDisplayKit/Tests/TestHost/Default-568h@2x.png b/submodules/AsyncDisplayKit/Tests/TestHost/Default-568h@2x.png deleted file mode 100644 index 1547a98454..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/TestHost/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/TestHost/Info.plist b/submodules/AsyncDisplayKit/Tests/TestHost/Info.plist deleted file mode 100644 index ed1c9acf9b..0000000000 --- a/submodules/AsyncDisplayKit/Tests/TestHost/Info.plist +++ /dev/null @@ -1,41 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/Tests/TestHost/main.mm b/submodules/AsyncDisplayKit/Tests/TestHost/main.mm deleted file mode 100644 index 50a9e3ad6a..0000000000 --- a/submodules/AsyncDisplayKit/Tests/TestHost/main.mm +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/Tests/TestResources/ASThrashTestRecordedCase b/submodules/AsyncDisplayKit/Tests/TestResources/ASThrashTestRecordedCase deleted file mode 100644 index e9dc1e9cc0..0000000000 --- a/submodules/AsyncDisplayKit/Tests/TestResources/ASThrashTestRecordedCase +++ /dev/null @@ -1 +0,0 @@ -YnBsaXN0MDDUAAEAAgADAAQABQAGAagBqVgkdmVyc2lvblgkb2JqZWN0c1kkYXJjaGl2ZXJUJHRvcBIAAYagrxBrAAcACAAPAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAPABEAEoATwBWAFkAXABeAGEAaQBsAG8AcgB1AHgAgACGAI4AkgCWAJkAnACfAKIApgCqALIAtQC4ALsAvgDBAMUAzQDQANMA1gDZANwA4ADoAOsA7gDxAPQA9wD7AQMBBgEJAQwBDwESARQBGwEeAScBKgEuATYBOQE8AT8BQgFFAUgBUAFTAVwBXwFhAWkBawFtAW8BcQFzAXsBfQF/AYEBgwGFAYwBkAGTAZYBmgGcAaABpFUkbnVsbNMACQAKAAsADAANAA5VX2RpY3RYX3ZlcnNpb25WJGNsYXNzgAIQAYBq0wAQABEACwASAB8ALFdOUy5rZXlzWk5TLm9iamVjdHOsABMAFAAVABYAFwAYABkAGgAbABwAHQAegAOABIAFgAaAB4AIgAmACoALgAyADYAOrAAgACEAIgAjACQAJQAmACcAKAApACoAK4APgBGAE4AYgB6ARYBVgFaAXIBigGeAaIBpXxAQaW5zZXJ0ZWRTZWN0aW9uc18QFnJlcGxhY2VkU2VjdGlvbkluZGV4ZXNfEBNpbnNlcnRlZEl0ZW1JbmRleGVzXnJlcGxhY2luZ0l0ZW1zV29sZERhdGFUZGF0YV8QFmluc2VydGVkU2VjdGlvbkluZGV4ZXNfEBJkZWxldGVkSXRlbUluZGV4ZXNfEBNyZXBsYWNlZEl0ZW1JbmRleGVzXWluc2VydGVkSXRlbXNfEBVkZWxldGVkU2VjdGlvbkluZGV4ZXNfEBFyZXBsYWNpbmdTZWN0aW9uc9IAEQALADoAO6CAENIAPQA+AD8AQFokY2xhc3NuYW1lWCRjbGFzc2VzXk5TTXV0YWJsZUFycmF5owBBAEIAQ15OU011dGFibGVBcnJheVdOU0FycmF5WE5TT2JqZWN01ABFAAsARgBHAEgASQANAA1aTlNMb2NhdGlvblxOU1JhbmdlQ291bnRYTlNMZW5ndGgQAoAS0gA9AD4ASwBMXxARTlNNdXRhYmxlSW5kZXhTZXSjAE0ATgBDXxARTlNNdXRhYmxlSW5kZXhTZXRaTlNJbmRleFNldNIAEQALAFAAO6QAUQBSAFMAVIAUgBWAFoAXgBDUAEUACwBGAEcAVwBJAA0ADRADgBLSAEYACwBaAEkQAIAS0gBGAAsAWgBJgBLUAEUACwBGAEcAXwBJAA0ADRAEgBLSABEACwBiADulAGMAZABlAGYAZ4AZgBqAG4AcgB2AENIAEQALAGoAO6CAENIAEQALAG0AO6CAENIAEQALAHAAO6CAENIAEQALAHMAO6CAENIAEQALAHYAO6CAENIAEQALAHkAf6UAegB7AHwAfQB+gB+AKIAvgDaAPYBE0wCBAIIACwCDAIQAhVVpdGVtc1lzZWN0aW9uSUSAIBEBhYAn0gARAAsAhwA7pQCIAIkAigCLAIyAIYAjgCSAJYAmgBDSAI8ACwCQAJFWaXRlbUlEEQJogCLSAD0APgCTAJRfEBBBU1RocmFzaFRlc3RJdGVtogCVAENfEBBBU1RocmFzaFRlc3RJdGVt0gCPAAsAlwCREQJpgCLSAI8ACwCaAJERAmqAItIAjwALAJ0AkRECa4Ai0gCPAAsAoACREQJsgCLSAD0APgCjAKRfEBNBU1RocmFzaFRlc3RTZWN0aW9uogClAENfEBNBU1RocmFzaFRlc3RTZWN0aW9u0wCBAIIACwCnAKgAhYApEQGGgCfSABEACwCrADulAKwArQCuAK8AsIAqgCuALIAtgC6AENIAjwALALMAkRECbYAi0gCPAAsAtgCREQJugCLSAI8ACwC5AJERAm+AItIAjwALALwAkRECcIAi0gCPAAsAvwCREQJxgCLTAIEAggALAMIAwwCFgDARAYeAJ9IAEQALAMYAO6UAxwDIAMkAygDLgDGAMoAzgDSANYAQ0gCPAAsAzgCREQJygCLSAI8ACwDRAJERAnOAItIAjwALANQAkRECdIAi0gCPAAsA1wCREQJ1gCLSAI8ACwDaAJERAnaAItMAgQCCAAsA3QDeAIWANxEBiIAn0gARAAsA4QA7pQDiAOMA5ADlAOaAOIA5gDqAO4A8gBDSAI8ACwDpAJERAneAItIAjwALAOwAkRECeIAi0gCPAAsA7wCREQJ5gCLSAI8ACwDyAJERAnqAItIAjwALAPUAkRECe4Ai0wCBAIIACwD4APkAhYA+EQGJgCfSABEACwD8ADulAP0A/gD/AQABAYA/gECAQYBCgEOAENIAjwALAQQAkRECfIAi0gCPAAsBBwCREQJ9gCLSAI8ACwEKAJERAn6AItIAjwALAQ0AkRECf4Ai0gCPAAsBEACREQKAgCLSAD0APgBCAROiAEIAQ9IAEQALARUAO6QBFgEXARgBGYBGgEmAUIBSgBDTAIEAggALARwAqACFgEeAJ9IAEQALAR8AO6YArACtAK4BIwCvALCAKoArgCyASIAtgC6AENIAjwALASgAkREChoAi0wCBAIIACwErASwAhYBKEQGZgCfSABEACwEvADulATABMQEyATMBNIBLgEyATYBOgE+AENIAjwALATcAkRECgYAi0gCPAAsBOgCREQKCgCLSAI8ACwE9AJERAoOAItIAjwALAUAAkREChIAi0gCPAAsBQwCREQKFgCLTAIEAggALAUYA3gCFgFGAJ9IAEQALAUkAO6UA4gDjAOQA5QDmgDiAOYA6gDuAPIAQ0wCBAIIACwFRAPkAhYBTgCfSABEACwFUADumAP0A/gD/AQABWQEBgD+AQIBBgEKAVIBDgBDSAI8ACwFdAJERAoeAItIARgALAFoASYAS0gARAAsBYgA7pQFjAWQBZQFmAWeAV4BYgFmAWoBbgBDSAEYACwBaAEmAEtIARgALAFoASYAS0gBGAAsAWgBJgBLSAEYACwBaAEmAEtIARgALAFoASYAS0gARAAsBdAA7pQF1AXYBdwF4AXmAXYBegF+AYIBhgBDSAEYACwBaAEmAEtIARgALAFoASYAS0gBGAAsAWgBJgBLSAEYACwBaAEmAEtIARgALAFoASYAS0gARAAsBhgA7pAGHAYgBiQGKgGOAZIBlgGaAENIAEQALAY0AO6EBI4BIgBDSABEACwGRAH+ggETSABEACwGUADuggBDSABEACwGXADuhAVmAVIAQ1ABFAAsARgBHAFoASQANAA2AEtIAEQALAZ0AO6EBF4BJgBDSAD0APgGhAaJcTlNEaWN0aW9uYXJ5ogGjAENcTlNEaWN0aW9uYXJ50gA9AD4BpQGmXkFTVGhyYXNoVXBkYXRlogGnAENeQVNUaHJhc2hVcGRhdGVfEA9OU0tleWVkQXJjaGl2ZXLRAaoBq1Ryb290gAEACAAZACIAKwA1ADoAPwEYAR4BKwExAToBQQFDAUUBRwFUAVwBZwGAAYIBhAGGAYgBigGMAY4BkAGSAZQBlgGYAbEBswG1AbcBuQG7Ab0BvwHBAcMBxQHHAckBywHeAfcCDQIcAiQCKQJCAlcCbQJ7ApMCpwKwArECswK8AscC0ALfAuYC9QL9AwYDFwMiAy8DOAM6AzwDRQNZA2ADdAN/A4gDkQOTA5UDlwOZA5sDrAOuA7ADuQO7A70DxgPIA9kD2wPdA+YD8QPzA/UD9wP5A/sD/QQGBAcECQQSBBMEFQQeBB8EIQQqBCsELQQ2BDcEOQRCBE0ETwRRBFMEVQRXBFkEZgRsBHYEeAR7BH0EhgSRBJMElQSXBJkEmwSdBKYErQSwBLIEuwTOBNME5gTvBPIE9AT9BQAFAgULBQ4FEAUZBRwFHgUnBT0FQgVYBWUFZwVqBWwFdQWABYIFhAWGBYgFigWMBZUFmAWaBaMFpgWoBbEFtAW2Bb8FwgXEBc0F0AXSBd8F4QXkBeYF7wX6BfwF/gYABgIGBAYGBg8GEgYUBh0GIAYiBisGLgYwBjkGPAY+BkcGSgZMBlkGWwZeBmAGaQZ0BnYGeAZ6BnwGfgaABokGjAaOBpcGmgacBqUGqAaqBrMGtga4BsEGxAbGBtMG1QbYBtoG4wbuBvAG8gb0BvYG+Ab6BwMHBgcIBxEHFAcWBx8HIgckBy0HMAcyBzsHPgdAB0kHTgdXB2AHYgdkB2YHaAdqB3cHeQd7B4QHkQeTB5UHlweZB5sHnQefB6gHqwetB7oHvAe/B8EHygfVB9cH2QfbB90H3wfhB+oH7QfvB/gH+wf9CAYICQgLCBQIFwgZCCIIJQgnCDQINgg4CEEITAhOCFAIUghUCFYIWAhlCGcIaQhyCH8IgQiDCIUIhwiJCIsIjQiWCJkImwikCKYIrwi6CLwIvgjACMIIxAjGCM8I0QjaCNwI5QjnCPAI8gj7CP0JBgkRCRMJFQkXCRkJGwkdCSYJKAkxCTMJPAk+CUcJSQlSCVQJXQlmCWgJaglsCW4JcAl5CXwJfgmACYkJigmMCZUJlgmYCaEJpAmmCagJuQm7CcQJxwnJCcsJ1AnhCeYJ8wn8CgsKEAofCjEKNgo7AAAAAAAAAgIAAAAAAAABrAAAAAAAAAAAAAAAAAAACj0= \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/Tests/TestResources/AttributedStringsFixture0.plist b/submodules/AsyncDisplayKit/Tests/TestResources/AttributedStringsFixture0.plist deleted file mode 100644 index 1d5554e472..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/TestResources/AttributedStringsFixture0.plist and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/TestResources/logo-square.png b/submodules/AsyncDisplayKit/Tests/TestResources/logo-square.png deleted file mode 100755 index 82ad66c69e..0000000000 Binary files a/submodules/AsyncDisplayKit/Tests/TestResources/logo-square.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/Tests/en.lproj/InfoPlist.strings b/submodules/AsyncDisplayKit/Tests/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28ff8f..0000000000 --- a/submodules/AsyncDisplayKit/Tests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/submodules/AsyncDisplayKit/docs/.gitignore b/submodules/AsyncDisplayKit/docs/.gitignore deleted file mode 100755 index bd5d18888f..0000000000 --- a/submodules/AsyncDisplayKit/docs/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -_site/ - diff --git a/submodules/AsyncDisplayKit/docs/404.md b/submodules/AsyncDisplayKit/docs/404.md deleted file mode 100755 index 5c0791ac92..0000000000 --- a/submodules/AsyncDisplayKit/docs/404.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: 4oh4 -title: Page Not Found -layout: default ---- - -# Page Not Found - -Crikey! There doesn't seem to be anything here. - -If you find a broken link, feel free to send a pull request. You can also let us know at [Github](https://github.com/texturegroup/texture/issues) so that we can fix it. diff --git a/submodules/AsyncDisplayKit/docs/CNAME b/submodules/AsyncDisplayKit/docs/CNAME deleted file mode 100755 index 80ea8a240d..0000000000 --- a/submodules/AsyncDisplayKit/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -texturegroup.org \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/Gemfile b/submodules/AsyncDisplayKit/docs/Gemfile deleted file mode 100755 index dec8af5008..0000000000 --- a/submodules/AsyncDisplayKit/docs/Gemfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://rubygems.org' - -gem 'github-pages' -gem 'rouge', '~>1.7' -gem 'jekyll', '~>3.6.3' diff --git a/submodules/AsyncDisplayKit/docs/README.md b/submodules/AsyncDisplayKit/docs/README.md deleted file mode 100755 index 8c1c2ee544..0000000000 --- a/submodules/AsyncDisplayKit/docs/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Texture Documentation - -We use [Jekyll](http://jekyllrb.com/) to build the site using Markdown and host it on [Github Pages](https://pages.github.com/). - -### Dependencies - -Github Pages uses Jekyll to host a site and Jekyll has the following dependencies. - - - [Ruby](http://www.ruby-lang.org/) (version >= 2.0.0) - - [RubyGems](http://rubygems.org/) (version >= 1.3.7) - - [Bundler](http://gembundler.com/) - -Mac OS X comes pre-installed with Ruby, but you may need to update RubyGems (via `gem update --system`). -Once you have RubyGems, use it to install bundler. - -```sh -$ gem install bundler -$ cd gh-pages # Go to folder -$ bundle install # Might need sudo. -``` - -### Run Jekyll Locally - -Use Jekyll to serve the website locally (by default, at `http://localhost:4000`): - -```sh -$ bundle exec jekyll serve [--incremental] -$ open http://localhost:4000/ -``` - -For more, see https://help.github.com/articles/setting-up-your-github-pages-site-locally-with-jekyll/ diff --git a/submodules/AsyncDisplayKit/docs/_config.yml b/submodules/AsyncDisplayKit/docs/_config.yml deleted file mode 100755 index ab347c39b8..0000000000 --- a/submodules/AsyncDisplayKit/docs/_config.yml +++ /dev/null @@ -1,24 +0,0 @@ ---- -url: http://texturegroup.org -name: Texture -relative_permalinks: false -markdown: kramdown -timezone: America/Los_Angeles -google_analytics: UA-87502907-1 - -safe: true -lsi: false -highlighter: rouge - -defaults: - - - scope: - path: "" - type: "posts" - values: - layout: post - is_post: true - -collections: - docs: - output: true diff --git a/submodules/AsyncDisplayKit/docs/_data/nav_development.yml b/submodules/AsyncDisplayKit/docs/_data/nav_development.yml deleted file mode 100644 index 3a3a2597c8..0000000000 --- a/submodules/AsyncDisplayKit/docs/_data/nav_development.yml +++ /dev/null @@ -1,22 +0,0 @@ -- title: Introduction - items: - - overview - - structure - - components - - how-to-develop-and-debug -- title: Threading - items: - - threading -- title: Node Lifecycle - items: - - node-lifecycle -- title: Layout System - items: - - layout-specs - - automatic-subnode-layout - - layout-transitions -- title: Collections - items: - - collection-asynchronous-updates - - collection-animations - - cell-node-lifecycle diff --git a/submodules/AsyncDisplayKit/docs/_data/nav_docs.yml b/submodules/AsyncDisplayKit/docs/_data/nav_docs.yml deleted file mode 100755 index 6b4b7b8072..0000000000 --- a/submodules/AsyncDisplayKit/docs/_data/nav_docs.yml +++ /dev/null @@ -1,71 +0,0 @@ -- title: Quick Start - items: - - getting-started - - resources - - installation - - adoption-guide-2-0-beta1 -- title: Core Concepts - items: - - intelligent-preloading - - containers-overview - - node-overview - - subclassing - - node-lifecycle - - faq -- title: Layout - items: - - layout2-quickstart - - automatic-layout-examples-2 - - layout2-layoutspec-types - - layout2-layout-element-properties - - layout2-api-sizing - - layout-transition-api -- title: Conveniences - items: - - hit-test-slop - - batch-fetching-api - - automatic-subnode-mgmt - - inversion - - image-modification-block - - placeholder-fade-duration - - accessibility - - uicollectionviewinterop -- title: Optimizations - items: - - layer-backing - - subtree-rasterization - - synchronous-concurrency - - corner-rounding -- title: Tools - items: - - debug-tool-hit-test-visualization - - debug-tool-pixel-scaling - - debug-tool-ASRangeController -- title: Advanced Technologies - items: - - asvisibility - - asrunloopqueue -- title: Node Containers - items: - - containers-asviewcontroller - - containers-asnodecontroller - - containers-astablenode - - containers-ascollectionnode - - containers-aspagernode -- title: Nodes - items: - - display-node - - cell-node - - button-node - - text-node - - image-node - - network-image-node - - video-node - - map-node - - control-node - - scroll-node - - editable-text-node - - multiplex-image-node - - - diff --git a/submodules/AsyncDisplayKit/docs/_docs/accessibility.md b/submodules/AsyncDisplayKit/docs/_docs/accessibility.md deleted file mode 100755 index 45261003d9..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/accessibility.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Accessibility -layout: docs -permalink: /docs/accessibility.html -prevPage: placeholder-fade-duration.html -nextPage: layer-backing.html ---- - -Accessibility works seamlessly in ways that even UIKit doesn’t provide. When using the powerful optimization features of Layer Backing (`.layerBacked`) and Subtree Rasterization (`.shouldRasterizeDescendants`), VoiceOver can access fine-grained metadata about each element. This is pretty amazing: `CALayer` doesn’t support accessibility, and rasterization reduces everything to a single flat image. - -The Texture team fundamentally believes in Accessibility, and invested the time to create an innovative system to make this possible with zero developer effort. As a bonus, this also allows Automated UI Testing greater access to the interface. \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/adoption-guide-2-0-beta1.md b/submodules/AsyncDisplayKit/docs/_docs/adoption-guide-2-0-beta1.md deleted file mode 100755 index f3c199fff3..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/adoption-guide-2-0-beta1.md +++ /dev/null @@ -1,146 +0,0 @@ ---- -title: "Upgrading to 2.0" -layout: docs -permalink: /docs/adoption-guide-2-0-beta1.html -prevPage: adoption-guide-2-0-beta1.html ---- - -
    -
  1. GitHub Release Notes
  2. -
  3. Getting the 2.0 Release Candidate
  4. -
  5. Testing your app with 2.0
  6. -
  7. Migrating to 2.0
  8. -
  9. Migrating to 2.0 (Layout)
  10. -
- -## Release Notes - -Please read the official release notes on GitHub. - - -## Getting the Release Candidate - -Add the following to your podfile - -
-
-
-pod 'Texture', '>= 2.0'
-
-
-
- -then run - -
-
-
-pod repo update
-pod update Texture
-
-
-
- -in the terminal. - -## Testing 2.0 - -Once you have updated to 2.0, you will see many deprecation warnings. Don't worry! - -These warnings are quite safe, because we have bridged all of the old APIs for you, so that you can test out the 2.0, before migrating to the new API. - -If your app fails to build instead of just showing the warnings, you might have Warnings as Errors enabled for your project. You have a few options: - -1. Disable deprecation warnings in the Xcode project settings -2. Disable warnings as errors in the project's build settings. -3. Disable deprecation warnings in Texture. To do this, change `line 74` in `ASBaseDefines.h` to `# define ASDISPLAYNODE_WARN_DEPRECATED 0` - -Once your app builds and runs, test it to make sure everything is working normally. If you find any problems, try adopting the new API in that area and re-test. - -One key behavior change you may notice: - -- ASStackLayoutSpec's `.alignItems` property default changed to `ASStackLayoutAlignItemsStretch` instead of `ASStackLayoutAlignItemsStart`. This may cause distortion in your UI. - -If you still have issues, please file a GitHub issue and we'd be happy to help you out! - -## Migrating to 2.0 - -Once your app is working, it's time to start converting! - -A full API changelog from `1.9.92` to `2.0-beta.1` is available here. - -#### ASDisplayNode Changes - -- ASDisplayNode's `.usesImplicitHierarchyManagement` has been renamed to `.automaticallyManagesSubnodes`. The Automatic Subnode Management API has been moved out of Beta, but has a few documented [limitations](). - -- ASDisplayNode's `-cancelLayoutTransitionsInProgress` has been renamed to `-cancelLayoutTransition`. The Layout Transition API has been moved out of Beta. Significant new functionality is planed for future dot releases. - - -#### Updated Interface State Callback Methods - -The new method names are meant to unify the range update methods to show how they relate to each other and be a bit more self-explanatory: - -- `didEnterPreloadState / didExitPreloadState` -- `didEnterDisplayState / didExitDisplayState` -- `didEnterVisibleState / didExitVisibleState` - -These new methods replace the following: - -- `loadStateDidChange:(BOOL)inLoadState` -- `displayStateDidChange:(BOOL)inDisplayState` -- `visibleStateDidChange:(BOOL)isVisible` - -#### Collection / Table API Updates - -Texture's collection and table APIs have been moved from the view space (`collectionView`, `tableView`) to the node space (`collectionNode`, `tableNode`). - -- Search your project for `tableView` and `collectionView`. Most, if not all, of the data source / delegate methods have new node versions. - -It is important that developers using Texture understand that an ASCollectionNode is backed by an ASCollectionView (a subclass of UICollectionView). ASCollectionNode runs asynchronously, so calling -numberOfRowsInSection on the collectionNode is different than calling it on the collectionView. - -For example, let's say you have an empty table. You insert `100` rows and then immediately call -tableView:numberOfRowsInSection. This will return `0` rows. If you call -waitUntilAllUpdatesAreCommitted after insertion (waits until the collectionNode synchronizes with the collectionView), you will get 100, _but_ you might block the main thread. A good developer should rarely (or never) need to use -waitUntilAllUpdatesAreCommitted. If you update the collectionNode and then need to read back immediately, you should use the collectionNode API. You shouldn't need to talk to the collectionView. - -As a rule of thumb, use the collection / table node API for everything, unless the API is not available on the collectionNode. - -To summarize, any `indexPath` that is passed to the `collectionView` space references data that has been synced with `ASCollectionNode`'s underlying `UICollectionView`. Conversly, any `indexPath` that is passed to the `collectionNode` space references asynchronous data that *might not yet* have been synced with ASCollectionNode's underlying `UICollectionView`. The same concepts apply to `ASTableNode`. - -An exception to this is `ASTableNode`'s `-didSelectRowAtIndexPath:`, which is called in UIKit space to make sure that `indexPath` indicies reference the data in the onscreen (data that has been synced to the underlying `UICollectionView` `dataSource`). - -While previous versions of the framework required the developer to be aware of the asynchronous interplay between `ASCollectionNode` and its underlying `UICollectionView`, this new API should provide better safegaurds against developer-introduced data source inconsistencies. - -Other updates include: - -- Deprecate `ASTableView`'s -init method. Please use `ASTableNode` instead of `ASTableView`. While this makes adopting the framework marginally more difficult to, the benefits of using ASTableNode / ASCollectionNode over their ASTableView / ASCollectionView counterparts are signficant. - -- Deprecate `-beginUpdates` and `-endUpdatesAnimated:`. Please use the `-performBatchUpdates:` methods instead. - -- Deprecate `-reloadDataImmediately`. Please see the header file comments for the deprecation solution. - -- Moved range tuning to the `tableNode` / `collectionNode` (from the `tableView` / `collectionView`) - -- `constrainedSizeForNodeAtIndexPath:` moved from the `.dataSource` to the `.delegate` to be consistent with UIKit definitions of the roles. **Note:** Make sure that you provide a delegate for any `ASTableNode`, `ASCollectionNode` or `ASPagerNodes` that use this method. Your code will silently not call your delegate method, if you do not have a delegate assigned. - -- Renamed `pagerNode:constrainedSizeForNodeAtIndexPath:` to `pagerNode:constrainedSizeForNodeAtIndex:` - -- collection view update validation assertions are now enabled. If you see something like `"Invalid number of items in section 2. The number of items after the update (7) must be equal to the number of items before the update (4) plus or minus the number of items inserted or removed from the section (4 inserted, 0 removed)"`, please check the data source logic. If you have any questions, reach out to us on GitHub. - -Best Practices: - -- Use node blocks if possible. These are run in parallel on a background thread, resulting in 10x performance gains. -- Use nodes to store things about your rows. -- Make sure to batch updates that need to be batched. - -Resources: - -- [Video](https://youtu.be/yuDqvE5n_1g) of the ASCollectionNode Behind-the-Scenes talk at Pinterest. The diagrams seen in the talk. - -- PR [#2390](https://github.com/facebook/AsyncDisplayKit/pull/2390) and PR [#2381](https://github.com/facebook/AsyncDisplayKit/pull/2381) show how we converted AsyncDisplayKit's [example projects](https://github.com/texturegroup/texture/tree/master/examples) to conform to this new API. - - -#### Layout API Updates - -Please read the separate Layout 2.0 Conversion Guide for an overview of the upgrades and to see how to convert your existing layout code. - -#### Help us out - -If we're missing something from this list, please let us know or edit this doc for us (GitHub edit link at the top of page)! diff --git a/submodules/AsyncDisplayKit/docs/_docs/apidiff-1992-to-20beta1.md b/submodules/AsyncDisplayKit/docs/_docs/apidiff-1992-to-20beta1.md deleted file mode 100755 index bc681276fd..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/apidiff-1992-to-20beta1.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: API Diff -layout: apidiff -permalink: /docs/apidiff-1992-to-20beta1.html ---- - - diff --git a/submodules/AsyncDisplayKit/docs/_docs/appledocs.md b/submodules/AsyncDisplayKit/docs/_docs/appledocs.md deleted file mode 100755 index 4b466e9928..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/appledocs.md +++ /dev/null @@ -1,9 +0,0 @@ - ---- -title: api -layout: docs -permalink: /docs/appledocs.html ---- - -

hi

- \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/asenvironment.md b/submodules/AsyncDisplayKit/docs/_docs/asenvironment.md deleted file mode 100755 index c749cd0802..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/asenvironment.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: ASEnvironment -layout: docs -permalink: /docs/asenvironment.html -prevPage: asvisibility.html -nextPage: asrunloopqueue.html ---- - -`ASEnvironment` is a performant and scalable way to enable upward and downward propagation of information throughout the node hierarchy. It stores a variety of critical “environmental” metadata, like the trait collection, interface state, hierarchy state, and more. - -Any object that conforms to the `` protocol can propagate specific states defined in an `ASEnvironmentState` up and/or down the ASEnvironment tree. To define how merges of States should happen, specific merge functions can be provided. - -Compared to UIKit, this system is very efficient and one of the reasons why nodes are much lighter weight than UIViews. This is achieved by using simple structures to store data rather than creating objects. For example, `UITraitCollection` is an object, but `ASEnvironmentTraitCollection` is just a struct. - -This means that whenever a node needs to query something about its environment, for example to check its [interface state](http://texturegroup.org/docs/intelligent-preloading.html#interface-state-ranges), instead of climbing the entire tree or checking all of its children, it can go to one spot and read the value that was propogated to it. - -A key operating principle of ASEnvironment is to update values when new subnodes are added or removed. - -ASEnvironment powers many of the most valuable features of Texture. **There is no public API available at this time.** diff --git a/submodules/AsyncDisplayKit/docs/_docs/asrunloopqueue.md b/submodules/AsyncDisplayKit/docs/_docs/asrunloopqueue.md deleted file mode 100755 index f40f532ed8..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/asrunloopqueue.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: ASRunLoopQueue -layout: docs -permalink: /docs/asrunloopqueue.html -prevPage: asvisibility.html ---- - -Even with main thread work, Texture is able to dramatically reduce its impact on the user experience by way of the rather amazing ASRunLoopQueue. - -`ASRunloopQueue` breaks up operations that must be performed on the main thread into far smaller chunks, easily 1/10th of the size that they otherwise would be, so that operation such as allocating UIViews or even destroying objects can be spread out and allow the run loops to more frequently turn. This more periodic turning allows the device to much more frequently check if a user touch has started or if an animation timer requires a new frame to be drawn, allowing far greater responsiveness even when the device is very busy and processing a large queue of main thread work. - -It's a longer discussion why this kind of technique is extremely challenging to implement with `UIKit`, but it has to do with the fact that `Texture` prepares content in advance, giving it a buffer of time where it can spread out the creation of these objects in tiny chunks. If it doesn't finish by the time it needs to be on screen, then it finishes the rest of what needs to be created in a single chunk. `UIKit` has no similar mechanisms to create things in advance, and there is always just one huge chunk as a view controller or cell needs to come on screen. - -**ASRunLoopQueue is enabled by default when running Texture.** A developer does not need to be aware of it's existence except to know that it helps reduce main thread blockage. diff --git a/submodules/AsyncDisplayKit/docs/_docs/asviewcontroller.md b/submodules/AsyncDisplayKit/docs/_docs/asviewcontroller.md deleted file mode 100755 index 9cba5be9e5..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/asviewcontroller.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: ASViewController -layout: docs -permalink: /docs/asviewcontroller.html -prevPage: -nextPage: aspagernode.html ---- - -`ASViewController` is a direct subclass of `UIViewController`. For the most part, it can be used in place of any `UIViewController` relatively easily. - -The main difference is that you construct and return the node you'd like managed as opposed to the way `UIViewController` provides a view of its own. - -Consider the following `ASViewController` subclass that would like to use a custom table node as its managed node. - -
-SwiftObjective-C -
-
-- (instancetype)initWithModel:(NSArray *)models
-{
-    ASTableNode *tableNode = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain];
-
-    if (!(self = [super initWithNode:tableNode])) { return nil; }
-
-    self.models = models;
-    
-    self.tableNode = tableNode;
-    self.tableNode.dataSource = self;
-    
-    return self;
-}
-
- - -
-
- -The most important line is: - -`if (!(self = [super initWithNode:tableNode])) { return nil; }` - -As you can see, `ASViewController`'s are initialized with a node of your choosing. diff --git a/submodules/AsyncDisplayKit/docs/_docs/asvisibility.md b/submodules/AsyncDisplayKit/docs/_docs/asvisibility.md deleted file mode 100755 index 6ca8ef2de8..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/asvisibility.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: ASVisibility -layout: docs -permalink: /docs/asvisibility.html -prevPage: debug-tool-ASRangeController.html -nextPage: asenvironment.html ---- - -`ASNavigationController` and `ASTabBarController` both implement the `ASVisibility` protocol. These classes can be used even without `ASDisplayNodes`, making them suitable base classes for your inheritance hierarchy. For any child view controllers that are `ASViewControllers`, these classes know the exact number of user taps it would take to make the view controller visible (0 if currently visible). - -Knowing a view controller’s visibility depth allows view controllers to automatically take appropriate actions as a user approaches or leaves them. Non-default tabs in an app might preload some of their data; a controller 3 levels deep in a navigation stack might progressively free memory for images, text, and fetched data as it gets deeper. - -Any container view controller can implement a simple protocol to integrate with the system. For example, `ASNavigationController` will return a visibility depth of it's own `visibilityDepth` + 1 for a view controller that would be revealed by tapping the back button once. - -You can opt into some of this behavior automatically by enabling `automaticallyAdjustRangeModeBasedOnViewEvents` on `ASViewController`s. With this enabled, if either the view controller or its node conform to `ASRangeControllerUpdateRangeProtocol` (`ASCollectionNode` and `ASTableNode` do by default), the ranges will automatically be decreased as the visibility depth increases to save memory. diff --git a/submodules/AsyncDisplayKit/docs/_docs/automatic-layout-basics.md b/submodules/AsyncDisplayKit/docs/_docs/automatic-layout-basics.md deleted file mode 100755 index 128a1040d4..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/automatic-layout-basics.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Layout Basics -layout: docs -permalink: /docs/automatic-layout-basics.html -prevPage: scroll-node.html -nextPage: automatic-layout-containers.html ---- - -## Box Model Layout - -ASLayout is an automatic, asynchronous, purely Objective-C box model layout feature. It is a simplified version of CSS flex box, loosely inspired by ComponentKit’s Layout. It is designed to make your layouts extensible and reusable. - -`UIView` instances store position and size in their `center` and `bounds` properties. As constraints change, Core Animation performs a layout pass to call `layoutSubviews`, asking views to update these properties on their subviews. - -`` instances (all ASDisplayNodes and subclasses) do not have any size or position information. Instead, Texture calls the `layoutSpecThatFits:` method with a given size constraint and the component must return a structure describing both its size, and the position and sizes of its children. - -## Terminology - -The terminology is a bit confusing, so here is a brief description of all of the Texture automatic layout players: - -Items that conform to the **\ protocol** declares a method for measuring the layout of an object. A layout is defined by an ASLayout return value, and must specify 1) the size (but not position) of the layoutable object, and 2) the size and position of all of its immediate child objects. The tree recursion is driven by parents requesting layouts from their children in order to determine their size, followed by the parents setting the position of the children once the size is known. - -This protocol also implements a "family" of layoutable protocols - the `AS{*}LayoutSpec` protocols. These protocols contain layout options that can be used for specific layout specs. For example, `ASStackLayoutSpec` has options defining how a layoutable should shrink or grow based upon available space. These layout options are all stored in an `ASLayoutOptions` class (that is defined in `ASLayoutablePrivate`). Generally you needn't worry about the layout options class, as the layoutable protocols allow all direct access to the options via convenience properties. If you are creating custom layout spec, then you can extend the backing layout options class to accommodate any new layout options. - -All ASDisplayNodes and subclasses as well as the `ASLayoutSpecs` conform to this protocol. - -An **`ASLayoutSpec`** is an immutable object that describes a layout. Creation of a layout spec should only happen by a user in layoutSpecThatFits:. During that method, a layout spec can be created and mutated. Once it is passed back to Texture, the isMutable flag will be set to NO and any further mutations will cause an assert. - -Every ASLayoutSpec must act on at least one child. The ASLayoutSpec has the responsibility of holding on to the spec children. Some layout specs, like ASInsetLayoutSpec, only require a single child. Others, have multiple. - -You don’t need to be aware of **`ASLayout`** except to know that it represents a computed immutable layout tree and is returned by objects conforming to the `` protocol. - -## Layout for UIKit Components: -- for UIViews that are added directly, you will still need to manually lay it out in `didLoad:` -- for UIViews that are added via `[ASDisplayNode initWithViewBlock:]` or its variants, you can then include it in `layoutSpecThatFits:` - diff --git a/submodules/AsyncDisplayKit/docs/_docs/automatic-layout-containers.md b/submodules/AsyncDisplayKit/docs/_docs/automatic-layout-containers.md deleted file mode 100755 index b612b37c78..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/automatic-layout-containers.md +++ /dev/null @@ -1,192 +0,0 @@ ---- -title: LayoutSpecs -layout: docs -permalink: /docs/automatic-layout-containers.html -prevPage: scroll-node.html -nextPage: layout-api-debugging.html ---- - -Texture includes a library of `layoutSpec` components that can be composed to declaratively specify a layout. - -The **child(ren) of a layoutSpec may be a node, a layoutSpec or a combination of the two types.** In the below image, an `ASStackLayoutSpec` (vertical) containing a text node and an image node, is wrapped in another `ASStackLayoutSpec` (horizontal) with another text node. - - - -Both nodes and layoutSpecs conform to the `` protocol. Any `ASLayoutable` object may be the child of a layoutSpec. ASLayoutable properties may be applied to `ASLayoutable` objects to create complex UI designs. - -### Single Child layoutSpecs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LayoutSpecDescription
ASInsetLayoutSpec

Applies an inset margin around a component.

The object that is being inset must have an intrinsic size.

ASOverlayLayoutSpec

Lays out a component, stretching another component on top of it as an overlay.

The underlay object must have an intrinsic size. Additionally, the order in which subnodes are added matters for this layoutSpec; the overlay object must be added as a subnode to the parent node after the underlay object.

ASBackgroundLayoutSpec

Lays out a component, stretching another component behind it as a backdrop.

The foreground object must have an intrinsic size. The order in which subnodes are added matters for this layoutSpec; the background object must be added as a subnode to the parent node before the foreground object.

ASCenterLayoutSpec

Centers a component in the available space.

The ASCenterLayoutSpec must have an intrinisic size.

ASRatioLayoutSpec

Lays out a component at a fixed aspect ratio (which can be scaled).

This spec is great for objects that do not have an intrinisic size, such as ASNetworkImageNodes and ASVideoNodes.

ASRelativeLayoutSpec

Lays out a component and positions it within the layout bounds according to vertical and horizontal positional specifiers. Similar to the “9-part” image areas, a child can be positioned at any of the 4 corners, or the middle of any of the 4 edges, as well as the center.

ASLayoutSpec

Can be used as a spacer in a stack spec with other children, when .flexGrow and/or .flexShrink is applied.

This class can also be subclassed to create custom layout specs - advanced Texture only!

- -### Multiple Child(ren) layoutSpecs - -The following layoutSpecs may contain one or more children. - - - - - - - - - - - - - - -
LayoutSpecDescription
ASStackLayoutSpec

Allows you to stack components vertically or horizontally and specify how they should be flexed and aligned to fit in the available space.

This is the most common layoutSpec.

ASStaticLayoutSpecAllows positioning children at fixed offsets using the .sizeRange and .layoutPosition ASLayoutable properties.
- -### ASLayoutable Properties - -The following properties can be applied to both nodes _and_ `layoutSpec`s; both conform to the `ASLayoutable` protocol. - -### ASStackLayoutable Properties - -The following properties may be set on any node or `layoutSpec`s, but will only apply to those who are a **child of a stack** `layoutSpec`. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyDescription
CGFloat .spacingBeforeAdditional space to place before this object in the stacking direction.
CGFloat .spacingAfterAdditional space to place after this object in the stacking direction.
BOOL .flexGrowIf the sum of childrens' stack dimensions is less than the minimum size, should this object grow? Used when attached to a stack layout.
BOOL .flexShrinkIf the sum of childrens' stack dimensions is greater than the maximum size, should this object shrink? Used when attached to a stack layout.
ASRelativeDimension .flexBasisSpecifies the initial size for this object, in the stack dimension (horizontal or vertical), before the flexGrow or flexShrink properties are applied and the remaining space is distributed.
ASStackLayoutAlignSelf alignSelfOrientation of the object along cross axis, overriding alignItems. Used when attached to a stack layout.
CGFloat .ascenderUsed for baseline alignment. The distance from the top of the object to its baseline.
CGFloat .descenderUsed for baseline alignment. The distance from the baseline of the object to its bottom.
- -### ASStaticLayoutable Properties - -The following properties may be set on any node or `layoutSpec`s, but will only apply to those who are a **child of a static** `layoutSpec`. - - - - - - - - - - - - - - -
PropertyDescription
.sizeRangeIf specified, the child's size is restricted according to this ASRelativeSizeRange. Percentages are resolved relative to the static layout spec.
.layoutPositionThe CGPoint position of this object within its parent spec.
- -### Providing Intrinsic Sizes for Leaf Nodes - -Texture's layout is recursive, starting at the layoutSpec returned from `layoutSpecThatFits:` and proceeding down until it reaches the leaf nodes included in any nested `layoutSpec`s. - -Some leaf nodes provide their own intrinsic size, such as `ASTextNode` or `ASImageNode`. An attributed string or an image have their own sizes. Other leaf nodes require an intrinsic size to be set. - -**Nodes that require the developer to provide an intrinsic size:** - - - `ASDisplayNode` custom subclasses may provide their intrinisc size by implementing `calculateSizeThatFits:`. - - `ASNetworkImageNode` or `ASMultiplexImageNode` have no intrinsic size until the image is downloaded. - - `ASVideoNode` or `ASVideoNodePlayer` have no intrinsic size until the video is downloaded. - - -To provide an intrinisc size for these nodes, you can set one of the following: - - 1. implement `calculateSizeThatFits:` for **custom ASDisplayNode subclasses** only. - 2. set `.preferredFrameSize` - 3. set `.sizeRange` for children of **static** nodes only. - - -Note that `.preferredFrameSize` is not considered by `ASTextNodes`. Also, setting .sizeRange on a node will override the node's intrinisic size provided by `calculateSizeThatFits:`. - -### Common Confusions - -There are two main confusions that developers have when using layoutSpecs - - 1. Certain ASLayoutable properties only apply to children of stack nodes, while other properties only apply to children of static nodes. All ASLayoutable properties can be applied to any node or layoutSpec, however certain properties will only take effect depending on the type of the parent layoutSpec they are wrapped in. These differences are highlighted above in the ASStackLayoutable Properties and ASStaticLayoutable Properties sections. - 2. Have I set an intrinsic size for all of my leaf nodes? - - -#### I set `.flexGrow` on my node, but it doesn't grow? - -Upward propogation of `ASLayoutable` properties is currently disabled. Thus, in certain situations, the `.flexGrow` property must be manually applied to the containers. Two common examples of this that we see include: - -- a node (with `flexGrow` enabled) is wrapped in a static layoutSpec, wrapped in a stack layoutSpec. **solution**: enable `flexGrow` on the static layoutSpec as well. -- a node (with `flexGrow` enabled) is wrapped in an inset spec. **solution**: enable `flexGrow` on the inset spec as well. - - -#### I want to provide a size for my image, but I don't want to hard code the size. - -#### Why won't my stack spec span the full width? - -#### Difference between `ASInsetLayoutSpec` and `ASOverlayLayoutSpec` - -An overlay spec requires the underlay object (object to which the overlay item will be applied) to have an intrinsic size. It will center the overlay object in the middle of this area. - -An inset spec requires its object to have an intrinsic size. It adds the inset padding to this size to calculate the final size of the inset spec. - - - -### Best Practices - - Texture layout is called on a background thread. Do not access the device screen bounds, or any other UIKit methods in `layoutSpecThatFits:`. - - don't wrap everything in a staticLayoutSpec? - - avoid using preferred frame size for everything - won't respond nicely to device rotation or device sizing differences? diff --git a/submodules/AsyncDisplayKit/docs/_docs/automatic-layout-examples-2.md b/submodules/AsyncDisplayKit/docs/_docs/automatic-layout-examples-2.md deleted file mode 100755 index 07da8df131..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/automatic-layout-examples-2.md +++ /dev/null @@ -1,264 +0,0 @@ ---- -title: Layout Examples -layout: docs -permalink: /docs/automatic-layout-examples-2.html -prevPage: layout2-quickstart.html -nextPage: layout2-layoutspec-types.html ---- - -Check out the layout specs example project to play around with the code below. - -## Simple Header with Left and Right Justified Text - - - -To create this layout, we will use a: - -- a vertical `ASStackLayoutSpec` -- a horizontal `ASStackLayoutSpec` -- `ASInsetLayoutSpec` to inset the entire header - -The diagram below shows the composition of the layout elements (nodes + layout specs). - - - -
- - Swift - Objective-C - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  // when the username / location text is too long, 
-  // shrink the stack to fit onscreen rather than push content to the right, offscreen
-  ASStackLayoutSpec *nameLocationStack = [ASStackLayoutSpec verticalStackLayoutSpec];
-  nameLocationStack.style.flexShrink = 1.0;
-  nameLocationStack.style.flexGrow = 1.0;
-  
-  // if fetching post location data from server, 
-  // check if it is available yet and include it if so
-  if (_postLocationNode.attributedText) {
-    nameLocationStack.children = @[_usernameNode, _postLocationNode];
-  } else {
-    nameLocationStack.children = @[_usernameNode];
-  }
-  
-  // horizontal stack
-  ASStackLayoutSpec *headerStackSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal
-                                                                               spacing:40
-                                                                        justifyContent:ASStackLayoutJustifyContentStart
-                                                                            alignItems:ASStackLayoutAlignItemsCenter
-                                                                              children:@[nameLocationStack, _postTimeNode]];
-  
-  // inset the horizontal stack
-  return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(0, 10, 0, 10) child:headerStackSpec];
-}
-  
- -
-
- -Rotate the example project from portrait to landscape to see how the spacer grows and shrinks. - -## Photo with Inset Text Overlay - - - -To create this layout, we will use a: - -- `ASInsetLayoutSpec` to inset the text -- `ASOverlayLayoutSpec` to overlay the inset text spec on top of the photo - -
- - Swift - Objective-C - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  _photoNode.style.preferredSize = CGSizeMake(USER_IMAGE_HEIGHT*2, USER_IMAGE_HEIGHT*2);
-
-  // INIFINITY is used to make the inset unbounded
-  UIEdgeInsets insets = UIEdgeInsetsMake(INFINITY, 12, 12, 12);
-  ASInsetLayoutSpec *textInsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets child:_titleNode];
-  
-  return [ASOverlayLayoutSpec overlayLayoutSpecWithChild:_photoNode overlay:textInsetSpec];
-}
-  
- -
-
- -## Photo with Outset Icon Overlay - - - -To create this layout, we will use a: - -- `ASAbsoluteLayoutSpec` to place the photo and icon which have been individually sized and positioned using their `ASLayoutable` properties - -
- - Swift - Objective-C - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  _iconNode.style.preferredSize = CGSizeMake(40, 40);
-  _iconNode.style.layoutPosition = CGPointMake(150, 0);
-  
-  _photoNode.style.preferredSize = CGSizeMake(150, 150);
-  _photoNode.style.layoutPosition = CGPointMake(40 / 2.0, 40 / 2.0);
-  
-  return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithSizing:ASAbsoluteLayoutSpecSizingSizeToFit
-                                                   children:@[_photoNode, _iconNode]];
-}
-  
- -
-
- - - -## Simple Inset Text Cell - - - -To recreate the layout of a single cell as is used in Pinterest's search view above, we will use a: - -- `ASInsetLayoutSpec` to inset the text -- `ASCenterLayoutSpec` to center the text according to the specified properties - -
- - Swift - Objective-C - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-    UIEdgeInsets insets = UIEdgeInsetsMake(0, 12, 4, 4);
-    ASInsetLayoutSpec *inset = [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets
-                                                                      child:_titleNode];
-
-    return [ASCenterLayoutSpec centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringY
-                                                      sizingOptions:ASCenterLayoutSpecSizingOptionMinimumX
-                                                              child:inset];
-}
-  
- -
-
- -## Top and Bottom Separator Lines - - - -To create the layout above, we will use a: - -- a `ASInsetLayoutSpec` to inset the text -- a vertical `ASStackLayoutSpec` to stack the two separator lines on the top and bottom of the text - -The diagram below shows the composition of the layoutables (layout specs + nodes). - - - -The following code can also be found in the `ASLayoutSpecPlayground` [example project](). - -
- - Swift - Objective-C - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  _topSeparator.style.flexGrow = 1.0;
-  _bottomSeparator.style.flexGrow = 1.0;
-
-  ASInsetLayoutSpec *insetContentSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(20, 20, 20, 20) child:_textNode];
-
-  return [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical
-                                                 spacing:0
-                                          justifyContent:ASStackLayoutJustifyContentCenter
-                                              alignItems:ASStackLayoutAlignItemsStretch
-                                                children:@[_topSeparator, insetContentSpec, _bottomSeparator]];
-}
-  
- -
-
diff --git a/submodules/AsyncDisplayKit/docs/_docs/automatic-layout-examples.md b/submodules/AsyncDisplayKit/docs/_docs/automatic-layout-examples.md deleted file mode 100755 index 1523720935..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/automatic-layout-examples.md +++ /dev/null @@ -1,204 +0,0 @@ ---- -title: Layout Examples -layout: docs -permalink: /docs/automatic-layout-examples.html -prevPage: automatic-layout-containers.html -nextPage: automatic-layout-debugging.html ---- - -Three examples in increasing order of complexity. -#NSSpain Talk Example - - - -
-SwiftObjective-C - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constraint
-{
-  ASStackLayoutSpec *vStack = [[ASStackLayoutSpec alloc] init];
-  
-  [vStack setChildren:@[titleNode, bodyNode];
-
-  ASStackLayoutSpec *hstack = [[ASStackLayoutSpec alloc] init];
-  hStack.direction          = ASStackLayoutDirectionHorizontal;
-  hStack.spacing            = 5.0;
-
-  [hStack setChildren:@[imageNode, vStack]];
-  
-  ASInsetLayoutSpec *insetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(5,5,5,5) child:hStack];
-
-  return insetSpec;
-}
-
- -
-
- -###Discussion - -#Social App Layout - - - -
-SwiftObjective-C - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  // header stack
-  _userAvatarImageView.preferredFrameSize = CGSizeMake(USER_IMAGE_HEIGHT, USER_IMAGE_HEIGHT);  // constrain avatar image frame size
-  
-  ASLayoutSpec *spacer = [[ASLayoutSpec alloc] init];
-  spacer.flexGrow      = YES;
-
-  ASStackLayoutSpec *headerStack = [ASStackLayoutSpec horizontalStackLayoutSpec];
-  headerStack.alignItems         = ASStackLayoutAlignItemsCenter;       // center items vertically in horizontal stack
-  headerStack.justifyContent     = ASStackLayoutJustifyContentStart;    // justify content to left side of header stack
-  headerStack.spacing            = HORIZONTAL_BUFFER;
-
-  [headerStack setChildren:@[_userAvatarImageView, _userNameLabel, spacer, _photoTimeIntervalSincePostLabel]];
-  
-  // header inset stack
-  
-  UIEdgeInsets insets                = UIEdgeInsetsMake(0, HORIZONTAL_BUFFER, 0, HORIZONTAL_BUFFER);
-  ASInsetLayoutSpec *headerWithInset = [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets child:headerStack];
-  headerWithInset.flexShrink = YES;
-  
-  // vertical stack
-  
-  CGFloat cellWidth                  = constrainedSize.max.width;
-  _photoImageView.preferredFrameSize = CGSizeMake(cellWidth, cellWidth);  // constrain photo frame size
-  
-  ASStackLayoutSpec *verticalStack   = [ASStackLayoutSpec verticalStackLayoutSpec];
-  verticalStack.alignItems           = ASStackLayoutAlignItemsStretch;    // stretch headerStack to fill horizontal space
-  
-  [verticalStack setChildren:@[headerWithInset, _photoImageView, footerWithInset]];
-
-  return verticalStack;
-}
-
- -
-
- -###Discussion - -Get the full Texture project at examples/ASDKgram. - -#Social App Layout 2 - - - -
-SwiftObjective-C - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize {
-
-  ASLayoutSpec *textSpec  = [self textSpec];
-  ASLayoutSpec *imageSpec = [self imageSpecWithSize:constrainedSize];
-  ASOverlayLayoutSpec *soldOutOverImage = [ASOverlayLayoutSpec overlayLayoutSpecWithChild:imageSpec 
-                                                                                  overlay:[self soldOutLabelSpec]];
-  
-  NSArray *stackChildren = @[soldOutOverImage, textSpec];
-  
-  ASStackLayoutSpec *mainStack = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical 
-                                                                         spacing:0.0
-                                                                  justifyContent:ASStackLayoutJustifyContentStart
-                                                                      alignItems:ASStackLayoutAlignItemsStretch          
-                                                                        children:stackChildren];
-  
-  ASOverlayLayoutSpec *soldOutOverlay = [ASOverlayLayoutSpec overlayLayoutSpecWithChild:mainStack 
-                                                                                overlay:self.soldOutOverlay];
-  
-  return soldOutOverlay;
-}
-
-- (ASLayoutSpec *)textSpec {
-  CGFloat kInsetHorizontal        = 16.0;
-  CGFloat kInsetTop               = 6.0;
-  CGFloat kInsetBottom            = 0.0;
-  UIEdgeInsets textInsets         = UIEdgeInsetsMake(kInsetTop, kInsetHorizontal, kInsetBottom, kInsetHorizontal);
-  
-  ASLayoutSpec *verticalSpacer    = [[ASLayoutSpec alloc] init];
-  verticalSpacer.flexGrow         = YES;
-  
-  ASLayoutSpec *horizontalSpacer1 = [[ASLayoutSpec alloc] init];
-  horizontalSpacer1.flexGrow      = YES;
-  
-  ASLayoutSpec *horizontalSpacer2 = [[ASLayoutSpec alloc] init];
-  horizontalSpacer2.flexGrow      = YES;
-  
-  NSArray *info1Children = @[self.firstInfoLabel, self.distanceLabel, horizontalSpacer1, self.originalPriceLabel];
-  NSArray *info2Children = @[self.secondInfoLabel, horizontalSpacer2, self.finalPriceLabel];
-  if ([ItemNode isRTL]) {
-    info1Children = [[info1Children reverseObjectEnumerator] allObjects];
-    info2Children = [[info2Children reverseObjectEnumerator] allObjects];
-  }
-  
-  ASStackLayoutSpec *info1Stack = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal 
-                                                                          spacing:1.0
-                                                                   justifyContent:ASStackLayoutJustifyContentStart 
-                                                                       alignItems:ASStackLayoutAlignItemsBaselineLast children:info1Children];
-  
-  ASStackLayoutSpec *info2Stack = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal 
-                                                                          spacing:0.0
-                                                                   justifyContent:ASStackLayoutJustifyContentCenter 
-                                                                       alignItems:ASStackLayoutAlignItemsBaselineLast children:info2Children];
-  
-  ASStackLayoutSpec *textStack = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical 
-                                                                         spacing:0.0
-                                                                  justifyContent:ASStackLayoutJustifyContentEnd
-                                                                      alignItems:ASStackLayoutAlignItemsStretch
-                                                                        children:@[self.titleLabel, verticalSpacer, info1Stack, info2Stack]];
-  
-  ASInsetLayoutSpec *textWrapper = [ASInsetLayoutSpec insetLayoutSpecWithInsets:textInsets 
-                                                                          child:textStack];
-  textWrapper.flexGrow = YES;
-  
-  return textWrapper;
-}
-
-- (ASLayoutSpec *)imageSpecWithSize:(ASSizeRange)constrainedSize {
-  CGFloat imageRatio = [self imageRatioFromSize:constrainedSize.max];
-  
-  ASRatioLayoutSpec *imagePlace = [ASRatioLayoutSpec ratioLayoutSpecWithRatio:imageRatio child:self.dealImageView];
-  
-  self.badge.layoutPosition = CGPointMake(0, constrainedSize.max.height - kFixedLabelsAreaHeight - kBadgeHeight);
-  self.badge.sizeRange = ASRelativeSizeRangeMake(ASRelativeSizeMake(ASRelativeDimensionMakeWithPercent(0), ASRelativeDimensionMakeWithPoints(kBadgeHeight)), ASRelativeSizeMake(ASRelativeDimensionMakeWithPercent(1), ASRelativeDimensionMakeWithPoints(kBadgeHeight)));
-  ASStaticLayoutSpec *badgePosition = [ASStaticLayoutSpec staticLayoutSpecWithChildren:@[self.badge]];
-  
-  ASOverlayLayoutSpec *badgeOverImage = [ASOverlayLayoutSpec overlayLayoutSpecWithChild:imagePlace overlay:badgePosition];
-  badgeOverImage.flexGrow = YES;
-  
-  return badgeOverImage;
-}
-
-- (ASLayoutSpec *)soldOutLabelSpec {
-  ASCenterLayoutSpec *centerSoldOutLabel = [ASCenterLayoutSpec centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringXY 
-  sizingOptions:ASCenterLayoutSpecSizingOptionMinimumXY child:self.soldOutLabelFlat];
-  ASStaticLayoutSpec *soldOutBG = [ASStaticLayoutSpec staticLayoutSpecWithChildren:@[self.soldOutLabelBackground]];
-  ASCenterLayoutSpec *centerSoldOut = [ASCenterLayoutSpec centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringXY   sizingOptions:ASCenterLayoutSpecSizingOptionDefault child:soldOutBG];
-  ASBackgroundLayoutSpec *soldOutLabelOverBackground = [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild:centerSoldOutLabel background:centerSoldOut];
-  return soldOutLabelOverBackground;
-}
-
- -
-
- -###Discussion - -Get the full Texture project at examples/CatDealsCollectionView. diff --git a/submodules/AsyncDisplayKit/docs/_docs/automatic-subnode-mgmt.md b/submodules/AsyncDisplayKit/docs/_docs/automatic-subnode-mgmt.md deleted file mode 100755 index e4ff534206..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/automatic-subnode-mgmt.md +++ /dev/null @@ -1,296 +0,0 @@ ---- -title: Automatic Subnode Management -layout: docs -permalink: /docs/automatic-subnode-mgmt.html -prevPage: batch-fetching-api.html -nextPage: inversion.html ---- - -Enabling Automatic Subnode Management (ASM) is required to use the Layout Transition API. However, apps that don't require animations can still benefit from the reduction in code size that this feature enables. - -When enabled, ASM means that your nodes no longer require `addSubnode:` or `removeFromSupernode` method calls. The presence or absence of the ASM node _and_ its subnodes is completely determined in its `layoutSpecThatFits:` method. - -### Example ### -
-Consider the following intialization method from the PhotoCellNode class in ASDKgram sample app. This ASCellNode subclass produces a simple social media photo feed cell. - -In the "Original Code" we see the familiar `addSubnode:` calls in bold. In the "Code with ASM" these have been removed and replaced with a single line that enables ASM. - -By setting `.automaticallyManagesSubnodes` to `YES` on the `ASCellNode`, we _no longer_ need to call `addSubnode:` for each of the `ASCellNode`'s subnodes. These `subNodes` will be present in the node hierarchy as long as this class' `layoutSpecThatFits:` method includes them. - - -Original code -
- - Objective-C - Swift - -
-
-- (instancetype)initWithPhotoObject:(PhotoModel *)photo;
-{
-  self = [super init];
-  
-  if (self) {
-    _photoModel = photo;
-    
-    _userAvatarImageNode = [[ASNetworkImageNode alloc] init];
-    _userAvatarImageNode.URL = photo.ownerUserProfile.userPicURL;
-    [self addSubnode:_userAvatarImageNode];
-
-    _photoImageNode = [[ASNetworkImageNode alloc] init];
-    _photoImageNode.URL = photo.URL;
-    [self addSubnode:_photoImageNode];
-
-    _userNameTextNode = [[ASTextNode alloc] init];
-    _userNameTextNode.attributedString = [photo.ownerUserProfile usernameAttributedStringWithFontSize:FONT_SIZE];
-    [self addSubnode:_userNameTextNode];
-    
-    _photoLocationTextNode = [[ASTextNode alloc] init];
-    [photo.location reverseGeocodedLocationWithCompletionBlock:^(LocationModel *locationModel) {
-      if (locationModel == _photoModel.location) {
-        _photoLocationTextNode.attributedString = [photo locationAttributedStringWithFontSize:FONT_SIZE];
-        [self setNeedsLayout];
-      }
-    }];
-    [self addSubnode:_photoLocationTextNode];
-  }
-  
-  return self;
-}
-
- -
-
- -Code with ASM -
- - Objective-C - Swift - -
-
-- (instancetype)initWithPhotoObject:(PhotoModel *)photo;
-{
-  self = [super init];
-  
-  if (self) {
-    self.automaticallyManagesSubnodes = YES;
-    
-    _photoModel = photo;
-    
-    _userAvatarImageNode = [[ASNetworkImageNode alloc] init];
-    _userAvatarImageNode.URL = photo.ownerUserProfile.userPicURL;
-
-    _photoImageNode = [[ASNetworkImageNode alloc] init];
-    _photoImageNode.URL = photo.URL;
-
-    _userNameTextNode = [[ASTextNode alloc] init];
-    _userNameTextNode.attributedString = [photo.ownerUserProfile usernameAttributedStringWithFontSize:FONT_SIZE];
-    
-    _photoLocationTextNode = [[ASTextNode alloc] init];
-    [photo.location reverseGeocodedLocationWithCompletionBlock:^(LocationModel *locationModel) {
-      if (locationModel == _photoModel.location) {
-        _photoLocationTextNode.attributedString = [photo locationAttributedStringWithFontSize:FONT_SIZE];
-        [self setNeedsLayout];
-      }
-    }];
-  }
-  
-  return self;
-}
-
- -
-
- -Several of the elements in this cell - `_userAvatarImageNode`, `_photoImageNode`, and `_photoLocationLabel` depend on seperate data fetches from the network that could return at any time. When should they be added to the UI? - -ASM knows whether or not to include these elements in the UI based on the information provided in the cell's `ASLayoutSpec`. - -
-An ASLayoutSpec completely describes the UI of a view in your app by specifying the hierarchy state of a node and its subnodes. An ASLayoutSpec is returned by a node from its layoutSpecThatFits: method. -
- -**It is your job to construct a `layoutSpecThatFits:` that handles how the UI should look with and without these elements.** - -Consider the abreviated `layoutSpecThatFits:` method for the `ASCellNode` subclass above. - -
- -Objective-C -Swift - - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{  
-  ASStackLayoutSpec *headerSubStack = [ASStackLayoutSpec verticalStackLayoutSpec];
-  headerSubStack.flexShrink         = YES;
-  if (_photoLocationLabel.attributedString) {
-    [headerSubStack setChildren:@[_userNameLabel, _photoLocationLabel]];
-  } else {
-    [headerSubStack setChildren:@[_userNameLabel]];
-  }
-  
-  _userAvatarImageNode.preferredFrameSize = CGSizeMake(USER_IMAGE_HEIGHT, USER_IMAGE_HEIGHT);     // constrain avatar image frame size
-
-  ASLayoutSpec *spacer           = [[ASLayoutSpec alloc] init]; 
-  spacer.flexGrow                = YES;
-  
-  UIEdgeInsets avatarInsets      = UIEdgeInsetsMake(HORIZONTAL_BUFFER, 0, HORIZONTAL_BUFFER, HORIZONTAL_BUFFER);
-  ASInsetLayoutSpec *avatarInset = [ASInsetLayoutSpec insetLayoutSpecWithInsets:avatarInsets child:_userAvatarImageNode];
-
-  ASStackLayoutSpec *headerStack = [ASStackLayoutSpec horizontalStackLayoutSpec];
-  headerStack.alignItems         = ASStackLayoutAlignItemsCenter;                     // center items vertically in horizontal stack
-  headerStack.justifyContent     = ASStackLayoutJustifyContentStart;                  // justify content to the left side of the header stack
-  [headerStack setChildren:@[avatarInset, headerSubStack, spacer]];
-  
-  // header inset stack
-  UIEdgeInsets insets                = UIEdgeInsetsMake(0, HORIZONTAL_BUFFER, 0, HORIZONTAL_BUFFER);
-  ASInsetLayoutSpec *headerWithInset = [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets child:headerStack];
-  
-  // footer inset stack
-  UIEdgeInsets footerInsets          = UIEdgeInsetsMake(VERTICAL_BUFFER, HORIZONTAL_BUFFER, VERTICAL_BUFFER, HORIZONTAL_BUFFER);
-  ASInsetLayoutSpec *footerWithInset = [ASInsetLayoutSpec insetLayoutSpecWithInsets:footerInsets child:_photoCommentsNode];
-  
-  // vertical stack
-  CGFloat cellWidth                  = constrainedSize.max.width;
-  _photoImageNode.preferredFrameSize = CGSizeMake(cellWidth, cellWidth);              // constrain photo frame size
-  
-  ASStackLayoutSpec *verticalStack   = [ASStackLayoutSpec verticalStackLayoutSpec];
-  verticalStack.alignItems           = ASStackLayoutAlignItemsStretch;                // stretch headerStack to fill horizontal space
-  [verticalStack setChildren:@[headerWithInset, _photoImageNode, footerWithInset]];
-
-  return verticalStack;
-}
-
- - -
-
- - -Here you can see that the children of the `headerSubStack` depend on whether or not the `_photoLocationLabel` attributed string has returned from the reverseGeocode process yet. - -The `_userAvatarImageNode`, `_photoImageNode`, and `_photoCommentsNode` are added into the ASLayoutSpec, but will not show up until their data fetches return. - -### Updating an ASLayoutSpec ### -
-**If something happens that you know will change your `ASLayoutSpec`, it is your job to call `setNeedsLayout`**. This is equivalent to `transitionLayout:duration:0` in the Transition Layout API. You can see this call in the completion block of the `photo.location reverseGeocodedLocationWithCompletionBlock:` call in the first code block. - -An appropriately constructed ASLayoutSpec will know which subnodes need to be added, removed or animated. - -Try out the ASDKgram sample app after looking at the code above, and you will see how simple it is to code an `ASCellNode` whose layout is responsive to numerous, individual data fetches and returns. While the `ASLayoutSpec` is coded in a way that leaves holes for the avatar and photo to populate, you can see how the cell's height will automatically adjust to accomodate the comments node at the bottom of the photo. - -This is just a simple example, but this feature has many more powerful uses. - -
-Warning: addSubnode: and removeFromSupernode should never be called on a node that has ASM enabled. Doing so could cause the following exception - "A flattened layout must consist exclusively of node sublayouts". -
diff --git a/submodules/AsyncDisplayKit/docs/_docs/batch-fetching-api.md b/submodules/AsyncDisplayKit/docs/_docs/batch-fetching-api.md deleted file mode 100755 index 5fd9044697..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/batch-fetching-api.md +++ /dev/null @@ -1,151 +0,0 @@ ---- -title: Batch Fetching API -layout: docs -permalink: /docs/batch-fetching-api.html -prevPage: hit-test-slop.html -nextPage: automatic-subnode-mgmt.html ---- - -Texture's Batch Fetching API makes it easy to add fetching chunks of new data. Usually this would be done in a `-scrollViewDidScroll:` method, but Texture provides a more structured mechanism. - -By default, as a user is scrolling, when they approach the point in the table or collection where they are 2 "screens" away from the end of the current content, the table will try to fetch more data. - -If you'd like to configure how far away from the end you should be, just change the `leadingScreensForBatching` property on an `ASTableView` or `ASCollectionView` to something else. - -
-SwiftObjective-C - -
-
-tableNode.view.leadingScreensForBatching = 3.0;  // overriding default of 2.0
-
- -
-
- -### Batch Fetching Delegate Methods - -The first thing you have to do in order to support batch fetching, is implement a method that decides if it's an appropriate time to load new content or not. - -For tables it would look something like: - -
-SwiftObjective-C - -
-
-- (BOOL)shouldBatchFetchForTableNode:(ASTableNode *)tableNode
-{
-  if (_weNeedMoreContent) {
-    return YES;
-  }
-
-  return NO;
-}
-
- -
-
- -and for collections: - -
-SwiftObjective-C - -
-
-
-- (BOOL)shouldBatchFetchForCollectionNode:(ASCollectionNode *)collectionNode
-{
-  if (_weNeedMoreContent) {
-    return YES;
-  }
-
-  return NO;
-}
-
- -
-
- -These methods will be called when the user has scrolled into the batch fetching range, and their answer will determine if another request actually needs to be made or not. Usually this decision is based on if there is still data to fetch. - -If you return NO, then no new batch fetching process will happen. If you return YES, the batch fetching mechanism will start and the following method will be called next. - -`-tableNode:willBeginBatchFetchWithContext:` - -or - -`-collectionNode:willBeginBatchFetchWithContext:` - -This is where you should actually fetch data, be it from a web API or some local database. - -
-Note: This method will always be called on a background thread. This means, if you need to do any work on the main thread, you should dispatch it to the main thread and then proceed with the work needed in order to finish the batch fetch operation. -
- -
-SwiftObjective-C - -
-
-- (void)tableNode:(ASTableNode *)tableNode willBeginBatchFetchWithContext:(ASBatchContext *)context 
-{
-  // Fetch data most of the time asynchronoulsy from an API or local database
-  NSArray *newPhotos = [SomeSource getNewPhotos];
-
-  // Insert data into table or collection node
-  [self insertNewRowsInTableNode:newPhotos];
-
-  // Decide if it's still necessary to trigger more batch fetches in the future
-  _stillDataToFetch = ...;
-
-  // Properly finish the batch fetch
-  [context completeBatchFetching:YES];
-}
-
- -
-
- -Once you've finished fetching your data, it is very important to let Texture know that you have finished the process. To do that, you need to call `-completeBatchFetching:` on the `context` object that was passed in with a parameter value of `YES`. This assures that the whole batch fetching mechanism stays in sync and the next batch fetching cycle can happen. Only by passing `YES` will the context know to attempt another batch update when necessary. - -Check out the following sample apps to see the batch fetching API in action: - diff --git a/submodules/AsyncDisplayKit/docs/_docs/button-node.md b/submodules/AsyncDisplayKit/docs/_docs/button-node.md deleted file mode 100755 index 11eb6ca955..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/button-node.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: ASButtonNode -layout: docs -permalink: /docs/button-node.html -prevPage: cell-node.html -nextPage: text-node.html ---- - -### Basic Usage - -`ASButtonNode` subclasses `ASControlNode` in the same way `UIButton` subclasses `UIControl`. In contrast, being able to layer back the subnodes of every button can significantly lighten main thread impact relative to `UIButton`. - -### Control State - -If you've used `-setTitle:forControlState:` then you already know how to set up an ASButtonNode. The `ASButtonNode` version adds in a few parameters for conveniently setting attributes. - -
-SwiftObjective-C - -
-
-[buttonNode setTitle:@"Button Title Normal" withFont:nil withColor:[UIColor blueColor] forState:ASControlStateNormal];
-
- -
-
- -If you need even more control, you can also opt to use the attributed string version directly: - -
-SwiftObjective-C - -
-
-[self.buttonNode setAttributedTitle:attributedTitle forState:ASControlStateNormal];
-
- -
-
- -### Target-Action Pairs - -Again, analagous to UIKit, you can add sets of target-action pairs to respond to various events. - -
-SwiftObjective-C - -
-
-[buttonNode addTarget:self action:@selector(buttonPressed:) forControlEvents:ASControlNodeEventTouchUpInside];
-
- -
-
- -### Content Alignment - -`ASButtonNode` offers both `contentVerticalAlignment` and `contentHorizontalAlignment` properties. This allows you to easily set the alignment of the titleLabel or image you're using for your button. - -
-SwiftObjective-C - -
-
-self.buttonNode.contentVerticalAlignment = ASVerticalAlignmentTop;
-self.buttonNode.contentHorizontalAlignment = ASHorizontalAlignmentMiddle;
-
- -
-
- -
Note: At the moment, this property will not work if you aren't using -layoutSpecThatFits:. -
- -### Gotchas - -There are a few things that might trip up someone new to the framework. - -##### View Hierarchies -Let's say you want to add an `ASButtonNode` to the view of one of your existing view controllers. The first thing you'll notice is that setting a title for a control state doesn't seem to make your title appear. You can fix this by calling `-measure:` on the button which will cause its title label to be measured and laid out. - -The next thing you'll notice is that, if you set titles of various lengths for different control states, the button will dynamically grow and shrink as the title changes. This is because changing the title causes `-setNeedsLayout` to be called on the button. Within a node hierarchy, this makes sense, and will work as expected. - -Long story short, use an `ASViewController`. - -##### Selected State - -If you want your button to change to a "selected" state after being tapped, you'll need to do that manually. - diff --git a/submodules/AsyncDisplayKit/docs/_docs/cell-node.md b/submodules/AsyncDisplayKit/docs/_docs/cell-node.md deleted file mode 100755 index 60b1cfad3f..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/cell-node.md +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: ASCellNode -layout: docs -permalink: /docs/cell-node.html -prevPage: display-node.html -nextPage: button-node.html ---- - -`ASCellNode`, as you may have guessed, is the cell class of Texture. Unlike the various cells in UIKit, `ASCellNode` can be used with `ASTableNodes`, `ASCollectionNodes` and `ASPagerNodes`, making it incredibly flexible. - -### 3 Ways to Party - -There are three ways in which you can implement the cells you'll use in your Texture app: subclassing `ASCellNode`, initializing with an existing `ASViewController` or using an existing UIView or `CALayer`. - -#### Subclassing - -Subclassing an `ASCellNode` is pretty much the same as subclassing a regular `ASDisplayNode`. - -Most likely, you'll write a few of the following: - -- `-init` -- Thread safe initialization. -- `-layoutSpecThatFits:` -- Return a layout spec that defines the layout of your cell. -- `-didLoad` -- Called on the main thread. Good place to add gesture recognizers, etc. -- `-layout` -- Also called on the main thread. Layout is complete after the call to super which means you can do any extra tweaking you need to do. - - -#### Initializing with an `ASViewController` - -Say you already have some type of view controller written to display a view in your app. If you want to take that view controller and drop its view in as a cell in one of the scrolling nodes or a pager node its no problem. - -For example, say you already have a view controller written that manages an `ASTableNode`. To use that table as a page in an `ASPagerNode` you can use `-initWithViewControllerBlock`. - -
-SwiftObjective-C -
-
-- (ASCellNode *)pagerNode:(ASPagerNode *)pagerNode nodeAtIndex:(NSInteger)index
-{
-    NSArray *animals = self.allAnimals[index];
-    
-    ASCellNode *node = [[ASCellNode alloc] initWithViewControllerBlock:^UIViewController * _Nonnull{
-        return [[AnimalTableNodeController alloc] initWithAnimals:animals];
-    } didLoadBlock:nil];
-    
-    node.style.preferredSize = pagerNode.bounds.size;
-    
-    return node;
-}
-
- -
-
- -And this works for any combo of scrolling container node and `UIViewController` subclass. You want to embed random view controllers in your collection node? Go for it. - -
-Notice that you need to set the .style.preferredSize of a node created this way. Normally your nodes will implement -layoutSpecThatFits: but since these don't you'll need give the cell a size. -
- - -#### Initializing with a `UIView` or `CALayer` - -Alternatively, if you already have a `UIView` or `CALayer` subclass that you'd like to drop in as cell you can do that instead. - -
-SwiftObjective-C -
-
-- (ASCellNode *)pagerNode:(ASPagerNode *)pagerNode nodeAtIndex:(NSInteger)index
-{
-    NSArray *animal = self.animals[index];
-    
-    ASCellNode *node = [[ASCellNode alloc] initWithViewBlock:^UIView * _Nonnull{
-        return [[SomeAnimalView alloc] initWithAnimal:animal];
-    }];
-
-    node.style.preferredSize = pagerNode.bounds.size;
-    
-    return node;
-}
-
- -
-
- -As you can see, its roughly the same idea. That being said, if you're doing this, you may consider converting the existing `UIView` subclass to be an `ASCellNode` subclass in order to gain the advantage of asynchronous display. - -### Never Show Placeholders - -Usually, if a cell hasn't finished its display pass before it has reached the screen it will show placeholders until it has completed drawing its content. - -If placeholders are unacceptable, you can set an `ASCellNode`'s `neverShowPlaceholders` property to `YES`. - -
-SwiftObjective-C -
-
-node.neverShowPlaceholders = YES;
-
- -
-
- -With this property set to `YES`, the main thread will be blocked until display has completed for the cell. This is more similar to UIKit, and in fact makes Texture scrolling visually indistinguishable from UIKit's, except being faster. - -
-Using this option does not eliminate all of the performance advantages of Texture. Normally, a cell has been preloading and is almost done when it reaches the screen, so the blocking time is very short. Even if the rangeTuningParameters are set to 0 this option outperforms UIKit. While the main thread is waiting, subnode display executes concurrently. -
- -### `UITableViewCell` specific propertys - -UITableViewCell has properties like selectionStyle, accessoryType and seperatorInset that many of us use sometimes to give the Cell more detail. For this case ASCellNode has the same (passthrough) properties that can be used. - -
-UIKits UITableViewCell contains ASCellNode as a subview. Depending how your ASLayoutSpec is defined it may occur that your Layout overlays the UITableViewCell.accessoryView and therefore is not visible. Make sure that your Layout doesn't overlay any of UITableViewCell's specific properties. -
diff --git a/submodules/AsyncDisplayKit/docs/_docs/containers-ascollectionnode.md b/submodules/AsyncDisplayKit/docs/_docs/containers-ascollectionnode.md deleted file mode 100755 index 780e5c3ad9..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/containers-ascollectionnode.md +++ /dev/null @@ -1,228 +0,0 @@ ---- -title: ASCollectionNode -layout: docs -permalink: /docs/containers-ascollectionnode.html -prevPage: containers-astablenode.html -nextPage: containers-aspagernode.html ---- - -`ASCollectionNode` is equivalent to UIKit's `UICollectionView` and can be used in place of any `UICollectionView`. - -`ASCollectionNode` replaces `UICollectionView`'s required method - -
- - Swift - Objective-C - - -
-
-- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;
-  
- - -
-
- -with your choice of **_one_** of the following methods - -
-SwiftObjective-C - -
-
-- (ASCellNode *)collectionNode:(ASCollectionNode *)collectionNode nodeForItemAtIndexPath:(NSIndexPath *)indexPath
-
- -
-
- -

-or -

- -
-SwiftObjective-C - -
-
-- (ASCellNodeBlock)collectionNode:(ASCollectionNode *)collectionNode nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath
-
- -
-
- -It is recommended that you use the node block version of the method so that your collection node will be able to prepare and display all of its cells concurrently. - -As noted in the previous section: - -
    -
  • ASCollectionNodes do not utilize cell reuse.
  • -
  • Using the "nodeBlock" method is preferred.
  • -
  • It is very important that the returned node blocks are thread-safe.
  • -
  • ASCellNodes can be used by ASTableNode, ASCollectionNode and ASPagerNode.
  • -
- -### Node Block Thread Safety Warning - -It is very important that node blocks be thread-safe. One aspect of that is ensuring that the data model is accessed _outside_ of the node block. Therefore, it is unlikely that you should need to use the index inside of the block. - -Consider the following `-collectionNode:nodeBlockForItemAtIndexPath:` method. - -
-SwiftObjective-C -
-
-- (ASCellNodeBlock)collectionNode:(ASCollectionNode *)collectionNode nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath
-{
-    PhotoModel *photoModel = [_photoFeed objectAtIndex:indexPath.row];
-    
-    // this may be executed on a background thread - it is important to make sure it is thread safe
-    ASCellNode *(^cellNodeBlock)() = ^ASCellNode *() {
-        PhotoCellNode *cellNode = [[PhotoCellNode alloc] initWithPhoto:photoModel];
-        cellNode.delegate = self;
-        return cellNode;
-    };
-    
-    return cellNodeBlock;
-}
-  
- - -
-
- -In the example above, you can see how the index is used to access the photo model before creating the node block. - -### Replacing a UICollectionViewController with an ASViewController - -Texture does not offer an equivalent to UICollectionViewController. Instead, you can use the flexibility of ASViewController to recreate any type of UI...ViewController. - -Consider, the following ASViewController subclass. - -An ASCollectionNode is assigned to be managed by an `ASViewController` in its `-initWithNode:` designated initializer method, thus making it a sort of ASCollectionNodeController. - -
-SwiftObjective-C -
-
-- (instancetype)init
-{
-  _flowLayout = [[UICollectionViewFlowLayout alloc] init];
-  _collectionNode = [[ASCollectionNode alloc] initWithCollectionViewLayout:_flowLayout];
-  
-  self = [super initWithNode:_collectionNode];
-  if (self) {
-    _flowLayout.minimumInteritemSpacing = 1;
-    _flowLayout.minimumLineSpacing = 1;
-  }
-  
-  return self;
-}
-
- - -
-
- -This works just as well with any node including as an ASTableNode, ASPagerNode, etc. - -### Accessing the ASCollectionView -If you've used previous versions of Texture, you'll notice that `ASCollectionView` has been removed in favor of `ASCollectionNode`. - -
-`ASCollectionView`, an actual `UICollectionView` subclass, is still used internally by `ASCollectionNode`. While it should not be created directly, it can still be used directly by accessing the `.view` property of an `ASCollectionNode`. -

-Don't forget that a node's `view` or `layer` property should only be accessed after viewDidLoad or didLoad, respectively, have been called. -
- -The `LocationCollectionNodeController` above accesses the `ASCollectionView` directly in `-viewDidLoad`. - -
-SwiftObjective-C -
-
-- (void)viewDidLoad
-{
-  [super viewDidLoad];
-  
-  _collectionNode.delegate = self;
-  _collectionNode.dataSource = self;
-  _collectionNode.view.allowsSelection = NO;
-  _collectionNode.view.backgroundColor = [UIColor whiteColor];
-}
-
- - -
-
- -### Cell Sizing and Layout - -As discussed in the previous section, `ASCollectionNode` and `ASTableNode` do not need to keep track of the height of their `ASCellNode`s. - -Right now, cells will grow to fit their constrained size and will be laid out by whatever `UICollectionViewLayout` you provide. - -You can also constrain cells used in a collection node using `ASCollectionNode`'s `-constrainedSizeForItemAtIndexPath:`. - -### Examples - -The most detailed example of laying out the cells of an `ASCollectionNode` is the CustomCollectionView app. It includes a Pinterest style cell layout using an `ASCollectionNode` and a custom `UICollectionViewLayout`. - -#### More Sample Apps with ASCollectionNodes - - - -### Interoperability with UICollectionViewCells - -`ASCollectionNode` supports using UICollectionViewCells alongside native ASCellNodes. - -Note that these UIKit cells will **not** have the performance benefits of `ASCellNodes` (like preloading, async layout, and async drawing), even when mixed within the same `ASCollectionNode`. - -However, this interoperability allows developers the flexibility to test out the framework without needing to convert all of their cells at once. Read more here. diff --git a/submodules/AsyncDisplayKit/docs/_docs/containers-asnodecontroller.md b/submodules/AsyncDisplayKit/docs/_docs/containers-asnodecontroller.md deleted file mode 100755 index 09b644440f..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/containers-asnodecontroller.md +++ /dev/null @@ -1,238 +0,0 @@ ---- -title: "ASNodeController (Beta)" -layout: docs -permalink: /docs/containers-asnodecontroller.html -prevPage: containers-asviewcontroller.html -nextPage: containers-astablenode.html ---- - -
-To use this feature, you will need to import "ASNodeController+Beta.h" -
- -The Texture team has many exciting ideas for expanding `ASNodeController`. Follow along [here](https://github.com/facebook/AsyncDisplayKit/issues/2964) if you'd like to participate in shaping the future of node controllers. - -For now, `ASNodeController` remains a simple, but powerful class. - -### Example - -The [example project](https://github.com/texturegroup/texture/pull/2945) attached in the initial PR modifies the normal [ASDKgram](https://github.com/texturegroup/texture/tree/master/examples/ASDKgram) project to use an `ASNodeController`. -This `PhotoCellNodeController` is used to manage the fetching of the comments data for a photo in a photo feed, once the photo enters the preload range. This node controller allows us to separate the preloading logic from where it previously existed in the `PhotoCellNode` "view" class. - -To convert ASDKgram to use an `ASNodeController`, we first create a `PhotoCellNodeController` class. - -This node controller overrides `ASNodeController`'s' `-loadNode` method to create a `PhotoCellNode` once required. It is not neccessary to call super in this method. - -This node controller also observes its node's interface state in order to intelligently preload the photo's comment feed model data when the `PhotoCellNode` enters the preload state (which indicates that the photo cell is likely to scroll onscreen soon). - -All of this logic can be removed from where it previously existed in the "view" (our `PhotoCellNode` class), leading to a more concise and MVC-friendly view class. - -
- - Swift - Objective-C - - -
-
-@implementation PhotoCellNodeController
-
-- (void)loadNode
-{
-  self.node = [[PhotoCellNode alloc] initWithPhotoObject:self.photoModel];
-}
-
-- (void)didEnterPreloadState
-{
-  [super didEnterPreloadState];
-  
-  CommentFeedModel *commentFeedModel = _photoModel.commentFeed;
-  [commentFeedModel refreshFeedWithCompletionBlock:^(NSArray *newComments) {
-    // load comments for photo
-    if (commentFeedModel.numberOfItemsInFeed > 0) {
-      [self.node.photoCommentsNode updateWithCommentFeedModel:commentFeedModel];
-      [self.node setNeedsLayout];
-    }
-  }];
-}
-
-@end
-  
- - -
-
- -Next, we add a mutable array to the `PhotoFeedNodeController` to store our node controllers and instantiate it in the init method. - -
- - Swift - Objective-C - - -
-
-@implementation PhotoFeedNodeController
-{
-  PhotoFeedModel          *_photoFeed;
-  ASTableNode             *_tableNode;
-  NSMutableArray *_photoCellNodeControllers;
-}
-
-- (instancetype)init
-{
-  _tableNode = [[ASTableNode alloc] init];
-  self = [super initWithNode:_tableNode];
-  
-  if (self) {
-    self.navigationItem.title = @"Texture";
-    [self.navigationController setNavigationBarHidden:YES];
-    
-    _tableNode.dataSource = self;
-    _tableNode.delegate = self;
-    
-    _photoCellNodeControllers = [NSMutableArray array];
-  }
-  
-  return self;
-}
-  
- - -
-
- -To use this node controller, we modify our table row insertion logic to create a `PhotoCellNodeController` rather than a `PhotoCellNode` directly and add it to our node controller array. - -
- - Swift - Objective-C - - -
-
-- (void)insertNewRowsInTableNode:(NSArray *)newPhotos
-{
-  NSInteger section = 0;
-  NSMutableArray *indexPaths = [NSMutableArray array];
-  
-  NSUInteger newTotalNumberOfPhotos = [_photoFeed numberOfItemsInFeed];
-  for (NSUInteger row = newTotalNumberOfPhotos - newPhotos.count; row < newTotalNumberOfPhotos; row++) {
-  
-    // create photoCellNodeControllers for the new photos
-    PhotoCellNodeController *cellController = [[PhotoCellNodeController alloc] init];
-    cellController.photoModel = [_photoFeed objectAtIndex:row];
-    [_photoCellNodeControllers addObject:cellController];
-    
-    // include this index path in the insert rows call for the table
-    NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:section];
-    [indexPaths addObject:path];
-  }
-  
-  [_tableNode insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
-}
-  
- - -
-
- -Don't forget to modify the table data source method to return the node controller rather than the cell node. - -
- - Swift - Objective-C - - -
-
-- (ASCellNodeBlock)tableNode:(ASTableNode *)tableNode nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath
-{
-  PhotoCellNodeController *cellController = [_photoCellNodeControllers objectAtIndex:indexPath.row];
-  // this will be executed on a background thread - important to make sure it's thread safe
-  ASCellNode *(^ASCellNodeBlock)() = ^ASCellNode *() {
-    PhotoCellNode *cellNode = [cellController node];
-    return cellNode;
-  };
-  
-  return ASCellNodeBlock;
-}
-  
- - -
-
- - - diff --git a/submodules/AsyncDisplayKit/docs/_docs/containers-aspagernode.md b/submodules/AsyncDisplayKit/docs/_docs/containers-aspagernode.md deleted file mode 100755 index f538983ee0..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/containers-aspagernode.md +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: ASPagerNode -layout: docs -permalink: /docs/containers-aspagernode.html -prevPage: containers-ascollectionnode.html -nextPage: display-node.html ---- - -`ASPagerNode` is a subclass of `ASCollectionNode` with a specific `UICollectionViewLayout` used under the hood. - -Using it allows you to produce a page style UI similar to what you'd create with UIKit's `UIPageViewController`. `ASPagerNode` currently supports staying on the correct page during rotation. It does _not_ currently support circular scrolling. - -The main dataSource methods are: - -
-SwiftObjective-C -
-
-- (NSInteger)numberOfPagesInPagerNode:(ASPagerNode *)pagerNode
-
- - -
-
- -and - -
-SwiftObjective-C -
-
-- (ASCellNode *)pagerNode:(ASPagerNode *)pagerNode nodeAtIndex:(NSInteger)index
-
- - -
-
- -or - -
-SwiftObjective-C -
-
-- (ASCellNodeBlock)pagerNode:(ASPagerNode *)pagerNode nodeBlockAtIndex:(NSInteger)index`
-
- - -
-
- -These two methods, just as with `ASCollectionNode` and `ASTableNode` need to return either an `ASCellNode` or an `ASCellNodeBlock` - a block that creates an `ASCellNode` and can be run on a background thread. - -Note that neither methods should rely on cell reuse (they will be called once per row). Also, unlike UIKit, these methods are not called when the row is just about to display. - -While `-pagerNode:nodeAtIndex:` will be called on the main thread, `-pagerNode:nodeBlockAtIndex:` is preferred because it concurrently allocates cell nodes, meaning that the `-init:` method of each of your subnodes will be run in the background. **It is very important that node blocks be thread-safe** as they can be called on the main thread or a background queue. - -### Node Block Thread Safety Warning - -It is imperative that the data model be accessed outside of the node block. This means that it is highly unlikely that you should need to use the index inside of the block. - -In the example below, you can see how the index is used to access the photo model before creating the node block. - -
-SwiftObjective-C -
-
-- (ASCellNodeBlock)pagerNode:(ASPagerNode *)pagerNode nodeBlockAtIndex:(NSInteger)index
-{
-  PhotoModel *photoModel = _photoFeed[index];
-  
-  // this part can be executed on a background thread - it is important to make sure it is thread safe!
-  ASCellNode *(^cellNodeBlock)() = ^ASCellNode *() {
-    PhotoCellNode *cellNode = [[PhotoCellNode alloc] initWithPhoto:photoModel];
-    return cellNode;
-  };
-  
-  return cellNodeBlock;
-}
-
- - -
-
- -### Using an ASViewController For Optimal Performance - -One especially useful pattern is to return an `ASCellNode` that is initialized with an existing `UIViewController` or `ASViewController`. For optimal performance, use an `ASViewController`. - -
-SwiftObjective-C -
-
-- (ASCellNode *)pagerNode:(ASPagerNode *)pagerNode nodeAtIndex:(NSInteger)index
-{
-    NSArray *animals = self.animals[index];
-    
-    ASCellNode *node = [[ASCellNode alloc] initWithViewControllerBlock:^{
-        return [[AnimalTableNodeController alloc] initWithAnimals:animals];;
-    } didLoadBlock:nil];
-    
-    node.style.preferredSize = pagerNode.bounds.size;
-    
-    return node;
-}
-
- - -
-
- -In this example, you can see that the node is constructed using the `-initWithViewControllerBlock:` method. It is usually necessary to provide a cell created this way with a `style.preferredSize` so that it can be laid out correctly. - -### Use ASPagerNode as root node of an ASViewController - -#### Log message while popping back in the view controller hierarchy -If you use an `ASPagerNode` embedded in an `ASViewController` in full screen. If you pop back from the view controller hierarchy you will see some error message in the console. - -To resolve the error message set `self.automaticallyAdjustsScrollViewInsets = NO;` in `viewDidLoad` in your `ASViewController` subclass. - -#### `navigationBar.translucent` is set to YES -If you have an `ASPagerNode` embedded in an `ASViewController` in full screen and set the `navigationBar.translucent` to `YES`, you will see an error message while pushing the view controller on the view controller stack. - -To resolve the error message add `[self.pagerNode waitUntilAllUpdatesAreCommitted];` within `- (void)viewWillAppear:(BOOL)animated` in your `ASViewController` subclass. -Unfortunately the disadvantage of this is that the first measurement pass will block the main thread until it finishes. - -#### Some more details about the error messages above -The reason for this error message is that due to the asynchronous nature of Texture, measurement of nodes will happen on a background thread as UIKit will resize the view of the `ASViewController` on on the main thread. The new layout pass has to wait until the old layout pass finishes with an old layout constrained size. Unfortunately while the measurement pass with the old constrained size is still in progress the `ASPagerFlowLayout` that is backing a `ASPagerNode` will print some errors in the console as it expects sizes for nodes already measured with the new constrained size. - -### Sample Apps - -Check out the following sample apps to see an `ASPagerNode` in action: - diff --git a/submodules/AsyncDisplayKit/docs/_docs/containers-astablenode.md b/submodules/AsyncDisplayKit/docs/_docs/containers-astablenode.md deleted file mode 100755 index 7742e23c3b..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/containers-astablenode.md +++ /dev/null @@ -1,228 +0,0 @@ ---- -title: ASTableNode -layout: docs -permalink: /docs/containers-astablenode.html -prevPage: containers-asnodecontroller.html -nextPage: containers-ascollectionnode.html ---- - -`ASTableNode` is equivalent to UIKit's `UITableView` and can be used in place of any `UITableView`. - -`ASTableNode` replaces `UITableView`'s required method - -
- - Swift - Objective-C - - -
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
-  
- - -
-
- -with your choice of **_one_** of the following methods - -
- - Swift - Objective-C - - -
-
-- (ASCellNode *)tableNode:(ASTableNode *)tableNode nodeForRowAtIndexPath:(NSIndexPath *)indexPath
-  
- - -
-
- -or - -
- - Swift - Objective-C - - -
-
-- (ASCellNodeBlock)tableNode:(ASTableNode *)tableNode nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath
-  
- - -
-
- -
-
-It is recommended that you use the node block version of these methods so that your table node will be able to prepare and display all of its cells concurrently. This means that all subnode initialization methods can be run in the background. Make sure to keep 'em thread safe. -
- -These two methods, need to return either an `ASCellNode` or an `ASCellNodeBlock`. An `ASCellNodeBlock` is a block that creates a `ASCellNode` which can be run on a background thread. Note that `ASCellNodes` are used by `ASTableNode`, `ASCollectionNode` and `ASPagerNode`. - -Note that neither of these methods require a reuse mechanism. - -### Replacing UITableViewController with ASViewController - -Texture does not offer an equivalent to `UITableViewController`. Instead, use an `ASViewController` initialized with an `ASTableNode`. - -Consider, again, the `ASViewController` subclass - PhotoFeedNodeController - from the `ASDKgram sample app` that uses a table node as its managed node. - -An `ASTableNode` is assigned to be managed by an `ASViewController` in its `-initWithNode:` designated initializer method. - -
-SwiftObjective-C -
-
-- (instancetype)init
-{
-    _tableNode = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain];
-    self = [super initWithNode:_tableNode];
-    
-    if (self) {
-      _tableNode.dataSource = self;
-      _tableNode.delegate = self;
-    }
-    
-    return self;
-}
-  
- - -
-
- -### Node Block Thread Safety Warning - -It is very important that node blocks be thread-safe. One aspect of that is ensuring that the data model is accessed _outside_ of the node block. Therefore, it is unlikely that you should need to use the index inside of the block. - -Consider the following `-tableNode:nodeBlockForRowAtIndexPath:` method from the `PhotoFeedNodeController.m` file in the ASDKgram sample app. - -
-SwiftObjective-C -
-
-- (ASCellNodeBlock)tableNode:(ASTableNode *)tableNode nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath
-{
-    PhotoModel *photoModel = [_photoFeed objectAtIndex:indexPath.row];
-    
-    // this may be executed on a background thread - it is important to make sure it is thread safe
-    ASCellNode *(^cellNodeBlock)() = ^ASCellNode *() {
-        PhotoCellNode *cellNode = [[PhotoCellNode alloc] initWithPhoto:photoModel];
-        cellNode.delegate = self;
-        return cellNode;
-    };
-    
-    return cellNodeBlock;
-}
-  
- - -
-
- -In the example above, you can see how the index is used to access the photo model before creating the node block. - -### Accessing the ASTableView - -If you've used previous versions of Texture, you'll notice that `ASTableView` has been removed in favor of `ASTableNode`. - -
-ASTableView, an actual UITableView subclass, is still used internally by ASTableNode. While it should not be created directly, it can still be used directly by accessing the .view property of an ASTableNode. - -Don't forget that a node's view or layer property should only be accessed after -viewDidLoad or -didLoad, respectively, have been called. -
- -For example, you may want to set a table's separator style property. This can be done by accessing the table node's view in the `-viewDidLoad:` method as seen in the example below. - -
-SwiftObjective-C -
-
-- (void)viewDidLoad
-{
-  [super viewDidLoad];
-  
-  _tableNode.view.allowsSelection = NO;
-  _tableNode.view.separatorStyle = UITableViewCellSeparatorStyleNone;
-  _tableNode.view.leadingScreensForBatching = 3.0;  // default is 2.0
-}
-
- - -
-
- -### Table Row Height - -An important thing to notice is that `ASTableNode` does not provide an equivalent to `UITableView`'s `-tableView:heightForRowAtIndexPath:`. - -This is because nodes are responsible for determining their own height based on the provided constraints. This means you no longer have to write code to determine this detail at the view controller level. - -A node defines its height by way of the layoutSpec returned in the `-layoutSpecThatFits:` method. All nodes given a constrained size are able to calculate their desired size. - -
-By default, a ASTableNode provides its cells with a size range constraint where the minimum width is the tableNode's width and a minimum height is 0. The maximum width is also the tableNode's width but the maximum height is FLT_MAX. -

-This is all to say, a `tableNode`'s cells will always fill the full width of the `tableNode`, but their height is flexible making self-sizing cells something that happens automatically. -
- -If you call `-setNeedsLayout` on an `ASCellNode`, it will automatically perform another layout pass and if its overall desired size has changed, the table will be informed and will update itself. - -This is different from `UIKit` where normally you would have to call reload row / item. This saves tons of code, check out the ASDKgram sample app to see side by side implementations of an `UITableView` and `ASTableNode` implemented social media feed. - -### Sample Apps using ASTableNode - diff --git a/submodules/AsyncDisplayKit/docs/_docs/containers-asviewcontroller.md b/submodules/AsyncDisplayKit/docs/_docs/containers-asviewcontroller.md deleted file mode 100755 index 8b4fd3648d..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/containers-asviewcontroller.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: ASViewController -layout: docs -permalink: /docs/containers-asviewcontroller.html -prevPage: faq.html -nextPage: containers-asnodecontroller.html ---- - -`ASViewController` is a subclass of `UIViewController` that adds several useful features for hosting `ASDisplayNode` hierarchies. - -An `ASViewController` can be used in place of any `UIViewController` - including within a `UINavigationController`, `UITabBarController` and `UISplitViewController` or as a modal view controller. - -Benefits of using an `ASViewController`: -
    -
  1. Save Memory. An ASViewController that goes off screen will automatically reduce the size of the fetch data and display ranges of any of its children. This is key for memory management in large applications.
  2. -
  3. ASVisibility Feature. When used in an ASNavigationController or ASTabBarController, these classes know the exact number of user taps it would take to make the view controller visible.
  4. -
- -More features will be added over time, so it is a good idea to base your view controllers off of this class. - -## Usage - -A `UIViewController` provides a view of its own. An `ASViewController` is assigned a node to manage in its designated initializer `-initWithNode:`. - -Consider the following `ASViewController` subclass, `PhotoFeedNodeController`, from the ASDKgram example project that would like to use a table node as its managed node. - -This table node is assigned to the `ASViewController` in its `-initWithNode:` designated initializer method. - -
-SwiftObjective-C -
-
-- (instancetype)init
-{
-  _tableNode = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain];
-  self = [super initWithNode:_tableNode];
-  
-  if (self) {
-    _tableNode.dataSource = self;
-    _tableNode.delegate = self;
-  }
-  
-  return self;
-}
-  
- - -
-
- -
-
-Conversion Tip: If your app already has a complex view controller hierarchy, it is perfectly fine to have all of them subclass ASViewController. That is to say, even if you don't use ASViewController's designated initializer -initWithNode:, and only use the ASViewController in the manner of a traditional UIViewController, this will give you the additional node support if you choose to adopt it in different areas your application. -
- diff --git a/submodules/AsyncDisplayKit/docs/_docs/containers-overview.md b/submodules/AsyncDisplayKit/docs/_docs/containers-overview.md deleted file mode 100755 index cde2fb7f8d..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/containers-overview.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Node Containers -layout: docs -permalink: /docs/containers-overview.html -prevPage: intelligent-preloading.html -nextPage: node-overview.html ---- - -### Use Nodes in Node Containers -It is highly recommended that you use Texture's nodes within a node container. Texture offers the following node containers. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Texture Node ContainerUIKit Equivalent
ASCollectionNodein place of UIKit's UICollectionView
ASPagerNodein place of UIKit's UIPageViewController
ASTableNodein place of UIKit's UITableView
ASViewControllerin place of UIKit's UIViewController
ASNavigationControllerin place of UIKit's UINavigationController. Implements the ASVisibility protocol.
ASTabBarControllerin place of UIKit's UITabBarController. Implements the ASVisibility protocol.
- -
-Example code and specific sample projects are highlighted in the documentation for each node container. - - - -### What do I Gain by Using a Node Container? - -A node container automatically manages the intelligent preloading of its nodes. This means that all of the node's layout measurement, data fetching, decoding and rendering will be done asynchronously. Among other conveniences, this is why it is recommended to use nodes within a container node. - -Note that while it _is_ possible to use nodes directly (without a Texture node container), unless you add additional calls, they will only start displaying once they come onscreen (as UIKit does). This can lead to performance degradation and flashing of content. diff --git a/submodules/AsyncDisplayKit/docs/_docs/control-node.md b/submodules/AsyncDisplayKit/docs/_docs/control-node.md deleted file mode 100755 index 30aef32914..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/control-node.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: ASControlNode -layout: docs -permalink: /docs/control-node.html -prevPage: map-node.html -nextPage: scroll-node.html ---- - -`ASControlNode` is the Texture equivalent to `UIControl`. You don't create instances of `ASControlNode` directly. Instead, you can use it as a subclassing point when creating controls of your own. In fact, ASTextNode, ASImageNode, ASVideoNode and ASMapNode are all subclasses of `ASControlNode`. - -This fact is especially useful when it comes to image and text nodes. Having the ability to add target-action pairs means that you can use any text or image node as a button without having to rely on creating gesture recognizers, as you would with text in UIKit, or creating extraneous views as you might when using `UIButton`. - -### Control State - -Like `UIControl`, `ASControlNode` has a state which defines its appearance and ability to support user interactions. Its state can be one of any state defined by `ASControlState`. - -
-SwiftObjective-C -
-
-typedef NS_OPTIONS(NSUInteger, ASControlState) {
-    ASControlStateNormal       = 0,
-    ASControlStateHighlighted  = 1 << 0,  // used when isHighlighted is set
-    ASControlStateDisabled     = 1 << 1,
-    ASControlStateSelected     = 1 << 2,  // used when isSelected is set
-    ...
-};
-
- -
-
- -### Target-Action Mechanism - -Also similarly to `UIControl`, `ASControlNode`'s have a set of events defined which you can react to by assigning a target-action pair. - -The available actions are: -
-SwiftObjective-C -
-
-typedef NS_OPTIONS(NSUInteger, ASControlNodeEvent)
-{
-  /** A touch-down event in the control node. */
-  ASControlNodeEventTouchDown         = 1 << 0,
-  /** A repeated touch-down event in the control node; for this event the value of the UITouch tapCount method is greater than one. */
-  ASControlNodeEventTouchDownRepeat   = 1 << 1,
-  /** An event where a finger is dragged inside the bounds of the control node. */
-  ASControlNodeEventTouchDragInside   = 1 << 2,
-  /** An event where a finger is dragged just outside the bounds of the control. */
-  ASControlNodeEventTouchDragOutside  = 1 << 3,
-  /** A touch-up event in the control node where the finger is inside the bounds of the node. */
-  ASControlNodeEventTouchUpInside     = 1 << 4,
-  /** A touch-up event in the control node where the finger is outside the bounds of the node. */
-  ASControlNodeEventTouchUpOutside    = 1 << 5,
-  /** A system event canceling the current touches for the control node. */
-  ASControlNodeEventTouchCancel       = 1 << 6,
-  /** All events, including system events. */
-  ASControlNodeEventAllEvents         = 0xFFFFFFFF
-};
-
- -
-
- -Assigning a target and action for these events is done with the same methods as a `UIControl`, namely using `–addTarget:action:forControlEvents:`. - -### Hit Test Slop - -While all node's have a `hitTestSlop` property, this is usually most useful when dealing with controls. Instead of needing to make your control bigger, or needing to override `-hitTest:withEvent:` you can just assign a `UIEdgeInsets` to your control and its boundaries will be expanded accordingly. - -
-SwiftObjective-C -
-
-CGFloat horizontalDiff = (bounds.size.width - _playButton.bounds.size.width)/2;
-CGFloat verticalDiff = (bounds.size.height - _playButton.bounds.size.height)/2;
-
-_playButton.hitTestSlop = UIEdgeInsetsMake(-verticalDiff, -horizontalDiff, -verticalDiff, -horizontalDiff);
-
- -
-
- -Remember that, since the property is an inset, you'll need to use negative values in order to expand the size of your tappable region. - -### Hit Test Visualization - -The hit test visualization tool is an option to enable highlighting of the tappable areas of your nodes. To enable it, include `[ASControlNode setEnableHitTestDebug:YES]` in your app delegate in `-application:didFinishLaunchingWithOptions:`. diff --git a/submodules/AsyncDisplayKit/docs/_docs/corner-rounding.md b/submodules/AsyncDisplayKit/docs/_docs/corner-rounding.md deleted file mode 100755 index d8eca56c87..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/corner-rounding.md +++ /dev/null @@ -1,226 +0,0 @@ ---- -title: Corner Rounding -layout: docs -permalink: /docs/corner-rounding.html -prevPage: synchronous-concurrency.html -nextPage: debug-tool-hit-test-visualization.html ---- - -When it comes to corner rounding, many developers stick with CALayer's `.cornerRadius` property. Unfortunately, this convenient property greatly taxes performance and should only be used when there is _no_ alternative. This post will cover: - - - -## CALayer's .cornerRadius is Expensive - -Why is `.cornerRadius` so expensive? Use of CALayer's `.cornerRadius` property triggers offscreen rendering to perform the clipping operation on every frame - 60 FPS during scrolling - even if the content in that area isn't changing! This means that the GPU has to switch contexts on every frame, between compositing the overall frame + additional passes for each use of `.cornerRadius`. - -Importantly, these costs don't show up in the Time Profiler, because they affect work done by the CoreAnimation Render Server on your app's behalf. This intensive thrash annihilates performance for a lot of devices. On the iPhone 4, 4S, and 5 / 5C (along with comparable iPads / iPods), expect to see notably degraded performance. On the iPhone 5S and newer, even if you can't see the impact directly, it will reduce headroom so that it takes less to cause a frame drop. - -## Performant Corner Rounding Strategies - -There are only three things to consider when picking a corner rounding strategy: - -
    -
  1. Is there movement underneath the corner?
  2. -
  3. Is there movement through the corner?
  4. -
  5. Are all 4 corners the same node *and* no other nodes intersect in the corner area?
  6. -
- -Movement **underneath the corner** is any movement behind the corner. For example, as a rounded-corner collection cell scrolls over a background, the background will move underneath and out from under the corners. - -To describe movement **through the corner,** imagine a small rounded-corner scroll view containing a much larger photo. As you zoom and pan the photo inside of the scroll view, the photo will move through the corners of the scroll view. - - - -The above image shows movement underneath the corner highlighted in blue and movement through the corner highlighted in orange. - -
-Note: There can be movement inside of the rounded-corner object, without moving through the corner. The following image shows content, highlighted in green, inset from the edge with a margin equal to the size of the corner radius. When the content scrolls, it will not move through the corners. -
- - - -Using the above method to adjust your design to eliminate one source of corner movement can make the difference between being able to use a fast rounding technique, or resorting to `.cornerRadius.`. - -The final consideration is to determine if all four corners cover the same node or if any subnodes interesect the corner area. - - - -### Precomposited Corners - -Precomposited corners refer to corners drawn using bezier paths to clip the content in a CGContext / UIGraphicsContext (`[path clip]`). In this scenario, the corners become part of the image itself — and are "baked in" to the single CALayer. There are two types of precomposited corners. - -The absolute best method is to use **precomposited opaque corners**. This is the most efficient method available, resulting in zero alpha blending (although this is much less critical than avoiding offscreen rendering). Unfortunately, this method is also the least flexible; the background behind the corners will need to be a solid color if the rounded image needs to move around on top of it. It's possible, but tricky to make precomposited corners with a textured or photo background - usually it's best to use precomposited alpha corners instead'.' - -The second method involves using bezier paths with **precomposited alpha corners**. This method is pretty flexible and should be one of the most frequently used. It does incur the cost of alpha blending across the full size of the content, and including an alpha channel increases memory impact by 25% over opaque precompositing - but these costs are tiny on modern devices, and a different order of magnitude than `.cornerRadius` offscreen rendering. - -A key limitation of precomposited corners is that the corners must only touch one node and not intersect with any subnodes. If either of these conditions exist, clip corners must be used. - -Note that Texture nodes have a special optimization of `.cornerRadius` that automatically implements precomposited corners **only when using** `.shouldRasterizeDescendants`. It's important to think carefully before you enable rasterization, so don't use this option without first reading all about the concept. - -
-If you're looking for a simple, flat-color rounded rectangle or circle, Texture offers a variety of conveniences to provide this. See `UIImage+ASConveniences.h` for methods to create flat-colored, rounded-corner resizable images using precomposited corners (both alpha and opaque are supported). These are great for use as placeholders for image nodes or backgrounds for ASButtonNode. -
- -### Clip Corner - -This strategy involves placing **4 seperate opaque corners that sit on top of the content** that needs corner rounding. This method is flexible and has quite good performance. It has minor CPU overhead of 4 seperate layers, one layer for each corner. - - - -Clip corners applies to two main types of corner rounding situations: - -
    -
  • Rounded corners in situations in which the corners touch more than one node or intersect with any subnodes.
  • -
  • Rounded corners on top of a stationary texture or photo background. The photo clip corner method is tricky, but useful!
  • -
- -## Is it ever okay to use CALayer's .cornerRadius property? - -There are a few, quite rare cases in which it is appropriate to use `.cornerRadius.` These include when there is dynamic content moving _both_ through the inside and underneath the corner. For certain animations, this is impossible to avoid. However, in many cases, it is easy to adjust your design to eliminate one of the sources of movement. One such case was discussed in the section on corner movement. - -It is much less bad, and okay as a shortcut, to use `.cornerRadius.` for screens in which nothing moves. However, *any* motion on the screen, even movement that doesn't involve the corners, will cause the `.cornerRadius.` performance tax. For example, having a rounded element in the navigation bar with a scrolling view beneath it will cause the impact even if they don't overlap. Animating anything onscreen, even if the user doesn't interact, will as well.' Additionally, any type of screen refresh will incur the cost of corner rounding. - -### Rasterization and Layerbacking - -Some people have suggested that using CALayer's `.shouldRasterize` can improve the performance of the `.cornerRadius` property. This is not well understood option that is generally perilous. As long as nothing causes it to re-rasterize (no movement, no tap to change color, not on a table view that moves, etc), it is okay to use. Generally we don't encourage this because it is very easy to cause much worse performance. For people who have not great app architecture and insist on using CALayer's `.cornerRadius` (e.g. their app is not very performant), this _can_ make a meaningful difference. However, if you are building your app from the ground up, we highly reccommend that you choose one of the better corner rounding strategies above. - -CALayer's `.shouldRasterize` is unrelated to Texture `node.shouldRasterizeDescendents`. When enabled, `.shouldRasterizeDescendents` will prevent the actual view and layer of the subnode children from being created. - -## Corner Rounding Strategy Flowchart - -Use this flowchart to select the most performant strategy to round a set of corners. - -corner rounding strategy flowchart - -## Texture Support - -The following code exemplifies different ways how to archive corner rounding within Texture: - -### Use `.cornerRadius` - -
-SwiftObjective-C -
-
-CGFloat cornerRadius = 20.0;
-    
-_photoImageNode.cornerRoundingType = ASCornerRoundingTypeDefaultSlowCALayer;
-_photoImageNode.cornerRadius = cornerRadius;
-
- -
-
- - -### Use precomposition for rounding corners - -
-SwiftObjective-C -
-
-CGFloat cornerRadius = 20.0;
-    
-_photoImageNode.cornerRoundingType = ASCornerRoundingTypePrecomposited;
-_photoImageNode.cornerRadius = cornerRadius;
-
- -
-
- - -### Use clipping for rounding corners - -
-SwiftObjective-C -
-
-CGFloat cornerRadius = 20.0;
-
-_photoImageNode.cornerRoundingType = ASCornerRoundingTypeClipping;
-_photoImageNode.backgroundColor = [UIColor whiteColor];
-_photoImageNode.cornerRadius = cornerRadius;
-
- -
-
- - -### Use `willDisplayNodeContentWithRenderingContext` to set a clipping path for the content for rounding corners - -
-SwiftObjective-C -
-
-CGFloat cornerRadius = 20.0;
-    
-// Use the screen scale for corner radius to respect content scale
-CGFloat screenScale = UIScreen.mainScreen.scale;
-_photoImageNode.willDisplayNodeContentWithRenderingContext = ^(CGContextRef context, id drawParameters) {
-    CGRect bounds = CGContextGetClipBoundingBox(context);
-    CGFloat radius = cornerRadius * screenScale; 
-    UIImage *overlay = [UIImage as_resizableRoundedImageWithCornerRadius:radius
-                                                             cornerColor:[UIColor clearColor]
-                                                               fillColor:[UIColor clearColor]];
-    [overlay drawInRect:bounds];
-    [[UIBezierPath bezierPathWithRoundedRect:bounds cornerRadius:radius] addClip];
-};
-
-
- -
-
- -### Use `ASImageNode` extras to round the image and add a border. - -This is great for example to round avatar images. - -
-SwiftObjective-C -
-
-CGFloat cornerRadius = 20.0;
-
-_photoImageNode.imageModificationBlock = ASImageNodeRoundBorderModificationBlock(5.0, [UIColor orangeColor]);
-
- -
-
diff --git a/submodules/AsyncDisplayKit/docs/_docs/debug-tool-ASRangeController.md b/submodules/AsyncDisplayKit/docs/_docs/debug-tool-ASRangeController.md deleted file mode 100755 index b1bbc33a80..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/debug-tool-ASRangeController.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Range Visualization -layout: docs -permalink: /docs/debug-tool-ASRangeController.html -prevPage: debug-tool-pixel-scaling.html -nextPage: asvisibility.html ---- - -## Visualize ASRangeController tuning parameters (PR #1390) -
-This debug feature adds a semi-transparent subview in the bottom right hand corner of the sharedApplication keyWindow that visualizes the ASRangeTuningParameters per each ASLayoutRangeType for each visible (on-screen) instance of ASRangeController. - -- The instances of ASRangeController are represented as bars -- As you scroll around within ASTable/CollectionViews you can see the parameters (green = Visible, yellow = Display, and red = FetchData) move relative to each other. -- White arrows on the L and R sides of the individual RangeController bar views indicate the scrolling direction so that you can determine the leading / trailing tuning parameters (especially useful for vertically-oriented rangeControllers whose leading edge might be unclear within the horizontally-oriented bar view). -- The white debug label above the RangeController bar displays the RangeController dataSource’s class name to differentiate between nested views. -- The overlay can be moved with a panning gesture in order to see content under it. - -This debug feature is useful for highly optimized Texture apps that require tuning of any ASRangeController. Or for anyone who is curious about how ASRangeControllers work. - -The VerticalWithinHorizontal example app contains an ASPagerNode with embedded ASTableViews. In the screenshot with this feature enabled, you can see the two range controllers - ASTableView and ASCollectionView (ASPagerNode) - in the overlay. - -- The white arrows to the right of the rangeController bars indicate that the user is currently scrolling down through the table and right through the ASCollectionView/PagerNode. -- The ASTableView rangeController bar indicates that the range parameters are tuned to both fetch and decode more data in the downward table direction rather than in the reverse direction (which makes sense as the user is scrolling down). -- Since it’s less obvious whether or not the user will page to the right or left next, the ASCollectionView is tuned to fetch and decode equal amounts of data in each direction. -- In the video demo, you can see as the user scrolls between pages, that new ASTableView rangeControllers are created and removed in the overlay view. -![bc0b98f0-ebb8-11e5-8f50-421cb0f320c2](https://cloud.githubusercontent.com/assets/3419380/14057072/ef7f63a0-f2b2-11e5-92a5-f65b2d207e63.png) - -## Limitations -
    -
  • only shows onscreen ASRangeControllers
  • -
  • currently the ratio of red (fetch data), yellow (display) and green (visible) are relative to each other, but not between each bar view. So you cannot compare individual bars to eachother
  • -
- -## Usage -In your `AppDelegate.m` file, -
    -
  • import AsyncDisplayKit+Debug.h
  • -
  • add [ASDisplayNode setShouldShowRangeDebugOverlay:YES] at the top of your AppDelegate's didFinishLaunchingWithOptions: method
  • -
- -**Make sure to call this method before initializing any component that uses an ASRangeControllers (ASTableView, ASCollectionView).** diff --git a/submodules/AsyncDisplayKit/docs/_docs/debug-tool-hit-test-visualization.md b/submodules/AsyncDisplayKit/docs/_docs/debug-tool-hit-test-visualization.md deleted file mode 100755 index 2b2f5f2a50..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/debug-tool-hit-test-visualization.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Hit Test Visualization -layout: docs -permalink: /docs/debug-tool-hit-test-visualization.html -prevPage: corner-rounding.html -nextPage: debug-tool-pixel-scaling.html ---- - -## Visualize ASControlNode Tappable Areas -
-This debug feature adds a semi-transparent highlight overlay on any ASControlNodes containing a `target:action:` pair or gesture recognizer. The tappable range is defined as the ASControlNode’s frame + its `.hitTestSlop` `UIEdgeInsets`. Hit test slop is a unique feature of `ASControlNode` that allows it to extend its tappable range. - -In the screenshot below, you can quickly see that -
    -
  • The tappable area for the avatar image overlaps the username’s tappable area. In this case, the user avatar image is on top in the view hierarchy and is capturing some touches that should go to the username.
  • -
  • It would probably make sense to expand the `.hitTestSlop` for the username to allow the user to more easily hit it.
  • -
  • I’ve accidentally set the hitTestSlop’s UIEdgeInsets to be positive instead of negative for the photo likes count label. It’s going to be hard for a user to tap the smaller target.
  • -
- -![screen shot 2016-03-25 at 4 39 23 pm](https://cloud.githubusercontent.com/assets/3419380/14057034/e1e71450-f2b1-11e5-8091-3e6f22862994.png) - -## Restrictions -
-A _green_ border on the edge(s) of the highlight overlay indicates that that edge of the tapable area is restricted by one of it's superview's tapable areas. An _orange_ border on the edge(s) of the highlight overlay indicates that that edge of the tapable area is clipped by .clipsToBounds of a parent in its hierarchy. - -## Usage -
-In your `AppDelegate.m` file, -
    -
  • import AsyncDisplayKit+Debug.h
  • -
  • add [ASControlNode setEnableHitTestDebug:YES] at the top of your AppDelegate's didFinishLaunchingWithOptions: method
  • -
- -**Make sure to call this method before initializing any ASControlNodes - including ASButtonNodes, ASImageNodes, and ASTextNodes.** diff --git a/submodules/AsyncDisplayKit/docs/_docs/debug-tool-pixel-scaling.md b/submodules/AsyncDisplayKit/docs/_docs/debug-tool-pixel-scaling.md deleted file mode 100755 index 2ff4e5e37b..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/debug-tool-pixel-scaling.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Image Scaling -layout: docs -permalink: /docs/debug-tool-pixel-scaling.html -prevPage: debug-tool-hit-test-visualization.html -nextPage: debug-tool-ASRangeController.html ---- - -## Visualize ASImageNode.image’s pixel scaling -
-This debug feature adds a red text overlay on the bottom right hand corner of an ASImageNode if (and only if) the image’s size in pixels does not match it’s bounds size in pixels, e.g. - -
-SwiftObjective-C - -
-
-CGFloat imageSizeInPixels = image.size.width * image.size.height;
-CGFloat boundsSizeInPixels = imageView.bounds.size.width * imageView.bounds.size.height;
-CGFloat scaleFactor = imageSizeInPixels / boundsSizeInPixels;
-
-if (scaleFactor != 1.0) {
-      NSString *scaleString = [NSString stringWithFormat:@"%.2fx", scaleFactor];
-      _debugLabelNode.hidden = NO;
-}
-
- -
-
- - -This debug feature is useful for quickly determining if you are - -
    -
  • downloading and rendering excessive amounts of image data
  • -
  • upscaling a low quality image
  • -
- -In the screenshot below of an app with this debug feature enabled, you can see that the avatar image is unnecessarily large (9x too large) for it’s bounds size and that the center picture is more optimized, but not perfectly so. If you control your own endpoint, make sure to return an optimally sized image. - -![screen shot 2016-03-25 at 4 04 59 pm](https://cloud.githubusercontent.com/assets/3419380/14056994/15561daa-f2b1-11e5-9606-59d54d2b5354.png) - -## Usage -
-In your `AppDelegate.m` file, -
    -
  • import AsyncDisplayKit+Debug.h
  • -
  • add [ASImageNode setShouldShowImageScalingOverlay:YES] at the top of your AppDelegate's didFinishLaunchingWithOptions: method
  • -
- -**Make sure to call this method before initializing any ASImageNodes.** diff --git a/submodules/AsyncDisplayKit/docs/_docs/development/automatic-subnode-layout.md b/submodules/AsyncDisplayKit/docs/_docs/development/automatic-subnode-layout.md deleted file mode 100644 index 705411d113..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/development/automatic-subnode-layout.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Automatic subnode layout -layout: docs -permalink: /development/automatic-subnode-layout.html ---- - -

👷👷‍♀️Under construction…

\ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/development/cell-node-lifecycle.md b/submodules/AsyncDisplayKit/docs/_docs/development/cell-node-lifecycle.md deleted file mode 100644 index 9ae549f915..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/development/cell-node-lifecycle.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Cell node lifecycle -layout: docs -permalink: /development/cell-node-lifecycle.html ---- - -

👷👷‍♀️Under construction…

\ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/development/collection-animations.md b/submodules/AsyncDisplayKit/docs/_docs/development/collection-animations.md deleted file mode 100644 index e97a4d540c..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/development/collection-animations.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Collection animations -layout: docs -permalink: /development/collection-animations.html ---- - -

👷👷‍♀️Under construction…

\ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/development/collection-asynchronous-updates.md b/submodules/AsyncDisplayKit/docs/_docs/development/collection-asynchronous-updates.md deleted file mode 100644 index aacb9bc35a..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/development/collection-asynchronous-updates.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Collections and asynchronous updates -layout: docs -permalink: /development/collection-asynchronous-updates.html ---- - -

👷👷‍♀️Under construction…

\ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/development/components.md b/submodules/AsyncDisplayKit/docs/_docs/development/components.md deleted file mode 100644 index 52f5e35b93..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/development/components.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: How components work together -layout: docs -permalink: /development/components.html ---- - -

👷👷‍♀️Under construction…

\ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/development/how-to-develop-and-debug.md b/submodules/AsyncDisplayKit/docs/_docs/development/how-to-develop-and-debug.md deleted file mode 100644 index d22ddbc879..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/development/how-to-develop-and-debug.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Develop and debug -layout: docs -permalink: /development/how-to-develop-and-debug.html ---- - -

👷👷‍♀️Under construction…

\ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/development/layout-specs.md b/submodules/AsyncDisplayKit/docs/_docs/development/layout-specs.md deleted file mode 100644 index c7089b81f8..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/development/layout-specs.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Layout specs -layout: docs -permalink: /development/layout-specs.html ---- - -

👷👷‍♀️Under construction…

\ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/development/layout-transitions.md b/submodules/AsyncDisplayKit/docs/_docs/development/layout-transitions.md deleted file mode 100644 index 8ba604966f..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/development/layout-transitions.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Layout transitions and animations -layout: docs -permalink: /development/layout-transitions.html ---- - -

👷👷‍♀️Under construction…

\ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/development/node-lifecycle.md b/submodules/AsyncDisplayKit/docs/_docs/development/node-lifecycle.md deleted file mode 100644 index b8695b8923..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/development/node-lifecycle.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Node lifecycle -layout: docs -permalink: /development/node-lifecycle.html ---- - -

👷👷‍♀️Under construction…

\ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/development/overview.md b/submodules/AsyncDisplayKit/docs/_docs/development/overview.md deleted file mode 100644 index 531fefe951..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/development/overview.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Overview -layout: docs -permalink: /development/overview.html ---- - -

👷👷‍♀️Under construction…

\ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/development/structure.md b/submodules/AsyncDisplayKit/docs/_docs/development/structure.md deleted file mode 100644 index ec05b3f043..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/development/structure.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Structure -layout: docs -permalink: /development/structure.html ---- - -

👷👷‍♀️Under construction…

\ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/development/threading.md b/submodules/AsyncDisplayKit/docs/_docs/development/threading.md deleted file mode 100644 index 33499aeb29..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/development/threading.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Threading -layout: docs -permalink: /development/threading.html ---- - -

👷👷‍♀️Under construction…

\ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/display-node.md b/submodules/AsyncDisplayKit/docs/_docs/display-node.md deleted file mode 100755 index 896c969dad..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/display-node.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: ASDisplayNode -layout: docs -permalink: /docs/display-node.html -prevPage: containers-aspagernode.html -nextPage: cell-node.html ---- - -### Node Basics - -`ASDisplayNode` is the main view abstraction over `UIView` and `CALayer`. It initializes and owns a `UIView` in the same way `UIViews` create and own their own backing `CALayers`. - -
-SwiftObjective-C - -
-
-ASDisplayNode *node = [[ASDisplayNode alloc] init];
-node.backgroundColor = [UIColor orangeColor];
-node.bounds = CGRectMake(0, 0, 100, 100);
-
-NSLog(@"Underlying view: %@", node.view);
-	
- - -
-
- -A node has all the same properties as a `UIView`, so using them should feel very familiar to anyone familiar with UIKit. - -Properties of both views and layers are forwarded to nodes and can be easily accessed. - -
-SwiftObjective-C - -
-
-ASDisplayNode *node = [[ASDisplayNode alloc] init];
-node.clipsToBounds = YES;				  // not .masksToBounds
-node.borderColor = [UIColor blueColor];  //layer name when there is no UIView equivalent
-
-NSLog(@"Backing layer: %@", node.layer);
-	
- - -
-
- -As you can see, naming defaults to the `UIView` conventions*** unless there is no `UIView` equivalent. You also have access to your underlying `CALayer` just as you would when dealing with a plain `UIView`. - -When used with one of the node containers, a node’s properties will be set on a background thread, and its backing view/layer will be lazily constructed with the cached properties collected by the node. You rarely need to worry about jumping to a background thread as this will be taken care of by the framework, but it's important to know that this is happening under the hood. - -### View Wrapping - -In some cases, it is desirable to initialize a node and provide a view to be used as the backing view. These views are provided via a block that will return a view so that the actual construction of the view can be saved until later. These nodes’ display step happens synchronously. This is because a node can only be asynchronously displayed when it wraps an `_ASDisplayView` (the internal view subclass), not when it wraps a plain `UIView`. - -
-SwiftObjective-C - -
-
-ASDisplayNode *node = [ASDisplayNode alloc] initWithViewBlock:^{
-	SomeView *view  = [[SomeView alloc] init];
-	return view;
-}];
-	
- - -
-
- -Doing this allows you to wrap existing views if that is preferable to converting the `UIView` subclass to an `ASDisplayNode` subclass. - -
- *** The only exception is that nodes use `position` instead of `center` for reasons beyond this intro. -
diff --git a/submodules/AsyncDisplayKit/docs/_docs/editable-text-node.md b/submodules/AsyncDisplayKit/docs/_docs/editable-text-node.md deleted file mode 100755 index 9eccfd0321..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/editable-text-node.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: ASEditableTextNode -layout: docs -permalink: /docs/editable-text-node.html -prevPage: scroll-node.html -nextPage: multiplex-image-node.html ---- - -`ASEditableTextNode` is available to be used anywhere you'd normally use a `UITextView` or `UITextField`. Under the hood, it uses a specialized `UITextView` as its backing view. You can access and configure this view directly any time after the node has loaded, as long as you do it on the main thread. - -It's also important to note that this node does not support layer backing due to the fact that it supports user interaction. - -### Basic Usage - -Using an editable text node as a text input is easy. If you want it to have text by default, you can assign an attributed string to the `attributedText` property. - -
-SwiftObjective-C - -
-
-ASEditableTextNode *editableTextNode = [[ASEditableTextNode alloc] init];
-
-editableTextNode.attributedText = [[NSAttributedString alloc] initWithString:@"Lorem ipsum dolor sit amet."];
-editableTextNode.textContainerInset = UIEdgeInsetsMake(8, 8, 8, 8);
-
- - -
-
- -### Placeholder Text - -If you want to display a text box with a placeholder that disappears after a user starts typing, just assign an attributed string to the `attributedPlaceholderText` property. - -
-SwiftObjective-C - -
-
-editableTextNode.attributedPlaceholderText = [[NSAttributedString alloc] initWithString:@"Type something here..."];
-
- - -
-
- -The property `isDisplayingPlaceholder` will initially return `YES`, but will toggle to `NO` any time the `attributedText` property is set to a non-empty string. - -### Typing Attributes - -To set up the style of the text your user will type into this text field, you can set the `typingAttributes`. - - -
-SwiftObjective-C - -
-
-editableTextNode.typingAttributes = @{NSForegroundColorAttributeName: [UIColor blueColor], 
-                                      NSBackgroundColorAttributeName: [UIColor redColor]};
-
- - -
-
- - -### ASEditableTextNode Delegate - -In order to respond to events associated with an editable text node, you can use any of the following delegate methods: - - --- Indicates to the delegate that the text node began editing. - -
-SwiftObjective-C -
-
-- (void)editableTextNodeDidBeginEditing:(ASEditableTextNode *)editableTextNode;
-
- -
-
- --- Asks the delegate whether the specified text should be replaced in the editable text node. - -
-SwiftObjective-C -
-
-- (BOOL)editableTextNode:(ASEditableTextNode *)editableTextNode shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
-
- -
-
- --- Indicates to the delegate that the text node's selection has changed. - -
-SwiftObjective-C -
-
-- (void)editableTextNodeDidChangeSelection:(ASEditableTextNode *)editableTextNode fromSelectedRange:(NSRange)fromSelectedRange toSelectedRange:(NSRange)toSelectedRange dueToEditing:(BOOL)dueToEditing;
-
- -
-
- --- Indicates to the delegate that the text node's text was updated. - -
-SwiftObjective-C -
-
-- (void)editableTextNodeDidUpdateText:(ASEditableTextNode *)editableTextNode;
-
- -
-
- ---  Indicates to the delegate that the text node has finished editing. - -
-SwiftObjective-C -
-
-- (void)editableTextNodeDidFinishEditing:(ASEditableTextNode *)editableTextNode;
-
- -
-
- diff --git a/submodules/AsyncDisplayKit/docs/_docs/faq.md b/submodules/AsyncDisplayKit/docs/_docs/faq.md deleted file mode 100755 index fa7d3b2be7..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/faq.md +++ /dev/null @@ -1,125 +0,0 @@ ---- -title: FAQ -layout: docs -permalink: /docs/faq.html -prevPage: subclassing.html -nextPage: containers-asviewcontroller.html ---- - -### Common Developer Mistakes - - - -### Common Conceptual Misunderstandings - - - -### Common Questions - - - -### Accessing the node's view before it is loaded -
-Node `-init` methods are often called off the main thread, therefore it is imperative that no UIKit objects are accessed. Examples of common errors include accessing the node's view or creating a gesture recognizer. Instead, these operations are ideal to perform in `-didLoad`. - -Interacting with UIKit in `-init` can cause crashes and performance problems. -
- -### Make sure you access your data source outside the node block -
-The `indexPath` parameter is only valid _outside_ the node block returned in `nodeBlockForItemAtIndexPath:` or `nodeBlockForRowAtIndexPath:`. Because these blocks are executed on a background thread, the `indexPath` may be invalid by execution time, due to additional changes in the data source. - -See an example of how to correctly code a node block in the ASTableNode page. Just as with UIKit, it will cause an exception if Nil is returned from the block for any `ASCellNode`. -
- -### Take steps to avoid a retain cycle in viewBlocks -
-When using `initWithViewBlock:` it is important to prevent a retain cycle by capturing a strong reference to self. The two ways that a cycle can be created are by using any instance variable inside the block or directly referencing self without using a weak pointer. - -You can use properties instead of instance variables as long as they are accessed on a weak pointer to self. - -Because viewBlocks are always executed on the main thread, it is safe to preform UIKit operations (including gesture recognizer creation and addition). - -Although the block is destroyed after the view is created, in the event that the block is never run and the view is never created, then a cycle can persist preventing memory from being released. -
- -### ASCellNode Reusability -
-Texture does not use cell reuse, for a number of specific reasons, one side effect of this is that it eliminates the large class of bugs associated with cell reuse. -
- -### LayoutSpecs Are Regenerated -
-A node's layoutSpec gets regenerated every time its `layoutThatFits:` method is called. -
- -### Layout API Sizing -
-If you're confused by `ASRelativeDimension`, `ASRelativeSize`, `ASRelativeSizeRange` and `ASSizeRange`, check out our Layout API Sizing guide. -
- -### CALayer's .cornerRadius Property Kills Performance -
-CALayer's' .cornerRadius property is a disastrously expensive property that should only be used when there is no alternative. It is one of the least efficient, most render-intensive properties on CALayer (alongside shadowPath, masking, borders, etc). These properties trigger offscreen rendering to perform the clipping operation on every frame — 60FPS during scrolling! — even if the content in that area isn't changing. - -Using `.cornerRadius` will visually degraded performance on iPhone 4, 4S, and 5 / 5C (along with comparable iPads / iPods) and reduce head room and make frame drops more likely on 5S and newer devices. - -For a longer discussion and easy alternative corner rounding solutions, please read our comprehensive corner rounding guide. -
- -### Texture does not support UIKit Auto Layout or InterfaceBuilder -
-UIKit Auto Layout and InterfaceBuilder are not supported by Texture. - -However, Texture's Layout API provides a variety of ASLayoutSpec objects that allow implementing automatic layout which is more efficient (multithreaded, off the main thread), often easier to debug (can step into the code and see where all values come from, as it is open source), and reusable (you can build composable layouts that can be shared with different parts of the UI). -
- -### ASDisplayNode keep alive reference - -
-
-
-ASTextNode *title=[[ASTextNode alloc]init];
-title.attributedString=Text;
-[self addSubnode:title];
-
-retain cycles
-(
-"-> _keepalive_node -> ASTextNode ",
-"-> _view -> _ASDisplayView "
-)
-
-
-
- -
-This retain cycle is intentionally created because the node is in a "live" view hierarchy (it is inside the UIWindow that is onscreen). - -To see why this is necessary, consider that Apple also creates this retain cycle between UIView and CALayer. If you create a UIView and add its layer to a super layer, and then release the UIView, it will stay alive even though the CALayer delegate pointing to it is weak. - -For the same reason, if the node's view is a descendant of a window, but there is no reference to the node, we keep the node alive with a strong reference from the view. - -Good application design should not rely on this behavior, because a strong reference to the node should be maintained by the subnodes array or by an instance variable. However, this condition occasionally occurs, for example when using a UIView animation API. This cycle should never create a leak or even extend the lifecycle of a node any longer than it is absolutely necessary. -
- -### UICollectionViewCell Compatibility - -Texture supports using UICollectionViewCells alongside native ASCellNodes. - -Note that these UIKit cells will **not** have the performance benefits of `ASCellNodes` (like preloading, async layout, and async drawing), even when mixed within the same `ASCollectionNode`. - -However, this interoperability allows developers the flexibility to test out the framework without needing to convert all of their cells at once. Read more here. diff --git a/submodules/AsyncDisplayKit/docs/_docs/getting-started.md b/submodules/AsyncDisplayKit/docs/_docs/getting-started.md deleted file mode 100755 index ae96e6cfb2..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/getting-started.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Getting Started -layout: docs -permalink: /docs/getting-started.html -nextPage: resources.html ---- - -Texture's basic unit is the `node`. `ASDisplayNode` is an abstraction -over `UIView`, which in turn is an abstraction over `CALayer`. Unlike views, which -can only be used on the main thread, nodes are thread-safe: you can -instantiate and configure entire hierarchies of them in parallel on background -threads. - -To keep its user interface smooth and responsive, your app should render at 60 -frames per second — the gold standard on iOS. This means the main thread -has one-sixtieth of a second to push each frame. That's 16 milliseconds to -execute all layout and drawing code! And because of system overhead, your code -usually has less than ten milliseconds to run before it causes a frame drop. - -Texture lets you move image decoding, text sizing and rendering, and -other expensive UI operations off the main thread, to keep the main thread available to -respond to user interaction. Texture has other tricks up its -sleeve too... but we'll get to that later. - -

Nodes

- -If you're used to working with views, you already know how to use nodes. Most methods have a node equivalent and most `UIView` and `CALayer` properties are available as well. In any case where there is a naming discrepancy (such as `.clipsToBounds` vs `.masksToBounds`), nodes will default to the `UIView` name. The only exception is that nodes use position instead of center. - -Of course, you can always access the underlying view or layer directly via `node.view` or `node.layer`, just make sure to do it on the main thread! - -Texture offers a variety of nodes to replace the majority of the UIKit components that you are used to. Large scale apps have been able to completely write their UI using just Texture nodes. - -

Node Containers

- -When converting an app to use Texture, a common mistake is to add nodes directly to an existing view hierarchy. Doing this will virtually guarantee that your nodes will flash as they are rendered. - -Instead, you should add nodes as subnodes of one of the many node container classes. These containers are in charge of telling contained nodes what state they're currently in so that data can be loaded and nodes can be rendered as efficiently as possible. You should think of these classes as the integration point between UIKit and Texture. - -

Layout Engine

- -Texture's layout engine is both one of its most powerful and one of its most unique features. Based on the CSS FlexBox model, it provides a declarative way of specifying a custom node's size and layout of its subnodes. While all nodes are concurrently rendered by default, asynchronous measurement and layout are performed by providing an `ASLayoutSpec` for each node. - -

Advanced Developer Features

- -Texture offers a variety of advanced developer features that cannot be found in UIKit or Foundation. Our developers have found that Texture allows simplifications in their architecture and improves developer velocity. - -(Full list coming soon!) - -

Adding Texture to your App

- -If you are new to Texture, we recommend that you check out our ASDKgram example app. We've created a handy guide (coming soon!) with step-by-step directions and a follow along example on how to add Texture to an app. - -If you run into any problems along the way, reach out to us GitHub or the Texture Slack community for help. diff --git a/submodules/AsyncDisplayKit/docs/_docs/hit-test-slop.md b/submodules/AsyncDisplayKit/docs/_docs/hit-test-slop.md deleted file mode 100755 index fa126ce880..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/hit-test-slop.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Hit Test Slop -layout: docs -permalink: /docs/hit-test-slop.html -prevPage: layout-transition-api.html -nextPage: batch-fetching-api.html ---- - -`ASDisplayNode` has a `hitTestSlop` property of type `UIEdgeInsets` that when set to a non-zero inset, increase the bounds for hit testing to make it easier to tap or perform gestures on this node. - -ASDisplayNode is the base class for all nodes, so this property is available on any of Texture's nodes. - -
-Note: This affects the default implementation of -hitTest and -pointInside, so subclasses should call super if you override it and want hitTestSlop applied. -
- -A node's ability to capture touch events is restricted by its parent's bounds + parent hitTestSlop UIEdgeInsets. Should you want to extend the hitTestSlop of a child outside its parent's bounds, simply extend the parent node's hitTestSlop to include the child's hitTestSlop needs. - -### Usage - -A common need for hit test slop, is when you have a text node (aka label) you'd like to use as a button. Often, the text node's height won't meet the 44 point minimum recommended for tappable areas. In that case, you can calculate the difference, and apply a negative inset to your label to increase the tappable area. - -
-SwiftObjective-C - -
-
-ASTextNode *textNode = [[ASTextNode alloc] init];
-
-CGFloat padding = (44.0 - button.bounds.size.height)/2.0;
-textNode.hitTestSlop = UIEdgeInsetsMake(-padding, 0, -padding, 0);
-
- -
-
- -
-To visualize hitTestSlop, check out the debug tool. -
diff --git a/submodules/AsyncDisplayKit/docs/_docs/image-modification-block.md b/submodules/AsyncDisplayKit/docs/_docs/image-modification-block.md deleted file mode 100755 index 1e2e2716aa..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/image-modification-block.md +++ /dev/null @@ -1,152 +0,0 @@ ---- -title: Image Modification Blocks -layout: docs -permalink: /docs/image-modification-block.html -prevPage: inversion.html -nextPage: placeholder-fade-duration.html ---- - -Many times, operations that would affect the appearance of an image you're displaying are big sources of main thread work. Naturally, you want to move these to a background thread. - -By assigning an `imageModificationBlock` to your imageNode, you can define a set of transformations that need to happen asynchronously to any image that gets set on the imageNode. - -
-SwiftObjective-C - -
-
-_backgroundImageNode.imageModificationBlock = ^(UIImage *image) {
-	UIImage *newImage = [image applyBlurWithRadius:30
-		tintColor:[UIColor colorWithWhite:0.5 alpha:0.3]
-		saturationDeltaFactor:1.8
-		maskImage:nil];
-	return newImage ?: image;
-};
-
-//some time later...
-
-_backgroundImageNode.image = someImage;
-
- - -
-
- -The image named "someImage" will now be blurred asynchronously before being assigned to the imageNode to be displayed. - -### Adding image effects - -The most efficient way to add image effects is by leveraging the `imageModificationBlock` block. If a block is provided it can perform drawing operations on the image during the display phase. As display is happening on a background thread it will not block the main thread. - -In the following example we assume we have an avatar node that will be setup in `init` of a supernode and the image of the node should be rounded. We provide the `imageModificationBlock` and in there we call a convenience method that transforms the image passed in into a circular image and return it. - -
-SwiftObjective-C - -
-
-- (instancetype)init
-{
-// ...
-  _userAvatarImageNode.imageModificationBlock = ^UIImage *(UIImage *image) {
-    CGSize profileImageSize = CGSizeMake(USER_IMAGE_HEIGHT, USER_IMAGE_HEIGHT);
-    return [image makeCircularImageWithSize:profileImageSize];
-  };
-  // ...
-}
-
- - -
- -
- -The actual drawing code is nicely abstracted away in an UIImage category and looks like the following: - -
-SwiftObjective-C - -
-
-@implementation UIImage (Additions)
-- (UIImage *)makeCircularImageWithSize:(CGSize)size
-{
-  // make a CGRect with the image's size
-  CGRect circleRect = (CGRect) {CGPointZero, size};
-
-  // begin the image context since we're not in a drawRect:
-  UIGraphicsBeginImageContextWithOptions(circleRect.size, NO, 0);
-
-  // create a UIBezierPath circle
-  UIBezierPath *circle = [UIBezierPath bezierPathWithRoundedRect:circleRect cornerRadius:circleRect.size.width/2];
-
-  // clip to the circle
-  [circle addClip];
-
-  // draw the image in the circleRect *AFTER* the context is clipped
-  [self drawInRect:circleRect];
-
-  // get an image from the image context
-  UIImage *roundedImage = UIGraphicsGetImageFromCurrentImageContext();
-
-  // end the image context since we're not in a drawRect:
-  UIGraphicsEndImageContext();
-
-  return roundedImage;
-}
-@end
-
- - -
-
- -The imageModificationBlock is very handy and can be used to add all kind of image effects, such as rounding, adding borders, or other pattern overlays, without extraneous display calls. diff --git a/submodules/AsyncDisplayKit/docs/_docs/image-node.md b/submodules/AsyncDisplayKit/docs/_docs/image-node.md deleted file mode 100755 index 4fcc2da69b..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/image-node.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: ASImageNode -layout: docs -permalink: /docs/image-node.html -prevPage: text-node.html -nextPage: network-image-node.html ---- - -`ASImageNode` is the Texture equivalent to `UIImageView`. The most basic difference is that images are decoded asynchronously by default. Of course, there are more advanced improvements as well such as GIF support and `imageModificationBlock`s. - -### Basic Usage - -Using an image node works exactly like using an image view. - -
-SwiftObjective-C - -
-
-ASImageNode *imageNode = [[ASImageNode alloc] init];
-
-imageNode.image = [UIImage imageNamed:@"someImage"];
-imageNode.contentMode = UIViewContentModeScaleAspectFill;
-
- - -
-
- - -### Image transformations and effects - -Many times, operations that would affect the appearance of an image you're displaying are big sources of main thread work. Naturally, you want to move these to a background thread. - -By assigning an `imageModificationBlock` to your `imageNode`, you can define a set of transformations that need to happen asynchronously to any image that gets set on the `imageNode`, including image effects such as rounding, adding borders, or other pattern overlays, without extraneous display calls. - -You can read more about it at Image Modification Blocks. - -### Image Cropping - -When an `imageNode`'s `contentMode` property is set to `UIViewContentModeScaleAspectFill`, it will automatically expand the image to fill the entire area of the imageNode, and crop any areas that go past the bounds due to scaling the image. - -By default, the expanded image will be centered within the bounds of the view. Take the following cat image. His face gets cut off by default. - - - -That's messed up. To fix it, you can set the `cropRect` property to move the image over. By default it is set to `CGRectMake(0.5, 0.5, 0.0, 0.0)`. - -The rectangle is specified as a "unit rectangle," using percentages of the source image's width and height. To show the image starting at the left side, you can set the `cropRect`'s `x` value to be `0.0`, meaning the image's origin should start at `{0, 0}` as opposed to the default. - -
-SwiftObjective-C - -
-
-self.animalImageNode.cropRect = CGRectMake(0, 0, 0.0, 0.0);
-
- - -
-
- -Leaving the width and height values at `0.0` means the image won't be stretched. - - - -Alternatively, you can set the `x` value of the origin to `1.0` to right align the image. - - - -### Forced Upscaling - -By default, an image won't be upscaled on the CPU when it is too small to fit into the bounds of the `imageNode` it has been set on. - -You can set `forceUpscaling` to `YES` if you'd like to change this fact. Doing so means your app will take up more memory any time you use an image that is smaller than its destination. - -### Detecting Image Scaling - -By using the pixel scaling tool, you can easily check each image in your app to see how much it has been scaled up or down. - -If images are too big, you risk rendering excessive amounts of image data, and when they're too small you spend time upscaling a low quality image. - -If you control your API, consider returning correctly scaled images so that this work can be avoided. diff --git a/submodules/AsyncDisplayKit/docs/_docs/index.html b/submodules/AsyncDisplayKit/docs/_docs/index.html deleted file mode 100755 index 930d84ddd9..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/index.html +++ /dev/null @@ -1,4 +0,0 @@ ---- -layout: redirect -destination: /docs/getting-started.html ---- diff --git a/submodules/AsyncDisplayKit/docs/_docs/inset-layout-spec.md b/submodules/AsyncDisplayKit/docs/_docs/inset-layout-spec.md deleted file mode 100755 index ad3bd3e5b1..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/inset-layout-spec.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: ASInsetLayoutSpec -layout: docs -permalink: /docs/inset-layout-spec.html ---- - -
😑 This page is coming soon...
\ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/installation.md b/submodules/AsyncDisplayKit/docs/_docs/installation.md deleted file mode 100755 index 81e6573a32..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/installation.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: Installation -layout: docs -permalink: /docs/installation.html -prevPage: resources.html -nextPage: adoption-guide-2-0-beta1.html ---- - -Texture may be added to your project via CocoaPods or Carthage. Do not forget to import the framework header: - -
-
-
-#import 
-
-
-
- -or create a Objective-C bridging header (Swift). If you have any problems installing Texture, please contact us on Github or Slack! - -## CocoaPods - -Texture is available on CocoaPods. Add the following to your Podfile: - -
-
-
-target 'MyApp' do
-	pod "Texture"
-end
-
-
-
- -Quit Xcode completely before running - -
-
-
-> pod install
-
-
-
- -in the project directory in Terminal. - -To update your version of Texture, run - -
-
-
-> pod update Texture
-
-
-
- -in the project directory in Terminal. - -Don't forget to use the workspace `.xcworkspace` file, _not_ the project `.xcodeproj` file. - -## Carthage (standard build) - -
-The standard way to use Carthage is to have a Cartfile list the dependencies, and then run `carthage update` to download the dependenices into the `Cathage/Checkouts` folder and build each of those into frameworks located in the `Carthage/Build` folder, and finally the developer has to manually integrate in the project. -
- -Texture is also available through Carthage. - -Add the following to your Cartfile to get the **latest release** branch: - -
-
-
-github "texturegroup/texture"
-
-
-
- -
-Or, to get the **master** branch: - -
-
-
-github "texturegroup/texture" "master"
-
-
-
- -
-Texture has its own Cartfile which lists its dependencies, so this is the only line you will need to include in your Cartfile. - -Run - -
-
-
-> carthage update
-
-
-
- -
-in Terminal. This will fetch dependencies into a `Carthage/Checkouts` folder, then build each one. - -Look for terminal output confirming `Texture`, `PINRemoteImage (3.0.0-beta.2)` and `PINCache` are all fetched and built. The Texture framework Cartfile should handle the dependencies correctly. - -In Xcode, on your application targets’ **“General”** settings tab, in the **“Linked Frameworks and Libraries”** section, drag and drop each framework you want to use from the `Carthage/Build` folder on disk. - -## Carthage (light) - -Texture does not yet support the lighter way of using Carthage, in which you manually add the project files. This is because one of its dependencies, `PINCache` (a nested dependency of `PINRemoteImage`) does not yet have a project file. - -Without including `PINRemoteImage` and `PINCache`, you will not get Texture's full image feature set. diff --git a/submodules/AsyncDisplayKit/docs/_docs/intelligent-preloading.md b/submodules/AsyncDisplayKit/docs/_docs/intelligent-preloading.md deleted file mode 100755 index 24440f1acd..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/intelligent-preloading.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Intelligent Preloading -layout: docs -permalink: /docs/intelligent-preloading.html -prevPage: upgrading.html -nextPage: containers-overview.html ---- - -While a node's ability to be rendered and measured asynchronously and concurrently makes it quite powerful, another crucially important layer to Texture is the idea of intelligent preloading. - -As was pointed out in Getting Started, it is rarely advantageous to use a node outside of the context of one of the node containers. This is due to the fact that all nodes have a notion of their current interface state. - -This `interfaceState` property is constantly updated by an `ASRangeController` which all containers create and maintain internally. - -A node used outside of a container won't have its state updated by any range controller. This sometimes results in a flash as nodes are rendered after realizing they're already onscreen without any warning. - -## Interface State Ranges - -When nodes are added to a scrolling or paging interface they are typically in one of the following ranges. This means that as the scrolling view is scrolled, their interface states will be updated as they move through them. - - - -A node will be in one of following ranges: - - - - - - - - - - - - - - - - - - -
Interface StateDescription
PreloadThe furthest range out from being visible. This is where content is gathered from an external source, whether that’s some API or a local disk.
DisplayHere, display tasks such as text rasterization and image decoding take place.
VisibleThe node is onscreen by at least one pixel.
- -## ASRangeTuningParameters - -The size of each of these ranges is measured in "screenfuls". While the default sizes will work well for many use cases, they can be tweaked quite easily by setting the tuning parameters for range type on your scrolling node. - - - -In the above visualization of a scrolling collection, the user is scrolling down. As you can see, the sizes of the ranges in the leading direction are quite a bit larger than the content the user is moving away from (the trailing direction). If the user were to change directions, the leading and trailing sides would dynamically swap in order to keep memory usage optimal. This allows you to worry about defining the leading and trailing sizes without having to worry about reacting to the changing scroll directions of your user. - -Intelligent preloading also works in multiple dimensions. - -## Interface State Callbacks - -As a user scrolls, nodes move through the ranges and react appropriately by loading data, rendering, etc. Your own node subclasses can easily tap into this mechanism by implementing the corresponding callback methods. - -#### Visible Range - -
- -
-
--didEnterVisibleState
--didExitVisibleState
-
-
-
- -#### Display Range - -
- -
-
--didEnterDisplayState
--didExitDisplayState
-
-
-
- -#### Preload Range - -
- -
-
--didEnterPreloadState
--didExitPreloadState
-
-
-
- -
-Just remember to call super ok? 😉 diff --git a/submodules/AsyncDisplayKit/docs/_docs/inversion.md b/submodules/AsyncDisplayKit/docs/_docs/inversion.md deleted file mode 100755 index 5dd18140dd..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/inversion.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Inversion -layout: docs -permalink: /docs/inversion.html -prevPage: automatic-subnode-mgmt.html -nextPage: image-modification-block.html ---- - -`ASTableNode` and `ASCollectionNode` have a `inverted` property of type `BOOL` that when set to `YES`, will automatically invert the content so that it's layed out bottom to top, that is the 'first' (indexPath 0, 0) node is at the bottom rather than the top as usual. This is extremely covenient for chat/messaging apps, and with Texture it only takes one property. - -When this is enabled, developers only have to take one more step to have full inversion support and that is to adjust the `contentInset` of their `ASTableNode` or `ASCollectionNode` like so: - -
- - Swift - Objective-C - - -
-
- CGFloat inset = [self topBarsHeight];
- self.tableNode.view.contentInset = UIEdgeInsetsMake(0, 0, inset, 0);
- self.tableNode.view.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, inset, 0);
-  
- -
-  let inset = self.topBarsHeight
-  self.tableNode.view.contentInset = UIEdgeInsets(top: 0.0, left: 0.0, bottom: inset, right: 0.0)
-  self.tableNode.view.scrollIndicatorInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: inset, right: 0.0)
-  
-
-
- -See the SocialAppLayout-Inverted example project for more details. diff --git a/submodules/AsyncDisplayKit/docs/_docs/layer-backing.md b/submodules/AsyncDisplayKit/docs/_docs/layer-backing.md deleted file mode 100755 index 17f4e70fb3..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layer-backing.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Layer Backing -layout: docs -permalink: /docs/layer-backing.html -prevPage: accessibility.html -nextPage: subtree-rasterization.html ---- - -In some cases, you can substantially improve your app's performance by using layers instead of views. **We recommend enabling layer-backing in any custom node that doesn't need touch handling**. - -With UIKit, manually converting view-based code to layers is laborious due to the difference in APIs. Worse, if at some point you need to enable touch handling or other view-specific functionality, you have to manually convert everything back (and risk regressions!). - -With all Texture nodes, converting an entire subtree from views to layers is as simple as: - -
-SwiftObjective-C -
-
-rootNode.isLayerBacked = YES;
-
- -
-
- -...and if you need to go back, it's as simple as deleting one line. - - diff --git a/submodules/AsyncDisplayKit/docs/_docs/layout-api-debugging.md b/submodules/AsyncDisplayKit/docs/_docs/layout-api-debugging.md deleted file mode 100755 index 5b86012570..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layout-api-debugging.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Layout Debugging -layout: docs -permalink: /docs/layout-api-debugging.html -prevPage: automatic-layout-containers.html -nextPage: layout-api-sizing.html ---- - -Here are some helpful questions to ask yourself when you encounter any issues composing layoutSpecs. - -## Am I the child of an `ASStackLayoutSpec` or an `ASStaticLayoutSpec`? -
-Certain `ASLayoutable` properties will _only_ apply when the layoutable is a child of a _stack_ spec (the child is called an ASStackLayoutable), while other properties _only_ apply when the layoutable is a child of a _static_ spec (the child is called an ASStaticLayoutable). - -- table of [`ASStackLayoutables` properties](http://texturegroup.org/docs/automatic-layout-containers.html#asstacklayoutable-properties) -- table of [`ASStaticLayoutable` properties](http://texturegroup.org/docs/automatic-layout-containers.html#asstaticlayoutable-properties) - -All ASLayoutable properties can be applied to _any_ layoutable (e.g. any node or layout spec), however certain properties will only take effect depending on the type of the parent layout spec they are wrapped in. - -## Have I considered where to set `ASLayoutable` properties? -
-Let's say you have a node (`n1`) and you wrap it in a layout spec (`s1`). If you want to wrap the layout spec (`s1`) in a stack or static spec (`s2`), you will need to set all of the properties on the spec (`s1`) and not the node (`n1`). - -A common examples of this confusion involves flex grow and flex shrink. E.g. a node with `.flexGrow` enabled is wrapped in an inset spec. The inset spec will not grow as we expect. **Solution:** enable `.flexGrow` on the inset spec as well. - -## Have I provided sizes for any node that lacks an intrinsic size? -
-Texture's layout pass is recursive, starting at the layout spec returned from `-layoutSpecThatFits:` and proceeding down until it reaches the leaf nodes included in any nested layout specs. - -Some leaf nodes have a concept of their own intrinsic size, such as ASTextNode or ASImageNode. A text node knows the length of its formatted string and an ASImageNode knows the size of its static image. Other leaf nodes require an intrinsic size to be set. - -Nodes that require the developer to provide an intrinsic size: - -- `ASNetworkImageNode` or `ASMultiplexImageNode` have no intrinsic size until the image is downloaded. **A size must be provided for either node.** -- `ASVideoNode` or `ASVideoNodePlayer` have no intrinsic size until the video is downloaded. **A size must be provided for either node.** -- `ASDisplayNode` custom subclasses may provide their intrinisc size by implementing `-calculateSizeThatFits:`. - -To provide an intrinisc size for these nodes that lack intrinsic sizes (even if only momentarily), you can set one of the following: - -- set `.preferredFrameSize` on any node. -- set `.sizeRange` for children of **static** specs only. -- implement `-calculateSizeThatFits:` for **custom ASDisplayNode subclasses only**. - -*_Note that .preferredFrameSize is not considered by ASTextNodes. Also, setting .sizeRange on a node will override the node's intrinisic size provided by -calculateSizeThatFits:_ - -## When do I use `.preferredFrameSize` vs `.sizeRange`? -
-Set `.preferredFrameSize` to set a size for any node. Note that setting .preferredFrameSize on an `ASTextNode` will silently fail. We are working on fixing this, but in the meantime, you can wrap the ASTextNode in a static spec and provide it a .sizeRange. - -Set `.sizeRange` to set a size range for any node or layout spec that is the child of a *static* spec consisting. `.sizeRange` is the *only* way to set a size on a layout spec. Again, when using `.sizeRange`, you *must wrap the layoutable in a static layout spec for it to take effect.* - -A `.sizeRange` consists of a minimum and maximum constrained size (these sizes can be a specific point value or a relative value, like 70%). For details on the `.sizeRange` property's custom value type, check out our [Layout API Sizing guide](http://texturegroup.org/docs/layout-api-sizing.html). - -## `ASRelativeDimension` vs `ASRelativeSize` vs `ASRelativeSizeRange` vs `ASSizeRange` -
-Texture's Layout API supports configuring node and layout spec sizes with specific point values as well as relative values. Read the [Layout API Sizing guide](http://texturegroup.org/docs/layout-api-sizing.html) for a helpful chart and documentation on our custom layout value types. - -## Debugging layout specs with ASCII art -
-Calling `-asciiArtString` on any `ASDisplayNode` or `ASLayoutSpec` returns an ascii-art representation of the object and its children. An example of a simple layoutSpec ascii-art console output can be seen below. - -``` ------------------------ASStackLayoutSpec---------------------- -| -----ASStackLayoutSpec----- -----ASStackLayoutSpec----- | -| | ASImageNode | | ASImageNode | | -| | ASImageNode | | ASImageNode | | -| --------------------------- --------------------------- | --------------------------------------------------------------- - ``` diff --git a/submodules/AsyncDisplayKit/docs/_docs/layout-api-sizing.md b/submodules/AsyncDisplayKit/docs/_docs/layout-api-sizing.md deleted file mode 100755 index 7937793c61..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layout-api-sizing.md +++ /dev/null @@ -1,171 +0,0 @@ ---- -title: Layout API Sizing -layout: docs -permalink: /docs/layout-api-sizing.html -prevPage: layout-api-debugging.html -nextPage: layout-transition-api.html ---- - -The easiest way to understand the compound dimension types in the Layout API is to see all the units in relation to one another. - - - -## Values (CGFloat, ASRelativeDimension) -
-`ASRelativeDimension` is essentially a normal **CGFloat with support for representing either a point value, or a % value**. It allows the same API to take in both fixed values, as well as relative ones. - -ASRelativeDimension is used to set the `flexBasis` property on a child of an `ASStackLayoutSpec`. The flexBasis property specifies the initial size in the stack dimension for this object, where the stack dimension is whether it is a horizontal or vertical stack. - -When a relative (%) value is used, it is resolved against the size of the parent. For example, an item with 50% flexBasis will ultimately have a point value set on it at the time that the stack achieves a concrete size. - -
-Note that .flexBasis can be set on any <ASLayoutable> (a node, or a layout spec), but will only take effect if that element is added as a child of a stack layout spec. This container-dependence of layoutable properties is a key area we’re working on clarifying. -
- -#### Constructing ASRelativeDimensions -
-`ASDimension.h` contains 3 convenience functions to construct an `ASRelativeDimension`. It is easiest to use function that corresponds to the type (top 2 functions). - -
-SwiftObjective-C - -
-
-ASRelativeDimensionMakeWithPoints(CGFloat points);
-ASRelativeDimensionMakeWithPercent(CGFloat percent);
-ASRelativeDimensionMake(ASRelativeDimensionType type, CGFloat value);
-
- -
-
- -#### ASRelativeDimension Example -
-`PIPlaceSingleDetailNode` uses flexBasis to set 2 child nodes of a horizontal stack to share the width 40 / 60: - -
-SwiftObjective-C - -
-
-leftSideStack.flexBasis = ASRelativeDimensionMakeWithPercent(0.4f);
-self.detailLabel.flexBasis  = ASRelativeDimensionMakeWithPercent(0.6f);
-[horizontalStack setChildren:@[leftSideStack, self.detailLabel]];
-
- -
-
- - - -## Sizes (CGSize, ASRelativeSize) -
-`ASRelativeSize` is **similar to a CGSize, but its width and height may represent either a point or percent value.**  In fact, their unit type may even be different from one another. `ASRelativeSize` doesn't have a direct use in the Layout API, except to construct an `ASRelativeSizeRange`. - -- an `ASRelativeSize` consists of a `.width` and `.height` that are each `ASRelativeDimensions`. - -- the type of the width and height are independent; either one individually, or both, may be a point or percent value. (e.g. you could specify that an ASRelativeSize that has a height in points, but a variable % width) - -#### Constructing ASRelativeSizes -
-`ASRelativeSize.h` contains 2 convenience functions to construct an `ASRelativeSize`. **If you don't need to support relative (%) values, you can construct an `ASRelativeSize` with just a CGSize.** - -
-SwiftObjective-C - -
-
-ASRelativeSizeMake(ASRelativeDimension width, ASRelativeDimension height);
-ASRelativeSizeMakeWithCGSize(CGSize size);
-
- -
-
- -## Size Ranges (ASSizeRange, ASRelativeSizeRange) - -Because the layout spec system allows flexibility with elements growing and shrinking, we sometimes need to provide limits / boundaries to its flexibility. - -There are two size range types, but in essence, both contain a minimum and maximum size and that are used to influence the result of layout measurements. - -In the Pinterest code base, the **minimum size seems to be only necessary for stack specs in order to determine how much space to fill in between the children.** For example, with buttons in a nav bar, we don’t want them to stack as closely together as they can fit — rather a minimum width, as wide as the screen, is specified and causes the stack to add spacing to satisfy that constraint. - -**It’s much more common that the “max” constraint is what matters, though.** This is the case when text is wrapping or truncating - it’s encountering the maximum allowed width. Setting a minimum width for text doesn’t actually do anything—the text can’t be made longer—unless it’s in a stack, and spacing is added around it. - -#### ASSizeRange -
-UIKit doesn't provide a structure to bundle a minimum and maximum CGSize. So `ASSizeRange` was created to support **a minimum and maximum CGSize pair**. - -The `constrainedSize` that is passed as an input to `layoutSpecThatFits:` is an `ASSizeRange`. - -
-SwiftObjective-C - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize;
-
- -
-
- -#### ASRelativeSizeRange -
-`ASRelativeSizeRange` is essentially **a minimum and maximum size pair, that are used to constrain the size of a layout object.** The minimum and maximum sizes must **support both point and relative sizes**, which is where our friend the ASRelativeSize comes in. Hence, an ASRelativeSizeRange consists of a minimum and maximum `ASRelativeSize`. - -ASRelativeSizeRange is used to set the `sizeRange` property on a child of an `ASStaticLayoutSpec`. If specified, the child's size is restricted according to this size. - -
-Note that .sizeRange can be set on any <ASLayoutable> (a node, or a layout spec), but will only take effect if that element is added as a child of a static layout spec. This container-dependence of layoutable properties is a key area we’re working on clarifying. -
- -#### ASSizeRange vs. ASRelativeSizeRange -
-Why do we pass a `ASSizeRange *constrainedSize` to a node's `layoutSpecThatFits:` function, but a `ASRelativeSizeRange` for the `.sizeRange` property on an element provided as a child of a layout spec? - - It’s pretty rare that you need the percent feature for a .sizeRange feature, but it’s there to make the API as flexible as possible. The input value of the constrainedSize that comes into the argument, has already been resolved by the parent’s size. It may have been influenced by a percent type, but has always be converted by that point into points. - -#### Constructing ASRelativeSizeRange -
-`ASRelativeSize.h` contains 4 convenience functions to construct an `ASRelativeSizeRange` from the various smaller units. - -- Percentage and point values can be combined. E.g. you could specify that an object is a certain height in points, but a variable percentage width. - -- If you only care to constrain the min / max or width / height, you can pass in `CGFLOAT_MIN`, `CGFLOAT_MAX`, `constrainedSize.max.width`, etc - -Most of the time, relative values are not needed for a size range _and_ the design requires an object to be forced to a particular size (min size = max size = no range). In this common case, you can use: - -
-SwiftObjective-C - -
-
-ASRelativeSizeRangeMakeWithExactCGSize(CGSize exact);
-
- -
-
- -### Sizing Conclusion -
-Here we have our original table, which has been annotated to show the uses of the various units in the Layout API. - - - -It’s worth noting that that there’s a certain flexibility to be able to use so many powerful options with a single API - flexBasis and sizeRange can be used to set points and percentages in different directions. However, since the majority of do not use the full set of options, we should adjust the API so that the powerful capabilities are a slightly more hidden. - diff --git a/submodules/AsyncDisplayKit/docs/_docs/layout-engine.md b/submodules/AsyncDisplayKit/docs/_docs/layout-engine.md deleted file mode 100755 index f73bed3225..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layout-engine.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Layout Engine -layout: docs -permalink: /docs/layout-engine.html -prevPage: subclassing.html -nextPage: containers-overview.html ---- - -Texture's layout engine is based on the CSS Box Model. While it is the feature of the framework that bears the weakest resemblance to the UIKit equivalent (AutoLayout), it is also among the most useful features once you've gotten used to it. With enough practice, you may just come to prefer creating declarative layouts to the constraint based approach. ;] - -The main way you participate in this system is by implementing `-layoutSpecThatFits:` in a node subclass. Here, you declaratively build up layout specs from the inside out, returning the final spec which will contain the rest. - -
-SwiftObjective-C -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  ASStackLayoutSpec *verticalStack = [ASStackLayoutSpec verticalStackLayoutSpec];
-  verticalStack.direction          = ASStackLayoutDirectionVertical;
-  verticalStack.spacing            = 4.0;
-  [verticalStack setChildren:_commentNodes];
-
-  return verticalStack;
-}
-  
- - -
-
- -Whle this example is extremely simple, it gives you an idea of how to use a layout spec. A stack layout spec, for instance, defines a layout of nodes in which the chlidren will be laid out adjacently, in the direction specified, with the spacing specified. It is very similar to `UIStackView` but with the added benefit of backwards compatibility. - -### ASLayoutable - -Layout spec's children can be any object whose class conforms to the `` protocol. All nodes, as well as all layout specs conform to the `` protocol. This means that your layout can be built up in composable chunks until you have what you want. - -Say you wanted to add 8 pts of padding to the stack you've already set up: - -
-SwiftObjective-C -
- -
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  ASStackLayoutSpec *verticalStack = [ASStackLayoutSpec verticalStackLayoutSpec];
-  verticalStack.direction          = ASStackLayoutDirectionVertical;
-  verticalStack.spacing            = 4.0;
-  [verticalStack setChildren:_commentNodes];
-  
-  UIEdgeInsets insets = UIEdgeInsetsMake(8, 8, 8, 8);
-  ASInsetLayoutSpec *insetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets 
-                                      child:verticalStack];
-  
-  return insetSpec;
-}
-  
- - -
-
- -You can easily do that by making that stack the child of an inset layout spec. - -Naturally, using layout specs takes a bit of practice so to learn more, check out the layout section. diff --git a/submodules/AsyncDisplayKit/docs/_docs/layout-options.md b/submodules/AsyncDisplayKit/docs/_docs/layout-options.md deleted file mode 100755 index 709a7f8be3..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layout-options.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Layout Options -layout: docs -permalink: /docs/layout-options.html -prevPage: automatic-layout-debugging.html -nextPage: layer-backing.html ---- - -When using Texture, you have three options for layout. Note that UIKit Autolayout is **not** supported by Texture. -#Manual Sizing & Layout - -This original layout method shipped with Texture 1.0 and is analogous to UIKit's layout methods. Use this method for ASViewControllers (unless you subclass the node). - -`[ASDisplayNode calculateSizeThatFits:]` **vs.** `[UIView sizeThatFits:]` - -`[ASDisplayNode layout]` **vs.** `[UIView layoutSubviews]` - -###Advantages (over UIKit) -- Eliminates all main thread layout cost -- Results are cached - -###Shortcomings (same as UIKit): -- Code duplication between methods -- Logic is not reusable - -#Unified Sizing & Layout - -This layout method does not have a UIKit analog. It is implemented by calling - -`- (ASLayout *)calculateLayoutThatFits: (ASSizeRange)constraint` - -###Advantages -- zero duplication -- still async, still cached - -###Shortcomings -- logic is not reusable, and is still manual - -# Automatic, Extensible Layout - -This is the reccomended layout method. It does not have a UIKit analog and is implemented by calling - -`- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constraint` -###Advantages -- can reuse even complex, custom layouts -- built-in specs provide automatic layout -- combine to compose new layouts easily -- still async, cached, and zero duplication - -The diagram below shows how options #2 and #3 above both result in an ASLayout, except that in option #3, the ASLayout is produced automatically by the ASLayoutSpec. - - diff --git a/submodules/AsyncDisplayKit/docs/_docs/layout-transition-api.md b/submodules/AsyncDisplayKit/docs/_docs/layout-transition-api.md deleted file mode 100755 index e1f7afc702..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layout-transition-api.md +++ /dev/null @@ -1,259 +0,0 @@ ---- -title: Layout Transition API -layout: docs -permalink: /docs/layout-transition-api.html -prevPage: layout2-api-sizing.html -nextPage: hit-test-slop.html ---- - -The Layout Transition API was designed to make all animations with Texture easy - even transforming an entire set of views into a completely different set of views! - -With this system, you simply specify the desired layout and Texture will do the work to figure out differences from the current layout. It will automatically add new elements, remove unneeded elements after the transition, and update the position of any existing elements. - -There are also easy to use APIs that allow you to fully customize the starting position of newly introduced elements, as well as the ending position of removed elements. - -
-Use of Automatic Subnode Management is required to use the Layout Transition API. -
- -## Animating between Layouts -
-The layout Transition API makes it easy to animate between a node's generated layouts in response to some internal state change in a node. - -Imagine you wanted to implement this sign up form and animate in the new field when tapping the next button: - -![Imgur](http://i.imgur.com/Dsf1R72.gif) - -A standard way to implement this would be to create a container node called `SignupNode` that includes two editable text field nodes and a button node as subnodes. We'll include a property on the SignupNode called `fieldState` that will be used to select which editable text field node to show when the node calculates its layout. - -The internal layout spec of the `SignupNode` container would look something like this: - -
- - Swift - Objective-C - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  FieldNode *field;
-  if (self.fieldState == SignupNodeName) {
-    field = self.nameField;
-  } else {
-    field = self.ageField;
-  }
-
-  ASStackLayoutSpec *stack = [[ASStackLayoutSpec alloc] init];
-  [stack setChildren:@[field, self.buttonNode]];
-
-  UIEdgeInsets insets = UIEdgeInsetsMake(15.0, 15.0, 15.0, 15.0);
-  return [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets child:stack];
-}
-
- -
-
- -To trigger a transition from the `nameField` to the `ageField` in this example, we'll update the SignupNode's `.fieldState` property and begin the transition with `transitionLayoutWithAnimation:`. - -This method will invalidate the current calculated layout and recompute a new layout with the `ageField` now in the stack. - -
- - Swift - Objective-C - -
-
-self.signupNode.fieldState = SignupNodeAge;
-
-[self.signupNode transitionLayoutWithAnimation:YES];
-
- -
-
- -In the default implementation of this API, the layout will recalculate the new layout and use its sublayouts to size and position the SignupNode's subnodes without animation. Future versions of this API will likely include a default animation between layouts and we're open to feedback on what you'd like to see here. However, we'll need to implement a custom animation block to handle the signup form case. - -The example below represents an override of `animateLayoutTransition:` in the SignupNode. - -This method is called after the new layout has been calculated via `transitionLayoutWithAnimation:` and in the implementation we'll perform a specific animation based upon the fieldState property that was set before the animation was triggered. - -
- - Swift - Objective-C - -
-
-- (void)animateLayoutTransition:(id<ASContextTransitioning>)context
-{
-  if (self.fieldState == SignupNodeName) {
-    CGRect initialNameFrame = [context initialFrameForNode:self.ageField];
-    initialNameFrame.origin.x += initialNameFrame.size.width;
-    self.nameField.frame = initialNameFrame;
-    self.nameField.alpha = 0.0;
-    CGRect finalAgeFrame = [context finalFrameForNode:self.nameField];
-    finalAgeFrame.origin.x -= finalAgeFrame.size.width;
-    [UIView animateWithDuration:0.4 animations:^{
-      self.nameField.frame = [context finalFrameForNode:self.nameField];
-      self.nameField.alpha = 1.0;
-      self.ageField.frame = finalAgeFrame;
-      self.ageField.alpha = 0.0;
-    } completion:^(BOOL finished) {
-      [context completeTransition:finished];
-    }];
-  } else {
-    CGRect initialAgeFrame = [context initialFrameForNode:self.nameField];
-    initialAgeFrame.origin.x += initialAgeFrame.size.width;
-    self.ageField.frame = initialAgeFrame;
-    self.ageField.alpha = 0.0;
-    CGRect finalNameFrame = [context finalFrameForNode:self.ageField];
-    finalNameFrame.origin.x -= finalNameFrame.size.width;
-    [UIView animateWithDuration:0.4 animations:^{
-      self.ageField.frame = [context finalFrameForNode:self.ageField];
-      self.ageField.alpha = 1.0;
-      self.nameField.frame = finalNameFrame;
-      self.nameField.alpha = 0.0;
-    } completion:^(BOOL finished) {
-      [context completeTransition:finished];
-    }];
-  }
-}
-
- -
-
- -The passed `ASContextTransitioning` context object in this method contains relevant information to help you determine the state of the nodes before and after the transition. It includes getters into old and new constrained sizes, inserted and removed nodes, and even the raw old and new `ASLayout` objects. In the `SignupNode` example, we're using it to determine the frame for each of the fields and animate them in an out of place. - -It is imperative to call `completeTransition:` on the context object once your animation has finished, as it will perform the necessary internal steps for the newly calculated layout to become the current `calculatedLayout`. - -Note that there hasn't been a use of `addSubnode:` or `removeFromSupernode` during the transition. Texture's layout transition API analyzes the differences in the node hierarchy between the old and new layout, implicitly performing node insertions and removals via Automatic Subnode Management. - -Nodes are inserted before your implementation of `animateLayoutTransition:` is called and this is a good place to manually manage the hierarchy before you begin the animation. Removals are performed in `didCompleteLayoutTransition:` after you call `completeTransition:` on the context object. If you need to manually perform deletions, override `didCompleteLayoutTransition:` and perform your custom operations. Note that this will override the default behavior and it is recommended to either call `super` or walk through the `removedSubnodes` getter in the context object to perform the cleanup. - -Passing `NO` to `transitionLayoutWithAnimation:` will still run through your `animateLayoutTransition:` and `didCompleteLayoutTransition:` implementations with the `[context isAnimated]` property set to `NO`. It is your choice on how to handle this case — if at all. An easy way to provide a default implementation this is to call super: - -
- - Swift - Objective-C - -
-
-- (void)animateLayoutTransition:(id<ASContextTransitioning>)context
-{
-  if ([context isAnimated]) {
-    // perform animation
-  } else {
-    [super animateLayoutTransition:context];
-  }
-}
-
- -
-
- -## Animating constrainedSize Changes -
-There will be times you'll simply want to respond to bounds changes to your node and animate the recalculation of its layout. To handle this case, call `transitionLayoutWithSizeRange:animated:` on your node. - -This method is similar to `transitionLayoutWithAnimation:`, but will not trigger an animation if the passed `ASSizeRange` is equal to the current `constrainedSizeForCalculatedLayout` value. This is great for responding to rotation events and view controller size changes: - -
- - Swift - Objective-C - -
-
-- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
-{
-  [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
-  [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
-    [self.node transitionLayoutWithSizeRange:ASSizeRangeMake(size, size) animated:YES];
-  } completion:nil];
-}
-
- -
-
- -## Examples that use the Layout Transition API - -- [ASDKLayoutTransition](https://github.com/texturegroup/texture/tree/master/examples/ASDKLayoutTransition) diff --git a/submodules/AsyncDisplayKit/docs/_docs/layout2-api-sizing.md b/submodules/AsyncDisplayKit/docs/_docs/layout2-api-sizing.md deleted file mode 100755 index 6459eadcf1..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layout2-api-sizing.md +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Layout API Sizing -layout: docs -permalink: /docs/layout2-api-sizing.html -nextPage: layout-transition-api.html ---- - -The easiest way to understand the compound dimension types in the Layout API is to see all the units in relation to one another. - - - -## Values (`CGFloat`, `ASDimension`) - -`ASDimension` is essentially a **normal CGFloat with support for representing either a point value, a relative percentage value, or an auto value**. - -This unit allows the same API to take in both fixed values, as well as relative ones. - -
- - Swift - Objective-C - -
-
-// dimension returned is relative (%)
-ASDimensionMake(@"50%");  
-ASDimensionMakeWithFraction(0.5);
-
-// dimension returned in points
-ASDimensionMake(@"70pt");
-ASDimensionMake(70);      
-ASDimensionMakeWithPoints(70);
-
- -
-
- -### Example using `ASDimension` - -`ASDimension` is used to set the `flexBasis` property on a child of an `ASStackLayoutSpec`. The `flexBasis` property specifies an object's initial size in the stack dimension, where the stack dimension is whether it is a horizontal or vertical stack. - -In the following view, we want the left stack to occupy `40%` of the horizontal width and the right stack to occupy `60%` of the width. - - - -We do this by setting the `.flexBasis` property on the two childen of the horizontal stack: - -
- - Swift - Objective-C - -
-
-self.leftStack.style.flexBasis = ASDimensionMake(@"40%");
-self.rightStack.style.flexBasis = ASDimensionMake(@"60%");
-
-[horizontalStack setChildren:@[self.leftStack, self.rightStack]];
-
- -
-
- -## Sizes (`CGSize`, `ASLayoutSize`) - -`ASLayoutSize` is similar to a `CGSize`, but its **width and height values may represent either a point or percent value**. The type of the width and height are independent; either one may be a point or percent value. - -
- - Swift - Objective-C - -
-
-ASLayoutSizeMake(ASDimension width, ASDimension height);
-
- -
-
- -
-`ASLayoutSize` is used for setting a layout element's `.preferredLayoutSize`, `.minLayoutSize` and `.maxLayoutSize` properties. It allows the same API to take in both fixed sizes, as well as relative ones. - -
- - Swift - Objective-C - -
-
-// Dimension type "Auto" indicates that the layout element may 
-// be resolved in whatever way makes most sense given the circumstances
-ASDimension width = ASDimensionMake(ASDimensionUnitAuto, 0);  
-ASDimension height = ASDimensionMake(@"50%");
-
-layoutElement.style.preferredLayoutSize = ASLayoutSizeMake(width, height);
-
- -
-
- -
-If you do not need relative values, you can set the layout element's `.preferredSize`, `.minSize` and `.maxSize` properties. The properties take regular `CGSize` values. - -
- - Swift - Objective-C - -
-
-layoutElement.style.preferredSize = CGSizeMake(30, 160);
-
- -
-
- -
-Most of the time, you won't want to constrain both width and height. In these cases, you can individually set a layout element's size properties using `ASDimension` values. - -
- - Swift - Objective-C - -
-
-layoutElement.style.width     = ASDimensionMake(@"50%");
-layoutElement.style.minWidth  = ASDimensionMake(@"50%");
-layoutElement.style.maxWidth  = ASDimensionMake(@"50%");
-
-layoutElement.style.height    = ASDimensionMake(@"50%");
-layoutElement.style.minHeight = ASDimensionMake(@"50%");
-layoutElement.style.maxHeight = ASDimensionMake(@"50%");
-
- -
-
- -## Size Range (`ASSizeRange`) - -`UIKit` doesn't provide a structure to bundle a minimum and maximum `CGSize`. So, `ASSizeRange` was created to support **a minimum and maximum CGSize pair**. - -`ASSizeRange` is used mostly in the internals of the layout API. However, the `constrainedSize` value passed as an input to `layoutSpecThatFits:` is an `ASSizeRange`. - -
- - Swift - Objective-C - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize;
-
- -
-
- -The `constrainedSize` passed to an `ASDisplayNode` subclass' `layoutSpecThatFits:` method is the minimum and maximum sizes that the node should fit in. The minimum and maximum `CGSize`s contained in `constrainedSize` can be used to size the node's layout elements. diff --git a/submodules/AsyncDisplayKit/docs/_docs/layout2-conversion-guide.md b/submodules/AsyncDisplayKit/docs/_docs/layout2-conversion-guide.md deleted file mode 100755 index 6283cf1ec0..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layout2-conversion-guide.md +++ /dev/null @@ -1,519 +0,0 @@ ---- -title: Upgrading to Layout 2.0 (Beta) -layout: docs -permalink: /docs/layout2-conversion-guide.html ---- - -A list of the changes: - -- Introduction of true flex factors -- `ASStackLayoutSpec` `.alignItems` property default changed to `ASStackLayoutAlignItemsStretch` -- Rename `ASStaticLayoutSpec` to `ASAbsoluteLayoutSpec` -- Rename `ASLayoutable` to `ASLayoutElement` -- Set `ASLayoutElement` properties via `style` property -- Easier way to size of an `ASLayoutElement` -- Deprecation of `-[ASDisplayNode preferredFrameSize]` -- Deprecation of `-[ASLayoutElement measureWithSizeRange:]` -- Deprecation of `-[ASDisplayNode measure:]` -- Removal of `-[ASAbsoluteLayoutElement sizeRange]` -- Rename `ASRelativeDimension` to `ASDimension` -- Introduction of `ASDimensionUnitAuto` - -In addition to the inline examples comparing **1.x** layout code vs **2.0** layout code, the [example projects](https://github.com/texturegroup/texture/tree/master/examples) and layout documentation have been updated to use the new API. - -All other **2.0** changes not related to the Layout API are documented here. - -## Introduction of true flex factors - -With **1.x** the `flexGrow` and `flexShrink` properties were of type `BOOL`. - -With **2.0**, these properties are now type `CGFloat` with default values of `0.0`. - -This behavior is consistent with the Flexbox implementation for web. See [`flexGrow`](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-grow) and [`flexShrink`](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-shrink) for further information. - -
-SwiftObjective-C - -
-
-id<ASLayoutElement> layoutElement = ...;
-
-// 1.x:
-layoutElement.flexGrow = YES;
-layoutElement.flexShrink = YES;
-
-// 2.0:
-layoutElement.style.flexGrow = 1.0;
-layoutElement.style.flexShrink = 1.0;
-
- - -
-
- -## `ASStackLayoutSpec`'s `.alignItems` property default changed - -`ASStackLayoutSpec`'s `.alignItems` property default changed to `ASStackLayoutAlignItemsStretch` instead of `ASStackLayoutAlignItemsStart` to align with the CSS align-items property. - -## Rename `ASStaticLayoutSpec` to `ASAbsoluteLayoutSpec` & behavior change - -`ASStaticLayoutSpec` has been renamed to `ASAbsoluteLayoutSpec`, to be consistent with web terminology and better represent the intended behavior. - -
-SwiftObjective-C - -
-
-// 1.x:
-ASStaticLayoutSpec *layoutSpec = [ASStaticLayoutSpec staticLayoutSpecWithChildren:@[...]];
-
-// 2.0:
-ASAbsoluteLayoutSpec *layoutSpec = [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[...]];
-
- -
-
- -
-**Please note** that there has also been a behavior change introduced. The following text overlay layout was previously created using a `ASStaticLayoutSpec`, `ASInsetLayoutSpec` and `ASOverlayLayoutSpec` as seen in the code below. - - - -
-Using `INFINITY` for the `top` value in the `UIEdgeInsets` property of the `ASInsetLayoutSpec` allowed the text inset to start at the bottom. This was possible because it would adopt the size of the static layout spec's `_photoNode`. - -
- - Swift - Objective-C - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  _photoNode.preferredFrameSize = CGSizeMake(USER_IMAGE_HEIGHT*2, USER_IMAGE_HEIGHT*2);
-  ASStaticLayoutSpec *backgroundImageStaticSpec = [ASStaticLayoutSpec staticLayoutSpecWithChildren:@[_photoNode]];
-
-  UIEdgeInsets insets = UIEdgeInsetsMake(INFINITY, 12, 12, 12);
-  ASInsetLayoutSpec *textInsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets child:_titleNode];
-
-  ASOverlayLayoutSpec *textOverlaySpec = [ASOverlayLayoutSpec overlayLayoutSpecWithChild:backgroundImageStaticSpec
-                                                                                 overlay:textInsetSpec];
-  
-  return textOverlaySpec;
-}
-  
- -
-
- -
-With the new `ASAbsoluteLayoutSpec` and same code above, the layout would now look like the picture below. The text is still there, but at ~900 pts (offscreen). - - - -## Rename `ASLayoutable` to `ASLayoutElement` - -Remember that an `ASLayoutSpec` contains children that conform to the `ASLayoutElement` protocol. Both `ASDisplayNodes` and `ASLayoutSpecs` conform to this protocol. - -The protocol has remained the same as **1.x**, but the name has been changed to be more descriptive. - -## Set `ASLayoutElement` properties via `ASLayoutElementStyle` - -An `ASLayoutElement`'s properties are are now set via it's `ASLayoutElementStyle` object. - -
-SwiftObjective-C - -
-
-id<ASLayoutElement> *layoutElement = ...;
-
-// 1.x:
-layoutElement.spacingBefore = 1.0;
-
-// 2.0:
-layoutElement.style.spacingBefore = 1.0;
-
- -
-
- -However, the properties specific to an `ASLayoutSpec` are still set directly on the layout spec. - -
-SwiftObjective-C - -
-
-// 1.x and 2.0
-ASStackLayoutSpec *stackLayoutSpec = ...;
-stackLayoutSpec.direction = ASStackLayoutDirectionVertical;
-stackLayoutSpec.justifyContent = ASStackLayoutJustifyContentStart;
-
- -
-
- -## Setting the size of an `ASLayoutElement` - -With **2.0** we introduce a new, easier, way to set the size of an `ASLayoutElement`. These methods replace the deprecated `-preferredFrameSize` and `-sizeRange` **1.x** methods. - -The following **optional** properties are provided via the layout element's `style` property: - -- `-[ASLayoutElementStyle width]`: specifies the width of an ASLayoutElement. The `minWidth` and `maxWidth` properties will override `width`. The height will be set to Auto unless provided. - -- `-[ASLayoutElementStyle minWidth]`: specifies the minimum width of an ASLayoutElement. This prevents the used value of the `width` property from becoming smaller than the specified for `minWidth`. - -- `-[ASLayoutElementStyle maxWidth]`: specifies the maximum width of an ASLayoutElement. It prevents the used value of the `width` property from becoming larger than the specified for `maxWidth`. - -- `-[ASLayoutElementStyle height]`: specifies the height of an ASLayoutElement. The `minHeight` and `maxHeight` properties will override `height`. The width will be set to Auto unless provided. - -- `-[ASLayoutElementStyle minHeight]`: specifies the minimum height of an ASLayoutElement. It prevents the used value of the `height` property from becoming smaller than the specified for `minHeight`. - -- `-[ASLayoutElementStyle maxHeight]`: specifies the maximum height of an ASLayoutElement. It prevents the used value of the `height` property from becoming larger than the specified for `maxHeight`. - -To set both the width and height with a `CGSize` value: - -- `-[ASLayoutElementStyle preferredSize]`: Provides a suggested size for a layout element. If the optional minSize or maxSize are provided, and the preferredSize exceeds these, the minSize or maxSize will be enforced. If this optional value is not provided, the layout element’s size will default to it’s intrinsic content size provided calculateSizeThatFits: - -- `-[ASLayoutElementStyle minSize]`: An optional property that provides a minimum size bound for a layout element. If provided, this restriction will always be enforced. If a parent layout element’s minimum size is smaller than its child’s minimum size, the child’s minimum size will be enforced and its size will extend out of the layout spec’s. - -- `-[ASLayoutElementStyle maxSize]`: An optional property that provides a maximum size bound for a layout element. If provided, this restriction will always be enforced. If a child layout element’s maximum size is smaller than its parent, the child’s maximum size will be enforced and its size will extend out of the layout spec’s. - -To set both the width and height with a relative (%) value (an `ASRelativeSize`): - -- `-[ASLayoutElementStyle preferredRelativeSize]`: Provides a suggested RELATIVE size for a layout element. An ASRelativeSize uses percentages rather than points to specify layout. E.g. width should be 50% of the parent’s width. If the optional minRelativeSize or maxRelativeSize are provided, and the preferredRelativeSize exceeds these, the minRelativeSize or maxRelativeSize will be enforced. If this optional value is not provided, the layout element’s size will default to its intrinsic content size provided calculateSizeThatFits: - -- `-[ASLayoutElementStyle minRelativeSize]`: An optional property that provides a minimum RELATIVE size bound for a layout element. If provided, this restriction will always be enforced. If a parent layout element’s minimum relative size is smaller than its child’s minimum relative size, the child’s minimum relative size will be enforced and its size will extend out of the layout spec’s. - -- `-[ASLayoutElementStyle maxRelativeSize]`: An optional property that provides a maximum RELATIVE size bound for a layout element. If provided, this restriction will always be enforced. If a parent layout element’s maximum relative size is smaller than its child’s maximum relative size, the child’s maximum relative size will be enforced and its size will extend out of the layout spec’s. - -For example, if you want to set a `width` of an `ASDisplayNode`: - -
-SwiftObjective-C - -
-
-// 1.x:
-// no good way to set an intrinsic size
-
-// 2.0:
-ASDisplayNode *ASDisplayNode = ...;
-
-// width 100 points, height: auto
-displayNode.style.width = ASDimensionMakeWithPoints(100);
-
-// width 50%, height: auto
-displayNode.style.width = ASDimensionMakeWithFraction(0.5);
-
-ASLayoutSpec *layoutSpec = ...;
-
-// width 100 points, height 100 points
-layoutSpec.style.preferredSize = CGSizeMake(100, 100);
-
- -
-
- -If you previously wrapped an `ASLayoutElement` with an `ASStaticLayoutSpec` just to give it a specific size (without setting the `layoutPosition` property on the element too), you don't have to do that anymore. - -
-SwiftObjective-C - -
-
-ASStackLayoutSpec *stackLayoutSpec = ...;
-id<ASLayoutElement> *layoutElement = ...;
-
-// 1.x:
-layoutElement.sizeRange = ASRelativeSizeRangeMakeWithExactCGSize(CGSizeMake(50, 50));
-ASStaticLayoutSpec *staticLayoutSpec = [ASStaticLayoutSpec staticLayoutSpecWithChildren:@[layoutElement]];
-stackLayoutSpec.children = @[staticLayoutSpec];
-
-// 2.0:
-layoutElement.style.preferredSizeRange = ASRelativeSizeRangeMakeWithExactCGSize(CGSizeMake(50, 50));
-stackLayoutSpec.children = @[layoutElement];
-
- -
-
- -If you previously wrapped a `ASLayoutElement` within a `ASStaticLayoutSpec` just to return any layout spec from within `layoutSpecThatFits:` there is a new layout spec now that is called `ASWrapperLayoutSpec`. `ASWrapperLayoutSpec` is an `ASLayoutSpec` subclass that can wrap a `ASLayoutElement` and calculates the layout of the child based on the size given to the `ASLayoutElement`: - -
-SwiftObjective-C - -
-
-// 1.x - ASStaticLayoutSpec used as a "wrapper" to return subnode from layoutSpecThatFits: 
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  return [ASStaticLayoutSpec staticLayoutSpecWithChildren:@[subnode]];
-}
-
-// 2.0
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  return [ASWrapperLayoutSpec wrapperWithLayoutElement:subnode];
-}
-
-// 1.x - ASStaticLayoutSpec used to set size (but not position) of subnode
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  ASDisplayNode *subnode = ...;
-  subnode.preferredSize = ...;
-  return [ASStaticLayoutSpec staticLayoutSpecWithChildren:@[subnode]];
-}
-
-// 2.0
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  ASDisplayNode *subnode = ...;
-  subnode.style.preferredSize = CGSizeMake(constrainedSize.max.width, constrainedSize.max.height / 2.0);
-  return [ASWrapperLayoutSpec wrapperWithLayoutElement:subnode];
-}
-
- -
-
- -## Deprecation of `-[ASDisplayNode preferredFrameSize]` - -With the introduction of new sizing properties there is no need anymore for the `-[ASDisplayNode preferredFrameSize]` property. Therefore it is deprecated in **2.0**. Instead, use the size values on the `style` object of an `ASDisplayNode`: - -
-SwiftObjective-C - -
-
 
-ASDisplayNode *ASDisplayNode = ...;
-
-// 1.x:
-displayNode.preferredFrameSize = CGSize(100, 100);
-
-// 2.0
-displayNode.style.preferredSize = CGSize(100, 100);
-
- -
-
- -`-[ASDisplayNode preferredFrameSize]` was not supported properly and was often more confusing than helpful. The new sizing methods should be easier and more clear to implment. - -## Deprecation of `-[ASLayoutElement measureWithSizeRange:]` - -`-[ASLayoutElement measureWithSizeRange:]` is deprecated in **2.0**. - -#### Calling `measureWithSizeRange:` - -If you previously called `-[ASLayoutElement measureWithSizeRange:]` to receive an `ASLayout`, call `-[ASLayoutElement layoutThatFits:]` now instead. - -
-SwiftObjective-C - -
-
-// 1.x:
-ASLayout *layout = [layoutElement measureWithSizeRange:someSizeRange];
-
-// 2.0:
-ASLayout *layout = [layoutElement layoutThatFits:someSizeRange];
-
- -
-
- -#### Implementing `measureWithSizeRange:` - -If you are implementing a custom `class` that conforms to `ASLayoutElement` (e.g. creating a custom `ASLayoutSpec`) , replace `-measureWithSizeRange:` with `-calculateLayoutThatFits:` - -
-SwiftObjective-C - -
-
-// 1.x:
-- (ASLayout *)measureWithSizeRange:(ASSizeRange)constrainedSize {}
-
-// 2.0:
-- (ASLayout *)calculateLayoutThatFits:(ASSizeRange)constrainedSize {}
-
- -
-
- -`-calculateLayoutThatFits:` takes an `ASSizeRange` that specifies a min size and a max size of type `CGSize`. Choose any size in the given range, to calculate the children's size and position and return a `ASLayout` structure with the layout of child components. - -Besides `-calculateLayoutThatFits:` there are two additional methods on `ASLayoutElement` that you should know about if you are implementing classes that conform to `ASLayoutElement`: - -
-SwiftObjective-C - -
-
-- (ASLayout *)calculateLayoutThatFits:(ASSizeRange)constrainedSize
-                     restrictedToSize:(ASLayoutElementSize)size
-                 relativeToParentSize:(CGSize)parentSize;
-
- -
-
- -In certain advanced cases, you may want to override this method. Overriding this method allows you to receive the `layoutElement`'s size, parent size, and constrained size. With these values you could calculate the final constrained size and call `-calculateLayoutThatFits:` with the result. - -
-SwiftObjective-C - -
-
-- (ASLayout *)layoutThatFits:(ASSizeRange)constrainedSize
-                  parentSize:(CGSize)parentSize;
-
- -
-
- -Call this on children`layoutElements` to compute their layouts within your implementation of `-calculateLayoutThatFits:`. - -For sample implementations of layout specs and the usage of the `calculateLayoutThatFits:` family of methods, check out the layout specs in Texture itself! - -## Deprecation of `-[ASDisplayNode measure:]` - -Use `-[ASDisplayNode layoutThatFits:]` instead to get an `ASLayout` and call `size` on the returned `ASLayout`: - -
-SwiftObjective-C - -
-
-// 1.x:
-CGSize size = [displayNode measure:CGSizeMake(100, 100)];
-
-// 2.0:
-// Creates an ASSizeRange with min and max sizes.
-ASLayout *layout = [displayNode layoutThatFits:ASSizeRangeMake(CGSizeZero, CGSizeMake(100, 100))];
-// Or an exact size
-// ASLayout *layout = [displayNode layoutThatFits:ASSizeRangeMake(CGSizeMake(100, 100))];
-CGSize size = layout.size;
-
- -
-
- -## Remove of `-[ASAbsoluteLayoutElement sizeRange]` - -The `sizeRange` property was removed from the `ASAbsoluteLayoutElement` protocol. Instead set the one of the following: - -- `-[ASLayoutElement width]` -- `-[ASLayoutElement height]` -- `-[ASLayoutElement minWidth]` -- `-[ASLayoutElement minHeight]` -- `-[ASLayoutElement maxWidth]` -- `-[ASLayoutElement maxHeight]` - -
-SwiftObjective-C - -
-
-id<ASLayoutElement> layoutElement = ...;
-
-// 1.x:
-layoutElement.sizeRange = ASRelativeSizeRangeMakeWithExactCGSize(CGSizeMake(50, 50));
-
-// 2.0:
-layoutElement.style.preferredSizeRange = ASRelativeSizeRangeMakeWithExactCGSize(CGSizeMake(50, 50));
-
- -
-
- -Due to the removal of `-[ASAbsoluteLayoutElement sizeRange]`, we also removed the `ASRelativeSizeRange`, as the type was no longer needed. - -## Rename `ASRelativeDimension` to `ASDimension` - -To simplify the naming and support the fact that dimensions are widely used in Texture now, `ASRelativeDimension` was renamed to `ASDimension`. Having a shorter name and handy functions to create it was an important goal for us. - -`ASRelativeDimensionTypePercent` and associated functions were renamed to use `Fraction` to be consistent with Apple terminology. - -
-SwiftObjective-C - -
-
-// 2.0:
-// Handy functions to create ASDimensions
-ASDimension dimensionInPoints;
-dimensionInPoints = ASDimensionMake(ASDimensionTypePoints, 5.0)
-dimensionInPoints = ASDimensionMake(5.0)
-dimensionInPoints = ASDimensionMakeWithPoints(5.0)
-dimensionInPoints = ASDimensionMake("5.0pt");
-
-ASDimension dimensionInFractions;
-dimensionInFractions = ASDimensionMake(ASDimensionTypeFraction, 0.5)
-dimensionInFractions = ASDimensionMakeWithFraction(0.5)
-dimensionInFractions = ASDimensionMake("50%");
-
- -
-
- -## Introduction of `ASDimensionUnitAuto` - -Previously `ASDimensionUnitPoints` and `ASDimensionUnitFraction` were the only two `ASDimensionUnit` enum values available. A new dimension type called `ASDimensionUnitAuto` now exists. All of the ``ASLayoutElementStyle` sizing properties are set to `ASDimensionAuto` by default. - -`ASDimensionUnitAuto` means more or less: *"I have no opinion" and may be resolved in whatever way makes most sense given the circumstances.* - -Most of the time this is the intrinsic content size of the `ASLayoutElement`. - -For example, if an `ASImageNode` has a `width` set to `ASDimensionUnitAuto`, the width of the linked image file will be used. For an `ASTextNode` the intrinsic content size will be calculated based on the text content. If an `ASLayoutElement` cannot provide any intrinsic content size like `ASVideoNode` for example the size needs to set explicitly. - -
-SwiftObjective-C - -
-
-// 2.0:
-// No specific size needs to be set as the imageNode's size 
-// will be calculated from the content (the image in this case)
-ASImageNode *imageNode = [ASImageNode new];
-imageNode.image = ...;
-
-// Specific size must be set for ASLayoutElement objects that
-// do not have an intrinsic content size (ASVideoNode does not
-// have a size until it's video downloads)
-ASVideoNode *videoNode = [ASVideoNode new];
-videoNode.style.preferredSize = CGSizeMake(200, 100);
-
- -
-
- diff --git a/submodules/AsyncDisplayKit/docs/_docs/layout2-layout-element-properties.md b/submodules/AsyncDisplayKit/docs/_docs/layout2-layout-element-properties.md deleted file mode 100755 index 18735a8cdf..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layout2-layout-element-properties.md +++ /dev/null @@ -1,146 +0,0 @@ ---- -title: Layout Element Properties -layout: docs -permalink: /docs/layout2-layout-element-properties.html -prevPage: layout2-layoutspec-types.html -nextPage: layout2-api-sizing.html ---- - -- ASStackLayoutElement Properties - will only take effect on a node or layout spec that is the child of a stack spec -- ASAbsoluteLayoutElement Properties - will only take effect on a node or layout spec that is the child of a absolute spec -- ASLayoutElement Properties - applies to all nodes & layout specs - -## ASStackLayoutElement Properties - -
-Please note that the following properties will only take effect if set on the child of an STACK layout spec. -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyDescription
CGFloat .style.spacingBeforeAdditional space to place before this object in the stacking direction.
CGFloat .style.spacingAfterAdditional space to place after this object in the stacking direction.
CGFloat .style.flexGrowIf the sum of childrens' stack dimensions is less than the minimum size, should this object grow?
CGFloat .style.flexShrinkIf the sum of childrens' stack dimensions is greater than the maximum size, should this object shrink?
ASDimension .style.flexBasisSpecifies the initial size for this object, in the stack dimension (horizontal or vertical), before the flexGrow / flexShrink properties are applied and the remaining space is distributed.
ASStackLayoutAlignSelf .style.alignSelfOrientation of the object along cross axis, overriding alignItems. Options include: -
    -
  • ASStackLayoutAlignSelfAuto
  • -
  • ASStackLayoutAlignSelfStart
  • -
  • ASStackLayoutAlignSelfEnd
  • -
  • ASStackLayoutAlignSelfCenter
  • -
  • ASStackLayoutAlignSelfStretch
  • -
CGFloat .style.ascenderUsed for baseline alignment. The distance from the top of the object to its baseline.
CGFloat .style.descenderUsed for baseline alignment. The distance from the baseline of the object to its bottom.
- - -## ASAbsoluteLayoutElement Properties - -
-Please note that the following properties will only take effect if set on the child of an ABSOLUTE layout spec. -
- - - - - - - - - - -
PropertyDescription
CGPoint .style.layoutPositionThe CGPoint position of this object within its ASAbsoluteLayoutSpec parent spec.
- -## ASLayoutElement Properties - -
-Please note that the following properties apply to ALL layout elements. -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyDescription
ASDimension .style.widthThe width property specifies the width of the content area of an ASLayoutElement. The minWidth and maxWidth properties override width. Defaults to ASDimensionAuto.
ASDimension .style.heightThe height property specifies the height of the content area of an ASLayoutElement. The minHeight and maxHeight properties override height. Defaults to ASDimensionAuto.
ASDimension .style.minWidthThe minWidth property is used to set the minimum width of a given element. It prevents the used value of the width property from becoming smaller than the value specified for minWidth. The value of minWidth overrides both maxWidth and width. Defaults to ASDimensionAuto.
ASDimension .style.maxWidthThe maxWidth property is used to set the maximum width of a given element. It prevents the used value of the width property from becoming larger than the value specified for maxWidth. The value of maxWidth overrides width, but minWidth overrides maxWidth. Defaults to ASDimensionAuto.
ASDimension .style.minHeightThe minHeight property is used to set the minimum height of a given element. It prevents the used value of the height property from becoming smaller than the value specified for minHeight. The value of minHeight overrides both maxHeight and height. Defaults to ASDimensionAuto.
ASDimension .style.maxHeightThe maxHeight property is used to set the maximum height of a given element. It prevents the used value of the height property from becoming larger than the value specified for maxHeight. The value of maxHeight overrides height, but minHeight overrides maxHeight. Defaults to ASDimensionAuto
CGSize .style.preferredSize

Provides a suggested size for a layout element. If the optional minSize or maxSize are provided, and the preferredSize exceeds these, the minSize or maxSize will be enforced. If this optional value is not provided, the layout element’s size will default to it’s intrinsic content size provided calculateSizeThatFits:

-

This method is optional, but one of either preferredSize or preferredLayoutSize is required for nodes that either have no intrinsic content size or should be laid out at a different size than its intrinsic content size. For example, this property could be set on an ASImageNode to display at a size different from the underlying image size.

-

Warning: calling the getter when the size's width or height are relative will cause an assert.

CGSize .style.minSize

An optional property that provides a minimum size bound for a layout element. If provided, this restriction will always be enforced. If a parent layout element’s minimum size is smaller than its child’s minimum size, the child’s minimum size will be enforced and its size will extend out of the layout spec’s.

-

For example, if you set a preferred relative width of 50% and a minimum width of 200 points on an element in a full screen container, this would result in a width of 160 points on an iPhone screen. However, since 160 pts is lower than the minimum width of 200 pts, the minimum width would be used.

CGSize .style.maxSize

An optional property that provides a maximum size bound for a layout element. If provided, this restriction will always be enforced. If a child layout element’s maximum size is smaller than its parent, the child’s maximum size will be enforced and its size will extend out of the layout spec’s.

-

For example, if you set a preferred relative width of 50% and a maximum width of 120 points on an element in a full screen container, this would result in a width of 160 points on an iPhone screen. However, since 160 pts is higher than the maximum width of 120 pts, the maximum width would be used.

ASLayoutSize .style.preferredLayoutSizeProvides a suggested RELATIVE size for a layout element. An ASLayoutSize uses percentages rather than points to specify layout. E.g. width should be 50% of the parent’s width. If the optional minLayoutSize or maxLayoutSize are provided, and the preferredLayoutSize exceeds these, the minLayoutSize or maxLayoutSize will be enforced. If this optional value is not provided, the layout element’s size will default to its intrinsic content size provided calculateSizeThatFits:
ASLayoutSize .style.minLayoutSizeAn optional property that provides a minimum RELATIVE size bound for a layout element. If provided, this restriction will always be enforced. If a parent layout element’s minimum relative size is smaller than its child’s minimum relative size, the child’s minimum relative size will be enforced and its size will extend out of the layout spec’s.
ASLayoutSize .style.maxLayoutSizeAn optional property that provides a maximum RELATIVE size bound for a layout element. If provided, this restriction will always be enforced. If a parent layout element’s maximum relative size is smaller than its child’s maximum relative size, the child’s maximum relative size will be enforced and its size will extend out of the layout spec’s.
diff --git a/submodules/AsyncDisplayKit/docs/_docs/layout2-layoutSpecThatFits.md b/submodules/AsyncDisplayKit/docs/_docs/layout2-layoutSpecThatFits.md deleted file mode 100755 index cd3e3097cc..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layout2-layoutSpecThatFits.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: Composing Layout Specs -layout: docs -permalink: /docs/layout2-layoutSpecThatFits.html ---- - -The composing of layout specs and layoutables are happening within the `layoutSpecThatFits:` method. This is where you will put the majority of your layout code. It defines the layout and does the heavy calculation on a background thread. - -Every `ASDisplayNode` that would like to layout it's subnodes should should do this by implementing the `layoutSpecThatFits:` method. This method is where you build out a layout spec object that will produce the size of the node, as well as the size and position of all subnodes. - -The following `layoutSpecThatFits:` implementation is from the Kittens example and will implement an easy stack layout with an image with a constrained size on the left and a text to the right. The great thing is, by using a `ASStackLayoutSpec` the height is dynamically calculated based on the image height and the height of the text. - -
- - Swift - Objective-C - - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  // Set an intrinsic size for the image node
-  CGSize imageSize = _isImageEnlarged ? CGSizeMake(2.0 * kImageSize, 2.0 * kImageSize)
-                                      : CGSizeMake(kImageSize, kImageSize);
-  [_imageNode setSizeFromCGSize:imageSize];
-
-  // Shrink the text node in case the image + text gonna be too wide
-  _textNode.flexShrink = YES;
-
-  // Configure stack
-  ASStackLayoutSpec *stackLayoutSpec =
-  [ASStackLayoutSpec
-   stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal
-   spacing:kInnerPadding
-   justifyContent:ASStackLayoutJustifyContentStart
-   alignItems:ASStackLayoutAlignItemsStart
-   children:_swappedTextAndImage ? @[_textNode, _imageNode] : @[_imageNode, _textNode]];
-
-  // Add inset
-  return [ASInsetLayoutSpec
-          insetLayoutSpecWithInsets:UIEdgeInsetsMake(kOuterPadding, kOuterPadding, kOuterPadding, kOuterPadding)
-          child:stackLayoutSpec];
-}
-  
- - -
-
- - -The result looks like the following: -![Kittens Node](https://d3vv6lp55qjaqc.cloudfront.net/items/2l133Y2B3r1F231a310q/Screen%20Shot%202016-08-23%20at%202.29.12%20PM.png) - -Let's look at some more advanced composition of layout spec and layoutable implementation from the `ASDKGram` example that should give you a feel how layout specs and layoutables can be combined to compose a difficult layout. You can also find this code in the `examples/ASDKGram` folder. - -
- - Swift - Objective-C - - -
-
-  
- - -
-
- -After the layout pass happened the result will look like the following: -![ASDKGram](https://d3vv6lp55qjaqc.cloudfront.net/items/1l0t352p441K3k0C3y1l/layout-example-2.png) - -The layout spec object that you create in `layoutSpecThatFits:` is mutable up until the point that it is return in this method. After this point, it will be immutable. It's important to remember not to cache layout specs for use later but instead to recreate them when necessary. - -Note: Because it is run on a background thread, you should not set any node.view or node.layer properties here. Also, unless you know what you are doing, do not create any nodes in this method. Additionally, it is not necessary to begin this method with a call to super, unlike other method overrides. \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/layout2-layoutspec-types-examples.md b/submodules/AsyncDisplayKit/docs/_docs/layout2-layoutspec-types-examples.md deleted file mode 100755 index 6b851879ff..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layout2-layoutspec-types-examples.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Layout Spec Composition Examples -layout: docs -permalink: /docs/layout2-layoutspec-types-examples.html ---- - -## Text Overlaid on an Image - - -
-SwiftObjective-C - -
-
-- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
-{
-  ...
-  UIEdgeInsets *insets = UIEdgeInsetsMake(0, HORIZONTAL_BUFFER, 0, HORIZONTAL_BUFFER);
-  ASInsetLayoutSpec *headerWithInset = [ASInsetLayoutSpec alloc] initWithInsets:insets child:textNode];
-  ...
-}
-
- -
-
\ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/layout2-layoutspec-types.md b/submodules/AsyncDisplayKit/docs/_docs/layout2-layoutspec-types.md deleted file mode 100755 index a5ab39b14f..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layout2-layoutspec-types.md +++ /dev/null @@ -1,517 +0,0 @@ ---- -title: Layout Specs -layout: docs -permalink: /docs/layout2-layoutspec-types.html -prevPage: automatic-layout-examples-2.html -nextPage: layout2-layout-element-properties.html ---- - -The following `ASLayoutSpec` subclasses can be used to compose simple or very complex layouts. - - -
  • ASCornerLayoutSpec
  • - -You may also subclass `ASLayoutSpec` in order to make your own, custom layout specs. - -## ASWrapperLayoutSpec - -`ASWrapperLayoutSpec` is a simple `ASLayoutSpec` subclass that can wrap a `ASLayoutElement` and calculate the layout of the child based on the size set on the layout element. - -`ASWrapperLayoutSpec` is ideal for easily returning a single subnode from `-layoutSpecThatFits:`. Optionally, this subnode can have sizing information set on it. However, if you need to set a position in addition to a size, use `ASAbsoluteLayoutSpec` instead. - -
    - - Swift - Objective-C - - -
    -
    -// return a single subnode from layoutSpecThatFits: 
    -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
    -{
    -  return [ASWrapperLayoutSpec wrapperWithLayoutElement:_subnode];
    -}
    -
    -// set a size (but not position)
    -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
    -{
    -  _subnode.style.preferredSize = CGSizeMake(constrainedSize.max.width,
    -                                            constrainedSize.max.height / 2.0);
    -  return [ASWrapperLayoutSpec wrapperWithLayoutElement:subnode];
    -}
    -
    - - -
    -
    - -## ASStackLayoutSpec (Flexbox Container) -Of all the layoutSpecs in Texture, `ASStackLayoutSpec` is the most useful and powerful. `ASStackLayoutSpec` uses the flexbox algorithm to determine the position and size of its children. Flexbox is designed to provide a consistent layout on different screen sizes. In a stack layout you align items in either a vertical or horizontal stack. A stack layout can be a child of another stack layout, which makes it possible to create almost any layout using a stack layout spec. - -`ASStackLayoutSpec` has 7 properties in addition to its `` properties: - -- `direction`. Specifies the direction children are stacked in. If horizontalAlignment and verticalAlignment were set, -they will be resolved again, causing justifyContent and alignItems to be updated accordingly. -- `spacing`. The amount of space between each child. -- `horizontalAlignment`. Specifies how children are aligned horizontally. Depends on the stack direction, setting the alignment causes either - justifyContent or alignItems to be updated. The alignment will remain valid after future direction changes. - Thus, it is preferred to those properties. -- `verticalAlignment`. Specifies how children are aligned vertically. Depends on the stack direction, setting the alignment causes either - justifyContent or alignItems to be updated. The alignment will remain valid after future direction changes. - Thus, it is preferred to those properties. -- `justifyContent`. It defines the alignment along the main axis. -- `alignItems`. Orientation of children along cross axis. -- `flexWrap`. Whether children are stacked into a single or multiple lines. Defaults to single line. -- `alignContent`. Orientation of lines along cross axis if there are multiple lines. - -
    - - Swift - Objective-C - - -
    -
    -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
    -{
    -  ASStackLayoutSpec *mainStack = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal
    -                       spacing:6.0
    -                justifyContent:ASStackLayoutJustifyContentStart
    -                    alignItems:ASStackLayoutAlignItemsCenter
    -                      children:@[_iconNode, _countNode]];
    -
    -  // Set some constrained size to the stack
    -  mainStack.style.minWidth = ASDimensionMakeWithPoints(60.0);
    -  mainStack.style.maxHeight = ASDimensionMakeWithPoints(40.0);
    -
    -  return mainStack;
    -}
    -
    - - -
    -
    - -Flexbox works the same way in Texture as it does in CSS on the web, with a few exceptions. For example, the defaults are different and there is no `flex` parameter. See Web Flexbox Differences for more information. - -
    - -## ASInsetLayoutSpec -During the layout pass, the `ASInsetLayoutSpec` passes its `constrainedSize.max` `CGSize` to its child, after subtracting its insets. Once the child determines it's final size, the inset spec passes its final size up as the size of its child plus its inset margin. Since the inset layout spec is sized based on the size of it's child, the child **must** have an instrinsic size or explicitly set its size. - - - -If you set `INFINITY` as a value in the `UIEdgeInsets`, the inset spec will just use the intrinisic size of the child. See an example of this. - -
    - - Swift - Objective-C - - -
    -
    -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
    -{
    -  ...
    -  UIEdgeInsets *insets = UIEdgeInsetsMake(10, 10, 10, 10);
    -  ASInsetLayoutSpec *headerWithInset = [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets child:textNode];
    -  ...
    -}
    -
    - - -
    -
    - -## ASOverlayLayoutSpec -`ASOverlayLayoutSpec` lays out its child (blue), stretching another component on top of it as an overlay (red). - - - -The overlay spec's size is calculated from the child's size. In the diagram below, the child is the blue layer. The child's size is then passed as the `constrainedSize` to the overlay layout element (red layer). Thus, it is important that the child (blue layer) **must** have an intrinsic size or a size set on it. - -
    -When using Automatic Subnode Management with the ASOverlayLayoutSpec, the nodes may sometimes appear in the wrong order. This is a known issue that will be fixed soon. The current workaround is to add the nodes manually, with the overlay layout element (red) must added as a subnode to the parent node after the child layout element (blue). -
    - -
    - - Swift - Objective-C - - -
    -
    -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
    -{
    -  ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor blueColor]);
    -  ASDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor redColor]);
    -  return [ASOverlayLayoutSpec overlayLayoutSpecWithChild:backgroundNode overlay:foregroundNode];
    -}
    -
    - - -
    -
    - -## ASBackgroundLayoutSpec -`ASBackgroundLayoutSpec` lays out a component (blue), stretching another component behind it as a backdrop (red). - - - -The background spec's size is calculated from the child's size. In the diagram below, the child is the blue layer. The child's size is then passed as the `constrainedSize` to the background layout element (red layer). Thus, it is important that the child (blue layer) **must** have an intrinsic size or a size set on it. - -
    -When using Automatic Subnode Management with the ASOverlayLayoutSpec, the nodes may sometimes appear in the wrong order. This is a known issue that will be fixed soon. The current workaround is to add the nodes manually, with the child layout element (blue) must added as a subnode to the parent node after the child background element (red). -
    - -
    - - Swift - Objective-C - - -
    -
    -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
    -{
    -  ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor redColor]);
    -  ASDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor blueColor]);
    -
    -  return [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild:foregroundNode background:backgroundNode];
    -}
    -
    - - -
    -
    - -Note: The order in which subnodes are added matters for this layout spec; the background object must be added as a subnode to the parent node before the foreground object. Using ASM does not currently guarantee this order! - -## ASCenterLayoutSpec -`ASCenterLayoutSpec` centers its child within its max `constrainedSize`. - - - -If the center spec's width or height is unconstrained, it shrinks to the size of the child. - -`ASCenterLayoutSpec` has two properties: - -- `centeringOptions`. Determines how the child is centered within the center spec. Options include: None, X, Y, XY. -- `sizingOptions`. Determines how much space the center spec will take up. Options include: Default, minimum X, minimum Y, minimum XY. - -
    - - Swift - Objective-C - - -
    -
    -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
    -{
    -  ASStaticSizeDisplayNode *subnode = ASDisplayNodeWithBackgroundColor([UIColor greenColor], CGSizeMake(70, 100));
    -  return [ASCenterLayoutSpec centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringXY
    -                                                    sizingOptions:ASCenterLayoutSpecSizingOptionDefault
    -                                                            child:subnode]
    -}
    -
    - - -
    -
    - -## ASRatioLayoutSpec -`ASRatioLayoutSpec` lays out a component at a fixed aspect ratio which can scale. This spec **must** have a width or a height passed to it as a constrainedSize as it uses this value to scale itself. - - - -It is very common to use a ratio spec to provide an intrinsic size for `ASNetworkImageNode` or `ASVideoNode`, as both do not have an intrinsic size until the content returns from the server. - -
    - - Swift - Objective-C - - -
    -
    -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
    -{
    -  // Half Ratio
    -  ASStaticSizeDisplayNode *subnode = ASDisplayNodeWithBackgroundColor([UIColor greenColor], CGSizeMake(100, 100));
    -  return [ASRatioLayoutSpec ratioLayoutSpecWithRatio:0.5 child:subnode];
    -}
    -
    - - -
    -
    - -## ASRelativeLayoutSpec -Lays out a component and positions it within the layout bounds according to vertical and horizontal positional specifiers. Similar to the “9-part” image areas, a child can be positioned at any of the 4 corners, or the middle of any of the 4 edges, as well as the center. - -This is a very powerful class, but too complex to cover in this overview. For more information, look into `ASRelativeLayoutSpec`'s `-calculateLayoutThatFits:` method + properties. - -
    - - Swift - Objective-C - - -
    -
    -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
    -{
    -  ...
    -  ASDisplayNode *backgroundNode = ASDisplayNodeWithBackgroundColor([UIColor redColor]);
    -  ASStaticSizeDisplayNode *foregroundNode = ASDisplayNodeWithBackgroundColor([UIColor greenColor], CGSizeMake(70, 100));
    -
    -  ASRelativeLayoutSpec *relativeSpec = [ASRelativeLayoutSpec relativePositionLayoutSpecWithHorizontalPosition:ASRelativeLayoutSpecPositionStart
    -                                  verticalPosition:ASRelativeLayoutSpecPositionStart
    -                                      sizingOption:ASRelativeLayoutSpecSizingOptionDefault
    -                                             child:foregroundNode]
    -
    -  ASBackgroundLayoutSpec *backgroundSpec = [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild:relativeSpec background:backgroundNode];
    -  ...
    -}
    -
    - - -
    -
    - -## ASAbsoluteLayoutSpec -Within `ASAbsoluteLayoutSpec` you can specify exact locations (x/y coordinates) of its children by setting their `layoutPosition` property. Absolute layouts are less flexible and harder to maintain than other types of layouts. - -`ASAbsoluteLayoutSpec` has one property: - -- `sizing`. Determines how much space the absolute spec will take up. Options include: Default, and Size to Fit. *Note* that the Size to Fit option will replicate the behavior of the old `ASStaticLayoutSpec`. - -
    - - Swift - Objective-C - - -
    -
    -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
    -{
    -  CGSize maxConstrainedSize = constrainedSize.max;
    -
    -  // Layout all nodes absolute in a static layout spec
    -  guitarVideoNode.style.layoutPosition = CGPointMake(0, 0);
    -  guitarVideoNode.style.preferredSize = CGSizeMake(maxConstrainedSize.width, maxConstrainedSize.height / 3.0);
    -
    -  nicCageVideoNode.style.layoutPosition = CGPointMake(maxConstrainedSize.width / 2.0, maxConstrainedSize.height / 3.0);
    -  nicCageVideoNode.style.preferredSize = CGSizeMake(maxConstrainedSize.width / 2.0, maxConstrainedSize.height / 3.0);
    -
    -  simonVideoNode.style.layoutPosition = CGPointMake(0.0, maxConstrainedSize.height - (maxConstrainedSize.height / 3.0));
    -  simonVideoNode.style.preferredSize = CGSizeMake(maxConstrainedSize.width/2, maxConstrainedSize.height / 3.0);
    -
    -  hlsVideoNode.style.layoutPosition = CGPointMake(0.0, maxConstrainedSize.height / 3.0);
    -  hlsVideoNode.style.preferredSize = CGSizeMake(maxConstrainedSize.width / 2.0, maxConstrainedSize.height / 3.0);
    -
    -  return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[guitarVideoNode, nicCageVideoNode, simonVideoNode, hlsVideoNode]];
    -}
    -
    - - -
    -
    - -## ASCornerLayoutSpec -`ASCornerLayoutSpec` is a new convenient layout spec for fast corner element layout. The easy way to position an element in corner is to use declarative code expression rather than manual coordinate calculation, and ASCornerLayoutSpec can achieve this goal. - - - -`ASCornerLayoutSpec` takes good care of its own size calculation. The best scenario to explain this would be the case that adding a small badge view at the corner of user's avatar image and there is no need to worry about the fact that little-exceeded badge frame (which out of avatar image frame) may affect the whole layout size. By default, the size of corner element will not be added to layout size, only if you manually turn on the `wrapsCorner` property. - -`ASCornerLayoutSpec` is introduced from version 2.7 and above. - -
    - - Swift - Objective-C - - -
    -
    -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
    -{
    -  ...
    -  // Layout the center of badge to the top right corner of avatar.
    -  ASCornerLayoutSpec *cornerSpec = [ASCornerLayoutSpec cornerLayoutSpecWithChild:self.avatarNode corner:self.badgeNode location:ASCornerLayoutLocationTopRight];
    -  // Slightly shift center of badge inside of avatar.
    -  cornerSpec.offset = CGPointMake(-3, 3);
    -  ...
    -}
    -
    - - -
    -
    - -## ASLayoutSpec -`ASLayoutSpec` is the main class from that all layout spec's are subclassed. It's main job is to handle all the children management, but it also can be used to create custom layout specs. Only the super advanced should want / need to create a custom subclasses of `ASLayoutSpec` though. Instead try to use provided layout specs and compose them together to create more advanced layouts. - -Another use of `ASLayoutSpec` is to be used as a spacer in a `ASStackLayoutSpec` with other children, when `.flexGrow` and/or `.flexShrink` is applied. - -
    - - Swift - Objective-C - - -
    -
    -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
    -{
    -  ...
    -  // ASLayoutSpec as spacer
    -  ASLayoutSpec *spacer = [[ASLayoutSpec alloc] init];
    -  spacer.style.flexGrow = 1.0;
    -
    -  stack.children = @[imageNode, spacer, textNode];
    -  ...
    -}
    -
    - - -
    -
    diff --git a/submodules/AsyncDisplayKit/docs/_docs/layout2-manual-layout.md b/submodules/AsyncDisplayKit/docs/_docs/layout2-manual-layout.md deleted file mode 100755 index fef0ccf505..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layout2-manual-layout.md +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Manual Layout -layout: docs -permalink: /docs/layout2-manual-layout.html ---- - -## Manual Layout -After diving in to the automatic way for layout in Texture there is still the _old_ way to layout manually available. For the sake of completness here is a short description how to accomplish that within Texture. - -### Manual Layout UIKit - -Sizing and layout of custom view hierarchies are typically done all at once on the main thread. For example, a custom UIView that minimally encloses a text view and an image view might look like this: - -
    - - Swift - Objective-C - - -
    -
    -- (CGSize)sizeThatFits:(CGSize)size
    -{
    -  // size the image
    -  CGSize imageSize = [_imageView sizeThatFits:size];
    -
    -  // size the text view
    -  CGSize maxTextSize = CGSizeMake(size.width - imageSize.width, size.height);
    -  CGSize textSize = [_textView sizeThatFits:maxTextSize];
    -
    -  // make sure everything fits
    -  CGFloat minHeight = MAX(imageSize.height, textSize.height);
    -  return CGSizeMake(size.width, minHeight);
    -}
    -
    -- (void)layoutSubviews
    -{
    -  CGSize size = self.bounds.size; // convenience
    -
    -  // size and layout the image
    -  CGSize imageSize = [_imageView sizeThatFits:size];
    -  _imageView.frame = CGRectMake(size.width - imageSize.width, 0.0f,
    -                                imageSize.width, imageSize.height);
    -
    -  // size and layout the text view
    -  CGSize maxTextSize = CGSizeMake(size.width - imageSize.width, size.height);
    -  CGSize textSize = [_textView sizeThatFits:maxTextSize];
    -  _textView.frame = (CGRect){ CGPointZero, textSize };
    -}
    -  
    - - -
    -
    - -This isn't ideal. We're sizing our subviews twice — once to figure out how big our view needs to be and once when laying it out — and while our layout arithmetic is cheap and quick, we're also blocking the main thread on expensive text sizing. - -We could improve the situation by manually cacheing our subviews' sizes, but that solution comes with its own set of problems. Just adding `_imageSize` and `_textSize` ivars wouldn't be enough: for example, if the text were to change, we'd need to recompute its size. The boilerplate would quickly become untenable. - -Further, even with a cache, we'll still be blocking the main thread on sizing *sometimes*. We could try to shift sizing to a background thread with `dispatch_async()`, but even if our own code is thread-safe, UIView methods are documented to [only work on the main thread](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html): - -> Manipulations to your application’s user interface must occur on the main -> thread. Thus, you should always call the methods of the UIView class from -> code running in the main thread of your application. The only time this may -> not be strictly necessary is when creating the view object itself but all -> other manipulations should occur on the main thread. - -This is a pretty deep rabbit hole. We could attempt to work around the fact that UILabels and UITextViews cannot safely be sized on background threads by manually creating a TextKit stack and sizing the text ourselves... but that's a laborious duplication of work. Further, if UITextView's layout behaviour changes in an iOS update, our sizing code will break. (And did we mention that TextKit isn't thread-safe either?) - -### Manual Layout Texture - -Manual layout within Texture are realized within two methods: - -#### `calculateSizeThatFits` and `layout` - -Within `calculateSizeThatFits:` you should provide a intrinsic content size for the node based on the given `constrainedSize`. This method is called on a background thread so perform expensive sizing operations within it. - -
    - - Swift - Objective-C - - -
    -
    -- [ASDisplayNode calculateSizeThatFits:]
    -  
    - - -
    -
    - -After measurement and layout pass happens further layout can be done in `layout`. This method is called on the main thread. In there, layout operations can be done for nodes that are not playing within the automatic layout system and are referenced within `layoutSpecThatFits:`. - -
    - - Swift - Objective-C - - -
    -
    -- [ASDisplayNode layout]
    -  
    - - -
    -
    - -#### Example -Our custom node looks like this: - -
    - - Swift - Objective-C - - -
    -
    -#import 
    -
    -...
    -
    -// perform expensive sizing operations on a background thread
    -- (CGSize)calculateSizeThatFits:(CGSize)constrainedSize
    -{
    -  // size the image
    -  CGSize imageSize = [_imageNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size;
    -
    -  // size the text node
    -  CGSize maxTextSize = CGSizeMake(constrainedSize.width - imageSize.width,
    -                                  constrainedSize.height);
    -
    -  CGSize textSize = [_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, maxTextSize)].size;
    -
    -  // make sure everything fits
    -  CGFloat minHeight = MAX(imageSize.height, textSize.height);
    -  return CGSizeMake(constrainedSize.width, minHeight);
    -}
    -
    -// do as little work as possible in main-thread layout
    -- (void)layout
    -{
    -  // layout the image using its cached size
    -  CGSize imageSize = _imageNode.calculatedSize;
    -  _imageNode.frame = CGRectMake(self.bounds.size.width - imageSize.width, 0.0f,
    -                                imageSize.width, imageSize.height);
    -
    -  // layout the text view using its cached size
    -  CGSize textSize = _textNode.calculatedSize;
    -  _textNode.frame = (CGRect){ CGPointZero, textSize };
    -}
    -  
    - - -
    -
    - -`ASImageNode` and `ASTextNode`, like the rest of Texture, are thread-safe, so we can size them on background threads. The `-layoutThatFits:` method is like `-sizeThatFits:`, but with side effects: it caches the (`calculatedSize`) for quick access later on — like in our now-snappy `-layout` implementation. - -As you can see, node hierarchies are sized and laid out in much the same way as their view counterparts. Manually layed out nodes do need to be written with a few things in mind: - -* Nodes must recursively measure all of their subnodes in their `-calculateSizeThatFits:` implementations. Note that the `-layoutThatFits:` machinery will only call `-calculateSizeThatFits:` if a new measurement pass is needed (e.g., if the constrained size has changed) and `layoutSpecThatFits:` is *not* implemented. - -* Nodes should perform any other expensive pre-layout calculations in `-calculateSizeThatFits:`, caching useful intermediate results in ivars as appropriate. - -* Nodes should call `[self invalidateCalculatedSize]` when necessary. For example, `ASTextNode` invalidates its calculated size when its `attributedString` property is changed. - -As already mentioned, automatic layout is preferred over manual layout and should be the way to go in most cases. \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/layout2-quickstart.md b/submodules/AsyncDisplayKit/docs/_docs/layout2-quickstart.md deleted file mode 100755 index 798e0a2ec4..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layout2-quickstart.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Quickstart -layout: docs -permalink: /docs/layout2-quickstart.html -prevPage: multiplex-image-node.html -nextPage: automatic-layout-examples-2.html ---- - -## Motivation & Benefits - -The Layout API was created as a performant alternative to UIKit's Auto Layout, which becomes exponentially expensive for complicated view hierarchies. Texture's Layout API has many benefits over using UIKit's Auto Layout: - -- **Fast**: As fast as manual layout code and significantly faster than Auto Layout -- **Asynchronous & Concurrent:** Layouts can be computed on background threads so user interactions are not interrupted. -- **Declarative**: Layouts are declared with immutable data structures. This makes layout code easier to develop, document, code review, test, debug, profile, and maintain. -- **Cacheable**: Layout results are immutable data structures so they can be precomputed in the background and cached to increase user perceived performance. -- **Extensible**: Easy to share code between classes. - -## Inspired by CSS Flexbox - -Those who are familiar with Flexbox will notice many similarities in the two systems. However, Texture's Layout API does not re-implement all of CSS. - -## Basic Concepts - -Texture's layout system is centered around two basic concepts: - -1. Layout Specs -2. Layout Elements - - -### Layout Specs - -A layout spec, short for "layout specification", has no physical presence. Instead, layout specs act as containers for other layout elements by understanding how these children layout elements relate to each other. - -Texture provides several subclasses of `ASLayoutSpec`, from a simple layout specification that insets a single child, to a more complex layout specification that arranges multiple children in varying stack configurations. - -### Layout Elements - -Layout specs contain and arrange layout elements. - -All `ASDisplayNode`s and `ASLayoutSpec`s conform to the `` protocol. This means that you can compose layout specs from both nodes and other layout specs. Cool! - -The `ASLayoutElement` protocol has several properties that can be used to create very complex layouts. In addition, layout specs have their own set of properties that can be used to adjust the arrangment of the layout elements. - -### Combine Layout Specs & Layout Elements to Make Complex UI - -Here you can see how `ASTextNode`s (highlighted in yellow), an `ASVideoNode` (top image) and an `ASStackLayoutSpec` ("stack layout spec") can be combined to create a complex layout. - - - -The play button on top of the `ASVideoNode` (top image) is placed using an `ASCenterLayoutSpec` ("center layout spec") and an `ASOverlayLayoutSpec` ("overlay layout spec"). - - - -### Some nodes need Sizes Set - - - -Some elements have an "intrinsic size" based on their immediately available content. For example, ASTextNode can calculate its size based on its attributed string. Other nodes that have an intrinsic size include - -- `ASImageNode` -- `ASTextNode` -- `ASButtonNode` - -All other nodes either do not have an intrinsic size or lack an intrinsic size until their external resource is loaded. For example, an `ASNetworkImageNode` does not know its size until the image has been downloaded from the URL. These sorts of elements include - -- `ASVideoNode` -- `ASVideoPlayerNode` -- `ASNetworkImageNode` -- `ASEditableTextNode` - -These nodes that lack an initial intrinsic size must have an initial size set for them using an `ASRatioLayoutSpec`, an `ASAbsoluteLayoutSpec` or the size properties on the style object. - -### Layout Debugging - -Calling `-asciiArtString` on any `ASDisplayNode` or `ASLayoutSpec` returns an ascii-art representation of the object and its children. Optionally, if you set the `.debugName` on any node or layout spec, that will also be included in the ascii art. An example is seen below. - -
    -
    -
    ------------------------ASStackLayoutSpec----------------------
    -|  -----ASStackLayoutSpec-----  -----ASStackLayoutSpec-----  |
    -|  |       ASImageNode       |  |       ASImageNode       |  |
    -|  |       ASImageNode       |  |       ASImageNode       |  |
    -|  ---------------------------  ---------------------------  |
    ---------------------------------------------------------------
    -
    -
    -
    - -You can also print out the style object on any `ASLayoutElement` (node or layout spec). This is especially useful when debugging the sizing properties. - -
    -
    -
    -(lldb) po _photoImageNode.style
    -Layout Size = min {414pt, 414pt} <= preferred {20%, 50%} <= max {414pt, 414pt}
    -
    -
    -
    diff --git a/submodules/AsyncDisplayKit/docs/_docs/layout2-web-flexbox-differences.md b/submodules/AsyncDisplayKit/docs/_docs/layout2-web-flexbox-differences.md deleted file mode 100755 index 73dac79fe7..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/layout2-web-flexbox-differences.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Web Flexbox Differences -layout: docs -permalink: /docs/layout2-web-flexbox-differences.html ---- - -The goal of Texture's Layout API is *not* to re-implement all of CSS. It only targets a subset of CSS and Flexbox container, and there are no plans to implement support for tables, floats, or any other CSS concepts. The Texture Layout API also does not plan to support styling properties which do not affect layout such as color or background properties. - -The layout system tries to stay as close as possible to CSS. There are, however, certain cases where it differs from the web, these include: - -### Naming properties - -Certain properties have a different naming as on the web. For example `min-height` equivalent is the `minHeight` property. The full list of properties that control layout is documented in the Layout Properties section. - -### No margin / padding properties - -Layoutables don't have a padding or margin property. Instead wrapping a layoutable within an `ASInsetLayoutSpec` to apply padding or margin to the layoutable is the recommended way. See `ASInsetLayout` section for more information. - -### Missing features - -Certain features are not supported currently. See Layout Properties for the full list of properties that are supported. diff --git a/submodules/AsyncDisplayKit/docs/_docs/map-node.md b/submodules/AsyncDisplayKit/docs/_docs/map-node.md deleted file mode 100755 index 6245306193..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/map-node.md +++ /dev/null @@ -1,146 +0,0 @@ ---- -title: ASMapNode -layout: docs -permalink: /docs/map-node.html -prevPage: video-node.html -nextPage: control-node.html ---- - -`ASMapNode` allows you to easily specify a geographic region to show to your users. - -### Basic Usage - -Let's say you'd like to show a snapshot of San Francisco. All you need are the coordinates. - -
    -SwiftObjective-C - -
    -
    -ASMapNode *mapNode = [[ASMapNode alloc] init];
    -mapNode.style.preferredSize = CGSizeMake(300.0, 300.0);
    -
    -// San Francisco
    -CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(37.7749, -122.4194);
    -
    -// show 20,000 square meters
    -mapNode.region = MKCoordinateRegionMakeWithDistance(coord, 20000, 20000);
    -
    - - -
    -
    - - - -The region value is actually just one piece of a property called `options` of type `MKMapSnapshotOptions`. - - -### MKMapSnapshotOptions - -A map node's main components can be defined directly through its `options` property. The snapshot options object contains the following: - -
      -
    • An MKMapCamera: used to configure altitude and pitch of the camera
    • -
    • An MKMapRect: basically a CGRect
    • -
    • An MKMapRegion: Controls the coordinate of focus, and the size around that focus to show
    • -
    • An MKMapType: Can be set to Standard, Satellite, etc.
    • -
    - -To do something like changing your map to a satellite map, you just need to create an options object and set its properties accordingly. - -
    -SwiftObjective-C - -
    -
    -MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init];
    -options.mapType = MKMapTypeSatellite;
    -options.region = MKCoordinateRegionMakeWithDistance(coord, 20000, 20000);
    -
    -mapNode.options = options;
    -
    - -
    -
    - -Results in: - - - -One thing to note is that setting the options value will overwrite a previously set region. - -### Annotations - -To set annotations, all you need to do is assign an array of annotations to your `ASMapNode`. - -Say you want to show a pin directly in the middle of your map of San Francisco. - -
    -SwiftObjective-C - -
    -
    -MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
    -annotation.coordinate = CLLocationCoordinate2DMake(37.7749, -122.4194);
    -
    -mapNode.annotations = @[annotation];
    -
    - -
    -
    - - - -No problem. - -### Live Map Mode - -Chaning your map node from a static view of some region, into a fully interactable cartographic playground is as easy as: - -
    -SwiftObjective-C - -
    -
    -mapNode.liveMap = YES;
    -
    - -
    -
    - -This enables "live map mode" in which the node will use an MKMapView to render an interactive version of your map. - - - -As with UIKit views, the `MKMapView` used in live map mode is not thread-safe. - -### MKMapView Delegate - -If live map mode has been enabled and you need to react to any events associated with the map node, you can set the `mapDelegate` property. This delegate should conform to the MKMapViewDelegate protocol. - - - - diff --git a/submodules/AsyncDisplayKit/docs/_docs/multiplex-image-node.md b/submodules/AsyncDisplayKit/docs/_docs/multiplex-image-node.md deleted file mode 100755 index d219becb80..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/multiplex-image-node.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: ASMultiplexImageNode -layout: docs -permalink: /docs/multiplex-image-node.html -prevPage: editable-text-node.html ---- - -Let's say your API is out of your control and the images in your app can't be progressive jpegs but you can retrieve a few different sizes of the image asset you want to display. This is where you would use an `ASMultiplexImageNode` instead of an ASNetworkImageNode. - -In the following example, you're using a multiplex image node in an `ASCellNode` subclass. After initialization, you typically need to do two things. First, make sure to set `downloadsIntermediateImages` to `YES` so that the lesser quality images will be downloaded. - -Then, assign an array of keys to the property `imageIdentifiers`. This list should be in descending order of image quality and will be used by the node to determine what URL to call for each image it will try to load. - -
    -SwiftObjective-C - -
    -
    -- (instancetype)initWithURLs:(NSDictionary *)urls
    -{
    -    ...
    -     _imageURLs = urls;          // something like @{@"thumb": "/smallImageUrl", @"medium": ...}
    -
    -    _multiplexImageNode = [[ASMultiplexImageNode alloc] initWithCache:nil 
    -                                                           downloader:[ASBasicImageDownloader sharedImageDownloader]];
    -    _multiplexImageNode.downloadsIntermediateImages = YES;
    -    _multiplexImageNode.imageIdentifiers = @[ @"original", @"medium", @"thumb" ];
    -
    -    _multiplexImageNode.dataSource = self;
    -    _multiplexImageNode.delegate   = self;
    -    ...
    -}
    -    
    - - -
    -
    - - -Then, if you've set up a simple dictionary that holds the keys you provided earlier pointing to URLs of the various versions of your image, you can simply return the URL for the given key in: - -
    -SwiftObjective-C - -
    -
    -#pragma mark Multiplex Image Node Datasource
    -
    -- (NSURL *)multiplexImageNode:(ASMultiplexImageNode *)imageNode 
    -        URLForImageIdentifier:(id)imageIdentifier
    -{
    -    return _imageURLs[imageIdentifier];
    -}
    -
    - - -
    -
    - -There are also delegate methods provided to update you on things such as the progress of an image's download, when it has finished displaying etc. They're all optional so feel free to use them as necessary. - -For example, in the case that you want to react to the fact that a new image arrived, you can use the following delegate callback. - -
    -SwiftObjective-C - -
    -
    -#pragma mark Multiplex Image Node Delegate
    -
    -- (void)multiplexImageNode:(ASMultiplexImageNode *)imageNode 
    -            didUpdateImage:(UIImage *)image 
    -            withIdentifier:(id)imageIdentifier 
    -                 fromImage:(UIImage *)previousImage 
    -            withIdentifier:(id)previousImageIdentifier;
    -{    
    -        // this is optional, in case you want to react to the fact that a new image came in
    -}
    -
    - - -
    -
    - diff --git a/submodules/AsyncDisplayKit/docs/_docs/network-image-node.md b/submodules/AsyncDisplayKit/docs/_docs/network-image-node.md deleted file mode 100755 index 2753afe3ed..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/network-image-node.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: ASNetworkImageNode -layout: docs -permalink: /docs/network-image-node.html -prevPage: image-node.html -nextPage: video-node.html ---- - -`ASNetworkImageNode` can be used any time you need to display an image that is being hosted remotely. All you have to do is set the `.URL` property with the appropriate `NSURL` instance and the image will be asynchonously loaded and concurrently rendered for you. - -
    -SwiftObjective-C - -
    -
    -ASNetworkImageNode *imageNode = [[ASNetworkImageNode alloc] init];
    -imageNode.URL = [NSURL URLWithString:@"https://someurl.com/image_uri"];
    -	
    - - -
    -
    - -### Laying Out a Network Image Node - -Since an `ASNetworkImageNode` has no intrinsic content size when it is created, it is necessary for you to explicitly specify how they should be laid out. - -

    Option 1: .style.preferredSize

    - -If you have a standard size you want the image node's frame size to be you can use the `.style.preferredSize` property. - -
    -SwiftObjective-C - -
    -
    -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constraint
    -{
    -	imageNode.style.preferredSize = CGSizeMake(100, 200);
    -	...
    -	return finalLayoutSpec;
    -}
    -
    - - -
    -
    - -

    Option 2: ASRatioLayoutSpec

    - -This is also a perfect place to use `ASRatioLayoutSpec`. Instead of assigning a static size for the image, you can assign a ratio and the image will maintain that ratio when it has finished loading and is displayed. - -
    -SwiftObjective-C - -
    -
    -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constraint
    -{
    -	CGFloat ratio = 3.0/1.0;
    -	ASRatioLayoutSpec *imageRatioSpec = [ASRatioLayoutSpec ratioLayoutSpecWithRatio:ratio child:self.imageNode];
    -	...
    -	return finalLayoutSpec;
    -}
    -
    - - -
    -
    - -### Under the Hood - -
    If you choose not to include the PINRemoteImage and PINCache dependencies you will lose progressive jpeg support and be required to include your own custom cache that conforms to ASImageCacheProtocol.
    - -#### Progressive JPEG Support - -Thanks to the inclusion of PINRemoteImage, network image nodes now offer full support for loading progressive JPEGs. This means that if your server provides them, your images will display quickly at a lower quality that will scale up as more data is loaded. - -To enable progressive loading, just set `shouldRenderProgressImages` to `YES` like so: - -
    -SwiftObjective-C - -
    -
    -networkImageNode.shouldRenderProgressImages = YES;
    -
    - - -
    -
    - -It's important to remember that this is using one image that is progressively loaded. If your server is constrained to using regular JPEGs, but provides you with multiple versions of increasing quality, you should check out ASMultiplexImageNode instead. - -#### Automatic Caching - -`ASNetworkImageNode` now uses PINCache under the hood by default to cache network images automatically. - -#### GIF Support - -`ASNetworkImageNode` provides GIF support through `PINRemoteImage`'s beta `PINAnimatedImage`. Of note! This support will not work for local files unless `shouldCacheImage` is set to `NO`. diff --git a/submodules/AsyncDisplayKit/docs/_docs/node-overview.md b/submodules/AsyncDisplayKit/docs/_docs/node-overview.md deleted file mode 100755 index 0b699e2daf..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/node-overview.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Node Subclasses -layout: docs -permalink: /docs/node-overview.html -prevPage: containers-overview.html -nextPage: subclassing.html ---- - -Texture offers the following nodes. - -A key advantage of using nodes over UIKit components is that **all nodes perform layout and display off of the main thread**, so that the main thread is available to immediately respond to user interaction events. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Texture NodeUIKit Equivalent
    ASDisplayNodein place of UIKit's UIView
    - The root Texture node, from which all other nodes inherit.
    ASCellNodein place of UIKit's UITableViewCell & UICollectionViewCell
    - ASCellNodes are used in ASTableNode, ASCollectionNode and ASPagerNode.
    ASScrollNodein place of UIKit's UIScrollView -

    This node is useful for creating a customized scrollable region that contains other nodes.

    ASEditableTextNode
    - ASTextNode
    in place of UIKit's UITextView
    - in place of UIKit's UILabel
    ASImageNode
    - ASNetworkImageNode
    - ASMultiplexImageNode
    in place of UIKit's UIImageView
    ASVideoNode
    - ASVideoPlayerNode
    in place of UIKit's AVPlayerLayer
    - in place of UIKit's UIMoviePlayer
    ASControlNodein place of UIKit's UIControl
    ASButtonNodein place of UIKit's UIButton
    ASMapNodein place of UIKit's MKMapView
    - -
    -Despite having rough equivalencies to UIKit components, in general, Texture nodes offer more advanced features and conveniences. For example, an `ASNetworkImageNode` does automatic loading and cache management, and even supports progressive jpeg and animated gifs. - -The `AsyncDisplayKitOverview` example app gives basic implementations of each of the nodes listed above. - - -# Node Inheritance Hierarchy - -All Texture nodes inherit from `ASDisplayNode`. - -node inheritance flowchart - -The nodes highlighted in blue are synchronous wrappers of UIKit elements. For example, `ASScrollNode` wraps a `UIScrollView`, and `ASCollectionNode` wraps a `UICollectionView`. An `ASMapNode` in `liveMapMode` is a synchronous wrapper of `UIMapView`. - - - - diff --git a/submodules/AsyncDisplayKit/docs/_docs/overlay-layout-spec.md b/submodules/AsyncDisplayKit/docs/_docs/overlay-layout-spec.md deleted file mode 100755 index 3ddbe8231c..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/overlay-layout-spec.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: ASOverlayLayoutSpec -layout: docs -permalink: /docs/overlay-layout-spec.html ---- - -
    😑 This page is coming soon...
    \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/philosophy.md b/submodules/AsyncDisplayKit/docs/_docs/philosophy.md deleted file mode 100755 index 48481180af..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/philosophy.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Philosophy -layout: docs -permalink: /docs/philosophy.html -prevPage: getting-started.html -nextPage: installation.html ---- - -#Asynchronous Performance Gains - -Texture is a UI framework that was originally born from Facebook’s Paper app. It came as an answer to one of the core questions the Paper team faced. **How can you keep the main thread as clear as possible?** - -Nowadays, many apps have a user experience that relies heavily upon continuous gestures and physics based animations. At the very least, your UI is probably dependent on some form of scroll view. These types of user interfaces depend entirely on the main thread and are extremely sensitive to main thread stalls. **A clogged main thread means dropped frames and an unpleasant user experience.** - -Texture Nodes are a thread-safe abstraction layer over UIViews and CALayers: - -logo - -You can access most view and layer properties when using nodes, the difference is that nodes are rendered concurrently by default, and measured and laid out asynchronously when used correctly! - -Too see asynchronous performance gains in action, check out the `examples/ASDKgram` app which compares a UIKit-implemented social media feed with an Texture-implemented social media feed! - -On an iPhone 6+, the performance may not be radically different, but on a 4S, the difference is dramatic! Which leads us to Texture's next priority... - -#A Great App Experience for All Users - -Texture's performance gains allow you to easily design a great experience for every app user - across all devices, on all network connections. - -##A Great Developer Experience - -Texture also strives to make the developer experience great -- platform compatability: iOS & tvOS -- language compatability: Objective-C & Swift -- requires fewer lines of code to build advanced apps (see `examples/ASDKgram` for a direct comparison of a UIKit implemention of an app vs. an equivalent Texture implementation) -- cleaner architecture patterns -- robust code (some really brilliant minds have worked on this for 3+ years). - -#Advanced Developer Tools - -As Texture has grown, some of the brightest iOS engineers have contributed advanced technologies that will save you, as a developer using Texture, development time. - -###Advanced Technology -- ASRunLoopQueue -- ASRangeController with Intelligent Preloading - -###Network Code Savings -- automatic batch fetching (e.g. JSON payloads) diff --git a/submodules/AsyncDisplayKit/docs/_docs/placeholder-fade-duration.md b/submodules/AsyncDisplayKit/docs/_docs/placeholder-fade-duration.md deleted file mode 100755 index 0b5ca8b131..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/placeholder-fade-duration.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Placeholders -layout: docs -permalink: /docs/placeholder-fade-duration.html -prevPage: image-modification-block.html -nextPage: accessibility.html ---- - -## ASDisplayNodes may Implement Placeholders - -Any `ASDisplayNode` subclass may implement the `-placeholderImage` method to provide a placeholder that covers content until a node's contents are finished displaying. To use placeholders, set `.placeholderEnabled = YES` and optionally set a `.placeholderFadeDuration`; - -For image drawing, use the node's `.calculatedSize` property. - -
    -The `-placeholderImage` function may be called on a background thread, so it is important that this function is thread safe. Note that `-[UIImage imageNamed:]` is not thread safe when using image assets. Instead use `-[UIImage imageWithContentsOfFile:]`. -
    - - -An ideal resource for creating placeholder images, including rounded rect solid colored ones or simple square corner ones is the `UIImage+ASConvenience` category methods in Texture. - -See our ancient Placeholders sample app to see this concept, first invented by the Facebook Paper team, in action. - -## `.neverShowPlaceholders` - -Hear Scott Goodson explain placeholders, `.neverShowPlaceholders` and why UIKit doesn't have them. - -## ASNetworkImageNode also have Default Images - -In _addition_ to placeholders, `ASNetworkImageNode`s also have a `.defaultImage` property. While placeholders are meant to be transient, default images will persist if the image node's `.URL` property is `nil` or if the URL fails to load. - -We suggest using default images for avatars, while using placeholder images for photos. diff --git a/submodules/AsyncDisplayKit/docs/_docs/principles.md b/submodules/AsyncDisplayKit/docs/_docs/principles.md deleted file mode 100755 index aec7fb2dfd..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/principles.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Principles -layout: docs -permalink: /docs/principles.html ---- - -The following principles guide the design and development of the Texture framework. - -## 1. Reliable - -- **What:** Behavior should match the documentation. The framework shouldn't crash in production, even when used incorrectly. -- **Why:** If the framework is not reliable, then it cannot be used in production apps. More importantly, it will drain the morale of the engineers working on it. -- **How:** Meaningful, stable unit tests. We will devote a significant chunk of our resources to build unit tests. - -## 2. Familiar - -- **What:** Interfaces should match industry standards such as UIKit and CSS when possible. When we diverge from these standards, the interfaces should as be intuitive and direct as possible. -- **Why:** If the framework is not familiar, then companies will be wary about adopting it. Engineers trained in UIKit, especially junior ones, will be frustrated and unproductive. -- **How:** Compare API to other mature frameworks, reach out to users when developing new API to get feedback. Be generous with abstraction layers – as long as we don't sacrifice Reliable. - -## 3. Lean - -- **What:** Speed and memory conservation should be industry-leading, the API should be concise, and implementation code should be short and organized. -- **Why:** Performance is at the heart of Texture. It's what we do and we do it better than anyone else. In addition, a concise codebase and API are easier to maintain and learn. Plus it's just the right thing to do. -- **How:** Look for opportunities to improve performance. Think about the performance implications of each line of code. Dedicate resources to refactoring. Build tools to gather and expose performance metrics. - -## 4. Bold - -- **What:** Ambitious features, such as animated layout transitioning or our visibility-depth system, should be added from time to time. -- **Why:** Cutting-edge, never-before-seen tech gets people excited about the framework, and can raise the bar for the entire industry. They really move the needle on the user experience in subtle ways. Plus it's fun! -- **How:** Propose crazy ideas. See them through – ensure they get into the workflow and get resources allocated for them. - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/relative-layout-spec.md b/submodules/AsyncDisplayKit/docs/_docs/relative-layout-spec.md deleted file mode 100755 index a9e6a157b8..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/relative-layout-spec.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: ASRelativeLayoutSpec -layout: docs -permalink: /docs/relative-layout-spec.html ---- - -
    😑 This page is coming soon...
    \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/resources.md b/submodules/AsyncDisplayKit/docs/_docs/resources.md deleted file mode 100755 index 51a388a7d6..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/resources.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Resources -layout: docs -permalink: /docs/resources.html -prevPage: getting-started.html -nextPage: installation.html ---- - -### Slack - -Join 700+ Texture developers and the Texture core team on Slack for real-time debugging, the latest updates, and asynchronous banter. Signup here. - -### Examples -Browse through our many example projects. - -If you are new to Texture, we recommend that you start with the ASDKgram example app which compares a photo feed implemented with UIKit to an identical feed implemented with Texture. The app features: -
      -
    1. An infinitely scrolling home feed that demonstrates Texture's smoother scrolling performance.
    2. -
    3. A significantly sized code base to demonstrate how much less code it takes to design apps using Texture.
    4. -
    - -### Videos - - -### Tutorials / Articles - - - -### Layout Resources -Texture's powerful layout system is based on the CSS FlexBox model. These sites are useful for learning the basics of this system. - diff --git a/submodules/AsyncDisplayKit/docs/_docs/roadmap.md b/submodules/AsyncDisplayKit/docs/_docs/roadmap.md deleted file mode 100755 index 2ef0873623..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/roadmap.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Roadmap -layout: docs -permalink: /docs/roadmap.html ---- - -This document outlines some of the upcoming plans for Texture. Since Texture is a fast-moving project with a small core team, this roadmap will change over time. - -The Texture roadmap is driven by the framework's four key qualities. You can read read more about the principles here. - -## 2.1 Release - -#### Familiar - -- Increase investment in Swift over time. -- Adopt a more regular release cadence. -- Reversible 0-100% transitions for our Layout Transition API. - -#### Bold - -- Declarative collection node API. [Try it out]() and give us feedback! - -## 2.5+ Release - -#### Reliable - -- Audit typography features. - -#### Familiar - -- Better supplementary node support. - -#### Lean - -- True asynchronous layout. - -#### Bold - -- First class transitions with the Layout Transition API. -- Extreme debuggability. -- AsyncKit? - -## Ways to Get Involved - -- Connect on GitHub, Slack and Twitter. -- Vet our documentation. Submit or suggest ways to improve. -- Share your experience using Texture. Thanks Buffer! -- Contribute layout examples. -- Contribute code. Try to implement one of our "Needs Volunteer" issues. diff --git a/submodules/AsyncDisplayKit/docs/_docs/scroll-node.md b/submodules/AsyncDisplayKit/docs/_docs/scroll-node.md deleted file mode 100755 index 465ac00e62..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/scroll-node.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: ASScrollNode -layout: docs -permalink: /docs/scroll-node.html -prevPage: control-node.html -nextPage: editable-text-node.html ---- - -`ASScrollNode` is an `ASDisplayNode` whose underlying view is an `UIScrollView`. This class offers the ability to automatically adopt its `ASLayoutSpec`'s size as the scrollable `contentSize`. - -### automaticallyManagesContentSize - -When enabled, the size calculated by the `ASScrolNode`'s layout spec defines the `.contentSize` of the scroll view. This is in contrast to most nodes, where the `layoutSpec` size is applied to the bounds (and in turn, frame). In this mode, the bounds of the scroll view always fills the parent's size. - -`automaticallyManagesContentSize` is useful both for subclasses of `ASScrollNode` implementing `layoutSpecThatFits:` or may also be used as the base class with `.layoutSpecBlock` set. In both cases, it is common use `.automaticallyManagesSubnodes` so that the nodes in the layout spec are added to the scrollable area automatically. - -With this approach there is no need to capture the layout size, use an absolute layout spec as a wrapper, or set `contentSize` anywhere in the code and it will update as the layout changes! Instead, it is very common and useful to simply return an `ASStackLayoutSpec` and the scrollable area will allow you to see all of it. - -### scrollableDirections - -This option is useful when using `automaticallyManagesContentSize`, especially if you want horizontal content (because the default is vertical). - -This property controls how the `constrainedSize` is interpreted when sizing the content. Options include: - - - - - - - - - - - - - - -
    VerticalThe `constrainedSize` is interpreted as having unbounded `.height` (`CGFLOAT_MAX`), allowing stacks and other content in the layout spec to expand and result in scrollable content.
    HorizontalThe `constrainedSize` is interpreted as having unbounded `.width` (`CGFLOAT_MAX`).
    Vertical & HorizontalThe `constrainedSize` is interpreted as unbounded in both directions.
    - -### Example - -In case you're not familiar with scroll views, they are basically windows into content that would take up more space than can fit in that area. - -Say you have a giant image, but you only want to take up 200x200 pts on the screen. - -
    -SwiftObjective-C - -
    -
    -// NOTE: If you are using a horizontal stack, set scrollNode.scrollableDirections.
    -ASScrollNode *scrollNode = [[ASScrollNode alloc] init];
    -scrollNode.automaticallyManagesSubnodes = YES;
    -scrollNode.automaticallyManagesContentSize = YES;
    -
    -scrollNode.layoutSpecBlock = ^(ASDisplayNode *node, ASSizeRange constrainedSize){
    -  ASStackLayoutSpec *stack = [ASStackLayoutSpec verticalStackLayoutSpec];
    -  // Add children to the stack.
    -  return stack;
    -};
    -
    -
    - -
    -
    diff --git a/submodules/AsyncDisplayKit/docs/_docs/static-layout-spec.md b/submodules/AsyncDisplayKit/docs/_docs/static-layout-spec.md deleted file mode 100755 index 01318bf4ac..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/static-layout-spec.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: ASStaticLayoutSpec -layout: docs -permalink: /docs/static-layout-spec.html ---- - -
    😑 This page is coming soon...
    \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/subclassing.md b/submodules/AsyncDisplayKit/docs/_docs/subclassing.md deleted file mode 100755 index 8052e20937..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/subclassing.md +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Subclassing -layout: docs -permalink: /docs/subclassing.html -prevPage: containers-overview.html -nextPage: faq.html ---- -The most important distinction when creating a subclass is whether you writing an ASViewController or an ASDisplayNode. This sounds obvious, but because some of these differences are subtle, it is important to keep this top of mind. - -## ASDisplayNode -
    -While subclassing nodes is similar to writing a UIView subclass, there are a few guidelines to follow to ensure that both that you're utilizing the framework to its full potential and that your nodes behave as expected. - -### `-init` - -This method is called on a **background thread** when using nodeBlocks. However, because no other method can run until -init is finished, it should never be necessary to have a lock in this method. - -The most important thing to remember is that your init method must be capable of being called on any queue. Most notably, this means you should never initialize any UIKit objects, touch the view or layer of a node (e.g. `node.layer.X` or `node.view.X`) or add any gesture recognizers in your initializer. Instead, do these things in `-didLoad`. - -### `-didLoad` - -This method is conceptually similar to UIViewController's `-viewDidLoad` method; it’s called once and is the point where the backing view has been loaded. It is guaranteed to be called on the **main thread** and is the appropriate place to do any UIKit things (such as adding gesture recognizers, touching the view / layer, initializing UIKit objects). - -### `-layoutSpecThatFits:` - -This method defines the layout and does the heavy calculation on a **background thread**. This method is where you build out a layout spec object that will produce the size of the node, as well as the size and position of all subnodes. This is where you will put the majority of your layout code. - -The layout spec object that you create is malleable up until the point that it is return in this method. After this point, it will be immutable. It's important to remember not to cache layout specs for use later but instead to recreate them when necessary. - -Because it is run on a background thread, you should not set any `node.view` or `node.layer` properties here. Also, unless you know what you are doing, do not create any nodes in this method. Additionally, it is not necessary to begin this method with a call to super, unlike other method overrides. - -### `-layout` - -The call to super in this method is where the results of the layoutSpec are applied; Right after the call to super in this method, the layout spec will have been calculated and all subnodes will have been measured and positioned. - -`-layout` is conceptually similar to UIViewController's `-viewWillLayoutSubviews`. This is a good spot to change the hidden property, set view based properties if needed (not layoutable properties) or set background colors. You could put background color setting in -layoutSpecThatFits:, but there may be timing problems. If you happen to be using any UIViews, you can set their frames here. However, you can always create a node wrapper with `-initWithViewBlock:` and then size this on the background thread elsewhere. - -This method is called on the **main thread**. However, if you are using layout Specs, you shouldn't rely on this method too much, as it is much preferable to do layout off the main thread. Less than 1 in 10 subclasses will need this. - -One great use of `-layout` is for the specific case in which you want a subnode to be your exact size. E.g. when you want a collectionNode to take up the full screen. This case is not supported well by layout specs and it is often easiest to set the frame manually with a single line in this method: - -``` -subnode.frame = self.bounds; -``` - -If you desire the same effect in a ASViewController, you can do the same thing in -viewWillLayoutSubviews, unless your node is the node in initWithNode: and in that case it will do this automatically. - -## ASViewController -
    -An `ASViewController` is a regular `UIViewController` subclass that has special features to manage nodes. Since it is a UIViewController subclass, all methods are called on the **main thread** (and you should always create an ASViewController on the main thread). - -### `-init` - -This method is called once, at the very beginning of an ASViewController's lifecycle. As with UIViewController initialization, it is best practice to **never access** `self.view` or `self.node.view` in this method as it will force the view to be created early. Instead, do any view access in -viewDidLoad. - -ASViewController's designated initializer is `initWithNode:`. A typical initializer will look something like the code below. Note how the ASViewController's node is created _before_ calling super. An ASViewController manages a node similarly to how a UIViewController manages a view, but the initialization is slightly different. - - -
    -SwiftObjective-C - -
    -
    -- (instancetype)init
    -{
    -  _pagerNode = [[ASPagerNode alloc] init];
    -  self = [super initWithNode:_pagerNode];
    -  
    -  // setup any instance variables or properties here
    -  if (self) {
    -    _pagerNode.dataSource = self;
    -    _pagerNode.delegate = self;
    -  }
    -  
    -  return self;
    -}
    -
    - -
    -
    - -### `-loadView` - -We recommend that you do not use this method because it is has no particular advantages over `-viewDidLoad` and has some disadvantages. However, it is safe to use as long as you do not set the `self.view` property to a different value. The call to [super loadView] will set it to the `node.view` for you. - -### `-viewDidLoad` - -This method is called once in a ASViewController's lifecycle, immediately after `-loadView`. This is the earliest time at which you should access the node's view. It is a great spot to put any **setup code that should only be run once and requires access to the view/layer**, such as adding a gesture recognizer. - -Layout code should never be put in this method, because it will not be called again when geometry changes. Note this is equally true for UIViewController; it is bad practice to put layout code in this method even if you don't currently expect geometry changes. - -### `-viewWillLayoutSubviews` - -This method is called at the exact same time as a node's `-layout` method and it may be called multiple times in a ASViewController's lifecycle; it will be called whenever the bounds of the ASViewController's node are changed (including rotation, split screen, keyboard presentation) as well as when there are changes to the hierarchy (children being added, removed, or changed in size). - -For consistency, it is best practice to put all layout code in this method. Because it is not called very frequently, even code that does not directly depend on the size belongs here. - -### `-viewWillAppear:` / `-viewDidDisappear:` - -These methods are called just before the ASViewController's node appears on screen (the earliest time that it is visible) and just after it is removed from the view hierarchy (the earliest time that it is no longer visible). These methods provide a good opportunity to start or stop animations related to the presentation or dismissal of your controller. This is also a good place to make a log of a user action. - -Although these methods may be called multiple times and geometry information is available, they are not called for all geometry changes and so should not be used for core layout code (beyond setup required for specific animations). diff --git a/submodules/AsyncDisplayKit/docs/_docs/subtree-rasterization.md b/submodules/AsyncDisplayKit/docs/_docs/subtree-rasterization.md deleted file mode 100755 index 20aa0761bd..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/subtree-rasterization.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Subtree Rasterization -layout: docs -permalink: /docs/subtree-rasterization.html -prevPage: layer-backing.html -nextPage: synchronous-concurrency.html ---- - -Flattening an entire view hierarchy into a single layer improves performance, but with UIKit, comes with a hit to maintainability and hierarchy-based reasoning. - -With all Texture nodes, enabling precompositing is as simple as: - -
    -SwiftObjective-C -
    -
    -[rootNode enableSubtreeRasterization];
    -
    - -
    -
    -
    - -This line will cause the entire node hierarchy from that point on to be rendered into one layer. diff --git a/submodules/AsyncDisplayKit/docs/_docs/synchronous-concurrency.md b/submodules/AsyncDisplayKit/docs/_docs/synchronous-concurrency.md deleted file mode 100755 index d4430b7516..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/synchronous-concurrency.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Synchronous Concurrency -layout: docs -permalink: /docs/synchronous-concurrency.html -prevPage: subtree-rasterization.html -nextPage: corner-rounding.html ---- - -Both `ASViewController` and `ASCellNode` have a property called `neverShowPlaceholders`. - -By setting this property to YES, the main thread will be blocked until display has completed for the cell or view controller's view. - -Using this option does not eliminate all of the performance advantages of Texture. Normally, a given node has been preloading and is almost done when it reaches the screen, so the blocking time is very short. Even if the rangeTuningParameters are set to 0 this option outperforms UIKit. While the main thread is waiting, all subnode display executes concurrently, thus synchronous concurrency. - -See the NSSpain 2015 talk video for a visual walkthrough of this behavior. - -
    -SwiftObjective-C -
    -
    -node.neverShowPlaceholders = YES;
    -
    - -
    -
    -
    - -Usually, if a cell hasn't finished its display pass before it has reached the screen it will show placeholders until it has drawing its content. Setting this option to YES makes your scrolling node or ASViewController act more like UIKit, and in fact makes Texture scrolling visually indistinguishable from UIKit's, except that it's faster. - - diff --git a/submodules/AsyncDisplayKit/docs/_docs/team.md b/submodules/AsyncDisplayKit/docs/_docs/team.md deleted file mode 100755 index e3a9643912..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/team.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Pinterest Team -layout: docs -permalink: /docs/team.html ---- - - - - - - - - - - - - - - - - - - - - - - -

    Scott Goodson (@appleguy) is an original author of Texture and, most recently, a driving force behind making Pinterest's design vision a reality with the recent rewrite of the iOS app.

    -

    Previously, Scott managed the Facebook Paper and Instagram iOS engineering teams, and helped lead the native code rewrite of the core Facebook iOS app. He also spent four years at Apple where he was one of the first ten engineers to work on iPhone OS 1.0, and developed apps like Stocks and Calculator.

    -

    Scott is deeply passionate about building Texture into a framework that allows effortless development of polished and performant apps that serve all users, regardless of device age, internet connection, or language.

    Michael Schneider (@maicki) is especially passionate about API design and recently led the re-architecture of the layout API for the 2.0 release. As our resident layout expert, Michael volunteers much of his own time to help developers on Texture's public slack channel. Before he joined Pinterest, Michael worked on Pocket for iOS, Mac and Chrome and Read Later an Instapaper and Pocket Mac app.

    Huy Nguyen (@nguyenhuy ) joined the Pinterest team after authoring Texture's automatic layout feature, which has become the foundation for the Texture's 2.0 release. To date, the Layout API has been the largest contribution to the framework by a community member!

    Garrett Moon (@garrettmoon ) is the fearless leader of Pinterest's framework team. He also authored PINRemoteImage - a threadsafe, performant, feature rich image fetcher, and PINCache, a non-deadlocking fork of TMCache. Both are used as the backing store for ASNetworkImageNode.

    Adlai ("Ad-lee") Holler (@adlai-holler) joined the Pinterest team after making major contributions to the framework while writing Tripstr in Swift with Texture.

    -
    - -# Join us! - -We are looking for senior developers familiar with Texture to join our team! - -We have an exciting roadmap that we believe will continue to push the boundaries of what is possible on the iOS platform, while making the framework easier to use than ever before. - -As part of the team, you would work on Texture, [PINRemoteImage](https://github.com/pinterest/PINRemoteImage), and [PINCache](https://github.com/pinterest/PINCache) (the backing store for ASNetworkImageNode), while using all three in Pinterest's [app](https://itunes.apple.com/us/app/pinterest/id429047995). - -One interesting thing to note is that Pinterest does not have an internal fork of Texture. Everything is developed on master, with release branches cut from master only a few weeks before our public application launches. This allows us to move exceptionally quickly in developing and launching improvements to millions of users. - -Sound interesting? -Send us an email at textureframework@gmail.com. diff --git a/submodules/AsyncDisplayKit/docs/_docs/text-cell-node.md b/submodules/AsyncDisplayKit/docs/_docs/text-cell-node.md deleted file mode 100755 index e9d0438b53..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/text-cell-node.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: ASTextCellNode -layout: docs -permalink: /docs/text-cell-node.html -prevPage: cell-node.html -nextPage: control-node.html ---- - -ASTextCellNode is a simple ASCellNode subclass you can use when all you need is a cell with styled text. - -
    -SwiftObjective-C -
    -
    -ASTextCellNode *textCell = [[ASTextCellNode alloc]
    -            initWithAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"SomeFont" size:16.0]} 												  insets:UIEdgeInsetsMake(8, 16, 8, 16)];
    -  
    - -
    -
    - -The text can be configured on initialization or after the fact. - -
    -SwiftObjective-C -
    -
    -ASTextCellNode *textCell = [[ASTextCellNode alloc] init];
    -
    -textCellNode.text         = @"Some dang ol' text";
    -textCellNode.attributes   = @{NSFontAttributeName: [UIFont fontWithName:@"SomeFont" size:16.0]};
    -textCellNode.insets       = UIEdgeInsetsMake(8, 16, 8, 16);
    -  
    - -
    -
    \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_docs/text-node.md b/submodules/AsyncDisplayKit/docs/_docs/text-node.md deleted file mode 100755 index 176a721999..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/text-node.md +++ /dev/null @@ -1,228 +0,0 @@ ---- -title: ASTextNode -layout: docs -permalink: /docs/text-node.html -prevPage: button-node.html -nextPage: image-node.html ---- - -`ASTextNode` is Texture's main text node and can be used any time you would normally use a `UILabel`. It includes full rich text support and is a subclass of `ASControlNode` meaning it can be used any time you would normally create a UIButton with just its titleLabel set. - -### Basic Usage -`ASTextNode`'s interface should be familiar to anyone who's used a `UILabel`. The first difference you may notice, is that text node's only use attributed strings instead of having the option of using a plain string. - -
    -SwiftObjective-C - -
    -
    -NSDictionary *attrs = @{ NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:12.0f] };
    -NSAttributedString *string = [[NSAttributedString alloc] initWithString:@"Hey, here's some text." attributes:attrs];
    -
    -_node = [[ASTextNode alloc] init];
    -_node.attributedText = string;
    -
    - - -
    -
    - -As you can see, to create a basic text node, all you need to do is use a standard alloc-init and then set up the attributed string for the text you wish to display. - -### Truncation - -In any case where you need your text node to fit into a space that is smaller than what would be necessary to display all the text it contains, as much as possible will be shown, and whatever is cut off will be replaced with a truncation string. - - -
    -SwiftObjective-C - -
    -
    -_textNode = [[ASTextNode alloc] init];
    -_textNode.attributedText = string;
    -_textNode.truncationAttributedText = [[NSAttributedString alloc]
    -												initWithString:@"¶¶¶"];
    -
    - - -
    -
    - -This results in something like: - - - -By default, the truncation string will be "…" so you don't need to set it if that's all you need. - - -### Link Attributes - -In order to designate chunks of your text as a link, you first need to set the `linkAttributes` array to an array of strings which will be used as keys of links in your attributed string. Then, when setting up the attributes of your string, you can use these keys to point to appropriate `NSURL`s. - -
    -SwiftObjective-C - -
    -
    -_textNode.linkAttributeNames = @[ kLinkAttributeName ];
    -
    -NSString *blurb = @"kittens courtesy placekitten.com \U0001F638";
    -NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:blurb];
    -[string addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue-Light" size:16.0f] range:NSMakeRange(0, blurb.length)];
    -[string addAttributes:@{
    -                      kLinkAttributeName: [NSURL URLWithString:@"http://placekitten.com/"],
    -                      NSForegroundColorAttributeName: [UIColor grayColor],
    -                      NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle | NSUnderlinePatternDot),
    -                      }
    -              range:[blurb rangeOfString:@"placekitten.com"]];
    -_textNode.attributedText = string;
    -_textNode.userInteractionEnabled = YES;
    -
    - - -
    -
    - -Which results in a light gray link with a dash-dot style underline! - - - -As you can see, it's relatively convenient to apply various styles to each link given its range in the attributed string. - -### ASTextNodeDelegate - -Conforming to `ASTextNodeDelegate` allows your class to react to various events associated with a text node. For example, if you want to react to one of your links being tapped: - -
    -SwiftObjective-C - -
    -
    -- (void)textNode:(ASTextNode *)richTextNode tappedLinkAttribute:(NSString *)attribute value:(NSURL *)URL atPoint:(CGPoint)point textRange:(NSRange)textRange
    -{
    -  // the link was tapped, open it
    -  [[UIApplication sharedApplication] openURL:URL];
    -}
    -
    - - -
    -
    - -In a similar way, you can react to long presses and highlighting with the following methods: - -`– textNode:longPressedLinkAttribute:value:atPoint:textRange:` - -`– textNode:shouldHighlightLinkAttribute:value:atPoint:` - -`– textNode:shouldLongPressLinkAttribute:value:atPoint:` - - -### Incorrect maximum number of lines with line spacing - -Using a `NSParagraphStyle` with a non-default `lineSpacing` can cause problems if multiline text with a maximum number of lines is wanted. For example see the following code: - -
    -SwiftObjective-C - -
    -
    -// ...
    -NSString *someLongString = @"...";
    -
    -NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    -paragraphStyle.lineSpacing = 10.0;
    -
    -UIFont *font = [UIFont fontWithName:@"SomeFontName" size:15];
    -
    -NSDictionary *attributes = @{
    -	NSFontAttributeName : font,
    -	NSParagraphStyleAttributeName: paragraphStyle
    -};
    -
    -ASTextNode *textNode = [[ASTextNode alloc] init];
    -textNode.maximumNumberOfLines = 4;
    -textNode.attributedText = [[NSAttributedString	alloc] initWithString:someLongString
    -																												   attributes:attributes];
    -// ...
    -
    - - -
    -
    - -`ASTextNode` uses Text Kit internally to calculate the amount to shrink needed to result in the specified maximum number of lines. Unfortunately, in certain cases this will result in the text shrinking too much in the above example; Instead of 4 lines of text, 3 lines of text and a weird gap at the bottom will show up. To get around this issue for now, you have to set the `truncationMode` explicitly to `NSLineBreakByTruncatingTail` on the text node: - -
    -SwiftObjective-C - -
    -
    -// ...
    -ASTextNode *textNode = [[ASTextNode alloc] init];
    -textNode.maximumNumberOfLines = 4;
    -textNode.truncationMode = NSLineBreakByTruncatingTail;
    -textNode.attributedText = [[NSAttributedString	alloc] initWithString:someLongString
    -																												   attributes:attributes];
    -// ...
    -
    - - -
    -
    -``` diff --git a/submodules/AsyncDisplayKit/docs/_docs/tip-1-nodeBlocks.md b/submodules/AsyncDisplayKit/docs/_docs/tip-1-nodeBlocks.md deleted file mode 100755 index bcefc9c512..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/tip-1-nodeBlocks.md +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: Prefer `nodeBlocks` for Performance -layout: docs -permalink: /docs/tip-1-nodeBlocks.html ---- - -Texture’s `ASCollectionNode` replaces `UICollectionView`’s required method - -
    - - Swift - Objective-C - - -
    -
    -collectionView:cellForItemAtIndexPath:
    -  
    - - -
    -
    - -
    -with your choice of **one** of the two following methods - -
    - - Swift - Objective-C - - -
    -
    -// called on main thread, ASCellNode initialized on main and then returned 
    -collectionNode:nodeForItemAtIndexPath: 
    -
    -OR
    -
    -// called on main thread, ASCellNodeBlock returned, then
    -// ASCellNode initialized in background when block is called by system
    -collectionNode:nodeBlockForItemAtIndexPath: 
    -  
    - - -
    -
    - -
    -`ASTableNode` has the same options: - -
    - - Swift - Objective-C - - -
    -
    -`tableNode:nodeForRow:`
    -`tableNode:nodeBlockforRow:`    // preferred
    -  
    - - -
    -
    - -`ASPagerNode` does as well: - -
    - - Swift - Objective-C - - -
    -
    -`pagerNode:nodeAtIndex:`
    -`pagerNode:nodeBlockAtIndex:`   // preferred
    -  
    - - -
    -
    - - -We recommend that you use nodeBlocks. Using the nodeBlock method allows table and collections to request blocks for each cell node, and execute them **concurrently** across multiple threads, which allows us to **parallelize the allocation costs** (in addition to layout measurement). - -This leaves our main thread more free to handle touch events and other time sensitive work, keeping our user's taps happy and responsive. - -### Access your data source outside of the nodeBlock - -Because nodeBlocks are executed on a background thread, it is very important they be thread-safe. - -The most important aspect to consider is accessing properties on self that may change, such as an array of data models. This can be handled safely by ensuring that any immutable state is collected above the node block. - -**Using the indexPath parameter to access a mutable collection inside the node block is not safe.** This is because by the time the block runs, the dataSource may have changed. - -Here's an example of a simple nodeBlock: - -
    - - Swift - Objective-C - - -
    -
    -- (ASCellNodeBlock)collectionNode:(ASCollectionNode *)collectionNode nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath
    -{
    -    // data model is accessed outside of the node block
    -    Board *board = [self.boards objectAtIndex:indexPath.item];
    -    return ^{
    -        BoardScrubberCellNode *node = [[BoardScrubberCellNode alloc] initWithBoard:board];
    -        return node;
    -    };
    -}
    -  
    - -
    -
    - -
    -Note that it is okay to use the indexPath if it is used strictly for its integer values and not to index a value from a mutable data source. - -## Do not return nil from a nodeBlock - -Just as when UIKit requests a cell, returning `nil` will crash the app, so it is important to ensure a valid ASCellNode is returned for either the node or nodeBlock method. Your code should ensure that at least a blank ASCellNode is returned, but ideally the number of items reported to the collection would prevent the method from being called when there is no data to display. diff --git a/submodules/AsyncDisplayKit/docs/_docs/uicollectionview-challenges.md b/submodules/AsyncDisplayKit/docs/_docs/uicollectionview-challenges.md deleted file mode 100755 index 4916bf3e94..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/uicollectionview-challenges.md +++ /dev/null @@ -1,160 +0,0 @@ ---- -title: UICollectionView Challenges -layout: docs -permalink: /docs/uicollectionview-challenges.html ---- - -`UICollectionView` is one of the most commonly used classes and many challenges with iOS development are related to its architecture. - -## How `UICollectionView` Works - -There are two important methods that `UICollectionView` requires. - -

    Cell Measurement

    - -For each item in the data source, the collection must know its size to understand which items should be visible at a given momement. This is provided by: - -
    -SwiftObjective-C -
    -
    -- (CGSize)collectionView:(UICollectionView *)collectionView 
    -                  layout:(UICollectionViewLayout *)collectionViewLayout 
    -  sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
    -
    - -
    -
    - -Although not formally named by Apple, we refer to this process as "measuring". Implementing this method is always difficult, because the view that implements the cell layout is never available at the time of this method call. - -This means that logic must be duplicated between the implementation of this method and the `-layoutSubviews` implementation of the cell subclass. This presents a tremendous maintainence burden, as the implementations must always match their behavior for any combination of content displayed. - -Additionally, once measurement is complete, there's no easy way to cache that information to use it during the layout process. As a result, expensive text measurements must be repeated. - -

    Cell Allocation

    - -Once an item reaches the screen, a view representing it is requested: - -
    -SwiftObjective-C -
    -
    -- (UICollectionViewCell *)cellForItemAtIndexPath:(NSIndexPath *)indexPath;
    -
    - -
    -
    - -In order to provide a cell, all subviews must be configured with the data that they are intended to display. Immediately afterwards, the layout of the cell is calculated, and finally the display (rendering) of the individual elements (text, images) contained within. - -
    -For those who are curious, this extremely detailed diagram shows the full process of UICollectionView communicating with its data source and delegate to display itself. -
    - -

    Limitations in `UICollectionView`'s Architecture

    - -There are several issues with the architecture outlined above: - -Lots of main thread work, which may degrade the user's experience, including - -
      -
    • cell measurement
    • -
    • cell creation + setup / reuse
    • -
    • layout
    • -
    • display (rendering)
    - -Duplicated layout logic - -You must have duplicate copies of your cell sizing logic for the cell measurement and cell layout stages. For example, if you want to add a price tag to your cell, both -sizeForItemAtIndexPath and the cell's own -layoutSubviews must be aware of how to size the tag. - -No automatic content loading - -There is no easy, universal way to handle loading content such as: -
      -
    • data pages - such as JSON fetching
    • -
    • other info - such as images or secondary JSON requests
    • -
    - -## How `ASCollectionNode` works - -

    Unified Cell Measurement & Allocation

    - -Texture takes both of the important collection methods explained above: - -
    -SwiftObjective-C -
    -
    -- (UICollectionViewCell *)cellForItemAtIndexPath:(NSIndexPath *)indexPath;
    -
    -- (CGSize)collectionView:(UICollectionView *)collectionView 
    -                  layout:(UICollectionViewLayout *)collectionViewLayout 
    -  sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
    -
    - -
    -
    - -and replaces them with a single method*: - -
    -SwiftObjective-C -
    -
    -- (ASCellNode *)collectionNode:(ASCollectionNode *)collectionNode nodeForItemAtIndexPath:(NSIndexPath *)indexPath;
    -
    - -
    -
    - -or with the asynchronous versions - -
    -SwiftObjective-C -
    -
    -- (ASCellNodeBlock)collectionNode:(ASCollectionNode *)collectionNode nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath;
    -
    - -
    -
    - -*Note that there is an optional method to provide a constrained size for the cell, but it is not needed by most apps. - -ASCellNode, is Texture's universal cell class. They are light-weight enough to be created an an earlier time in the program (concurrently in the background) and they understand how to calculate their own size. `ASCellNode` automatically caches its measurement so that it can be quickly applied during the layout pass. - -
    -As a comparison to the diagram above, this detailed diagram shows the full process of an ASCollectionView communicating with its data source and delegate to display itself.. Note that ASCollectionView is ASCollectionNode's underlying UICollectionView subclass. -
    - -

    Benefits of Texture's Architecture

    - -Elimination of all of the types of main thread work described above (cell allocation, measurement, layout, display)! In addition, all of this work is preformed concurrently on multiple threads. - -Because `ASCollectionNode` is aware of the position of all of its nodes, it can automatically determine when content loading is needed. The Batch Fetching API handles loading of data pages (like JSON) and Intelligent Preloading automatically manages the loading of images and text. Additionally, convenient callbacks allow implementing accurate visibility logging and secondary data model requests. - -Lastly, almost all of the concepts we've discussed here apply to `UITableView` / `ASTableNode` and `UIPageViewController` / `ASPagerNode`. - -## iOS 10 Cell Pre-fetching -Inspired by Texture, iOS 10 introduced a cell pre-fetching. This API increases the number of cells that the collection tracks at any given time, which helps, but isn't anywhere as performance centric as being aware of all cells in the data source. - -Additionally, iOS9 still constitutes a substantial precentage of most app's userbase and will not reduce in number anywhere close to as quickly as the sunset trajectory of iOS 7 and iOS 8 devices. Whereas iOS 9 is the last supported version for about a half-dozen devices, there were zero devices that were deprecated on iOS 8 and only one deivce deprecated on iOS 7. - -Unfortunately, these iOS 9 devices are the ones in which performance is most key! diff --git a/submodules/AsyncDisplayKit/docs/_docs/uicollectionviewinterop.md b/submodules/AsyncDisplayKit/docs/_docs/uicollectionviewinterop.md deleted file mode 100755 index 26fc1942e7..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/uicollectionviewinterop.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: UICollectionViewCell Interoperability -layout: docs -permalink: /docs/uicollectionviewinterop.html -prevPage: placeholder-fade-duration.html -nextPage: accessibility.html ---- - -Texture's `ASCollectionNode` offers compatibility with synchronous, standard `UICollectionViewCell` objects alongside native `ASCellNodes`. - -Note that these UIKit cells will **not** have the performance benefits of `ASCellNodes` (like preloading, async layout, and async drawing), even when mixed within the same `ASCollectionNode`. - -However, this interoperability allows developers the flexibility to test out the framework without needing to convert all of their cells at once. - -## Implementing Interoperability - -In order to use this feature, you must: - -
      -
    1. Conform to ASCollectionDataSourceInterop and, optionally, ASCollectionDelegateInterop.
    2. -
    3. Call registerCellClass: on the collectionNode.view (in viewDidLoad, or register an onDidLoad: block).
    4. -
    5. Return nil from the nodeBlockForItem...: or nodeForItem...: method. Note: it is an error to return nil from within a nodeBlock, if you have returned a nodeBlock object.
    6. -
    7. Lastly, you must implement a method to provide the size for the cell. There are two ways this is done:
    8. -
        -
      1. UICollectionViewFlowLayout (incl. ASPagerNode). Implement - collectionNode:constrainedSizeForItemAtIndexPath:.
      2. -
      3. Custom collection layouts. Set .view.layoutInspector and have it implement - collectionView:constrainedSizeForNodeAtIndexPath:.
      4. -
      -
    - -By default, the interop data source will only be consulted in cases where no `ASCellNode` is provided to Texture. However, if .dequeuesCellsForNodeBackedItems is enabled, then the interop data source will always be consulted to dequeue cells, and will be expected to return _ASCollectionViewCells in cases where a node was provided. - -## CustomCollectionView Example App - -The [CustomCollectionView](https://github.com/texturegroup/texture/tree/master/examples/CustomCollectionView) example project demonstrates how to use raw `UIKit` cells alongside native `ASCellNodes`. - -Open the app and verify that `kShowUICollectionViewCells` is enabled in `Sample/ViewController.m`. - -For this example, the data source method `collectionNode:nodeBlockForItemAtIndexPath:` is setup to return nil for every third cell. When nil is returned, `ASCollectionNode` will automatically query the `cellForItemAtIndexPath:` data source method. - -
    - - Swift - Objective-C - - -
    -
    -- (ASCellNodeBlock)collectionNode:(ASCollectionNode *)collectionNode 
    -      nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath
    -{
    -  if (kShowUICollectionViewCells && indexPath.item % 3 == 1) {
    -    // When enabled, return nil for every third cell and then 
    -    // cellForItemAtIndexPath: will be called.
    -    return nil;
    -  }
    -  
    -  UIImage *image = _sections[indexPath.section][indexPath.item];
    -  return ^{
    -    return [[ImageCellNode alloc] initWithImage:image];
    -  };
    -}
    -
    -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView 
    -                  cellForItemAtIndexPath:(NSIndexPath *)indexPath
    -{
    -  return [_collectionNode.view dequeueReusableCellWithReuseIdentifier:kReuseIdentifier 
    -                                                         forIndexPath:indexPath];
    -}
    -  
    - - -
    -
    - -Run the app to see the orange `UICollectionViewCells` interspersed every 3rd cell among the `ASCellNodes` containing images. - diff --git a/submodules/AsyncDisplayKit/docs/_docs/video-node.md b/submodules/AsyncDisplayKit/docs/_docs/video-node.md deleted file mode 100755 index 6a81074a85..0000000000 --- a/submodules/AsyncDisplayKit/docs/_docs/video-node.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: ASVideoNode -layout: docs -permalink: /docs/video-node.html -prevPage: network-image-node.html -nextPage: map-node.html ---- - -`ASVideoNode` provides a convenient and performant way to display videos in your app. - -
    Note: If you use `ASVideoNode` in your application, you must link `AVFoundation` since it uses `AVPlayerLayer` and other `AVFoundation` classes under the hood.
    - -### Basic Usage - -The easiest way to use `ASVideoNode` is to assign it an `AVAsset`. - -
    -SwiftObjective-C - -
    -
    -ASVideoNode *videoNode = [[ASVideoNode alloc] init];
    -
    -AVAsset *asset = [AVAsset assetWithURL:[NSURL URLWithString:@"http://www.w3schools.com/html/mov_bbb.mp4"]];
    -videoNode.asset = asset;
    -
    - - -
    -
    - -### Autoplay, Autorepeat, and Muting - -You can configure the way your video node reacts to various events with a few simple `BOOL`s. - -If you'd like your video to automaticaly play when it enters the visible range, set the `shouldAutoplay` property to `YES`. Setting `shouldAutoRepeat` to `YES` will cause the video to loop indefinitely, and, of course, setting `muted` to `YES` will turn the video's sound off. - -To set up a node that automatically plays once silently, you would just do the following. - -
    -SwiftObjective-C - -
    -
    -videoNode.shouldAutoplay = YES;
    -videoNode.shouldAutorepeat = NO;
    -videoNode.muted = YES;
    -
    - -
    -
    - -### Placeholder Image - -Since video nodes inherit from `ASNetworkImageNode`, you can use the `URL` property to assign a placeholder image. If you decide not to, the first frame of your video will automatically decoded and used as the placeholder instead. - - - - -### ASVideoNode Delegate - -There are a ton of delegate methods available to you that allow you to react to what's happening with your video. For example, if you want to react to the player's state changing, you can use: - -
    -SwiftObjective-C - -
    -
    -- (void)videoNode:(ASVideoNode *)videoNode willChangePlayerState:(ASVideoNodePlayerState)state toState:(ASVideoNodePlayerState)toState;
    -
    - -
    -
    - -The easiest way to see them all is to take a look at the `ASVideoNode` header file. - diff --git a/submodules/AsyncDisplayKit/docs/_includes/analytics.html b/submodules/AsyncDisplayKit/docs/_includes/analytics.html deleted file mode 100755 index 71dbfbce70..0000000000 --- a/submodules/AsyncDisplayKit/docs/_includes/analytics.html +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/submodules/AsyncDisplayKit/docs/_includes/footer.html b/submodules/AsyncDisplayKit/docs/_includes/footer.html deleted file mode 100755 index f24db5c9ab..0000000000 --- a/submodules/AsyncDisplayKit/docs/_includes/footer.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - diff --git a/submodules/AsyncDisplayKit/docs/_includes/header.html b/submodules/AsyncDisplayKit/docs/_includes/header.html deleted file mode 100755 index e22b49e1cd..0000000000 --- a/submodules/AsyncDisplayKit/docs/_includes/header.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - Texture | {{ page.title }} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {% if jekyll.environment == 'production' %} - {% include analytics.html %} - {% endif %} - - -
    -
    -

    AsyncDisplayKit is now Texture! LEARN MORE

    -
    -
    -
    -
    -

    - - Texture - -

    - -
    -
    diff --git a/submodules/AsyncDisplayKit/docs/_includes/hero.html b/submodules/AsyncDisplayKit/docs/_includes/hero.html deleted file mode 100755 index e94f6b5f1b..0000000000 --- a/submodules/AsyncDisplayKit/docs/_includes/hero.html +++ /dev/null @@ -1,9 +0,0 @@ -
    -
    -
    -

    Texture

    - -
    -
    diff --git a/submodules/AsyncDisplayKit/docs/_includes/nav_development.html b/submodules/AsyncDisplayKit/docs/_includes/nav_development.html deleted file mode 100644 index 248eb4388a..0000000000 --- a/submodules/AsyncDisplayKit/docs/_includes/nav_development.html +++ /dev/null @@ -1,22 +0,0 @@ - diff --git a/submodules/AsyncDisplayKit/docs/_includes/nav_docs.html b/submodules/AsyncDisplayKit/docs/_includes/nav_docs.html deleted file mode 100755 index ac4b089557..0000000000 --- a/submodules/AsyncDisplayKit/docs/_includes/nav_docs.html +++ /dev/null @@ -1,22 +0,0 @@ - diff --git a/submodules/AsyncDisplayKit/docs/_layouts/apidiff.html b/submodules/AsyncDisplayKit/docs/_layouts/apidiff.html deleted file mode 100755 index 8b404ac0dc..0000000000 --- a/submodules/AsyncDisplayKit/docs/_layouts/apidiff.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -sectionid: appledocs ---- - -{% include header.html %} - -
    -
    - -
    - {{ content }} -
    -
    -
    \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/_layouts/appledocs.html b/submodules/AsyncDisplayKit/docs/_layouts/appledocs.html deleted file mode 100755 index 25b9391d93..0000000000 --- a/submodules/AsyncDisplayKit/docs/_layouts/appledocs.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -sectionid: appledocs ---- - -{% include header.html %} - -
    -
    - -
    - {{ content }} -
    -
    -
    -{% include footer.html %} diff --git a/submodules/AsyncDisplayKit/docs/_layouts/default.html b/submodules/AsyncDisplayKit/docs/_layouts/default.html deleted file mode 100755 index c9b8ad18ec..0000000000 --- a/submodules/AsyncDisplayKit/docs/_layouts/default.html +++ /dev/null @@ -1,16 +0,0 @@ -{% include header.html %} - -{% if page.hero %} - {% include hero.html %} -{% endif %} - -
    -
    -
    - -{{ content }} - -
    -
    -
    -{% include footer.html %} diff --git a/submodules/AsyncDisplayKit/docs/_layouts/docs.html b/submodules/AsyncDisplayKit/docs/_layouts/docs.html deleted file mode 100755 index 42e7a8d4f6..0000000000 --- a/submodules/AsyncDisplayKit/docs/_layouts/docs.html +++ /dev/null @@ -1,40 +0,0 @@ ---- -sectionid: docs ---- - -{% include header.html %} - -
    - - - -
    -

    - {{ page.title }} -

    -

    {{ page.description }}

    - - {{ content }} - -

    Edit on GitHub

    - - -
    - {% if page.prevPage %} - ← Prev - {% endif %} - {% if page.nextPage %} - Next → - {% endif %} -
    - - -
    - -
    -
    - -{% include footer.html %} diff --git a/submodules/AsyncDisplayKit/docs/_layouts/redirect.html b/submodules/AsyncDisplayKit/docs/_layouts/redirect.html deleted file mode 100755 index c24f817484..0000000000 --- a/submodules/AsyncDisplayKit/docs/_layouts/redirect.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/submodules/AsyncDisplayKit/docs/_layouts/slack.html b/submodules/AsyncDisplayKit/docs/_layouts/slack.html deleted file mode 100755 index 95d73c3484..0000000000 --- a/submodules/AsyncDisplayKit/docs/_layouts/slack.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -sectionid: slack ---- - -{% include header.html %} - -
    -
    - -
    - {{ content }} -
    -
    -
    diff --git a/submodules/AsyncDisplayKit/docs/_sass/_code.scss b/submodules/AsyncDisplayKit/docs/_sass/_code.scss deleted file mode 100644 index dd4df0e23e..0000000000 --- a/submodules/AsyncDisplayKit/docs/_sass/_code.scss +++ /dev/null @@ -1,221 +0,0 @@ -code { - letter-spacing: 0.02em; - padding: 2px 4px; - /*font-weight: 700; - color: #008ED4; - font-size: 14px; - vertical-align: baseline; - font-family: 'Droid Sans Mono',sans-serif;*/ -} - -p code, span code, li code { - background-color: rgba(135, 215, 255, 0.2); -} - -.paddingBetweenCols { - th { - text-align: left; - padding: 15px 15px 15px 15px; - } - td { - padding: 15px 15px 15px 15px; - /* border: 1 px solid black;*/ - } -} - -.highlight pre, .redhighlight pre { - font-size: 13px; - line-height: 20px; - padding: 0 10px 20px 10px; -} - -.highlighttable { - margin-left: 10px; - margin-bottom: 20px; - margin-right: 10px; - border-collapse: separate !important; - .highlight pre, .redhighlight pre { - padding: 0; - } - code { - padding-right: 10px; - margin: 0; - padding-left: 2px; - font-size: 12px; - display: block; - line-height: 20px; - white-space: pre; - color: hsl(210, 100%, 8%); - } -} - -.highlight pre code, .redhighlight pre code, .highlighttable { - overflow-x: scroll; - display: block; - padding: 0; - font-size: 13px; - border: 1px solid rgb(220, 220, 220); - padding: 5px 10px; - box-sizing: border-box; - border-radius: 3; -} - -.highlight pre code, .highlighttable { - background-color: rgba(90, 140, 140, 0.1); -} - -.redhighlight pre code { - background-color: rgba(180, 80, 80, 0.1); -} - -.showcasetable code { - padding: 10px 10px 30px 30px; - margin: 10; -} - -.highlight pre code, .redhighlight pre code { - width: 100%; - white-space: pre; -} - -.lineno { - color: rgb(214, 139, 0); - &::after { - content: ';'; - font-size: 0; - } -} - -.highlight + .highlight + .highlight, .highlighttable + .highlight + .highlight, .redhighlight + .redhighlight + .redhighlight .highlighttable + .redhighlight + .redhighlight { - margin-top: -20px; -} - -/** - * Syntax highlighting styles - */ -/* not official Xcode colors, but looks better on the web */ - -.highlight { - background: #fff; - .c { - color: #008d14; - font-style: italic; - } - .err { - color: #a61717; - background-color: #e3d2d2; - } - .k { - color: #103ffb; - } - .cm { - color: #008d14; - font-style: italic; - } - .cp { - color: #b72748; - } - .c1 { - color: #008d14; - font-style: italic; - } - .cs { - color: #008d14; - font-weight: bold; - font-style: italic; - } - .gd { - color: #000; - background-color: #fdd; - .x { - color: #000; - background-color: #faa; - } - } - .ge { - font-style: italic; - } - .gr { - color: #a00; - } - .gh { - color: #999; - } - .gi { - color: #000; - background-color: #dfd; - .x { - color: #000; - background-color: #afa; - } - } - .go { - color: #888; - } - .gp { - color: #555; - } - .gs { - font-weight: bold; - } - .gu { - color: #aaa; - } - .gt { - color: #a00; - } - .kc, .kd { - color: orange; - } - .kp, .kr { - color: #008d14; - } - .kt { - color: #103ffb; - } - .m { - color: orange; - } - .s { - color: #b72748; - } - .na { - color: orange; - } - .nb { - color: #103ffb; - } - .nc { - color: #3a95ba; - } - .no, .ni, .ne, .nn, .nt { - color: orange; - } - .w { - color: #bbb; - } - .mh, .mi, .mo, .il { - color: black; - } - .sb, .sc, .sd, .s2, .se, .sh, .si, .sx { - color: #d14; - } - .sr { - color: orange; - } - .s1, .ss { - color: #b72748; - } - .bp, .vc { - color: #3a95ba; - } - .vg { - color: black; - } - .vi { - color: orange; - } - .nl { - color: #3a95ba; - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/apidiff/ASDK_API_Diff_1.9.92_to_2.0.html b/submodules/AsyncDisplayKit/docs/apidiff/ASDK_API_Diff_1.9.92_to_2.0.html deleted file mode 100755 index 991484bb9c..0000000000 --- a/submodules/AsyncDisplayKit/docs/apidiff/ASDK_API_Diff_1.9.92_to_2.0.html +++ /dev/null @@ -1,2224 +0,0 @@ - - - - - - -
    -
    ASAbsoluteLayoutElement.h
    - -
    -
    Added ASAbsoluteLayoutElement
    -
    Added ASAbsoluteLayoutElement.layoutPosition
    -
    Added ASAbsoluteLayoutElement.sizeRange
    -
    - -
    - -
    -
    ASAbsoluteLayoutSpec.h
    - -
    -
    Added ASAbsoluteLayoutSpecSizing
    -
    Added ASAbsoluteLayoutSpecSizingDefault
    -
    Added ASAbsoluteLayoutSpecSizingSizeToFit
    -
    Added ASAbsoluteLayoutSpec
    -
    Added ASAbsoluteLayoutSpec.sizing
    -
    Added +[ASAbsoluteLayoutSpec absoluteLayoutSpecWithSizing:children:]
    -
    Added +[ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:]
    -
    - - -
    -
    Modified ASStaticLayoutSpec
    - - - - -
    HeaderSuperclass
    FromASStaticLayoutSpec.hASLayoutSpec
    ToASAbsoluteLayoutSpec.hASAbsoluteLayoutSpec
    -
    -
    Modified +[ASStaticLayoutSpec staticLayoutSpecWithChildren:]
    - - - - -
    Availability
    FromAvailable
    ToDeprecated
    -
    -
    - -
    - -
    -
    ASAbstractLayoutController.h
    - -
    -
    Added ASAbstractLayoutController (Unavailable)
    -
    - -
    - -
    -
    ASAsciiArtBoxCreator.h
    - -
    -
    Removed ASLayoutableAsciiArtProtocol
    -
    Removed -[ASLayoutableAsciiArtProtocol asciiArtString]
    -
    Removed -[ASLayoutableAsciiArtProtocol asciiArtName]
    -
    - - -
    -
    Added ASLayoutElementAsciiArtProtocol
    -
    Added -[ASLayoutElementAsciiArtProtocol asciiArtString]
    -
    Added -[ASLayoutElementAsciiArtProtocol asciiArtName]
    -
    - -
    - -
    -
    ASAvailability.h
    - -
    -
    Added #def kCFCoreFoundationVersionNumber_iOS_10_0
    -
    Added #def AS_AT_LEAST_IOS10
    -
    - -
    - -
    -
    ASBaseDefines.h
    - -
    -
    Added #def ASDISPLAYNODE_DEPRECATED_MSG
    -
    Added #def AS_UNAVAILABLE
    -
    Added #def AS_WARN_UNUSED_RESULT
    -
    Added #def ASOVERLOADABLE
    -
    - -
    - -
    -
    ASBasicImageDownloader.h
    - -
    -
    Modified ASBasicImageDownloader
    - - - - -
    Protocols
    FromASImageDownloaderProtocolDeprecated, ASImageDownloaderProtocol
    ToASImageDownloaderProtocol
    -
    -
    - -
    - -
    -
    ASButtonNode.h
    - -
    -
    Added ASButtonNodeImageAlignment
    -
    Added ASButtonNodeImageAlignmentBeginning
    -
    Added ASButtonNodeImageAlignmentEnd
    -
    Added ASButtonNode.imageAlignment
    -
    - -
    - -
    -
    ASCellNode.h
    - -
    -
    Added ASCellNode.supplementaryElementKind
    -
    Added ASCellNode.layoutAttributes
    -
    Added ASCellNode.indexPath
    -
    Added ASCellNode.owningNode
    -
    Added ASCellNode (Unavailable)
    -
    - -
    - -
    -
    ASCollectionNode.h
    - -
    -
    Added ASCollectionNode.allowsSelection
    -
    Added ASCollectionNode.allowsMultipleSelection
    -
    Added -[ASCollectionNode scrollToItemAtIndexPath:atScrollPosition:animated:]
    -
    Added -[ASCollectionNode registerSupplementaryNodeOfKind:]
    -
    Added -[ASCollectionNode performBatchAnimated:updates:completion:]
    -
    Added -[ASCollectionNode performBatchUpdates:completion:]
    -
    Added -[ASCollectionNode waitUntilAllUpdatesAreCommitted]
    -
    Added -[ASCollectionNode insertSections:]
    -
    Added -[ASCollectionNode deleteSections:]
    -
    Added -[ASCollectionNode reloadSections:]
    -
    Added -[ASCollectionNode moveSection:toSection:]
    -
    Added -[ASCollectionNode insertItemsAtIndexPaths:]
    -
    Added -[ASCollectionNode deleteItemsAtIndexPaths:]
    -
    Added -[ASCollectionNode reloadItemsAtIndexPaths:]
    -
    Added -[ASCollectionNode moveItemAtIndexPath:toIndexPath:]
    -
    Added -[ASCollectionNode relayoutItems]
    -
    Added ASCollectionNode.indexPathsForSelectedItems
    -
    Added -[ASCollectionNode selectItemAtIndexPath:animated:scrollPosition:]
    -
    Added -[ASCollectionNode deselectItemAtIndexPath:animated:]
    -
    Added -[ASCollectionNode numberOfItemsInSection:]
    -
    Added ASCollectionNode.numberOfSections
    -
    Added ASCollectionNode.visibleNodes
    -
    Added -[ASCollectionNode nodeForItemAtIndexPath:]
    -
    Added -[ASCollectionNode indexPathForNode:]
    -
    Added ASCollectionNode.indexPathsForVisibleItems
    -
    Added -[ASCollectionNode indexPathForItemAtPoint:]
    -
    Added -[ASCollectionNode cellForItemAtIndexPath:]
    -
    Added -[ASCollectionNode contextForSection:]
    -
    Added ASCollectionNode (Deprecated)
    -
    Added -[ASCollectionDataSource collectionNode:numberOfItemsInSection:]
    -
    Added -[ASCollectionDataSource numberOfSectionsInCollectionNode:]
    -
    Added -[ASCollectionDataSource collectionNode:nodeBlockForItemAtIndexPath:]
    -
    Added -[ASCollectionDataSource collectionNode:nodeForItemAtIndexPath:]
    -
    Added -[ASCollectionDataSource collectionNode:nodeForSupplementaryElementOfKind:atIndexPath:]
    -
    Added -[ASCollectionDataSource collectionNode:contextForSection:]
    -
    Added -[ASCollectionDelegate collectionNode:constrainedSizeForItemAtIndexPath:]
    -
    Added -[ASCollectionDelegate collectionNode:willDisplayItemWithNode:]
    -
    Added -[ASCollectionDelegate collectionNode:didEndDisplayingItemWithNode:]
    -
    Added -[ASCollectionDelegate collectionNode:willDisplaySupplementaryElementWithNode:]
    -
    Added -[ASCollectionDelegate collectionNode:didEndDisplayingSupplementaryElementWithNode:]
    -
    Added -[ASCollectionDelegate collectionNode:shouldHighlightItemAtIndexPath:]
    -
    Added -[ASCollectionDelegate collectionNode:didHighlightItemAtIndexPath:]
    -
    Added -[ASCollectionDelegate collectionNode:didUnhighlightItemAtIndexPath:]
    -
    Added -[ASCollectionDelegate collectionNode:shouldSelectItemAtIndexPath:]
    -
    Added -[ASCollectionDelegate collectionNode:shouldDeselectItemAtIndexPath:]
    -
    Added -[ASCollectionDelegate collectionNode:didSelectItemAtIndexPath:]
    -
    Added -[ASCollectionDelegate collectionNode:didDeselectItemAtIndexPath:]
    -
    Added -[ASCollectionDelegate collectionNode:shouldShowMenuForItemAtIndexPath:]
    -
    Added -[ASCollectionDelegate collectionNode:canPerformAction:forItemAtIndexPath:sender:]
    -
    Added -[ASCollectionDelegate collectionNode:performAction:forItemAtIndexPath:sender:]
    -
    Added -[ASCollectionDelegate collectionNode:willBeginBatchFetchWithContext:]
    -
    Added -[ASCollectionDelegate shouldBatchFetchForCollectionNode:]
    -
    Added -[ASCollectionDelegate collectionView:constrainedSizeForNodeAtIndexPath:]
    -
    Added -[ASCollectionDelegate collectionView:willDisplayNode:forItemAtIndexPath:]
    -
    - - -
    -
    Modified -[ASCollectionNode reloadDataImmediately]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse -reloadData / -reloadDataWithCompletion: followed by -waitUntilAllUpdatesAreCommitted instead.
    -
    -
    Modified ASCollectionDataSource
    - - - - -
    HeaderProtocols
    FromASCollectionView.hASCommonCollectionViewDataSource
    ToASCollectionNode.hASCommonCollectionDataSource
    -
    -
    Modified -[ASCollectionDataSource collectionView:nodeForItemAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode's method instead.
    -
    -
    Modified -[ASCollectionDataSource collectionView:nodeBlockForItemAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode's method instead.
    -
    -
    Modified -[ASCollectionDataSource collectionView:nodeForSupplementaryElementOfKind:atIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode's method instead.
    -
    -
    Modified ASCollectionDelegate
    - - - - -
    HeaderProtocols
    FromASCollectionView.hASCommonCollectionViewDelegate, NSObject
    ToASCollectionNode.hASCommonCollectionDelegate, NSObject
    -
    -
    Modified -[ASCollectionDelegate collectionView:didEndDisplayingNode:forItemAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode's method instead.
    -
    -
    Modified -[ASCollectionDelegate collectionView:willBeginBatchFetchWithContext:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode's method instead.
    -
    -
    Modified -[ASCollectionDelegate shouldBatchFetchForCollectionView:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode's method instead.
    -
    -
    Modified -[ASCollectionDelegate collectionView:willDisplayNodeForItemAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode's method instead.
    -
    -
    - -
    - -
    -
    ASCollectionNode+Beta.h
    - -
    -
    Modified -[ASCollectionNode beginUpdates]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse -performBatchUpdates:completion: instead.
    -
    -
    Modified -[ASCollectionNode endUpdatesAnimated:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse -performBatchUpdates:completion: instead.
    -
    -
    Modified -[ASCollectionNode endUpdatesAnimated:completion:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse -performBatchUpdates:completion: instead.
    -
    -
    - -
    - -
    -
    ASCollectionView.h
    - -
    -
    Removed -[ASCollectionView clearContents]
    -
    Removed -[ASCollectionView clearFetchedData]
    -
    Removed #def ASCollectionViewDataSource
    -
    Removed -[ASCollectionDataSource collectionView:constrainedSizeForNodeAtIndexPath:]
    -
    Removed #def ASCollectionViewDelegate
    -
    Removed -[ASCollectionDelegate collectionView:didEndDisplayingNodeForItemAtIndexPath:]
    -
    Removed -[ASCollectionView initWithFrame:collectionViewLayout:asyncDataFetching:]
    -
    - - -
    -
    Added -[ASCollectionView contextForSection:]
    -
    Added -[ASCollectionView cellForItemAtIndexPath:]
    -
    Added -[ASCollectionView scrollToItemAtIndexPath:atScrollPosition:animated:]
    -
    Added -[ASCollectionView selectItemAtIndexPath:animated:scrollPosition:]
    -
    Added ASCollectionView.indexPathsForVisibleItems
    -
    Added ASCollectionView.indexPathsForSelectedItems
    -
    Added ASCollectionViewDataSource
    -
    Added ASCollectionViewDelegate
    -
    - - -
    -
    Modified -[ASCollectionView initWithCollectionViewLayout:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedPlease use ASCollectionNode instead of ASCollectionView.
    -
    -
    Modified -[ASCollectionView initWithFrame:collectionViewLayout:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedPlease use ASCollectionNode instead of ASCollectionView.
    -
    -
    Modified -[ASCollectionView tuningParametersForRangeType:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView setTuningParameters:forRangeType:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView tuningParametersForRangeMode:rangeType:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView setTuningParameters:forRangeMode:rangeType:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView performBatchAnimated:updates:completion:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView performBatchUpdates:completion:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView reloadDataWithCompletion:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView reloadData]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView reloadDataImmediately]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode's -reloadDataWithCompletion: followed by -waitUntilAllUpdatesAreCommitted instead.
    -
    -
    Modified -[ASCollectionView relayoutItems]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView waitUntilAllUpdatesAreCommitted]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView registerSupplementaryNodeOfKind:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView insertSections:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView deleteSections:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView reloadSections:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView moveSection:toSection:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView insertItemsAtIndexPaths:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView deleteItemsAtIndexPaths:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView reloadItemsAtIndexPaths:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified ASCollectionDataSource
    - - - - -
    HeaderProtocols
    FromASCollectionView.hASCommonCollectionViewDataSource
    ToASCollectionNode.hASCommonCollectionDataSource
    -
    -
    Modified -[ASCollectionView moveItemAtIndexPath:toIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView calculatedSizeForNodeAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedCall -calculatedSize on the node of interest instead.
    -
    -
    Modified -[ASCollectionView visibleNodes]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified -[ASCollectionView indexPathForNode:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode method instead.
    -
    -
    Modified ASCollectionDelegate
    - - - - -
    HeaderProtocols
    FromASCollectionView.hASCommonCollectionViewDelegate, NSObject
    ToASCollectionNode.hASCommonCollectionDelegate, NSObject
    -
    -
    - -
    - -
    -
    ASCollectionViewFlowLayoutInspector.h
    - -
    -
    Added -[ASCollectionViewLayoutInspecting scrollableDirections]
    -
    - - -
    -
    Modified -[ASCollectionViewLayoutInspecting collectionView:numberOfSectionsForSupplementaryNodeOfKind:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASCollectionNode's method instead.
    -
    -
    - -
    - -
    -
    ASCollectionViewProtocols.h
    - -
    -
    Removed ASCommonCollectionViewDataSource
    -
    Removed -[ASCommonCollectionViewDataSource collectionView:numberOfItemsInSection:]
    -
    Removed -[ASCommonCollectionViewDataSource numberOfSectionsInCollectionView:]
    -
    Removed -[ASCommonCollectionViewDataSource collectionView:viewForSupplementaryElementOfKind:atIndexPath:]
    -
    Removed ASCommonCollectionViewDelegate
    -
    Removed -[ASCommonCollectionViewDelegate collectionView:transitionLayoutForOldLayout:newLayout:]
    -
    Removed -[ASCommonCollectionViewDelegate collectionView:willDisplaySupplementaryView:forElementKind:atIndexPath:]
    -
    Removed -[ASCommonCollectionViewDelegate collectionView:didEndDisplayingSupplementaryView:forElementOfKind:atIndexPath:]
    -
    Removed -[ASCommonCollectionViewDelegate collectionView:shouldHighlightItemAtIndexPath:]
    -
    Removed -[ASCommonCollectionViewDelegate collectionView:didHighlightItemAtIndexPath:]
    -
    Removed -[ASCommonCollectionViewDelegate collectionView:didUnhighlightItemAtIndexPath:]
    -
    Removed -[ASCommonCollectionViewDelegate collectionView:shouldSelectItemAtIndexPath:]
    -
    Removed -[ASCommonCollectionViewDelegate collectionView:didSelectItemAtIndexPath:]
    -
    Removed -[ASCommonCollectionViewDelegate collectionView:shouldDeselectItemAtIndexPath:]
    -
    Removed -[ASCommonCollectionViewDelegate collectionView:didDeselectItemAtIndexPath:]
    -
    Removed -[ASCommonCollectionViewDelegate collectionView:shouldShowMenuForItemAtIndexPath:]
    -
    Removed -[ASCommonCollectionViewDelegate collectionView:canPerformAction:forItemAtIndexPath:withSender:]
    -
    Removed -[ASCommonCollectionViewDelegate collectionView:performAction:forItemAtIndexPath:withSender:]
    -
    - - -
    -
    Added ASCommonCollectionDataSource
    -
    Added -[ASCommonCollectionDataSource collectionView:numberOfItemsInSection:]
    -
    Added -[ASCommonCollectionDataSource numberOfSectionsInCollectionView:]
    -
    Added -[ASCommonCollectionDataSource collectionView:viewForSupplementaryElementOfKind:atIndexPath:]
    -
    Added ASCommonCollectionDelegate
    -
    Added -[ASCommonCollectionDelegate collectionView:transitionLayoutForOldLayout:newLayout:]
    -
    Added -[ASCommonCollectionDelegate collectionView:willDisplaySupplementaryView:forElementKind:atIndexPath:]
    -
    Added -[ASCommonCollectionDelegate collectionView:didEndDisplayingSupplementaryView:forElementOfKind:atIndexPath:]
    -
    Added -[ASCommonCollectionDelegate collectionView:shouldHighlightItemAtIndexPath:]
    -
    Added -[ASCommonCollectionDelegate collectionView:didHighlightItemAtIndexPath:]
    -
    Added -[ASCommonCollectionDelegate collectionView:didUnhighlightItemAtIndexPath:]
    -
    Added -[ASCommonCollectionDelegate collectionView:shouldSelectItemAtIndexPath:]
    -
    Added -[ASCommonCollectionDelegate collectionView:didSelectItemAtIndexPath:]
    -
    Added -[ASCommonCollectionDelegate collectionView:shouldDeselectItemAtIndexPath:]
    -
    Added -[ASCommonCollectionDelegate collectionView:didDeselectItemAtIndexPath:]
    -
    Added -[ASCommonCollectionDelegate collectionView:shouldShowMenuForItemAtIndexPath:]
    -
    Added -[ASCommonCollectionDelegate collectionView:canPerformAction:forItemAtIndexPath:withSender:]
    -
    Added -[ASCommonCollectionDelegate collectionView:performAction:forItemAtIndexPath:withSender:]
    -
    - -
    - -
    -
    ASDataController.h
    - -
    -
    Added -[ASDataController initWithDataSource:]
    -
    Added -[ASDataController completedNumberOfSections]
    -
    Added -[ASDataController completedNumberOfRowsInSection:]
    -
    Added -[ASDataController nodeAtCompletedIndexPath:]
    -
    Added -[ASDataController completedIndexPathForNode:]
    -
    Added -[ASDataController moveCompletedNodeAtIndexPath:toIndexPath:]
    -
    - -
    - -
    -
    ASDimension.h
    - -
    -
    Removed ASRelativeDimensionTypePercent
    -
    Removed ASRelativeDimension
    -
    Removed ASRelativeDimensionUnconstrained
    -
    Removed #def isValidForLayout
    -
    Removed ASRelativeDimensionMakeWithPoints()
    -
    Removed ASRelativeDimensionMakeWithPercent()
    -
    Removed ASRelativeDimensionCopy()
    -
    Removed ASRelativeDimensionEqualToRelativeDimension()
    -
    Removed NSStringFromASRelativeDimension()
    -
    Removed ASRelativeDimensionResolve()
    -
    - - -
    -
    Added ASPointsValidForLayout()
    -
    Added ASIsCGSizeValidForLayout()
    -
    Added ASPointsValidForSize()
    -
    Added ASIsCGSizeValidForSize()
    -
    Added ASDimensionUnit
    -
    Added ASDimensionUnitAuto
    -
    Added ASDimensionUnitPoints
    -
    Added ASDimensionUnitFraction
    -
    Added ASDimension
    -
    Added ASLayoutElementSize
    -
    Added ASDimensionAuto
    -
    Added ASDimensionMake()
    -
    Added ASDimensionMakeWithPoints()
    -
    Added ASDimensionMakeWithFraction()
    -
    Added ASDimensionEqualToDimension()
    -
    Added NSStringFromASDimension()
    -
    Added ASDimensionResolve()
    -
    Added NSNumber (ASDimension)
    -
    Added NSNumber.as_pointDimension
    -
    Added NSNumber.as_fractionDimension
    -
    Added ASLayoutSize
    -
    Added ASLayoutSizeAuto
    -
    Added ASLayoutSizeMake()
    -
    Added NSStringFromASLayoutSize()
    -
    Added ASLayoutElementSizeMake()
    -
    Added ASLayoutElementSizeMakeFromCGSize()
    -
    Added ASLayoutElementSizeEqualToLayoutElementSize()
    -
    Added NSStringFromASLayoutElementSize()
    -
    Added ASLayoutElementSizeResolveAutoSize()
    -
    Added ASLayoutElementSizeResolve()
    -
    Added ASRelativeDimensionTypeAuto
    -
    Added ASRelativeDimensionTypeFraction
    -
    Added #def ASRelativeDimension
    -
    Added #def ASRelativeSize
    -
    Added #def ASRelativeDimensionMakeWithPoints
    -
    Added #def ASRelativeDimensionMakeWithFraction
    -
    Added ASRelativeSizeMakeWithFraction()
    -
    Added ASRelativeSizeRangeMakeWithExactFraction()
    -
    - - -
    -
    Modified ASSizeRangeMakeExactSize()
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASSizeRangeMake instead.
    -
    -
    Modified ASRelativeSizeRange
    - - - - -
    Header
    FromASRelativeSize.h
    ToASDimension.h
    -
    -
    Modified ASRelativeSizeRangeUnconstrained
    - - - - -
    Header
    FromASRelativeSize.h
    ToASDimension.h
    -
    -
    Modified ASRelativeDimensionMake()
    - - - - -
    Availability
    FromAvailable
    ToDeprecated
    -
    -
    Modified ASRelativeSizeMake()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeMakeWithCGSize()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeEqualToRelativeSize()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified NSStringFromASRelativeSize()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeRangeMake()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeRangeMakeWithExactRelativeSize()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeRangeMakeWithExactCGSize()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeRangeMakeWithExactRelativeDimensions()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeRangeEqualToRelativeSizeRange()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeRangeResolve()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    - -
    - -
    -
    ASDisplayNode.h
    - -
    -
    Removed ASInterfaceStateFetchData
    -
    Removed -[ASDisplayNode measureWithSizeRange:]
    -
    Removed ASDisplayNode (ASDisplayNodeAsyncTransactionContainer)
    -
    Removed -[ASDisplayNode reclaimMemory]
    -
    Removed -[ASDisplayNode recursivelyReclaimMemory]
    -
    Removed ASDisplayNode.placeholderFadesOut
    -
    - - -
    -
    Added ASInterfaceStatePreload
    -
    Added -[ASDisplayNode onDidLoad:]
    -
    Added ASDisplayNode.visible
    -
    Added ASDisplayNode.inPreloadState
    -
    Added ASDisplayNode.inDisplayState
    -
    Added -[ASDisplayNode layoutThatFits:]
    -
    Added ASDisplayNode.allowsGroupOpacity
    -
    Added ASDisplayNode (LayoutTransitioning)
    -
    Added ASDisplayNode.defaultLayoutTransitionDuration
    -
    Added ASDisplayNode.defaultLayoutTransitionDelay
    -
    Added ASDisplayNode.defaultLayoutTransitionOptions
    -
    Added -[ASDisplayNode cancelLayoutTransition]
    -
    Added ASDisplayNode (AutomaticSubnodeManagement)
    -
    Added ASDisplayNode.automaticallyManagesSubnodes
    -
    Added ASDisplayNode (ASAsyncTransactionContainer)
    -
    - - -
    -
    Modified ASDisplayNode
    - - - - -
    Protocols
    FromASLayoutable
    ToASLayoutElement
    -
    -
    Modified ASDisplayNode (Debugging)
    - - - - -
    Protocols
    FromASLayoutableAsciiArtProtocol
    ToASLayoutElementAsciiArtProtocol
    -
    -
    Modified ASDisplayNode (Deprecated)
    - - - - -
    Header
    FromASDisplayNode.h
    ToASDisplayNode+Deprecated.h
    -
    -
    - -
    - -
    -
    ASDisplayNode+Beta.h
    - -
    -
    Removed +[ASDisplayNode usesImplicitHierarchyManagement]
    -
    Removed +[ASDisplayNode setUsesImplicitHierarchyManagement:]
    -
    - - -
    -
    Added #def ASDISPLAYNODE_EVENTLOG_CAPACITY
    -
    Added #def ASDISPLAYNODE_EVENTLOG_ENABLE
    -
    Added #def ASDisplayNodeLogEvent
    -
    Added ASDisplayNodePerformanceMeasurementOptions
    -
    Added ASDisplayNodePerformanceMeasurementOptionLayoutSpec
    -
    Added ASDisplayNodePerformanceMeasurementOptionLayoutComputation
    -
    Added ASDisplayNodePerformanceMeasurements
    -
    Added ASDisplayNode.measurementOptions
    -
    Added ASDisplayNode.performanceMeasurements
    -
    - -
    - -
    -
    ASDisplayNode+Deprecated.h
    - -
    -
    Added ASDisplayNode.alignSelf
    -
    Added ASDisplayNode.ascender
    -
    Added ASDisplayNode.descender
    -
    Added ASDisplayNode.flexBasis
    -
    Added ASDisplayNode.flexGrow
    -
    Added ASDisplayNode.flexShrink
    -
    Added ASDisplayNode.layoutPosition
    -
    Added ASDisplayNode.sizeRange
    -
    Added ASDisplayNode.spacingAfter
    -
    Added ASDisplayNode.spacingBefore
    -
    - - -
    -
    Modified ASDisplayNode (Deprecated)
    - - - - -
    Header
    FromASDisplayNode.h
    ToASDisplayNode+Deprecated.h
    -
    -
    Modified ASDisplayNode.name
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse .debugName instead.
    -
    -
    Modified ASDisplayNode.preferredFrameSize
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse .style.preferredSize instead OR set individual values with .style.height and .style.width.
    -
    -
    Modified -[ASDisplayNode measure:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse layoutThatFits: with a constrained size of (CGSizeZero, constrainedSize) and call size on the returned ASLayout.
    -
    -
    Modified -[ASDisplayNode visibilityDidChange:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse -didEnterVisibleState / -didExitVisibleState instead.
    -
    -
    Modified -[ASDisplayNode visibleStateDidChange:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse -didEnterVisibleState / -didExitVisibleState instead.
    -
    -
    Modified -[ASDisplayNode displayStateDidChange:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse -didEnterDisplayState / -didExitDisplayState instead.
    -
    -
    Modified -[ASDisplayNode loadStateDidChange:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse -didEnterPreloadState / -didExitPreloadState instead.
    -
    -
    Modified -[ASDisplayNode cancelLayoutTransitionsInProgress]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse -cancelLayoutTransition instead.
    -
    -
    Modified ASDisplayNode.usesImplicitHierarchyManagement
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedSet .automaticallyManagesSubnodes instead.
    -
    -
    - -
    - -
    -
    ASDisplayNode+Subclasses.h
    - -
    -
    Added -[ASDisplayNode calculateLayoutThatFits:restrictedToSize:relativeToParentSize:]
    -
    Added -[ASDisplayNode displayWillStartAsynchronously:]
    -
    Added -[ASDisplayNode didEnterVisibleState]
    -
    Added -[ASDisplayNode didExitVisibleState]
    -
    Added -[ASDisplayNode didEnterDisplayState]
    -
    Added -[ASDisplayNode didExitDisplayState]
    -
    Added -[ASDisplayNode didEnterPreloadState]
    -
    Added -[ASDisplayNode didExitPreloadState]
    -
    - -
    - -
    -
    ASDisplayNodeExtras.h
    - -
    -
    Removed ASInterfaceStateIncludesFetchData()
    -
    - - -
    -
    Added ASInterfaceStateIncludesPreload()
    -
    - -
    - -
    -
    ASEditableTextNode.h
    - -
    -
    Added ASEditableTextNode (Unavailable)
    -
    - -
    - -
    -
    ASEnvironment.h
    - -
    -
    Removed -[ASEnvironment supportsUpwardPropagation]
    -
    - - -
    -
    Added NSStringFromASEnvironmentTraitCollection()
    -
    - -
    - -
    -
    ASImageNode.h
    - -
    -
    Added ASImageNode.forcedSize
    -
    Added ASImageNode (Unavailable)
    -
    - -
    - -
    -
    ASImageProtocols.h
    - -
    -
    Removed ASImageDownloaderProtocolDeprecated
    -
    Removed -[ASImageDownloaderProtocolDeprecated downloadImageWithURL:callbackQueue:downloadProgressBlock:completion:]
    -
    Removed ASImageCacheProtocolDeprecated
    -
    Removed -[ASImageCacheProtocolDeprecated fetchCachedImageWithURL:callbackQueue:completion:]
    -
    - -
    - -
    -
    ASLayout.h
    - -
    -
    Removed ASLayout.constrainedSizeRange
    -
    Removed ASLayout.dirty
    -
    Removed -[ASLayout initWithLayoutableObject:constrainedSizeRange:size:position:sublayouts:]
    -
    Removed +[ASLayout layoutWithLayoutableObject:constrainedSizeRange:size:position:sublayouts:]
    -
    Removed +[ASLayout flattenedLayoutWithLayoutableObject:constrainedSizeRange:size:sublayouts:]
    -
    - - -
    -
    Added ASCalculateRootLayout()
    -
    Added ASCalculateLayout()
    -
    Added ASLayout.layoutElement
    -
    Added -[ASLayout initWithLayoutElement:size:position:sublayouts:]
    -
    Added +[ASLayout layoutWithLayoutElement:size:position:sublayouts:]
    -
    Added +[ASLayout layoutWithLayoutElement:size:sublayouts:]
    -
    Added +[ASLayout layoutWithLayoutElement:size:]
    -
    Added ASLayout (Unavailable)
    -
    Added ASLayout (Deprecated)
    -
    - - -
    -
    Modified -[ASLayout layoutableObject]
    - - - - -
    Availability
    FromAvailable
    ToDeprecated
    -
    -
    Modified +[ASLayout layoutWithLayoutableObject:constrainedSizeRange:size:]
    - - - - -
    Availability
    FromAvailable
    ToDeprecated
    -
    -
    Modified +[ASLayout layoutWithLayoutableObject:constrainedSizeRange:size:sublayouts:]
    - - - - -
    Availability
    FromAvailable
    ToDeprecated
    -
    -
    - -
    - -
    -
    ASLayoutable.h
    - -
    -
    Removed ASLayoutableType
    -
    Removed ASLayoutableTypeLayoutSpec
    -
    Removed ASLayoutableTypeDisplayNode
    -
    Removed ASLayoutable
    -
    Removed ASLayoutable.layoutableType
    -
    Removed ASLayoutable.canLayoutAsynchronous
    -
    Removed -[ASLayoutable measureWithSizeRange:]
    -
    Removed ASLayoutable.spacingBefore
    -
    Removed ASLayoutable.spacingAfter
    -
    Removed ASLayoutable.flexGrow
    -
    Removed ASLayoutable.flexShrink
    -
    Removed ASLayoutable.flexBasis
    -
    Removed ASLayoutable.alignSelf
    -
    Removed ASLayoutable.ascender
    -
    Removed ASLayoutable.descender
    -
    Removed ASLayoutable.sizeRange
    -
    Removed ASLayoutable.layoutPosition
    -
    - -
    - -
    -
    ASLayoutableExtensibility.h
    - -
    -
    Removed ASLayoutableExtensibility
    -
    Removed -[ASLayoutableExtensibility setLayoutOptionExtensionBool:atIndex:]
    -
    Removed -[ASLayoutableExtensibility layoutOptionExtensionBoolAtIndex:]
    -
    Removed -[ASLayoutableExtensibility setLayoutOptionExtensionInteger:atIndex:]
    -
    Removed -[ASLayoutableExtensibility layoutOptionExtensionIntegerAtIndex:]
    -
    Removed -[ASLayoutableExtensibility setLayoutOptionExtensionEdgeInsets:atIndex:]
    -
    Removed -[ASLayoutableExtensibility layoutOptionExtensionEdgeInsetsAtIndex:]
    -
    - -
    - -
    -
    ASLayoutablePrivate.h
    - -
    -
    Removed ASLayoutableContextInvalidTransitionID
    -
    Removed ASLayoutableContextDefaultTransitionID
    -
    Removed ASLayoutableContextNull
    -
    Removed ASLayoutableContextIsNull()
    -
    Removed ASLayoutableContextMake()
    -
    Removed ASLayoutableSetCurrentContext()
    -
    Removed ASLayoutableGetCurrentContext()
    -
    Removed ASLayoutableClearCurrentContext()
    -
    Removed ASLayoutablePrivate
    -
    Removed -[ASLayoutablePrivate finalLayoutable]
    -
    Removed ASLayoutablePrivate.isFinalLayoutable
    -
    Removed #def ASEnvironmentLayoutOptionsForwarding
    -
    - - -
    -
    Modified #def ASEnvironmentLayoutExtensibilityForwarding
    - - - - -
    Header
    FromASLayoutablePrivate.h
    ToASLayoutElementPrivate.h
    -
    -
    - -
    - -
    -
    ASLayoutElement.h
    - -
    -
    Added ASLayoutElementParentDimensionUndefined
    -
    Added ASLayoutElementParentSizeUndefined
    -
    Added ASLayoutElementType
    -
    Added ASLayoutElementTypeLayoutSpec
    -
    Added ASLayoutElementTypeDisplayNode
    -
    Added ASLayoutElement
    -
    Added ASLayoutElement.layoutElementType
    -
    Added ASLayoutElement.canLayoutAsynchronous
    -
    Added ASLayoutElement.style
    -
    Added ASLayoutElement.debugName
    -
    Added -[ASLayoutElement layoutThatFits:]
    -
    Added -[ASLayoutElement layoutThatFits:parentSize:]
    -
    Added -[ASLayoutElement calculateLayoutThatFits:]
    -
    Added -[ASLayoutElement calculateLayoutThatFits:restrictedToSize:relativeToParentSize:]
    -
    Added -[ASLayoutElement measureWithSizeRange:]
    -
    Added ASLayoutElementStyleWidthProperty
    -
    Added ASLayoutElementStyleMinWidthProperty
    -
    Added ASLayoutElementStyleMaxWidthProperty
    -
    Added ASLayoutElementStyleHeightProperty
    -
    Added ASLayoutElementStyleMinHeightProperty
    -
    Added ASLayoutElementStyleMaxHeightProperty
    -
    Added ASLayoutElementStyleSpacingBeforeProperty
    -
    Added ASLayoutElementStyleSpacingAfterProperty
    -
    Added ASLayoutElementStyleFlexGrowProperty
    -
    Added ASLayoutElementStyleFlexShrinkProperty
    -
    Added ASLayoutElementStyleFlexBasisProperty
    -
    Added ASLayoutElementStyleAlignSelfProperty
    -
    Added ASLayoutElementStyleAscenderProperty
    -
    Added ASLayoutElementStyleDescenderProperty
    -
    Added ASLayoutElementStyleLayoutPositionProperty
    -
    Added ASLayoutElementStyleDelegate
    -
    Added -[ASLayoutElementStyleDelegate style:propertyDidChange:]
    -
    Added ASLayoutElementStyle
    -
    Added -[ASLayoutElementStyle initWithDelegate:]
    -
    Added ASLayoutElementStyle.delegate
    -
    Added ASLayoutElementStyle.width
    -
    Added ASLayoutElementStyle.height
    -
    Added ASLayoutElementStyle.minHeight
    -
    Added ASLayoutElementStyle.maxHeight
    -
    Added ASLayoutElementStyle.minWidth
    -
    Added ASLayoutElementStyle.maxWidth
    -
    Added ASLayoutElementStyle.preferredSize
    -
    Added ASLayoutElementStyle.minSize
    -
    Added ASLayoutElementStyle.maxSize
    -
    Added ASLayoutElementStyle.preferredLayoutSize
    -
    Added ASLayoutElementStyle.minLayoutSize
    -
    Added ASLayoutElementStyle.maxLayoutSize
    -
    Added ASLayoutElementStylability
    -
    Added -[ASLayoutElementStylability styledWithBlock:]
    -
    - -
    - -
    -
    ASLayoutElementExtensibility.h
    - -
    -
    Added ASLayoutElementExtensibility
    -
    Added -[ASLayoutElementExtensibility setLayoutOptionExtensionBool:atIndex:]
    -
    Added -[ASLayoutElementExtensibility layoutOptionExtensionBoolAtIndex:]
    -
    Added -[ASLayoutElementExtensibility setLayoutOptionExtensionInteger:atIndex:]
    -
    Added -[ASLayoutElementExtensibility layoutOptionExtensionIntegerAtIndex:]
    -
    Added -[ASLayoutElementExtensibility setLayoutOptionExtensionEdgeInsets:atIndex:]
    -
    Added -[ASLayoutElementExtensibility layoutOptionExtensionEdgeInsetsAtIndex:]
    -
    - -
    - -
    -
    ASLayoutElementPrivate.h
    - -
    -
    Added ASLayoutElementContextInvalidTransitionID
    -
    Added ASLayoutElementContextDefaultTransitionID
    -
    Added ASLayoutElementContextNull
    -
    Added ASLayoutElementContextIsNull()
    -
    Added ASLayoutElementContextMake()
    -
    Added ASLayoutElementSetCurrentContext()
    -
    Added ASLayoutElementGetCurrentContext()
    -
    Added ASLayoutElementClearCurrentContext()
    -
    Added ASLayoutElementPrivate
    -
    Added -[ASLayoutElementPrivate finalLayoutElement]
    -
    Added ASLayoutElementPrivate.isFinalLayoutElement
    -
    Added #def ASLayoutElementStyleForwardingDeclaration
    -
    Added #def ASLayoutElementStyleForwarding
    -
    - - -
    -
    Modified #def ASEnvironmentLayoutExtensibilityForwarding
    - - - - -
    Header
    FromASLayoutablePrivate.h
    ToASLayoutElementPrivate.h
    -
    -
    - -
    - -
    -
    ASLayoutRangeType.h
    - -
    -
    Removed ASLayoutRangeTypeFetchData
    -
    - - -
    -
    Added ASLayoutRangeTypePreload
    -
    - -
    - -
    -
    ASLayoutSpec.h
    - -
    -
    Removed -[ASLayoutSpec init]
    -
    Removed -[ASLayoutSpec setChild:forIndex:]
    -
    Removed -[ASLayoutSpec childForIndex:]
    -
    - - -
    -
    Added ASWrapperLayoutSpec
    -
    Added +[ASWrapperLayoutSpec wrapperWithLayoutElement:]
    -
    Added +[ASWrapperLayoutSpec wrapperWithLayoutElements:]
    -
    Added -[ASWrapperLayoutSpec initWithLayoutElement:]
    -
    Added -[ASWrapperLayoutSpec initWithLayoutElements:]
    -
    Added ASLayoutSpec (Deprecated)
    -
    Added ASLayoutSpec.alignSelf
    -
    Added ASLayoutSpec.ascender
    -
    Added ASLayoutSpec.descender
    -
    Added ASLayoutSpec.flexBasis
    -
    Added ASLayoutSpec.flexGrow
    -
    Added ASLayoutSpec.flexShrink
    -
    Added ASLayoutSpec.layoutPosition
    -
    Added ASLayoutSpec.sizeRange
    -
    Added ASLayoutSpec.spacingAfter
    -
    Added ASLayoutSpec.spacingBefore
    -
    - - -
    -
    Modified ASLayoutSpec
    - - - - -
    Protocols
    FromASLayoutable
    ToASLayoutElement
    -
    -
    Modified ASLayoutSpec (Debugging)
    - - - - -
    Protocols
    FromASLayoutableAsciiArtProtocol
    ToASLayoutElementAsciiArtProtocol
    -
    -
    - -
    - -
    -
    ASLog.h
    - -
    -
    Added #def ASProfilingSignpost
    -
    Added #def ASProfilingSignpostStart
    -
    Added #def ASProfilingSignpostEnd
    -
    - -
    - -
    -
    ASMapNode.h
    - -
    -
    Added ASMapNode.imageForStaticMapAnnotationBlock
    -
    - -
    - -
    -
    ASObjectDescriptionHelpers.h
    - -
    -
    Added ASDebugDescriptionProvider
    -
    Added -[ASDebugDescriptionProvider propertiesForDebugDescription]
    -
    Added ASDescriptionProvider
    -
    Added -[ASDescriptionProvider propertiesForDescription]
    -
    Added ASObjectDescriptionMakeWithoutObject()
    -
    Added ASObjectDescriptionMake()
    -
    Added ASObjectDescriptionMakeTiny()
    -
    Added ASStringWithQuotesIfMultiword()
    -
    - -
    - -
    -
    ASPagerNode.h
    - -
    -
    Removed -[ASPagerDataSource pagerNode:constrainedSizeForNodeAtIndexPath:]
    -
    - - -
    -
    Added -[ASPagerDelegate pagerNode:constrainedSizeForNodeAtIndex:]
    -
    - -
    - -
    -
    ASRangeController.h
    - -
    -
    Added -[ASRangeControllerDataSource nameForRangeControllerDataSource]
    -
    - -
    - -
    -
    ASRelativeLayoutSpec.h
    - -
    -
    Added ASRelativeLayoutSpecPositionNone
    -
    - -
    - -
    -
    ASRelativeSize.h
    - -
    -
    Removed ASRelativeSize
    -
    Removed ASRelativeSizeMakeWithPercent()
    -
    Removed ASRelativeSizeResolveSize()
    -
    Removed ASRelativeSizeRangeMakeWithExactPercent()
    -
    - - -
    -
    Modified ASRelativeSizeRange
    - - - - -
    Header
    FromASRelativeSize.h
    ToASDimension.h
    -
    -
    Modified ASRelativeSizeRangeUnconstrained
    - - - - -
    Header
    FromASRelativeSize.h
    ToASDimension.h
    -
    -
    Modified ASRelativeSizeMake()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeMakeWithCGSize()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeEqualToRelativeSize()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified NSStringFromASRelativeSize()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeRangeMake()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeRangeMakeWithExactRelativeSize()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeRangeMakeWithExactCGSize()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeRangeMakeWithExactRelativeDimensions()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeRangeEqualToRelativeSizeRange()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    Modified ASRelativeSizeRangeResolve()
    - - - - -
    HeaderAvailability
    FromASRelativeSize.hAvailable
    ToASDimension.hDeprecated
    -
    -
    - -
    - -
    -
    ASRunLoopQueue.h
    - -
    -
    Added ASRunLoopQueue.ensureExclusiveMembership
    -
    Added ASDeallocQueue
    -
    Added +[ASDeallocQueue sharedDeallocationQueue]
    -
    Added -[ASDeallocQueue releaseObjectInBackground:]
    -
    - -
    - -
    -
    ASSectionContext.h
    - -
    -
    Added ASSectionContext
    -
    Added ASSectionContext.sectionName
    -
    Added ASSectionContext.collectionView
    -
    - -
    - -
    -
    ASStackLayoutable.h
    - -
    -
    Removed ASStackLayoutable
    -
    Removed ASStackLayoutable.spacingBefore
    -
    Removed ASStackLayoutable.spacingAfter
    -
    Removed ASStackLayoutable.flexGrow
    -
    Removed ASStackLayoutable.flexShrink
    -
    Removed ASStackLayoutable.flexBasis
    -
    Removed ASStackLayoutable.alignSelf
    -
    Removed ASStackLayoutable.ascender
    -
    Removed ASStackLayoutable.descender
    -
    - -
    - -
    -
    ASStackLayoutElement.h
    - -
    -
    Added ASStackLayoutElement
    -
    Added ASStackLayoutElement.spacingBefore
    -
    Added ASStackLayoutElement.spacingAfter
    -
    Added ASStackLayoutElement.flexGrow
    -
    Added ASStackLayoutElement.flexShrink
    -
    Added ASStackLayoutElement.flexBasis
    -
    Added ASStackLayoutElement.alignSelf
    -
    Added ASStackLayoutElement.ascender
    -
    Added ASStackLayoutElement.descender
    -
    - -
    - -
    -
    ASStaticLayoutable.h
    - -
    -
    Removed ASStaticLayoutable
    -
    Removed ASStaticLayoutable.sizeRange
    -
    Removed ASStaticLayoutable.layoutPosition
    -
    - -
    - -
    -
    ASStaticLayoutSpec.h
    - -
    -
    Modified ASStaticLayoutSpec
    - - - - -
    HeaderSuperclass
    FromASStaticLayoutSpec.hASLayoutSpec
    ToASAbsoluteLayoutSpec.hASAbsoluteLayoutSpec
    -
    -
    - -
    - -
    -
    ASTableNode.h
    - -
    -
    Added ASTableNode.allowsSelection
    -
    Added ASTableNode.allowsSelectionDuringEditing
    -
    Added ASTableNode.allowsMultipleSelection
    -
    Added ASTableNode.allowsMultipleSelectionDuringEditing
    -
    Added -[ASTableNode tuningParametersForRangeType:]
    -
    Added -[ASTableNode setTuningParameters:forRangeType:]
    -
    Added -[ASTableNode tuningParametersForRangeMode:rangeType:]
    -
    Added -[ASTableNode setTuningParameters:forRangeMode:rangeType:]
    -
    Added -[ASTableNode scrollToRowAtIndexPath:atScrollPosition:animated:]
    -
    Added -[ASTableNode reloadDataWithCompletion:]
    -
    Added -[ASTableNode reloadData]
    -
    Added -[ASTableNode relayoutItems]
    -
    Added -[ASTableNode performBatchAnimated:updates:completion:]
    -
    Added -[ASTableNode performBatchUpdates:completion:]
    -
    Added -[ASTableNode waitUntilAllUpdatesAreCommitted]
    -
    Added -[ASTableNode insertSections:withRowAnimation:]
    -
    Added -[ASTableNode deleteSections:withRowAnimation:]
    -
    Added -[ASTableNode reloadSections:withRowAnimation:]
    -
    Added -[ASTableNode moveSection:toSection:]
    -
    Added -[ASTableNode insertRowsAtIndexPaths:withRowAnimation:]
    -
    Added -[ASTableNode deleteRowsAtIndexPaths:withRowAnimation:]
    -
    Added -[ASTableNode reloadRowsAtIndexPaths:withRowAnimation:]
    -
    Added -[ASTableNode moveRowAtIndexPath:toIndexPath:]
    -
    Added -[ASTableNode selectRowAtIndexPath:animated:scrollPosition:]
    -
    Added -[ASTableNode deselectRowAtIndexPath:animated:]
    -
    Added -[ASTableNode numberOfRowsInSection:]
    -
    Added ASTableNode.numberOfSections
    -
    Added ASTableNode.visibleNodes
    -
    Added -[ASTableNode nodeForRowAtIndexPath:]
    -
    Added -[ASTableNode indexPathForNode:]
    -
    Added -[ASTableNode rectForRowAtIndexPath:]
    -
    Added -[ASTableNode cellForRowAtIndexPath:]
    -
    Added ASTableNode.indexPathForSelectedRow
    -
    Added ASTableNode.indexPathsForSelectedRows
    -
    Added -[ASTableNode indexPathForRowAtPoint:]
    -
    Added -[ASTableNode indexPathsForRowsInRect:]
    -
    Added -[ASTableNode indexPathsForVisibleRows]
    -
    Added -[ASTableDataSource numberOfSectionsInTableNode:]
    -
    Added -[ASTableDataSource tableNode:numberOfRowsInSection:]
    -
    Added -[ASTableDataSource tableNode:nodeBlockForRowAtIndexPath:]
    -
    Added -[ASTableDataSource tableNode:nodeForRowAtIndexPath:]
    -
    Added -[ASTableDelegate tableNode:willDisplayRowWithNode:]
    -
    Added -[ASTableDelegate tableNode:didEndDisplayingRowWithNode:]
    -
    Added -[ASTableDelegate tableNode:willSelectRowAtIndexPath:]
    -
    Added -[ASTableDelegate tableNode:didSelectRowAtIndexPath:]
    -
    Added -[ASTableDelegate tableNode:willDeselectRowAtIndexPath:]
    -
    Added -[ASTableDelegate tableNode:didDeselectRowAtIndexPath:]
    -
    Added -[ASTableDelegate tableNode:shouldHighlightRowAtIndexPath:]
    -
    Added -[ASTableDelegate tableNode:didHighlightRowAtIndexPath:]
    -
    Added -[ASTableDelegate tableNode:didUnhighlightRowAtIndexPath:]
    -
    Added -[ASTableDelegate tableNode:shouldShowMenuForRowAtIndexPath:]
    -
    Added -[ASTableDelegate tableNode:canPerformAction:forRowAtIndexPath:withSender:]
    -
    Added -[ASTableDelegate tableNode:performAction:forRowAtIndexPath:withSender:]
    -
    Added -[ASTableDelegate tableNode:constrainedSizeForRowAtIndexPath:]
    -
    Added -[ASTableDelegate tableNode:willBeginBatchFetchWithContext:]
    -
    Added -[ASTableDelegate shouldBatchFetchForTableNode:]
    -
    Added -[ASTableDelegate tableView:willDisplayNode:forRowAtIndexPath:]
    -
    - - -
    -
    Modified ASTableDataSource
    - - - - -
    HeaderProtocols
    FromASTableView.hASCommonTableViewDataSource, NSObject
    ToASTableNode.hASCommonTableDataSource, NSObject
    -
    -
    Modified -[ASTableDataSource tableView:nodeForRowAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode's method instead.
    -
    -
    Modified -[ASTableDataSource tableView:nodeBlockForRowAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode's method instead.
    -
    -
    Modified ASTableDelegate
    - - - - -
    Header
    FromASTableView.h
    ToASTableNode.h
    -
    -
    Modified -[ASTableDelegate tableView:didEndDisplayingNode:forRowAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode's method instead.
    -
    -
    Modified -[ASTableDelegate tableView:willBeginBatchFetchWithContext:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode's method instead.
    -
    -
    Modified -[ASTableDelegate shouldBatchFetchForTableView:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode's method instead.
    -
    -
    Modified -[ASTableDelegate tableView:constrainedSizeForRowAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode's method instead.
    -
    -
    Modified -[ASTableDelegate tableView:willDisplayNodeForRowAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode's method instead.
    -
    -
    - -
    - -
    -
    ASTableView.h
    - -
    -
    Removed -[ASTableDelegate tableView:didEndDisplayingNodeForRowAtIndexPath:]
    -
    Removed -[ASTableView initWithFrame:style:asyncDataFetching:]
    -
    - - -
    -
    Added ASTableView.tableNode
    -
    Added -[ASTableView cellForRowAtIndexPath:]
    -
    Added -[ASTableView scrollToRowAtIndexPath:atScrollPosition:animated:]
    -
    Added -[ASTableView selectRowAtIndexPath:animated:scrollPosition:]
    -
    Added ASTableView.indexPathForSelectedRow
    -
    Added ASTableView.indexPathsForSelectedRows
    -
    Added ASTableView.indexPathsForVisibleRows
    -
    Added -[ASTableView indexPathForRowAtPoint:]
    -
    Added -[ASTableView indexPathsForRowsInRect:]
    -
    - - -
    -
    Modified -[ASTableView initWithFrame:style:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedPlease use ASTableNode instead of ASTableView.
    -
    -
    Modified -[ASTableView tuningParametersForRangeType:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView setTuningParameters:forRangeType:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView tuningParametersForRangeMode:rangeType:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView setTuningParameters:forRangeMode:rangeType:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView visibleNodes]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView indexPathForNode:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView reloadDataWithCompletion:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView reloadData]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView reloadDataImmediately]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode's reloadDataWithCompletion: followed by ASTableNode's -waitUntilAllUpdatesAreCommitted instead.
    -
    -
    Modified -[ASTableView relayoutItems]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView beginUpdates]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode's -performBatchUpdates:completion: instead.
    -
    -
    Modified -[ASTableView endUpdates]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode's -performBatchUpdates:completion: instead.
    -
    -
    Modified -[ASTableView endUpdatesAnimated:completion:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode's -performBatchUpdates:completion: instead.
    -
    -
    Modified -[ASTableView waitUntilAllUpdatesAreCommitted]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView insertSections:withRowAnimation:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView deleteSections:withRowAnimation:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView reloadSections:withRowAnimation:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView moveSection:toSection:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView insertRowsAtIndexPaths:withRowAnimation:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView deleteRowsAtIndexPaths:withRowAnimation:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView reloadRowsAtIndexPaths:withRowAnimation:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView moveRowAtIndexPath:toIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse ASTableNode method instead.
    -
    -
    Modified -[ASTableView clearContents]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedYou should not call this method directly. Intead, rely on the Interstate State callback methods.
    -
    -
    Modified -[ASTableView clearFetchedData]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedYou should not call this method directly. Intead, rely on the Interstate State callback methods.
    -
    -
    Modified ASTableViewDataSource
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedRenamed to ASTableDataSource.
    -
    -
    Modified ASTableViewDelegate
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedRenamed to ASTableDelegate.
    -
    -
    Modified ASTableDataSource
    - - - - -
    HeaderProtocols
    FromASTableView.hASCommonTableViewDataSource, NSObject
    ToASTableNode.hASCommonTableDataSource, NSObject
    -
    -
    Modified ASTableDelegate
    - - - - -
    Header
    FromASTableView.h
    ToASTableNode.h
    -
    -
    - -
    - -
    -
    ASTableViewProtocols.h
    - -
    -
    Removed ASCommonTableViewDataSource
    -
    Removed -[ASCommonTableViewDataSource tableView:numberOfRowsInSection:]
    -
    Removed -[ASCommonTableViewDataSource numberOfSectionsInTableView:]
    -
    Removed -[ASCommonTableViewDataSource tableView:titleForHeaderInSection:]
    -
    Removed -[ASCommonTableViewDataSource tableView:titleForFooterInSection:]
    -
    Removed -[ASCommonTableViewDataSource tableView:canEditRowAtIndexPath:]
    -
    Removed -[ASCommonTableViewDataSource tableView:canMoveRowAtIndexPath:]
    -
    Removed -[ASCommonTableViewDataSource sectionIndexTitlesForTableView:]
    -
    Removed -[ASCommonTableViewDataSource tableView:sectionForSectionIndexTitle:atIndex:]
    -
    Removed -[ASCommonTableViewDataSource tableView:commitEditingStyle:forRowAtIndexPath:]
    -
    Removed -[ASCommonTableViewDataSource tableView:moveRowAtIndexPath:toIndexPath:]
    -
    - - -
    -
    Added ASCommonTableDataSource
    -
    Added -[ASCommonTableDataSource tableView:numberOfRowsInSection:]
    -
    Added -[ASCommonTableDataSource numberOfSectionsInTableView:]
    -
    Added -[ASCommonTableDataSource tableView:titleForHeaderInSection:]
    -
    Added -[ASCommonTableDataSource tableView:titleForFooterInSection:]
    -
    Added -[ASCommonTableDataSource tableView:canEditRowAtIndexPath:]
    -
    Added -[ASCommonTableDataSource tableView:canMoveRowAtIndexPath:]
    -
    Added -[ASCommonTableDataSource sectionIndexTitlesForTableView:]
    -
    Added -[ASCommonTableDataSource tableView:sectionForSectionIndexTitle:atIndex:]
    -
    Added -[ASCommonTableDataSource tableView:commitEditingStyle:forRowAtIndexPath:]
    -
    Added -[ASCommonTableDataSource tableView:moveRowAtIndexPath:toIndexPath:]
    -
    - - -
    -
    Modified -[ASCommonTableViewDelegate tableView:shouldHighlightRowAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedImplement -tableNode:shouldHighlightRowAtIndexPath: instead.
    -
    -
    Modified -[ASCommonTableViewDelegate tableView:didHighlightRowAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedImplement -tableNode:didHighlightRowAtIndexPath: instead.
    -
    -
    Modified -[ASCommonTableViewDelegate tableView:didUnhighlightRowAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedImplement -tableNode:didUnhighlightRowAtIndexPath: instead.
    -
    -
    Modified -[ASCommonTableViewDelegate tableView:willSelectRowAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedImplement -tableNode:willSelectRowAtIndexPath: instead.
    -
    -
    Modified -[ASCommonTableViewDelegate tableView:willDeselectRowAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedImplement -tableNode:willDeselectRowAtIndexPath: instead.
    -
    -
    Modified -[ASCommonTableViewDelegate tableView:didSelectRowAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedImplement -tableNode:didSelectRowAtIndexPath: instead.
    -
    -
    Modified -[ASCommonTableViewDelegate tableView:didDeselectRowAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedImplement -tableNode:didDeselectRowAtIndexPath: instead.
    -
    -
    Modified -[ASCommonTableViewDelegate tableView:shouldShowMenuForRowAtIndexPath:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedImplement -tableNode:shouldShowMenuForRowAtIndexPath: instead.
    -
    -
    Modified -[ASCommonTableViewDelegate tableView:canPerformAction:forRowAtIndexPath:withSender:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedImplement -tableNode:canPerformAction:forRowAtIndexPath:withSender: instead.
    -
    -
    Modified -[ASCommonTableViewDelegate tableView:performAction:forRowAtIndexPath:withSender:]
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedImplement -tableNode:performAction:forRowAtIndexPath:withSender: instead.
    -
    -
    - -
    - -
    -
    ASTextNode.h
    - -
    -
    Added ASTextNode (Unavailable)
    -
    - - -
    -
    Modified ASTextNode.attributedString
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse .attributedText instead.
    -
    -
    Modified ASTextNode.truncationAttributedString
    - - - - -
    AvailabilityDeprecation Message
    FromAvailablenone
    ToDeprecatedUse .truncationAttributedText instead.
    -
    -
    - -
    - -
    -
    ASTraceEvent.h
    - -
    -
    Added ASTraceEvent
    -
    Added -[ASTraceEvent initWithObject:backtrace:format:arguments:]
    -
    Added ASTraceEvent.backtrace
    -
    Added ASTraceEvent.message
    -
    Added ASTraceEvent.timestamp
    -
    - -
    - -
    -
    ASVideoNode.h
    - -
    -
    Removed -[ASVideoNodeDelegate videoPlaybackDidFinish:]
    -
    Removed -[ASVideoNodeDelegate videoNodeWasTapped:]
    -
    Removed -[ASVideoNodeDelegate videoNode:didPlayToSecond:]
    -
    - - -
    -
    Added ASVideoNode.playerLayer
    -
    Added ASVideoNode (Unavailable)
    -
    - -
    - -
    -
    ASViewController.h
    - -
    -
    Added ASViewController (Unavailable)
    -
    - -
    - -
    -
    ASWeakSet.h
    - -
    -
    Added ASWeakSet
    -
    Added ObjectType
    -
    Added ASWeakSet.empty
    -
    Added -[ASWeakSet containsObject:]
    -
    Added -[ASWeakSet addObject:]
    -
    Added -[ASWeakSet removeObject:]
    -
    Added -[ASWeakSet removeAllObjects]
    -
    Added -[ASWeakSet allObjects]
    -
    Added ASWeakSet.count
    -
    - -
    - -
    -
    AsyncDisplayKit+Debug.h
    - -
    -
    Added ASRangeController (Debugging)
    -
    Added +[ASRangeController setShouldShowRangeDebugOverlay:]
    -
    Added +[ASRangeController shouldShowRangeDebugOverlay]
    -
    Added +[ASRangeController layoutDebugOverlayIfNeeded]
    -
    Added -[ASRangeController addRangeControllerToRangeDebugOverlay]
    -
    Added -[ASRangeController updateRangeController:withScrollableDirections:scrollDirection:rangeMode:displayTuningParameters:preloadTuningParameters:interfaceState:]
    -
    - -
    - -
    -
    CGRect+ASConvenience.h
    - -
    -
    Modified ASDirectionalScreenfulBuffer
    - - - - -
    Header
    FromCGRect+ASConvenience.h
    ToCoreGraphics+ASConvenience.h
    -
    -
    Modified ASDirectionalScreenfulBufferHorizontal()
    - - - - -
    Header
    FromCGRect+ASConvenience.h
    ToCoreGraphics+ASConvenience.h
    -
    -
    Modified ASDirectionalScreenfulBufferVertical()
    - - - - -
    Header
    FromCGRect+ASConvenience.h
    ToCoreGraphics+ASConvenience.h
    -
    -
    Modified CGRectExpandToRangeWithScrollableDirections()
    - - - - -
    Header
    FromCGRect+ASConvenience.h
    ToCoreGraphics+ASConvenience.h
    -
    -
    - -
    - -
    -
    CoreGraphics+ASConvenience.h
    - -
    -
    Added #def CGFLOAT_EPSILON
    -
    Added ASCGFloatFromString()
    -
    Added ASCGFloatFromNumber()
    -
    Added CGSizeEqualToSizeWithIn()
    -
    - - -
    -
    Modified ASDirectionalScreenfulBuffer
    - - - - -
    Header
    FromCGRect+ASConvenience.h
    ToCoreGraphics+ASConvenience.h
    -
    -
    Modified ASDirectionalScreenfulBufferHorizontal()
    - - - - -
    Header
    FromCGRect+ASConvenience.h
    ToCoreGraphics+ASConvenience.h
    -
    -
    Modified ASDirectionalScreenfulBufferVertical()
    - - - - -
    Header
    FromCGRect+ASConvenience.h
    ToCoreGraphics+ASConvenience.h
    -
    -
    Modified CGRectExpandToRangeWithScrollableDirections()
    - - - - -
    Header
    FromCGRect+ASConvenience.h
    ToCoreGraphics+ASConvenience.h
    -
    -
    - -
    - -
    -
    NSArray+Diffing.h
    - -
    -
    Added NSArray (Diffing)
    -
    Added -[NSArray asdk_diffWithArray:insertions:deletions:]
    -
    Added -[NSArray asdk_diffWithArray:insertions:deletions:compareBlock:]
    -
    - -
    - -
    -
    UIView+ASConvenience.h
    - -
    -
    Added ASDisplayProperties.allowsGroupOpacity
    -
    - -
    - - diff --git a/submodules/AsyncDisplayKit/docs/apidiff/apidiff.css b/submodules/AsyncDisplayKit/docs/apidiff/apidiff.css deleted file mode 100755 index 822ae40118..0000000000 --- a/submodules/AsyncDisplayKit/docs/apidiff/apidiff.css +++ /dev/null @@ -1,87 +0,0 @@ -body { - font: 12px 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif; - margin: 0; - padding: 0 2em 2em 2em; -} - -h1 { - margin-top: 30px; - margin-bottom: 30px; - font-size: 28px; - font-weight: bold; -} - -.headerFile { - margin-left: 20px; -} - -.headerName { - margin: 15px 0px 10px -20px; - padding: 4px 4px 4px 20px; - font-weight: bold; - font-size: 120%; - background-color: #f8f8f8; -} - -.differenceGroup { - margin-top: 5px; -} - -.difference { - padding-left: 20px; - font-family: Courier, Consolas, monospace; - font-size: 110%; -} - -.status { - font-style: italic; - font-size: 80%; -} - -.removed { - color: red; -} - -.added { - color: blue; -} - -.modified { - color: #080; -} - -.declaration { - font-family: Courier, Consolas, monospace; -} - -table { - border: 1px #888 solid; - padding: 2px; - border-spacing: 0px; - border-collapse: collapse; - margin-left: 40px; - margin-top: 7px; -} - -td, th { - font-size: 10px; - border: 1px #888 solid; - padding:3px 6px; -} - -th { - font-size: 10px; - text-align: center; - background-color: #eee; -} - -td { - font-size: 90%; - text-align: left; -} - -.message { - margin-left: 20px; - font-style: italic; - color: #888; -} diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Blocks/ASDisplayNodeContextModifier.html b/submodules/AsyncDisplayKit/docs/appledoc/Blocks/ASDisplayNodeContextModifier.html deleted file mode 100755 index f52dec6351..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Blocks/ASDisplayNodeContextModifier.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - ASDisplayNodeContextModifier Block Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASDisplayNodeContextModifier Block Reference

    - - -
    - - - - -
    Declared inASDisplayNode.h
    - - - - - - - - - - -

    Block Definition

    -

    ASDisplayNodeContextModifier

    - - -
    -

    ASDisplayNode will / did render node content in context.

    -
    - - - -typedef void (^ASDisplayNodeContextModifier) (CGContextRef context) - - - - - - - - - - - -
    -

    Declared In

    - ASDisplayNode.h
    -
    - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Blocks/ASDisplayNodeDidLoadBlock.html b/submodules/AsyncDisplayKit/docs/appledoc/Blocks/ASDisplayNodeDidLoadBlock.html deleted file mode 100755 index eba4dee2c3..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Blocks/ASDisplayNodeDidLoadBlock.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - ASDisplayNodeDidLoadBlock Block Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASDisplayNodeDidLoadBlock Block Reference

    - - -
    - - - - -
    Declared inASDisplayNode.h
    - - - - - - - - - - -

    Block Definition

    -

    ASDisplayNodeDidLoadBlock

    - - -
    -

    ASDisplayNode loaded callback block. This block is called BEFORE the -didLoad method and is always called on the main thread.

    -
    - - - -typedef void (^ASDisplayNodeDidLoadBlock) (__kindof ASDisplayNode, * node) - - - - - - - - - - - -
    -

    Declared In

    - ASDisplayNode.h
    -
    - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASCellNode+.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASCellNode+.html deleted file mode 100755 index 23e0e26c26..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASCellNode+.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - ASCellNode() Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - Texture -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCellNode() Category Reference

    - - -
    - - - - -
    Declared inASCellNode+Internal.h
    - - - - - - -
    - - - - - - -
    -
    - -

      layoutAttributes -

    - -
    -
    - -
    - - -
    -

    This could be declared @c copy, but since this is only settable internally, we can ensure -that it’s always safe simply to retain it, and copy if needed. Since @c UICollectionViewLayoutAttributes -is always mutable, @c copy is never “free” like it is for e.g. NSString.

    -
    - - - -
    @property (nonatomic, strong, nullable) UICollectionViewLayoutAttributes *layoutAttributes
    - - - - - - - - - -
    -

    Discussion

    -

    Note: This could be declared @c copy, but since this is only settable internally, we can ensure -that it’s always safe simply to retain it, and copy if needed. Since @c UICollectionViewLayoutAttributes -is always mutable, @c copy is never “free” like it is for e.g. NSString.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCellNode+Internal.h

    -
    - - -
    -
    -
    - -

      supplementaryElementKind -

    - -
    -
    - -
    - - -
    -

    readwrite variant of the readonly public property.

    -
    - - - -
    @property (nonatomic, copy, nullable) NSString *supplementaryElementKind
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCellNode+Internal.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - - -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASCollectionNode+Deprecated.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASCollectionNode+Deprecated.html deleted file mode 100755 index 3a528cffbd..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASCollectionNode+Deprecated.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - ASCollectionNode(Deprecated) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCollectionNode(Deprecated) Category Reference

    - - -
    - - - - -
    Declared inASCollectionNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – reloadDataImmediately -

    - -
    -
    - -
    - - -
    -

    Reload everything from scratch, destroying the working range and all cached nodes. (Deprecated: This method is deprecated in 2.0. Use @c reloadDataWithCompletion: and -then @c waitUntilAllUpdatesAreCommitted instead.)

    -
    - - - -
    - (void)reloadDataImmediately
    - - - - - - - - - -
    -

    Discussion

    -

    Warning: This method is substantially more expensive than UICollectionView’s version.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASCollectionView+Deprecated.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASCollectionView+Deprecated.html deleted file mode 100755 index 9d4741fee3..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASCollectionView+Deprecated.html +++ /dev/null @@ -1,1616 +0,0 @@ - - - - - - ASCollectionView(Deprecated) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCollectionView(Deprecated) Category Reference

    - - -
    - - - - -
    Declared inASCollectionView.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – initWithCollectionViewLayout: -

    - -
    -
    - -
    - - -
    -

    Initializes an ASCollectionView

    -
    - - - -
    - (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout
    - - - -
    -

    Parameters

    - - - - - - - -
    layout

    The layout object to use for organizing items. The collection view stores a strong reference to the specified object. Must not be nil.

    -
    - - - - - - - -
    -

    Discussion

    -

    Initializes and returns a newly allocated collection view object with the specified layout.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – initWithFrame:collectionViewLayout: -

    - -
    -
    - -
    - - -
    -

    Initializes an ASCollectionView

    -
    - - - -
    - (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    frame

    The frame rectangle for the collection view, measured in points. The origin of the frame is relative to the superview in which you plan to add it. This frame is passed to the superclass during initialization.

    layout

    The layout object to use for organizing items. The collection view stores a strong reference to the specified object. Must not be nil.

    -
    - - - - - - - -
    -

    Discussion

    -

    Initializes and returns a newly allocated collection view object with the specified frame and layout.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – tuningParametersForRangeType: -

    - -
    -
    - -
    - - -
    -

    Tuning parameters for a range type in full mode.

    -
    - - - -
    - (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - -
    rangeType

    The range type to get the tuning parameters for.

    -
    - - - -
    -

    Return Value

    -

    A tuning parameter value for the given range type in full mode.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – setTuningParameters:forRangeType: -

    - -
    -
    - -
    - - -
    -

    Set the tuning parameters for a range type in full mode.

    -
    - - - -
    - (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    tuningParameters

    The tuning parameters to store for a range type.

    rangeType

    The range type to set the tuning parameters for.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – tuningParametersForRangeMode:rangeType: -

    - -
    -
    - -
    - - -
    -

    Tuning parameters for a range type in the specified mode.

    -
    - - - -
    - (ASRangeTuningParameters)tuningParametersForRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    rangeMode

    The range mode to get the running parameters for.

    rangeType

    The range type to get the tuning parameters for.

    -
    - - - -
    -

    Return Value

    -

    A tuning parameter value for the given range type in the given mode.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – setTuningParameters:forRangeMode:rangeType: -

    - -
    -
    - -
    - - -
    -

    Set the tuning parameters for a range type in the specified mode.

    -
    - - - -
    - (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    tuningParameters

    The tuning parameters to store for a range type.

    rangeMode

    The range mode to set the running parameters for.

    rangeType

    The range type to set the tuning parameters for.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – performBatchAnimated:updates:completion: -

    - -
    -
    - -
    - - -
    -

    Perform a batch of updates asynchronously, optionally disabling all animations in the batch. This method must be called from the main thread. -The asyncDataSource must be updated to reflect the changes before the update block completes.

    -
    - - - -
    - (void)performBatchAnimated:(BOOL)animated updates:(nullable __attribute ( ( noescape ) ) void ( ^ ) ( ))updates completion:(nullable void ( ^ ) ( BOOL finished ))completion
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    animated

    NO to disable animations for this batch

    updates

    The block that performs the relevant insert, delete, reload, or move operations.

    completion

    A completion handler block to execute when all of the operations are finished. This block takes a single -Boolean parameter that contains the value YES if all of the related animations completed successfully or -NO if they were interrupted. This parameter may be nil. If supplied, the block is run on the main thread.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – performBatchUpdates:completion: -

    - -
    -
    - -
    - - -
    -

    Perform a batch of updates asynchronously. This method must be called from the main thread. -The asyncDataSource must be updated to reflect the changes before update block completes.

    -
    - - - -
    - (void)performBatchUpdates:(nullable __attribute ( ( noescape ) ) void ( ^ ) ( ))updates completion:(nullable void ( ^ ) ( BOOL finished ))completion
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    updates

    The block that performs the relevant insert, delete, reload, or move operations.

    completion

    A completion handler block to execute when all of the operations are finished. This block takes a single -Boolean parameter that contains the value YES if all of the related animations completed successfully or -NO if they were interrupted. This parameter may be nil. If supplied, the block is run on the main thread.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – reloadDataWithCompletion: -

    - -
    -
    - -
    - - -
    -

    Reload everything from scratch, destroying the working range and all cached nodes.

    -
    - - - -
    - (void)reloadDataWithCompletion:(nullable void ( ^ ) ( ))completion
    - - - -
    -

    Parameters

    - - - - - - - -
    completion

    block to run on completion of asynchronous loading or nil. If supplied, the block is run on -the main thread.

    -
    - - - - - - - -
    -

    Discussion

    -

    Warning: This method is substantially more expensive than UICollectionView’s version.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – reloadData -

    - -
    -
    - -
    - - -
    -

    Reload everything from scratch, destroying the working range and all cached nodes.

    -
    - - - -
    - (void)reloadData
    - - - - - - - - - -
    -

    Discussion

    -

    Warning: This method is substantially more expensive than UICollectionView’s version.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – reloadDataImmediately -

    - -
    -
    - -
    - - -
    -

    Reload everything from scratch entirely on the main thread, destroying the working range and all cached nodes.

    -
    - - - -
    - (void)reloadDataImmediately
    - - - - - - - - - -
    -

    Discussion

    -

    Warning: This method is substantially more expensive than UICollectionView’s version and will block the main thread -while all the cells load.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – relayoutItems -

    - -
    -
    - -
    - - -
    -

    Triggers a relayout of all nodes.

    -
    - - - -
    - (void)relayoutItems
    - - - - - - - - - -
    -

    Discussion

    -

    This method invalidates and lays out every cell node in the collection.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – waitUntilAllUpdatesAreCommitted -

    - -
    -
    - -
    - - -
    -

    Blocks execution of the main thread until all section and row updates are committed. This method must be called from the main thread.

    -
    - - - -
    - (void)waitUntilAllUpdatesAreCommitted
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – registerSupplementaryNodeOfKind: -

    - -
    -
    - -
    - - -
    -

    Registers the given kind of supplementary node for use in creating node-backed supplementary views.

    -
    - - - -
    - (void)registerSupplementaryNodeOfKind:(NSString *)elementKind
    - - - -
    -

    Parameters

    - - - - - - - -
    elementKind

    The kind of supplementary node that will be requested through the data source.

    -
    - - - - - - - -
    -

    Discussion

    -

    Use this method to register support for the use of supplementary nodes in place of the default -registerClass:forSupplementaryViewOfKind:withReuseIdentifier: and registerNib:forSupplementaryViewOfKind:withReuseIdentifier: -methods. This method will register an internal backing view that will host the contents of the supplementary nodes -returned from the data source.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – insertSections: -

    - -
    -
    - -
    - - -
    -

    Inserts one or more sections.

    -
    - - - -
    - (void)insertSections:(NSIndexSet *)sections
    - - - -
    -

    Parameters

    - - - - - - - -
    sections

    An index set that specifies the sections to insert.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – deleteSections: -

    - -
    -
    - -
    - - -
    -

    Deletes one or more sections.

    -
    - - - -
    - (void)deleteSections:(NSIndexSet *)sections
    - - - -
    -

    Parameters

    - - - - - - - -
    sections

    An index set that specifies the sections to delete.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – reloadSections: -

    - -
    -
    - -
    - - -
    -

    Reloads the specified sections.

    -
    - - - -
    - (void)reloadSections:(NSIndexSet *)sections
    - - - -
    -

    Parameters

    - - - - - - - -
    sections

    An index set that specifies the sections to reload.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – moveSection:toSection: -

    - -
    -
    - -
    - - -
    -

    Moves a section to a new location.

    -
    - - - -
    - (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    section

    The index of the section to move.

    newSection

    The index that is the destination of the move for the section.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – insertItemsAtIndexPaths: -

    - -
    -
    - -
    - - -
    -

    Inserts items at the locations identified by an array of index paths.

    -
    - - - -
    - (void)insertItemsAtIndexPaths:(NSArray<NSIndexPath*> *)indexPaths
    - - - -
    -

    Parameters

    - - - - - - - -
    indexPaths

    An array of NSIndexPath objects, each representing an item index and section index that together identify an item.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – deleteItemsAtIndexPaths: -

    - -
    -
    - -
    - - -
    -

    Deletes the items specified by an array of index paths.

    -
    - - - -
    - (void)deleteItemsAtIndexPaths:(NSArray<NSIndexPath*> *)indexPaths
    - - - -
    -

    Parameters

    - - - - - - - -
    indexPaths

    An array of NSIndexPath objects identifying the items to delete.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – reloadItemsAtIndexPaths: -

    - -
    -
    - -
    - - -
    -

    Reloads the specified items.

    -
    - - - -
    - (void)reloadItemsAtIndexPaths:(NSArray<NSIndexPath*> *)indexPaths
    - - - -
    -

    Parameters

    - - - - - - - -
    indexPaths

    An array of NSIndexPath objects identifying the items to reload.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – moveItemAtIndexPath:toIndexPath: -

    - -
    -
    - -
    - - -
    -

    Moves the item at a specified location to a destination location.

    -
    - - - -
    - (void)moveItemAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    indexPath

    The index path identifying the item to move.

    newIndexPath

    The index path that is the destination of the move for the item.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – calculatedSizeForNodeAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Query the sized node at @c indexPath for its calculatedSize.

    -
    - - - -
    - (CGSize)calculatedSizeForNodeAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - -
    indexPath

    The index path for the node of interest.

    - -

    This method is deprecated. Call @c calculatedSize on the node of interest instead. First deprecated in version 2.0.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – visibleNodes -

    - -
    -
    - -
    - - -
    -

    Similar to -visibleCells.

    -
    - - - -
    - (NSArray<__kindofASCellNode*> *)visibleNodes
    - - - - - -
    -

    Return Value

    -

    an array containing the nodes being displayed on screen.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – indexPathForNode: -

    - -
    -
    - -
    - - -
    -

    Similar to -indexPathForCell:.

    -
    - - - -
    - (nullable NSIndexPath *)indexPathForNode:(ASCellNode *)cellNode
    - - - -
    -

    Parameters

    - - - - - - - -
    cellNode

    a cellNode in the collection view

    -
    - - - -
    -

    Return Value

    -

    The index path for this cell node.

    -
    - - - - - -
    -

    Discussion

    -

    This index path returned by this method is in the view’s index space -and should only be used with @c ASCollectionView directly. To get an index path suitable -for use with your data source and @c ASCollectionNode, call @c indexPathForNode: on the -collection node instead.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASControlNode+Debugging.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASControlNode+Debugging.html deleted file mode 100755 index 5f1703f06c..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASControlNode+Debugging.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - ASControlNode(Debugging) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASControlNode(Debugging) Category Reference

    - - -
    - - - - -
    Declared inAsyncDisplayKit+Debug.h
    - - - - - - -
    - - - - - - -
    -
    - -

    + setEnableHitTestDebug: -

    - -
    -
    - -
    - - -
    -

    Class method to enable a visualization overlay of the tappable area on the ASControlNode. For app debugging purposes only. -NOTE: GESTURE RECOGNIZERS, (including tap gesture recognizers on a control node) WILL NOT BE VISUALIZED!!! -Overlay = translucent GREEN color, -edges that are clipped by the tappable area of any parent (their bounds + hitTestSlop) in the hierarchy = DARK GREEN BORDERED EDGE, -edges that are clipped by clipToBounds = YES of any parent in the hierarchy = ORANGE BORDERED EDGE (may still receive touches beyond -overlay rect, but can’t be visualized).

    -
    - - - -
    + (void)setEnableHitTestDebug:(BOOL)enable
    - - - -
    -

    Parameters

    - - - - - - - -
    enable

    Specify YES to make this debug feature enabled when messaging the ASControlNode class.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    AsyncDisplayKit+Debug.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASControlNode+Subclassing.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASControlNode+Subclassing.html deleted file mode 100755 index cfff640cdc..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASControlNode+Subclassing.html +++ /dev/null @@ -1,497 +0,0 @@ - - - - - - ASControlNode(Subclassing) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASControlNode(Subclassing) Category Reference

    - - -
    - - - - -
    Declared inASControlNode+Subclasses.h
    - - - - -
    - -

    Overview

    -

    The subclass header ASControlNode+Subclasses defines methods to be -overridden by custom nodes that subclass ASControlNode.

    - -

    These methods should never be called directly by other classes.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – sendActionsForControlEvents:withEvent: -

    - -
    -
    - -
    - - -
    -

    Sends action messages for the given control events.

    -
    - - - -
    - (void)sendActionsForControlEvents:(ASControlNodeEvent)controlEvents withEvent:(nullable UIEvent *)touchEvent
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    controlEvents

    A bitmask whose set flags specify the control events for which action messages are sent. See “Control Events” in ASControlNode.h for bitmask constants.

    touchEvent

    An event object encapsulating the information specific to the user event.

    -
    - - - - - - - -
    -

    Discussion

    -

    ASControlNode implements this method to send all action messages associated with controlEvents. The list of targets is constructed from prior invocations of addTarget:action:forControlEvents:.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASControlNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – beginTrackingWithTouch:withEvent: -

    - -
    -
    - -
    - - -
    -

    Sent to the control when tracking begins.

    -
    - - - -
    - (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)touchEvent
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    touch

    The touch on the receiving control.

    touchEvent

    An event object encapsulating the information specific to the user event.

    -
    - - - -
    -

    Return Value

    -

    YES if the receiver should respond continuously (respond when touch is dragged); NO otherwise.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASControlNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – continueTrackingWithTouch:withEvent: -

    - -
    -
    - -
    - - -
    -

    Sent continuously to the control as it tracks a touch within the control’s bounds.

    -
    - - - -
    - (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)touchEvent
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    touch

    The touch on the receiving control.

    touchEvent

    An event object encapsulating the information specific to the user event.

    -
    - - - -
    -

    Return Value

    -

    YES if touch tracking should continue; NO otherwise.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASControlNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – cancelTrackingWithEvent: -

    - -
    -
    - -
    - - -
    -

    Sent to the control when tracking should be cancelled.

    -
    - - - -
    - (void)cancelTrackingWithEvent:(nullable UIEvent *)touchEvent
    - - - -
    -

    Parameters

    - - - - - - - -
    touchEvent

    An event object encapsulating the information specific to the user event. This parameter may be nil, indicating that the cancelation was caused by something other than an event, such as the display node being removed from its supernode.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASControlNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – endTrackingWithTouch:withEvent: -

    - -
    -
    - -
    - - -
    -

    Sent to the control when the last touch completely ends, telling it to stop tracking.

    -
    - - - -
    - (void)endTrackingWithTouch:(nullable UITouch *)touch withEvent:(nullable UIEvent *)touchEvent
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    touch

    The touch that ended.

    touchEvent

    An event object encapsulating the information specific to the user event.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASControlNode+Subclasses.h

    -
    - - -
    -
    -
    - -

      highlighted -

    - -
    -
    - -
    - - -
    -

    Settable version of highlighted property.

    -
    - - - -
    @property (nonatomic, readwrite, assign, getter=isHighlighted) BOOL highlighted
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASControlNode+Subclasses.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+AutomaticSubnodeManagement.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+AutomaticSubnodeManagement.html deleted file mode 100755 index d0bcbb6698..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+AutomaticSubnodeManagement.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - ASDisplayNode(AutomaticSubnodeManagement) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASDisplayNode(AutomaticSubnodeManagement) Category Reference

    - - -
    - - - - -
    Declared inASDisplayNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

      automaticallyManagesSubnodes -

    - -
    -
    - -
    - - -
    -

    A boolean that shows whether the node automatically inserts and removes nodes based on the presence or -absence of the node and its subnodes is completely determined in its layoutSpecThatFits: method.

    -
    - - - -
    @property (nonatomic, assign) BOOL automaticallyManagesSubnodes
    - - - - - - - - - -
    -

    Discussion

    -

    If flag is YES the node no longer require addSubnode: or removeFromSupernode method calls. The presence -or absence of subnodes is completely determined in its layoutSpecThatFits: method.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+Beta.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+Beta.html deleted file mode 100755 index 3e7b7af638..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+Beta.html +++ /dev/null @@ -1,635 +0,0 @@ - - - - - - ASDisplayNode(Beta) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASDisplayNode(Beta) Category Reference

    - - -
    - - - - -
    Declared inASDisplayNode+Beta.h
    - - - - - - -
    - - - - - - -
    -
    - -

    + suppressesInvalidCollectionUpdateExceptions -

    - -
    -
    - -
    - - -
    -

    ASTableView and ASCollectionView now throw exceptions on invalid updates -like their UIKit counterparts. If YES, these classes will log messages -on invalid updates rather than throwing exceptions.

    -
    - - - -
    + (BOOL)suppressesInvalidCollectionUpdateExceptions
    - - - - - - - - - -
    -

    Discussion

    -

    Note that even if AsyncDisplayKit’s exception is suppressed, the app may still crash -as it proceeds with an invalid update.

    - -

    This property defaults to NO. It will be removed in a future release.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Beta.h

    -
    - - -
    -
    -
    - -

    – recursivelyEnsureDisplaySynchronously: -

    - -
    -
    - -
    - - -
    -

    Recursively ensures node and all subnodes are displayed.

    -
    - - - -
    - (void)recursivelyEnsureDisplaySynchronously:(BOOL)synchronously
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Beta.h

    -
    - - -
    -
    -
    - -

      willDisplayNodeContentWithRenderingContext -

    - -
    -
    - -
    - - -
    -

    allow modification of a context before the node’s content is drawn

    -
    - - - -
    @property (nonatomic, copy, nullable) ASDisplayNodeContextModifier willDisplayNodeContentWithRenderingContext
    - - - - - - - - - -
    -

    Discussion

    -

    Set the block to be called after the context has been created and before the node’s content is drawn. -You can override this to modify the context before the content is drawn. You are responsible for saving and -restoring context if necessary. Restoring can be done in contextDidDisplayNodeContent -This block can be called from any thread and it is unsafe to access any UIKit main thread properties from it.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Beta.h

    -
    - - -
    -
    -
    - -

      didDisplayNodeContentWithRenderingContext -

    - -
    -
    - -
    - - -
    -

    allow modification of a context after the node’s content is drawn

    -
    - - - -
    @property (nonatomic, copy, nullable) ASDisplayNodeContextModifier didDisplayNodeContentWithRenderingContext
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Beta.h

    -
    - - -
    -
    -
    - -

      measurementOptions -

    - -
    -
    - -
    - - -
    -

    A bitmask representing which actions (layout spec, layout generation) should be measured.

    -
    - - - -
    @property (nonatomic, assign) ASDisplayNodePerformanceMeasurementOptions measurementOptions
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Beta.h

    -
    - - -
    -
    -
    - -

      performanceMeasurements -

    - -
    -
    - -
    - - -
    -

    A simple struct representing performance measurements collected.

    -
    - - - -
    @property (nonatomic, assign, readonly) ASDisplayNodePerformanceMeasurements performanceMeasurements
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Beta.h

    -
    - - -
    -
    -
    - -

    – placeholderShouldPersist -

    - -
    -
    - -
    - - -
    -

    Currently used by ASNetworkImageNode and ASMultiplexImageNode to allow their placeholders to stay if they are loading an image from the network. -Otherwise, a display pass is scheduled and completes, but does not actually draw anything - and ASDisplayNode considers the element finished.

    -
    - - - -
    - (BOOL)placeholderShouldPersist
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Beta.h

    -
    - - -
    -
    -
    - -

    – hierarchyDisplayDidFinish -

    - -
    -
    - -
    - - -
    -

    Indicates that the receiver and all subnodes have finished displaying. May be called more than once, for example if the receiver has -a network image node. This is called after the first display pass even if network image nodes have not downloaded anything (text would be done, -and other nodes that are ready to do their final display). Each render of every progressive jpeg network node would cause this to be called, so -this hook could be called up to 1 + (pJPEGcount * pJPEGrenderCount) times. The render count depends on how many times the downloader calls the -progressImage block.

    -
    - - - -
    - (void)hierarchyDisplayDidFinish
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Beta.h

    -
    - - -
    -
    -
    - -

    + setRangeModeForMemoryWarnings: -

    - -
    -
    - -
    - - -
    -

    Only ASLayoutRangeModeVisibleOnly or ASLayoutRangeModeLowMemory are recommended. Default is ASLayoutRangeModeVisibleOnly, -because this is the only way to ensure an application will not have blank / flashing views as the user navigates back after -a memory warning. Apps that wish to use the more effective / aggressive ASLayoutRangeModeLowMemory may need to take steps -to mitigate this behavior, including: restoring a larger range mode to the next controller before the user navigates there, -enabling .neverShowPlaceholders on ASCellNodes so that the navigation operation is blocked on redisplay completing, etc.

    -
    - - - -
    + (void)setRangeModeForMemoryWarnings:(ASLayoutRangeMode)rangeMode
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Beta.h

    -
    - - -
    -
    -
    - -

    – _logEventWithBacktrace:format: -

    - -
    -
    - -
    - - -
    -

    The primitive event tracing method. You shouldn’t call this. Use the ASDisplayNodeLogEvent macro instead.

    -
    - - - -
    - (void)_logEventWithBacktrace:(NSArray<NSString*> *)backtrace format:(NSString *)format, ...
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Beta.h

    -
    - - -
    -
    -
    - -

      eventLog -

    - -
    -
    - -
    - - -
    -

    The most recent trace events for this node. Max count is ASDISPLAYNODE_EVENTLOG_CAPACITY.

    -
    - - - -
    @property (readonly, copy) NSArray *eventLog
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Beta.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+Debugging.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+Debugging.html deleted file mode 100755 index 33e97cf949..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+Debugging.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - ASDisplayNode(Debugging) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASDisplayNode(Debugging) Category Reference

    - - -
    - - - - - - - -
    Conforms toASLayoutElementAsciiArtProtocol
    Declared inASDisplayNode.h
    - - - - -
    - -

    Overview

    -

    Convenience methods for debugging.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – displayNodeRecursiveDescription -

    - -
    -
    - -
    - - -
    -

    Return a description of the node hierarchy.

    -
    - - - -
    - (NSString *)displayNodeRecursiveDescription
    - - - - - - - - - -
    -

    Discussion

    -

    For debugging: (lldb) po [node displayNodeRecursiveDescription]

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+Deprecated.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+Deprecated.html deleted file mode 100755 index 5eb821eb29..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+Deprecated.html +++ /dev/null @@ -1,487 +0,0 @@ - - - - - - ASDisplayNode(Deprecated) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASDisplayNode(Deprecated) Category Reference

    - - -
    - - - - -
    Declared inASDisplayNode+Deprecated.h
    - - - - - - -
    - - - - - - -
    -
    - -

      ) -

    - -
    -
    - -
    - - -
    -

    The name of this node, which will be displayed in description. The default value is nil. (Deprecated: Deprecated in version 2.0: Use .debugName instead. This value will display in -results of the -asciiArtString method (@see ASLayoutElementAsciiArtProtocol).)

    -
    - - - -
    @property (nullable, nonatomic, copy) NSString *ASDISPLAYNODE_DEPRECATED_MSG ( "Use .debugName instead." )
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Deprecated.h

    -
    - - -
    -
    -
    - -

    – measure: -

    - -
    -
    - -
    - - -
    -

    Asks the node to measure and return the size that best fits its subnodes. (Deprecated: Deprecated in version 2.0: Use layoutThatFits: with a constrained size of (CGSizeZero, constrainedSize) and call size on the returned ASLayout)

    -
    - - - -
    - (CGSize)measure:(CGSize)constrainedSize
    - - - -
    -

    Parameters

    - - - - - - - -
    constrainedSize

    The maximum size the receiver should fit in.

    -
    - - - -
    -

    Return Value

    -

    A new size that fits the receiver’s subviews.

    -
    - - - - - -
    -

    Discussion

    -

    Though this method does not set the bounds of the view, it does have side effects–caching both the -constraint and the result.

    Warning: Subclasses must not override this; it calls -measureWithSizeRange: with zero min size. --measureWithSizeRange: caches results from -calculateLayoutThatFits:. Calling this method may -be expensive if result is not cached.

    -
    - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Deprecated.h

    -
    - - -
    -
    -
    - -

    – visibilityDidChange: -

    - -
    -
    - -
    - - -
    -

    Called whenever the visiblity of the node changed. (Deprecated: @see didEnterVisibleState @see didExitVisibleState)

    -
    - - - -
    - (void)visibilityDidChange:(BOOL)isVisible
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses may use this to monitor when they become visible.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Deprecated.h

    -
    - - -
    -
    -
    - -

    – visibleStateDidChange: -

    - -
    -
    - -
    - - -
    -

    Called whenever the visiblity of the node changed. (Deprecated: @see didEnterVisibleState @see didExitVisibleState)

    -
    - - - -
    - (void)visibleStateDidChange:(BOOL)isVisible
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses may use this to monitor when they become visible.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Deprecated.h

    -
    - - -
    -
    -
    - -

    – displayStateDidChange: -

    - -
    -
    - -
    - - -
    -

    Called whenever the the node has entered or exited the display state. (Deprecated: @see didEnterDisplayState @see didExitDisplayState)

    -
    - - - -
    - (void)displayStateDidChange:(BOOL)inDisplayState
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses may use this to monitor when a node should be rendering its content.

    Note: This method can be called from any thread and should therefore be thread safe.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Deprecated.h

    -
    - - -
    -
    -
    - -

    – loadStateDidChange: -

    - -
    -
    - -
    - - -
    -

    Called whenever the the node has entered or left the load state. (Deprecated: @see didEnterPreloadState @see didExitPreloadState)

    -
    - - - -
    - (void)loadStateDidChange:(BOOL)inLoadState
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses may use this to monitor data for a node should be loaded, either from a local or remote source.

    Note: This method can be called from any thread and should therefore be thread safe.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Deprecated.h

    -
    - - -
    -
    -
    - -

    – cancelLayoutTransitionsInProgress -

    - -
    -
    - -
    - - -
    -

    Cancels all performing layout transitions. Can be called on any thread. (Deprecated: Deprecated in version 2.0: Use cancelLayoutTransition)

    -
    - - - -
    - (void)cancelLayoutTransitionsInProgress
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Deprecated.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+LayoutTransitioning.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+LayoutTransitioning.html deleted file mode 100755 index 986923fb2a..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+LayoutTransitioning.html +++ /dev/null @@ -1,560 +0,0 @@ - - - - - - ASDisplayNode(LayoutTransitioning) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASDisplayNode(LayoutTransitioning) Category Reference

    - - -
    - - - - -
    Declared inASDisplayNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

      defaultLayoutTransitionDuration -

    - -
    -
    - -
    - - -
    -

    The amount of time it takes to complete the default transition animation. Default is 0.2.

    -
    - - - -
    @property (nonatomic, assign) NSTimeInterval defaultLayoutTransitionDuration
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      defaultLayoutTransitionDelay -

    - -
    -
    - -
    - - -
    -

    The amount of time (measured in seconds) to wait before beginning the default transition animation. -Default is 0.0.

    -
    - - - -
    @property (nonatomic, assign) NSTimeInterval defaultLayoutTransitionDelay
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      defaultLayoutTransitionOptions -

    - -
    -
    - -
    - - -
    -

    A mask of options indicating how you want to perform the default transition animations. -For a list of valid constants, see UIViewAnimationOptions.

    -
    - - - -
    @property (nonatomic, assign) UIViewAnimationOptions defaultLayoutTransitionOptions
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – animateLayoutTransition: -

    - -
    -
    - -
    - - -
    -

    A place to perform your animation. New nodes have been inserted here. You can also use this time to re-order the hierarchy.

    -
    - - - -
    - (void)animateLayoutTransition:(nonnull id<ASContextTransitioning>)context
    - - - - - - - - - -
    -

    Discussion

    -

    A place to perform your animation. New nodes have been inserted here. You can also use this time to re-order the hierarchy.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – didCompleteLayoutTransition: -

    - -
    -
    - -
    - - -
    -

    A place to clean up your nodes after the transition

    -
    - - - -
    - (void)didCompleteLayoutTransition:(nonnull id<ASContextTransitioning>)context
    - - - - - - - - - -
    -

    Discussion

    -

    A place to clean up your nodes after the transition

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – transitionLayoutWithSizeRange:animated:shouldMeasureAsync:measurementCompletion: -

    - -
    -
    - -
    - - -
    -

    Transitions the current layout with a new constrained size. Must be called on main thread.

    -
    - - - -
    - (void)transitionLayoutWithSizeRange:(ASSizeRange)constrainedSize animated:(BOOL)animated shouldMeasureAsync:(BOOL)shouldMeasureAsync measurementCompletion:(nullable void ( ^ ) ( ))completion
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    animated

    Animation is optional, but will still proceed through your animateLayoutTransition implementation with isAnimated == NO.

    shouldMeasureAsync

    Measure the layout asynchronously.

    measurementCompletion

    Optional completion block called only if a new layout is calculated. -It is called on main, right after the measurement and before -animateLayoutTransition:.

    -
    - - - - - - - -
    -

    Discussion

    -

    If the passed constrainedSize is the the same as the node’s current constrained size, this method is noop. If passed YES to shouldMeasureAsync it’s guaranteed that measurement is happening on a background thread, otherwise measaurement will happen on the thread that the method was called on. The measurementCompletion callback is always called on the main thread right after the measurement and before -animateLayoutTransition:.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – transitionLayoutWithAnimation:shouldMeasureAsync:measurementCompletion: -

    - -
    -
    - -
    - - -
    -

    Invalidates the current layout and begins a relayout of the node with the current constrainedSize. Must be called on main thread.

    -
    - - - -
    - (void)transitionLayoutWithAnimation:(BOOL)animated shouldMeasureAsync:(BOOL)shouldMeasureAsync measurementCompletion:(nullable void ( ^ ) ( ))completion
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    animated

    Animation is optional, but will still proceed through your animateLayoutTransition implementation with isAnimated == NO.

    shouldMeasureAsync

    Measure the layout asynchronously.

    measurementCompletion

    Optional completion block called only if a new layout is calculated.

    -
    - - - - - - - -
    -

    Discussion

    -

    It is called right after the measurement and before -animateLayoutTransition:.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – cancelLayoutTransition -

    - -
    -
    - -
    - - -
    -

    Cancels all performing layout transitions. Can be called on any thread.

    -
    - - - -
    - (void)cancelLayoutTransition
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+Subclassing.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+Subclassing.html deleted file mode 100755 index f8844132c0..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+Subclassing.html +++ /dev/null @@ -1,2562 +0,0 @@ - - - - - - ASDisplayNode(Subclassing) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASDisplayNode(Subclassing) Category Reference

    - - -
    - - - - -
    Declared inASDisplayNode+Subclasses.h
    - - - - -
    - -

    Overview

    -

    The subclass header ASDisplayNode+Subclasses defines the following methods that either must or can be overriden by -subclasses of ASDisplayNode.

    - -

    These methods should never be called directly by other classes.

    - -

    Drawing

    - -

    Implement one of +displayWithParameters:isCancelled: or +drawRect:withParameters:isCancelled: to provide -drawing for your node.

    - -

    Use -drawParametersForAsyncLayer: to copy any properties that are involved in drawing into an immutable object for -use on the display queue. The display and drawRect implementations MUST be thread-safe, as they can be called on -the displayQueue (asynchronously) or the main thread (synchronously/displayImmediately).

    - -

    Class methods that require passing in copies of the values are used to minimize the need for locking around instance -variable access, and the possibility of the asynchronous display pass grabbing an inconsistent state across multiple -variables.

    -
    - - - - - -
    - - - - -

    Properties

    - -
    -
    - -

      calculatedLayout -

    - -
    -
    - -
    - - -
    -

    Return the calculated layout.

    -
    - - - -
    @property (nullable, nonatomic, readonly, assign) ASLayout *calculatedLayout
    - - - - - -
    -

    Return Value

    -

    Layout that wraps calculated size returned by -calculateSizeThatFits: (in manual layout mode), -or layout already calculated from layout spec returned by -layoutSpecThatFits: (in automatic layout mode).

    -
    - - - - - -
    -

    Discussion

    -

    For node subclasses that implement manual layout (e.g., they have a custom -layout method), -calculatedLayout may be accessed on subnodes to retrieved cached information about their size. -This allows -layout to be very fast, saving time on the main thread. -Note: .calculatedLayout will only be set for nodes that have had -measure: called on them. -For manual layout, make sure you call -measure: in your implementation of -calculateSizeThatFits:.

    - -

    For node subclasses that use automatic layout (e.g., they implement -layoutSpecThatFits:), -it is typically not necessary to use .calculatedLayout at any point. For these nodes, -the ASLayoutSpec implementation will automatically call -measureWithSizeRange: on all of the subnodes, -and the ASDisplayNode base class implementation of -layout will automatically make use of .calculatedLayout on the subnodes.

    Warning: Subclasses must not override this; it returns the last cached layout and is never expensive.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    -
    - - - -

    View Lifecycle

    - -
    -
    - -

    – didLoad -

    - -
    -
    - -
    - - -
    -

    Called on the main thread immediately after self.view is created.

    -
    - - - -
    - (void)didLoad
    - - - - - - - - - -
    -

    Discussion

    -

    This is the best time to add gesture recognizers to the view.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    -
    - - - -

    Layout

    - -
    -
    - -

    – layout -

    - -
    -
    - -
    - - -
    -

    Called on the main thread by the view’s -layoutSubviews.

    -
    - - - -
    - (void)layout
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses override this method to layout all subnodes or subviews.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – layoutDidFinish -

    - -
    -
    - -
    - - -
    -

    Called on the main thread by the view’s -layoutSubviews, after -layout.

    -
    - - - -
    - (void)layoutDidFinish
    - - - - - - - - - -
    -

    Discussion

    -

    Gives a chance for subclasses to perform actions after the subclass and superclass have finished laying -out.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – calculatedLayoutDidChange -

    - -
    -
    - -
    - - -
    -

    Called on a background thread if !isNodeLoaded - called on the main thread if isNodeLoaded.

    -
    - - - -
    - (void)calculatedLayoutDidChange
    - - - - - - - - - -
    -

    Discussion

    -

    When the .calculatedLayout property is set to a new ASLayout (directly from -calculateLayoutThatFits: or -calculated via use of -layoutSpecThatFits:), subclasses may inspect it here.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    -
    - - - -

    Layout calculation

    - -
    -
    - -

    – calculateLayoutThatFits: -

    - -
    -
    - -
    - - -
    -

    Calculate a layout based on given size range.

    -
    - - - -
    - (ASLayout *)calculateLayoutThatFits:(ASSizeRange)constrainedSize
    - - - -
    -

    Parameters

    - - - - - - - -
    constrainedSize

    The minimum and maximum sizes the receiver should fit in.

    -
    - - - -
    -

    Return Value

    -

    An ASLayout instance defining the layout of the receiver (and its children, if the box layout model is used).

    -
    - - - - - -
    -

    Discussion

    -

    This method is called on a non-main thread. The default implementation calls either -layoutSpecThatFits: -or -calculateSizeThatFits:, whichever method is overriden. Subclasses rarely need to override this method, -override -layoutSpecThatFits: or -calculateSizeThatFits: instead.

    Note: This method should not be called directly outside of ASDisplayNode; use -measure: or -calculatedLayout instead.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – calculateLayoutThatFits:restrictedToSize:relativeToParentSize: -

    - -
    -
    - -
    - - -
    -

    ASDisplayNode’s implementation of -layoutThatFits:parentSize: calls this method to resolve the node’s size -against parentSize, intersect it with constrainedSize, and call -calculateLayoutThatFits: with the result.

    -
    - - - -
    - (ASLayout *)calculateLayoutThatFits:(ASSizeRange)constrainedSize restrictedToSize:(ASLayoutElementSize)size relativeToParentSize:(CGSize)parentSize
    - - - - - - - - - -
    -

    Discussion

    -

    In certain advanced cases, you may want to customize this logic. Overriding this method allows you to receive all -three parameters and do the computation yourself.

    Warning: Overriding this method should be done VERY rarely.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – calculateSizeThatFits: -

    - -
    -
    - -
    - - -
    -

    Return the calculated size.

    -
    - - - -
    - (CGSize)calculateSizeThatFits:(CGSize)constrainedSize
    - - - -
    -

    Parameters

    - - - - - - - -
    constrainedSize

    The maximum size the receiver should fit in.

    -
    - - - - - - - -
    -

    Discussion

    -

    Subclasses that override should expect this method to be called on a non-main thread. The returned size -is wrapped in an ASLayout and cached for quick access during -layout. Other expensive work that needs to -be done before display can be performed here, and using ivars to cache any valuable intermediate results is -encouraged.

    Note: Subclasses that override are committed to manual layout. Therefore, -layout: must be overriden to layout all subnodes or subviews.

    Note: This method should not be called directly outside of ASDisplayNode; use -layoutThatFits: or layoutThatFits:parentSize: instead.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – layoutSpecThatFits: -

    - -
    -
    - -
    - - -
    -

    Return a layout spec that describes the layout of the receiver and its children.

    -
    - - - -
    - (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
    - - - -
    -

    Parameters

    - - - - - - - -
    constrainedSize

    The minimum and maximum sizes the receiver should fit in.

    -
    - - - - - - - -
    -

    Discussion

    -

    Subclasses that override should expect this method to be called on a non-main thread. The returned layout spec -is used to calculate an ASLayout and cached by ASDisplayNode for quick access during -layout. Other expensive work that needs to -be done before display can be performed here, and using ivars to cache any valuable intermediate results is -encouraged.

    Note: This method should not be called directly outside of ASDisplayNode; use -measure: or -calculatedLayout instead.

    Warning: Subclasses that implement -layoutSpecThatFits: must not use .layoutSpecBlock. Doing so will trigger an -exception. A future version of the framework may support using both, calling them serially, with the .layoutSpecBlock -superseding any values set by the method override.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – invalidateCalculatedLayout -

    - -
    -
    - -
    - - -
    -

    Invalidate previously measured and cached layout.

    -
    - - - -
    - (void)invalidateCalculatedLayout
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses should call this method to invalidate the previously measured and cached layout for the display -node, when the contents of the node change in such a way as to require measuring it again.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    -
    - - - -

    Drawing

    - -
    -
    - -

    + drawRect:withParameters:isCancelled:isRasterizing: -

    - -
    -
    - -
    - - -
    -

    @summary Delegate method to draw layer contents into a CGBitmapContext. The current UIGraphics context will be set -to an appropriate context.

    -
    - - - -
    + (void)drawRect:(CGRect)bounds withParameters:(nullable id<NSObject>)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - -
    bounds

    Region to draw in.

    parameters

    An object describing all of the properties you need to draw. Return this from --drawParametersForAsyncLayer:

    isCancelledBlock

    Execute this block to check whether the current drawing operation has been cancelled to avoid -unnecessary work. A return value of YES means cancel drawing and return.

    isRasterizing

    YES if the layer is being rasterized into another layer, in which case drawRect: probably wants -to avoid doing things like filling its bounds with a zero-alpha color to clear the backing store.

    -
    - - - - - - - -
    -

    Discussion

    -

    Note: Called on the display queue and/or main queue (MUST BE THREAD SAFE)

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    + displayWithParameters:isCancelled: -

    - -
    -
    - -
    - - -
    -

    @summary Delegate override to provide new layer contents as a UIImage.

    -
    - - - -
    + (nullable UIImage *)displayWithParameters:(nullable id<NSObject>)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    parameters

    An object describing all of the properties you need to draw. Return this from --drawParametersForAsyncLayer:

    isCancelledBlock

    Execute this block to check whether the current drawing operation has been cancelled to avoid -unnecessary work. A return value of YES means cancel drawing and return.

    -
    - - - -
    -

    Return Value

    -

    A UIImage with contents that are ready to display on the main thread. Make sure that the image is already -decoded before returning it here.

    -
    - - - - - -
    -

    Discussion

    -

    Note: Called on the display queue and/or main queue (MUST BE THREAD SAFE)

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – drawParametersForAsyncLayer: -

    - -
    -
    - -
    - - -
    -

    Delegate override for drawParameters

    -
    - - - -
    - (nullable id<NSObject>)drawParametersForAsyncLayer:(_ASDisplayLayer *)layer
    - - - -
    -

    Parameters

    - - - - - - - -
    layer

    The layer that will be drawn into.

    -
    - - - - - - - -
    -

    Discussion

    -

    Note: Called on the main thread only

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – displayWillStart -

    - -
    -
    - -
    - - -
    -

    Indicates that the receiver is about to display.

    -
    - - - -
    - (void)displayWillStart
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses may override this method to be notified when display (asynchronous or synchronous) is -about to begin.

    Note: Called on the main thread only

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – displayDidFinish -

    - -
    -
    - -
    - - -
    -

    Indicates that the receiver has finished displaying.

    -
    - - - -
    - (void)displayDidFinish
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses may override this method to be notified when display (asynchronous or synchronous) has -completed.

    Note: Called on the main thread only

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    -
    - - - -

    Observing node-related changes

    - -
    -
    - -

    – interfaceStateDidChange:fromState: -

    - -
    -
    - -
    - - -
    -

    Called whenever any bit in the ASInterfaceState bitfield is changed.

    -
    - - - -
    - (void)interfaceStateDidChange:(ASInterfaceState)newState fromState:(ASInterfaceState)oldState
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses may use this to monitor when they become visible, should free cached data, and much more.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – didEnterVisibleState -

    - -
    -
    - -
    - - -
    -

    Called whenever the node becomes visible.

    -
    - - - -
    - (void)didEnterVisibleState
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses may use this to monitor when they become visible.

    Note: This method is guaranteed to be called on main.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – didExitVisibleState -

    - -
    -
    - -
    - - -
    -

    Called whenever the node is no longer visible.

    -
    - - - -
    - (void)didExitVisibleState
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses may use this to monitor when they are no longer visible.

    Note: This method is guaranteed to be called on main.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – didEnterDisplayState -

    - -
    -
    - -
    - - -
    -

    Called whenever the the node has entered the display state.

    -
    - - - -
    - (void)didEnterDisplayState
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses may use this to monitor when a node should be rendering its content.

    Note: This method is guaranteed to be called on main.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – didExitDisplayState -

    - -
    -
    - -
    - - -
    -

    Called whenever the the node has exited the display state.

    -
    - - - -
    - (void)didExitDisplayState
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses may use this to monitor when a node should no longer be rendering its content.

    Note: This method is guaranteed to be called on main.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – didEnterPreloadState -

    - -
    -
    - -
    - - -
    -

    Called whenever the the node has entered the preload state.

    -
    - - - -
    - (void)didEnterPreloadState
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses may use this to monitor data for a node should be preloaded, either from a local or remote source.

    Note: This method is guaranteed to be called on main.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – didExitPreloadState -

    - -
    -
    - -
    - - -
    -

    Called whenever the the node has exited the preload state.

    -
    - - - -
    - (void)didExitPreloadState
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses may use this to monitor whether preloading data for a node should be canceled.

    Note: This method is guaranteed to be called on main.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – willEnterHierarchy -

    - -
    -
    - -
    - - -
    -

    Called just before the view is added to a window.

    -
    - - - -
    - (void)willEnterHierarchy
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – didExitHierarchy -

    - -
    -
    - -
    - - -
    -

    Called after the view is removed from the window.

    -
    - - - -
    - (void)didExitHierarchy
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

      inHierarchy -

    - -
    -
    - -
    - - -
    -

    Whether the view or layer of this display node is currently in a window

    -
    - - - -
    @property (nonatomic, readonly, assign, getter=isInHierarchy) BOOL inHierarchy
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – fetchData -

    - -
    -
    - -
    - - -
    -

    Indicates that the node should fetch any external data, such as images.

    -
    - - - -
    - (void)fetchData
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses may override this method to be notified when they should begin to fetch data. Fetching -should be done asynchronously. The node is also responsible for managing the memory of any data. -The data may be remote and accessed via the network, but could also be a local database query.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – clearFetchedData -

    - -
    -
    - -
    - - -
    -

    Provides an opportunity to clear any fetched data (e.g. remote / network or database-queried) on the current node.

    -
    - - - -
    - (void)clearFetchedData
    - - - - - - - - - -
    -

    Discussion

    -

    This will not clear data recursively for all subnodes. Either call -recursivelyClearFetchedData or -selectively clear fetched data.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – clearContents -

    - -
    -
    - -
    - - -
    -

    Provides an opportunity to clear backing store and other memory-intensive intermediates, such as text layout managers -on the current node.

    -
    - - - -
    - (void)clearContents
    - - - - - - - - - -
    -

    Discussion

    -

    Called by -recursivelyClearContents. Base class implements self.contents = nil, clearing any backing -store, for asynchronous regeneration when needed.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – subnodeDisplayWillStart: -

    - -
    -
    - -
    - - -
    -

    Indicates that the receiver is about to display its subnodes. This method is not called if there are no -subnodes present.

    -
    - - - -
    - (void)subnodeDisplayWillStart:(ASDisplayNode *)subnode
    - - - -
    -

    Parameters

    - - - - - - - -
    subnode

    The subnode of which display is about to begin.

    -
    - - - - - - - -
    -

    Discussion

    -

    Subclasses may override this method to be notified when subnode display (asynchronous or synchronous) is -about to begin.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – subnodeDisplayDidFinish: -

    - -
    -
    - -
    - - -
    -

    Indicates that the receiver is finished displaying its subnodes. This method is not called if there are -no subnodes present.

    -
    - - - -
    - (void)subnodeDisplayDidFinish:(ASDisplayNode *)subnode
    - - - -
    -

    Parameters

    - - - - - - - -
    subnode

    The subnode of which display is about to completed.

    -
    - - - - - - - -
    -

    Discussion

    -

    Subclasses may override this method to be notified when subnode display (asynchronous or synchronous) has -completed.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – setNeedsDisplayAtScale: -

    - -
    -
    - -
    - - -
    -

    Marks the receiver’s bounds as needing to be redrawn, with a scale value.

    -
    - - - -
    - (void)setNeedsDisplayAtScale:(CGFloat)contentsScale
    - - - -
    -

    Parameters

    - - - - - - - -
    contentsScale

    The scale at which the receiver should be drawn.

    -
    - - - - - - - -
    -

    Discussion

    -

    Subclasses should override this if they don’t want their contentsScale changed.

    Note: This changes an internal property. --setNeedsDisplay is also available to trigger display without changing contentsScaleForDisplay.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – recursivelySetNeedsDisplayAtScale: -

    - -
    -
    - -
    - - -
    -

    Recursively calls setNeedsDisplayAtScale: on subnodes.

    -
    - - - -
    - (void)recursivelySetNeedsDisplayAtScale:(CGFloat)contentsScale
    - - - -
    -

    Parameters

    - - - - - - - -
    contentsScale

    The scale at which the receiver’s subnode hierarchy should be drawn.

    -
    - - - - - - - -
    -

    Discussion

    -

    Subclasses may override this if they require modifying the scale set on their child nodes.

    Note: Only the node tree is walked, not the view or layer trees.

    -
    - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

      contentsScaleForDisplay -

    - -
    -
    - -
    - - -
    -

    The scale factor to apply to the rendering.

    -
    - - - -
    @property (nonatomic, assign, readonly) CGFloat contentsScaleForDisplay
    - - - - - - - - - -
    -

    Discussion

    -

    Use setNeedsDisplayAtScale: to set a value and then after display, the display node will set the layer’s -contentsScale. This is to prevent jumps when re-rasterizing at a different contentsScale. -Read this property if you need to know the future contentsScale of your layer, eg in drawParameters.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    -
    - - - -

    Touch handling

    - -
    -
    - -

    – touchesBegan:withEvent: -

    - -
    -
    - -
    - - -
    -

    Tells the node when touches began in its view.

    -
    - - - -
    - (void)touchesBegan:(NSSet<UITouch*> *)touches withEvent:(nullable UIEvent *)event
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    touches

    A set of UITouch instances.

    event

    A UIEvent associated with the touch.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – touchesMoved:withEvent: -

    - -
    -
    - -
    - - -
    -

    Tells the node when touches moved in its view.

    -
    - - - -
    - (void)touchesMoved:(NSSet<UITouch*> *)touches withEvent:(nullable UIEvent *)event
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    touches

    A set of UITouch instances.

    event

    A UIEvent associated with the touch.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – touchesEnded:withEvent: -

    - -
    -
    - -
    - - -
    -

    Tells the node when touches ended in its view.

    -
    - - - -
    - (void)touchesEnded:(NSSet<UITouch*> *)touches withEvent:(nullable UIEvent *)event
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    touches

    A set of UITouch instances.

    event

    A UIEvent associated with the touch.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – touchesCancelled:withEvent: -

    - -
    -
    - -
    - - -
    -

    Tells the node when touches was cancelled in its view.

    -
    - - - -
    - (void)touchesCancelled:(nullable NSSet<UITouch*> *)touches withEvent:(nullable UIEvent *)event
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    touches

    A set of UITouch instances.

    event

    A UIEvent associated with the touch.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    -
    - - - -

    Managing Gesture Recognizers

    - -
    -
    - -

    – gestureRecognizerShouldBegin: -

    - -
    -
    - -
    - - -
    -

    Asks the node if a gesture recognizer should continue tracking touches.

    -
    - - - -
    - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
    - - - -
    -

    Parameters

    - - - - - - - -
    gestureRecognizer

    A gesture recognizer trying to recognize a gesture.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    -
    - - - -

    Hit Testing

    - -
    -
    - -

    – hitTest:withEvent: -

    - -
    -
    - -
    - - -
    -

    Returns the view that contains the point.

    -
    - - - -
    - (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    point

    A point specified in the node’s local coordinate system (bounds).

    event

    The event that warranted a call to this method.

    -
    - - - -
    -

    Return Value

    -

    Returns a UIView, not ASDisplayNode, for two reasons: -1) allows sending events to plain UIViews that don’t have attached nodes, -2) hitTest: is never called before the views are created.

    -
    - - - - - -
    -

    Discussion

    -

    Override to make this node respond differently to touches: (e.g. hide touches from subviews, send all -touches to certain subviews (hit area maximizing), etc.)

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    -
    - - - -

    Placeholders

    - -
    -
    - -

    – placeholderImage -

    - -
    -
    - -
    - - -
    -

    Optionally provide an image to serve as the placeholder for the backing store while the contents are being -displayed.

    -
    - - - -
    - (nullable UIImage *)placeholderImage
    - - - - - - - - - -
    -

    Discussion

    -

    Note: Called on the display queue and/or main queue (MUST BE THREAD SAFE)

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    -
    - - - -

    Description

    - -
    -
    - -

    – descriptionForRecursiveDescription -

    - -
    -
    - -
    - - -
    -

    Return a description of the node

    -
    - - - -
    - (NSString *)descriptionForRecursiveDescription
    - - - - - - - - - -
    -

    Discussion

    -

    The function that gets called for each display node in -recursiveDescription

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    - -

    – asyncTraitCollectionDidChange -

    - -
    -
    - -
    - - -
    -

    Called when the node’s ASTraitCollection changes

    -
    - - - -
    - (void)asyncTraitCollectionDidChange
    - - - - - - - - - -
    -

    Discussion

    -

    Subclasses can override this method to react to a trait collection change.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Subclasses.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+UIViewBridge.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+UIViewBridge.html deleted file mode 100755 index 97f565ab80..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASDisplayNode+UIViewBridge.html +++ /dev/null @@ -1,348 +0,0 @@ - - - - - - ASDisplayNode(UIViewBridge) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASDisplayNode(UIViewBridge) Category Reference

    - - -
    - - - - -
    Declared inASDisplayNode.h
    - - - - -
    - -

    Overview

    -

    UIView bridge

    - -

    ASDisplayNode provides thread-safe access to most of UIView and CALayer properties and methods, traditionally unsafe.

    - -

    Using them will not cause the actual view/layer to be created, and will be applied when it is created (when the view -or layer property is accessed).

    - -
      -
    • NOTE: After the view or layer is created, the properties pass through to the view or layer directly and must be called on the main thread.
    • -
    - - -

    See UIView and CALayer for documentation on these common properties.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – setNeedsDisplay -

    - -
    -
    - -
    - - -
    -

    Marks the view as needing display. Convenience for use whether the view / layer is loaded or not. Safe to call from a background thread.

    -
    - - - -
    - (void)setNeedsDisplay
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – setNeedsLayout -

    - -
    -
    - -
    - - -
    -

    Marks the node as needing layout. Convenience for use whether the view / layer is loaded or not. Safe to call from a background thread.

    -
    - - - -
    - (void)setNeedsLayout
    - - - - - - - - - -
    -

    Discussion

    -

    If this node was measured, calling this method triggers an internal relayout: the calculated layout is invalidated, -and the supernode is notified or (if this node is the root one) a full measurement pass is executed using the old constrained size.

    - -

    Note: ASCellNode has special behavior in that calling this method will automatically notify -the containing ASTableView / ASCollectionView that the cell should be resized, if necessary.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      backgroundColor -

    - -
    -
    - -
    - - -
    -

    The node view’s background color.

    -
    - - - -
    @property (nonatomic, strong, nullable) UIColor *backgroundColor
    - - - - - - - - - -
    -

    Discussion

    -

    In contrast to UIView, setting a transparent color will not set opaque = NO. -This only affects nodes that implement +drawRect like ASTextNode.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      contentMode -

    - -
    -
    - -
    - - -
    -

    A flag used to determine how a node lays out its content when its bounds change.

    -
    - - - -
    @property (nonatomic, assign) UIViewContentMode contentMode
    - - - - - - - - - -
    -

    Discussion

    -

    This is like UIView’s contentMode property, but better. We do our own mapping to layer.contentsGravity in -_ASDisplayView. You can set needsDisplayOnBoundsChange independently. -Thus, UIViewContentModeRedraw is not allowed; use needsDisplayOnBoundsChange = YES instead, and pick an appropriate -contentMode for your content while it’s being re-rendered.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASImageNode+AnimatedImage.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASImageNode+AnimatedImage.html deleted file mode 100755 index ff83bcb37f..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASImageNode+AnimatedImage.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - ASImageNode(AnimatedImage) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASImageNode(AnimatedImage) Category Reference

    - - -
    - - - - -
    Declared inASImageNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

      animatedImage -

    - -
    -
    - -
    - - -
    -

    The animated image to playback

    -
    - - - -
    @property (nullable, nonatomic, strong) id<ASAnimatedImageProtocol> animatedImage
    - - - - - - - - - -
    -

    Discussion

    -

    Set this to an object which conforms to ASAnimatedImageProtocol -to have the ASImageNode playback an animated image.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASImageNode.h

    -
    - - -
    -
    -
    - -

      animatedImagePaused -

    - -
    -
    - -
    - - -
    -

    Pause the playback of an animated image.

    -
    - - - -
    @property (nonatomic, assign) BOOL animatedImagePaused
    - - - - - - - - - -
    -

    Discussion

    -

    Set to YES to pause playback of an animated image and NO to resume -playback.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASImageNode.h

    -
    - - -
    -
    -
    - -

      animatedImageRunLoopMode -

    - -
    -
    - -
    - - -
    -

    The runloop mode used to animate the image.

    -
    - - - -
    @property (nonatomic, strong) NSString *animatedImageRunLoopMode
    - - - - - - - - - -
    -

    Discussion

    -

    Defaults to NSRunLoopCommonModes. Another commonly used mode is NSDefaultRunLoopMode. -Setting NSDefaultRunLoopMode will cause animation to pause while scrolling (if the ASImageNode is -in a scroll view), which may improve scroll performance in some use cases.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASImageNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASImageNode+Debugging.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASImageNode+Debugging.html deleted file mode 100755 index d60ea6fd94..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASImageNode+Debugging.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - ASImageNode(Debugging) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASImageNode(Debugging) Category Reference

    - - -
    - - - - -
    Declared inAsyncDisplayKit+Debug.h
    - - - - - - -
    - - - - - - -
    -
    - -

    + setShouldShowImageScalingOverlay: -

    - -
    -
    - -
    - - -
    -

    Enables an ASImageNode debug label that shows the ratio of pixels in the source image to those in -the displayed bounds (including cropRect). This helps detect excessive image fetching / downscaling, -as well as upscaling (such as providing a URL not suitable for a Retina device). For dev purposes only.

    -
    - - - -
    + (void)setShouldShowImageScalingOverlay:(BOOL)show
    - - - -
    -

    Parameters

    - - - - - - - -
    enabled

    Specify YES to show the label on all ASImageNodes with non-1.0x source-to-bounds pixel ratio.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    AsyncDisplayKit+Debug.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayout+.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayout+.html deleted file mode 100755 index f07aea41ee..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayout+.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - ASLayout() Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASLayout() Category Reference

    - - -
    - - - - -
    Declared inASLayoutSpec+Subclasses.h
    - - - - - - -
    - - - - - - -
    -
    - -

      position -

    - -
    -
    - -
    - - -
    -

    Position in parent. Default to CGPointNull.

    -
    - - - -
    @property (nonatomic, assign, readwrite) CGPoint position
    - - - - - - - - - -
    -

    Discussion

    -

    When being used as a sublayout, this property must not equal CGPointNull.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayoutSpec+Subclasses.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayout+Debugging.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayout+Debugging.html deleted file mode 100755 index 0b9fc0a9e4..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayout+Debugging.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - ASLayout(Debugging) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASLayout(Debugging) Category Reference

    - - -
    - - - - -
    Declared inASLayout.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – recursiveDescription -

    - -
    -
    - -
    - - -
    -

    Recrusively output the description of the layout tree.

    -
    - - - -
    - (NSString *)recursiveDescription
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayout.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayoutElementStyle+.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayoutElementStyle+.html deleted file mode 100755 index 0bc980f565..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayoutElementStyle+.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - ASLayoutElementStyle() Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASLayoutElementStyle() Category Reference

    - - -
    - - - - - - - -
    Conforms toASDescriptionProvider
    Declared inASLayoutElementStylePrivate.h
    - - - - - - -
    - - - - - - -
    -
    - -

      delegate -

    - -
    -
    - -
    - - -
    -

    The object that acts as the delegate of the style.

    -
    - - - -
    @property (nullable, nonatomic, weak) id<ASLayoutElementStyleDelegate> delegate
    - - - - - - - - - -
    -

    Discussion

    -

    The delegate must adopt the ASLayoutElementStyleDelegate protocol. The delegate is not retained.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayoutElementStylePrivate.h

    -
    - - -
    -
    -
    - -

      size -

    - -
    -
    - -
    - - -
    -

    A size constraint that should apply to this ASLayoutElement.

    -
    - - - -
    @property (nonatomic, assign, readonly) ASLayoutElementSize size
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElementStylePrivate.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayoutSpec+Debugging.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayoutSpec+Debugging.html deleted file mode 100755 index c039aa2246..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayoutSpec+Debugging.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - ASLayoutSpec(Debugging) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASLayoutSpec(Debugging) Category Reference

    - - -
    - - - - - - - -
    Conforms toASLayoutElementAsciiArtProtocol
    Declared inASLayoutSpec.h
    - - - - - - -
    - - - - - - -
    -
    - -

    + asciiArtStringForChildren:parentName:direction: -

    - -
    -
    - -
    - - -
    -

    Used by other layout specs to create ascii art debug strings

    -
    - - - -
    + (NSString *)asciiArtStringForChildren:(NSArray *)children parentName:(NSString *)parentName direction:(ASStackLayoutDirection)direction
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutSpec.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayoutSpec+Subclassing.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayoutSpec+Subclassing.html deleted file mode 100755 index 177cf376e9..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASLayoutSpec+Subclassing.html +++ /dev/null @@ -1,315 +0,0 @@ - - - - - - ASLayoutSpec(Subclassing) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASLayoutSpec(Subclassing) Category Reference

    - - -
    - - - - -
    Declared inASLayoutSpec+Subclasses.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – layoutElementToAddFromLayoutElement: -

    - -
    -
    - -
    - - -
    -

    Helper method for finalLayoutElement support

    -
    - - - -
    - (id<ASLayoutElement>)layoutElementToAddFromLayoutElement:(id<ASLayoutElement>)child
    - - - - - - - - - -
    -

    Discussion

    -

    Warning: If you are getting recursion crashes here after implementing finalLayoutElement, make sure -that you are setting isFinalLayoutElement flag to YES. This must be one BEFORE adding a child -to the new ASLayoutElement.

    - -

    For example: -- (idASLayoutElement)finalLayoutElement -{ -ASInsetLayoutSpec *insetSpec = [[ASInsetLayoutSpec alloc] init]; -insetSpec.insets = UIEdgeInsetsMake(10,10,10,10); -insetSpec.isFinalLayoutElement = YES; -[insetSpec setChild:self]; -return insetSpec; -}

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayoutSpec+Subclasses.h

    -
    - - -
    -
    -
    - -

    – setChild:atIndex: -

    - -
    -
    - -
    - - -
    -

    Adds a child with the given identifier to this layout spec.

    -
    - - - -
    - (void)setChild:(id<ASLayoutElement>)child atIndex:(NSUInteger)index
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    child

    A child to be added.

    index

    An index associated with the child.

    -
    - - - - - - - -
    -

    Discussion

    -

    Every ASLayoutSpec must act on at least one child. The ASLayoutSpec base class takes the -responsibility of holding on to the spec children. Some layout specs, like ASInsetLayoutSpec, -only require a single child.

    - -

    For layout specs that require a known number of children (ASBackgroundLayoutSpec, for example) -a subclass can use the setChild method to set the “primary” child. It should then use this method -to set any other required children. Ideally a subclass would hide this from the user, and use the -setChild:forIndex: internally. For example, ASBackgroundLayoutSpec exposes a backgroundChild -property that behind the scenes is calling setChild:forIndex:.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayoutSpec+Subclasses.h

    -
    - - -
    -
    -
    - -

    – childAtIndex: -

    - -
    -
    - -
    - - -
    -

    Returns the child added to this layout spec using the given index.

    -
    - - - -
    - (nullable id<ASLayoutElement>)childAtIndex:(NSUInteger)index
    - - - -
    -

    Parameters

    - - - - - - - -
    index

    An identifier associated with the the child.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutSpec+Subclasses.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASRangeController+ASRangeControllerUpdateRangeProtocol.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASRangeController+ASRangeControllerUpdateRangeProtocol.html deleted file mode 100755 index cbdbcb323a..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASRangeController+ASRangeControllerUpdateRangeProtocol.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - ASRangeController(ASRangeControllerUpdateRangeProtocol) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASRangeController(ASRangeControllerUpdateRangeProtocol) Category Reference

    - - -
    - - - - - - - -
    Conforms toASRangeControllerUpdateRangeProtocol
    Declared inASRangeController.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – updateCurrentRangeWithMode: -

    - -
    -
    - -
    - - -
    -
      -
    • Update the range mode for a range controller to a explicitly set mode until the node that contains the range
    • -
    • controller becomes visible again -*
    • -
    • Logic for the automatic range mode:
    • -
      1. -
      2. If there are no visible node paths available nothing is to be done and no range update will happen
      3. -
      -
    • -
      1. -
      2. The initial range update if the range controller is visible always will be ASLayoutRangeModeCount
      3. -
      -
    • -
    • (ASLayoutRangeModeMinimum) as it’s the initial fetch
    • -
      1. -
      2. The range mode set explicitly via updateCurrentRangeWithMode: will last at least one range update. After that it -the range controller will use the explicit set range mode until it becomes visible and a new range update was -triggered or a new range mode via updateCurrentRangeWithMode: is set
      3. -
      -
    • -
      1. -
      2. If range mode is not explicitly set the range mode is variying based if the range controller is visible or not
      3. -
      -
    • -
    - -
    - - - -
    - (void)updateCurrentRangeWithMode:(ASLayoutRangeMode)rangeMode
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASRangeController+Debugging.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASRangeController+Debugging.html deleted file mode 100755 index e85b0d47a3..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASRangeController+Debugging.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - ASRangeController(Debugging) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASRangeController(Debugging) Category Reference

    - - -
    - - - - -
    Declared inAsyncDisplayKit+Debug.h
    - - - - - - -
    - - - - - - -
    -
    - -

    + setShouldShowRangeDebugOverlay: -

    - -
    -
    - -
    - - -
    -

    Class method to enable a visualization overlay of the all ASRangeController’s tuning parameters. For dev purposes only. -To use, message ASRangeController in the AppDelegate –> [ASRangeController setShouldShowRangeDebugOverlay:YES];

    -
    - - - -
    + (void)setShouldShowRangeDebugOverlay:(BOOL)show
    - - - -
    -

    Parameters

    - - - - - - - -
    enable

    Specify YES to make this debug feature enabled when messaging the ASRangeController class.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    AsyncDisplayKit+Debug.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASTableView+Deprecated.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASTableView+Deprecated.html deleted file mode 100755 index c13c9fc87c..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASTableView+Deprecated.html +++ /dev/null @@ -1,948 +0,0 @@ - - - - - - ASTableView(Deprecated) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASTableView(Deprecated) Category Reference

    - - -
    - - - - -
    Declared inASTableView.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – initWithFrame:style: -

    - -
    -
    - -
    - - -
    -

    Initializer.

    -
    - - - -
    - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    frame

    A rectangle specifying the initial location and size of the table view in its superview’€™s coordinates. -The frame of the table view changes as table cells are added and deleted.

    style

    A constant that specifies the style of the table view. See UITableViewStyle for descriptions of valid constants.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – tuningParametersForRangeType: -

    - -
    -
    - -
    - - -
    -

    Tuning parameters for a range type in full mode.

    -
    - - - -
    - (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - -
    rangeType

    The range type to get the tuning parameters for.

    -
    - - - -
    -

    Return Value

    -

    A tuning parameter value for the given range type in full mode.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – setTuningParameters:forRangeType: -

    - -
    -
    - -
    - - -
    -

    Set the tuning parameters for a range type in full mode.

    -
    - - - -
    - (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    tuningParameters

    The tuning parameters to store for a range type.

    rangeType

    The range type to set the tuning parameters for.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – tuningParametersForRangeMode:rangeType: -

    - -
    -
    - -
    - - -
    -

    Tuning parameters for a range type in the specified mode.

    -
    - - - -
    - (ASRangeTuningParameters)tuningParametersForRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    rangeMode

    The range mode to get the running parameters for.

    rangeType

    The range type to get the tuning parameters for.

    -
    - - - -
    -

    Return Value

    -

    A tuning parameter value for the given range type in the given mode.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – setTuningParameters:forRangeMode:rangeType: -

    - -
    -
    - -
    - - -
    -

    Set the tuning parameters for a range type in the specified mode.

    -
    - - - -
    - (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    tuningParameters

    The tuning parameters to store for a range type.

    rangeMode

    The range mode to set the running parameters for.

    rangeType

    The range type to set the tuning parameters for.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – visibleNodes -

    - -
    -
    - -
    - - -
    -

    Similar to -visibleCells.

    -
    - - - -
    - (NSArray<ASCellNode*> *)visibleNodes
    - - - - - -
    -

    Return Value

    -

    an array containing the cell nodes being displayed on screen.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – indexPathForNode: -

    - -
    -
    - -
    - - -
    -

    Similar to -indexPathForCell:.

    -
    - - - -
    - (nullable NSIndexPath *)indexPathForNode:(ASCellNode *)cellNode
    - - - -
    -

    Parameters

    - - - - - - - -
    cellNode

    a cellNode part of the table view

    -
    - - - -
    -

    Return Value

    -

    an indexPath for this cellNode

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – reloadDataWithCompletion: -

    - -
    -
    - -
    - - -
    -

    Reload everything from scratch, destroying the working range and all cached nodes.

    -
    - - - -
    - (void)reloadDataWithCompletion:(void ( ^ _Nullable ) ( ))completion
    - - - -
    -

    Parameters

    - - - - - - - -
    completion

    block to run on completion of asynchronous loading or nil. If supplied, the block is run on -the main thread.

    -
    - - - - - - - -
    -

    Discussion

    -

    Warning: This method is substantially more expensive than UITableView’s version.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – reloadData -

    - -
    -
    - -
    - - -
    -

    Reload everything from scratch, destroying the working range and all cached nodes.

    -
    - - - -
    - (void)reloadData
    - - - - - - - - - -
    -

    Discussion

    -

    Warning: This method is substantially more expensive than UITableView’s version.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – reloadDataImmediately -

    - -
    -
    - -
    - - -
    -

    Reload everything from scratch entirely on the main thread, destroying the working range and all cached nodes.

    -
    - - - -
    - (void)reloadDataImmediately
    - - - - - - - - - -
    -

    Discussion

    -

    Warning: This method is substantially more expensive than UITableView’s version and will block the main thread while -all the cells load.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – relayoutItems -

    - -
    -
    - -
    - - -
    -

    Triggers a relayout of all nodes.

    -
    - - - -
    - (void)relayoutItems
    - - - - - - - - - -
    -

    Discussion

    -

    This method invalidates and lays out every cell node in the table view.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – endUpdatesAnimated:completion: -

    - -
    -
    - -
    - - -
    -

    Concludes a series of method calls that insert, delete, select, or reload rows and sections of the table view. -You call this method to bracket a series of method calls that begins with beginUpdates and that consists of operations -to insert, delete, select, and reload rows and sections of the table view. When you call endUpdates, ASTableView begins animating -the operations simultaneously. This method is must be called from the main thread. It’s important to remember that the ASTableView will -be processing the updates asynchronously after this call and are not guaranteed to be reflected in the ASTableView until -the completion block is executed.

    -
    - - - -
    - (void)endUpdatesAnimated:(BOOL)animated completion:(void ( ^ _Nullable ) ( BOOL completed ))completion
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    animated

    NO to disable all animations.

    completion

    A completion handler block to execute when all of the operations are finished. This block takes a single -Boolean parameter that contains the value YES if all of the related animations completed successfully or -NO if they were interrupted. This parameter may be nil. If supplied, the block is run on the main thread.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – waitUntilAllUpdatesAreCommitted -

    - -
    -
    - -
    - - -
    -

    Blocks execution of the main thread until all section and row updates are committed. This method must be called from the main thread.

    -
    - - - -
    - (void)waitUntilAllUpdatesAreCommitted
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – clearContents -

    - -
    -
    - -
    - - -
    -

    Deprecated in 2.0. You should not call this method.

    -
    - - - -
    - (void)clearContents
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – clearFetchedData -

    - -
    -
    - -
    - - -
    -

    Deprecated in 2.0. You should not call this method.

    -
    - - - -
    - (void)clearFetchedData
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASTableView+Internal.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASTableView+Internal.html deleted file mode 100755 index e21fda7dad..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASTableView+Internal.html +++ /dev/null @@ -1,453 +0,0 @@ - - - - - - ASTableView(Internal) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASTableView(Internal) Category Reference

    - - -
    - - - - -
    Declared inASTableViewInternal.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – _initWithFrame:style:dataControllerClass: -

    - -
    -
    - -
    - - -
    -

    Initializer.

    -
    - - - -
    - (instancetype)_initWithFrame:(CGRect)frame style:(UITableViewStyle)style dataControllerClass:(Class)dataControllerClass
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    frame

    A rectangle specifying the initial location and size of the table view in its superview’€™s coordinates. -The frame of the table view changes as table cells are added and deleted.

    style

    A constant that specifies the style of the table view. See UITableViewStyle for descriptions of valid constants.

    dataControllerClass

    A controller class injected to and used to create a data controller for the table view.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableViewInternal.h

    -
    - - -
    -
    -
    - -

      test_enableSuperUpdateCallLogging -

    - -
    -
    - -
    - - -
    -

    Set YES and we’ll log every time we call [super insertRows…] etc

    -
    - - - -
    @property (nonatomic) BOOL test_enableSuperUpdateCallLogging
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableViewInternal.h

    -
    - - -
    -
    -
    - -

    – convertIndexPathFromTableNode:waitingIfNeeded: -

    - -
    -
    - -
    - - -
    -

    Attempt to get the view-layer index path for the row with the given index path.

    -
    - - - -
    - (NSIndexPath *)convertIndexPathFromTableNode:(NSIndexPath *)indexPath waitingIfNeeded:(BOOL)wait
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    indexPath

    The index path of the row.

    wait

    If the item hasn’t reached the view yet, this attempts to wait for updates to commit.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableViewInternal.h

    -
    - - -
    -
    -
    - -

    – convertIndexPathToTableNode: -

    - -
    -
    - -
    - - -
    -

    Attempt to get the node index path given the view-layer index path.

    -
    - - - -
    - (NSIndexPath *)convertIndexPathToTableNode:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - -
    indexPath

    The index path of the row.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableViewInternal.h

    -
    - - -
    -
    -
    - -

    – convertIndexPathsToTableNode: -

    - -
    -
    - -
    - - -
    -

    Attempt to get the node index paths given the view-layer index paths.

    -
    - - - -
    - (NSArray<NSIndexPath*> *)convertIndexPathsToTableNode:(NSArray<NSIndexPath*> *)indexPaths
    - - - -
    -

    Parameters

    - - - - - - - -
    indexPaths

    An array of index paths in the view space

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableViewInternal.h

    -
    - - -
    -
    -
    - -

    – sectionIndexWidth -

    - -
    -
    - -
    - - -
    -

    Returns the width of the section index view on the right-hand side of the table, if one is present.

    -
    - - - -
    - (CGFloat)sectionIndexWidth
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableViewInternal.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASTextNode+.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASTextNode+.html deleted file mode 100755 index ec3bdd4fbb..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASTextNode+.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - ASTextNode() Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASTextNode() Category Reference

    - - -
    - - - - -
    Declared inASTextNode+Beta.h
    - - - - - - -
    - - - - - - -
    -
    - -

      pointSizeScaleFactors -

    - -
    -
    - -
    - - -
    -

    An array of descending scale factors that will be applied to this text node to try to make it fit within its constrained size

    -
    - - - -
    @property (nullable, nonatomic, copy) NSArray<NSNumber*> *pointSizeScaleFactors
    - - - - - - - - - -
    -

    Discussion

    -

    This array should be in descending order and NOT contain the scale factor 1.0. For example, it could return @[@(.9), @(.85), @(.8)]; -@default nil (no scaling)

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode+Beta.h

    -
    - - -
    -
    -
    - -

      textContainerInset -

    - -
    -
    - -
    - - -
    -

    Text margins for text laid out in the text node.

    -
    - - - -
    @property (nonatomic, assign) UIEdgeInsets textContainerInset
    - - - - - - - - - -
    -

    Discussion

    -

    defaults to UIEdgeInsetsZero. -This property can be useful for handling text which does not fit within the view by default. An example: like UILabel, -ASTextNode will clip the left and right of the string “judar” if it’s rendered in an italicised font.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode+Beta.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASTextNode+Deprecated.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASTextNode+Deprecated.html deleted file mode 100755 index a310bc3f27..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASTextNode+Deprecated.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - ASTextNode(Deprecated) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASTextNode(Deprecated) Category Reference

    - - -
    - - - - -
    Declared inASTextNode.h
    - - - - - - - - -
    - - - - - - -
    -
    - -

      ) -

    - -
    -
    - -
    - - -
    -

    The attributedString and attributedText properties are equivalent, but attributedText is now the standard API -name in order to match UILabel and ASEditableTextNode.

    -
    - - - -
    @property (nullable, nonatomic, copy) NSAttributedString *ASDISPLAYNODE_DEPRECATED_MSG ( "Use .attributedText instead." )
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASViewController+ASRangeControllerUpdateRangeProtocol.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASViewController+ASRangeControllerUpdateRangeProtocol.html deleted file mode 100755 index 0c0d6ab95f..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/ASViewController+ASRangeControllerUpdateRangeProtocol.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - ASViewController(ASRangeControllerUpdateRangeProtocol) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASViewController(ASRangeControllerUpdateRangeProtocol) Category Reference

    - - -
    - - - - -
    Declared inASViewController.h
    - - - - - - -
    - - - - - - -
    -
    - -

      automaticallyAdjustRangeModeBasedOnViewEvents -

    - -
    -
    - -
    - - -
    -

    Automatically adjust range mode based on view events. If you set this to YES, the view controller or its node -must conform to the ASRangeControllerUpdateRangeProtocol.

    -
    - - - -
    @property (nonatomic, assign) BOOL automaticallyAdjustRangeModeBasedOnViewEvents
    - - - - - - - - - -
    -

    Discussion

    -

    Default value is YES if node or view controller conform to ASRangeControllerUpdateRangeProtocol otherwise it is NO.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASViewController.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/CALayer+AsyncDisplayKit.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/CALayer+AsyncDisplayKit.html deleted file mode 100755 index 33a9fc83d1..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/CALayer+AsyncDisplayKit.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - CALayer(AsyncDisplayKit) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    CALayer(AsyncDisplayKit) Category Reference

    - - -
    - - - - -
    Declared inASDisplayNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – addSubnode: -

    - -
    -
    - -
    - - -
    -

    Convenience method, equivalent to [layer addSublayer:node.layer].

    -
    - - - -
    - (void)addSubnode:(nonnull ASDisplayNode *)node
    - - - -
    -

    Parameters

    - - - - - - - -
    node

    The node to be added.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/NSNumber+ASDimension.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/NSNumber+ASDimension.html deleted file mode 100755 index 7d11d7936e..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/NSNumber+ASDimension.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - NSNumber(ASDimension) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    NSNumber(ASDimension) Category Reference

    - - -
    - - - - -
    Declared inASDimension.h
    - - - - -
    - -

    Overview

    -

    Resolve this dimension to a parent size.

    -
    - - - - - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/NSURL+ASPhotosFrameworkURLs.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/NSURL+ASPhotosFrameworkURLs.html deleted file mode 100755 index 1ca4bce449..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/NSURL+ASPhotosFrameworkURLs.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - NSURL(ASPhotosFrameworkURLs) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    NSURL(ASPhotosFrameworkURLs) Category Reference

    - - -
    - - - - -
    Declared inASMultiplexImageNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

    + URLWithAssetLocalIdentifier:targetSize:contentMode:options: -

    - -
    -
    - -
    - - -
    -

    Create an NSURL that specifies an image from the Photos framework.

    -
    - - - -
    + (NSURL *)URLWithAssetLocalIdentifier:(NSString *)assetLocalIdentifier targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(PHImageRequestOptions *)options
    - - - - - - - - - -
    -

    Discussion

    -

    When implementing -multiplexImageNode:URLForImageIdentifier:, you can return a URL -created by this method and the image node will attempt to load the image from the Photos framework.

    Note: The synchronous flag in options is ignored.

    Note: The Opportunistic delivery mode is not supported and will be treated as HighQualityFormat.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/UIImage+ASDKAdditions.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/UIImage+ASDKAdditions.html deleted file mode 100755 index 6bf7903113..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/UIImage+ASDKAdditions.html +++ /dev/null @@ -1,352 +0,0 @@ - - - - - - UIImage(ASDKAdditions) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - Texture -

    - -
    -
    - - - -
    -
    -
    -
    -

    UIImage(ASDKAdditions) Category Reference

    - - -
    - - - - -
    Declared inUIImage+ASConvenience.h
    - - - - - - -
    - - - - - - -
    -
    - -

    + as_resizableRoundedImageWithCornerRadius:cornerColor:fillColor: -

    - -
    -
    - -
    - - -
    -

    This generates a flat-color, rounded-corner resizeable image

    -
    - - - -
    + (UIImage *)as_resizableRoundedImageWithCornerRadius:(CGFloat)cornerRadius cornerColor:(UIColor *)cornerColor fillColor:(UIColor *)fillColor
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    cornerRadius

    The radius of the rounded-corner

    cornerColor

    The fill color of the corners (For Alpha corners use clearColor)

    fillColor

    The fill color of the rounded-corner image

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    UIImage+ASConvenience.h

    -
    - - -
    -
    -
    - -

    + as_resizableRoundedImageWithCornerRadius:cornerColor:fillColor:borderColor:borderWidth: -

    - -
    -
    - -
    - - -
    -

    This generates a flat-color, rounded-corner resizeable image with a border

    -
    - - - -
    + (UIImage *)as_resizableRoundedImageWithCornerRadius:(CGFloat)cornerRadius cornerColor:(UIColor *)cornerColor fillColor:(UIColor *)fillColor borderColor:(nullable UIColor *)borderColor borderWidth:(CGFloat)borderWidth
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    cornerRadius

    The radius of the rounded-corner

    cornerColor

    The fill color of the corners (For Alpha corners use clearColor)

    fillColor

    The fill color of the rounded-corner image

    borderColor

    The border color. Set to nil for no border.

    borderWidth

    The border width. Dummy value if borderColor = nil.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    UIImage+ASConvenience.h

    -
    - - -
    -
    -
    - -

    + as_resizableRoundedImageWithCornerRadius:cornerColor:fillColor:borderColor:borderWidth:roundedCorners:scale: -

    - -
    -
    - -
    - - -
    -

    This generates a flat-color, rounded-corner resizeable image with a border

    -
    - - - -
    + (UIImage *)as_resizableRoundedImageWithCornerRadius:(CGFloat)cornerRadius cornerColor:(UIColor *)cornerColor fillColor:(UIColor *)fillColor borderColor:(nullable UIColor *)borderColor borderWidth:(CGFloat)borderWidth roundedCorners:(UIRectCorner)roundedCorners scale:(CGFloat)scale
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    cornerRadius

    The radius of the rounded-corner

    cornerColor

    The fill color of the corners (For Alpha corners use clearColor)

    fillColor

    The fill color of the rounded-corner image

    borderColor

    The border color. Set to nil for no border.

    borderWidth

    The border width. Dummy value if borderColor = nil.

    roundedCorners

    Select individual or multiple corners to round. Set to UIRectCornerAllCorners to round all 4 corners.

    scale

    The number of pixels per point. Provide 0.0 to use the screen scale.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    UIImage+ASConvenience.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - - -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Categories/UIView+AsyncDisplayKit.html b/submodules/AsyncDisplayKit/docs/appledoc/Categories/UIView+AsyncDisplayKit.html deleted file mode 100755 index a1bcd6c40b..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Categories/UIView+AsyncDisplayKit.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - UIView(AsyncDisplayKit) Category Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    UIView(AsyncDisplayKit) Category Reference

    - - -
    - - - - -
    Declared inASDisplayNode.h
    - - - - -
    - -

    Overview

    -

    UIVIew(AsyncDisplayKit) defines convenience method for adding sub-ASDisplayNode to an UIView.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – addSubnode: -

    - -
    -
    - -
    - - -
    -

    Convenience method, equivalent to [view addSubview:node.view] or [view.layer addSublayer:node.layer] if layer-backed.

    -
    - - - -
    - (void)addSubnode:(nonnull ASDisplayNode *)node
    - - - -
    -

    Parameters

    - - - - - - - -
    node

    The node to be added.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASAbsoluteLayoutSpec.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASAbsoluteLayoutSpec.html deleted file mode 100755 index 4a526d9b96..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASAbsoluteLayoutSpec.html +++ /dev/null @@ -1,302 +0,0 @@ - - - - - - ASAbsoluteLayoutSpec Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASAbsoluteLayoutSpec Class Reference

    - - -
    - - - - - - - -
    Inherits fromASLayoutSpec : NSObject
    Declared inASAbsoluteLayoutSpec.h
    - - - - -
    - -

    Overview

    -

    A layout spec that positions children at fixed positions.

    -
    - - - - - -
    - - - - - - -
    -
    - -

      sizing -

    - -
    -
    - -
    - - -
    -

    How much space will the spec taken up

    -
    - - - -
    @property (nonatomic, assign) ASAbsoluteLayoutSpecSizing sizing
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASAbsoluteLayoutSpec.h

    -
    - - -
    -
    -
    - -

    + absoluteLayoutSpecWithSizing:children: -

    - -
    -
    - -
    - - -
    -

    How much space the spec will take up

    -
    - - - -
    + (instancetype)absoluteLayoutSpecWithSizing:(ASAbsoluteLayoutSpecSizing)sizing children:(NSArray<id<ASLayoutElement> > *)children
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    sizing

    How much space the spec will take up

    children

    Children to be positioned at fixed positions

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASAbsoluteLayoutSpec.h

    -
    - - -
    -
    -
    - -

    + absoluteLayoutSpecWithChildren: -

    - -
    -
    - -
    - - -
    -

    Children to be positioned at fixed positions

    -
    - - - -
    + (instancetype)absoluteLayoutSpecWithChildren:(NSArray<id<ASLayoutElement> > *)children
    - - - -
    -

    Parameters

    - - - - - - - -
    children

    Children to be positioned at fixed positions

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASAbsoluteLayoutSpec.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASAsciiArtBoxCreator.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASAsciiArtBoxCreator.html deleted file mode 100755 index de14a95656..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASAsciiArtBoxCreator.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - ASAsciiArtBoxCreator Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASAsciiArtBoxCreator Class Reference

    - - -
    - - - - - - - -
    Inherits fromNSObject
    Declared inASAsciiArtBoxCreator.h
    - - - - -
    - -

    Overview

    -

    A that takes a parent and its children and renders as ascii art box.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    + horizontalBoxStringForChildren:parent: -

    - -
    -
    - -
    - - -
    -

    Renders an ascii art box with the children aligned horizontally -Example: -————ASStackLayoutSpec———–

    - -

    | ASTextNode ASTextNode ASTextNode |

    -
    - - - -
    + (NSString *)horizontalBoxStringForChildren:(NSArray<NSString*> *)children parent:(NSString *)parent
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASAsciiArtBoxCreator.h

    -
    - - -
    -
    -
    - -

    + verticalBoxStringForChildren:parent: -

    - -
    -
    - -
    - - -
    -

    Renders an ascii art box with the children aligned vertically. -Example: -–ASStackLayoutSpec– -| ASTextNode | -| ASTextNode |

    - -

    | ASTextNode |

    -
    - - - -
    + (NSString *)verticalBoxStringForChildren:(NSArray<NSString*> *)children parent:(NSString *)parent
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASAsciiArtBoxCreator.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASBackgroundLayoutSpec.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASBackgroundLayoutSpec.html deleted file mode 100755 index e860a8b322..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASBackgroundLayoutSpec.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - ASBackgroundLayoutSpec Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASBackgroundLayoutSpec Class Reference

    - - -
    - - - - - - - -
    Inherits fromASLayoutSpec : NSObject
    Declared inASBackgroundLayoutSpec.h
    - - - - -
    - -

    Overview

    -

    Lays out a single layoutElement child, then lays out a background layoutElement instance behind it stretched to its size.

    -
    - - - - - -
    - - - - - - -
    -
    - -

      background -

    - -
    -
    - -
    - - -
    -

    Background layoutElement for this layout spec

    -
    - - - -
    @property (nullable, nonatomic, strong) id<ASLayoutElement> background
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASBackgroundLayoutSpec.h

    -
    - - -
    -
    -
    - -

    + backgroundLayoutSpecWithChild:background: -

    - -
    -
    - -
    - - -
    -

    Creates and returns an ASBackgroundLayoutSpec object

    -
    - - - -
    + (instancetype)backgroundLayoutSpecWithChild:(id<ASLayoutElement>)child background:(nullable id<ASLayoutElement>)background
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    child

    A child that is laid out to determine the size of this spec.

    background

    A layoutElement object that is laid out behind the child. If this is nil, the background is omitted.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASBackgroundLayoutSpec.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASButtonNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASButtonNode.html deleted file mode 100755 index 3aca43f70f..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASButtonNode.html +++ /dev/null @@ -1,831 +0,0 @@ - - - - - - ASButtonNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASButtonNode Class Reference

    - - -
    - - - - - - - -
    Inherits fromASControlNode : ASDisplayNode : ASDealloc2MainObject
    Declared inASButtonNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

      contentSpacing -

    - -
    -
    - -
    - - -
    -

    Spacing between image and title. Defaults to 8.0.

    -
    - - - -
    @property (nonatomic, assign) CGFloat contentSpacing
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASButtonNode.h

    -
    - - -
    -
    -
    - -

      laysOutHorizontally -

    - -
    -
    - -
    - - -
    -

    Whether button should be laid out vertically (image on top of text) or horizontally (image to the left of text). -ASButton node does not yet support RTL but it should be fairly easy to implement. -Defaults to YES.

    -
    - - - -
    @property (nonatomic, assign) BOOL laysOutHorizontally
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASButtonNode.h

    -
    - - -
    -
    -
    - -

      contentHorizontalAlignment -

    - -
    -
    - -
    - - -
    -

    Horizontally align content (text or image). -Defaults to ASHorizontalAlignmentMiddle.

    -
    - - - -
    @property (nonatomic, assign) ASHorizontalAlignment contentHorizontalAlignment
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASButtonNode.h

    -
    - - -
    -
    -
    - -

      contentVerticalAlignment -

    - -
    -
    - -
    - - -
    -

    Vertically align content (text or image). -Defaults to ASVerticalAlignmentCenter.

    -
    - - - -
    @property (nonatomic, assign) ASVerticalAlignment contentVerticalAlignment
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASButtonNode.h

    -
    - - -
    -
    -
    - -

      contentEdgeInsets -

    - -
    -
    - -
    - - -
    -

    The insets used around the title and image node

    -
    - - - -
    @property (nonatomic, assign) UIEdgeInsets contentEdgeInsets
    - - - - - - - - - -
    -

    Discussion

    -

    The insets used around the title and image node

    -
    - - - - - - - -
    -

    Declared In

    -

    ASButtonNode.h

    -
    - - -
    -
    -
    - -

      imageAlignment -

    - -
    -
    - -
    - - -
    -

    @discusstion Whether the image should be aligned at the beginning or at the end of node. Default is ASButtonNodeImageAlignmentBeginning.

    -
    - - - -
    @property (nonatomic, assign) ASButtonNodeImageAlignment imageAlignment
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASButtonNode.h

    -
    - - -
    -
    -
    - -

    – attributedTitleForState: -

    - -
    -
    - -
    - - -
    -

    Returns the styled title associated with the specified state.

    -
    - - - -
    - (NSAttributedString *_Nullable)attributedTitleForState:(ASControlState)state
    - - - -
    -

    Parameters

    - - - - - - - -
    state

    The state that uses the styled title. The possible values are described in ASControlState.

    -
    - - - -
    -

    Return Value

    -

    The title for the specified state.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASButtonNode.h

    -
    - - -
    -
    -
    - -

    – setAttributedTitle:forState: -

    - -
    -
    - -
    - - -
    -

    Sets the styled title to use for the specified state. This will reset styled title previously set with -setTitle:withFont:withColor:forState.

    -
    - - - -
    - (void)setAttributedTitle:(nullable NSAttributedString *)title forState:(ASControlState)state
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    title

    The styled text string to use for the title.

    state

    The state that uses the specified title. The possible values are described in ASControlState.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASButtonNode.h

    -
    - - -
    -
    -
    - -

    – setTitle:withFont:withColor:forState: -

    - -
    -
    - -
    - - -
    -

    Sets the title to use for the specified state. This will reset styled title previously set with -setAttributedTitle:forState.

    -
    - - - -
    - (void)setTitle:(NSString *)title withFont:(nullable UIFont *)font withColor:(nullable UIColor *)color forState:(ASControlState)state
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - -
    title

    The styled text string to use for the title.

    font

    The font to use for the title.

    color

    The color to use for the title.

    state

    The state that uses the specified title. The possible values are described in ASControlState.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASButtonNode.h

    -
    - - -
    -
    -
    - -

    – imageForState: -

    - -
    -
    - -
    - - -
    -

    Returns the image used for a button state.

    -
    - - - -
    - (nullable UIImage *)imageForState:(ASControlState)state
    - - - -
    -

    Parameters

    - - - - - - - -
    state

    The state that uses the image. Possible values are described in ASControlState.

    -
    - - - -
    -

    Return Value

    -

    The image used for the specified state.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASButtonNode.h

    -
    - - -
    -
    -
    - -

    – setImage:forState: -

    - -
    -
    - -
    - - -
    -

    Sets the image to use for the specified state.

    -
    - - - -
    - (void)setImage:(nullable UIImage *)image forState:(ASControlState)state
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    image

    The image to use for the specified state.

    state

    The state that uses the specified title. The values are described in ASControlState.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASButtonNode.h

    -
    - - -
    -
    -
    - -

    – setBackgroundImage:forState: -

    - -
    -
    - -
    - - -
    -

    Sets the background image to use for the specified state.

    -
    - - - -
    - (void)setBackgroundImage:(nullable UIImage *)image forState:(ASControlState)state
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    image

    The image to use for the specified state.

    state

    The state that uses the specified title. The values are described in ASControlState.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASButtonNode.h

    -
    - - -
    -
    -
    - -

    – backgroundImageForState: -

    - -
    -
    - -
    - - -
    -

    Returns the background image used for a button state.

    -
    - - - -
    - (nullable UIImage *)backgroundImageForState:(ASControlState)state
    - - - -
    -

    Parameters

    - - - - - - - -
    state

    The state that uses the image. Possible values are described in ASControlState.

    -
    - - - -
    -

    Return Value

    -

    The background image used for the specified state.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASButtonNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASCellNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASCellNode.html deleted file mode 100755 index 2f92770841..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASCellNode.html +++ /dev/null @@ -1,558 +0,0 @@ - - - - - - ASCellNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCellNode Class Reference

    - - -
    - - - - - - - -
    Inherits fromASDisplayNode : ASDealloc2MainObject
    Declared inASCellNode.h
    - - - - -
    - -

    Overview

    -
      -
    • Generic cell node. Subclass this instead of ASDisplayNode to use with ASTableView and ASCollectionView.

    • -
    • @note When a cell node is contained inside a collection view (or table view),

    • -
    • calling -setNeedsLayout will also notify the collection on the main thread
    • -
    • so that the collection can update its item layout if the cell’s size changed.
    • -
    - -
    - - - - - -
    - - - - - - -
    -
    - -

      neverShowPlaceholders -

    - -
    -
    - -
    - - -
    -

    When enabled, ensures that the cell is completely displayed before allowed onscreen.

    - -

    @default NO

    -
    - - - -
    @property (nonatomic, assign) BOOL neverShowPlaceholders
    - - - - - - - - - -
    -

    Discussion

    -

    Normally, ASCellNodes are preloaded and have finished display before they are onscreen. -However, if the Table or Collection’s rangeTuningParameters are set to small values (or 0), -or if the user is scrolling rapidly on a slow device, it is possible for a cell’s display to -be incomplete when it becomes visible.

    - -

    In this case, normally placeholder states are shown and scrolling continues uninterrupted. -The finished, drawn content is then shown as soon as it is ready.

    - -

    With this property set to YES, the main thread will be blocked until display is complete for -the cell. This is more similar to UIKit, and in fact makes AsyncDisplayKit scrolling visually -indistinguishable from UIKit’s, except being faster.

    - -

    Using this option does not eliminate all of the performance advantages of AsyncDisplayKit. -Normally, a cell has been preloading and is almost done when it reaches the screen, so the -blocking time is very short. If the rangeTuningParameters are set to 0, still this option -outperforms UIKit: while the main thread is waiting, subnode display executes concurrently.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCellNode.h

    -
    - - -
    -
    -
    - -

      selected -

    - -
    -
    - -
    - - -
    -

    A Boolean value that is synchronized with the underlying collection or tableView cell property. -Setting this value is equivalent to calling selectItem / deselectItem on the collection or table.

    -
    - - - -
    @property (nonatomic, assign, getter=isSelected) BOOL selected
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCellNode.h

    -
    - - -
    -
    -
    - -

      highlighted -

    - -
    -
    - -
    - - -
    -

    A Boolean value that is synchronized with the underlying collection or tableView cell property. -Setting this value is equivalent to calling highlightItem / unHighlightItem on the collection or table.

    -
    - - - -
    @property (nonatomic, assign, getter=isHighlighted) BOOL highlighted
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCellNode.h

    -
    - - -
    -
    -
    - -

      indexPath -

    - -
    -
    - -
    - - -
    -

    The current index path of this cell node, or @c nil if this node is -not a valid item inside a table node or collection node.

    -
    - - - -
    @property (nonatomic, readonly, nullable) NSIndexPath *indexPath
    - - - - - - - - - -
    -

    Discussion

    -

    Note: This property must be accessed on the main thread.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCellNode.h

    -
    - - -
    -
    -
    - -

      owningNode -

    - -
    -
    - -
    - - -
    -

    The owning node (ASCollectionNode/ASTableNode) of this cell node, or @c nil if this node is -not a valid item inside a table node or collection node or if those nodes are nil.

    -
    - - - -
    @property (weak, nonatomic, readonly, nullable) ASDisplayNode *owningNode
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCellNode.h

    -
    - - -
    -
    -
    - -

    – applyLayoutAttributes: -

    - -
    -
    - -
    - - -
    -

    Called by the system when ASCellNode is used with an ASCollectionNode. It will not be called by ASTableNode. -When the UICollectionViewLayout object returns a new UICollectionViewLayoutAttributes object, the corresponding ASCellNode will be updated. -See UICollectionViewCell’s applyLayoutAttributes: for a full description.

    -
    - - - -
    - (void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCellNode.h

    -
    - - -
    -
    -
    - -

    – initWithViewControllerBlock:didLoadBlock: -

    - -
    -
    - -
    - - -
    -

    Initializes a cell with a given view controller block.

    -
    - - - -
    - (instancetype)initWithViewControllerBlock:(ASDisplayNodeViewControllerBlock)viewControllerBlock didLoadBlock:(nullable ASDisplayNodeDidLoadBlock)didLoadBlock
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    viewControllerBlock

    The block that will be used to create the backing view controller.

    didLoadBlock

    The block that will be called after the view controller’s view is loaded.

    -
    - - - -
    -

    Return Value

    -

    An ASCellNode created using the root view of the view controller provided by the viewControllerBlock. -The view controller’s root view is resized to match the calculated size produced during layout.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCellNode.h

    -
    - - -
    -
    -
    - -

    – cellNodeVisibilityEvent:inScrollView:withCellFrame: -

    - -
    -
    - -
    - - -
    -

    Notifies the cell node of certain visibility events, such as changing visible rect.

    -
    - - - -
    - (void)cellNodeVisibilityEvent:(ASCellNodeVisibilityEvent)event inScrollView:(nullable UIScrollView *)scrollView withCellFrame:(CGRect)cellFrame
    - - - - - - - - - -
    -

    Discussion

    -

    Warning: In cases where an ASCellNode is used as a plain node – i.e. not returned from the -nodeBlockForItemAtIndexPath/nodeForItemAtIndexPath data source methods – this method will -deliver only the Visible and Invisible events, scrollView will be nil, and -cellFrame will be the zero rect.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCellNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASCenterLayoutSpec.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASCenterLayoutSpec.html deleted file mode 100755 index fe4f01cffd..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASCenterLayoutSpec.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - ASCenterLayoutSpec Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCenterLayoutSpec Class Reference

    - - -
    - - - - - - - -
    Inherits fromASRelativeLayoutSpec : ASLayoutSpec : NSObject
    Declared inASCenterLayoutSpec.h
    - - - - -
    - -

    Overview

    -

    Lays out a single layoutElement child and position it so that it is centered into the layout bounds. -NOTE: ASRelativeLayoutSpec offers all of the capabilities of Center, and more. -Check it out if you would like to be able to position the child at any corner or the middle of an edge.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    + centerLayoutSpecWithCenteringOptions:sizingOptions:child: -

    - -
    -
    - -
    - - -
    -

    Initializer.

    -
    - - - -
    + (instancetype)centerLayoutSpecWithCenteringOptions:(ASCenterLayoutSpecCenteringOptions)centeringOptions sizingOptions:(ASCenterLayoutSpecSizingOptions)sizingOptions child:(id<ASLayoutElement>)child
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    centeringOptions

    How the child is centered.

    sizingOptions

    How much space will be taken up.

    child

    The child to center.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCenterLayoutSpec.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASCollectionNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASCollectionNode.html deleted file mode 100755 index 2471991465..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASCollectionNode.html +++ /dev/null @@ -1,2405 +0,0 @@ - - - - - - ASCollectionNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCollectionNode Class Reference

    - - -
    - - - - - - - - - - -
    Inherits fromASDisplayNode : ASDealloc2MainObject
    Conforms toASRangeControllerUpdateRangeProtocol
    Declared inASCollectionNode.h
    - - - - -
    - -

    Overview

    -

    ASCollectionNode is a node based class that wraps an ASCollectionView. It can be used -as a subnode of another node, and provide room for many (great) features and improvements later on.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – initWithCollectionViewLayout: -

    - -
    -
    - -
    - - -
    -

    Initializes an ASCollectionNode

    -
    - - - -
    - (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout
    - - - -
    -

    Parameters

    - - - - - - - -
    layout

    The layout object to use for organizing items. The collection view stores a strong reference to the specified object. Must not be nil.

    -
    - - - - - - - -
    -

    Discussion

    -

    Initializes and returns a newly allocated collection node object with the specified layout.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – initWithFrame:collectionViewLayout: -

    - -
    -
    - -
    - - -
    -

    Initializes an ASCollectionNode

    -
    - - - -
    - (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    frame

    The frame rectangle for the collection view, measured in points. The origin of the frame is relative to the superview in which you plan to add it. This frame is passed to the superclass during initialization.

    layout

    The layout object to use for organizing items. The collection view stores a strong reference to the specified object. Must not be nil.

    -
    - - - - - - - -
    -

    Discussion

    -

    Initializes and returns a newly allocated collection node object with the specified frame and layout.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

      view -

    - -
    -
    - -
    - - -
    -

    Returns the corresponding ASCollectionView

    -
    - - - -
    @property (strong, nonatomic, readonly) ASCollectionView *view
    - - - - - -
    -

    Return Value

    -

    view The corresponding ASCollectionView.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

      delegate -

    - -
    -
    - -
    - - -
    -

    The object that acts as the asynchronous delegate of the collection view

    -
    - - - -
    @property (weak, nonatomic) id<ASCollectionDelegate> delegate
    - - - - - - - - - -
    -

    Discussion

    -

    The delegate must adopt the ASCollectionDelegate protocol. The collection view maintains a weak reference to the delegate object.

    - -

    The delegate object is responsible for providing size constraints for nodes and indicating whether batch fetching should begin.

    Note: This is a convenience method which sets the asyncDelegate on the collection node’s collection view.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

      dataSource -

    - -
    -
    - -
    - - -
    -

    The object that acts as the asynchronous data source of the collection view

    -
    - - - -
    @property (weak, nonatomic) id<ASCollectionDataSource> dataSource
    - - - - - - - - - -
    -

    Discussion

    -

    The datasource must adopt the ASCollectionDataSource protocol. The collection view maintains a weak reference to the datasource object.

    - -

    The datasource object is responsible for providing nodes or node creation blocks to the collection view.

    Note: This is a convenience method which sets the asyncDatasource on the collection node’s collection view.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

      allowsSelection -

    - -
    -
    - -
    - - -
    -

    A Boolean value that indicates whether users can select items in the collection node. -If the value of this property is YES (the default), users can select items. If you want more fine-grained control over the selection of items, you must provide a delegate object and implement the appropriate methods of the UICollectionNodeDelegate protocol.

    -
    - - - -
    @property (nonatomic, assign) BOOL allowsSelection
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

      allowsMultipleSelection -

    - -
    -
    - -
    - - -
    -

    A Boolean value that determines whether users can select more than one item in the collection node. -This property controls whether multiple items can be selected simultaneously. The default value of this property is NO. -When the value of this property is YES, tapping a cell adds it to the current selection (assuming the delegate permits the cell to be selected). Tapping the cell again removes it from the selection.

    -
    - - - -
    @property (nonatomic, assign) BOOL allowsMultipleSelection
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – tuningParametersForRangeType: -

    - -
    -
    - -
    - - -
    -

    Tuning parameters for a range type in full mode.

    -
    - - - -
    - (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - -
    rangeType

    The range type to get the tuning parameters for.

    -
    - - - -
    -

    Return Value

    -

    A tuning parameter value for the given range type in full mode.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – setTuningParameters:forRangeType: -

    - -
    -
    - -
    - - -
    -

    Set the tuning parameters for a range type in full mode.

    -
    - - - -
    - (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    tuningParameters

    The tuning parameters to store for a range type.

    rangeType

    The range type to set the tuning parameters for.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – tuningParametersForRangeMode:rangeType: -

    - -
    -
    - -
    - - -
    -

    Tuning parameters for a range type in the specified mode.

    -
    - - - -
    - (ASRangeTuningParameters)tuningParametersForRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    rangeMode

    The range mode to get the running parameters for.

    rangeType

    The range type to get the tuning parameters for.

    -
    - - - -
    -

    Return Value

    -

    A tuning parameter value for the given range type in the given mode.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – setTuningParameters:forRangeMode:rangeType: -

    - -
    -
    - -
    - - -
    -

    Set the tuning parameters for a range type in the specified mode.

    -
    - - - -
    - (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    tuningParameters

    The tuning parameters to store for a range type.

    rangeMode

    The range mode to set the running parameters for.

    rangeType

    The range type to set the tuning parameters for.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – scrollToItemAtIndexPath:atScrollPosition:animated: -

    - -
    -
    - -
    - - -
    -

    Scrolls the collection to the given item.

    -
    - - - -
    - (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    indexPath

    The index path of the item.

    scrollPosition

    Where the item should end up after the scroll.

    animated

    Whether the scroll should be animated or not.

    - -

    This method must be called on the main thread.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – registerSupplementaryNodeOfKind: -

    - -
    -
    - -
    - - -
    -

    Registers the given kind of supplementary node for use in creating node-backed supplementary elements.

    -
    - - - -
    - (void)registerSupplementaryNodeOfKind:(NSString *)elementKind
    - - - -
    -

    Parameters

    - - - - - - - -
    elementKind

    The kind of supplementary node that will be requested through the data source.

    -
    - - - - - - - -
    -

    Discussion

    -

    Use this method to register support for the use of supplementary nodes in place of the default -registerClass:forSupplementaryViewOfKind:withReuseIdentifier: and registerNib:forSupplementaryViewOfKind:withReuseIdentifier: -methods. This method will register an internal backing view that will host the contents of the supplementary nodes -returned from the data source.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – performBatchAnimated:updates:completion: -

    - -
    -
    - -
    - - -
    -

    Perform a batch of updates asynchronously, optionally disabling all animations in the batch. This method must be called from the main thread. -The data source must be updated to reflect the changes before the update block completes.

    -
    - - - -
    - (void)performBatchAnimated:(BOOL)animated updates:(nullable __attribute ( ( noescape ) ) void ( ^ ) ( ))updates completion:(nullable void ( ^ ) ( BOOL finished ))completion
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    animated

    NO to disable animations for this batch

    updates

    The block that performs the relevant insert, delete, reload, or move operations.

    completion

    A completion handler block to execute when all of the operations are finished. This block takes a single -Boolean parameter that contains the value YES if all of the related animations completed successfully or -NO if they were interrupted. This parameter may be nil. If supplied, the block is run on the main thread.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – performBatchUpdates:completion: -

    - -
    -
    - -
    - - -
    -

    Perform a batch of updates asynchronously, optionally disabling all animations in the batch. This method must be called from the main thread. -The data source must be updated to reflect the changes before the update block completes.

    -
    - - - -
    - (void)performBatchUpdates:(nullable __attribute ( ( noescape ) ) void ( ^ ) ( ))updates completion:(nullable void ( ^ ) ( BOOL finished ))completion
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    updates

    The block that performs the relevant insert, delete, reload, or move operations.

    completion

    A completion handler block to execute when all of the operations are finished. This block takes a single -Boolean parameter that contains the value YES if all of the related animations completed successfully or -NO if they were interrupted. This parameter may be nil. If supplied, the block is run on the main thread.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – waitUntilAllUpdatesAreCommitted -

    - -
    -
    - -
    - - -
    -

    Blocks execution of the main thread until all section and item updates are committed to the view. This method must be called from the main thread.

    -
    - - - -
    - (void)waitUntilAllUpdatesAreCommitted
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – insertSections: -

    - -
    -
    - -
    - - -
    -

    Inserts one or more sections.

    -
    - - - -
    - (void)insertSections:(NSIndexSet *)sections
    - - - -
    -

    Parameters

    - - - - - - - -
    sections

    An index set that specifies the sections to insert.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The data source must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – deleteSections: -

    - -
    -
    - -
    - - -
    -

    Deletes one or more sections.

    -
    - - - -
    - (void)deleteSections:(NSIndexSet *)sections
    - - - -
    -

    Parameters

    - - - - - - - -
    sections

    An index set that specifies the sections to delete.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The data source must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – reloadSections: -

    - -
    -
    - -
    - - -
    -

    Reloads the specified sections.

    -
    - - - -
    - (void)reloadSections:(NSIndexSet *)sections
    - - - -
    -

    Parameters

    - - - - - - - -
    sections

    An index set that specifies the sections to reload.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The data source must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – moveSection:toSection: -

    - -
    -
    - -
    - - -
    -

    Moves a section to a new location.

    -
    - - - -
    - (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    section

    The index of the section to move.

    newSection

    The index that is the destination of the move for the section.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The data source must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – insertItemsAtIndexPaths: -

    - -
    -
    - -
    - - -
    -

    Inserts items at the locations identified by an array of index paths.

    -
    - - - -
    - (void)insertItemsAtIndexPaths:(NSArray<NSIndexPath*> *)indexPaths
    - - - -
    -

    Parameters

    - - - - - - - -
    indexPaths

    An array of NSIndexPath objects, each representing an item index and section index that together identify an item.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The data source must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – deleteItemsAtIndexPaths: -

    - -
    -
    - -
    - - -
    -

    Deletes the items specified by an array of index paths.

    -
    - - - -
    - (void)deleteItemsAtIndexPaths:(NSArray<NSIndexPath*> *)indexPaths
    - - - -
    -

    Parameters

    - - - - - - - -
    indexPaths

    An array of NSIndexPath objects identifying the items to delete.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The data source must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – reloadItemsAtIndexPaths: -

    - -
    -
    - -
    - - -
    -

    Reloads the specified items.

    -
    - - - -
    - (void)reloadItemsAtIndexPaths:(NSArray<NSIndexPath*> *)indexPaths
    - - - -
    -

    Parameters

    - - - - - - - -
    indexPaths

    An array of NSIndexPath objects identifying the items to reload.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The data source must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – moveItemAtIndexPath:toIndexPath: -

    - -
    -
    - -
    - - -
    -

    Moves the item at a specified location to a destination location.

    -
    - - - -
    - (void)moveItemAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    indexPath

    The index path identifying the item to move.

    newIndexPath

    The index path that is the destination of the move for the item.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The data source must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – reloadDataWithCompletion: -

    - -
    -
    - -
    - - -
    -

    Reload everything from scratch, destroying the working range and all cached nodes.

    -
    - - - -
    - (void)reloadDataWithCompletion:(nullable void ( ^ ) ( ))completion
    - - - -
    -

    Parameters

    - - - - - - - -
    completion

    block to run on completion of asynchronous loading or nil. If supplied, the block is run on -the main thread.

    -
    - - - - - - - -
    -

    Discussion

    -

    Warning: This method is substantially more expensive than UICollectionView’s version.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – reloadData -

    - -
    -
    - -
    - - -
    -

    Reload everything from scratch, destroying the working range and all cached nodes.

    -
    - - - -
    - (void)reloadData
    - - - - - - - - - -
    -

    Discussion

    -

    Warning: This method is substantially more expensive than UICollectionView’s version.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – relayoutItems -

    - -
    -
    - -
    - - -
    -

    Triggers a relayout of all nodes.

    -
    - - - -
    - (void)relayoutItems
    - - - - - - - - - -
    -

    Discussion

    -

    This method invalidates and lays out every cell node in the collection view.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

      indexPathsForSelectedItems -

    - -
    -
    - -
    - - -
    -

    The index paths of the selected items, or @c nil if no items are selected.

    -
    - - - -
    @property (nonatomic, readonly, nullable) NSArray<NSIndexPath*> *indexPathsForSelectedItems
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – selectItemAtIndexPath:animated:scrollPosition: -

    - -
    -
    - -
    - - -
    -

    Selects the item at the specified index path and optionally scrolls it into view. -If the allowsSelection property is NO, calling this method has no effect. If there is an existing selection with a different index path and the allowsMultipleSelection property is NO, calling this method replaces the previous selection. -This method does not cause any selection-related delegate methods to be called.

    -
    - - - -
    - (void)selectItemAtIndexPath:(nullable NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UICollectionViewScrollPosition)scrollPosition
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    indexPath

    The index path of the item to select. Specifying nil for this parameter clears the current selection.

    animated

    Specify YES to animate the change in the selection or NO to make the change without animating it.

    scrollPosition

    An option that specifies where the item should be positioned when scrolling finishes. For a list of possible values, see UICollectionViewScrollPosition.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – deselectItemAtIndexPath:animated: -

    - -
    -
    - -
    - - -
    -

    Deselects the item at the specified index. -If the allowsSelection property is NO, calling this method has no effect. -This method does not cause any selection-related delegate methods to be called.

    -
    - - - -
    - (void)deselectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    indexPath

    The index path of the item to select. Specifying nil for this parameter clears the current selection.

    animated

    Specify YES to animate the change in the selection or NO to make the change without animating it.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – numberOfItemsInSection: -

    - -
    -
    - -
    - - -
    -

    Retrieves the number of items in the given section.

    -
    - - - -
    - (NSInteger)numberOfItemsInSection:(NSInteger)section
    - - - -
    -

    Parameters

    - - - - - - - -
    section

    The section.

    -
    - - - -
    -

    Return Value

    -

    The number of items.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

      numberOfSections -

    - -
    -
    - -
    - - -
    -

    The number of sections.

    -
    - - - -
    @property (nonatomic, readonly) NSInteger numberOfSections
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

      visibleNodes -

    - -
    -
    - -
    - - -
    -

    Similar to -visibleCells.

    -
    - - - -
    @property (nonatomic, readonly) NSArray<__kindofASCellNode*> *visibleNodes
    - - - - - -
    -

    Return Value

    -

    an array containing the nodes being displayed on screen. This must be called on the main thread.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – nodeForItemAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Retrieves the node for the item at the given index path.

    -
    - - - -
    - (nullable __kindof ASCellNode *)nodeForItemAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - -
    indexPath

    The index path of the requested item.

    -
    - - - -
    -

    Return Value

    -

    The node for the given item, or @c nil if no item exists at the specified path.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – indexPathForNode: -

    - -
    -
    - -
    - - -
    -

    Retrieve the index path for the item with the given node.

    -
    - - - -
    - (nullable NSIndexPath *)indexPathForNode:(ASCellNode *)cellNode
    - - - -
    -

    Parameters

    - - - - - - - -
    cellNode

    A node for an item in the collection node.

    -
    - - - -
    -

    Return Value

    -

    The indexPath for this item.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

      indexPathsForVisibleItems -

    - -
    -
    - -
    - - -
    -

    Retrieve the index paths of all visible items.

    -
    - - - -
    @property (nonatomic, readonly) NSArray<NSIndexPath*> *indexPathsForVisibleItems
    - - - - - -
    -

    Return Value

    -

    an array containing the index paths of all visible items. This must be called on the main thread.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – indexPathForItemAtPoint: -

    - -
    -
    - -
    - - -
    -

    Retrieve the index path of the item at the given point.

    -
    - - - -
    - (nullable NSIndexPath *)indexPathForItemAtPoint:(CGPoint)point
    - - - -
    -

    Parameters

    - - - - - - - -
    point

    The point of the requested item.

    -
    - - - -
    -

    Return Value

    -

    The indexPath for the item at the given point. This must be called on the main thread.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – cellForItemAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Retrieve the cell at the given index path.

    -
    - - - -
    - (nullable UICollectionViewCell *)cellForItemAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - -
    indexPath

    The index path of the requested item.

    -
    - - - -
    -

    Return Value

    -

    The cell for the given index path. This must be called on the main thread.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – contextForSection: -

    - -
    -
    - -
    - - -
    -

    Retrieves the context object for the given section, as provided by the data source in -the @c collectionNode:contextForSection: method.

    -
    - - - -
    - (nullable id<ASSectionContext>)contextForSection:(NSInteger)section
    - - - -
    -

    Parameters

    - - - - - - - -
    section

    The section to get the context for.

    -
    - - - -
    -

    Return Value

    -

    The context object, or @c nil if no context was provided.

    - -

    TODO: This method currently accepts @c section in the view index space, but it should -be in the node index space. To get the context in the view index space (e.g. for subclasses -of @c UICollectionViewLayout, the user will call the same method on @c ASCollectionView.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASCollectionView.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASCollectionView.html deleted file mode 100755 index c726f1a145..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASCollectionView.html +++ /dev/null @@ -1,731 +0,0 @@ - - - - - - ASCollectionView Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCollectionView Class Reference

    - - -
    - - - - - - - -
    Inherits fromUICollectionView
    Declared inASCollectionView.h
    - - - - -
    - -

    Overview

    -

    Asynchronous UICollectionView with Intelligent Preloading capabilities.

    ASCollectionView is a true subclass of UICollectionView, meaning it is pointer-compatible -with code that currently uses UICollectionView.

    - -

    The main difference is that asyncDataSource expects -nodeForItemAtIndexPath, an ASCellNode, and -the sizeForItemAtIndexPath: method is eliminated (as are the performance problems caused by it). -This is made possible because ASCellNodes can calculate their own size, and preload ahead of time.

    Note: ASCollectionNode is strongly recommended over ASCollectionView. This class exists for adoption convenience.

    -
    - - - - - -
    - - - - - - -
    -
    - -

      asyncDelegate -

    - -
    -
    - -
    - - -
    -

    The object that acts as the asynchronous delegate of the collection view

    -
    - - - -
    @property (nonatomic, weak) id<ASCollectionDelegate> asyncDelegate
    - - - - - - - - - -
    -

    Discussion

    -

    The delegate must adopt the ASCollectionDelegate protocol. The collection view maintains a weak reference to the delegate object.

    - -

    The delegate object is responsible for providing size constraints for nodes and indicating whether batch fetching should begin.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

      asyncDataSource -

    - -
    -
    - -
    - - -
    -

    The object that acts as the asynchronous data source of the collection view

    -
    - - - -
    @property (nonatomic, weak) id<ASCollectionDataSource> asyncDataSource
    - - - - - - - - - -
    -

    Discussion

    -

    The datasource must adopt the ASCollectionDataSource protocol. The collection view maintains a weak reference to the datasource object.

    - -

    The datasource object is responsible for providing nodes or node creation blocks to the collection view.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

      collectionNode -

    - -
    -
    - -
    - - -
    -

    Returns the corresponding ASCollectionNode

    -
    - - - -
    @property (nonatomic, weak, readonly) ASCollectionNode *collectionNode
    - - - - - -
    -

    Return Value

    -

    collectionNode The corresponding ASCollectionNode, if one exists.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

      leadingScreensForBatching -

    - -
    -
    - -
    - - -
    -

    The number of screens left to scroll before the delegate -collectionView:beginBatchFetchingWithContext: is called.

    -
    - - - -
    @property (nonatomic, assign) CGFloat leadingScreensForBatching
    - - - - - - - - - -
    -

    Discussion

    -

    Defaults to two screenfuls.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

      layoutInspector -

    - -
    -
    - -
    - - -
    -

    Optional introspection object for the collection view’s layout.

    -
    - - - -
    @property (nonatomic, weak) id<ASCollectionViewLayoutInspecting> layoutInspector
    - - - - - - - - - -
    -

    Discussion

    -

    Since supplementary and decoration views are controlled by the collection view’s layout, this object -is used as a bridge to provide information to the internal data controller about the existence of these views and -their associated index paths. For collection views using UICollectionViewFlowLayout, a default inspector -implementation ASCollectionViewFlowLayoutInspector is created and set on this property by default. Custom -collection view layout subclasses will need to provide their own implementation of an inspector object for their -supplementary views to be compatible with ASCollectionView’s supplementary node support.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – nodeForItemAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Retrieves the node for the item at the given index path.

    -
    - - - -
    - (nullable ASCellNode *)nodeForItemAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - -
    indexPath

    The index path of the requested node.

    -
    - - - -
    -

    Return Value

    -

    The node at the given index path, or @c nil if no item exists at the specified path.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – supplementaryNodeForElementKind:atIndexPath: -

    - -
    -
    - -
    - - -
    -

    Similar to -supplementaryViewForElementKind:atIndexPath:

    -
    - - - -
    - (nullable ASCellNode *)supplementaryNodeForElementKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    elementKind

    The kind of supplementary node to locate.

    indexPath

    The index path of the requested supplementary node.

    -
    - - - -
    -

    Return Value

    -

    The specified supplementary node or @c nil.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – contextForSection: -

    - -
    -
    - -
    - - -
    -

    Retrieves the context object for the given section, as provided by the data source in -the @c collectionNode:contextForSection: method. This method must be called on the main thread.

    -
    - - - -
    - (nullable id<ASSectionContext>)contextForSection:(NSInteger)section
    - - - -
    -

    Parameters

    - - - - - - - -
    section

    The section to get the context for.

    -
    - - - -
    -

    Return Value

    -

    The context object, or @c nil if no context was provided.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

      scrollDirection -

    - -
    -
    - -
    - - -
    -

    Determines collection view’s current scroll direction. Supports 2-axis collection views.

    -
    - - - -
    @property (nonatomic, readonly) ASScrollDirection scrollDirection
    - - - - - -
    -

    Return Value

    -

    a bitmask of ASScrollDirection values.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

      scrollableDirections -

    - -
    -
    - -
    - - -
    -

    Determines collection view’s scrollable directions.

    -
    - - - -
    @property (nonatomic, readonly) ASScrollDirection scrollableDirections
    - - - - - -
    -

    Return Value

    -

    a bitmask of ASScrollDirection values.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

      zeroContentInsets -

    - -
    -
    - -
    - - -
    -

    Forces the .contentInset to be UIEdgeInsetsZero.

    -
    - - - -
    @property (nonatomic) BOOL zeroContentInsets
    - - - - - - - - - -
    -

    Discussion

    -

    By default, UIKit sets the top inset to the navigation bar height, even for horizontally -scrolling views. This can only be disabled by setting a property on the containing UIViewController, -automaticallyAdjustsScrollViewInsets, which may not be accessible. ASPagerNode uses this to ensure -its flow layout behaves predictably and does not log undefined layout warnings.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASControlNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASControlNode.html deleted file mode 100755 index 62781e4332..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASControlNode.html +++ /dev/null @@ -1,735 +0,0 @@ - - - - - - ASControlNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASControlNode Class Reference

    - - -
    - - - - - - - -
    Inherits fromASDisplayNode : ASDealloc2MainObject
    Declared inASControlNode.h
    - - - - -
    - -

    Overview

    -

    ASControlNode cannot be used directly. It instead defines the common interface and behavior structure for all its subclasses. Subclasses should import “ASControlNode+Subclasses.h” for information on methods intended to be overriden.

    -
    - - - - - -
    - - - - - - -
    -
    - -

      enabled -

    - -
    -
    - -
    - - -
    -

    Indicates whether or not the receiver is enabled.

    -
    - - - -
    @property (nonatomic, assign, getter=isEnabled) BOOL enabled
    - - - - - - - - - -
    -

    Discussion

    -

    Specify YES to make the control enabled; otherwise, specify NO to make it disabled. The default value is YES. If the enabled state is NO, the control ignores touch events and subclasses may draw differently.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASControlNode.h

    -
    - - -
    -
    -
    - -

      highlighted -

    - -
    -
    - -
    - - -
    -

    Indicates whether or not the receiver is highlighted.

    -
    - - - -
    @property (nonatomic, assign, getter=isHighlighted) BOOL highlighted
    - - - - - - - - - -
    -

    Discussion

    -

    This is set automatically when the there is a touch inside the control and removed on exit or touch up. This is different from touchInside in that it includes an area around the control, rather than just for touches inside the control.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASControlNode.h

    -
    - - -
    -
    -
    - -

      selected -

    - -
    -
    - -
    - - -
    -

    Indicates whether or not the receiver is highlighted.

    -
    - - - -
    @property (nonatomic, assign, getter=isSelected) BOOL selected
    - - - - - - - - - -
    -

    Discussion

    -

    This is set automatically when the receiver is tapped.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASControlNode.h

    -
    - - -
    -
    -
    - -

      tracking -

    - -
    -
    - -
    - - -
    -

    Indicates whether or not the receiver is currently tracking touches related to an event.

    -
    - - - -
    @property (nonatomic, readonly, assign, getter=isTracking) BOOL tracking
    - - - - - - - - - -
    -

    Discussion

    -

    YES if the receiver is tracking touches; NO otherwise.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASControlNode.h

    -
    - - -
    -
    -
    - -

      touchInside -

    - -
    -
    - -
    - - -
    -

    Indicates whether or not a touch is inside the bounds of the receiver.

    -
    - - - -
    @property (nonatomic, readonly, assign, getter=isTouchInside) BOOL touchInside
    - - - - - - - - - -
    -

    Discussion

    -

    YES if a touch is inside the receiver’s bounds; NO otherwise.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASControlNode.h

    -
    - - -
    -
    -
    - -

    – addTarget:action:forControlEvents: -

    - -
    -
    - -
    - - -
    -

    Adds a target-action pair for a particular event (or events).

    -
    - - - -
    - (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(ASControlNodeEvent)controlEvents
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    target

    The object to which the action message is sent. If this is nil, the responder chain is searched for an object willing to respond to the action message. target is not retained.

    action

    A selector identifying an action message. May optionally include the sender and the event as parameters, in that order. May not be NULL.

    controlEvents

    A bitmask specifying the control events for which the action message is sent. May not be 0. See “Control Events” for bitmask constants.

    -
    - - - - - - - -
    -

    Discussion

    -

    You may call this method multiple times, and you may specify multiple target-action pairs for a particular event. Targets are held weakly.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASControlNode.h

    -
    - - -
    -
    -
    - -

    – actionsForTarget:forControlEvent: -

    - -
    -
    - -
    - - -
    -

    Returns the actions that are associated with a target and a particular control event.

    -
    - - - -
    - (nullable NSArray<NSString*> *)actionsForTarget:(id)target forControlEvent:(ASControlNodeEvent)controlEvent
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    target

    The target object. May not be nil.

    controlEvent

    A single constant of type ASControlNodeEvent that specifies a particular user action on the control; for a list of these constants, see “Control Events”. May not be 0 or ASControlNodeEventAllEvents.

    -
    - - - -
    -

    Return Value

    -

    An array of selector names as NSString objects, or nil if there are no action selectors associated with controlEvent.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASControlNode.h

    -
    - - -
    -
    -
    - -

    – allTargets -

    - -
    -
    - -
    - - -
    -

    Returns all target objects associated with the receiver.

    -
    - - - -
    - (NSSet *)allTargets
    - - - - - -
    -

    Return Value

    -

    A set of all targets for the receiver. The set may include NSNull to indicate at least one nil target (meaning, the responder chain is searched for a target.)

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASControlNode.h

    -
    - - -
    -
    -
    - -

    – removeTarget:action:forControlEvents: -

    - -
    -
    - -
    - - -
    -

    Removes a target-action pair for a particular event.

    -
    - - - -
    - (void)removeTarget:(nullable id)target action:(nullable SEL)action forControlEvents:(ASControlNodeEvent)controlEvents
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    target

    The target object. Pass nil to remove all targets paired with action and the specified control events.

    action

    A selector identifying an action message. Pass NULL to remove all action messages paired with target.

    controlEvents

    A bitmask specifying the control events associated with target and action. See “Control Events” for bitmask constants. May not be 0.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASControlNode.h

    -
    - - -
    -
    -
    - -

    – sendActionsForControlEvents:withEvent: -

    - -
    -
    - -
    - - -
    -

    Sends the actions for the control events for a particular event.

    -
    - - - -
    - (void)sendActionsForControlEvents:(ASControlNodeEvent)controlEvents withEvent:(nullable UIEvent *)event
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    controlEvents

    A bitmask specifying the control events for which to send actions. See “Control Events” for bitmask constants. May not be 0.

    event

    The event which triggered these control actions. May be nil.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASControlNode.h

    -
    - - -
    -
    -
    - -

    – setDefaultFocusAppearance -

    - -
    -
    - -
    - - -
    -

    How the node looks when it isn’t focused. Exposed here so that subclasses can override.

    -
    - - - -
    - (void)setDefaultFocusAppearance
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASControlNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASDisplayNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASDisplayNode.html deleted file mode 100755 index caf1107240..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASDisplayNode.html +++ /dev/null @@ -1,2727 +0,0 @@ - - - - - - ASDisplayNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASDisplayNode Class Reference

    - - -
    - - - - - - - - - - -
    Inherits fromASDealloc2MainObject
    Conforms toASLayoutElement
    Declared inASDisplayNode.h
    - - - - -
    - -

    Overview

    -

    An ASDisplayNode is an abstraction over UIView and CALayer that allows you to perform calculations about a view -hierarchy off the main thread, and could do rendering off the main thread as well.

    - -

    The node API is designed to be as similar as possible to UIView. See the README for examples.

    - -

    Subclassing

    - -

    ASDisplayNode can be subclassed to create a new UI element. The subclass header ASDisplayNode+Subclasses provides -necessary declarations and conveniences.

    - -

    Commons reasons to subclass includes making a UIView property available and receiving a callback after async -display.

    -
    - - - - - -
    - - - - -

    Initializing a node object

    - -
    -
    - -

    – init -

    - -
    -
    - -
    - - -
    -

    Designated initializer.

    -
    - - - -
    - (instancetype)init
    - - - - - -
    -

    Return Value

    -

    An ASDisplayNode instance whose view will be a subclass that enables asynchronous rendering, and passes -through -layout and touch handling methods.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – initWithViewBlock: -

    - -
    -
    - -
    - - -
    -

    Alternative initializer with a block to create the backing view.

    -
    - - - -
    - (instancetype)initWithViewBlock:(ASDisplayNodeViewBlock)viewBlock
    - - - -
    -

    Parameters

    - - - - - - - -
    viewBlock

    The block that will be used to create the backing view.

    -
    - - - -
    -

    Return Value

    -

    An ASDisplayNode instance that loads its view with the given block that is guaranteed to run on the main -queue. The view will render synchronously and -layout and touch handling methods on the node will not be called.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – initWithViewBlock:didLoadBlock: -

    - -
    -
    - -
    - - -
    -

    Alternative initializer with a block to create the backing view.

    -
    - - - -
    - (instancetype)initWithViewBlock:(ASDisplayNodeViewBlock)viewBlock didLoadBlock:(nullable ASDisplayNodeDidLoadBlock)didLoadBlock
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    viewBlock

    The block that will be used to create the backing view.

    didLoadBlock

    The block that will be called after the view created by the viewBlock is loaded

    -
    - - - -
    -

    Return Value

    -

    An ASDisplayNode instance that loads its view with the given block that is guaranteed to run on the main -queue. The view will render synchronously and -layout and touch handling methods on the node will not be called.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – initWithLayerBlock: -

    - -
    -
    - -
    - - -
    -

    Alternative initializer with a block to create the backing layer.

    -
    - - - -
    - (instancetype)initWithLayerBlock:(ASDisplayNodeLayerBlock)layerBlock
    - - - -
    -

    Parameters

    - - - - - - - -
    layerBlock

    The block that will be used to create the backing layer.

    -
    - - - -
    -

    Return Value

    -

    An ASDisplayNode instance that loads its layer with the given block that is guaranteed to run on the main -queue. The layer will render synchronously and -layout and touch handling methods on the node will not be called.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – initWithLayerBlock:didLoadBlock: -

    - -
    -
    - -
    - - -
    -

    Alternative initializer with a block to create the backing layer.

    -
    - - - -
    - (instancetype)initWithLayerBlock:(ASDisplayNodeLayerBlock)layerBlock didLoadBlock:(nullable ASDisplayNodeDidLoadBlock)didLoadBlock
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    layerBlock

    The block that will be used to create the backing layer.

    didLoadBlock

    The block that will be called after the layer created by the layerBlock is loaded

    -
    - - - -
    -

    Return Value

    -

    An ASDisplayNode instance that loads its layer with the given block that is guaranteed to run on the main -queue. The layer will render synchronously and -layout and touch handling methods on the node will not be called.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – onDidLoad: -

    - -
    -
    - -
    - - -
    -

    Add a block of work to be performed on the main thread when the node’s view or layer is loaded. Thread safe.

    -
    - - - -
    - (void)onDidLoad:(ASDisplayNodeDidLoadBlock)body
    - - - -
    -

    Parameters

    - - - - - - - -
    body

    The work to be performed when the node is loaded.

    - -

    @precondition The node is not already loaded.

    -
    - - - - - - - -
    -

    Discussion

    -

    Warning: Be careful not to retain self in body. Change the block parameter list to ^(MYCustomNode *self) {} if you -want to shadow self (e.g. if calling this during init).

    Note: This will only be called the next time the node is loaded. If the node is later added to a subtree of a node -that has shouldRasterizeDescendants=YES, and is unloaded, this block will not be called if it is loaded again.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      synchronous -

    - -
    -
    - -
    - - -
    -

    Returns whether the node is synchronous.

    -
    - - - -
    @property (nonatomic, readonly, assign, getter=isSynchronous) BOOL synchronous
    - - - - - -
    -

    Return Value

    -

    NO if the node wraps a _ASDisplayView, YES otherwise.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    -
    - - - -

    Getting view and layer

    - -
    -
    - -

      view -

    - -
    -
    - -
    - - -
    -

    Returns a view.

    -
    - - - -
    @property (nonatomic, readonly, strong) UIView *view
    - - - - - - - - - -
    -

    Discussion

    -

    The view property is lazily initialized, similar to UIViewController. -To go the other direction, use ASViewToDisplayNode() in ASDisplayNodeExtras.h.

    Warning: The first access to it must be on the main thread, and should only be used on the main thread thereafter as -well.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      nodeLoaded -

    - -
    -
    - -
    - - -
    -

    Returns whether a node’s backing view or layer is loaded.

    -
    - - - -
    @property (nonatomic, readonly, assign, getter=isNodeLoaded) BOOL nodeLoaded
    - - - - - -
    -

    Return Value

    -

    YES if a view is loaded, or if layerBacked is YES and layer is not nil; NO otherwise.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      layerBacked -

    - -
    -
    - -
    - - -
    -

    Returns whether the node rely on a layer instead of a view.

    -
    - - - -
    @property (nonatomic, assign, getter=isLayerBacked) BOOL layerBacked
    - - - - - -
    -

    Return Value

    -

    YES if the node rely on a layer, NO otherwise.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      layer -

    - -
    -
    - -
    - - -
    -

    Returns a layer.

    -
    - - - -
    @property (nonatomic, readonly, strong) CALayer *layer
    - - - - - - - - - -
    -

    Discussion

    -

    The layer property is lazily initialized, similar to the view property. -To go the other direction, use ASLayerToDisplayNode() in ASDisplayNodeExtras.h.

    Warning: The first access to it must be on the main thread, and should only be used on the main thread thereafter as -well.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      visible -

    - -
    -
    - -
    - - -
    -

    Returns YES if the node is – at least partially – visible in a window.

    -
    - - - -
    @property (readonly, getter=isVisible) BOOL visible
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      inPreloadState -

    - -
    -
    - -
    - - -
    -

    Returns YES if the node is in the preloading interface state.

    -
    - - - -
    @property (readonly, getter=isInPreloadState) BOOL inPreloadState
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      inDisplayState -

    - -
    -
    - -
    - - -
    -

    Returns YES if the node is in the displaying interface state.

    -
    - - - -
    @property (readonly, getter=isInDisplayState) BOOL inDisplayState
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      interfaceState -

    - -
    -
    - -
    - - -
    -

    Returns the Interface State of the node.

    -
    - - - -
    @property (readonly) ASInterfaceState interfaceState
    - - - - - -
    -

    Return Value

    -

    The current ASInterfaceState of the node, indicating whether it is visible and other situational properties.

    -
    - - - - - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    -
    - - - -

    Managing dimensions

    - -
    -
    - -

    – layoutThatFits: -

    - -
    -
    - -
    - - -
    -

    Asks the node to return a layout based on given size range.

    -
    - - - -
    - (ASLayout *)layoutThatFits:(ASSizeRange)constrainedSize
    - - - -
    -

    Parameters

    - - - - - - - -
    constrainedSize

    The minimum and maximum sizes the receiver should fit in.

    -
    - - - -
    -

    Return Value

    -

    An ASLayout instance defining the layout of the receiver (and its children, if the box layout model is used).

    -
    - - - - - -
    -

    Discussion

    -

    Though this method does not set the bounds of the view, it does have side effects–caching both the -constraint and the result.

    Warning: Subclasses must not override this; it caches results from -calculateLayoutThatFits:. Calling this method may -be expensive if result is not cached.

    -
    - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      layoutSpecBlock -

    - -
    -
    - -
    - - -
    -

    Provides a way to declare a block to provide an ASLayoutSpec without having to subclass ASDisplayNode and -implement layoutSpecThatFits:

    -
    - - - -
    @property (nonatomic, readwrite, copy, nullable) ASLayoutSpecBlock layoutSpecBlock
    - - - - - -
    -

    Return Value

    -

    A block that takes a constrainedSize ASSizeRange argument, and must return an ASLayoutSpec that includes all -of the subnodes to position in the layout. This input-output relationship is identical to the subclass override -method -layoutSpecThatFits:

    -
    - - - - - -
    -

    Discussion

    -

    Warning: Subclasses that implement -layoutSpecThatFits: must not also use .layoutSpecBlock. Doing so will trigger -an exception. A future version of the framework may support using both, calling them serially, with the -.layoutSpecBlock superseding any values set by the method override.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      calculatedSize -

    - -
    -
    - -
    - - -
    -

    Return the calculated size.

    -
    - - - -
    @property (nonatomic, readonly, assign) CGSize calculatedSize
    - - - - - -
    -

    Return Value

    -

    Size already calculated by -calculateLayoutThatFits:.

    -
    - - - - - -
    -

    Discussion

    -

    Ideal for use by subclasses in -layout, having already prompted their subnodes to calculate their size by -calling -measure: on them in -calculateLayoutThatFits.

    Warning: Subclasses must not override this; it returns the last cached measurement and is never expensive.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      constrainedSizeForCalculatedLayout -

    - -
    -
    - -
    - - -
    -

    Return the constrained size range used for calculating layout.

    -
    - - - -
    @property (nonatomic, readonly, assign) ASSizeRange constrainedSizeForCalculatedLayout
    - - - - - -
    -

    Return Value

    -

    The minimum and maximum constrained sizes used by calculateLayoutThatFits:.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    -
    - - - -

    Managing the nodes hierarchy

    - -
    -
    - -

    – addSubnode: -

    - -
    -
    - -
    - - -
    -

    Add a node as a subnode to this node.

    -
    - - - -
    - (void)addSubnode:(ASDisplayNode *)subnode
    - - - -
    -

    Parameters

    - - - - - - - -
    subnode

    The node to be added.

    -
    - - - - - - - -
    -

    Discussion

    -

    The subnode’s view will automatically be added to this node’s view, lazily if the views are not created -yet.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – insertSubnode:belowSubnode: -

    - -
    -
    - -
    - - -
    -

    Insert a subnode before a given subnode in the list.

    -
    - - - -
    - (void)insertSubnode:(ASDisplayNode *)subnode belowSubnode:(ASDisplayNode *)below
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    subnode

    The node to insert below another node.

    below

    The sibling node that will be above the inserted node.

    -
    - - - - - - - -
    -

    Discussion

    -

    If the views are loaded, the subnode’s view will be inserted below the given node’s view in the hierarchy -even if there are other non-displaynode views.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – insertSubnode:aboveSubnode: -

    - -
    -
    - -
    - - -
    -

    Insert a subnode after a given subnode in the list.

    -
    - - - -
    - (void)insertSubnode:(ASDisplayNode *)subnode aboveSubnode:(ASDisplayNode *)above
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    subnode

    The node to insert below another node.

    above

    The sibling node that will be behind the inserted node.

    -
    - - - - - - - -
    -

    Discussion

    -

    If the views are loaded, the subnode’s view will be inserted above the given node’s view in the hierarchy -even if there are other non-displaynode views.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – insertSubnode:atIndex: -

    - -
    -
    - -
    - - -
    -

    Insert a subnode at a given index in subnodes.

    -
    - - - -
    - (void)insertSubnode:(ASDisplayNode *)subnode atIndex:(NSInteger)idx
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    subnode

    The node to insert.

    idx

    The index in the array of the subnodes property at which to insert the node. Subnodes indices start at 0 -and cannot be greater than the number of subnodes.

    -
    - - - - - - - -
    -

    Discussion

    -

    If this node’s view is loaded, ASDisplayNode insert the subnode’s view after the subnode at index - 1’s -view even if there are other non-displaynode views.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – replaceSubnode:withSubnode: -

    - -
    -
    - -
    - - -
    -

    Replace subnode with replacementSubnode.

    -
    - - - -
    - (void)replaceSubnode:(ASDisplayNode *)subnode withSubnode:(ASDisplayNode *)replacementSubnode
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    subnode

    A subnode of self.

    replacementSubnode

    A node with which to replace subnode.

    -
    - - - - - - - -
    -

    Discussion

    -

    Should both subnode and replacementSubnode already be subnodes of self, subnode is removed and -replacementSubnode inserted in its place. -If subnode is not a subnode of self, this method will throw an exception. -If replacementSubnode is nil, this method will throw an exception

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – removeFromSupernode -

    - -
    -
    - -
    - - -
    -

    Remove this node from its supernode.

    -
    - - - -
    - (void)removeFromSupernode
    - - - - - - - - - -
    -

    Discussion

    -

    The node’s view will be automatically removed from the supernode’s view.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      subnodes -

    - -
    -
    - -
    - - -
    -

    The receiver’s immediate subnodes.

    -
    - - - -
    @property (nonatomic, readonly, copy) NSArray<ASDisplayNode*> *subnodes
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      supernode -

    - -
    -
    - -
    - - -
    -

    The receiver’s supernode.

    -
    - - - -
    @property (nonatomic, readonly, weak) ASDisplayNode *supernode
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    -
    - - - -

    Drawing and Updating the View

    - -
    -
    - -

      displaysAsynchronously -

    - -
    -
    - -
    - - -
    -

    Whether this node’s view performs asynchronous rendering.

    -
    - - - -
    @property (nonatomic, assign) BOOL displaysAsynchronously
    - - - - - -
    -

    Return Value

    -

    Defaults to YES, except for synchronous views (ie, those created with -initWithViewBlock: / --initWithLayerBlock:), which are always NO.

    -
    - - - - - -
    -

    Discussion

    -

    If this flag is set, then the node will participate in the current asyncdisplaykit_async_transaction and -do its rendering on the displayQueue instead of the main thread.

    - -

    Asynchronous rendering proceeds as follows:

    - -

    When the view is initially added to the hierarchy, it has -needsDisplay true. -After layout, Core Animation will call -display on the _ASDisplayLayer --display enqueues a rendering operation on the displayQueue -When the render block executes, it calls the delegate display method (-drawRect:… or -display) -The delegate provides contents via this method and an operation is added to the asyncdisplaykit_async_transaction -Once all rendering is complete for the current asyncdisplaykit_async_transaction, -the completion for the block sets the contents on all of the layers in the same frame

    - -

    If asynchronous rendering is disabled:

    - -

    When the view is initially added to the hierarchy, it has -needsDisplay true. -After layout, Core Animation will call -display on the _ASDisplayLayer --display calls delegate display method (-drawRect:… or -display) immediately --display sets the layer contents immediately with the result

    - -

    Note: this has nothing to do with -[CALayer drawsAsynchronously].

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      shouldRasterizeDescendants -

    - -
    -
    - -
    - - -
    -

    Whether to draw all descendant nodes' layers/views into this node’s layer/view’s backing store.

    -
    - - - -
    @property (nonatomic, assign) BOOL shouldRasterizeDescendants
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      displaySuspended -

    - -
    -
    - -
    - - -
    -

    Prevent the node’s layer from displaying.

    -
    - - - -
    @property (nonatomic, assign) BOOL displaySuspended
    - - - - - - - - - -
    -

    Discussion

    -

    A subclass may check this flag during -display or -drawInContext: to cancel a display that is already in -progress.

    - -

    Defaults to NO. Does not control display for any child or descendant nodes; for that, use --recursivelySetDisplaySuspended:.

    - -

    If a setNeedsDisplay occurs while displaySuspended is YES, and displaySuspended is set to NO, then the -layer will be automatically displayed.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      shouldAnimateSizeChanges -

    - -
    -
    - -
    - - -
    -

    Whether size changes should be animated. Default to YES.

    -
    - - - -
    @property (nonatomic, assign) BOOL shouldAnimateSizeChanges
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – recursivelySetDisplaySuspended: -

    - -
    -
    - -
    - - -
    -

    Prevent the node and its descendants' layer from displaying.

    -
    - - - -
    - (void)recursivelySetDisplaySuspended:(BOOL)flag
    - - - -
    -

    Parameters

    - - - - - - - -
    flag

    YES if display should be prevented or cancelled; NO otherwise.

    -
    - - - - - - - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – recursivelyClearContents -

    - -
    -
    - -
    - - -
    -

    Calls -clearContents on the receiver and its subnode hierarchy.

    -
    - - - -
    - (void)recursivelyClearContents
    - - - - - - - - - -
    -

    Discussion

    -

    Clears backing stores and other memory-intensive intermediates. -If the node is removed from a visible hierarchy and then re-added, it will automatically trigger a new asynchronous display, -as long as displaySuspended is not set. -If the node remains in the hierarchy throughout, -setNeedsDisplay is required to trigger a new asynchronous display.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – recursivelyClearFetchedData -

    - -
    -
    - -
    - - -
    -

    Calls -clearFetchedData on the receiver and its subnode hierarchy.

    -
    - - - -
    - (void)recursivelyClearFetchedData
    - - - - - - - - - -
    -

    Discussion

    -

    Clears any memory-intensive fetched content. -This method is used to notify the node that it should purge any content that is both expensive to fetch and to -retain in memory.

    -
    - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – recursivelyFetchData -

    - -
    -
    - -
    - - -
    -

    Calls -fetchData on the receiver and its subnode hierarchy.

    -
    - - - -
    - (void)recursivelyFetchData
    - - - - - - - - - -
    -

    Discussion

    -

    Fetches content from remote sources for the current node and all subnodes.

    -
    - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – setNeedsDataFetch -

    - -
    -
    - -
    - - -
    -

    Triggers a recursive call to fetchData when the node has an interfaceState of ASInterfaceStatePreload

    -
    - - - -
    - (void)setNeedsDataFetch
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      placeholderEnabled -

    - -
    -
    - -
    - - -
    -

    Toggle displaying a placeholder over the node that covers content until the node and all subnodes are -displayed.

    -
    - - - -
    @property (nonatomic, assign) BOOL placeholderEnabled
    - - - - - - - - - -
    -

    Discussion

    -

    Defaults to NO.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      placeholderFadeDuration -

    - -
    -
    - -
    - - -
    -

    Set the time it takes to fade out the placeholder when a node’s contents are finished displaying.

    -
    - - - -
    @property (nonatomic, assign) NSTimeInterval placeholderFadeDuration
    - - - - - - - - - -
    -

    Discussion

    -

    Defaults to 0 seconds.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      drawingPriority -

    - -
    -
    - -
    - - -
    -

    Determines drawing priority of the node. Nodes with higher priority will be drawn earlier.

    -
    - - - -
    @property (nonatomic, assign) NSInteger drawingPriority
    - - - - - - - - - -
    -

    Discussion

    -

    Defaults to ASDefaultDrawingPriority. There may be multiple drawing threads, and some of them may -decide to perform operations in queued order (regardless of drawingPriority)

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    -
    - - - -

    Hit Testing

    - -
    -
    - -

      hitTestSlop -

    - -
    -
    - -
    - - -
    -

    Bounds insets for hit testing.

    -
    - - - -
    @property (nonatomic, assign) UIEdgeInsets hitTestSlop
    - - - - - - - - - -
    -

    Discussion

    -

    When set to a non-zero inset, increases the bounds for hit testing to make it easier to tap or perform -gestures on this node. Default is UIEdgeInsetsZero.

    - -

    This affects the default implementation of -hitTest and -pointInside, so subclasses should call super if you override -it and want hitTestSlop applied.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – pointInside:withEvent: -

    - -
    -
    - -
    - - -
    -

    Returns a Boolean value indicating whether the receiver contains the specified point.

    -
    - - - -
    - (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    point

    A point that is in the receiver’s local coordinate system (bounds).

    event

    The event that warranted a call to this method.

    -
    - - - -
    -

    Return Value

    -

    YES if point is inside the receiver’s bounds; otherwise, NO.

    -
    - - - - - -
    -

    Discussion

    -

    Includes the “slop” factor specified with hitTestSlop.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    -
    - - - -

    Converting Between View Coordinate Systems

    - -
    -
    - -

    – convertPoint:toNode: -

    - -
    -
    - -
    - - -
    -

    Converts a point from the receiver’s coordinate system to that of the specified node.

    -
    - - - -
    - (CGPoint)convertPoint:(CGPoint)point toNode:(nullable ASDisplayNode *)node
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    point

    A point specified in the local coordinate system (bounds) of the receiver.

    node

    The node into whose coordinate system point is to be converted.

    -
    - - - -
    -

    Return Value

    -

    The point converted to the coordinate system of node.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – convertPoint:fromNode: -

    - -
    -
    - -
    - - -
    -

    Converts a point from the coordinate system of a given node to that of the receiver.

    -
    - - - -
    - (CGPoint)convertPoint:(CGPoint)point fromNode:(nullable ASDisplayNode *)node
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    point

    A point specified in the local coordinate system (bounds) of node.

    node

    The node with point in its coordinate system.

    -
    - - - -
    -

    Return Value

    -

    The point converted to the local coordinate system (bounds) of the receiver.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – convertRect:toNode: -

    - -
    -
    - -
    - - -
    -

    Converts a rectangle from the receiver’s coordinate system to that of another view.

    -
    - - - -
    - (CGRect)convertRect:(CGRect)rect toNode:(nullable ASDisplayNode *)node
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    rect

    A rectangle specified in the local coordinate system (bounds) of the receiver.

    node

    The node that is the target of the conversion operation.

    -
    - - - -
    -

    Return Value

    -

    The converted rectangle.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – convertRect:fromNode: -

    - -
    -
    - -
    - - -
    -

    Converts a rectangle from the coordinate system of another node to that of the receiver.

    -
    - - - -
    - (CGRect)convertRect:(CGRect)rect fromNode:(nullable ASDisplayNode *)node
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    rect

    A rectangle specified in the local coordinate system (bounds) of node.

    node

    The node with rect in its coordinate system.

    -
    - - - -
    -

    Return Value

    -

    The converted rectangle.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASEditableTextNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASEditableTextNode.html deleted file mode 100755 index 409bc45979..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASEditableTextNode.html +++ /dev/null @@ -1,700 +0,0 @@ - - - - - - ASEditableTextNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASEditableTextNode Class Reference

    - - -
    - - - - - - - - - - -
    Inherits fromASDisplayNode : ASDealloc2MainObject
    Conforms toUITextInputTraits
    Declared inASEditableTextNode.h
    - - - - -
    - -

    Overview

    -

    Does not support layer backing.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – init -

    - -
    -
    - -
    - - -
    -

    Initializes an editable text node using default TextKit components.

    -
    - - - -
    - (instancetype)init
    - - - - - -
    -

    Return Value

    -

    An initialized ASEditableTextNode.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    - -

    – initWithTextKitComponents:placeholderTextKitComponents: -

    - -
    -
    - -
    - - -
    -

    Initializes an editable text node using the provided TextKit components.

    -
    - - - -
    - (instancetype)initWithTextKitComponents:(ASTextKitComponents *)textKitComponents placeholderTextKitComponents:(ASTextKitComponents *)placeholderTextKitComponents
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    textKitComponents

    The TextKit stack used to render text.

    placeholderTextKitComponents

    The TextKit stack used to render placeholder text.

    -
    - - - -
    -

    Return Value

    -

    An initialized ASEditableTextNode.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    - -

      scrollEnabled -

    - -
    -
    - -
    - - -
    -

    Enable scrolling on the textView -@default true

    -
    - - - -
    @property (nonatomic) BOOL scrollEnabled
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    - -

      textView -

    - -
    -
    - -
    - - -
    -

    Access to underlying UITextView for more configuration options.

    -
    - - - -
    @property (nonatomic, readonly, strong) UITextView *textView
    - - - - - - - - - -
    -

    Discussion

    -

    Warning: This property should only be used on the main thread and should not be accessed before the editable text node’s view is created.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    - -

    – isDisplayingPlaceholder -

    - -
    -
    - -
    - - -
    -

    Indicates if the receiver is displaying the placeholder text.

    -
    - - - -
    - (BOOL)isDisplayingPlaceholder
    - - - - - -
    -

    Return Value

    -

    YES if the placeholder is currently displayed; NO otherwise.

    -
    - - - - - -
    -

    Discussion

    -

    To update the placeholder, see the attributedPlaceholderText property.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    - -

      attributedPlaceholderText -

    - -
    -
    - -
    - - -
    -

    The styled placeholder text displayed by the text node while no text is entered

    -
    - - - -
    @property (nonatomic, readwrite, strong, nullable) NSAttributedString *attributedPlaceholderText
    - - - - - - - - - -
    -

    Discussion

    -

    The placeholder is displayed when the user has not entered any text and the keyboard is not visible.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    - -

      attributedText -

    - -
    -
    - -
    - - -
    -

    The styled text displayed by the receiver.

    -
    - - - -
    @property (nonatomic, readwrite, copy, nullable) NSAttributedString *attributedText
    - - - - - - - - - -
    -

    Discussion

    -

    When the placeholder is displayed (as indicated by -isDisplayingPlaceholder), this value is nil. Otherwise, this value is the attributed text the user has entered. This value can be modified regardless of whether the receiver is the first responder (and thus, editing) or not. Changing this value from nil to non-nil will result in the placeholder being hidden, and the new value being displayed.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    - -

      textContainerInset -

    - -
    -
    - -
    - - -
    -

    The textContainerInset of both the placeholder and typed textView. This value defaults to UIEdgeInsetsZero.

    -
    - - - -
    @property (nonatomic, readwrite) UIEdgeInsets textContainerInset
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    - -

      autocapitalizationType -

    - -
    -
    - -
    - - -
    -

    properties.

    -
    - - - -
    @property (nonatomic, readwrite, assign) UITextAutocapitalizationType autocapitalizationType
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    - -

    – isFirstResponder -

    - -
    -
    - -
    - - -
    -

    Indicates whether the receiver’s text view is the first responder, and thus has the keyboard visible and is prepared for editing by the user.

    -
    - - - -
    - (BOOL)isFirstResponder
    - - - - - -
    -

    Return Value

    -

    YES if the receiver’s text view is the first-responder; NO otherwise.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    - -

    – frameForTextRange: -

    - -
    -
    - -
    - - -
    -

    Returns the frame of the given range of characters.

    -
    - - - -
    - (CGRect)frameForTextRange:(NSRange)textRange
    - - - -
    -

    Parameters

    - - - - - - - -
    textRange

    A range of characters.

    -
    - - - -
    -

    Return Value

    -

    A CGRect that is the bounding box of the glyphs covered by the given range of characters, in the coordinate system of the receiver.

    -
    - - - - - -
    -

    Discussion

    -

    This method raises an exception if textRange is not a valid range of characters within the receiver’s attributed text.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASImageNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASImageNode.html deleted file mode 100755 index 387adaa081..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASImageNode.html +++ /dev/null @@ -1,674 +0,0 @@ - - - - - - ASImageNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASImageNode Class Reference

    - - -
    - - - - - - - -
    Inherits fromASControlNode : ASDisplayNode : ASDealloc2MainObject
    Declared inASImageNode.h
    - - - - -
    - -

    Overview

    -

    Supports cropping, tinting, and arbitrary image modification blocks.

    -
    - - - - - -
    - - - - - - -
    -
    - -

      image -

    - -
    -
    - -
    - - -
    -

    The image to display.

    -
    - - - -
    @property (nullable, nonatomic, strong) UIImage *image
    - - - - - - - - - -
    -

    Discussion

    -

    The node will efficiently display stretchable images by using -the layer’s contentsCenter property. Non-stretchable images work too, of -course.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASImageNode.h

    -
    - - -
    -
    -
    - -

      placeholderColor -

    - -
    -
    - -
    - - -
    -

    The placeholder color.

    -
    - - - -
    @property (nullable, nonatomic, strong) UIColor *placeholderColor
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASImageNode.h

    -
    - - -
    -
    -
    - -

      cropEnabled -

    - -
    -
    - -
    - - -
    -

    Indicates whether efficient cropping of the receiver is enabled.

    -
    - - - -
    @property (nonatomic, assign, getter=isCropEnabled) BOOL cropEnabled
    - - - - - - - - - -
    -

    Discussion

    -

    Defaults to YES. See -setCropEnabled:recropImmediately:inBounds: for more -information.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASImageNode.h

    -
    - - -
    -
    -
    - -

      forceUpscaling -

    - -
    -
    - -
    - - -
    -

    Indicates that efficient downsizing of backing store should not be enabled.

    -
    - - - -
    @property (nonatomic, assign) BOOL forceUpscaling
    - - - - - - - - - -
    -

    Discussion

    -

    Defaults to NO. @see ASCroppedImageBackingSizeAndDrawRectInBounds for more -information.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASImageNode.h

    -
    - - -
    -
    -
    - -

      forcedSize -

    - -
    -
    - -
    - - -
    -

    Forces image to be rendered at forcedSize.

    -
    - - - -
    @property (nonatomic, assign) CGSize forcedSize
    - - - - - - - - - -
    -

    Discussion

    -

    Defaults to CGSizeZero to indicate that the forcedSize should not be used. -Setting forcedSize to non-CGSizeZero will force the backing of the layer contents to -be forcedSize (automatically adjusted for contentsSize).

    -
    - - - - - - - -
    -

    Declared In

    -

    ASImageNode.h

    -
    - - -
    -
    -
    - -

    – setCropEnabled:recropImmediately:inBounds: -

    - -
    -
    - -
    - - -
    -

    Enables or disables efficient cropping.

    -
    - - - -
    - (void)setCropEnabled:(BOOL)cropEnabled recropImmediately:(BOOL)recropImmediately inBounds:(CGRect)cropBounds
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    cropEnabled

    YES to efficiently crop the receiver’s contents such that -contents outside of its bounds are not included; NO otherwise.

    recropImmediately

    If the receiver has an image, YES to redisplay the -receiver immediately; NO otherwise.

    cropBounds

    The bounds into which the receiver will be cropped. Useful -if bounds are to change in response to cropping (but have not yet done so).

    -
    - - - - - - - -
    -

    Discussion

    -

    Efficient cropping is only performed when the receiver’s view’s -contentMode is UIViewContentModeScaleAspectFill. By default, cropping is -enabled. The crop alignment may be controlled via cropAlignmentFactor.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASImageNode.h

    -
    - - -
    -
    -
    - -

      cropRect -

    - -
    -
    - -
    - - -
    -

    A value that controls how the receiver’s efficient cropping is aligned.

    -
    - - - -
    @property (nonatomic, readwrite, assign) CGRect cropRect
    - - - - - - - - - -
    -

    Discussion

    -

    This value defines a rectangle that is to be featured by the -receiver. The rectangle is specified as a “unit rectangle,” using -fractions of the source image’s width and height, e.g. CGRectMake(0.5, 0, -0.5, 1.0) will feature the full right half a photo. If the cropRect is -empty, the content mode of the receiver will be used to determine its -dimensions, and only the cropRect’s origin will be used for positioning. The -default value of this property is CGRectMake(0.5, 0.5, 0.0, 0.0).

    -
    - - - - - - - -
    -

    Declared In

    -

    ASImageNode.h

    -
    - - -
    -
    -
    - -

      imageModificationBlock -

    - -
    -
    - -
    - - -
    -

    An optional block which can perform drawing operations on image -during the display phase.

    -
    - - - -
    @property (nullable, nonatomic, readwrite, copy) asimagenode_modification_block_t imageModificationBlock
    - - - - - - - - - -
    -

    Discussion

    -

    Can be used to add image effects (such as rounding, adding -borders, or other pattern overlays) without extraneous display calls.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASImageNode.h

    -
    - - -
    -
    -
    - -

    – setNeedsDisplayWithCompletion: -

    - -
    -
    - -
    - - -
    -

    Marks the receiver as needing display and performs a block after -display has finished.

    -
    - - - -
    - (void)setNeedsDisplayWithCompletion:(nullable void ( ^ ) ( BOOL canceled ))displayCompletionBlock
    - - - -
    -

    Parameters

    - - - - - - - -
    displayCompletionBlock

    The block to be performed after display has -finished. Its canceled property will be YES if display was prevented or -canceled (via displaySuspended); NO otherwise.

    -
    - - - - - - - -
    -

    Discussion

    -

    displayCompletionBlock will be performed on the main-thread. If -displaySuspended is YES, displayCompletionBlock is will be -performed immediately and YES will be passed for canceled.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASImageNode.h

    -
    - - -
    -
    -
    - -

      isDefaultFocusAppearance -

    - -
    -
    - -
    - - -
    -

    A bool to track if the current appearance of the node -is the default focus appearance. -Exposed here so the category methods can set it.

    -
    - - - -
    @property (nonatomic, assign) BOOL isDefaultFocusAppearance
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASImageNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASInsetLayoutSpec.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASInsetLayoutSpec.html deleted file mode 100755 index 5349d434f1..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASInsetLayoutSpec.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - ASInsetLayoutSpec Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASInsetLayoutSpec Class Reference

    - - -
    - - - - - - - -
    Inherits fromASLayoutSpec : NSObject
    Declared inASInsetLayoutSpec.h
    - - - - -
    - -

    Overview

    -

    A layout spec that wraps another layoutElement child, applying insets around it.

    - -

    If the child has a size specified as a fraction, the fraction is resolved against this spec’s parent -size after applying insets.

    - -

    @example ASOuterLayoutSpec contains an ASInsetLayoutSpec with an ASInnerLayoutSpec. Suppose that: -- ASOuterLayoutSpec is 200pt wide. -- ASInnerLayoutSpec specifies its width as 100%. -- The ASInsetLayoutSpec has insets of 10pt on every side. -ASInnerLayoutSpec will have size 180pt, not 200pt, because it receives a parent size that has been adjusted for insets.

    - -

    If you’re familiar with CSS: ASInsetLayoutSpec’s child behaves similarly to “box-sizing: border-box”.

    - -

    An infinite inset is resolved as an inset equal to all remaining space after applying the other insets and child size. -@example An ASInsetLayoutSpec with an infinite left inset and 10px for all other edges will position it’s child 10px from the right edge.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    + insetLayoutSpecWithInsets:child: -

    - -
    -
    - -
    - - -
    -

    The amount of space to inset on each side.

    -
    - - - -
    + (instancetype)insetLayoutSpecWithInsets:(UIEdgeInsets)insets child:(id<ASLayoutElement>)child
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    insets

    The amount of space to inset on each side.

    child

    The wrapped child to inset.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASInsetLayoutSpec.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASLayout.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASLayout.html deleted file mode 100755 index 98474e1041..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASLayout.html +++ /dev/null @@ -1,762 +0,0 @@ - - - - - - ASLayout Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASLayout Class Reference

    - - -
    - - - - - - - -
    Inherits fromNSObject
    Declared inASLayout.h
    - - - - -
    - -

    Overview

    -

    A node in the layout tree that represents the size and position of the object that created it (ASLayoutElement).

    -
    - - - - - -
    - - - - - - -
    -
    - -

      layoutElement -

    - -
    -
    - -
    - - -
    -

    The underlying object described by this layout

    -
    - - - -
    @property (nonatomic, weak, readonly) id<ASLayoutElement> layoutElement
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayout.h

    -
    - - -
    -
    -
    - -

      type -

    - -
    -
    - -
    - - -
    -

    The type of ASLayoutElement that created this layout

    -
    - - - -
    @property (nonatomic, assign, readonly) ASLayoutElementType type
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayout.h

    -
    - - -
    -
    -
    - -

      size -

    - -
    -
    - -
    - - -
    -

    Size of the current layout

    -
    - - - -
    @property (nonatomic, assign, readonly) CGSize size
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayout.h

    -
    - - -
    -
    -
    - -

      position -

    - -
    -
    - -
    - - -
    -

    Position in parent. Default to CGPointNull.

    -
    - - - -
    @property (nonatomic, assign, readonly) CGPoint position
    - - - - - - - - - -
    -

    Discussion

    -

    When being used as a sublayout, this property must not equal CGPointNull.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayout.h

    -
    - - -
    -
    -
    - -

      sublayouts -

    - -
    -
    - -
    - - -
    -

    Array of ASLayouts. Each must have a valid non-null position.

    -
    - - - -
    @property (nonatomic, copy, readonly) NSArray<ASLayout*> *sublayouts
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayout.h

    -
    - - -
    -
    -
    - -

      frame -

    - -
    -
    - -
    - - -
    -

    Returns a valid frame for the current layout computed with the size and position.

    -
    - - - -
    @property (nonatomic, assign, readonly) CGRect frame
    - - - - - - - - - -
    -

    Discussion

    -

    Clamps the layout’s origin or position to 0 if any of the calculated values are infinite.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayout.h

    -
    - - -
    -
    -
    - -

    – initWithLayoutElement:size:position:sublayouts: -

    - -
    -
    - -
    - - -
    -

    Designated initializer

    -
    - - - -
    - (instancetype)initWithLayoutElement:(id<ASLayoutElement>)layoutElement size:(CGSize)size position:(CGPoint)position sublayouts:(nullable NSArray<ASLayout*> *)sublayouts
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayout.h

    -
    - - -
    -
    -
    - -

    + layoutWithLayoutElement:size:position:sublayouts: -

    - -
    -
    - -
    - - -
    -

    Convenience class initializer for layout construction.

    -
    - - - -
    + (instancetype)layoutWithLayoutElement:(id<ASLayoutElement>)layoutElement size:(CGSize)size position:(CGPoint)position sublayouts:(nullable NSArray<ASLayout*> *)sublayouts
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - -
    layoutElement

    The backing ASLayoutElement object.

    size

    The size of this layout.

    position

    The position of this layout within its parent (if available).

    sublayouts

    Sublayouts belong to the new layout.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayout.h

    -
    - - -
    -
    -
    - -

    + layoutWithLayoutElement:size:sublayouts: -

    - -
    -
    - -
    - - -
    -

    Convenience initializer that has CGPointNull position. -Best used by ASDisplayNode subclasses that are manually creating a layout for -calculateLayoutThatFits:, -or for ASLayoutSpec subclasses that are referencing the “self” level in the layout tree, -or for creating a sublayout of which the position is yet to be determined.

    -
    - - - -
    + (instancetype)layoutWithLayoutElement:(id<ASLayoutElement>)layoutElement size:(CGSize)size sublayouts:(nullable NSArray<ASLayout*> *)sublayouts
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    layoutElement

    The backing ASLayoutElement object.

    size

    The size of this layout.

    sublayouts

    Sublayouts belong to the new layout.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayout.h

    -
    - - -
    -
    -
    - -

    + layoutWithLayoutElement:size: -

    - -
    -
    - -
    - - -
    -

    Convenience that has CGPointNull position and no sublayouts. -Best used for creating a layout that has no sublayouts, and is either a root one -or a sublayout of which the position is yet to be determined.

    -
    - - - -
    + (instancetype)layoutWithLayoutElement:(id<ASLayoutElement>)layoutElement size:(CGSize)size
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    layoutElement

    The backing ASLayoutElement object.

    size

    The size of this layout.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayout.h

    -
    - - -
    -
    -
    - -

    + layoutWithLayout:position: -

    - -
    -
    - -
    - - -
    -

    Convenience initializer that creates a layout based on the values of the given layout, with a new position

    -
    - - - -
    + (instancetype)layoutWithLayout:(ASLayout *)layout position:(CGPoint)position
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    layout

    The layout to use to create the new layout

    position

    The position of the new layout

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayout.h

    -
    - - -
    -
    -
    - -

    – filteredNodeLayoutTree -

    - -
    -
    - -
    - - -
    -

    Traverses the existing layout tree and generates a new tree that represents only ASDisplayNode layouts

    -
    - - - -
    - (ASLayout *)filteredNodeLayoutTree
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayout.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASLayoutElementStyle.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASLayoutElementStyle.html deleted file mode 100755 index 6a71f721ed..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASLayoutElementStyle.html +++ /dev/null @@ -1,796 +0,0 @@ - - - - - - ASLayoutElementStyle Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASLayoutElementStyle Class Reference

    - - -
    - - - - - - - - - - -
    Inherits fromNSObject
    Conforms toASAbsoluteLayoutElement
    ASStackLayoutElement
    Declared inASLayoutElement.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – initWithDelegate: -

    - -
    -
    - -
    - - -
    -

    Initializes the layoutElement style with a specified delegate

    -
    - - - -
    - (instancetype)initWithDelegate:(id<ASLayoutElementStyleDelegate>)delegate
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      delegate -

    - -
    -
    - -
    - - -
    -

    The object that acts as the delegate of the style.

    -
    - - - -
    @property (nullable, nonatomic, weak, readonly) id<ASLayoutElementStyleDelegate> delegate
    - - - - - - - - - -
    -

    Discussion

    -

    The delegate must adopt the ASLayoutElementStyleDelegate protocol. The delegate is not retained.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      width -

    - -
    -
    - -
    - - -
    -

    The width property specifies the height of the content area of an ASLayoutElement. -The minWidth and maxWidth properties override width. -Defaults to ASDimensionAuto

    -
    - - - -
    @property (nonatomic, assign, readwrite) ASDimension width
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      height -

    - -
    -
    - -
    - - -
    -

    The height property specifies the height of the content area of an ASLayoutElement -The minHeight and maxHeight properties override height. -Defaults to ASDimensionAuto

    -
    - - - -
    @property (nonatomic, assign, readwrite) ASDimension height
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      minHeight -

    - -
    -
    - -
    - - -
    -

    The minHeight property is used to set the minimum height of a given element. It prevents the used value -of the height property from becoming smaller than the value specified for minHeight. -The value of minHeight overrides both maxHeight and height. -Defaults to ASDimensionAuto

    -
    - - - -
    @property (nonatomic, assign, readwrite) ASDimension minHeight
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      maxHeight -

    - -
    -
    - -
    - - -
    -

    The maxHeight property is used to set the maximum height of an element. It prevents the used value of the -height property from becoming larger than the value specified for maxHeight. -The value of maxHeight overrides height, but minHeight overrides maxHeight. -Defaults to ASDimensionAuto

    -
    - - - -
    @property (nonatomic, assign, readwrite) ASDimension maxHeight
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      minWidth -

    - -
    -
    - -
    - - -
    -

    The minWidth property is used to set the minimum width of a given element. It prevents the used value of -the width property from becoming smaller than the value specified for minWidth. -The value of minWidth overrides both maxWidth and width. -Defaults to ASDimensionAuto

    -
    - - - -
    @property (nonatomic, assign, readwrite) ASDimension minWidth
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      maxWidth -

    - -
    -
    - -
    - - -
    -

    The maxWidth property is used to set the maximum width of a given element. It prevents the used value of -the width property from becoming larger than the value specified for maxWidth. -The value of maxWidth overrides width, but minWidth overrides maxWidth. -Defaults to ASDimensionAuto

    -
    - - - -
    @property (nonatomic, assign, readwrite) ASDimension maxWidth
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      preferredSize -

    - -
    -
    - -
    - - -
    -

    Provides a suggested size for a layout element. If the optional minSize or maxSize are provided, -and the preferredSize exceeds these, the minSize or maxSize will be enforced. If this optional value is not -provided, the layout element’s size will default to it’s intrinsic content size provided calculateSizeThatFits:

    -
    - - - -
    @property (nonatomic, assign) CGSize preferredSize
    - - - - - - - - - -
    -

    Discussion

    -

    This method is optional, but one of either preferredSize or preferredLayoutSize is required -for nodes that either have no intrinsic content size or -should be laid out at a different size than its intrinsic content size. For example, this property could be -set on an ASImageNode to display at a size different from the underlying image size.

    Warning: Calling the getter when the size’s width or height are relative will cause an assert.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      minSize -

    - -
    -
    - -
    - - -
    -

    An optional property that provides a minimum size bound for a layout element. If provided, this restriction will -always be enforced. If a parent layout element’s minimum size is smaller than its child’s minimum size, the child’s -minimum size will be enforced and its size will extend out of the layout spec’s.

    -
    - - - -
    @property (nonatomic, assign) CGSize minSize
    - - - - - - - - - -
    -

    Discussion

    -

    For example, if you set a preferred relative width of 50% and a minimum width of 200 points on an -element in a full screen container, this would result in a width of 160 points on an iPhone screen. However, -since 160 pts is lower than the minimum width of 200 pts, the minimum width would be used.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      maxSize -

    - -
    -
    - -
    - - -
    -

    An optional property that provides a maximum size bound for a layout element. If provided, this restriction will -always be enforced. If a child layout element’s maximum size is smaller than its parent, the child’s maximum size will -be enforced and its size will extend out of the layout spec’s.

    -
    - - - -
    @property (nonatomic, assign) CGSize maxSize
    - - - - - - - - - -
    -

    Discussion

    -

    For example, if you set a preferred relative width of 50% and a maximum width of 120 points on an -element in a full screen container, this would result in a width of 160 points on an iPhone screen. However, -since 160 pts is higher than the maximum width of 120 pts, the maximum width would be used.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      preferredLayoutSize -

    - -
    -
    - -
    - - -
    -

    Provides a suggested RELATIVE size for a layout element. An ASLayoutSize uses percentages rather -than points to specify layout. E.g. width should be 50% of the parent’s width. If the optional minLayoutSize or -maxLayoutSize are provided, and the preferredLayoutSize exceeds these, the minLayoutSize or maxLayoutSize -will be enforced. If this optional value is not provided, the layout element’s size will default to its intrinsic content size -provided calculateSizeThatFits:

    -
    - - - -
    @property (nonatomic, assign, readwrite) ASLayoutSize preferredLayoutSize
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      minLayoutSize -

    - -
    -
    - -
    - - -
    -

    An optional property that provides a minimum RELATIVE size bound for a layout element. If provided, this -restriction will always be enforced. If a parent layout element’s minimum relative size is smaller than its child’s minimum -relative size, the child’s minimum relative size will be enforced and its size will extend out of the layout spec’s.

    -
    - - - -
    @property (nonatomic, assign, readwrite) ASLayoutSize minLayoutSize
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      maxLayoutSize -

    - -
    -
    - -
    - - -
    -

    An optional property that provides a maximum RELATIVE size bound for a layout element. If provided, this -restriction will always be enforced. If a parent layout element’s maximum relative size is smaller than its child’s maximum -relative size, the child’s maximum relative size will be enforced and its size will extend out of the layout spec’s.

    -
    - - - -
    @property (nonatomic, assign, readwrite) ASLayoutSize maxLayoutSize
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASLayoutSpec.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASLayoutSpec.html deleted file mode 100755 index 3bb92fb29e..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASLayoutSpec.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - - - ASLayoutSpec Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - Texture -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASLayoutSpec Class Reference

    - - -
    - - - - - - - - - - -
    Inherits fromNSObject
    Conforms toASLayoutElement
    Declared inASLayoutSpec.h
    - - - - -
    - -

    Overview

    -

    A layout spec is an immutable object that describes a layout, loosely inspired by React.

    -
    - - - - - -
    - - - - - - -
    -
    - -

      isMutable -

    - -
    -
    - -
    - - -
    -

    Creation of a layout spec should only happen by a user in layoutSpecThatFits:. During that method, a -layout spec can be created and mutated. Once it is passed back to ASDK, the isMutable flag will be -set to NO and any further mutations will cause an assert.

    -
    - - - -
    @property (nonatomic, assign) BOOL isMutable
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutSpec.h

    -
    - - -
    -
    -
    - -

      parent -

    - -
    -
    - -
    - - -
    -

    Parent of the layout spec

    -
    - - - -
    @property (nullable, nonatomic, weak) id<ASLayoutElement> parent
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutSpec.h

    -
    - - -
    -
    -
    - -

      child -

    - -
    -
    - -
    - - -
    -

    Adds a child to this layout spec using a default identifier.

    -
    - - - -
    @property (nullable, strong, nonatomic) id<ASLayoutElement> child
    - - - -
    -

    Parameters

    - - - - - - - -
    child

    A child to be added.

    -
    - - - - - - - -
    -

    Discussion

    -

    Every ASLayoutSpec must act on at least one child. The ASLayoutSpec base class takes the -responsibility of holding on to the spec children. Some layout specs, like ASInsetLayoutSpec, -only require a single child.

    - -

    For layout specs that require a known number of children (ASBackgroundLayoutSpec, for example) -a subclass should use this method to set the “primary” child. It can then use setChild:forIdentifier: -to set any other required children. Ideally a subclass would hide this from the user, and use the -setChild:forIdentifier: internally. For example, ASBackgroundLayoutSpec exposes a backgroundChild -property that behind the scenes is calling setChild:forIdentifier:.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayoutSpec.h

    -
    - - -
    -
    -
    - -

      children -

    - -
    -
    - -
    - - -
    -

    Adds childen to this layout spec.

    -
    - - - -
    @property (nullable, strong, nonatomic) NSArray<id<ASLayoutElement> > *children
    - - - -
    -

    Parameters

    - - - - - - - -
    children

    An array of ASLayoutElement children to be added.

    -
    - - - - - - - -
    -

    Discussion

    -

    Every ASLayoutSpec must act on at least one child. The ASLayoutSpec base class takes the -reponsibility of holding on to the spec children. Some layout specs, like ASStackLayoutSpec, -can take an unknown number of children. In this case, the this method should be used. -For good measure, in these layout specs it probably makes sense to define -setChild: and setChild:forIdentifier: methods to do something appropriate or to assert.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayoutSpec.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - - -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASMapNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASMapNode.html deleted file mode 100755 index 75a586bc13..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASMapNode.html +++ /dev/null @@ -1,531 +0,0 @@ - - - - - - ASMapNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASMapNode Class Reference

    - - -
    - - - - - - - -
    Inherits fromASImageNode : ASControlNode : ASDisplayNode : ASDealloc2MainObject
    Declared inASMapNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

      options -

    - -
    -
    - -
    - - -
    -

    The current options of ASMapNode. This can be set at any time and ASMapNode will animate the change.

    This property may be set from a background thread before the node is loaded, and will automatically be applied to define the behavior of the static snapshot (if .liveMap = NO) or the internal MKMapView (otherwise).

    Changes to the region and camera options will only be animated when when the liveMap mode is enabled, otherwise these options will be applied statically to the new snapshot.

    The options object is used to specify properties even when the liveMap mode is enabled, allowing seamless transitions between the snapshot and liveMap (as well as back to the snapshot).

    -
    - - - -
    @property (nonatomic, strong) MKMapSnapshotOptions *options
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASMapNode.h

    -
    - - -
    -
    -
    - -

      region -

    - -
    -
    - -
    - - -
    -

    The region is simply the sub-field on the options object. If the objects object is reset, - this will in effect be overwritten and become the value of the .region property on that object. - Defaults to MKCoordinateRegionForMapRect(MKMapRectWorld).

    -
    - - - -
    @property (nonatomic, assign) MKCoordinateRegion region
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASMapNode.h

    -
    - - -
    -
    -
    - -

      mapView -

    - -
    -
    - -
    - - -
    -

    This is the MKMapView that is the live map part of ASMapNode. This will be nil if .liveMap = NO. Note, MKMapView is not thread-safe.

    -
    - - - -
    @property (nullable, nonatomic, readonly) MKMapView *mapView
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASMapNode.h

    -
    - - -
    -
    -
    - -

      liveMap -

    - -
    -
    - -
    - - -
    -

    Set this to YES to turn the snapshot into an interactive MKMapView and vice versa. Defaults to NO. This property may be set on a background thread before the node is loaded, and will automatically be actioned, once the node is loaded.

    -
    - - - -
    @property (nonatomic, assign, getter=isLiveMap) BOOL liveMap
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASMapNode.h

    -
    - - -
    -
    -
    - -

      needsMapReloadOnBoundsChange -

    - -
    -
    - -
    - - -
    -

    Whether ASMapNode should automatically request a new map snapshot to correspond to the new node size. -@default Default value is YES.

    -
    - - - -
    @property (nonatomic, assign) BOOL needsMapReloadOnBoundsChange
    - - - - - - - - - -
    -

    Discussion

    -

    If mapSize is set then this will be set to NO, since the size will be the same in all orientations.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASMapNode.h

    -
    - - -
    -
    -
    - -

      mapDelegate -

    - -
    -
    - -
    - - -
    -

    Set the delegate of the MKMapView. This can be set even before mapView is created and will be set on the map in the case that the liveMap mode is engaged.

    -
    - - - -
    @property (nonatomic, weak) id<MKMapViewDelegate> mapDelegate
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASMapNode.h

    -
    - - -
    -
    -
    - -

      annotations -

    - -
    -
    - -
    - - -
    -

    The annotations to display on the map.

    -
    - - - -
    @property (nonatomic, copy) NSArray<id<MKAnnotation> > *annotations
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASMapNode.h

    -
    - - -
    -
    -
    - -

      showAnnotationsOptions -

    - -
    -
    - -
    - - -
    -

    This property specifies how to show the annotations. -@default Default value is ASMapNodeShowAnnotationsIgnored

    -
    - - - -
    @property (nonatomic, assign) ASMapNodeShowAnnotationsOptions showAnnotationsOptions
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASMapNode.h

    -
    - - -
    -
    -
    - -

      imageForStaticMapAnnotationBlock -

    - -
    -
    - -
    - - -
    -

    The block which should return annotation image for static map based on provided annotation.

    -
    - - - -
    @property (nonatomic, copy, nullable) UIImage *( ^ ) ( id<MKAnnotation> annotation , CGPoint *centerOffset ) imageForStaticMapAnnotationBlock
    - - - - - - - - - -
    -

    Discussion

    -

    This block is executed on an arbitrary serial queue. If this block is nil, standard pin is used.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASMapNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASMultiplexImageNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASMultiplexImageNode.html deleted file mode 100755 index bb6387c5e7..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASMultiplexImageNode.html +++ /dev/null @@ -1,651 +0,0 @@ - - - - - - ASMultiplexImageNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASMultiplexImageNode Class Reference

    - - -
    - - - - - - - -
    Inherits fromASImageNode : ASControlNode : ASDisplayNode : ASDealloc2MainObject
    Declared inASMultiplexImageNode.h
    - - - - -
    - -

    Overview

    -

    ASMultiplexImageNode begins loading images when its resource can either return a UIImage directly, or a URL the image node should load.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – initWithCache:downloader: -

    - -
    -
    - -
    - - -
    -

    The designated initializer.

    -
    - - - -
    - (instancetype)initWithCache:(nullable id<ASImageCacheProtocol>)cache downloader:(nullable id<ASImageDownloaderProtocol>)downloader
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    cache

    The object that implements a cache of images for the image node.

    downloader

    The object that implements image downloading for the image node.

    -
    - - - -
    -

    Return Value

    -

    An initialized ASMultiplexImageNode.

    -
    - - - - - -
    -

    Discussion

    -

    If cache is nil, the receiver will not attempt to retrieve images from a cache before downloading them.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

      delegate -

    - -
    -
    - -
    - - -
    -

    The delegate, which must conform to the ASMultiplexImageNodeDelegate protocol.

    -
    - - - -
    @property (nonatomic, readwrite, weak) id<ASMultiplexImageNodeDelegate> delegate
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

      dataSource -

    - -
    -
    - -
    - - -
    -

    The data source, which must conform to the ASMultiplexImageNodeDataSource protocol.

    -
    - - - -
    @property (nonatomic, readwrite, weak) id<ASMultiplexImageNodeDataSource> dataSource
    - - - - - - - - - -
    -

    Discussion

    -

    This value is required for ASMultiplexImageNode to load images.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

      downloadsIntermediateImages -

    - -
    -
    - -
    - - -
    -

    Whether the receiver should download more than just its highest-quality image. Defaults to NO.

    -
    - - - -
    @property (nonatomic, readwrite, assign) BOOL downloadsIntermediateImages
    - - - - - - - - - -
    -

    Discussion

    -

    ASMultiplexImageNode immediately loads and displays the first image specified in imageIdentifiers (its -highest-quality image). If that image is not immediately available or cached, the node can download and display -lesser-quality images. Set downloadsIntermediateImages to YES to enable this behaviour.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

      imageIdentifiers -

    - -
    -
    - -
    - - -
    -

    An array of identifiers representing various versions of an image for ASMultiplexImageNode to display.

    -
    - - - -
    @property (nonatomic, readwrite, copy) NSArray<ASImageIdentifier> *imageIdentifiers
    - - - - - - - - - -
    -

    Discussion

    -

    An identifier can be any object that conforms to NSObject and NSCopying. The array should be in -decreasing order of image quality – that is, the first identifier in the array represents the best version.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

    – reloadImageIdentifierSources -

    - -
    -
    - -
    - - -
    -

    Notify the receiver SSAA that its data source has new UIImages or NSURLs available for imageIdentifiers.

    -
    - - - -
    - (void)reloadImageIdentifierSources
    - - - - - - - - - -
    -

    Discussion

    -

    If a higher-quality image than is currently displayed is now available, it will be loaded.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

      loadedImageIdentifier -

    - -
    -
    - -
    - - -
    -

    The identifier for the last image that the receiver loaded, or nil.

    -
    - - - -
    @property (nullable, nonatomic, readonly) ASImageIdentifier loadedImageIdentifier
    - - - - - - - - - -
    -

    Discussion

    -

    This value may differ from displayedImageIdentifier if the image hasn’t yet been displayed.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

      displayedImageIdentifier -

    - -
    -
    - -
    - - -
    -

    The identifier for the image that the receiver is currently displaying, or nil.

    -
    - - - -
    @property (nullable, nonatomic, readonly) ASImageIdentifier displayedImageIdentifier
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

      shouldRenderProgressImages -

    - -
    -
    - -
    - - -
    -

    If the downloader implements progressive image rendering and this value is YES progressive renders of the -image will be displayed as the image downloads. Regardless of this properties value, progress renders will -only occur when the node is visible. Defaults to YES.

    -
    - - - -
    @property (nonatomic, assign, readwrite) BOOL shouldRenderProgressImages
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

      imageManager -

    - -
    -
    - -
    - - -
    -
      -
    • @abstract The image manager that this image node should use when requesting images from the Photos framework. If this is nil (the default), then PHImageManager.defaultManager is used.
    • -
    - -
    - - - -
    @property (nullable, nonatomic, strong) PHImageManager *imageManager
    - - - - - - - - - -
    -

    Discussion

    -
      -
    • @see +[NSURL URLWithAssetLocalIdentifier:targetSize:contentMode:options:] below.
    • -
    - -
    - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASNavigationController.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASNavigationController.html deleted file mode 100755 index 4dd2da497c..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASNavigationController.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - ASNavigationController Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASNavigationController Class Reference

    - - -
    - - - - - - - - - - -
    Inherits fromUINavigationController
    Conforms toASManagesChildVisibilityDepth
    Declared inASNavigationController.h
    - - - - -
    - -

    Overview

    -

    ASNavigationController

    ASNavigationController is a drop in replacement for UINavigationController -which improves memory efficiency by implementing the @c ASManagesChildVisibilityDepth protocol. -You can use ASNavigationController with regular UIViewControllers, as well as ASViewControllers. -It is safe to subclass or use even where AsyncDisplayKit is not adopted.

    -
    - - - - - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASNetworkImageNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASNetworkImageNode.html deleted file mode 100755 index 36b5f30476..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASNetworkImageNode.html +++ /dev/null @@ -1,633 +0,0 @@ - - - - - - ASNetworkImageNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASNetworkImageNode Class Reference

    - - -
    - - - - - - - -
    Inherits fromASImageNode : ASControlNode : ASDisplayNode : ASDealloc2MainObject
    Declared inASNetworkImageNode.h
    - - - - -
    - -

    Overview

    -

    ASNetworkImageNode is a simple image node that can download and display an image from the network, with support for a -placeholder image (defaultImage). The currently-displayed image is always available in the inherited ASImageNode - property.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – initWithCache:downloader: -

    - -
    -
    - -
    - - -
    -

    The designated initializer. Cache and Downloader are WEAK references.

    -
    - - - -
    - (instancetype)initWithCache:(nullable id<ASImageCacheProtocol>)cache downloader:(id<ASImageDownloaderProtocol>)downloader
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    cache

    The object that implements a cache of images for the image node. Weak reference.

    downloader

    The object that implements image downloading for the image node. Must not be nil. Weak reference.

    -
    - - - -
    -

    Return Value

    -

    An initialized ASNetworkImageNode.

    -
    - - - - - -
    -

    Discussion

    -

    If cache is nil, the receiver will not attempt to retrieve images from a cache before downloading them.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    - -

    – init -

    - -
    -
    - -
    - - -
    -

    Convenience initialiser.

    -
    - - - -
    - (instancetype)init
    - - - - - -
    -

    Return Value

    -

    An ASNetworkImageNode configured to use the NSURLSession-powered ASBasicImageDownloader, and no extra cache.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    - -

      delegate -

    - -
    -
    - -
    - - -
    -

    The delegate, which must conform to the ASNetworkImageNodeDelegate protocol.

    -
    - - - -
    @property (nullable, nonatomic, weak, readwrite) id<ASNetworkImageNodeDelegate> delegate
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    - -

      defaultImage -

    - -
    -
    - -
    - - -
    -

    A placeholder image to display while the URL is loading.

    -
    - - - -
    @property (nullable, nonatomic, strong, readwrite) UIImage *defaultImage
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    - -

      URL -

    - -
    -
    - -
    - - -
    -

    The URL of a new image to download and display.

    -
    - - - -
    @property (nullable, nonatomic, strong, readwrite) NSURL *URL
    - - - - - - - - - -
    -

    Discussion

    -

    Changing this property will reset the displayed image to a placeholder (defaultImage) while loading.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    - -

    – setURL:resetToDefault: -

    - -
    -
    - -
    - - -
    -

    Download and display a new image.

    -
    - - - -
    - (void)setURL:(nullable NSURL *)URL resetToDefault:(BOOL)reset
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    URL

    The URL of a new image to download and display.

    reset

    Whether to display a placeholder (defaultImage) while loading the new image.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    - -

      shouldCacheImage -

    - -
    -
    - -
    - - -
    -

    If URL is a local file, set this property to YES to take advantage of UIKit’s image caching. Defaults to YES.

    -
    - - - -
    @property (nonatomic, assign, readwrite) BOOL shouldCacheImage
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    - -

      shouldRenderProgressImages -

    - -
    -
    - -
    - - -
    -

    If the downloader implements progressive image rendering and this value is YES progressive renders of the -image will be displayed as the image downloads. Regardless of this properties value, progress renders will -only occur when the node is visible. Defaults to YES.

    -
    - - - -
    @property (nonatomic, assign, readwrite) BOOL shouldRenderProgressImages
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    - -

      currentImageQuality -

    - -
    -
    - -
    - - -
    -

    The image quality of the current image. This is a number between 0 and 1 and can be used to track -progressive progress. Calculated by dividing number of bytes / expected number of total bytes.

    -
    - - - -
    @property (nonatomic, assign, readonly) CGFloat currentImageQuality
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    - -

      renderedImageQuality -

    - -
    -
    - -
    - - -
    -

    The image quality (value between 0 and 1) of the last image that completed displaying.

    -
    - - - -
    @property (nonatomic, assign, readonly) CGFloat renderedImageQuality
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASOverlayLayoutSpec.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASOverlayLayoutSpec.html deleted file mode 100755 index 8ebefaec69..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASOverlayLayoutSpec.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - ASOverlayLayoutSpec Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASOverlayLayoutSpec Class Reference

    - - -
    - - - - - - - -
    Inherits fromASLayoutSpec : NSObject
    Declared inASOverlayLayoutSpec.h
    - - - - -
    - -

    Overview

    -

    This layout spec lays out a single layoutElement child and then overlays a layoutElement object on top of it streched to its size

    -
    - - - - - -
    - - - - - - -
    -
    - -

      overlay -

    - -
    -
    - -
    - - -
    -

    Overlay layoutElement of this layout spec

    -
    - - - -
    @property (nullable, nonatomic, strong) id<ASLayoutElement> overlay
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASOverlayLayoutSpec.h

    -
    - - -
    -
    -
    - -

    + overlayLayoutSpecWithChild:overlay: -

    - -
    -
    - -
    - - -
    -

    Creates and returns an ASOverlayLayoutSpec object with a given child and an layoutElement that act as overlay.

    -
    - - - -
    + (instancetype)overlayLayoutSpecWithChild:(id<ASLayoutElement>)child overlay:(nullable id<ASLayoutElement>)overlay
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    child

    A child that is laid out to determine the size of this spec.

    overlay

    A layoutElement object that is laid out over the child. If this is nil, the overlay is omitted.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASOverlayLayoutSpec.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASPagerNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASPagerNode.html deleted file mode 100755 index b6f529ae77..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASPagerNode.html +++ /dev/null @@ -1,579 +0,0 @@ - - - - - - ASPagerNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASPagerNode Class Reference

    - - -
    - - - - - - - -
    Inherits fromASCollectionNode : ASDisplayNode : ASDealloc2MainObject
    Declared inASPagerNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – init -

    - -
    -
    - -
    - - -
    -

    Configures a default horizontal, paging flow layout with 0 inter-item spacing.

    -
    - - - -
    - (instancetype)init
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASPagerNode.h

    -
    - - -
    -
    -
    - -

    – initWithCollectionViewLayout: -

    - -
    -
    - -
    - - -
    -

    Initializer with custom-configured flow layout properties.

    -
    - - - -
    - (instancetype)initWithCollectionViewLayout:(ASPagerFlowLayout *)flowLayout
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASPagerNode.h

    -
    - - -
    -
    -
    - -

    – setDataSource: -

    - -
    -
    - -
    - - -
    -

    Data Source is required, and uses a different protocol from ASCollectionNode.

    -
    - - - -
    - (void)setDataSource:(nullable id<ASPagerDataSource>)dataSource
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASPagerNode.h

    -
    - - -
    -
    -
    - -

    – dataSource -

    - -
    -
    - -
    - - -
    -

    The object that acts as the asynchronous data source of the collection view

    -
    - - - -
    - (nullable id<ASPagerDataSource>)dataSource
    - - - - - - - - - -
    -

    Discussion

    -

    The datasource must adopt the ASCollectionDataSource protocol. The collection view maintains a weak reference to the datasource object.

    - -

    The datasource object is responsible for providing nodes or node creation blocks to the collection view.

    Note: This is a convenience method which sets the asyncDatasource on the collection node’s collection view.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – setDelegate: -

    - -
    -
    - -
    - - -
    -

    Delegate is optional. -This includes UIScrollViewDelegate as well as most methods from UICollectionViewDelegate, like willDisplay…

    -
    - - - -
    - (void)setDelegate:(nullable id<ASPagerDelegate>)delegate
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASPagerNode.h

    -
    - - -
    -
    -
    - -

    – delegate -

    - -
    -
    - -
    - - -
    -

    The object that acts as the asynchronous delegate of the collection view

    -
    - - - -
    - (nullable id<ASPagerDelegate>)delegate
    - - - - - - - - - -
    -

    Discussion

    -

    The delegate must adopt the ASCollectionDelegate protocol. The collection view maintains a weak reference to the delegate object.

    - -

    The delegate object is responsible for providing size constraints for nodes and indicating whether batch fetching should begin.

    Note: This is a convenience method which sets the asyncDelegate on the collection node’s collection view.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

      view -

    - -
    -
    - -
    - - -
    -

    The underlying ASCollectionView object.

    -
    - - - -
    @property (nonatomic, readonly) ASCollectionView *view
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASPagerNode.h

    -
    - - -
    -
    -
    - -

      currentPageIndex -

    - -
    -
    - -
    - - -
    -

    Returns the current page index

    -
    - - - -
    @property (nonatomic, assign, readonly) NSInteger currentPageIndex
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASPagerNode.h

    -
    - - -
    -
    -
    - -

    – scrollToPageAtIndex:animated: -

    - -
    -
    - -
    - - -
    -

    Scroll the contents of the receiver to ensure that the page is visible

    -
    - - - -
    - (void)scrollToPageAtIndex:(NSInteger)index animated:(BOOL)animated
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASPagerNode.h

    -
    - - -
    -
    -
    - -

    – nodeForPageAtIndex: -

    - -
    -
    - -
    - - -
    -

    Returns the node for the passed page index

    -
    - - - -
    - (ASCellNode *)nodeForPageAtIndex:(NSInteger)index
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASPagerNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASRangeController.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASRangeController.html deleted file mode 100755 index ad02f940ee..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASRangeController.html +++ /dev/null @@ -1,437 +0,0 @@ - - - - - - ASRangeController Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASRangeController Class Reference

    - - -
    - - - - - - - - - - -
    Inherits fromASDealloc2MainObject
    Conforms toASDataControllerDelegate
    Declared inASRangeController.h
    - - - - -
    - -

    Overview

    -

    Working range controller.

    - -

    Used internally by ASTableView and ASCollectionView. It is paired with ASDataController. -It is designed to support custom scrolling containers as well. Observes the visible range, maintains -“working ranges” to trigger network calls and rendering, and is responsible for driving asynchronous layout of cells. -This includes cancelling those asynchronous operations as cells fall outside of the working ranges.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – setNeedsUpdate -

    - -
    -
    - -
    - - -
    -

    Notify the range controller that the visible range has been updated. -This is the primary input call that drives updating the working ranges, and triggering their actions. -The ranges will be updated in the next turn of the main loop, or when -updateIfNeeded is called.

    -
    - - - -
    - (void)setNeedsUpdate
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    - -

    – updateIfNeeded -

    - -
    -
    - -
    - - -
    -

    Update the ranges immediately, if -setNeedsUpdate has been called since the last update. -This is useful because the ranges must be updated immediately after a cell is added -into a table/collection to satisfy interface state API guarantees.

    -
    - - - -
    - (void)updateIfNeeded
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    - -

    – configureContentView:forCellNode: -

    - -
    -
    - -
    - - -
    -

    Add the sized node for indexPath as a subview of contentView.

    -
    - - - -
    - (void)configureContentView:(UIView *)contentView forCellNode:(ASCellNode *)node
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    contentView

    UIView to add a (sized) node’s view to.

    node

    The cell node to be added.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    - -

      layoutController -

    - -
    -
    - -
    - - -
    -

    An object that describes the layout behavior of the ranged component (table view, collection view, etc.)

    -
    - - - -
    @property (nonatomic, strong) id<ASLayoutController> layoutController
    - - - - - - - - - -
    -

    Discussion

    -

    Used primarily for providing the current range of index paths and identifying when the -range controller should invalidate its range.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    - -

      dataSource -

    - -
    -
    - -
    - - -
    -

    The underlying data source for the range controller

    -
    - - - -
    @property (nonatomic, weak) id<ASRangeControllerDataSource> dataSource
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    - -

      delegate -

    - -
    -
    - -
    - - -
    -

    Delegate for handling range controller events. Must not be nil.

    -
    - - - -
    @property (nonatomic, weak) id<ASRangeControllerDelegate> delegate
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASRatioLayoutSpec.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASRatioLayoutSpec.html deleted file mode 100755 index cc159b5851..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASRatioLayoutSpec.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - ASRatioLayoutSpec Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASRatioLayoutSpec Class Reference

    - - -
    - - - - - - - -
    Inherits fromASLayoutSpec : NSObject
    Declared inASRatioLayoutSpec.h
    - - - - -
    - -

    Overview

    -

    Ratio layout spec -For when the content should respect a certain inherent ratio but can be scaled (think photos or videos) -The ratio passed is the ratio of height / width you expect

    - -

    For a ratio 0.5, the spec will have a flat rectangle shape

    - -
    - -

    | | -| _ _ |

    - -

    For a ratio 2.0, the spec will be twice as tall as it is wide - _ _ -| | -| | -| | -| |

    - -

    *

    -
    - - - - - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASRelativeLayoutSpec.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASRelativeLayoutSpec.html deleted file mode 100755 index ebcd558584..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASRelativeLayoutSpec.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - ASRelativeLayoutSpec Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASRelativeLayoutSpec Class Reference

    - - -
    - - - - - - - -
    Inherits fromASLayoutSpec : NSObject
    Declared inASRelativeLayoutSpec.h
    - - - - -
    - -

    Overview

    -

    Lays out a single layoutElement child and positions it within the layout bounds according to vertical and horizontal positional specifiers. -Can position the child at any of the 4 corners, or the middle of any of the 4 edges, as well as the center - similar to “9-part” image areas.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    + relativePositionLayoutSpecWithHorizontalPosition:verticalPosition:sizingOption:child: -

    - -
    -
    - -
    - - -
    -

    convenience constructor for a ASRelativeLayoutSpec

    -
    - - - -
    + (instancetype)relativePositionLayoutSpecWithHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition verticalPosition:(ASRelativeLayoutSpecPosition)verticalPosition sizingOption:(ASRelativeLayoutSpecSizingOption)sizingOption child:(id<ASLayoutElement>)child
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - -
    horizontalPosition

    how to position the item on the horizontal (x) axis

    verticalPosition

    how to position the item on the vertical (y) axis

    sizingOption

    how much size to take up

    child

    the child to layout

    -
    - - - -
    -

    Return Value

    -

    a configured ASRelativeLayoutSpec

    -
    - - - - - -
    -

    Discussion

    -

    convenience constructor for a ASRelativeLayoutSpec

    -
    - - - - - - - -
    -

    Declared In

    -

    ASRelativeLayoutSpec.h

    -
    - - -
    -
    -
    - -

    – initWithHorizontalPosition:verticalPosition:sizingOption:child: -

    - -
    -
    - -
    - - -
    -

    convenience initializer for a ASRelativeLayoutSpec

    -
    - - - -
    - (instancetype)initWithHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition verticalPosition:(ASRelativeLayoutSpecPosition)verticalPosition sizingOption:(ASRelativeLayoutSpecSizingOption)sizingOption child:(id<ASLayoutElement>)child
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - -
    horizontalPosition

    how to position the item on the horizontal (x) axis

    verticalPosition

    how to position the item on the vertical (y) axis

    sizingOption

    how much size to take up

    child

    the child to layout

    -
    - - - -
    -

    Return Value

    -

    a configured ASRelativeLayoutSpec

    -
    - - - - - -
    -

    Discussion

    -

    convenience initializer for a ASRelativeLayoutSpec

    -
    - - - - - - - -
    -

    Declared In

    -

    ASRelativeLayoutSpec.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASScrollNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASScrollNode.html deleted file mode 100755 index 83843991b4..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASScrollNode.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - ASScrollNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASScrollNode Class Reference

    - - -
    - - - - - - - -
    Inherits fromASDisplayNode : ASDealloc2MainObject
    Declared inASScrollNode.h
    - - - - -
    - -

    Overview

    -

    Simple node that wraps UIScrollView.

    -
    - - - - - -
    - - - - - - -
    -
    - -

      view -

    - -
    -
    - -
    - - -
    -

    The node’s UIScrollView.

    -
    - - - -
    @property (nonatomic, readonly, strong) UIScrollView *view
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASScrollNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASStackLayoutSpec.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASStackLayoutSpec.html deleted file mode 100755 index 80de7f100c..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASStackLayoutSpec.html +++ /dev/null @@ -1,649 +0,0 @@ - - - - - - ASStackLayoutSpec Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASStackLayoutSpec Class Reference

    - - -
    - - - - - - - -
    Inherits fromASLayoutSpec : NSObject
    Declared inASStackLayoutSpec.h
    - - - - -
    - -

    Overview

    -

    A simple layout spec that stacks a list of children vertically or horizontally.

    - -
      -
    • All children are initially laid out with the an infinite available size in the stacking direction.
    • -
    • In the other direction, this spec’s constraint is passed.
    • -
    • The children’s sizes are summed in the stacking direction. - -
        -
      • If this sum is less than this spec’s minimum size in stacking direction, children with flexGrow are flexed.
      • -
      • If it is greater than this spec’s maximum size in the stacking direction, children with flexShrink are flexed.
      • -
      • If, even after flexing, the sum is still greater than this spec’s maximum size in the stacking direction, -justifyContent determines how children are laid out.
      • -
      -
    • -
    - - -

    For example:

    - -
      -
    • Suppose stacking direction is Vertical, min-width=100, max-width=300, min-height=200, max-height=500.
    • -
    • All children are laid out with min-width=100, max-width=300, min-height=0, max-height=INFINITY.
    • -
    • If the sum of the childrens' heights is less than 200, children with flexGrow are flexed larger.
    • -
    • If the sum of the childrens' heights is greater than 500, children with flexShrink are flexed smaller. - Each child is shrunk by ((sum of heights) - 500)/(number of flexShrink-able children).
    • -
    • If the sum of the childrens' heights is greater than 500 even after flexShrink-able children are flexed, - justifyContent determines how children are laid out.
    • -
    - -
    - - - - - -
    - - - - - - -
    -
    - -

      direction -

    - -
    -
    - -
    - - -
    -

    Specifies the direction children are stacked in. If horizontalAlignment and verticalAlignment were set, -they will be resolved again, causing justifyContent and alignItems to be updated accordingly

    -
    - - - -
    @property (nonatomic, assign) ASStackLayoutDirection direction
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutSpec.h

    -
    - - -
    -
    -
    - -

      spacing -

    - -
    -
    - -
    - - -
    -

    The amount of space between each child.

    -
    - - - -
    @property (nonatomic, assign) CGFloat spacing
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutSpec.h

    -
    - - -
    -
    -
    - -

      horizontalAlignment -

    - -
    -
    - -
    - - -
    -

    Specifies how children are aligned horizontally. Depends on the stack direction, setting the alignment causes either -justifyContent or alignItems to be updated. The alignment will remain valid after future direction changes. -Thus, it is preferred to those properties

    -
    - - - -
    @property (nonatomic, assign) ASHorizontalAlignment horizontalAlignment
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutSpec.h

    -
    - - -
    -
    -
    - -

      verticalAlignment -

    - -
    -
    - -
    - - -
    -

    Specifies how children are aligned vertically. Depends on the stack direction, setting the alignment causes either -justifyContent or alignItems to be updated. The alignment will remain valid after future direction changes. -Thus, it is preferred to those properties

    -
    - - - -
    @property (nonatomic, assign) ASVerticalAlignment verticalAlignment
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutSpec.h

    -
    - - -
    -
    -
    - -

      justifyContent -

    - -
    -
    - -
    - - -
    -

    The amount of space between each child.

    -
    - - - -
    @property (nonatomic, assign) ASStackLayoutJustifyContent justifyContent
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutSpec.h

    -
    - - -
    -
    -
    - -

      alignItems -

    - -
    -
    - -
    - - -
    -

    Orientation of children along cross axis

    -
    - - - -
    @property (nonatomic, assign) ASStackLayoutAlignItems alignItems
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutSpec.h

    -
    - - -
    -
    -
    - -

      baselineRelativeArrangement -

    - -
    -
    - -
    - - -
    -

    If YES the vertical spacing between two views is measured from the last baseline of the top view to the top of the bottom view

    -
    - - - -
    @property (nonatomic, assign) BOOL baselineRelativeArrangement
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutSpec.h

    -
    - - -
    -
    -
    - -

    + stackLayoutSpecWithDirection:spacing:justifyContent:alignItems:children: -

    - -
    -
    - -
    - - -
    -

    The direction of the stack view (horizontal or vertical)

    -
    - - - -
    + (instancetype)stackLayoutSpecWithDirection:(ASStackLayoutDirection)direction spacing:(CGFloat)spacing justifyContent:(ASStackLayoutJustifyContent)justifyContent alignItems:(ASStackLayoutAlignItems)alignItems children:(NSArray<id<ASLayoutElement> > *)children
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    direction

    The direction of the stack view (horizontal or vertical)

    spacing

    The spacing between the children

    justifyContent

    If no children are flexible, this describes how to fill any extra space

    alignItems

    Orientation of the children along the cross axis

    children

    ASLayoutElement children to be positioned.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutSpec.h

    -
    - - -
    -
    -
    - -

    + verticalStackLayoutSpec -

    - -
    -
    - -
    - - -
    -

    A stack layout spec with direction of ASStackLayoutDirectionVertical

    -
    - - - -
    + (instancetype)verticalStackLayoutSpec
    - - - - - -
    -

    Return Value

    -

    A stack layout spec with direction of ASStackLayoutDirectionVertical

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutSpec.h

    -
    - - -
    -
    -
    - -

    + horizontalStackLayoutSpec -

    - -
    -
    - -
    - - -
    -

    A stack layout spec with direction of ASStackLayoutDirectionHorizontal

    -
    - - - -
    + (instancetype)horizontalStackLayoutSpec
    - - - - - -
    -

    Return Value

    -

    A stack layout spec with direction of ASStackLayoutDirectionHorizontal

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutSpec.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTabBarController.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTabBarController.html deleted file mode 100755 index 851476ab61..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTabBarController.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - ASTabBarController Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASTabBarController Class Reference

    - - -
    - - - - - - - - - - -
    Inherits fromUITabBarController
    Conforms toASManagesChildVisibilityDepth
    Declared inASTabBarController.h
    - - - - -
    - -

    Overview

    -

    ASTabBarController

    ASTabBarController is a drop in replacement for UITabBarController -which implements the memory efficiency improving @c ASManagesChildVisibilityDepth protocol.

    -
    - - - - - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTableNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTableNode.html deleted file mode 100755 index aa37fc25a1..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTableNode.html +++ /dev/null @@ -1,2128 +0,0 @@ - - - - - - ASTableNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASTableNode Class Reference

    - - -
    - - - - - - - - - - -
    Inherits fromASDisplayNode : ASDealloc2MainObject
    Conforms toASRangeControllerUpdateRangeProtocol
    Declared inASTableNode.h
    - - - - -
    - -

    Overview

    -

    ASTableNode is a node based class that wraps an ASTableView. It can be used -as a subnode of another node, and provide room for many (great) features and improvements later on.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – init -

    - -
    -
    - -
    - - -
    -

    Designated initializer.

    -
    - - - -
    - (instancetype)init
    - - - - - -
    -

    Return Value

    -

    An ASDisplayNode instance whose view will be a subclass that enables asynchronous rendering, and passes -through -layout and touch handling methods.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

      view -

    - -
    -
    - -
    - - -
    -

    Returns a view.

    -
    - - - -
    @property (strong, nonatomic, readonly) ASTableView *view
    - - - - - - - - - -
    -

    Discussion

    -

    The view property is lazily initialized, similar to UIViewController. -To go the other direction, use ASViewToDisplayNode() in ASDisplayNodeExtras.h.

    Warning: The first access to it must be on the main thread, and should only be used on the main thread thereafter as -well.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - -
    -
    -
    - -

    – tuningParametersForRangeType: -

    - -
    -
    - -
    - - -
    -

    Tuning parameters for a range type in full mode.

    -
    - - - -
    - (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - -
    rangeType

    The range type to get the tuning parameters for.

    -
    - - - -
    -

    Return Value

    -

    A tuning parameter value for the given range type in full mode.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – setTuningParameters:forRangeType: -

    - -
    -
    - -
    - - -
    -

    Set the tuning parameters for a range type in full mode.

    -
    - - - -
    - (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    tuningParameters

    The tuning parameters to store for a range type.

    rangeType

    The range type to set the tuning parameters for.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – tuningParametersForRangeMode:rangeType: -

    - -
    -
    - -
    - - -
    -

    Tuning parameters for a range type in the specified mode.

    -
    - - - -
    - (ASRangeTuningParameters)tuningParametersForRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    rangeMode

    The range mode to get the running parameters for.

    rangeType

    The range type to get the tuning parameters for.

    -
    - - - -
    -

    Return Value

    -

    A tuning parameter value for the given range type in the given mode.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – setTuningParameters:forRangeMode:rangeType: -

    - -
    -
    - -
    - - -
    -

    Set the tuning parameters for a range type in the specified mode.

    -
    - - - -
    - (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    tuningParameters

    The tuning parameters to store for a range type.

    rangeMode

    The range mode to set the running parameters for.

    rangeType

    The range type to set the tuning parameters for.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – scrollToRowAtIndexPath:atScrollPosition:animated: -

    - -
    -
    - -
    - - -
    -

    Scrolls the table to the given row.

    -
    - - - -
    - (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    indexPath

    The index path of the row.

    scrollPosition

    Where the row should end up after the scroll.

    animated

    Whether the scroll should be animated or not.

    - -

    This method must be called on the main thread.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – reloadDataWithCompletion: -

    - -
    -
    - -
    - - -
    -

    Reload everything from scratch, destroying the working range and all cached nodes.

    -
    - - - -
    - (void)reloadDataWithCompletion:(nullable void ( ^ ) ( ))completion
    - - - -
    -

    Parameters

    - - - - - - - -
    completion

    block to run on completion of asynchronous loading or nil. If supplied, the block is run on -the main thread.

    -
    - - - - - - - -
    -

    Discussion

    -

    Warning: This method is substantially more expensive than UITableView’s version.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – reloadData -

    - -
    -
    - -
    - - -
    -

    Reload everything from scratch, destroying the working range and all cached nodes.

    -
    - - - -
    - (void)reloadData
    - - - - - - - - - -
    -

    Discussion

    -

    Warning: This method is substantially more expensive than UITableView’s version.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – relayoutItems -

    - -
    -
    - -
    - - -
    -

    Triggers a relayout of all nodes.

    -
    - - - -
    - (void)relayoutItems
    - - - - - - - - - -
    -

    Discussion

    -

    This method invalidates and lays out every cell node in the table view.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – performBatchAnimated:updates:completion: -

    - -
    -
    - -
    - - -
    -

    Perform a batch of updates asynchronously, optionally disabling all animations in the batch. This method must be called from the main thread. -The data source must be updated to reflect the changes before the update block completes.

    -
    - - - -
    - (void)performBatchAnimated:(BOOL)animated updates:(nullable __attribute ( ( noescape ) ) void ( ^ ) ( ))updates completion:(nullable void ( ^ ) ( BOOL finished ))completion
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    animated

    NO to disable animations for this batch

    updates

    The block that performs the relevant insert, delete, reload, or move operations.

    completion

    A completion handler block to execute when all of the operations are finished. This block takes a single -Boolean parameter that contains the value YES if all of the related animations completed successfully or -NO if they were interrupted. This parameter may be nil. If supplied, the block is run on the main thread.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – performBatchUpdates:completion: -

    - -
    -
    - -
    - - -
    -

    Perform a batch of updates asynchronously, optionally disabling all animations in the batch. This method must be called from the main thread. -The data source must be updated to reflect the changes before the update block completes.

    -
    - - - -
    - (void)performBatchUpdates:(nullable __attribute ( ( noescape ) ) void ( ^ ) ( ))updates completion:(nullable void ( ^ ) ( BOOL finished ))completion
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    updates

    The block that performs the relevant insert, delete, reload, or move operations.

    completion

    A completion handler block to execute when all of the operations are finished. This block takes a single -Boolean parameter that contains the value YES if all of the related animations completed successfully or -NO if they were interrupted. This parameter may be nil. If supplied, the block is run on the main thread.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – waitUntilAllUpdatesAreCommitted -

    - -
    -
    - -
    - - -
    -

    Blocks execution of the main thread until all section and row updates are committed. This method must be called from the main thread.

    -
    - - - -
    - (void)waitUntilAllUpdatesAreCommitted
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – insertSections:withRowAnimation: -

    - -
    -
    - -
    - - -
    -

    Inserts one or more sections, with an option to animate the insertion.

    -
    - - - -
    - (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    sections

    An index set that specifies the sections to insert.

    animation

    A constant that indicates how the insertion is to be animated. See UITableViewRowAnimation.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – deleteSections:withRowAnimation: -

    - -
    -
    - -
    - - -
    -

    Deletes one or more sections, with an option to animate the deletion.

    -
    - - - -
    - (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    sections

    An index set that specifies the sections to delete.

    animation

    A constant that indicates how the deletion is to be animated. See UITableViewRowAnimation.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – reloadSections:withRowAnimation: -

    - -
    -
    - -
    - - -
    -

    Reloads the specified sections using a given animation effect.

    -
    - - - -
    - (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    sections

    An index set that specifies the sections to reload.

    animation

    A constant that indicates how the reloading is to be animated. See UITableViewRowAnimation.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – moveSection:toSection: -

    - -
    -
    - -
    - - -
    -

    Moves a section to a new location.

    -
    - - - -
    - (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    section

    The index of the section to move.

    newSection

    The index that is the destination of the move for the section.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – insertRowsAtIndexPaths:withRowAnimation: -

    - -
    -
    - -
    - - -
    -

    Inserts rows at the locations identified by an array of index paths, with an option to animate the insertion.

    -
    - - - -
    - (void)insertRowsAtIndexPaths:(NSArray<NSIndexPath*> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    indexPaths

    An array of NSIndexPath objects, each representing a row index and section index that together identify a row.

    animation

    A constant that indicates how the insertion is to be animated. See UITableViewRowAnimation.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – deleteRowsAtIndexPaths:withRowAnimation: -

    - -
    -
    - -
    - - -
    -

    Deletes the rows specified by an array of index paths, with an option to animate the deletion.

    -
    - - - -
    - (void)deleteRowsAtIndexPaths:(NSArray<NSIndexPath*> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    indexPaths

    An array of NSIndexPath objects identifying the rows to delete.

    animation

    A constant that indicates how the deletion is to be animated. See UITableViewRowAnimation.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – reloadRowsAtIndexPaths:withRowAnimation: -

    - -
    -
    - -
    - - -
    -

    Reloads the specified rows using a given animation effect.

    -
    - - - -
    - (void)reloadRowsAtIndexPaths:(NSArray<NSIndexPath*> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    indexPaths

    An array of NSIndexPath objects identifying the rows to reload.

    animation

    A constant that indicates how the reloading is to be animated. See UITableViewRowAnimation.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – moveRowAtIndexPath:toIndexPath: -

    - -
    -
    - -
    - - -
    -

    Moves the row at a specified location to a destination location.

    -
    - - - -
    - (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    indexPath

    The index path identifying the row to move.

    newIndexPath

    The index path that is the destination of the move for the row.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread. The asyncDataSource must be updated to reflect the changes -before this method is called.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – selectRowAtIndexPath:animated:scrollPosition: -

    - -
    -
    - -
    - - -
    -

    Selects a row in the table view identified by index path, optionally scrolling the row to a location in the table view. -This method does not cause any selection-related delegate methods to be called.

    -
    - - - -
    - (void)selectRowAtIndexPath:(nullable NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    indexPath

    An index path identifying a row in the table view.

    animated

    Specify YES to animate the change in the selection or NO to make the change without animating it.

    scrollPosition

    A constant that identifies a relative position in the table view (top, middle, bottom) for the row when scrolling concludes. See UITableViewScrollPosition for descriptions of valid constants.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – numberOfRowsInSection: -

    - -
    -
    - -
    - - -
    -

    Retrieves the number of rows in the given section.

    -
    - - - -
    - (NSInteger)numberOfRowsInSection:(NSInteger)section
    - - - -
    -

    Parameters

    - - - - - - - -
    section

    The section.

    -
    - - - -
    -

    Return Value

    -

    The number of rows.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

      numberOfSections -

    - -
    -
    - -
    - - -
    -

    The number of sections in the table node.

    -
    - - - -
    @property (nonatomic, readonly) NSInteger numberOfSections
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

      visibleNodes -

    - -
    -
    - -
    - - -
    -

    Similar to -visibleCells.

    -
    - - - -
    @property (nonatomic, readonly) NSArray<__kindofASCellNode*> *visibleNodes
    - - - - - -
    -

    Return Value

    -

    an array containing the nodes being displayed on screen. This must be called on the main thread.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – nodeForRowAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Retrieves the node for the row at the given index path.

    -
    - - - -
    - (nullable __kindof ASCellNode *)nodeForRowAtIndexPath:(NSIndexPath *)indexPath
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – indexPathForNode: -

    - -
    -
    - -
    - - -
    -

    Similar to -indexPathForCell:.

    -
    - - - -
    - (nullable NSIndexPath *)indexPathForNode:(ASCellNode *)cellNode
    - - - -
    -

    Parameters

    - - - - - - - -
    cellNode

    a node for a row.

    -
    - - - -
    -

    Return Value

    -

    The index path to this row, if it exists.

    -
    - - - - - -
    -

    Discussion

    -

    This method will return @c nil for a node that is still being -displayed in the table view, if the data source has deleted the row. -That is, the node is visible but it no longer corresponds -to any item in the data source and will be removed soon.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – rectForRowAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Similar to -[UITableView rectForRowAtIndexPath:]

    -
    - - - -
    - (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - -
    indexPath

    An index path identifying a row in the table view.

    -
    - - - -
    -

    Return Value

    -

    A rectangle defining the area in which the table view draws the row or CGRectZero if indexPath is invalid.

    -
    - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – cellForRowAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Similar to -[UITableView cellForRowAtIndexPath:]

    -
    - - - -
    - (nullable __kindof UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - -
    indexPath

    An index path identifying a row in the table view.

    -
    - - - -
    -

    Return Value

    -

    An object representing a cell of the table, or nil if the cell is not visible or indexPath is out of range.

    -
    - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

      indexPathForSelectedRow -

    - -
    -
    - -
    - - -
    -

    Similar to UITableView.indexPathForSelectedRow

    -
    - - - -
    @property (nonatomic, readonly, nullable) NSIndexPath *indexPathForSelectedRow
    - - - - - -
    -

    Return Value

    -

    The value of this property is an index path identifying the row and section -indexes of the selected row, or nil if the index path is invalid. If there are multiple selections, -this property contains the first index-path object in the array of row selections; -this object has the lowest index values for section and row.

    -
    - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – indexPathForRowAtPoint: -

    - -
    -
    - -
    - - -
    -

    Similar to -[UITableView indexPathForRowAtPoint:]

    -
    - - - -
    - (nullable NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point
    - - - -
    -

    Parameters

    - - - - - - - -
    point

    A point in the local coordinate system of the table view (the table view’€™s bounds).

    -
    - - - -
    -

    Return Value

    -

    An index path representing the row and section associated with point, -or nil if the point is out of the bounds of any row.

    -
    - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – indexPathsForRowsInRect: -

    - -
    -
    - -
    - - -
    -

    Similar to -[UITableView indexPathsForRowsInRect:]

    -
    - - - -
    - (nullable NSArray<NSIndexPath*> *)indexPathsForRowsInRect:(CGRect)rect
    - - - -
    -

    Parameters

    - - - - - - - -
    rect

    A rectangle defining an area of the table view in local coordinates.

    -
    - - - -
    -

    Return Value

    -

    An array of NSIndexPath objects each representing a row and section index identifying a row within rect. -Returns an empty array if there aren’t any rows to return.

    -
    - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – indexPathsForVisibleRows -

    - -
    -
    - -
    - - -
    -

    Similar to -[UITableView indexPathsForVisibleRows]

    -
    - - - -
    - (NSArray<NSIndexPath*> *)indexPathsForVisibleRows
    - - - - - -
    -

    Return Value

    -

    The value of this property is an array of NSIndexPath objects each representing a row index and section index -that together identify a visible row in the table view. If no rows are visible, the value is nil.

    -
    - - - - - -
    -

    Discussion

    -

    This method must be called from the main thread.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTableView.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTableView.html deleted file mode 100755 index d1482c155a..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTableView.html +++ /dev/null @@ -1,333 +0,0 @@ - - - - - - ASTableView Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASTableView Class Reference

    - - -
    - - - - - - - -
    Inherits fromUITableView
    Declared inASTableView.h
    - - - - -
    - -

    Overview

    -

    Asynchronous UITableView with Intelligent Preloading capabilities.

    ASTableView is a true subclass of UITableView, meaning it is pointer-compatible with code that -currently uses UITableView

    - -

    The main difference is that asyncDataSource expects -nodeForRowAtIndexPath, an ASCellNode, and -the heightForRowAtIndexPath: method is eliminated (as are the performance problems caused by it). -This is made possible because ASCellNodes can calculate their own size, and preload ahead of time.

    Note: ASTableNode is strongly recommended over ASTableView. This class is provided for adoption convenience.

    -
    - - - - - -
    - - - - - - -
    -
    - -

      tableNode -

    - -
    -
    - -
    - - -
    -

    The corresponding table node, or nil if one does not exist.

    -
    - - - -
    @property (nonatomic, weak, readonly) ASTableNode *tableNode
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

    – nodeForRowAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Retrieves the node for the row at the given index path.

    -
    - - - -
    - (nullable ASCellNode *)nodeForRowAtIndexPath:(NSIndexPath *)indexPath
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

      automaticallyAdjustsContentOffset -

    - -
    -
    - -
    - - -
    -

    YES to automatically adjust the contentOffset when cells are inserted or deleted “before” -visible cells, maintaining the users' visible scroll position. Currently this feature tracks insertions, moves and deletions of -cells, but section edits are ignored.

    -
    - - - -
    @property (nonatomic) BOOL automaticallyAdjustsContentOffset
    - - - - - - - - - -
    -

    Discussion

    -

    default is NO.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    - -

      leadingScreensForBatching -

    - -
    -
    - -
    - - -
    -

    The number of screens left to scroll before the delegate -tableView:beginBatchFetchingWithContext: is called.

    -
    - - - -
    @property (nonatomic, assign) CGFloat leadingScreensForBatching
    - - - - - - - - - -
    -

    Discussion

    -

    Defaults to two screenfuls.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableView.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTextCellNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTextCellNode.html deleted file mode 100755 index da3f0aa37d..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTextCellNode.html +++ /dev/null @@ -1,316 +0,0 @@ - - - - - - ASTextCellNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASTextCellNode Class Reference

    - - -
    - - - - - - - -
    Inherits fromASCellNode : ASDisplayNode : ASDealloc2MainObject
    Declared inASCellNode.h
    - - - - -
    - -

    Overview

    -

    Simple label-style cell node. Read its source for an example of custom ASCellNodes.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – initWithAttributes:insets: -

    - -
    -
    - -
    - - -
    -

    Initializes a text cell with given text attributes and text insets

    -
    - - - -
    - (instancetype)initWithAttributes:(NSDictionary *)textAttributes insets:(UIEdgeInsets)textInsets
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCellNode.h

    -
    - - -
    -
    -
    - -

      text -

    - -
    -
    - -
    - - -
    -

    Text to display.

    -
    - - - -
    @property (nonatomic, copy) NSString *text
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCellNode.h

    -
    - - -
    -
    -
    - -

      textAttributes -

    - -
    -
    - -
    - - -
    -

    A dictionary containing key-value pairs for text attributes. You can specify the font, text color, text shadow color, and text shadow offset using the keys listed in NSString UIKit Additions Reference.

    -
    - - - -
    @property (nonatomic, copy) NSDictionary *textAttributes
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCellNode.h

    -
    - - -
    -
    -
    - -

      textInsets -

    - -
    -
    - -
    - - -
    -

    The text inset or outset for each edge. The default value is 15.0 horizontal and 11.0 vertical padding.

    -
    - - - -
    @property (nonatomic, assign) UIEdgeInsets textInsets
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCellNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTextNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTextNode.html deleted file mode 100755 index fab6645fc8..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASTextNode.html +++ /dev/null @@ -1,1338 +0,0 @@ - - - - - - ASTextNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASTextNode Class Reference

    - - -
    - - - - - - - -
    Inherits fromASControlNode : ASDisplayNode : ASDealloc2MainObject
    Declared inASTextNode.h
    - - - - -
    - -

    Overview

    -

    Backed by TextKit.

    -
    - - - - - -
    - - - - - - -
    -
    - -

      attributedText -

    - -
    -
    - -
    - - -
    -

    The styled text displayed by the node.

    -
    - - - -
    @property (nullable, nonatomic, copy) NSAttributedString *attributedText
    - - - - - - - - - -
    -

    Discussion

    -

    Defaults to nil, no text is shown. -For inline image attachments, add an attribute of key NSAttachmentAttributeName, with a value of an NSTextAttachment.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      truncationAttributedText -

    - -
    -
    - -
    - - -
    -

    The attributedText to use when the text must be truncated.

    -
    - - - -
    @property (nullable, nonatomic, copy) NSAttributedString *truncationAttributedText
    - - - - - - - - - -
    -

    Discussion

    -

    Defaults to a localized ellipsis character.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      additionalTruncationMessage -

    - -
    -
    - -
    - - -
    -

    @summary The second attributed string appended for truncation.

    -
    - - - -
    @property (nullable, nonatomic, copy) NSAttributedString *additionalTruncationMessage
    - - - - - - - - - -
    -

    Discussion

    -

    This string will be highlighted on touches. -@default nil

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      truncationMode -

    - -
    -
    - -
    - - -
    -

    Determines how the text is truncated to fit within the receiver’s maximum size.

    -
    - - - -
    @property (nonatomic, assign) NSLineBreakMode truncationMode
    - - - - - - - - - -
    -

    Discussion

    -

    Defaults to NSLineBreakByWordWrapping.

    Note: Setting a truncationMode in attributedString will override the truncation mode set here.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      truncated -

    - -
    -
    - -
    - - -
    -

    If the text node is truncated. Text must have been sized first.

    -
    - - - -
    @property (nonatomic, readonly, assign, getter=isTruncated) BOOL truncated
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      maximumNumberOfLines -

    - -
    -
    - -
    - - -
    -

    The maximum number of lines to render of the text before truncation. -@default 0 (No limit)

    -
    - - - -
    @property (nonatomic, assign) NSUInteger maximumNumberOfLines
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      lineCount -

    - -
    -
    - -
    - - -
    -

    The number of lines in the text. Text must have been sized first.

    -
    - - - -
    @property (nonatomic, readonly, assign) NSUInteger lineCount
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      exclusionPaths -

    - -
    -
    - -
    - - -
    -

    An array of path objects representing the regions where text should not be displayed.

    -
    - - - -
    @property (nullable, nonatomic, strong) NSArray<UIBezierPath*> *exclusionPaths
    - - - - - - - - - -
    -

    Discussion

    -

    The default value of this property is an empty array. You can -assign an array of UIBezierPath objects to exclude text from one or more regions in -the text node’s bounds. You can use this property to have text wrap around images, -shapes or other text like a fancy magazine.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      placeholderEnabled -

    - -
    -
    - -
    - - -
    -

    ASTextNode has a special placeholder behavior when placeholderEnabled is YES.

    -
    - - - -
    @property (nonatomic, assign) BOOL placeholderEnabled
    - - - - - - - - - -
    -

    Discussion

    -

    Defaults to NO. When YES, it draws rectangles for each line of text, -following the true shape of the text’s wrapping. This visually mirrors the overall -shape and weight of paragraphs, making the appearance of the finished text less jarring.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      placeholderColor -

    - -
    -
    - -
    - - -
    -

    The placeholder color.

    -
    - - - -
    @property (nullable, nonatomic, strong) UIColor *placeholderColor
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      placeholderInsets -

    - -
    -
    - -
    - - -
    -

    Inset each line of the placeholder.

    -
    - - - -
    @property (nonatomic, assign) UIEdgeInsets placeholderInsets
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      shadowPadding -

    - -
    -
    - -
    - - -
    -

    The number of pixels used for shadow padding on each side of the receiver.

    -
    - - - -
    @property (nonatomic, readonly, assign) UIEdgeInsets shadowPadding
    - - - - - - - - - -
    -

    Discussion

    -

    Each inset will be less than or equal to zero, so that applying -UIEdgeInsetsRect(boundingRectForText, shadowPadding) -will return a CGRect large enough to fit both the text and the appropriate shadow padding.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

    – rectsForTextRange: -

    - -
    -
    - -
    - - -
    -

    Returns an array of rects bounding the characters in a given text range.

    -
    - - - -
    - (NSArray<NSValue*> *)rectsForTextRange:(NSRange)textRange
    - - - -
    -

    Parameters

    - - - - - - - -
    textRange

    A range of text. Must be valid for the receiver’s string.

    -
    - - - - - - - -
    -

    Discussion

    -

    Use this method to detect all the different rectangles a given range of text occupies. -The rects returned are not guaranteed to be contiguous (for example, if the given text range spans -a line break, the rects returned will be on opposite sides and different lines). The rects returned -are in the coordinate system of the receiver.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

    – highlightRectsForTextRange: -

    - -
    -
    - -
    - - -
    -

    Returns an array of rects used for highlighting the characters in a given text range.

    -
    - - - -
    - (NSArray<NSValue*> *)highlightRectsForTextRange:(NSRange)textRange
    - - - -
    -

    Parameters

    - - - - - - - -
    textRange

    A range of text. Must be valid for the receiver’s string.

    -
    - - - - - - - -
    -

    Discussion

    -

    Use this method to detect all the different rectangles the highlights of a given range of text occupies. -The rects returned are not guaranteed to be contiguous (for example, if the given text range spans -a line break, the rects returned will be on opposite sides and different lines). The rects returned -are in the coordinate system of the receiver. This method is useful for visual coordination with a -highlighted range of text.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

    – frameForTextRange: -

    - -
    -
    - -
    - - -
    -

    Returns a bounding rect for the given text range.

    -
    - - - -
    - (CGRect)frameForTextRange:(NSRange)textRange
    - - - -
    -

    Parameters

    - - - - - - - -
    textRange

    A range of text. Must be valid for the receiver’s string.

    -
    - - - - - - - -
    -

    Discussion

    -

    The height of the frame returned is that of the receiver’s line-height; adjustment for -cap-height and descenders is not performed. This method raises an exception if textRange is not -a valid substring range of the receiver’s string.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

    – trailingRect -

    - -
    -
    - -
    - - -
    -

    Returns the trailing rectangle of space in the receiver, after the final character.

    -
    - - - -
    - (CGRect)trailingRect
    - - - - - - - - - -
    -

    Discussion

    -

    Use this method to detect which portion of the receiver is not occupied by characters. -The rect returned is in the coordinate system of the receiver.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      linkAttributeNames -

    - -
    -
    - -
    - - -
    -

    The set of attribute names to consider links. Defaults to NSLinkAttributeName.

    -
    - - - -
    @property (nonatomic, copy) NSArray<NSString*> *linkAttributeNames
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

    – linkAttributeValueAtPoint:attributeName:range: -

    - -
    -
    - -
    - - -
    -

    Indicates whether the receiver has an entity at a given point.

    -
    - - - -
    - (nullable id)linkAttributeValueAtPoint:(CGPoint)point attributeName:(out NSString *_Nullable *_Nullable)attributeNameOut range:(out NSRange *_Nullable)rangeOut
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    point

    The point, in the receiver’s coordinate system.

    attributeNameOut

    The name of the attribute at the point. Can be NULL.

    rangeOut

    The ultimate range of the found text. Can be NULL.

    -
    - - - -
    -

    Return Value

    -

    YES if an entity exists at point; NO otherwise.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      highlightStyle -

    - -
    -
    - -
    - - -
    -

    The style to use when highlighting text.

    -
    - - - -
    @property (nonatomic, assign) ASTextNodeHighlightStyle highlightStyle
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      highlightRange -

    - -
    -
    - -
    - - -
    -

    The range of text highlighted by the receiver. Changes to this property are not animated by default.

    -
    - - - -
    @property (nonatomic, assign) NSRange highlightRange
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

    – setHighlightRange:animated: -

    - -
    -
    - -
    - - -
    -

    Set the range of text to highlight, with optional animation.

    -
    - - - -
    - (void)setHighlightRange:(NSRange)highlightRange animated:(BOOL)animated
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    highlightRange

    The range of text to highlight.

    animated

    Whether the text should be highlighted with an animation.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      delegate -

    - -
    -
    - -
    - - -
    -

    Responds to actions from links in the text node.

    -
    - - - -
    @property (nonatomic, weak) id<ASTextNodeDelegate> delegate
    - - - - - - - - - -
    -

    Discussion

    -

    The delegate must be set before the node is loaded, and implement - textNode:longPressedLinkAttribute:value:atPoint:textRange: in order for - the long press gesture recognizer to be installed.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      longPressCancelsTouches -

    - -
    -
    - -
    - - -
    -

    If YES and a long press is recognized, touches are cancelled. Default is NO

    -
    - - - -
    @property (nonatomic, assign) BOOL longPressCancelsTouches
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

      passthroughNonlinkTouches -

    - -
    -
    - -
    - - -
    -

    if YES will not intercept touches for non-link areas of the text. Default is NO.

    -
    - - - -
    @property (nonatomic, assign) BOOL passthroughNonlinkTouches
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASVideoNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASVideoNode.html deleted file mode 100755 index f9b2b28315..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASVideoNode.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - - - ASVideoNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASVideoNode Class Reference

    - - -
    - - - - - - - -
    Inherits fromASNetworkImageNode : ASImageNode : ASControlNode : ASDisplayNode : ASDealloc2MainObject
    Declared inASVideoNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

      assetURL -

    - -
    -
    - -
    - - -
    -
      -
    • @abstract The URL with which the asset was initialized.
    • -
    • @discussion Setting the URL will overwrite the current asset with a newly created AVURLAsset created from the given URL, and AVAsset *asset will point to that newly created AVURLAsset. Please don’t set both assetURL and asset.
    • -
    • @return Current URL the asset was initialized or nil if no URL was given.
    • -
    - -
    - - - -
    @property (nullable, nonatomic, strong, readwrite) NSURL *assetURL
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoNode.h

    -
    - - -
    -
    -
    - -

      shouldAutoplay -

    - -
    -
    - -
    - - -
    -

    When shouldAutoplay is set to true, a video node will play when it has both loaded and entered the “visible” interfaceState. -If it leaves the visible interfaceState it will pause but will resume once it has returned.

    -
    - - - -
    @property (nonatomic, assign, readwrite) BOOL shouldAutoplay
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoNode.h

    -
    - - -
    -
    -
    - -

      delegate -

    - -
    -
    - -
    - - -
    -

    The delegate, which must conform to the ASNetworkImageNodeDelegate protocol.

    -
    - - - -
    @property (nullable, nonatomic, weak, readwrite) id<ASVideoNodeDelegate,ASNetworkImageNodeDelegate> delegate
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASVideoPlayerNode.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASVideoPlayerNode.html deleted file mode 100755 index 3d6645c850..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASVideoPlayerNode.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - ASVideoPlayerNode Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASVideoPlayerNode Class Reference

    - - -
    - - - - - - - -
    Inherits fromASDisplayNode : ASDealloc2MainObject
    Declared inASVideoPlayerNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

      shouldAutoPlay -

    - -
    -
    - -
    - - -
    -

    When shouldAutoplay is set to true, a video node will play when it has both loaded and entered the “visible” interfaceState. -If it leaves the visible interfaceState it will pause but will resume once it has returned.

    -
    - - - -
    @property (nonatomic, assign, readwrite) BOOL shouldAutoPlay
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASViewController.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASViewController.html deleted file mode 100755 index d29e08e034..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASViewController.html +++ /dev/null @@ -1,450 +0,0 @@ - - - - - - ASViewController Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASViewController Class Reference

    - - -
    - - - - - - - -
    Conforms to*
    :
    ASDisplayNode
    DisplayNodeType
    __covariant
    Declared inASViewController.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – initWithNode: -

    - -
    -
    - -
    - - -
    -

    ASViewController Designated initializer.

    -
    - - - -
    - (instancetype)initWithNode:(DisplayNodeType)node
    - - - -
    -

    Parameters

    - - - - - - - -
    node

    An ASDisplayNode which will provide the root view (self.view)

    -
    - - - -
    -

    Return Value

    -

    An ASViewController instance whose root view will be backed by the provided ASDisplayNode.

    -
    - - - - - -
    -

    Discussion

    -

    ASViewController allows you to have a completely node backed heirarchy. It automatically -handles @c ASVisibilityDepth, automatic range mode and propogating @c ASDisplayTraits to contained nodes.

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    ASViewController.h

    -
    - - -
    -
    -
    - -

      node -

    - -
    -
    - -
    - - -
    -

    node Returns the ASDisplayNode which provides the backing view to the view controller.

    -
    - - - -
    @property (nonatomic, strong, readonly) DisplayNodeType node
    - - - - - -
    -

    Return Value

    -

    node Returns the ASDisplayNode which provides the backing view to the view controller.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASViewController.h

    -
    - - -
    -
    -
    - -

      overrideDisplayTraitsWithTraitCollection -

    - -
    -
    - -
    - - -
    -

    Set this block to customize the ASDisplayTraits returned when the VC transitions to the given traitCollection.

    -
    - - - -
    @property (nonatomic, copy) ASDisplayTraitsForTraitCollectionBlock overrideDisplayTraitsWithTraitCollection
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASViewController.h

    -
    - - -
    -
    -
    - -

      overrideDisplayTraitsWithWindowSize -

    - -
    -
    - -
    - - -
    -

    Set this block to customize the ASDisplayTraits returned when the VC transitions to the given window size.

    -
    - - - -
    @property (nonatomic, copy) ASDisplayTraitsForTraitWindowSizeBlock overrideDisplayTraitsWithWindowSize
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASViewController.h

    -
    - - -
    -
    -
    - -

      interfaceState -

    - -
    -
    - -
    - - -
    -

    Passthrough property to the the .interfaceState of the node.

    -
    - - - -
    @property (nonatomic, readonly) ASInterfaceState interfaceState
    - - - - - -
    -

    Return Value

    -

    The current ASInterfaceState of the node, indicating whether it is visible and other situational properties.

    -
    - - - - - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    ASViewController.h

    -
    - - -
    -
    -
    - -

    – nodeConstrainedSize -

    - -
    -
    - -
    - - -
    -

    The constrained size used to measure the backing node.

    -
    - - - -
    - (ASSizeRange)nodeConstrainedSize
    - - - - - - - - - -
    -

    Discussion

    -

    Defaults to providing a size range that uses the view controller view’s bounds as -both the min and max definitions. Override this method to provide a custom size range to the -backing node.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASViewController.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASWrapperLayoutSpec.html b/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASWrapperLayoutSpec.html deleted file mode 100755 index 844114f859..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Classes/ASWrapperLayoutSpec.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - ASWrapperLayoutSpec Class Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASWrapperLayoutSpec Class Reference

    - - -
    - - - - - - - -
    Inherits fromASLayoutSpec : NSObject
    Declared inASLayoutSpec.h
    - - - - -
    - -

    Overview

    -

    An ASLayoutSpec subclass that can wrap one or more ASLayoutElement and calculates the layout based on the -sizes of the children. If multiple children are provided the size of the biggest child will be used to for -size of this layout spec.

    -
    - - - - - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASAbsoluteLayoutSpecSizing.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASAbsoluteLayoutSpecSizing.html deleted file mode 100755 index ae500f68a5..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASAbsoluteLayoutSpecSizing.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - ASAbsoluteLayoutSpecSizing Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASAbsoluteLayoutSpecSizing Constants Reference

    - - -
    - - - - -
    Declared inASAbsoluteLayoutSpec.h
    - - - - - - - -

    ASAbsoluteLayoutSpecSizing

    - - -
    -

    How much space the spec will take up.

    -
    - - -
    - - -

    Definition

    - typedef NS_ENUM(NSInteger, ASAbsoluteLayoutSpecSizing ) {
    - -    ASAbsoluteLayoutSpecSizingDefault,
    - -    ASAbsoluteLayoutSpecSizingSizeToFit,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASAbsoluteLayoutSpecSizingDefault
    -
    - - -

    The spec will take up the maximum size possible.

    - - - - - - -

    - Declared In ASAbsoluteLayoutSpec.h. -

    - -
    - -
    ASAbsoluteLayoutSpecSizingSizeToFit
    -
    - - -

    Computes a size for the spec that is the union of all childrens' frames.

    - - - - - - -

    - Declared In ASAbsoluteLayoutSpec.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASAbsoluteLayoutSpec.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASButtonNodeImageAlignment.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASButtonNodeImageAlignment.html deleted file mode 100755 index d03b419517..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASButtonNodeImageAlignment.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - ASButtonNodeImageAlignment Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASButtonNodeImageAlignment Constants Reference

    - - -
    - - - - -
    Declared inASButtonNode.h
    - - - - - - - -

    ASButtonNodeImageAlignment

    - - -
    -

    Image alignment defines where the image will be placed relative to the text.

    -
    - - -
    - - -

    Definition

    - typedef NS_ENUM(NSInteger, ASButtonNodeImageAlignment ) {
    - -    ASButtonNodeImageAlignmentBeginning,
    - -    ASButtonNodeImageAlignmentEnd,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASButtonNodeImageAlignmentBeginning
    -
    - - -

    Places the image before the text.

    - - - - - - -

    - Declared In ASButtonNode.h. -

    - -
    - -
    ASButtonNodeImageAlignmentEnd
    -
    - - -

    Places the image after the text.

    - - - - - - -

    - Declared In ASButtonNode.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASButtonNode.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASCellNodeVisibilityEvent.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASCellNodeVisibilityEvent.html deleted file mode 100755 index eefd793fcd..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASCellNodeVisibilityEvent.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - ASCellNodeVisibilityEvent Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCellNodeVisibilityEvent Constants Reference

    - - -
    - - - - -
    Declared inASCellNode.h
    - - - - - - - -

    ASCellNodeVisibilityEvent

    - -
    - - -

    Definition

    - typedef NS_ENUM(NSUInteger, ASCellNodeVisibilityEvent ) {
    - -    ASCellNodeVisibilityEventVisible,
    - -    ASCellNodeVisibilityEventVisibleRectChanged,
    - -    ASCellNodeVisibilityEventInvisible,
    - -    ASCellNodeVisibilityEventWillBeginDragging,
    - -    ASCellNodeVisibilityEventDidEndDragging,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASCellNodeVisibilityEventVisible
    -
    - - -

    Indicates a cell has just became visible

    - - - - - - -

    - Declared In ASCellNode.h. -

    - -
    - -
    ASCellNodeVisibilityEventVisibleRectChanged
    -
    - - -

    Its position (determined by scrollView.contentOffset) has changed while at least 1px remains visible. -It is possible that 100% of the cell is visible both before and after and only its position has changed, -or that the position change has resulted in more or less of the cell being visible. -Use CGRectIntersect between cellFrame and scrollView.bounds to get this rectangle

    - - - - - - -

    - Declared In ASCellNode.h. -

    - -
    - -
    ASCellNodeVisibilityEventInvisible
    -
    - - -

    Indicates a cell is no longer visible

    - - - - - - -

    - Declared In ASCellNode.h. -

    - -
    - -
    ASCellNodeVisibilityEventWillBeginDragging
    -
    - - -

    Indicates user has started dragging the visible cell

    - - - - - - -

    - Declared In ASCellNode.h. -

    - -
    - -
    ASCellNodeVisibilityEventDidEndDragging
    -
    - - -

    Indicates user has ended dragging the visible cell

    - - - - - - -

    - Declared In ASCellNode.h. -

    - -
    - -
    -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASCenterLayoutSpecCenteringOptions.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASCenterLayoutSpecCenteringOptions.html deleted file mode 100755 index d99b9e76ed..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASCenterLayoutSpecCenteringOptions.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - ASCenterLayoutSpecCenteringOptions Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCenterLayoutSpecCenteringOptions Constants Reference

    - - -
    - - - - -
    Declared inASCenterLayoutSpec.h
    - - - - - - - -

    ASCenterLayoutSpecCenteringOptions

    - - -
    -

    How the child is centered within the spec.

    -
    - - -
    - - -

    Definition

    - typedef NS_OPTIONS(NSUInteger, ASCenterLayoutSpecCenteringOptions ) {
    - -    ASCenterLayoutSpecCenteringNone = 0,
    - -    ASCenterLayoutSpecCenteringX = 1 < < 0,
    - -    ASCenterLayoutSpecCenteringY = 1 < < 1,
    - -    ASCenterLayoutSpecCenteringXY = ASCenterLayoutSpecCenteringX | ASCenterLayoutSpecCenteringY,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASCenterLayoutSpecCenteringNone
    -
    - - -

    The child is positioned in {0,0} relatively to the layout bounds

    - - - - - - -

    - Declared In ASCenterLayoutSpec.h. -

    - -
    - -
    ASCenterLayoutSpecCenteringX
    -
    - - -

    The child is centered along the X axis

    - - - - - - -

    - Declared In ASCenterLayoutSpec.h. -

    - -
    - -
    ASCenterLayoutSpecCenteringY
    -
    - - -

    The child is centered along the Y axis

    - - - - - - -

    - Declared In ASCenterLayoutSpec.h. -

    - -
    - -
    ASCenterLayoutSpecCenteringXY
    -
    - - -

    Convenience option to center both along the X and Y axis

    - - - - - - -

    - Declared In ASCenterLayoutSpec.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASCenterLayoutSpec.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASCenterLayoutSpecSizingOptions.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASCenterLayoutSpecSizingOptions.html deleted file mode 100755 index f7dea9c8bc..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASCenterLayoutSpecSizingOptions.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - ASCenterLayoutSpecSizingOptions Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCenterLayoutSpecSizingOptions Constants Reference

    - - -
    - - - - -
    Declared inASCenterLayoutSpec.h
    - - - - - - - -

    ASCenterLayoutSpecSizingOptions

    - - -
    -

    How much space the spec will take up.

    -
    - - -
    - - -

    Definition

    - typedef NS_OPTIONS(NSUInteger, ASCenterLayoutSpecSizingOptions ) {
    - -    ASCenterLayoutSpecSizingOptionDefault = ASRelativeLayoutSpecSizingOptionDefault,
    - -    ASCenterLayoutSpecSizingOptionMinimumX = ASRelativeLayoutSpecSizingOptionMinimumWidth,
    - -    ASCenterLayoutSpecSizingOptionMinimumY = ASRelativeLayoutSpecSizingOptionMinimumHeight,
    - -    ASCenterLayoutSpecSizingOptionMinimumXY = ASRelativeLayoutSpecSizingOptionMinimumSize,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASCenterLayoutSpecSizingOptionDefault
    -
    - - -

    The spec will take up the maximum size possible

    - - - - - - -

    - Declared In ASCenterLayoutSpec.h. -

    - -
    - -
    ASCenterLayoutSpecSizingOptionMinimumX
    -
    - - -

    The spec will take up the minimum size possible along the X axis

    - - - - - - -

    - Declared In ASCenterLayoutSpec.h. -

    - -
    - -
    ASCenterLayoutSpecSizingOptionMinimumY
    -
    - - -

    The spec will take up the minimum size possible along the Y axis

    - - - - - - -

    - Declared In ASCenterLayoutSpec.h. -

    - -
    - -
    ASCenterLayoutSpecSizingOptionMinimumXY
    -
    - - -

    Convenience option to take up the minimum size along both the X and Y axis

    - - - - - - -

    - Declared In ASCenterLayoutSpec.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASCenterLayoutSpec.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASControlNodeEvent.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASControlNodeEvent.html deleted file mode 100755 index fba63ceab7..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASControlNodeEvent.html +++ /dev/null @@ -1,308 +0,0 @@ - - - - - - ASControlNodeEvent Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASControlNodeEvent Constants Reference

    - - -
    - - - - -
    Declared inASControlNode.h
    - - - - - - - -

    ASControlNodeEvent

    - - -
    -

    These events are identical to their UIControl counterparts.

    -
    - - -
    - - -

    Definition

    - typedef NS_OPTIONS(NSUInteger, ASControlNodeEvent ) {
    - -    ASControlNodeEventTouchDown = 1 < < 0,
    - -    ASControlNodeEventTouchDownRepeat = 1 < < 1,
    - -    ASControlNodeEventTouchDragInside = 1 < < 2,
    - -    ASControlNodeEventTouchDragOutside = 1 < < 3,
    - -    ASControlNodeEventTouchUpInside = 1 < < 4,
    - -    ASControlNodeEventTouchUpOutside = 1 < < 5,
    - -    ASControlNodeEventTouchCancel = 1 < < 6,
    - -    ASControlNodeEventPrimaryActionTriggered = 1 < < 13,
    - -    ASControlNodeEventAllEvents = 0 xFFFFFFFF,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASControlNodeEventTouchDown
    -
    - - -

    A touch-down event in the control node.

    - - - - - - -

    - Declared In ASControlNode.h. -

    - -
    - -
    ASControlNodeEventTouchDownRepeat
    -
    - - -

    A repeated touch-down event in the control node; for this event the value of the UITouch tapCount method is greater than one.

    - - - - - - -

    - Declared In ASControlNode.h. -

    - -
    - -
    ASControlNodeEventTouchDragInside
    -
    - - -

    An event where a finger is dragged inside the bounds of the control node.

    - - - - - - -

    - Declared In ASControlNode.h. -

    - -
    - -
    ASControlNodeEventTouchDragOutside
    -
    - - -

    An event where a finger is dragged just outside the bounds of the control.

    - - - - - - -

    - Declared In ASControlNode.h. -

    - -
    - -
    ASControlNodeEventTouchUpInside
    -
    - - -

    A touch-up event in the control node where the finger is inside the bounds of the node.

    - - - - - - -

    - Declared In ASControlNode.h. -

    - -
    - -
    ASControlNodeEventTouchUpOutside
    -
    - - -

    A touch-up event in the control node where the finger is outside the bounds of the node.

    - - - - - - -

    - Declared In ASControlNode.h. -

    - -
    - -
    ASControlNodeEventTouchCancel
    -
    - - -

    A system event canceling the current touches for the control node.

    - - - - - - -

    - Declared In ASControlNode.h. -

    - -
    - -
    ASControlNodeEventPrimaryActionTriggered
    -
    - - -

    A system event when the Play/Pause button on the Apple TV remote is pressed.

    - - - - - - -

    - Declared In ASControlNode.h. -

    - -
    - -
    ASControlNodeEventAllEvents
    -
    - - -

    All events, including system events.

    - - - - - - -

    - Declared In ASControlNode.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASControlNode.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASControlState.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASControlState.html deleted file mode 100755 index 64744c12dc..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASControlState.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - ASControlState Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASControlState Constants Reference

    - - -
    - - - - -
    Declared inASControlNode.h
    - - - - - - - -

    ASControlState

    - -
    - - -

    Definition

    - typedef NS_OPTIONS(NSUInteger, ASControlState ) {
    - -    ASControlStateNormal = 0,
    - -    ASControlStateHighlighted = 1 < < 0,
    - -    ASControlStateDisabled = 1 < < 1,
    - -    ASControlStateSelected = 1 < < 2,
    - -    ASControlStateReserved = 0 xFF000000,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASControlStateNormal
    -
    - - -

    - Declared In ASControlNode.h. -

    - -
    - -
    ASControlStateHighlighted
    -
    - - -

    - Declared In ASControlNode.h. -

    - -
    - -
    ASControlStateDisabled
    -
    - - -

    - Declared In ASControlNode.h. -

    - -
    - -
    ASControlStateSelected
    -
    - - -

    - Declared In ASControlNode.h. -

    - -
    - -
    ASControlStateReserved
    -
    - - -

    - Declared In ASControlNode.h. -

    - -
    - -
    -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASDimensionUnit.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASDimensionUnit.html deleted file mode 100755 index aabf7a9803..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASDimensionUnit.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - ASDimensionUnit Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASDimensionUnit Constants Reference

    - - -
    - - - - -
    Declared inASDimension.h
    - - - - - - - -

    ASDimensionUnit

    - - -
    -

    A dimension relative to constraints to be provided in the future. -A ASDimension can be one of three types:

    - -

    “Auto” - This indicated “I have no opinion” and may be resolved in whatever way makes most sense given the circumstances.

    - -

    “Points” - Just a number. It will always resolve to exactly this amount.

    - -

    “Percent” - Multiplied to a provided parent amount to resolve a final amount.

    -
    - - -
    - - -

    Definition

    - typedef NS_ENUM(NSInteger, ASDimensionUnit ) {
    - -    ASDimensionUnitAuto,
    - -    ASDimensionUnitPoints,
    - -    ASDimensionUnitFraction,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASDimensionUnitAuto
    -
    - - -

    This indicates “I have no opinion” and may be resolved in whatever way makes most sense given the circumstances.

    - - - - - - -

    - Declared In ASDimension.h. -

    - -
    - -
    ASDimensionUnitPoints
    -
    - - -

    Just a number. It will always resolve to exactly this amount. This is the default type.

    - - - - - - -

    - Declared In ASDimension.h. -

    - -
    - -
    ASDimensionUnitFraction
    -
    - - -

    Multiplied to a provided parent amount to resolve a final amount.

    - - - - - - -

    - Declared In ASDimension.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASDimension.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASDisplayNodePerformanceMeasurementOptions.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASDisplayNodePerformanceMeasurementOptions.html deleted file mode 100755 index ea8cb0d7ec..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASDisplayNodePerformanceMeasurementOptions.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - ASDisplayNodePerformanceMeasurementOptions Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASDisplayNodePerformanceMeasurementOptions Constants Reference

    - - -
    - - - - -
    Declared inASDisplayNode+Beta.h
    - - - - - - - -

    ASDisplayNodePerformanceMeasurementOptions

    - - -
    -

    Bitmask to indicate what performance measurements the cell should record.

    -
    - - -
    - - -

    Definition

    - typedef NS_OPTIONS(NSUInteger, ASDisplayNodePerformanceMeasurementOptions ) {
    - -    ASDisplayNodePerformanceMeasurementOptionLayoutSpec = 1 < < 0,
    - -    ASDisplayNodePerformanceMeasurementOptionLayoutComputation = 1 < < 1,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASDisplayNodePerformanceMeasurementOptionLayoutSpec
    -
    - - -

    Bitmask to indicate what performance measurements the cell should record.

    - - - - - - -

    - Declared In ASDisplayNode+Beta.h. -

    - -
    - -
    ASDisplayNodePerformanceMeasurementOptionLayoutComputation
    -
    - - -

    Bitmask to indicate what performance measurements the cell should record.

    - - - - - - -

    - Declared In ASDisplayNode+Beta.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode+Beta.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASHorizontalAlignment.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASHorizontalAlignment.html deleted file mode 100755 index cfc38bf091..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASHorizontalAlignment.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - ASHorizontalAlignment Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASHorizontalAlignment Constants Reference

    - - -
    - - - - -
    Declared inASStackLayoutDefines.h
    - - - - - - - -

    ASHorizontalAlignment

    - - -
    -

    Orientation of children along horizontal axis

    -
    - - -
    - - -

    Definition

    - typedef NS_ENUM(NSUInteger, ASHorizontalAlignment ) {
    - -    ASHorizontalAlignmentNone,
    - -    ASHorizontalAlignmentLeft,
    - -    ASHorizontalAlignmentMiddle,
    - -    ASHorizontalAlignmentRight,
    - -    ASAlignmentLeft = ASHorizontalAlignmentLeft,
    - -    ASAlignmentMiddle = ASHorizontalAlignmentMiddle,
    - -    ASAlignmentRight = ASHorizontalAlignmentRight,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASHorizontalAlignmentNone
    -
    - - -

    No alignment specified. Default value

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASHorizontalAlignmentLeft
    -
    - - -

    Left aligned

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASHorizontalAlignmentMiddle
    -
    - - -

    Center aligned

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASHorizontalAlignmentRight
    -
    - - -

    Right aligned

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASAlignmentLeft
    -
    - - -

    Use ASHorizontalAlignmentLeft instead (Deprecated: Use ASHorizontalAlignmentLeft instead)

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASAlignmentMiddle
    -
    - - -

    Use ASHorizontalAlignmentMiddle instead (Deprecated: Use ASHorizontalAlignmentMiddle instead)

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASAlignmentRight
    -
    - - -

    Use ASHorizontalAlignmentRight instead (Deprecated: Use ASHorizontalAlignmentRight instead)

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutDefines.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASInterfaceState.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASInterfaceState.html deleted file mode 100755 index ab0706f83a..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASInterfaceState.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - ASInterfaceState Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASInterfaceState Constants Reference

    - - -
    - - - - -
    Declared inASDisplayNode.h
    - - - - - - - -

    ASInterfaceState

    - - -
    -

    Interface state is available on ASDisplayNode and ASViewController, and -allows checking whether a node is in an interface situation where it is prudent to trigger certain -actions: measurement, data loading, display, and visibility (the latter for animations or other onscreen-only effects).

    -
    - - -
    - - -

    Definition

    - typedef NS_OPTIONS(NSUInteger, ASInterfaceState ) {
    - -    ASInterfaceStateNone = 0,
    - -    ASInterfaceStateMeasureLayout = 1 < < 0,
    - -    ASInterfaceStatePreload = 1 < < 1,
    - -    ASInterfaceStateDisplay = 1 < < 2,
    - -    ASInterfaceStateVisible = 1 < < 3,
    - -    ASInterfaceStateInHierarchy = ASInterfaceStateMeasureLayout | ASInterfaceStatePreload | ASInterfaceStateDisplay | ASInterfaceStateVisible,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASInterfaceStateNone
    -
    - - -

    The element is not predicted to be onscreen soon and preloading should not be performed

    - - - - - - -

    - Declared In ASDisplayNode.h. -

    - -
    - -
    ASInterfaceStateMeasureLayout
    -
    - - -

    The element may be added to a view soon that could become visible. Measure the layout, including size calculation.

    - - - - - - -

    - Declared In ASDisplayNode.h. -

    - -
    - -
    ASInterfaceStatePreload
    -
    - - -

    The element is likely enough to come onscreen that disk and/or network data required for display should be fetched.

    - - - - - - -

    - Declared In ASDisplayNode.h. -

    - -
    - -
    ASInterfaceStateDisplay
    -
    - - -

    The element is very likely to become visible, and concurrent rendering should be executed for any -setNeedsDisplay.

    - - - - - - -

    - Declared In ASDisplayNode.h. -

    - -
    - -
    ASInterfaceStateVisible
    -
    - - -

    The element is physically onscreen by at least 1 pixel. - In practice, all other bit fields should also be set when this flag is set.

    - - - - - - -

    - Declared In ASDisplayNode.h. -

    - -
    - -
    ASInterfaceStateInHierarchy
    -
    - - -

    The node is not contained in a cell but it is in a window.

    - - - - - - -

    - Declared In ASDisplayNode.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASDisplayNode.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASLayoutElementType.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASLayoutElementType.html deleted file mode 100755 index 0cf6cc9244..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASLayoutElementType.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - ASLayoutElementType Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASLayoutElementType Constants Reference

    - - -
    - - - - -
    Declared inASLayoutElement.h
    - - - - - - - -

    ASLayoutElementType

    - - -
    -

    Type of ASLayoutElement

    -
    - - -
    - - -

    Definition

    - typedef NS_ENUM(NSUInteger, ASLayoutElementType ) {
    - -    ASLayoutElementTypeLayoutSpec,
    - -    ASLayoutElementTypeDisplayNode,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASLayoutElementTypeLayoutSpec
    -
    - - -

    Type of ASLayoutElement

    - - - - - - -

    - Declared In ASLayoutElement.h. -

    - -
    - -
    ASLayoutElementTypeDisplayNode
    -
    - - -

    Type of ASLayoutElement

    - - - - - - -

    - Declared In ASLayoutElement.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASMapNodeShowAnnotationsOptions.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASMapNodeShowAnnotationsOptions.html deleted file mode 100755 index 0f7414e76e..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASMapNodeShowAnnotationsOptions.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - ASMapNodeShowAnnotationsOptions Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASMapNodeShowAnnotationsOptions Constants Reference

    - - -
    - - - - -
    Declared inASMapNode.h
    - - - - - - - -

    ASMapNodeShowAnnotationsOptions

    - -
    - - -

    Definition

    - typedef NS_OPTIONS(NSUInteger, ASMapNodeShowAnnotationsOptions ) {
    - -    ASMapNodeShowAnnotationsOptionsIgnored = 0,
    - -    ASMapNodeShowAnnotationsOptionsZoomed = 1 < < 0,
    - -    ASMapNodeShowAnnotationsOptionsAnimated = 1 < < 1,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASMapNodeShowAnnotationsOptionsIgnored
    -
    - - -

    The annotations' positions are ignored, use the region or options specified instead.

    - - - - - - -

    - Declared In ASMapNode.h. -

    - -
    - -
    ASMapNodeShowAnnotationsOptionsZoomed
    -
    - - -

    The annotations' positions are used to calculate the region to show in the map, equivalent to showAnnotations:animated.

    - - - - - - -

    - Declared In ASMapNode.h. -

    - -
    - -
    ASMapNodeShowAnnotationsOptionsAnimated
    -
    - - -

    This will only have an effect if combined with the Zoomed state with liveMap turned on.

    - - - - - - -

    - Declared In ASMapNode.h. -

    - -
    - -
    -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASMultiplexImageNodeErrorCode.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASMultiplexImageNodeErrorCode.html deleted file mode 100755 index 3843f6a12f..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASMultiplexImageNodeErrorCode.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - ASMultiplexImageNodeErrorCode Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASMultiplexImageNodeErrorCode Constants Reference

    - - -
    - - - - -
    Declared inASMultiplexImageNode.h
    - - - - - - - -

    ASMultiplexImageNodeErrorCode

    - - -
    -

    ASMultiplexImageNode error codes.

    -
    - - - - -
    -

    Constants

    -
    - -
    ASMultiplexImageNodeErrorCodeNoSourceForImage
    -
    - - -

    Indicates that the data source didn’t provide a source for an image identifier.

    - - - - - - -

    - Declared In ASMultiplexImageNode.h. -

    - -
    - -
    ASMultiplexImageNodeErrorCodeBestImageIdentifierChanged
    -
    - - -

    Indicates that the best image identifier changed before a download for a worse identifier began.

    - - - - - - -

    - Declared In ASMultiplexImageNode.h. -

    - -
    - -
    ASMultiplexImageNodeErrorCodePhotosImageManagerFailedWithoutError
    -
    - - -

    Indicates that the Photos framework returned no image and no error. -This may happen if the image is in iCloud and the user did not specify allowsNetworkAccess -in their image request.

    - - - - - - -

    - Declared In ASMultiplexImageNode.h. -

    - -
    - -
    ASMultiplexImageNodeErrorCodePHAssetIsUnavailable
    -
    - - -

    Indicates that the image node could not retrieve the PHAsset for a given asset identifier. -This typically means that the user has not given Photos framework permissions yet or the asset -has been removed from the device.

    - - - - - - -

    - Declared In ASMultiplexImageNode.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASRelativeDimensionType.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASRelativeDimensionType.html deleted file mode 100755 index f700916c7f..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASRelativeDimensionType.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - ASRelativeDimensionType Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASRelativeDimensionType Constants Reference

    - - -
    - - - - -
    Declared inASDimension.h
    - - - - - - - -

    ASRelativeDimensionType

    - - -
    -

    A dimension relative to constraints to be provided in the future. -A ASDimension can be one of three types:

    - -

    “Auto” - This indicated “I have no opinion” and may be resolved in whatever way makes most sense given the circumstances.

    - -

    “Points” - Just a number. It will always resolve to exactly this amount.

    - -

    “Percent” - Multiplied to a provided parent amount to resolve a final amount.

    -
    - - -
    - - -

    Definition

    - typedef NS_ENUM(NSInteger, ASRelativeDimensionType ) {
    - -    ASRelativeDimensionTypeAuto,
    - -    ASRelativeDimensionTypePoints,
    - -    ASRelativeDimensionTypeFraction,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASRelativeDimensionTypeAuto
    -
    - - -

    This indicates “I have no opinion” and may be resolved in whatever way makes most sense given the circumstances.

    - - - - - - -

    - Declared In ASDimension.h. -

    - -
    - -
    ASRelativeDimensionTypePoints
    -
    - - -

    Just a number. It will always resolve to exactly this amount. This is the default type.

    - - - - - - -

    - Declared In ASDimension.h. -

    - -
    - -
    ASRelativeDimensionTypeFraction
    -
    - - -

    Multiplied to a provided parent amount to resolve a final amount.

    - - - - - - -

    - Declared In ASDimension.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASDimension.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASRelativeLayoutSpecPosition.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASRelativeLayoutSpecPosition.html deleted file mode 100755 index 3f78b744af..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASRelativeLayoutSpecPosition.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - ASRelativeLayoutSpecPosition Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASRelativeLayoutSpecPosition Constants Reference

    - - -
    - - - - -
    Declared inASRelativeLayoutSpec.h
    - - - - - - - -

    ASRelativeLayoutSpecPosition

    - - -
    -

    How the child is positioned within the spec.

    -
    - - -
    - - -

    Definition

    - typedef NS_ENUM(NSUInteger, ASRelativeLayoutSpecPosition ) {
    - -    ASRelativeLayoutSpecPositionNone = 0,
    - -    ASRelativeLayoutSpecPositionStart = 1,
    - -    ASRelativeLayoutSpecPositionCenter = 2,
    - -    ASRelativeLayoutSpecPositionEnd = 3,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASRelativeLayoutSpecPositionNone
    -
    - - -

    The child is positioned at point 0

    - - - - - - -

    - Declared In ASRelativeLayoutSpec.h. -

    - -
    - -
    ASRelativeLayoutSpecPositionStart
    -
    - - -

    The child is positioned at point 0 relatively to the layout axis (ie left / top most)

    - - - - - - -

    - Declared In ASRelativeLayoutSpec.h. -

    - -
    - -
    ASRelativeLayoutSpecPositionCenter
    -
    - - -

    The child is centered along the specified axis

    - - - - - - -

    - Declared In ASRelativeLayoutSpec.h. -

    - -
    - -
    ASRelativeLayoutSpecPositionEnd
    -
    - - -

    The child is positioned at the maximum point of the layout axis (ie right / bottom most)

    - - - - - - -

    - Declared In ASRelativeLayoutSpec.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASRelativeLayoutSpec.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASRelativeLayoutSpecSizingOption.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASRelativeLayoutSpecSizingOption.html deleted file mode 100755 index 75d49d9737..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASRelativeLayoutSpecSizingOption.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - ASRelativeLayoutSpecSizingOption Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASRelativeLayoutSpecSizingOption Constants Reference

    - - -
    - - - - -
    Declared inASRelativeLayoutSpec.h
    - - - - - - - -

    ASRelativeLayoutSpecSizingOption

    - - -
    -

    How much space the spec will take up.

    -
    - - -
    - - -

    Definition

    - typedef NS_OPTIONS(NSUInteger, ASRelativeLayoutSpecSizingOption ) {
    - -    ASRelativeLayoutSpecSizingOptionDefault,
    - -    ASRelativeLayoutSpecSizingOptionMinimumWidth = 1 < < 0,
    - -    ASRelativeLayoutSpecSizingOptionMinimumHeight = 1 < < 1,
    - -    ASRelativeLayoutSpecSizingOptionMinimumSize = ASRelativeLayoutSpecSizingOptionMinimumWidth | ASRelativeLayoutSpecSizingOptionMinimumHeight,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASRelativeLayoutSpecSizingOptionDefault
    -
    - - -

    The spec will take up the maximum size possible

    - - - - - - -

    - Declared In ASRelativeLayoutSpec.h. -

    - -
    - -
    ASRelativeLayoutSpecSizingOptionMinimumWidth
    -
    - - -

    The spec will take up the minimum size possible along the X axis

    - - - - - - -

    - Declared In ASRelativeLayoutSpec.h. -

    - -
    - -
    ASRelativeLayoutSpecSizingOptionMinimumHeight
    -
    - - -

    The spec will take up the minimum size possible along the Y axis

    - - - - - - -

    - Declared In ASRelativeLayoutSpec.h. -

    - -
    - -
    ASRelativeLayoutSpecSizingOptionMinimumSize
    -
    - - -

    Convenience option to take up the minimum size along both the X and Y axis

    - - - - - - -

    - Declared In ASRelativeLayoutSpec.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASRelativeLayoutSpec.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASStackLayoutAlignItems.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASStackLayoutAlignItems.html deleted file mode 100755 index 7a809bbe35..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASStackLayoutAlignItems.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - ASStackLayoutAlignItems Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASStackLayoutAlignItems Constants Reference

    - - -
    - - - - -
    Declared inASStackLayoutDefines.h
    - - - - - - - -

    ASStackLayoutAlignItems

    - - -
    -

    Orientation of children along cross axis

    -
    - - -
    - - -

    Definition

    - typedef NS_ENUM(NSUInteger, ASStackLayoutAlignItems ) {
    - -    ASStackLayoutAlignItemsStart,
    - -    ASStackLayoutAlignItemsEnd,
    - -    ASStackLayoutAlignItemsCenter,
    - -    ASStackLayoutAlignItemsStretch,
    - -    ASStackLayoutAlignItemsBaselineFirst,
    - -    ASStackLayoutAlignItemsBaselineLast,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASStackLayoutAlignItemsStart
    -
    - - -

    Align children to start of cross axis

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASStackLayoutAlignItemsEnd
    -
    - - -

    Align children with end of cross axis

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASStackLayoutAlignItemsCenter
    -
    - - -

    Center children on cross axis

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASStackLayoutAlignItemsStretch
    -
    - - -

    Expand children to fill cross axis

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASStackLayoutAlignItemsBaselineFirst
    -
    - - -

    Children align to their first baseline. Only available for horizontal stack spec

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASStackLayoutAlignItemsBaselineLast
    -
    - - -

    Children align to their last baseline. Only available for horizontal stack spec

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutDefines.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASStackLayoutAlignSelf.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASStackLayoutAlignSelf.html deleted file mode 100755 index 45606fd4db..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASStackLayoutAlignSelf.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - ASStackLayoutAlignSelf Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASStackLayoutAlignSelf Constants Reference

    - - -
    - - - - - - - -
    Declared inASStackLayoutDefines.h
    ReferencesASStackLayoutAlignItems
    - - - - - - - -

    ASStackLayoutAlignSelf

    - - -
    -

    Each child may override their parent stack’s cross axis alignment.

    -
    - - -
    - - -

    Definition

    - typedef NS_ENUM(NSUInteger, ASStackLayoutAlignSelf ) {
    - -    ASStackLayoutAlignSelfAuto,
    - -    ASStackLayoutAlignSelfStart,
    - -    ASStackLayoutAlignSelfEnd,
    - -    ASStackLayoutAlignSelfCenter,
    - -    ASStackLayoutAlignSelfStretch,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASStackLayoutAlignSelfAuto
    -
    - - -

    Inherit alignment value from containing stack.

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASStackLayoutAlignSelfStart
    -
    - - -

    Align to start of cross axis

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASStackLayoutAlignSelfEnd
    -
    - - -

    Align with end of cross axis

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASStackLayoutAlignSelfCenter
    -
    - - -

    Center on cross axis

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASStackLayoutAlignSelfStretch
    -
    - - -

    Expand to fill cross axis

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    -
    - - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    ASStackLayoutDefines.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASStackLayoutDirection.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASStackLayoutDirection.html deleted file mode 100755 index ac22df4f8b..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASStackLayoutDirection.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - ASStackLayoutDirection Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASStackLayoutDirection Constants Reference

    - - -
    - - - - -
    Declared inASStackLayoutDefines.h
    - - - - - - - -

    ASStackLayoutDirection

    - - -
    -

    The direction children are stacked in

    -
    - - -
    - - -

    Definition

    - typedef NS_ENUM(NSUInteger, ASStackLayoutDirection ) {
    - -    ASStackLayoutDirectionVertical,
    - -    ASStackLayoutDirectionHorizontal,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASStackLayoutDirectionVertical
    -
    - - -

    Children are stacked vertically

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASStackLayoutDirectionHorizontal
    -
    - - -

    Children are stacked horizontally

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutDefines.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASStackLayoutJustifyContent.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASStackLayoutJustifyContent.html deleted file mode 100755 index 946d43e0dd..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASStackLayoutJustifyContent.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - ASStackLayoutJustifyContent Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASStackLayoutJustifyContent Constants Reference

    - - -
    - - - - -
    Declared inASStackLayoutDefines.h
    - - - - - - - -

    ASStackLayoutJustifyContent

    - - -
    -

    If no children are flexible, how should this spec justify its children in the available space?

    -
    - - -
    - - -

    Definition

    - typedef NS_ENUM(NSUInteger, ASStackLayoutJustifyContent ) {
    - -    ASStackLayoutJustifyContentStart,
    - -    ASStackLayoutJustifyContentCenter,
    - -    ASStackLayoutJustifyContentEnd,
    - -    ASStackLayoutJustifyContentSpaceBetween,
    - -    ASStackLayoutJustifyContentSpaceAround,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASStackLayoutJustifyContentStart
    -
    - - -

    On overflow, children overflow out of this spec’s bounds on the right/bottom side. - On underflow, children are left/top-aligned within this spec’s bounds.

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASStackLayoutJustifyContentCenter
    -
    - - -

    On overflow, children are centered and overflow on both sides. - On underflow, children are centered within this spec’s bounds in the stacking direction.

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASStackLayoutJustifyContentEnd
    -
    - - -

    On overflow, children overflow out of this spec’s bounds on the left/top side. - On underflow, children are right/bottom-aligned within this spec’s bounds.

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASStackLayoutJustifyContentSpaceBetween
    -
    - - -

    On overflow or if the stack has only 1 child, this value is identical to ASStackLayoutJustifyContentStart. - Otherwise, the starting edge of the first child is at the starting edge of the stack, - the ending edge of the last child is at the ending edge of the stack, and the remaining children - are distributed so that the spacing between any two adjacent ones is the same. - If there is a remaining space after spacing division, it is combined with the last spacing (i.e the one between the last 2 children).

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASStackLayoutJustifyContentSpaceAround
    -
    - - -

    On overflow or if the stack has only 1 child, this value is identical to ASStackLayoutJustifyContentCenter. - Otherwise, children are distributed such that the spacing between any two adjacent ones is the same, - and the spacing between the first/last child and the stack edges is half the size of the spacing between children. - If there is a remaining space after spacing division, it is combined with the last spacing (i.e the one between the last child and the stack ending edge).

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutDefines.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASTextNodeHighlightStyle.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASTextNodeHighlightStyle.html deleted file mode 100755 index e47cd046cf..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASTextNodeHighlightStyle.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - ASTextNodeHighlightStyle Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASTextNodeHighlightStyle Constants Reference

    - - -
    - - - - -
    Declared inASTextNode.h
    - - - - - - - -

    ASTextNodeHighlightStyle

    - - -
    -

    Highlight styles.

    -
    - - -
    - - -

    Definition

    - typedef NS_ENUM(NSUInteger, ASTextNodeHighlightStyle ) {
    - -    ASTextNodeHighlightStyleLight,
    - -    ASTextNodeHighlightStyleDark,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASTextNodeHighlightStyleLight
    -
    - - -

    Highlight style for text on a light background.

    - - - - - - -

    - Declared In ASTextNode.h. -

    - -
    - -
    ASTextNodeHighlightStyleDark
    -
    - - -

    Highlight style for text on a dark background.

    - - - - - - -

    - Declared In ASTextNode.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASVerticalAlignment.html b/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASVerticalAlignment.html deleted file mode 100755 index 640a47dc9b..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Constants/ASVerticalAlignment.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - ASVerticalAlignment Constants Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASVerticalAlignment Constants Reference

    - - -
    - - - - -
    Declared inASStackLayoutDefines.h
    - - - - - - - -

    ASVerticalAlignment

    - - -
    -

    Orientation of children along vertical axis

    -
    - - -
    - - -

    Definition

    - typedef NS_ENUM(NSUInteger, ASVerticalAlignment ) {
    - -    ASVerticalAlignmentNone,
    - -    ASVerticalAlignmentTop,
    - -    ASVerticalAlignmentCenter,
    - -    ASVerticalAlignmentBottom,
    - -    ASAlignmentTop = ASVerticalAlignmentTop,
    - -    ASAlignmentCenter = ASVerticalAlignmentCenter,
    - -    ASAlignmentBottom = ASVerticalAlignmentBottom,
    - - };
    - -
    - -
    -

    Constants

    -
    - -
    ASVerticalAlignmentNone
    -
    - - -

    No alignment specified. Default value

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASVerticalAlignmentTop
    -
    - - -

    Top aligned

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASVerticalAlignmentCenter
    -
    - - -

    Center aligned

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASVerticalAlignmentBottom
    -
    - - -

    Bottom aligned

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASAlignmentTop
    -
    - - -

    Use ASVerticalAlignmentTop instead (Deprecated: Use ASVerticalAlignmentTop instead)

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASAlignmentCenter
    -
    - - -

    Use ASVerticalAlignmentCenter instead (Deprecated: Use ASVerticalAlignmentCenter instead)

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    ASAlignmentBottom
    -
    - - -

    Use ASVerticalAlignmentBottom instead (Deprecated: Use ASVerticalAlignmentBottom instead)

    - - - - - - -

    - Declared In ASStackLayoutDefines.h. -

    - -
    - -
    -
    - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutDefines.h

    -
    - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASAbsoluteLayoutElement.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASAbsoluteLayoutElement.html deleted file mode 100755 index ecaff9596c..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASAbsoluteLayoutElement.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - ASAbsoluteLayoutElement Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASAbsoluteLayoutElement Protocol Reference

    - - -
    - - - - -
    Declared inASAbsoluteLayoutElement.h
    - - - - -
    - -

    Overview

    -

    Layout options that can be defined for an ASLayoutElement being added to a ASAbsoluteLayoutSpec.

    -
    - - - - - -
    - - - - - - -
    -
    - -

      layoutPosition -required method

    - -
    -
    - -
    - - -
    -

    The position of this object within its parent spec.

    -
    - - - -
    @property (nonatomic, assign) CGPoint layoutPosition
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASAbsoluteLayoutElement.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCellNodeInteractionDelegate.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCellNodeInteractionDelegate.html deleted file mode 100755 index 70d2a92642..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCellNodeInteractionDelegate.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - ASCellNodeInteractionDelegate Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCellNodeInteractionDelegate Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASCellNode+Internal.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – nodeDidRelayout:sizeChanged: -required method

    - -
    -
    - -
    - - -
    -

    Notifies the delegate that the specified cell node has done a relayout. -The notification is done on main thread.

    -
    - - - -
    - (void)nodeDidRelayout:(ASCellNode *)node sizeChanged:(BOOL)sizeChanged
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    node

    A node informing the delegate about the relayout.

    sizeChanged

    YES if the node’s calculatedSize changed during the relayout, NO otherwise.

    -
    - - - - - - - -
    -

    Discussion

    -

    This will not be called due to measurement passes before the node has loaded -its view, even if triggered by -setNeedsLayout, as it is assumed these are -not relevant to UIKit. Indeed, these calls can cause consistency issues.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCellNode+Internal.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCollectionDataSource.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCollectionDataSource.html deleted file mode 100755 index 1e4b1ec080..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCollectionDataSource.html +++ /dev/null @@ -1,807 +0,0 @@ - - - - - - ASCollectionDataSource Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCollectionDataSource Protocol Reference

    - - -
    - - - - - - - -
    Conforms toASCommonCollectionDataSource
    Declared inASCollectionNode.h
    - - - - -
    - -

    Overview

    -

    This is a node-based UICollectionViewDataSource.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – collectionNode:numberOfItemsInSection: -

    - -
    -
    - -
    - - -
    -

    Asks the data source for the number of items in the given section of the collection node.

    -
    - - - -
    - (NSInteger)collectionNode:(ASCollectionNode *)collectionNode numberOfItemsInSection:(NSInteger)section
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – numberOfSectionsInCollectionNode: -

    - -
    -
    - -
    - - -
    -

    Asks the data source for the number of sections in the collection node.

    -
    - - - -
    - (NSInteger)numberOfSectionsInCollectionNode:(ASCollectionNode *)collectionNode
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – collectionNode:nodeBlockForItemAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Similar to -collectionNode:nodeForItemAtIndexPath: -This method takes precedence over collectionNode:nodeForItemAtIndexPath: if implemented.

    -
    - - - -
    - (ASCellNodeBlock)collectionNode:(ASCollectionNode *)collectionNode nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    collectionNode

    The sender.

    indexPath

    The index path of the item.

    -
    - - - -
    -

    Return Value

    -

    a block that creates the node for display for this item. -Must be thread-safe (can be called on the main thread or a background -queue) and should not implement reuse (it will be called once per row).

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – collectionNode:nodeForItemAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Similar to -collectionView:cellForItemAtIndexPath:.

    -
    - - - -
    - (ASCellNode *)collectionNode:(ASCollectionNode *)collectionNode nodeForItemAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    indexPath

    The index path of the item.

    collectionView

    The sender.

    -
    - - - -
    -

    Return Value

    -

    A node to display for the given item. This will be called on the main thread and should -not implement reuse (it will be called once per item). Unlike UICollectionView’s version, -this method is not called when the item is about to display.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – collectionNode:nodeForSupplementaryElementOfKind:atIndexPath: -

    - -
    -
    - -
    - - -
    -

    Asks the data source to provide a node to display for the given supplementary element in the collection view.

    -
    - - - -
    - (ASCellNode *)collectionNode:(ASCollectionNode *)collectionNode nodeForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    collectionNode

    The sender.

    kind

    The kind of supplementary element.

    indexPath

    The index path of the supplementary element.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – collectionNode:contextForSection: -

    - -
    -
    - -
    - - -
    -

    Asks the data source to provide a context object for the given section. This object -can later be retrieved by calling @c contextForSection: and is useful when implementing -custom @c UICollectionViewLayout subclasses. The context object is ret

    -
    - - - -
    - (nullable id<ASSectionContext>)collectionNode:(ASCollectionNode *)collectionNode contextForSection:(NSInteger)section
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    collectionNode

    The sender.

    section

    The index of the section to provide context for.

    -
    - - - -
    -

    Return Value

    -

    A context object to assign to the given section, or @c nil.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – collectionView:nodeForItemAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Similar to -collectionView:cellForItemAtIndexPath:.

    -
    - - - -
    - (ASCellNode *)collectionView:(ASCollectionView *)collectionView nodeForItemAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    collectionView

    The sender.

    indexPath

    The index path of the requested node.

    -
    - - - -
    -

    Return Value

    -

    a node for display at this indexpath. This will be called on the main thread and should -not implement reuse (it will be called once per row). Unlike UICollectionView’s version, -this method is not called when the row is about to display.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – collectionView:nodeBlockForItemAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Similar to -collectionView:nodeForItemAtIndexPath: -This method takes precedence over collectionView:nodeForItemAtIndexPath: if implemented.

    -
    - - - -
    - (ASCellNodeBlock)collectionView:(ASCollectionView *)collectionView nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    collectionView

    The sender.

    indexPath

    The index path of the requested node.

    -
    - - - -
    -

    Return Value

    -

    a block that creates the node for display at this indexpath. -Must be thread-safe (can be called on the main thread or a background -queue) and should not implement reuse (it will be called once per row).

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – collectionView:nodeForSupplementaryElementOfKind:atIndexPath: -

    - -
    -
    - -
    - - -
    -

    Asks the collection view to provide a supplementary node to display in the collection view.

    -
    - - - -
    - (ASCellNode *)collectionView:(ASCollectionView *)collectionView nodeForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    collectionView

    An object representing the collection view requesting this information.

    kind

    The kind of supplementary node to provide.

    indexPath

    The index path that specifies the location of the new supplementary node.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – collectionViewLockDataSource: -

    - -
    -
    - -
    - - -
    -

    Indicator to lock the data source for data fetching in async mode. -We should not update the data source until the data source has been unlocked. Otherwise, it will incur data inconsistency or exception -due to the data access in async mode. (Deprecated: The data source is always accessed on the main thread, and this method will not be called.)

    -
    - - - -
    - (void)collectionViewLockDataSource:(ASCollectionView *)collectionView
    - - - -
    -

    Parameters

    - - - - - - - -
    collectionView

    The sender.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – collectionViewUnlockDataSource: -

    - -
    -
    - -
    - - -
    -

    Indicator to unlock the data source for data fetching in async mode. -We should not update the data source until the data source has been unlocked. Otherwise, it will incur data inconsistency or exception -due to the data access in async mode. (Deprecated: The data source is always accessed on the main thread, and this method will not be called.)

    -
    - - - -
    - (void)collectionViewUnlockDataSource:(ASCollectionView *)collectionView
    - - - -
    -

    Parameters

    - - - - - - - -
    collectionView

    The sender.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCollectionDelegate.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCollectionDelegate.html deleted file mode 100755 index 8b40171190..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCollectionDelegate.html +++ /dev/null @@ -1,685 +0,0 @@ - - - - - - ASCollectionDelegate Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCollectionDelegate Protocol Reference

    - - -
    - - - - - - - -
    Conforms toASCommonCollectionDelegate
    NSObject
    Declared inASCollectionNode.h
    - - - - -
    - -

    Overview

    -

    This is a node-based UICollectionViewDelegate.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – collectionNode:constrainedSizeForItemAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Provides the constrained size range for measuring the given item.

    -
    - - - -
    - (ASSizeRange)collectionNode:(ASCollectionNode *)collectionNode constrainedSizeForItemAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    collectionNode

    The sender.

    indexPath

    The index path of the item.

    -
    - - - -
    -

    Return Value

    -

    A constrained size range for layout for the item at this index path.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – collectionNode:willBeginBatchFetchWithContext: -

    - -
    -
    - -
    - - -
    -

    Receive a message that the collection node is near the end of its data set and more data should be fetched if -necessary.

    -
    - - - -
    - (void)collectionNode:(ASCollectionNode *)collectionNode willBeginBatchFetchWithContext:(ASBatchContext *)context
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    collectionNode

    The sender.

    context

    A context object that must be notified when the batch fetch is completed.

    -
    - - - - - - - -
    -

    Discussion

    -

    You must eventually call -completeBatchFetching: with an argument of YES in order to receive future -notifications to do batch fetches. This method is called on a background queue.

    - -

    ASCollectionNode currently only supports batch events for tail loads. If you require a head load, consider -implementing a UIRefreshControl.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – shouldBatchFetchForCollectionNode: -

    - -
    -
    - -
    - - -
    -

    Tell the collection node if batch fetching should begin.

    -
    - - - -
    - (BOOL)shouldBatchFetchForCollectionNode:(ASCollectionNode *)collectionNode
    - - - -
    -

    Parameters

    - - - - - - - -
    collectionNode

    The sender.

    -
    - - - - - - - -
    -

    Discussion

    -

    Use this method to conditionally fetch batches. Example use cases are: limiting the total number of -objects that can be fetched or no network connection.

    - -

    If not implemented, the collection node assumes that it should notify its asyncDelegate when batch fetching -should occur.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – collectionView:constrainedSizeForNodeAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Provides the constrained size range for measuring the node at the index path.

    -
    - - - -
    - (ASSizeRange)collectionView:(ASCollectionView *)collectionView constrainedSizeForNodeAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    collectionView

    The sender.

    indexPath

    The index path of the node.

    -
    - - - -
    -

    Return Value

    -

    A constrained size range for layout the node at this index path.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – collectionView:willDisplayNode:forItemAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Informs the delegate that the collection view will add the given node -at the given index path to the view hierarchy.

    -
    - - - -
    - (void)collectionView:(ASCollectionView *)collectionView willDisplayNode:(ASCellNode *)node forItemAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    collectionView

    The sender.

    node

    The node that will be displayed.

    indexPath

    The index path of the item that will be displayed.

    -
    - - - - - - - -
    -

    Discussion

    -

    Warning: AsyncDisplayKit processes collection view edits asynchronously. The index path -passed into this method may not correspond to the same item in your data source -if your data source has been updated since the last edit was processed.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – collectionView:didEndDisplayingNode:forItemAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Informs the delegate that the collection view did remove the provided node from the view hierarchy. -This may be caused by the node scrolling out of view, or by deleting the item -or its containing section with @c deleteItemsAtIndexPaths: or @c deleteSections: .

    -
    - - - -
    - (void)collectionView:(ASCollectionView *)collectionView didEndDisplayingNode:(ASCellNode *)node forItemAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    collectionView

    The sender.

    node

    The node which was removed from the view hierarchy.

    indexPath

    The index path at which the node was located before it was removed.

    -
    - - - - - - - -
    -

    Discussion

    -

    Warning: AsyncDisplayKit processes collection view edits asynchronously. The index path -passed into this method may not correspond to the same item in your data source -if your data source has been updated since the last edit was processed.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – shouldBatchFetchForCollectionView: -

    - -
    -
    - -
    - - -
    -

    Tell the collectionView if batch fetching should begin.

    -
    - - - -
    - (BOOL)shouldBatchFetchForCollectionView:(ASCollectionView *)collectionView
    - - - -
    -

    Parameters

    - - - - - - - -
    collectionView

    The sender.

    -
    - - - - - - - -
    -

    Discussion

    -

    Use this method to conditionally fetch batches. Example use cases are: limiting the total number of -objects that can be fetched or no network connection.

    - -

    If not implemented, the collectionView assumes that it should notify its asyncDelegate when batch fetching -should occur.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    - -

    – collectionView:willDisplayNodeForItemAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Informs the delegate that the collection view will add the node -at the given index path to the view hierarchy.

    -
    - - - -
    - (void)collectionView:(ASCollectionView *)collectionView willDisplayNodeForItemAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    collectionView

    The sender.

    indexPath

    The index path of the item that will be displayed.

    -
    - - - - - - - -
    -

    Discussion

    -

    Warning: AsyncDisplayKit processes collection view edits asynchronously. The index path -passed into this method may not correspond to the same item in your data source -if your data source has been updated since the last edit was processed.

    - -

    This method is deprecated. Use @c collectionView:willDisplayNode:forItemAtIndexPath: instead.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCollectionViewDelegateFlowLayout.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCollectionViewDelegateFlowLayout.html deleted file mode 100755 index 2185f480bd..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCollectionViewDelegateFlowLayout.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - - - ASCollectionViewDelegateFlowLayout Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCollectionViewDelegateFlowLayout Protocol Reference

    - - -
    - - - - - - - -
    Conforms toASCollectionDelegate
    Declared inASCollectionView.h
    - - - - -
    - -

    Overview

    -

    Defines methods that let you coordinate with a UICollectionViewFlowLayout in combination with an ASCollectionView.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – collectionView:layout:insetForSectionAtIndex: -

    - -
    -
    - -
    - - -
    -

    This method is deprecated and does nothing from 1.9.7 and up -Previously it applies the section inset to every cells within the corresponding section. -The expected behavior is to apply the section inset to the whole section rather than -shrinking each cell individually. -If you want this behavior, you can integrate your insets calculation into -constrainedSizeForNodeAtIndexPath -please file a github issue if you would like this to be restored.

    -
    - - - -
    - (UIEdgeInsets)collectionView:(ASCollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
    - - - - - - - - - -
    -

    Discussion

    -

    This method is deprecated and does nothing from 1.9.7 and up -Previously it applies the section inset to every cells within the corresponding section. -The expected behavior is to apply the section inset to the whole section rather than -shrinking each cell individually. -If you want this behavior, you can integrate your insets calculation into -constrainedSizeForNodeAtIndexPath -please file a github issue if you would like this to be restored.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – collectionView:layout:referenceSizeForHeaderInSection: -

    - -
    -
    - -
    - - -
    -

    Asks the delegate for the size of the header in the specified section.

    -
    - - - -
    - (CGSize)collectionView:(ASCollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    - -

    – collectionView:layout:referenceSizeForFooterInSection: -

    - -
    -
    - -
    - - -
    -

    Asks the delegate for the size of the footer in the specified section.

    -
    - - - -
    - (CGSize)collectionView:(ASCollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionView.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCollectionViewLayoutFacilitatorProtocol.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCollectionViewLayoutFacilitatorProtocol.html deleted file mode 100755 index 946ec7bdcd..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCollectionViewLayoutFacilitatorProtocol.html +++ /dev/null @@ -1,308 +0,0 @@ - - - - - - ASCollectionViewLayoutFacilitatorProtocol Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCollectionViewLayoutFacilitatorProtocol Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASCollectionViewLayoutFacilitatorProtocol.h
    - - - - -
    - -

    Overview

    -

    This facilitator protocol is intended to help Layout to better -gel with the CollectionView

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – collectionViewWillEditCellsAtIndexPaths:batched: -required method

    - -
    -
    - -
    - - -
    -

    Inform that the collectionView is editing the cells at a list of indexPaths

    -
    - - - -
    - (void)collectionViewWillEditCellsAtIndexPaths:(NSArray *)indexPaths batched:(BOOL)isBatched
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    indexPaths

    an array of NSIndexPath objects of cells being/will be edited.

    isBatched

    indicates whether the editing operation will be batched by the collectionView

    - -

    NOTE: when isBatched, used in combination with -collectionViewWillPerformBatchUpdates

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionViewLayoutFacilitatorProtocol.h

    -
    - - -
    -
    -
    - -

    – collectionViewWillEditSectionsAtIndexSet:batched: -required method

    - -
    -
    - -
    - - -
    -

    Inform that the collectionView is editing the sections at a set of indexes

    -
    - - - -
    - (void)collectionViewWillEditSectionsAtIndexSet:(NSIndexSet *)indexes batched:(BOOL)batched
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    indexes

    an NSIndexSet of section indexes being/will be edited.

    batched

    indicates whether the editing operation will be batched by the collectionView

    - -

    NOTE: when batched, used in combination with -collectionViewWillPerformBatchUpdates

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionViewLayoutFacilitatorProtocol.h

    -
    - - -
    -
    -
    - -

    – collectionViewWillPerformBatchUpdates -required method

    - -
    -
    - -
    - - -
    -

    Informs the delegate that the collectionView is about to call performBatchUpdates

    -
    - - - -
    - (void)collectionViewWillPerformBatchUpdates
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASCollectionViewLayoutFacilitatorProtocol.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCommonCollectionDataSource.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCommonCollectionDataSource.html deleted file mode 100755 index 0fef7a7747..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCommonCollectionDataSource.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - ASCommonCollectionDataSource Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCommonCollectionDataSource Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASCollectionViewProtocols.h
    - - - - -
    - -

    Overview

    -

    This is a subset of UICollectionViewDataSource.

    -
    - - - - - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCommonCollectionDelegate.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCommonCollectionDelegate.html deleted file mode 100755 index 8901487e47..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCommonCollectionDelegate.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - ASCommonCollectionDelegate Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCommonCollectionDelegate Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    UIScrollViewDelegate
    Declared inASCollectionViewProtocols.h
    - - - - -
    - -

    Overview

    -

    This is a subset of UICollectionViewDelegate.

    -
    - - - - - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCommonTableDataSource.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCommonTableDataSource.html deleted file mode 100755 index 9068e3ecab..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCommonTableDataSource.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - ASCommonTableDataSource Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCommonTableDataSource Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASTableViewProtocols.h
    - - - - -
    - -

    Overview

    -

    This is a subset of UITableViewDataSource.

    -
    - - - - - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCommonTableViewDelegate.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCommonTableViewDelegate.html deleted file mode 100755 index 4032159da3..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASCommonTableViewDelegate.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - ASCommonTableViewDelegate Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASCommonTableViewDelegate Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    UIScrollViewDelegate
    Declared inASTableViewProtocols.h
    - - - - -
    - -

    Overview

    -

    This is a subset of UITableViewDelegate.

    -
    - - - - - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASContextTransitioning.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASContextTransitioning.html deleted file mode 100755 index dde53dd1e5..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASContextTransitioning.html +++ /dev/null @@ -1,532 +0,0 @@ - - - - - - ASContextTransitioning Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASContextTransitioning Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASContextTransitioning.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – isAnimated -required method

    - -
    -
    - -
    - - -
    -

    Defines if the given transition is animated

    -
    - - - -
    - (BOOL)isAnimated
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASContextTransitioning.h

    -
    - - -
    -
    -
    - -

    – layoutForKey: -required method

    - -
    -
    - -
    - - -
    -

    Retrieve either the “from” or “to” layout

    -
    - - - -
    - (nullable ASLayout *)layoutForKey:(NSString *)key
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASContextTransitioning.h

    -
    - - -
    -
    -
    - -

    – constrainedSizeForKey: -required method

    - -
    -
    - -
    - - -
    -

    Retrieve either the “from” or “to” constrainedSize

    -
    - - - -
    - (ASSizeRange)constrainedSizeForKey:(NSString *)key
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASContextTransitioning.h

    -
    - - -
    -
    -
    - -

    – subnodesForKey: -required method

    - -
    -
    - -
    - - -
    -

    Retrieve the subnodes from either the “from” or “to” layout

    -
    - - - -
    - (NSArray<ASDisplayNode*> *)subnodesForKey:(NSString *)key
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASContextTransitioning.h

    -
    - - -
    -
    -
    - -

    – insertedSubnodes -required method

    - -
    -
    - -
    - - -
    -

    Subnodes that have been inserted in the layout transition

    -
    - - - -
    - (NSArray<ASDisplayNode*> *)insertedSubnodes
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASContextTransitioning.h

    -
    - - -
    -
    -
    - -

    – removedSubnodes -required method

    - -
    -
    - -
    - - -
    -

    Subnodes that will be removed in the layout transition

    -
    - - - -
    - (NSArray<ASDisplayNode*> *)removedSubnodes
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASContextTransitioning.h

    -
    - - -
    -
    -
    - -

    – initialFrameForNode: -required method

    - -
    -
    - -
    - - -
    -

    The frame for the given node before the transition began.

    -
    - - - -
    - (CGRect)initialFrameForNode:(ASDisplayNode *)node
    - - - - - - - - - -
    -

    Discussion

    -

    Returns CGRectNull if the node was not in the hierarchy before the transition.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASContextTransitioning.h

    -
    - - -
    -
    -
    - -

    – finalFrameForNode: -required method

    - -
    -
    - -
    - - -
    -

    The frame for the given node when the transition completes.

    -
    - - - -
    - (CGRect)finalFrameForNode:(ASDisplayNode *)node
    - - - - - - - - - -
    -

    Discussion

    -

    Returns CGRectNull if the node is no longer in the hierarchy after the transition.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASContextTransitioning.h

    -
    - - -
    -
    -
    - -

    – completeTransition: -required method

    - -
    -
    - -
    - - -
    -

    Invoke this method when the transition is completed in animateLayoutTransition:

    -
    - - - -
    - (void)completeTransition:(BOOL)didComplete
    - - - - - - - - - -
    -

    Discussion

    -

    Passing NO to didComplete will set the original layout as the new layout.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASContextTransitioning.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASEditableTextNodeDelegate.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASEditableTextNodeDelegate.html deleted file mode 100755 index 9fed893533..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASEditableTextNodeDelegate.html +++ /dev/null @@ -1,472 +0,0 @@ - - - - - - ASEditableTextNodeDelegate Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASEditableTextNodeDelegate Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASEditableTextNode.h
    - - - - -
    - -

    Overview

    -

    The methods declared by the ASEditableTextNodeDelegate protocol allow the adopting delegate to -respond to notifications such as began and finished editing, selection changed and text updated; -and manage whether a specified text should be replaced.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – editableTextNodeDidBeginEditing: -

    - -
    -
    - -
    - - -
    -

    Indicates to the delegate that the text node began editing.

    -
    - - - -
    - (void)editableTextNodeDidBeginEditing:(ASEditableTextNode *)editableTextNode
    - - - -
    -

    Parameters

    - - - - - - - -
    editableTextNode

    An editable text node.

    -
    - - - - - - - -
    -

    Discussion

    -

    The invocation of this method coincides with the keyboard animating to become visible.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    - -

    – editableTextNode:shouldChangeTextInRange:replacementText: -

    - -
    -
    - -
    - - -
    -

    Asks the delegate whether the specified text should be replaced in the editable text node.

    -
    - - - -
    - (BOOL)editableTextNode:(ASEditableTextNode *)editableTextNode shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    editableTextNode

    An editable text node.

    range

    The current selection range. If the length of the range is 0, range reflects the current insertion point. If the user presses the Delete key, the length of the range is 1 and an empty string object replaces that single character.

    text

    The text to insert.

    -
    - - - -
    -

    Return Value

    -

    The text node calls this method whenever the user types a new character or deletes an existing character. Implementation of this method is optional – the default implementation returns YES.

    -
    - - - - - -
    -

    Discussion

    -

    YES if the old text should be replaced by the new text; NO if the replacement operation should be aborted.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    - -

    – editableTextNodeDidChangeSelection:fromSelectedRange:toSelectedRange:dueToEditing: -

    - -
    -
    - -
    - - -
    -

    Indicates to the delegate that the text node’s selection has changed.

    -
    - - - -
    - (void)editableTextNodeDidChangeSelection:(ASEditableTextNode *)editableTextNode fromSelectedRange:(NSRange)fromSelectedRange toSelectedRange:(NSRange)toSelectedRange dueToEditing:(BOOL)dueToEditing
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - -
    editableTextNode

    An editable text node.

    fromSelectedRange

    The previously selected range.

    toSelectedRange

    The current selected range. Equivalent to the property.

    dueToEditing

    YES if the selection change was due to editing; NO otherwise.

    -
    - - - - - - - -
    -

    Discussion

    -

    You can access the selection of the receiver via .

    -
    - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    - -

    – editableTextNodeDidUpdateText: -

    - -
    -
    - -
    - - -
    -

    Indicates to the delegate that the text node’s text was updated.

    -
    - - - -
    - (void)editableTextNodeDidUpdateText:(ASEditableTextNode *)editableTextNode
    - - - -
    -

    Parameters

    - - - - - - - -
    editableTextNode

    An editable text node.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method is called each time the user updated the text node’s text. It is not called for programmatic changes made to the text via the property.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    - -

    – editableTextNodeDidFinishEditing: -

    - -
    -
    - -
    - - -
    -

    Indicates to the delegate that teh text node has finished editing.

    -
    - - - -
    - (void)editableTextNodeDidFinishEditing:(ASEditableTextNode *)editableTextNode
    - - - -
    -

    Parameters

    - - - - - - - -
    editableTextNode

    An editable text node.

    -
    - - - - - - - -
    -

    Discussion

    -

    The invocation of this method coincides with the keyboard animating to become hidden.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASEditableTextNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASLayoutElement.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASLayoutElement.html deleted file mode 100755 index fc275151ba..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASLayoutElement.html +++ /dev/null @@ -1,657 +0,0 @@ - - - - - - ASLayoutElement Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASLayoutElement Protocol Reference

    - - -
    - - - - - - - -
    Conforms toASEnvironment
    ASLayoutElementExtensibility
    ASLayoutElementPrivate
    ASLayoutElementStylability
    NSFastEnumeration
    Declared inASLayoutElement.h
    - - - - -
    - -

    Overview

    -

    The ASLayoutElement protocol declares a method for measuring the layout of an object. A layout -is defined by an ASLayout return value, and must specify 1) the size (but not position) of the -layoutElement object, and 2) the size and position of all of its immediate child objects. The tree -recursion is driven by parents requesting layouts from their children in order to determine their -size, followed by the parents setting the position of the children once the size is known

    - -

    The protocol also implements a “family” of LayoutElement protocols. These protocols contain layout -options that can be used for specific layout specs. For example, ASStackLayoutSpec has options -defining how a layoutElement should shrink or grow based upon available space.

    - -

    These layout options are all stored in an ASLayoutOptions class (that is defined in ASLayoutElementPrivate). -Generally you needn’t worry about the layout options class, as the layoutElement protocols allow all direct -access to the options via convenience properties. If you are creating custom layout spec, then you can -extend the backing layout options class to accommodate any new layout options.

    -
    - - - - - -
    - - - - - - -
    -
    - -

      layoutElementType -required method

    - -
    -
    - -
    - - -
    -

    Returns type of layoutElement

    -
    - - - -
    @property (nonatomic, assign, readonly) ASLayoutElementType layoutElementType
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      canLayoutAsynchronous -required method

    - -
    -
    - -
    - - -
    -

    Returns if the layoutElement can be used to layout in an asynchronous way on a background thread.

    -
    - - - -
    @property (nonatomic, assign, readonly) BOOL canLayoutAsynchronous
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      style -required method

    - -
    -
    - -
    - - -
    -

    A size constraint that should apply to this ASLayoutElement.

    -
    - - - -
    @property (nonatomic, assign, readonly) ASLayoutElementStyle *style
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

      debugName -required method

    - -
    -
    - -
    - - -
    -

    Optional name that is printed by ascii art string and displayed in description.

    -
    - - - -
    @property (nullable, nonatomic, copy) NSString *debugName
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

    – layoutThatFits: -required method

    - -
    -
    - -
    - - -
    -

    Asks the node to return a layout based on given size range.

    -
    - - - -
    - (ASLayout *)layoutThatFits:(ASSizeRange)constrainedSize
    - - - -
    -

    Parameters

    - - - - - - - -
    constrainedSize

    The minimum and maximum sizes the receiver should fit in.

    -
    - - - -
    -

    Return Value

    -

    An ASLayout instance defining the layout of the receiver (and its children, if the box layout model is used).

    -
    - - - - - -
    -

    Discussion

    -

    Though this method does not set the bounds of the view, it does have side effects–caching both the -constraint and the result.

    Warning: Subclasses must not override this; it caches results from -calculateLayoutThatFits:. Calling this method may -be expensive if result is not cached.

    -
    - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

    – layoutThatFits:parentSize: -required method

    - -
    -
    - -
    - - -
    -

    Call this on children layoutElements to compute their layouts within your implementation of -calculateLayoutThatFits:.

    -
    - - - -
    - (ASLayout *)layoutThatFits:(ASSizeRange)constrainedSize parentSize:(CGSize)parentSize
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    constrainedSize

    Specifies a minimum and maximum size. The receiver must choose a size that is in this range.

    parentSize

    The parent node’s size. If the parent component does not have a final size in a given dimension, -then it should be passed as ASLayoutElementParentDimensionUndefined (for example, if the parent’s width -depends on the child’s size).

    -
    - - - -
    -

    Return Value

    -

    An ASLayout instance defining the layout of the receiver (and its children, if the box layout model is used).

    -
    - - - - - -
    -

    Discussion

    -

    Warning: You may not override this method. Override -calculateLayoutThatFits: instead.

    Warning: In almost all cases, prefer the use of ASCalculateLayout in ASLayout

    Though this method does not set the bounds of the view, it does have side effects–caching both the -constraint and the result.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

    – calculateLayoutThatFits: -required method

    - -
    -
    - -
    - - -
    -

    Override this method to compute your layoutElement’s layout.

    -
    - - - -
    - (ASLayout *)calculateLayoutThatFits:(ASSizeRange)constrainedSize
    - - - -
    -

    Parameters

    - - - - - - - -
    constrainedSize

    A min and max size. This is computed as described in the description. The ASLayout you -return MUST have a size between these two sizes.

    -
    - - - - - - - -
    -

    Discussion

    -

    Why do you need to override -calculateLayoutThatFits: instead of -layoutThatFits:parentSize:? -The base implementation of -layoutThatFits:parentSize: does the following for you: -1. First, it uses the parentSize parameter to resolve the nodes’s size (the one assigned to the size property). -2. Then, it intersects the resolved size with the constrainedSize parameter. If the two don’t intersect, -constrainedSize wins. This allows a component to always override its childrens' sizes when computing its layout. -(The analogy for UIView: you might return a certain size from -sizeThatFits:, but a parent view can always override -that size and set your frame to any size.) -3. It caches it result for reuse

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

    – calculateLayoutThatFits:restrictedToSize:relativeToParentSize: -required method

    - -
    -
    - -
    - - -
    -

    In certain advanced cases, you may want to override this method. Overriding this method allows you to receive the -layoutElement’s size, parentSize, and constrained size. With these values you could calculate the final constrained size -and call -calculateLayoutThatFits: with the result.

    -
    - - - -
    - (ASLayout *)calculateLayoutThatFits:(ASSizeRange)constrainedSize restrictedToSize:(ASLayoutElementSize)size relativeToParentSize:(CGSize)parentSize
    - - - - - - - - - -
    -

    Discussion

    -

    Warning: Overriding this method should be done VERY rarely.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    - -

    – measureWithSizeRange: -required method

    - -
    -
    - -
    - - -
    -

    Calculate a layout based on given size range. (Deprecated: Deprecated in version 2.0: Use layoutThatFits: or layoutThatFits:parentSize: if used in -ASLayoutSpec subclasses)

    -
    - - - -
    - (nonnull ASLayout *)measureWithSizeRange:(ASSizeRange)constrainedSize
    - - - -
    -

    Parameters

    - - - - - - - -
    constrainedSize

    The minimum and maximum sizes the receiver should fit in.

    -
    - - - -
    -

    Return Value

    -

    An ASLayout instance defining the layout of the receiver and its children.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElement.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASLayoutElementAsciiArtProtocol.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASLayoutElementAsciiArtProtocol.html deleted file mode 100755 index c17c1fe76c..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASLayoutElementAsciiArtProtocol.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - ASLayoutElementAsciiArtProtocol Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASLayoutElementAsciiArtProtocol Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASAsciiArtBoxCreator.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – asciiArtString -required method

    - -
    -
    - -
    - - -
    -

    Returns an ascii-art representation of this object and its children. -For example, an ASInsetSpec may return something like this:

    -
    - - - -
    - (NSString *)asciiArtString
    - - - - - - - - - -
    -

    Discussion

    -

    –ASInsetLayoutSpec–

    - -

    | ASTextNode |

    -
    - - - - - - - -
    -

    Declared In

    -

    ASAsciiArtBoxCreator.h

    -
    - - -
    -
    -
    - -

    – asciiArtName -required method

    - -
    -
    - -
    - - -
    -

    returns the name of this object that will display in the ascii art. Usually this can -simply be NSStringFromClass([self class]).

    -
    - - - -
    - (NSString *)asciiArtName
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASAsciiArtBoxCreator.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASLayoutElementPrivate.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASLayoutElementPrivate.html deleted file mode 100755 index 01647a4d78..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASLayoutElementPrivate.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - ASLayoutElementPrivate Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASLayoutElementPrivate Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASLayoutElementPrivate.h
    - - - - -
    - -

    Overview

    -

    The base protocol for ASLayoutElement. Generally the methods/properties in this class do not need to be -called by the end user and are only called internally. However, there may be a case where the methods are useful.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – finalLayoutElement -required method

    - -
    -
    - -
    - - -
    -

    This method can be used to give the user a chance to wrap an ASLayoutElement in an ASLayoutSpec -just before it is added to a parent ASLayoutSpec. For example, if you wanted an ASTextNode that was always -inside of an ASInsetLayoutSpec, you could subclass ASTextNode and implement finalLayoutElement so that it wraps -itself in an inset spec.

    - -

    Note that any ASLayoutElement other than self that is returned MUST set isFinalLayoutElement to YES. Make sure -to do this BEFORE adding a child to the ASLayoutElement.

    -
    - - - -
    - (id<ASLayoutElement>)finalLayoutElement
    - - - - - -
    -

    Return Value

    -

    The layoutElement that will be added to the parent layout spec. Defaults to self.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElementPrivate.h

    -
    - - -
    -
    -
    - -

      isFinalLayoutElement -required method

    - -
    -
    - -
    - - -
    -

    A flag to indicate that this ASLayoutElement was created in finalLayoutElement. This MUST be set to YES -before adding a child to this layoutElement.

    -
    - - - -
    @property (nonatomic, assign) BOOL isFinalLayoutElement
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASLayoutElementPrivate.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASManagesChildVisibilityDepth.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASManagesChildVisibilityDepth.html deleted file mode 100755 index 817097a2bd..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASManagesChildVisibilityDepth.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - ASManagesChildVisibilityDepth Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASManagesChildVisibilityDepth Protocol Reference

    - - -
    - - - - - - - -
    Conforms toASVisibilityDepth
    Declared inASVisibilityProtocols.h
    - - - - -
    - -

    Overview

    -

    ASManagesChildVisibilityDepth

    A protocol which should be implemented by container view controllers to allow proper -propagation of visibility depth

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – visibilityDepthOfChildViewController: -required method

    - -
    -
    - -
    - - -
    -

    Container view controllers should adopt this protocol to indicate that they will manage their child’s -visibilityDepth. For example, ASNavigationController adopts this protocol and manages its childrens visibility -depth.

    - -

    If you adopt this protocol, you must also emit visibilityDepthDidChange messages to child view controllers.

    -
    - - - -
    - (NSInteger)visibilityDepthOfChildViewController:(UIViewController *)childViewController
    - - - -
    -

    Parameters

    - - - - - - - -
    childViewController

    Expected to return the visibility depth of the child view controller.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVisibilityProtocols.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASMultiplexImageNodeDataSource.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASMultiplexImageNodeDataSource.html deleted file mode 100755 index b979e068fd..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASMultiplexImageNodeDataSource.html +++ /dev/null @@ -1,364 +0,0 @@ - - - - - - ASMultiplexImageNodeDataSource Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASMultiplexImageNodeDataSource Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASMultiplexImageNode.h
    - - - - -
    - -

    Overview

    -

    The ASMultiplexImageNodeDataSource protocol is adopted by an object that provides the multiplex image node, -for each image identifier, an image or a URL the image node should load.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – multiplexImageNode:imageForImageIdentifier: -

    - -
    -
    - -
    - - -
    -

    An image for the specified identifier.

    -
    - - - -
    - (nullable UIImage *)multiplexImageNode:(ASMultiplexImageNode *)imageNode imageForImageIdentifier:(ASImageIdentifier)imageIdentifier
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    imageNode

    The sender.

    imageIdentifier

    The identifier for the image that should be returned.

    -
    - - - -
    -

    Return Value

    -

    A UIImage corresponding to imageIdentifier, or nil if none is available.

    -
    - - - - - -
    -

    Discussion

    -

    If the image is already available to the data source, this method should be used in lieu of providing the -URL to the image via -multiplexImageNode:URLForImageIdentifier:.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

    – multiplexImageNode:URLForImageIdentifier: -

    - -
    -
    - -
    - - -
    -

    An image URL for the specified identifier.

    -
    - - - -
    - (nullable NSURL *)multiplexImageNode:(ASMultiplexImageNode *)imageNode URLForImageIdentifier:(ASImageIdentifier)imageIdentifier
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    imageNode

    The sender.

    imageIdentifier

    The identifier for the image that will be downloaded.

    -
    - - - -
    -

    Return Value

    -

    An NSURL for the image identified by imageIdentifier, or nil if none is available.

    -
    - - - - - -
    -

    Discussion

    -

    Supported URLs include HTTP, HTTPS, AssetsLibrary, and FTP URLs as well as Photos framework URLs (see note).

    - -

    If the image is already available to the data source, it should be provided via [ASMultiplexImageNodeDataSource multiplexImageNode:imageForImageIdentifier:] instead.

    -
    - - - - - -
    -

    See Also

    -
      - -
    • [NSURL URLWithAssetLocalIdentifier:targetSize:contentMode:options:] below.

    • - -
    -
    - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

    – multiplexImageNode:assetForLocalIdentifier: -

    - -
    -
    - -
    - - -
    -

    A PHAsset for the specific asset local identifier

    -
    - - - -
    - (nullable PHAsset *)multiplexImageNode:(ASMultiplexImageNode *)imageNode assetForLocalIdentifier:(NSString *)assetLocalIdentifier
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    imageNode

    The sender.

    assetLocalIdentifier

    The local identifier for a PHAsset that this image node is loading.

    -
    - - - -
    -

    Return Value

    -

    A PHAsset corresponding to assetLocalIdentifier, or nil if none is available.

    -
    - - - - - -
    -

    Discussion

    -

    This optional method can improve image performance if your data source already has the PHAsset available. -If this method is not implemented, or returns nil, the image node will request the asset from the Photos framework.

    Note: This method may be called from any thread.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASMultiplexImageNodeDelegate.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASMultiplexImageNodeDelegate.html deleted file mode 100755 index 100ffd6038..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASMultiplexImageNodeDelegate.html +++ /dev/null @@ -1,550 +0,0 @@ - - - - - - ASMultiplexImageNodeDelegate Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASMultiplexImageNodeDelegate Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASMultiplexImageNode.h
    - - - - -
    - -

    Overview

    -

    The methods declared by the ASMultiplexImageNodeDelegate protocol allow the adopting delegate to respond to -notifications such as began, progressed and finished downloading, updated and displayed an image.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – multiplexImageNode:didStartDownloadOfImageWithIdentifier: -

    - -
    -
    - -
    - - -
    -

    Notification that the image node began downloading an image.

    -
    - - - -
    - (void)multiplexImageNode:(ASMultiplexImageNode *)imageNode didStartDownloadOfImageWithIdentifier:(id)imageIdentifier
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    imageNode

    The sender.

    imageIdentifier

    The identifier for the image that is downloading.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

    – multiplexImageNode:didUpdateDownloadProgress:forImageWithIdentifier: -

    - -
    -
    - -
    - - -
    -

    Notification that the image node’s download progressed.

    -
    - - - -
    - (void)multiplexImageNode:(ASMultiplexImageNode *)imageNode didUpdateDownloadProgress:(CGFloat)downloadProgress forImageWithIdentifier:(ASImageIdentifier)imageIdentifier
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    imageNode

    The sender.

    downloadProgress

    The progress of the download. Value is between 0.0 and 1.0.

    imageIdentifier

    The identifier for the image that is downloading.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

    – multiplexImageNode:didFinishDownloadingImageWithIdentifier:error: -

    - -
    -
    - -
    - - -
    -

    Notification that the image node’s download has finished.

    -
    - - - -
    - (void)multiplexImageNode:(ASMultiplexImageNode *)imageNode didFinishDownloadingImageWithIdentifier:(ASImageIdentifier)imageIdentifier error:(nullable NSError *)error
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    imageNode

    The sender.

    imageIdentifier

    The identifier for the image that finished downloading.

    error

    The error that occurred while downloading, if one occurred; nil otherwise.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

    – multiplexImageNode:didUpdateImage:withIdentifier:fromImage:withIdentifier: -

    - -
    -
    - -
    - - -
    -

    Notification that the image node’s image was updated.

    -
    - - - -
    - (void)multiplexImageNode:(ASMultiplexImageNode *)imageNode didUpdateImage:(nullable UIImage *)image withIdentifier:(nullable ASImageIdentifier)imageIdentifier fromImage:(nullable UIImage *)previousImage withIdentifier:(nullable ASImageIdentifier)previousImageIdentifier
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    imageNode

    The sender.

    image

    The new image, ready for display.

    imageIdentifier

    The identifier for image.

    previousImage

    The old, previously-loaded image.

    previousImageIdentifier

    The identifier for previousImage.

    -
    - - - - - - - -
    -

    Discussion

    -

    Note: This method does not indicate that image has been displayed.

    -
    - - - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

    – multiplexImageNode:didDisplayUpdatedImage:withIdentifier: -

    - -
    -
    - -
    - - -
    -

    Notification that the image node displayed a new image.

    -
    - - - -
    - (void)multiplexImageNode:(ASMultiplexImageNode *)imageNode didDisplayUpdatedImage:(nullable UIImage *)image withIdentifier:(nullable ASImageIdentifier)imageIdentifier
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    imageNode

    The sender.

    image

    The new image, now being displayed.

    imageIdentifier

    The identifier for image.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method is only called when image changes, and not on subsequent redisplays of the same image.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    - -

    – multiplexImageNodeDidFinishDisplay: -

    - -
    -
    - -
    - - -
    -

    Notification that the image node finished displaying an image.

    -
    - - - -
    - (void)multiplexImageNodeDidFinishDisplay:(ASMultiplexImageNode *)imageNode
    - - - -
    -

    Parameters

    - - - - - - - -
    imageNode

    The sender.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method is called every time an image is displayed, whether or not it has changed.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASMultiplexImageNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASNetworkImageNodeDelegate.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASNetworkImageNodeDelegate.html deleted file mode 100755 index 993331c3f7..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASNetworkImageNodeDelegate.html +++ /dev/null @@ -1,386 +0,0 @@ - - - - - - ASNetworkImageNodeDelegate Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASNetworkImageNodeDelegate Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASNetworkImageNode.h
    - - - - -
    - -

    Overview

    -

    The methods declared by the ASNetworkImageNodeDelegate protocol allow the adopting delegate to respond to -notifications such as finished decoding and downloading an image.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – imageNode:didLoadImage: -

    - -
    -
    - -
    - - -
    -

    Notification that the image node finished downloading an image.

    -
    - - - -
    - (void)imageNode:(ASNetworkImageNode *)imageNode didLoadImage:(UIImage *)image
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    imageNode

    The sender.

    image

    The newly-loaded image.

    -
    - - - - - - - -
    -

    Discussion

    -

    Called on a background queue.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    - -

    – imageNodeDidStartFetchingData: -

    - -
    -
    - -
    - - -
    -

    Notification that the image node started to load

    -
    - - - -
    - (void)imageNodeDidStartFetchingData:(ASNetworkImageNode *)imageNode
    - - - -
    -

    Parameters

    - - - - - - - -
    imageNode

    The sender.

    -
    - - - - - - - -
    -

    Discussion

    -

    Called on a background queue.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    - -

    – imageNode:didFailWithError: -

    - -
    -
    - -
    - - -
    -

    Notification that the image node failed to download the image.

    -
    - - - -
    - (void)imageNode:(ASNetworkImageNode *)imageNode didFailWithError:(NSError *)error
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    imageNode

    The sender.

    error

    The error with details.

    -
    - - - - - - - -
    -

    Discussion

    -

    Called on a background queue.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    - -

    – imageNodeDidFinishDecoding: -

    - -
    -
    - -
    - - -
    -

    Notification that the image node finished decoding an image.

    -
    - - - -
    - (void)imageNodeDidFinishDecoding:(ASNetworkImageNode *)imageNode
    - - - -
    -

    Parameters

    - - - - - - - -
    imageNode

    The sender.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASNetworkImageNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASPagerDataSource.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASPagerDataSource.html deleted file mode 100755 index 6cea3bee54..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASPagerDataSource.html +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - ASPagerDataSource Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASPagerDataSource Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASPagerNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – numberOfPagesInPagerNode: -required method

    - -
    -
    - -
    - - -
    -

    This method replaces -collectionView:numberOfItemsInSection:

    -
    - - - -
    - (NSInteger)numberOfPagesInPagerNode:(ASPagerNode *)pagerNode
    - - - -
    -

    Parameters

    - - - - - - - -
    pagerNode

    The sender.

    -
    - - - -
    -

    Return Value

    -

    The total number of pages that can display in the pagerNode.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASPagerNode.h

    -
    - - -
    -
    -
    - -

    – pagerNode:nodeAtIndex: -

    - -
    -
    - -
    - - -
    -

    This method replaces -collectionView:nodeForItemAtIndexPath:

    -
    - - - -
    - (ASCellNode *)pagerNode:(ASPagerNode *)pagerNode nodeAtIndex:(NSInteger)index
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    pagerNode

    The sender.

    index

    The index of the requested node.

    -
    - - - -
    -

    Return Value

    -

    a node for display at this index. This will be called on the main thread and should -not implement reuse (it will be called once per row). Unlike UICollectionView’s version, -this method is not called when the row is about to display.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASPagerNode.h

    -
    - - -
    -
    -
    - -

    – pagerNode:nodeBlockAtIndex: -

    - -
    -
    - -
    - - -
    -

    This method replaces -collectionView:nodeBlockForItemAtIndexPath: -This method takes precedence over pagerNode:nodeAtIndex: if implemented.

    -
    - - - -
    - (ASCellNodeBlock)pagerNode:(ASPagerNode *)pagerNode nodeBlockAtIndex:(NSInteger)index
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    pagerNode

    The sender.

    index

    The index of the requested node.

    -
    - - - -
    -

    Return Value

    -

    a block that creates the node for display at this index. -Must be thread-safe (can be called on the main thread or a background -queue) and should not implement reuse (it will be called once per row).

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASPagerNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASPagerDelegate.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASPagerDelegate.html deleted file mode 100755 index 6f7e47f1f7..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASPagerDelegate.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - ASPagerDelegate Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASPagerDelegate Protocol Reference

    - - -
    - - - - - - - -
    Conforms toASCollectionDelegate
    Declared inASPagerNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – pagerNode:constrainedSizeForNodeAtIndex: -

    - -
    -
    - -
    - - -
    -

    Provides the constrained size range for measuring the node at the index.

    -
    - - - -
    - (ASSizeRange)pagerNode:(ASPagerNode *)pagerNode constrainedSizeForNodeAtIndex:(NSInteger)index
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    pagerNode

    The sender.

    index

    The index of the node.

    -
    - - - -
    -

    Return Value

    -

    A constrained size range for layout the node at this index.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASPagerNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASRangeControllerDataSource.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASRangeControllerDataSource.html deleted file mode 100755 index 2aa1157e93..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASRangeControllerDataSource.html +++ /dev/null @@ -1,385 +0,0 @@ - - - - - - ASRangeControllerDataSource Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASRangeControllerDataSource Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASRangeController.h
    - - - - -
    - -

    Overview

    -

    Data source for ASRangeController.

    - -

    Allows the range controller to perform external queries on the range. -Ex. range nodes, visible index paths, and viewport size.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – visibleNodeIndexPathsForRangeController: -required method

    - -
    -
    - -
    - - -
    -

    Sender.

    -
    - - - -
    - (NSArray<NSIndexPath*> *)visibleNodeIndexPathsForRangeController:(ASRangeController *)rangeController
    - - - -
    -

    Parameters

    - - - - - - - -
    rangeController

    Sender.

    -
    - - - -
    -

    Return Value

    -

    an array of index paths corresponding to the nodes currently visible onscreen (i.e., the visible range).

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    - -

    – scrollDirectionForRangeController: -required method

    - -
    -
    - -
    - - -
    -

    Sender.

    -
    - - - -
    - (ASScrollDirection)scrollDirectionForRangeController:(ASRangeController *)rangeController
    - - - -
    -

    Parameters

    - - - - - - - -
    rangeController

    Sender.

    -
    - - - -
    -

    Return Value

    -

    the current scroll direction of the view using this range controller.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    - -

    – viewportSizeForRangeController: -required method

    - -
    -
    - -
    - - -
    -

    Sender.

    -
    - - - -
    - (CGSize)viewportSizeForRangeController:(ASRangeController *)rangeController
    - - - -
    -

    Parameters

    - - - - - - - -
    rangeController

    Sender.

    -
    - - - -
    -

    Return Value

    -

    the receiver’s viewport size (i.e., the screen space occupied by the visible range).

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    - -

    – interfaceStateForRangeController: -required method

    - -
    -
    - -
    - - -
    -

    Sender.

    -
    - - - -
    - (ASInterfaceState)interfaceStateForRangeController:(ASRangeController *)rangeController
    - - - -
    -

    Parameters

    - - - - - - - -
    rangeController

    Sender.

    -
    - - - -
    -

    Return Value

    -

    the ASInterfaceState of the node that this controller is powering. This allows nested range controllers -to collaborate with one another, as an outer controller may set bits in .interfaceState such as Visible. -If this controller is an orthogonally scrolling element, it waits until it is visible to preload outside the viewport.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASRangeControllerDelegate.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASRangeControllerDelegate.html deleted file mode 100755 index e97a5829f0..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASRangeControllerDelegate.html +++ /dev/null @@ -1,585 +0,0 @@ - - - - - - ASRangeControllerDelegate Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASRangeControllerDelegate Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASRangeController.h
    - - - - -
    - -

    Overview

    -

    Delegate for ASRangeController.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – didBeginUpdatesInRangeController: -required method

    - -
    -
    - -
    - - -
    -

    Begin updates.

    -
    - - - -
    - (void)didBeginUpdatesInRangeController:(ASRangeController *)rangeController
    - - - -
    -

    Parameters

    - - - - - - - -
    rangeController

    Sender.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    - -

    – rangeController:didEndUpdatesAnimated:completion: -required method

    - -
    -
    - -
    - - -
    -

    End updates.

    -
    - - - -
    - (void)rangeController:(ASRangeController *)rangeController didEndUpdatesAnimated:(BOOL)animated completion:(void ( ^ ) ( BOOL ))completion
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    rangeController

    Sender.

    animated

    NO if all animations are disabled. YES otherwise.

    completion

    Completion block.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    - -

    – didCompleteUpdatesInRangeController: -required method

    - -
    -
    - -
    - - -
    -

    Completed updates to cell node addition and removal.

    -
    - - - -
    - (void)didCompleteUpdatesInRangeController:(ASRangeController *)rangeController
    - - - -
    -

    Parameters

    - - - - - - - -
    rangeController

    Sender.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    - -

    – rangeController:didInsertNodes:atIndexPaths:withAnimationOptions: -required method

    - -
    -
    - -
    - - -
    -

    Called for nodes insertion.

    -
    - - - -
    - (void)rangeController:(ASRangeController *)rangeController didInsertNodes:(NSArray<ASCellNode*> *)nodes atIndexPaths:(NSArray<NSIndexPath*> *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - -
    rangeController

    Sender.

    nodes

    Inserted nodes.

    indexPaths

    Index path of inserted nodes.

    animationOptions

    Animation options. See ASDataControllerAnimationOptions.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    - -

    – rangeController:didDeleteNodes:atIndexPaths:withAnimationOptions: -required method

    - -
    -
    - -
    - - -
    -

    Called for nodes deletion.

    -
    - - - -
    - (void)rangeController:(ASRangeController *)rangeController didDeleteNodes:(NSArray<ASCellNode*> *)nodes atIndexPaths:(NSArray<NSIndexPath*> *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - -
    rangeController

    Sender.

    nodes

    Deleted nodes.

    indexPaths

    Index path of deleted nodes.

    animationOptions

    Animation options. See ASDataControllerAnimationOptions.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    - -

    – rangeController:didInsertSectionsAtIndexSet:withAnimationOptions: -required method

    - -
    -
    - -
    - - -
    -

    Called for section insertion.

    -
    - - - -
    - (void)rangeController:(ASRangeController *)rangeController didInsertSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    rangeController

    Sender.

    indexSet

    Index set of inserted sections.

    animationOptions

    Animation options. See ASDataControllerAnimationOptions.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    - -

    – rangeController:didDeleteSectionsAtIndexSet:withAnimationOptions: -required method

    - -
    -
    - -
    - - -
    -

    Called for section deletion.

    -
    - - - -
    - (void)rangeController:(ASRangeController *)rangeController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    rangeController

    Sender.

    indexSet

    Index set of deleted sections.

    animationOptions

    Animation options. See ASDataControllerAnimationOptions.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASRangeController.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASStackLayoutElement.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASStackLayoutElement.html deleted file mode 100755 index 97a44dd6a6..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASStackLayoutElement.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - ASStackLayoutElement Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASStackLayoutElement Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASStackLayoutElement.h
    - - - - -
    - -

    Overview

    -

    Layout options that can be defined for an ASLayoutElement being added to a ASStackLayoutSpec.

    -
    - - - - - -
    - - - - - - -
    -
    - -

      spacingBefore -required method

    - -
    -
    - -
    - - -
    -

    Additional space to place before this object in the stacking direction. -Used when attached to a stack layout.

    -
    - - - -
    @property (nonatomic, readwrite) CGFloat spacingBefore
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutElement.h

    -
    - - -
    -
    -
    - -

      spacingAfter -required method

    - -
    -
    - -
    - - -
    -

    Additional space to place after this object in the stacking direction. -Used when attached to a stack layout.

    -
    - - - -
    @property (nonatomic, readwrite) CGFloat spacingAfter
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutElement.h

    -
    - - -
    -
    -
    - -

      flexGrow -required method

    - -
    -
    - -
    - - -
    -

    If the sum of childrens' stack dimensions is less than the minimum size, how much should this component grow? -This value represents the “flex grow factor” and determines how much this component should grow in relation to any -other flexible children.

    -
    - - - -
    @property (nonatomic, readwrite) CGFloat flexGrow
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutElement.h

    -
    - - -
    -
    -
    - -

      flexShrink -required method

    - -
    -
    - -
    - - -
    -

    If the sum of childrens' stack dimensions is greater than the maximum size, how much should this component shrink? -This value represents the “flex shrink factor” and determines how much this component should shink in relation to -other flexible children.

    -
    - - - -
    @property (nonatomic, readwrite) CGFloat flexShrink
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutElement.h

    -
    - - -
    -
    -
    - -

      flexBasis -required method

    - -
    -
    - -
    - - -
    -

    Specifies the initial size in the stack dimension for this object. -Default to ASDimensionAuto -Used when attached to a stack layout.

    -
    - - - -
    @property (nonatomic, readwrite) ASDimension flexBasis
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutElement.h

    -
    - - -
    -
    -
    - -

      alignSelf -required method

    - -
    -
    - -
    - - -
    -

    Orientation of the object along cross axis, overriding alignItems -Used when attached to a stack layout.

    -
    - - - -
    @property (nonatomic, readwrite) ASStackLayoutAlignSelf alignSelf
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutElement.h

    -
    - - -
    -
    -
    - -

      ascender -required method

    - -
    -
    - -
    - - -
    -

    Used for baseline alignment. The distance from the top of the object to its baseline.

    -
    - - - -
    @property (nonatomic, readwrite) CGFloat ascender
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutElement.h

    -
    - - -
    -
    -
    - -

      descender -required method

    - -
    -
    - -
    - - -
    -

    Used for baseline alignment. The distance from the baseline of the object to its bottom.

    -
    - - - -
    @property (nonatomic, readwrite) CGFloat descender
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASStackLayoutElement.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASTableDataSource.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASTableDataSource.html deleted file mode 100755 index c6c4cc407c..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASTableDataSource.html +++ /dev/null @@ -1,614 +0,0 @@ - - - - - - ASTableDataSource Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASTableDataSource Protocol Reference

    - - -
    - - - - - - - -
    Conforms toASCommonTableDataSource
    NSObject
    Declared inASTableNode.h
    - - - - -
    - -

    Overview

    -

    This is a node-based UITableViewDataSource.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – numberOfSectionsInTableNode: -

    - -
    -
    - -
    - - -
    -

    Asks the data source for the number of sections in the table node.

    -
    - - - -
    - (NSInteger)numberOfSectionsInTableNode:(ASTableNode *)tableNode
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – tableNode:numberOfRowsInSection: -

    - -
    -
    - -
    - - -
    -

    Asks the data source for the number of rows in the given section of the table node.

    -
    - - - -
    - (NSInteger)tableNode:(ASTableNode *)tableNode numberOfRowsInSection:(NSInteger)section
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – tableNode:nodeBlockForRowAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Asks the data source for a block to create a node to represent the row at the given index path. -The block will be run by the table node concurrently in the background before the row is inserted -into the table view.

    -
    - - - -
    - (ASCellNodeBlock)tableNode:(ASTableNode *)tableNode nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    tableNode

    The sender.

    indexPath

    The index path of the row.

    -
    - - - -
    -

    Return Value

    -

    a block that creates the node for display at this indexpath. -Must be thread-safe (can be called on the main thread or a background -queue) and should not implement reuse (it will be called once per row).

    -
    - - - - - -
    -

    Discussion

    -

    Note: This method takes precedence over tableNode:nodeForRowAtIndexPath: if implemented.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – tableNode:nodeForRowAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Asks the data source for a node to represent the row at the given index path.

    -
    - - - -
    - (ASCellNode *)tableNode:(ASTableNode *)tableNode nodeForRowAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    tableNode

    The sender.

    indexPath

    The index path of the row.

    -
    - - - -
    -

    Return Value

    -

    a node to display for this row. This will be called on the main thread and should not implement reuse (it will be called once per row). Unlike UITableView’s version, this method -is not called when the row is about to display.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – tableView:nodeForRowAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Similar to -tableView:cellForRowAtIndexPath:.

    -
    - - - -
    - (ASCellNode *)tableView:(ASTableView *)tableView nodeForRowAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    indexPath

    The index path of the requested node.

    tableNode

    The sender.

    -
    - - - -
    -

    Return Value

    -

    a node for display at this indexpath. This will be called on the main thread and should not implement reuse (it will be called once per row). Unlike UITableView’s version, this method -is not called when the row is about to display.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – tableView:nodeBlockForRowAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Similar to -tableView:nodeForRowAtIndexPath: -This method takes precedence over tableView:nodeForRowAtIndexPath: if implemented.

    -
    - - - -
    - (ASCellNodeBlock)tableView:(ASTableView *)tableView nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    tableView

    The sender.

    indexPath

    The index path of the requested node.

    -
    - - - -
    -

    Return Value

    -

    a block that creates the node for display at this indexpath. -Must be thread-safe (can be called on the main thread or a background -queue) and should not implement reuse (it will be called once per row).

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – tableViewLockDataSource: -

    - -
    -
    - -
    - - -
    -

    Indicator to lock the data source for data fetching in async mode. -We should not update the data source until the data source has been unlocked. Otherwise, it will incur data inconsistency or exception -due to the data access in async mode. (Deprecated: The data source is always accessed on the main thread, and this method will not be called.)

    -
    - - - -
    - (void)tableViewLockDataSource:(ASTableView *)tableView
    - - - -
    -

    Parameters

    - - - - - - - -
    tableView

    The sender.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – tableViewUnlockDataSource: -

    - -
    -
    - -
    - - -
    -

    Indicator to unlock the data source for data fetching in asyn mode. -We should not update the data source until the data source has been unlocked. Otherwise, it will incur data inconsistency or exception -due to the data access in async mode. (Deprecated: The data source is always accessed on the main thread, and this method will not be called.)

    -
    - - - -
    - (void)tableViewUnlockDataSource:(ASTableView *)tableView
    - - - -
    -

    Parameters

    - - - - - - - -
    tableView

    The sender.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASTableDelegate.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASTableDelegate.html deleted file mode 100755 index 993e7cac16..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASTableDelegate.html +++ /dev/null @@ -1,758 +0,0 @@ - - - - - - ASTableDelegate Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASTableDelegate Protocol Reference

    - - -
    - - - - - - - -
    Conforms toASCommonTableViewDelegate
    NSObject
    Declared inASTableNode.h
    - - - - -
    - -

    Overview

    -

    This is a node-based UITableViewDelegate.

    - -

    Note that -tableView:heightForRowAtIndexPath: has been removed; instead, your custom ASCellNode subclasses are -responsible for deciding their preferred onscreen height in -calculateSizeThatFits:.

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – tableNode:constrainedSizeForRowAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Provides the constrained size range for measuring the row at the index path. -Note: the widths in the returned size range are ignored!

    -
    - - - -
    - (ASSizeRange)tableNode:(ASTableNode *)tableNode constrainedSizeForRowAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    tableNode

    The sender.

    indexPath

    The index path of the node.

    -
    - - - -
    -

    Return Value

    -

    A constrained size range for layout the node at this index path.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – tableNode:willBeginBatchFetchWithContext: -

    - -
    -
    - -
    - - -
    -

    Receive a message that the tableView is near the end of its data set and more data should be fetched if necessary.

    -
    - - - -
    - (void)tableNode:(ASTableNode *)tableNode willBeginBatchFetchWithContext:(ASBatchContext *)context
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    context

    A context object that must be notified when the batch fetch is completed.

    tableView

    The sender.

    -
    - - - - - - - -
    -

    Discussion

    -

    You must eventually call -completeBatchFetching: with an argument of YES in order to receive future -notifications to do batch fetches. This method is called on a background queue.

    - -

    ASTableView currently only supports batch events for tail loads. If you require a head load, consider implementing a -UIRefreshControl.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – shouldBatchFetchForTableNode: -

    - -
    -
    - -
    - - -
    -

    Tell the tableView if batch fetching should begin.

    -
    - - - -
    - (BOOL)shouldBatchFetchForTableNode:(ASTableNode *)tableNode
    - - - -
    -

    Parameters

    - - - - - - - -
    tableView

    The sender.

    -
    - - - - - - - -
    -

    Discussion

    -

    Use this method to conditionally fetch batches. Example use cases are: limiting the total number of -objects that can be fetched or no network connection.

    - -

    If not implemented, the tableView assumes that it should notify its asyncDelegate when batch fetching -should occur.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – tableView:willDisplayNode:forRowAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Informs the delegate that the table view will add the given node -at the given index path to the view hierarchy.

    -
    - - - -
    - (void)tableView:(ASTableView *)tableView willDisplayNode:(ASCellNode *)node forRowAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    tableView

    The sender.

    node

    The node that will be displayed.

    indexPath

    The index path of the row that will be displayed.

    -
    - - - - - - - -
    -

    Discussion

    -

    Warning: AsyncDisplayKit processes table view edits asynchronously. The index path -passed into this method may not correspond to the same item in your data source -if your data source has been updated since the last edit was processed.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – tableView:didEndDisplayingNode:forRowAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Informs the delegate that the table view did remove the provided node from the view hierarchy. -This may be caused by the node scrolling out of view, or by deleting the row -or its containing section with @c deleteRowsAtIndexPaths:withRowAnimation: or @c deleteSections:withRowAnimation: .

    -
    - - - -
    - (void)tableView:(ASTableView *)tableView didEndDisplayingNode:(ASCellNode *)node forRowAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    tableView

    The sender.

    node

    The node which was removed from the view hierarchy.

    indexPath

    The index path at which the node was located before the removal.

    -
    - - - - - - - -
    -

    Discussion

    -

    Warning: AsyncDisplayKit processes table view edits asynchronously. The index path -passed into this method may not correspond to the same item in your data source -if your data source has been updated since the last edit was processed.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – tableView:willBeginBatchFetchWithContext: -

    - -
    -
    - -
    - - -
    -

    Receive a message that the tableView is near the end of its data set and more data should be fetched if necessary.

    -
    - - - -
    - (void)tableView:(ASTableView *)tableView willBeginBatchFetchWithContext:(ASBatchContext *)context
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    tableView

    The sender.

    context

    A context object that must be notified when the batch fetch is completed.

    -
    - - - - - - - -
    -

    Discussion

    -

    You must eventually call -completeBatchFetching: with an argument of YES in order to receive future -notifications to do batch fetches. This method is called on a background queue.

    - -

    ASTableView currently only supports batch events for tail loads. If you require a head load, consider implementing a -UIRefreshControl.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – shouldBatchFetchForTableView: -

    - -
    -
    - -
    - - -
    -

    Tell the tableView if batch fetching should begin.

    -
    - - - -
    - (BOOL)shouldBatchFetchForTableView:(ASTableView *)tableView
    - - - -
    -

    Parameters

    - - - - - - - -
    tableView

    The sender.

    -
    - - - - - - - -
    -

    Discussion

    -

    Use this method to conditionally fetch batches. Example use cases are: limiting the total number of -objects that can be fetched or no network connection.

    - -

    If not implemented, the tableView assumes that it should notify its asyncDelegate when batch fetching -should occur.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – tableView:constrainedSizeForRowAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Provides the constrained size range for measuring the row at the index path. -Note: the widths in the returned size range are ignored!

    -
    - - - -
    - (ASSizeRange)tableView:(ASTableView *)tableView constrainedSizeForRowAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    tableView

    The sender.

    indexPath

    The index path of the node.

    -
    - - - -
    -

    Return Value

    -

    A constrained size range for layout the node at this index path.

    -
    - - - - - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    - -

    – tableView:willDisplayNodeForRowAtIndexPath: -

    - -
    -
    - -
    - - -
    -

    Informs the delegate that the table view will add the node -at the given index path to the view hierarchy.

    -
    - - - -
    - (void)tableView:(ASTableView *)tableView willDisplayNodeForRowAtIndexPath:(NSIndexPath *)indexPath
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    tableView

    The sender.

    indexPath

    The index path of the row that will be displayed.

    -
    - - - - - - - -
    -

    Discussion

    -

    Warning: AsyncDisplayKit processes table view edits asynchronously. The index path -passed into this method may not correspond to the same item in your data source -if your data source has been updated since the last edit was processed.

    - -

    This method is deprecated. Use @c tableView:willDisplayNode:forRowAtIndexPath: instead.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTableNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASTextNodeDelegate.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASTextNodeDelegate.html deleted file mode 100755 index a5945ed623..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASTextNodeDelegate.html +++ /dev/null @@ -1,450 +0,0 @@ - - - - - - ASTextNodeDelegate Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASTextNodeDelegate Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASTextNode.h
    - - - - - - - - -
    - - - - - - -
    -
    - -

    – textNode:tappedLinkAttribute:value:atPoint:textRange: -

    - -
    -
    - -
    - - -
    -

    Indicates to the delegate that a link was tapped within a text node.

    -
    - - - -
    - (void)textNode:(ASTextNode *)textNode tappedLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point textRange:(NSRange)textRange
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    textNode

    The ASTextNode containing the link that was tapped.

    attribute

    The attribute that was tapped. Will not be nil.

    value

    The value of the tapped attribute.

    point

    The point within textNode, in textNode’s coordinate system, that was tapped.

    textRange

    The range of highlighted text.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

    – textNode:longPressedLinkAttribute:value:atPoint:textRange: -

    - -
    -
    - -
    - - -
    -

    Indicates to the delegate that a link was tapped within a text node.

    -
    - - - -
    - (void)textNode:(ASTextNode *)textNode longPressedLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point textRange:(NSRange)textRange
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    textNode

    The ASTextNode containing the link that was tapped.

    attribute

    The attribute that was tapped. Will not be nil.

    value

    The value of the tapped attribute.

    point

    The point within textNode, in textNode’s coordinate system, that was tapped.

    textRange

    The range of highlighted text.

    -
    - - - - - - - -
    -

    Discussion

    -

    In addition to implementing this method, the delegate must be set on the text - node before it is loaded (the recognizer is created in -didLoad)

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

    – textNode:shouldHighlightLinkAttribute:value:atPoint: -

    - -
    -
    - -
    - - -
    -

    Indicates to the text node if an attribute should be considered a link.

    -
    - - - -
    - (BOOL)textNode:(ASTextNode *)textNode shouldHighlightLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - -
    textNode

    The text node containing the entity attribute.

    attribute

    The attribute that was tapped. Will not be nil.

    value

    The value of the tapped attribute.

    point

    The point within textNode, in textNode’s coordinate system, that was touched to trigger a highlight.

    -
    - - - -
    -

    Return Value

    -

    YES if the entity attribute should be a link, NO otherwise.

    -
    - - - - - -
    -

    Discussion

    -

    If not implemented, the default value is YES.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    - -

    – textNode:shouldLongPressLinkAttribute:value:atPoint: -

    - -
    -
    - -
    - - -
    -

    Indicates to the text node if an attribute is a valid long-press target

    -
    - - - -
    - (BOOL)textNode:(ASTextNode *)textNode shouldLongPressLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - - - - -
    textNode

    The text node containing the entity attribute.

    attribute

    The attribute that was tapped. Will not be nil.

    value

    The value of the tapped attribute.

    point

    The point within textNode, in textNode’s coordinate system, that was long-pressed.

    -
    - - - -
    -

    Return Value

    -

    YES if the entity attribute should be treated as a long-press target, NO otherwise.

    -
    - - - - - -
    -

    Discussion

    -

    If not implemented, the default value is NO.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASTextNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASVideoNodeDelegate.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASVideoNodeDelegate.html deleted file mode 100755 index 10b8f8505f..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASVideoNodeDelegate.html +++ /dev/null @@ -1,729 +0,0 @@ - - - - - - ASVideoNodeDelegate Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASVideoNodeDelegate Protocol Reference

    - - -
    - - - - - - - -
    Conforms toASNetworkImageNodeDelegate
    Declared inASVideoNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – videoDidPlayToEnd: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when the node’s video has played to its end time.

    -
    - - - -
    - (void)videoDidPlayToEnd:(ASVideoNode *)videoNode
    - - - -
    -

    Parameters

    - - - - - - - -
    videoNode

    The video node has played to its end time.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoNode.h

    -
    - - -
    -
    -
    - -

    – didTapVideoNode: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked the node is tapped.

    -
    - - - -
    - (void)didTapVideoNode:(ASVideoNode *)videoNode
    - - - -
    -

    Parameters

    - - - - - - - -
    videoNode

    The video node that was tapped.

    -
    - - - - - - - -
    -

    Discussion

    -

    The video’s play state is toggled if this method is not implemented.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASVideoNode.h

    -
    - - -
    -
    -
    - -

    – videoNode:willChangePlayerState:toState: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when player changes state.

    -
    - - - -
    - (void)videoNode:(ASVideoNode *)videoNode willChangePlayerState:(ASVideoNodePlayerState)state toState:(ASVideoNodePlayerState)toState
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    videoNode

    The video node.

    state

    player state before this change.

    toState

    player new state.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method is called after each state change

    -
    - - - - - - - -
    -

    Declared In

    -

    ASVideoNode.h

    -
    - - -
    -
    -
    - -

    – videoNode:shouldChangePlayerStateTo: -

    - -
    -
    - -
    - - -
    -

    Ssks delegate if state change is allowed -ASVideoNodePlayerStatePlaying or ASVideoNodePlayerStatePaused. -asks delegate if state change is allowed.

    -
    - - - -
    - (BOOL)videoNode:(ASVideoNode *)videoNode shouldChangePlayerStateTo:(ASVideoNodePlayerState)state
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    videoNode

    The video node.

    state

    player state that is going to be set.

    -
    - - - - - - - -
    -

    Discussion

    -

    Delegate method invoked when player changes it’s state to -ASVideoNodePlayerStatePlaying or ASVideoNodePlayerStatePaused -and asks delegate if state change is valid

    -
    - - - - - - - -
    -

    Declared In

    -

    ASVideoNode.h

    -
    - - -
    -
    -
    - -

    – videoNode:didPlayToTimeInterval: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when player playback time is updated.

    -
    - - - -
    - (void)videoNode:(ASVideoNode *)videoNode didPlayToTimeInterval:(NSTimeInterval)timeInterval
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    videoNode

    The video node.

    second

    current playback time in seconds.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoNode.h

    -
    - - -
    -
    -
    - -

    – videoNode:didStallAtTimeInterval: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when the video player stalls.

    -
    - - - -
    - (void)videoNode:(ASVideoNode *)videoNode didStallAtTimeInterval:(NSTimeInterval)timeInterval
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    videoNode

    The video node that has experienced the stall

    second

    Current playback time when the stall happens

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoNode.h

    -
    - - -
    -
    -
    - -

    – videoNodeDidStartInitialLoading: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when the video player starts the inital asset loading

    -
    - - - -
    - (void)videoNodeDidStartInitialLoading:(ASVideoNode *)videoNode
    - - - -
    -

    Parameters

    - - - - - - - -
    videoNode

    The videoNode

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoNode.h

    -
    - - -
    -
    -
    - -

    – videoNodeDidFinishInitialLoading: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when the video is done loading the asset and can start the playback

    -
    - - - -
    - (void)videoNodeDidFinishInitialLoading:(ASVideoNode *)videoNode
    - - - -
    -

    Parameters

    - - - - - - - -
    videoNode

    The videoNode

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoNode.h

    -
    - - -
    -
    -
    - -

    – videoNode:didSetCurrentItem: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when the AVPlayerItem for the asset has been set up and can be accessed throught currentItem.

    -
    - - - -
    - (void)videoNode:(ASVideoNode *)videoNode didSetCurrentItem:(AVPlayerItem *)currentItem
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    videoNode

    The videoNode.

    currentItem

    The AVPlayerItem that was constructed from the asset.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoNode.h

    -
    - - -
    -
    -
    - -

    – videoNodeDidRecoverFromStall: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when the video node has recovered from the stall

    -
    - - - -
    - (void)videoNodeDidRecoverFromStall:(ASVideoNode *)videoNode
    - - - -
    -

    Parameters

    - - - - - - - -
    videoNode

    The videoNode

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASVideoPlayerNodeDelegate.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASVideoPlayerNodeDelegate.html deleted file mode 100755 index 89faa40314..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASVideoPlayerNodeDelegate.html +++ /dev/null @@ -1,940 +0,0 @@ - - - - - - ASVideoPlayerNodeDelegate Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASVideoPlayerNodeDelegate Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASVideoPlayerNode.h
    - - - - - - -
    - - - - - - -
    -
    - -

    – videoPlayerNodeNeededDefaultControls: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked before creating controlbar controls -@param videoPlayer

    -
    - - - -
    - (NSArray *)videoPlayerNodeNeededDefaultControls:(ASVideoPlayerNode *)videoPlayer
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    - -

    – videoPlayerNodeCustomControls: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked before creating default controls, asks delegate for custom controls dictionary. -This dictionary must constain only ASDisplayNode subclass objects. -@param videoPlayer

    -
    - - - -
    - (NSDictionary *)videoPlayerNodeCustomControls:(ASVideoPlayerNode *)videoPlayer
    - - - - - - - - - -
    -

    Discussion

    -
      -
    • This method is invoked only when developer implements videoPlayerNodeLayoutSpec:forControls:forMaximumSize: -and gives ability to add custom constrols to ASVideoPlayerNode, for example mute button.
    • -
    - -
    - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    - -

    – videoPlayerNodeLayoutSpec:forControls:forMaximumSize: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked in layoutSpecThatFits: -@param videoPlayer

    -
    - - - -
    - (ASLayoutSpec *)videoPlayerNodeLayoutSpec:(ASVideoPlayerNode *)videoPlayer forControls:(NSDictionary *)controls forMaximumSize:(CGSize)maxSize
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    controls
      -
    • Dictionary of controls which are used in videoPlayer; Dictionary keys are ASVideoPlayerNodeControlType
    • -
    -
    maxSize
      -
    • Maximum size for ASVideoPlayerNode
    • -
    -
    -
    - - - - - - - -
    -

    Discussion

    -
      -
    • Developer can layout whole ASVideoPlayerNode as he wants. ASVideoNode is locked and it can’t be changed
    • -
    - -
    - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    - -

    – videoPlayerNodeTimeLabelAttributes:timeLabelType: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked before creating ASVideoPlayerNodeControlTypeElapsedText and ASVideoPlayerNodeControlTypeDurationText -@param videoPlayer -@param timeLabelType

    -
    - - - -
    - (NSDictionary *)videoPlayerNodeTimeLabelAttributes:(ASVideoPlayerNode *)videoPlayerNode timeLabelType:(ASVideoPlayerNodeControlType)timeLabelType
    - - - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    - -

    – didTapVideoPlayerNode: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when ASVideoPlayerNode is taped.

    -
    - - - -
    - (void)didTapVideoPlayerNode:(ASVideoPlayerNode *)videoPlayer
    - - - -
    -

    Parameters

    - - - - - - - -
    videoPlayerNode

    The ASVideoPlayerNode that was tapped.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    - -

    – videoPlayerNode:didPlayToTime: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when ASVideoNode playback time is updated.

    -
    - - - -
    - (void)videoPlayerNode:(ASVideoPlayerNode *)videoPlayer didPlayToTime:(CMTime)time
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    second

    current playback time.

    videoPlayerNode

    The video player node

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    - -

    – videoPlayerNode:willChangeVideoNodeState:toVideoNodeState: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when ASVideoNode changes state.

    -
    - - - -
    - (void)videoPlayerNode:(ASVideoPlayerNode *)videoPlayer willChangeVideoNodeState:(ASVideoNodePlayerState)state toVideoNodeState:(ASVideoNodePlayerState)toState
    - - - -
    -

    Parameters

    - - - - - - - - - - - - - - - - - -
    state

    ASVideoNode state before this change.

    videoPlayerNode

    The ASVideoPlayerNode whose ASVideoNode is changing state.

    toSate

    ASVideoNode new state.

    -
    - - - - - - - -
    -

    Discussion

    -

    This method is called after each state change

    -
    - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    - -

    – videoPlayerNode:shouldChangeVideoNodeStateTo: -

    - -
    -
    - -
    - - -
    -

    Delegate method is invoked when ASVideoNode decides to change state.

    -
    - - - -
    - (BOOL)videoPlayerNode:(ASVideoPlayerNode *)videoPlayer shouldChangeVideoNodeStateTo:(ASVideoNodePlayerState)state
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    state

    ASVideoNode that is going to be set.

    videoPlayerNode

    The ASVideoPlayerNode whose ASVideoNode is changing state.

    -
    - - - - - - - -
    -

    Discussion

    -

    Delegate method invoked when player changes it’s state to -ASVideoNodePlayerStatePlaying or ASVideoNodePlayerStatePaused -and asks delegate if state change is valid

    -
    - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    - -

    – videoPlayerNodeDidPlayToEnd: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when the ASVideoNode has played to its end time.

    -
    - - - -
    - (void)videoPlayerNodeDidPlayToEnd:(ASVideoPlayerNode *)videoPlayer
    - - - -
    -

    Parameters

    - - - - - - - -
    videoPlayer

    The video node has played to its end time.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    - -

    – videoPlayerNode:didSetCurrentItem: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when the ASVideoNode has constructed its AVPlayerItem for the asset.

    -
    - - - -
    - (void)videoPlayerNode:(ASVideoPlayerNode *)videoPlayer didSetCurrentItem:(AVPlayerItem *)currentItem
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    videoPlayer

    The video player node.

    currentItem

    The AVPlayerItem that was constructed from the asset.

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    - -

    – videoPlayerNode:didStallAtTimeInterval: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when the ASVideoNode stalls.

    -
    - - - -
    - (void)videoPlayerNode:(ASVideoPlayerNode *)videoPlayer didStallAtTimeInterval:(NSTimeInterval)timeInterval
    - - - -
    -

    Parameters

    - - - - - - - - - - - - -
    videoPlayer

    The video player node that has experienced the stall

    second

    Current playback time when the stall happens

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    - -

    – videoPlayerNodeDidStartInitialLoading: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when the ASVideoNode starts the inital asset loading

    -
    - - - -
    - (void)videoPlayerNodeDidStartInitialLoading:(ASVideoPlayerNode *)videoPlayer
    - - - -
    -

    Parameters

    - - - - - - - -
    videoPlayer

    The videoPlayer

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    - -

    – videoPlayerNodeDidFinishInitialLoading: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when the ASVideoNode is done loading the asset and can start the playback

    -
    - - - -
    - (void)videoPlayerNodeDidFinishInitialLoading:(ASVideoPlayerNode *)videoPlayer
    - - - -
    -

    Parameters

    - - - - - - - -
    videoPlayer

    The videoPlayer

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    - -

    – videoPlayerNodeDidRecoverFromStall: -

    - -
    -
    - -
    - - -
    -

    Delegate method invoked when the ASVideoNode has recovered from the stall

    -
    - - - -
    - (void)videoPlayerNodeDidRecoverFromStall:(ASVideoPlayerNode *)videoPlayer
    - - - -
    -

    Parameters

    - - - - - - - -
    videoPlayer

    The videoplayer

    -
    - - - - - - - - - - - - - -
    -

    Declared In

    -

    ASVideoPlayerNode.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASVisibilityDepth.html b/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASVisibilityDepth.html deleted file mode 100755 index 29597c887f..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/Protocols/ASVisibilityDepth.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - ASVisibilityDepth Protocol Reference - - - - - - -
    -
    - -

    - -

    - -

    - Texture -

    - -
    -
    - - - -
    -
    -
    -
    -

    ASVisibilityDepth Protocol Reference

    - - -
    - - - - - - - -
    Conforms toNSObject
    Declared inASVisibilityProtocols.h
    - - - - -
    - -

    Overview

    -

    ASVisibilityDepth

    “Visibility Depth” represents the number of user actions required to make an ASDisplayNode or -ASViewController visibile. Texture uses this information to intelligently manage memory and focus -resources where they are most visible to the user.

    - -

    The ASVisibilityDepth protocol describes how custom view controllers can integrate with this system.

    - -

    Parent view controllers should also implement @c ASManagesChildVisibilityDepth

    -
    - - - - - -
    - - - - - - -
    -
    - -

    – visibilityDepth -required method

    - -
    -
    - -
    - - -
    -

    Visibility depth

    -
    - - - -
    - (NSInteger)visibilityDepth
    - - - - - - - - - -
    -

    Discussion

    -

    Represents the number of user actions necessary to reach the view controller. An increased visibility -depth indicates a higher number of user interactions for the view controller to be visible again. For example, -an onscreen navigation controller’s top view controller should have a visibility depth of 0. The view controller -one from the top should have a visibility deptch of 1 as should the root view controller in the stack (because -the user can hold the back button to pop to the root view controller).

    - -

    Visibility depth is used to automatically adjust ranges on range controllers (and thus free up memory) and can -be used to reduce memory usage of other items as well.

    -
    - - - - - - - -
    -

    Declared In

    -

    ASVisibilityProtocols.h

    -
    - - -
    -
    -
    - -

    – visibilityDepthDidChange -required method

    - -
    -
    - -
    - - -
    -

    Called when visibility depth changes

    -
    - - - -
    - (void)visibilityDepthDidChange
    - - - - - - - - - -
    -

    Discussion

    -

    @c visibilityDepthDidChange is called whenever the visibility depth of the represented view controller -has changed.

    - -

    If implemented by a view controller container, use this method to notify child view controllers that their view -depth has changed @see ASNavigationController.m

    - -

    If implemented on an ASViewController, use this method to reduce or increase the resources that your -view controller uses. A higher visibility depth view controller should decrease it’s resource usage, a lower -visibility depth controller should pre-warm resources in preperation for a display at 0 depth.

    - -

    ASViewController implements this method and reduces / increases range mode of supporting nodes (such as ASCollectionNode -and ASTableNode).

    -
    - - - - - -
    -

    See Also

    - -
    - - - -
    -

    Declared In

    -

    ASVisibilityProtocols.h

    -
    - - -
    -
    -
    -
    - -
    - - - - - - -
    - -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_index.scss b/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_index.scss deleted file mode 100755 index 6a57ec5dc3..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_index.scss +++ /dev/null @@ -1,17 +0,0 @@ -.index-container { - -webkit-flex-direction: column; - flex-direction: column; - - @media (min-width: $desktop-min-width) { - display: flex; - -webkit-flex-direction: row; - flex-direction: row; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; - } - - .index-column { - -webkit-flex: 1 1 33%; - flex: 1 1 33%; - } -} diff --git a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_layout.scss b/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_layout.scss deleted file mode 100755 index da46aef079..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_layout.scss +++ /dev/null @@ -1,302 +0,0 @@ -* { - box-sizing: border-box; -} - -.clear { - clear: both; -} - -.clearfix { - &:before, &:after { - clear: both; - display: table; - content: ""; - } -} - -.xcode .hide-in-xcode { - display: none; -} - -body { - font: 62.5% $body-font; - background: $body-background; - - @media (max-width: $mobile-max-width) { - background-color: $content-background; - } -} - -h1, h2, h3 { - font-weight: 300; - color: #808080; -} - -h1 { - font-size: 2em; - color: #000; -} - -h4 { - font-size: 13px; - line-height: 1.5; - margin: 21px 0 0 0; -} - -a { - color: $tint-color; - text-decoration: none; -} - -pre, code { - font-family: $code-font; - word-wrap: break-word; -} - -pre > code, .method-declaration code { - display: inline-block; - font-size: .85em; - padding: 4px 0 4px 10px; - border-left: 5px solid rgba(0, 155, 51, .2); - - &:before { - content: "Objective-C"; - display: block; - - font: 9px/1 $body-font; - color: #009b33; - text-transform: uppercase; - letter-spacing: 2px; - padding-bottom: 6px; - } -} - -pre > code { - font-size: inherit; -} - -table, th, td { - border: 1px solid #e9e9e9; -} - -table { - width: 100%; -} - -th, td { - padding: 7px; - - > :first-child { - margin-top: 0; - } - - > :last-child { - margin-bottom: 0; - } -} - -.container { - @extend .clearfix; - - max-width: 980px; - padding: 0 10px; - margin: 0 auto; - - @media (max-width: $mobile-max-width) { - padding: 0; - } -} - -header { - position: fixed; - top: 0; - left: 0; - width: 100%; - z-index: 2; - - background: #414141; - color: #fff; - font-size: 1.1em; - line-height: 25px; - letter-spacing: .05em; - - #library-title { - float: left; - } - - #developer-home { - float: right; - } - - h1 { - font-size: inherit; - font-weight: inherit; - margin: 0; - } - - p { - margin: 0; - } - - h1, a { - color: inherit; - } - - @media (max-width: $mobile-max-width) { - .container { - padding: 0 10px; - } - } -} - -aside { - position: fixed; - top: 25px; - left: 0; - width: 100%; - height: 25px; - z-index: 2; - - font-size: 1.1em; - - #header-buttons { - background: rgba(255, 255, 255, .8); - margin: 0 1px; - padding: 0; - list-style: none; - text-align: right; - line-height: 32px; - - li { - display: inline-block; - cursor: pointer; - padding: 0 10px; - } - - label, select { - cursor: inherit; - } - - #on-this-page { - position: relative; - - .chevron { - display: inline-block; - width: 14px; - height: 4px; - position: relative; - - .chevy { - background: #878787; - height: 2px; - position: absolute; - width: 10px; - - &.chevron-left { - left: 0; - transform: rotateZ(45deg) scale(0.6); - } - - &.chevron-right { - right: 0; - transform: rotateZ(-45deg) scale(0.6); - } - } - } - - #jump-to { - opacity: 0; - font-size: 16px; - - position: absolute; - top: 5px; - left: 0; - width: 100%; - height: 100%; - } - } - } -} - -article { - margin-top: 25px; - - #content { - @extend .clearfix; - - background: $content-background; - border: 1px solid $content-border; - padding: 15px 25px 30px 25px; - - font-size: 1.4em; - line-height: 1.45; - - position: relative; - - @media (max-width: $mobile-max-width) { - padding: 15px 10px 20px 10px; - border: none; - } - - .navigation-top { - position: absolute; - top: 15px; - right: 25px; - } - - .title { - margin: 21px 0 0 0; - padding: 15px 0; - } - - p { - color: #414141; - margin: 0 0 15px 0; - } - - th, td { - p:last-child { - margin-bottom: 0; - } - } - - main { - ul { - list-style: none; - margin-left: 24px; - margin-bottom: 12px; - padding: 0; - - li { - position: relative; - padding-left: 1.3em; - - &:before { - content: "\02022"; - - color: #414141; - font-size: 1.08em; - line-height: 1; - - position: absolute; - left: 0; - padding-top: 2px; - } - } - } - } - - footer { - @extend .clearfix; - - .footer-copyright { - margin: 70px 25px 10px 0; - } - - p { - font-size: .71em; - color: #a0a0a0; - } - } - } -} diff --git a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_normalize.scss b/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_normalize.scss deleted file mode 100755 index 9b8848a5cf..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_normalize.scss +++ /dev/null @@ -1,581 +0,0 @@ -/* ========================================================================== - Normalize.scss settings - ========================================================================== */ -/** - * Includes legacy browser support IE6/7 - * - * Set to false if you want to drop support for IE6 and IE7 - */ - -$legacy_browser_support: false !default; - -/* Base - ========================================================================== */ - -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - * 3. Corrects text resizing oddly in IE 6/7 when body `font-size` is set using - * `em` units. - */ - -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ - @if $legacy_browser_support { - *font-size: 100%; /* 3 */ - } -} - -/** - * Remove default margin. - */ - -body { - margin: 0; -} - -/* HTML5 display definitions - ========================================================================== */ - -/** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} - -/** - * 1. Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. - */ - -audio, -canvas, -progress, -video { - display: inline-block; /* 1 */ - vertical-align: baseline; /* 2 */ - @if $legacy_browser_support { - *display: inline; - *zoom: 1; - } -} - -/** - * Prevents modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. - */ - -[hidden], -template { - display: none; -} - -/* Links - ========================================================================== */ - -/** - * Remove the gray background color from active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ - -a { - &:active, &:hover { - outline: 0; - }; -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -@if $legacy_browser_support { - blockquote { - margin: 1em 40px; - } -} - -/** - * Address styling not present in Safari and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -@if $legacy_browser_support { - h2 { - font-size: 1.5em; - margin: 0.83em 0; - } - - h3 { - font-size: 1.17em; - margin: 1em 0; - } - - h4 { - font-size: 1em; - margin: 1.33em 0; - } - - h5 { - font-size: 0.83em; - margin: 1.67em 0; - } - - h6 { - font-size: 0.67em; - margin: 2.33em 0; - } -} - -/** - * Addresses styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -@if $legacy_browser_support { - - /** - * Addresses margins set differently in IE 6/7. - */ - - p, - pre { - *margin: 1em 0; - } - - /* - * Addresses CSS quotes not supported in IE 6/7. - */ - - q { - *quotes: none; - } - - /* - * Addresses `quotes` property not supported in Safari 4. - */ - - q:before, - q:after { - content: ''; - content: none; - } -} - -/** - * Address inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -@if $legacy_browser_support { - - /* ========================================================================== - Lists - ========================================================================== */ - - /* - * Addresses margins set differently in IE 6/7. - */ - - dl, - menu, - ol, - ul { - *margin: 1em 0; - } - - dd { - *margin: 0 0 0 40px; - } - - /* - * Addresses paddings set differently in IE 6/7. - */ - - menu, - ol, - ul { - *padding: 0 0 0 40px; - } - - /* - * Corrects list images handled incorrectly in IE 7. - */ - - nav ul, - nav ol { - *list-style: none; - *list-style-image: none; - } - -} - -/* Embedded content - ========================================================================== */ - -/** - * 1. Remove border when inside `a` element in IE 8/9/10. - * 2. Improves image quality when scaled in IE 7. - */ - -img { - border: 0; - @if $legacy_browser_support { - *-ms-interpolation-mode: bicubic; /* 2 */ - } -} - -/** - * Correct overflow not hidden in IE 9/10/11. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* Grouping content - ========================================================================== */ - -/** - * Address margin not present in IE 8/9 and Safari. - */ - -figure { - margin: 1em 40px; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -/** - * Contain overflow in all browsers. - */ - -pre { - overflow: auto; -} - -/** - * Address odd `em`-unit font size rendering in all browsers. - * Correct font family set oddly in IE 6, Safari 4/5, and Chrome. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - @if $legacy_browser_support { - _font-family: 'courier new', monospace; - } - font-size: 1em; -} - -/* Forms - ========================================================================== */ - -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ - -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. - * 4. Improves appearance and consistency in all browsers. - */ - -button, -input, -optgroup, -select, -textarea { - color: inherit; /* 1 */ - font: inherit; /* 2 */ - margin: 0; /* 3 */ - @if $legacy_browser_support { - vertical-align: baseline; /* 3 */ - *vertical-align: middle; /* 3 */ - } -} - -/** - * Address `overflow` set to `hidden` in IE 8/9/10/11. - */ - -button { - overflow: visible; -} - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. - */ - -button, -select { - text-transform: none; -} - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - * 4. Removes inner spacing in IE 7 without affecting normal text inputs. - * Known issue: inner spacing remains in IE 6. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ - @if $legacy_browser_support { - *overflow: visible; /* 4 */ - } -} - -/** - * Re-set default cursor for disabled elements. - */ - -button[disabled], -html input[disabled] { - cursor: default; -} - -/** - * Remove inner padding and border in Firefox 4+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -input { - line-height: normal; -} - -/** - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - * Known issue: excess padding remains in IE 6. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ - @if $legacy_browser_support { - *height: 13px; /* 3 */ - *width: 13px; /* 3 */ - } -} - -/** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. - */ - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). - */ - -input[type="search"] { - -webkit-appearance: textfield; /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; /* 2 */ - box-sizing: content-box; -} - -/** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). - */ - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - * 3. Corrects text not wrapping in Firefox 3. - * 4. Corrects alignment displayed oddly in IE 6/7. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ - @if $legacy_browser_support { - white-space: normal; /* 3 */ - *margin-left: -7px; /* 4 */ - } -} - -/** - * Remove default vertical scrollbar in IE 8/9/10/11. - */ - -textarea { - overflow: auto; -} - -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. - */ - -optgroup { - font-weight: bold; -} - -/* Tables - ========================================================================== */ - -/** - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} diff --git a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_object.scss b/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_object.scss deleted file mode 100755 index 22eebd87d0..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_object.scss +++ /dev/null @@ -1,89 +0,0 @@ -.section-specification { - table { - width: auto; - - th { - text-align: left; - } - } -} - -.method-title { - margin-left: -15px; - margin-bottom: 8px; - transition: margin-left .3s ease-out; - - .section-method.hide & { - margin-left: 0; - } - - code { - font-weight: 400; - font-size: .85em; - } -} - -.method-info { - background: $object-background; - border-bottom: 1px solid $object-border; - margin: 0 -25px; - padding: 20px 25px 0 25px; - transition: height .3s ease-out; - - position: relative; - - .pointy-thing { - background: $content-background; - height: 10px; - border-bottom: 1px solid $object-border; - margin: -20px -25px 16px -25px; - - &:before { - display: inline-block; - content: ""; - - background: $object-background; - border: 1px solid $object-border; - border-bottom: 0; - border-right: 0; - - position: absolute; - left: 21px; - top: 3px; - width: 12px; - height: 12px; - transform: rotate(45deg); - } - } - - .method-subsection { - margin-bottom: 15px; - - .argument-name { - width: 1px; - text-align: right; - - code { - color: #808080; - font-style: italic; - font-weight: 400; - } - } - } -} - -.section-method { - &.hide .method-info { - height: 0 !important; - overflow: hidden; - display: none; - } - - &.hide.animating .method-info { - display: block; - } - - &.animating .method-info { - overflow: hidden; - } -} diff --git a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_print.scss b/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_print.scss deleted file mode 100755 index 61bdf99f86..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_print.scss +++ /dev/null @@ -1,42 +0,0 @@ -@media print { - body { - background: #fff; - padding: 8px; - } - - header { - position: static; - background: #fff; - color: #000; - } - - aside { - display: none; - } - - .container { - max-width: none; - padding: 0; - } - - article { - margin-top: 0; - - #content { - border: 0; - background: #fff; - padding: 15px 0 0 0; - - .title { - margin-top: 0; - padding-top: 0; - } - } - } - - .method-info { - &, & .pointy-thing { - background: #fff; - } - } -} diff --git a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_variables.scss b/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_variables.scss deleted file mode 100755 index 38e072d310..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_variables.scss +++ /dev/null @@ -1,12 +0,0 @@ -$body-font: -apple-system-font, "Helvetica Neue", Helvetica, sans-serif; -$code-font: "Source Code Pro", Monaco, Menlo, Consolas, monospace; - -$body-background: #f2f2f2; -$content-background: #fff; -$content-border: #e9e9e9; -$tint-color: #08c; -$object-background: #f9f9f9; -$object-border: #e9e9e9; - -$mobile-max-width: 650px; -$desktop-min-width: 768px; \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_xcode.scss b/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_xcode.scss deleted file mode 100755 index 340b1f6b80..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/_xcode.scss +++ /dev/null @@ -1,29 +0,0 @@ -.xcode { - header, aside { - display: none; - } - - .container { - padding: 0; - } - - article { - margin-top: 0; - - #content { - border: 0; - margin: 0; - } - } - - .method-info { - &, .section-method.hide & { - max-height: auto; - overflow: visible; - - &.hiding { - display: block; - } - } - } -} diff --git a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/style.scss b/submodules/AsyncDisplayKit/docs/appledoc/css/scss/style.scss deleted file mode 100755 index 648a6086ba..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/css/scss/style.scss +++ /dev/null @@ -1 +0,0 @@ -@import "variables", "normalize", "layout", "index", "object", "print", "xcode"; diff --git a/submodules/AsyncDisplayKit/docs/appledoc/css/style.css b/submodules/AsyncDisplayKit/docs/appledoc/css/style.css deleted file mode 100755 index d9d59dd080..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/css/style.css +++ /dev/null @@ -1,2 +0,0 @@ -html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}.clear{clear:both}.clearfix:before,.container:before,article #content:before,article #content footer:before,.clearfix:after,.container:after,article #content:after,article #content footer:after{clear:both;display:table;content:""}.xcode .hide-in-xcode{display:none}body{font:62.5% -apple-system-font,"Helvetica Neue",Helvetica,sans-serif;background:#f2f2f2}@media (max-width: 650px){body{background-color:#fff}}h1,h2,h3{font-weight:300;color:#808080}h1{font-size:2em;color:#000}h4{font-size:13px;line-height:1.5;margin:21px 0 0 0}a{color:#08c;text-decoration:none}pre,code{font-family:"Source Code Pro",Monaco,Menlo,Consolas,monospace;word-wrap:break-word}pre>code,.method-declaration code{display:inline-block;font-size:.85em;padding:4px 0 4px 10px;border-left:5px solid rgba(0,155,51,0.2)}pre>code:before,.method-declaration code:before{content:"Objective-C";display:block;font:9px/1 -apple-system-font,"Helvetica Neue",Helvetica,sans-serif;color:#009b33;text-transform:uppercase;letter-spacing:2px;padding-bottom:6px}pre>code{font-size:inherit}table,th,td{border:1px solid #e9e9e9}table{width:100%}th,td{padding:7px}th>:first-child,td>:first-child{margin-top:0}th>:last-child,td>:last-child{margin-bottom:0}.container{max-width:980px;padding:0 10px;margin:0 auto}@media (max-width: 650px){.container{padding:0}}header{position:fixed;top:0;left:0;width:100%;z-index:2;background:#414141;color:#fff;font-size:1.1em;line-height:25px;letter-spacing:.05em}header #library-title{float:left}header #developer-home{float:right}header h1{font-size:inherit;font-weight:inherit;margin:0}header p{margin:0}header h1,header a{color:inherit}@media (max-width: 650px){header .container{padding:0 10px}}aside{position:fixed;top:25px;left:0;width:100%;height:25px;z-index:2;font-size:1.1em}aside #header-buttons{background:rgba(255,255,255,0.8);margin:0 1px;padding:0;list-style:none;text-align:right;line-height:32px}aside #header-buttons li{display:inline-block;cursor:pointer;padding:0 10px}aside #header-buttons label,aside #header-buttons select{cursor:inherit}aside #header-buttons #on-this-page{position:relative}aside #header-buttons #on-this-page .chevron{display:inline-block;width:14px;height:4px;position:relative}aside #header-buttons #on-this-page .chevron .chevy{background:#878787;height:2px;position:absolute;width:10px}aside #header-buttons #on-this-page .chevron .chevy.chevron-left{left:0;transform:rotateZ(45deg) scale(0.6)}aside #header-buttons #on-this-page .chevron .chevy.chevron-right{right:0;transform:rotateZ(-45deg) scale(0.6)}aside #header-buttons #on-this-page #jump-to{opacity:0;font-size:16px;position:absolute;top:5px;left:0;width:100%;height:100%}article{margin-top:25px}article #content{background:#fff;border:1px solid #e9e9e9;padding:15px 25px 30px 25px;font-size:1.4em;line-height:1.45;position:relative}@media (max-width: 650px){article #content{padding:15px 10px 20px 10px;border:none}}article #content .navigation-top{position:absolute;top:15px;right:25px}article #content .title{margin:21px 0 0 0;padding:15px 0}article #content p{color:#414141;margin:0 0 15px 0}article #content th p:last-child,article #content td p:last-child{margin-bottom:0}article #content main ul{list-style:none;margin-left:24px;margin-bottom:12px;padding:0}article #content main ul li{position:relative;padding-left:1.3em}article #content main ul li:before{content:"\02022";color:#414141;font-size:1.08em;line-height:1;position:absolute;left:0;padding-top:2px}article #content footer .footer-copyright{margin:70px 25px 10px 0}article #content footer p{font-size:.71em;color:#a0a0a0}.index-container{-webkit-flex-direction:column;flex-direction:column}@media (min-width: 768px){.index-container{display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap}}.index-container .index-column{-webkit-flex:1 1 33%;flex:1 1 33%}.section-specification table{width:auto}.section-specification table th{text-align:left}.method-title{margin-left:-15px;margin-bottom:8px;transition:margin-left .3s ease-out}.section-method.hide .method-title{margin-left:0}.method-title code{font-weight:400;font-size:.85em}.method-info{background:#f9f9f9;border-bottom:1px solid #e9e9e9;margin:0 -25px;padding:20px 25px 0 25px;transition:height .3s ease-out;position:relative}.method-info .pointy-thing{background:#fff;height:10px;border-bottom:1px solid #e9e9e9;margin:-20px -25px 16px -25px}.method-info .pointy-thing:before{display:inline-block;content:"";background:#f9f9f9;border:1px solid #e9e9e9;border-bottom:0;border-right:0;position:absolute;left:21px;top:3px;width:12px;height:12px;-webkit-transform:rotate(45deg);transform:rotate(45deg) }.method-info .method-subsection{margin-bottom:15px}.method-info .method-subsection .argument-name{width:1px;text-align:right}.method-info .method-subsection .argument-name code{color:#808080;font-style:italic;font-weight:400}.section-method.hide .method-info{height:0 !important;overflow:hidden;display:none}.section-method.hide.animating .method-info{display:block}.section-method.animating .method-info{overflow:hidden}@media print{body{background:#fff;padding:8px}header{position:static;background:#fff;color:#000}aside{display:none}.container{max-width:none;padding:0}article{margin-top:0}article #content{border:0;background:#fff;padding:15px 0 0 0}article #content .title{margin-top:0;padding-top:0}.method-info,.method-info .pointy-thing{background:#fff}}.xcode header,.xcode aside{display:none}.xcode .container{padding:0}.xcode article{margin-top:0}.xcode article #content{border:0;margin:0}.xcode .method-info,.section-method.hide .xcode .method-info{max-height:auto;overflow:visible}.xcode .method-info.hiding,.section-method.hide .xcode .method-info.hiding{display:block} - diff --git a/submodules/AsyncDisplayKit/docs/appledoc/hierarchy.html b/submodules/AsyncDisplayKit/docs/appledoc/hierarchy.html deleted file mode 100755 index f9eb61138c..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/hierarchy.html +++ /dev/null @@ -1,402 +0,0 @@ - - - - - - Hierarchy - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    Hierarchy

    - - -
    -

    Class Hierarchy

    - - - -
    - - - -
    - -

    Protocol References

    - - - -

    Constant References

    - - - -

    Category References

    - - -
    - - -
    - -
    -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/img/button_bar_background.png b/submodules/AsyncDisplayKit/docs/appledoc/img/button_bar_background.png deleted file mode 100755 index 71d1019bc0..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/appledoc/img/button_bar_background.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/appledoc/img/disclosure.png b/submodules/AsyncDisplayKit/docs/appledoc/img/disclosure.png deleted file mode 100755 index 4c5cbf4456..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/appledoc/img/disclosure.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/appledoc/img/disclosure_open.png b/submodules/AsyncDisplayKit/docs/appledoc/img/disclosure_open.png deleted file mode 100755 index 82396fed29..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/appledoc/img/disclosure_open.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/appledoc/img/library_background.png b/submodules/AsyncDisplayKit/docs/appledoc/img/library_background.png deleted file mode 100755 index 3006248afe..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/appledoc/img/library_background.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/appledoc/img/title_background.png b/submodules/AsyncDisplayKit/docs/appledoc/img/title_background.png deleted file mode 100755 index 846e4968d0..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/appledoc/img/title_background.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/appledoc/index.html b/submodules/AsyncDisplayKit/docs/appledoc/index.html deleted file mode 100755 index 27076d4fb6..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/index.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - Reference - - - - - - -
    -
    - -

    - -

    - -

    - AsyncDisplayKit -

    - -
    -
    - - - -
    -
    -
    -
    -

    Reference

    - - - -
    - - - - - - - -
    - -

    Protocol References

    - - - - -

    Constant References

    - - - - -

    Category References

    - - -
    - -
    - -
    - -
    -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/appledoc/js/script.js b/submodules/AsyncDisplayKit/docs/appledoc/js/script.js deleted file mode 100755 index 4074361c44..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledoc/js/script.js +++ /dev/null @@ -1,59 +0,0 @@ -function $() { - return document.querySelector.apply(document, arguments); -} - -if (navigator.userAgent.indexOf("Xcode") != -1) { - document.documentElement.classList.add("xcode"); -} - -var jumpTo = $("#jump-to"); - -if (jumpTo) { - jumpTo.addEventListener("change", function(e) { - location.hash = this.options[this.selectedIndex].value; - }); -} - -function hashChanged() { - if (/^#\/\/api\//.test(location.hash)) { - var element = document.querySelector("a[name='" + location.hash.substring(1) + "']"); - - if (!element) { - return; - } - - element = element.parentNode; - - element.classList.remove("hide"); - fixScrollPosition(element); - } -} - -function fixScrollPosition(element) { - var scrollTop = element.offsetTop - 150; - document.documentElement.scrollTop = scrollTop; - document.body.scrollTop = scrollTop; -} - -[].forEach.call(document.querySelectorAll(".section-method"), function(element) { - element.classList.add("hide"); - - element.querySelector(".method-title a").addEventListener("click", function(e) { - var info = element.querySelector(".method-info"), - infoContainer = element.querySelector(".method-info-container"); - - element.classList.add("animating"); - info.style.height = (infoContainer.clientHeight + 40) + "px"; - fixScrollPosition(element); - element.classList.toggle("hide"); - if (element.classList.contains("hide")) { - e.preventDefault(); - } - setTimeout(function() { - element.classList.remove("animating"); - }, 300); - }); -}); - -window.addEventListener("hashchange", hashChanged); -hashChanged(); diff --git a/submodules/AsyncDisplayKit/docs/appledocs.md b/submodules/AsyncDisplayKit/docs/appledocs.md deleted file mode 100755 index 541ea17cfc..0000000000 --- a/submodules/AsyncDisplayKit/docs/appledocs.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: api -layout: appledocs -permalink: /appledocs.html ---- - - diff --git a/submodules/AsyncDisplayKit/docs/index.md b/submodules/AsyncDisplayKit/docs/index.md deleted file mode 100755 index ad660777f4..0000000000 --- a/submodules/AsyncDisplayKit/docs/index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: default -title: A UI Framework for Effortless Responsiveness -id: home ---- - -
    -
    -
    Keeps the most complex iOS user interfaces smooth and responsive.
    - Get Started - View on GitHub -
    -
    - -
    -
    -

    Texture is an iOS framework built on top of UIKit that keeps even the most complex user interfaces smooth and responsive. It was originally built to make Facebook's Paper possible, and goes hand-in-hand with pop's physics-based animations — but it's just as powerful with UIKit Dynamics and conventional app designs. More recently, it was used to power Pinterest's app rewrite.

    - -

    As the framework has grown, many features have been added that can save developers tons of time by eliminating common boilerplate style structures common in modern iOS apps. If you've ever dealt with cell reuse bugs, tried to performantly preload data for a page or scroll style interface or even just tried to keep your app from dropping too many frames you can benefit from integrating Texture.

    - -

    To learn more, check out our docs!

    -
    -
    diff --git a/submodules/AsyncDisplayKit/docs/showcase.md b/submodules/AsyncDisplayKit/docs/showcase.md deleted file mode 100755 index 57f9ca127f..0000000000 --- a/submodules/AsyncDisplayKit/docs/showcase.md +++ /dev/null @@ -1,290 +0,0 @@ ---- -title: Showcase -layout: default -permalink: /showcase.html ---- - -
    - -
    -

    Who's using Texture?

    -

    If you're curious to see what can be accomplished with Texture, check out these apps.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - Facebook -
    - Introducing AsyncDisplayKit: For smooth and responsive apps on iOS -
    - -
    - Pinterest -
    - Re-architecting Pinterest's iOS app -
    - -
    - Buffer -
    - Smooth Scrolling in Buffer for iOS: How (and Why) We Implemented AsyncDisplayKit

    - Texture: What, Why and How -
    - -
    - Auxy -
    - 2016 Apple Design Award Winner -
    - -
    - NYT -
    - -
    - NFL -
    - -
    - Yahoo -
    - -
    - Kwaver Music -
    - -
    - This is Money -
    - -
    - JSwipe -
    - -
    - Peloton Cycle -
    - -
    - 即刻 - 不错过你惦记的每一件小事 -
    - -
    - Tripstr -
    - -
    - Fyuse -
    - -
    - ClassDojo -
    - Powering Class Story With Texture -
    - -
    - GitBucket -
    - -
    - Roposo -
    - -
    - Mishu -
    - -
    - InstaBuy -
    - -
    - Eniro -
    - -
    - Kayako -
    - -
    - Yep -
    - -
    - HakkerJobs -
    - -
    - TraceMe -
    - -
    - Pairs -
    - -
    - Sorted: Master Your Day -
    - -
    - Vingle -
    - Improvement feed performance with Texture -
    - -
    - Blendle -
    - -
    - MensXP -
    - -
    - iDiva -
    - -
    - Waplog -
    - -
    - Apollo for Reddit -
    - -
    - Wishpoke -
    - -
    - Bluebird -
    - -
    - -
    -

    If you built an app using Texture, we'd love to have your app in this showcase!

    -

    If you would like to have your app added or do not want your app featured on this page, please email textureframework@gmail.com.

    - -
    - -
    diff --git a/submodules/AsyncDisplayKit/docs/slack.md b/submodules/AsyncDisplayKit/docs/slack.md deleted file mode 100755 index 121dc4d51e..0000000000 --- a/submodules/AsyncDisplayKit/docs/slack.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: slack -layout: slack -permalink: /slack.html ---- - - - - -If the auto-invite link above does not work for you, please email textureframework@gmail.com for an invite. diff --git a/submodules/AsyncDisplayKit/docs/static/images/1-shuffle-crop.png b/submodules/AsyncDisplayKit/docs/static/images/1-shuffle-crop.png deleted file mode 100755 index d1e0a83b0c..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/1-shuffle-crop.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/Texturelogo.png b/submodules/AsyncDisplayKit/docs/static/images/Texturelogo.png deleted file mode 100644 index cf669bef16..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/Texturelogo.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/Texturelogo@2x.png b/submodules/AsyncDisplayKit/docs/static/images/Texturelogo@2x.png deleted file mode 100644 index 3ad259d962..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/Texturelogo@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/basicMap.png b/submodules/AsyncDisplayKit/docs/static/images/basicMap.png deleted file mode 100755 index b387adc082..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/basicMap.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/catsButt.png b/submodules/AsyncDisplayKit/docs/static/images/catsButt.png deleted file mode 100755 index 0d442faf4d..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/catsButt.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/catsFace.png b/submodules/AsyncDisplayKit/docs/static/images/catsFace.png deleted file mode 100755 index 4be93671f9..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/catsFace.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/catsMiddle.png b/submodules/AsyncDisplayKit/docs/static/images/catsMiddle.png deleted file mode 100755 index f6526eebef..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/catsMiddle.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/clip-corners.png b/submodules/AsyncDisplayKit/docs/static/images/clip-corners.png deleted file mode 100755 index cc43a0a974..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/clip-corners.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/component-controllers.png b/submodules/AsyncDisplayKit/docs/static/images/component-controllers.png deleted file mode 100755 index e882cd1f7e..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/component-controllers.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/corner-rounding-flowchart-v2.png b/submodules/AsyncDisplayKit/docs/static/images/corner-rounding-flowchart-v2.png deleted file mode 100755 index 71b50848a1..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/corner-rounding-flowchart-v2.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/corner-rounding-movement.png b/submodules/AsyncDisplayKit/docs/static/images/corner-rounding-movement.png deleted file mode 100755 index 1749d6683c..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/corner-rounding-movement.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/corner-rounding-overlap.png b/submodules/AsyncDisplayKit/docs/static/images/corner-rounding-overlap.png deleted file mode 100755 index b69b3825e6..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/corner-rounding-overlap.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/corner-rounding-scrolling.png b/submodules/AsyncDisplayKit/docs/static/images/corner-rounding-scrolling.png deleted file mode 100755 index ef29151707..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/corner-rounding-scrolling.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASCollectionView.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASCollectionView.png deleted file mode 100755 index 3aaff368e5..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASCollectionView.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASCornerLayoutSpec.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASCornerLayoutSpec.png deleted file mode 100644 index 2a3ac02101..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASCornerLayoutSpec.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASDKLayoutTransition.gif b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASDKLayoutTransition.gif deleted file mode 100755 index c75467164d..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASDKLayoutTransition.gif and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASDKTube.gif b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASDKTube.gif deleted file mode 100755 index 956a5c0440..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASDKTube.gif and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASDKgram.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASDKgram.png deleted file mode 100755 index 358dae3805..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASDKgram.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASMapNode.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASMapNode.png deleted file mode 100755 index aa605349fe..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASMapNode.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASTableViewStressTest.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASTableViewStressTest.png deleted file mode 100755 index cd7aae2d9d..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASTableViewStressTest.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASViewController.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASViewController.png deleted file mode 100755 index 545f3c8d63..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/ASViewController.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/AsyncDisplayKitOverview.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/AsyncDisplayKitOverview.png deleted file mode 100755 index 4941292c4b..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/AsyncDisplayKitOverview.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/BackgroundPropertySetting.gif b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/BackgroundPropertySetting.gif deleted file mode 100755 index e2655ef235..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/BackgroundPropertySetting.gif and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/CatDealsCollectionView.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/CatDealsCollectionView.png deleted file mode 100755 index 72f9179e94..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/CatDealsCollectionView.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/CollectionViewWithViewControllerCells.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/CollectionViewWithViewControllerCells.png deleted file mode 100755 index 078b7b945f..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/CollectionViewWithViewControllerCells.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/CustomCollectionView.gif b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/CustomCollectionView.gif deleted file mode 100755 index 8d8a2aed1e..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/CustomCollectionView.gif and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/EditableText.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/EditableText.png deleted file mode 100755 index 1aa8d6db9b..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/EditableText.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/HorizontalwithinVerticalScrolling.gif b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/HorizontalwithinVerticalScrolling.gif deleted file mode 100755 index fe722a308d..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/HorizontalwithinVerticalScrolling.gif and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/Kittens.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/Kittens.png deleted file mode 100755 index 91d9bf36fa..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/Kittens.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/LayoutSpecPlayground.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/LayoutSpecPlayground.png deleted file mode 100755 index 9ed4db7c55..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/LayoutSpecPlayground.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/Multiplex.gif b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/Multiplex.gif deleted file mode 100755 index fcb98cad62..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/Multiplex.gif and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/PagerNode.gif b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/PagerNode.gif deleted file mode 100755 index 8c13a0faea..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/PagerNode.gif and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/SocialAppLayout.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/SocialAppLayout.png deleted file mode 100755 index 33d6672102..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/SocialAppLayout.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/Swift.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/Swift.png deleted file mode 100755 index b099a17229..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/Swift.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/SynchronousConcurrency.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/SynchronousConcurrency.png deleted file mode 100755 index e0eac3788e..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/SynchronousConcurrency.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/VerticalWithinHorizontalScrolling.gif b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/VerticalWithinHorizontalScrolling.gif deleted file mode 100755 index c50474b19b..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/VerticalWithinHorizontalScrolling.gif and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/VideoTableView.png b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/VideoTableView.png deleted file mode 100755 index ddeefdc773..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/VideoTableView.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/Videos.gif b/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/Videos.gif deleted file mode 100755 index 5e5c5f2ca9..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/example-app-screenshots/Videos.gif and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-144x144.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-144x144.png deleted file mode 100755 index 68d4423f04..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-144x144.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-192x192.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-192x192.png deleted file mode 100755 index c7e107a2e3..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-192x192.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-36x36.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-36x36.png deleted file mode 100755 index b0da36b5b0..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-36x36.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-48x48.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-48x48.png deleted file mode 100755 index ed53510513..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-48x48.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-72x72.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-72x72.png deleted file mode 100755 index 97a2a20792..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-72x72.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-96x96.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-96x96.png deleted file mode 100755 index 1ea7ba4148..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/android-icon-96x96.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-114x114.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-114x114.png deleted file mode 100755 index c4f63ca5cd..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-114x114.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-120x120.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-120x120.png deleted file mode 100755 index 5e1cf1afe5..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-120x120.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-144x144.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-144x144.png deleted file mode 100755 index 68d4423f04..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-144x144.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-152x152.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-152x152.png deleted file mode 100755 index d9a225aaa4..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-152x152.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-180x180.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-180x180.png deleted file mode 100755 index 6c40cd7b1c..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-180x180.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-57x57.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-57x57.png deleted file mode 100755 index c9d74b6b30..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-57x57.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-60x60.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-60x60.png deleted file mode 100755 index 7b440c6049..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-60x60.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-72x72.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-72x72.png deleted file mode 100755 index 97a2a20792..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-72x72.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-76x76.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-76x76.png deleted file mode 100755 index 0d5dd5f9f2..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-76x76.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-precomposed.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-precomposed.png deleted file mode 100755 index 43549d71c3..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon-precomposed.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon.png deleted file mode 100755 index 43549d71c3..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/apple-icon.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/browserconfig.xml b/submodules/AsyncDisplayKit/docs/static/images/favicon/browserconfig.xml deleted file mode 100755 index c554148223..0000000000 --- a/submodules/AsyncDisplayKit/docs/static/images/favicon/browserconfig.xml +++ /dev/null @@ -1,2 +0,0 @@ - -#ffffff \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/favicon-16x16.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/favicon-16x16.png deleted file mode 100755 index 4dc8bcf4ae..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/favicon-16x16.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/favicon-32x32.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/favicon-32x32.png deleted file mode 100755 index 3ebcbef1d8..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/favicon-32x32.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/favicon-96x96.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/favicon-96x96.png deleted file mode 100755 index 1ea7ba4148..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/favicon-96x96.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/favicon.ico b/submodules/AsyncDisplayKit/docs/static/images/favicon/favicon.ico deleted file mode 100755 index ecafdea634..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/favicon.ico and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/manifest.json b/submodules/AsyncDisplayKit/docs/static/images/favicon/manifest.json deleted file mode 100755 index 013d4a6a53..0000000000 --- a/submodules/AsyncDisplayKit/docs/static/images/favicon/manifest.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "App", - "icons": [ - { - "src": "\/android-icon-36x36.png", - "sizes": "36x36", - "type": "image\/png", - "density": "0.75" - }, - { - "src": "\/android-icon-48x48.png", - "sizes": "48x48", - "type": "image\/png", - "density": "1.0" - }, - { - "src": "\/android-icon-72x72.png", - "sizes": "72x72", - "type": "image\/png", - "density": "1.5" - }, - { - "src": "\/android-icon-96x96.png", - "sizes": "96x96", - "type": "image\/png", - "density": "2.0" - }, - { - "src": "\/android-icon-144x144.png", - "sizes": "144x144", - "type": "image\/png", - "density": "3.0" - }, - { - "src": "\/android-icon-192x192.png", - "sizes": "192x192", - "type": "image\/png", - "density": "4.0" - } - ] -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/ms-icon-144x144.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/ms-icon-144x144.png deleted file mode 100755 index 68d4423f04..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/ms-icon-144x144.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/ms-icon-150x150.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/ms-icon-150x150.png deleted file mode 100755 index 8c1fc25b26..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/ms-icon-150x150.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/ms-icon-310x310.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/ms-icon-310x310.png deleted file mode 100755 index 8d43edcdc8..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/ms-icon-310x310.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/favicon/ms-icon-70x70.png b/submodules/AsyncDisplayKit/docs/static/images/favicon/ms-icon-70x70.png deleted file mode 100755 index 498e41ba17..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/favicon/ms-icon-70x70.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/flexbasis.png b/submodules/AsyncDisplayKit/docs/static/images/flexbasis.png deleted file mode 100755 index 28a9ad0b8b..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/flexbasis.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/intelligent-preloading-ranges-screenfuls.png b/submodules/AsyncDisplayKit/docs/static/images/intelligent-preloading-ranges-screenfuls.png deleted file mode 100755 index 07b08f25c6..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/intelligent-preloading-ranges-screenfuls.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/intelligent-preloading-ranges-with-names.png b/submodules/AsyncDisplayKit/docs/static/images/intelligent-preloading-ranges-with-names.png deleted file mode 100755 index b2ef62a767..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/intelligent-preloading-ranges-with-names.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/intelligent-preloading-ranges.png b/submodules/AsyncDisplayKit/docs/static/images/intelligent-preloading-ranges.png deleted file mode 100755 index de884a1390..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/intelligent-preloading-ranges.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/intelligent-preloading.png b/submodules/AsyncDisplayKit/docs/static/images/intelligent-preloading.png deleted file mode 100755 index a24f31c8ab..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/intelligent-preloading.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/kittenLink.png b/submodules/AsyncDisplayKit/docs/static/images/kittenLink.png deleted file mode 100755 index 1c46390e5e..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/kittenLink.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-api-sizing-1.png b/submodules/AsyncDisplayKit/docs/static/images/layout-api-sizing-1.png deleted file mode 100755 index dd004c3a42..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-api-sizing-1.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-api-sizing-2.png b/submodules/AsyncDisplayKit/docs/static/images/layout-api-sizing-2.png deleted file mode 100755 index 20814d8425..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-api-sizing-2.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-example-1.png b/submodules/AsyncDisplayKit/docs/static/images/layout-example-1.png deleted file mode 100755 index aac85798e5..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-example-1.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-example-2.png b/submodules/AsyncDisplayKit/docs/static/images/layout-example-2.png deleted file mode 100755 index 673c16721b..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-example-2.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-example-3.png b/submodules/AsyncDisplayKit/docs/static/images/layout-example-3.png deleted file mode 100755 index 72f9179e94..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-example-3.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-inset-text-overlay-diagram.png b/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-inset-text-overlay-diagram.png deleted file mode 100755 index dbf95847ed..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-inset-text-overlay-diagram.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-inset-text-overlay-photo.png b/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-inset-text-overlay-photo.png deleted file mode 100755 index 2465aaa3cb..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-inset-text-overlay-photo.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-inset-text-overlay.png b/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-inset-text-overlay.png deleted file mode 100755 index 020685ae10..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-inset-text-overlay.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-outset-icon-overlay-icon.png b/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-outset-icon-overlay-icon.png deleted file mode 100755 index 22a1652b3f..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-outset-icon-overlay-icon.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-outset-icon-overlay-photo.png b/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-outset-icon-overlay-photo.png deleted file mode 100755 index 7d7bef7e13..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-outset-icon-overlay-photo.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-outset-icon-overlay.png b/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-outset-icon-overlay.png deleted file mode 100755 index 46669c860a..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-photo-with-outset-icon-overlay.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-simple-header-with-left-right-justified-text-diagram.png b/submodules/AsyncDisplayKit/docs/static/images/layout-examples-simple-header-with-left-right-justified-text-diagram.png deleted file mode 100755 index c81e6f5122..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-simple-header-with-left-right-justified-text-diagram.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-simple-header-with-left-right-justified-text.png b/submodules/AsyncDisplayKit/docs/static/images/layout-examples-simple-header-with-left-right-justified-text.png deleted file mode 100755 index 1296620146..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-simple-header-with-left-right-justified-text.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-simple-inset-text-cell-closeup.png b/submodules/AsyncDisplayKit/docs/static/images/layout-examples-simple-inset-text-cell-closeup.png deleted file mode 100755 index 1b5b0d55a3..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-simple-inset-text-cell-closeup.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-simple-inset-text-cell.png b/submodules/AsyncDisplayKit/docs/static/images/layout-examples-simple-inset-text-cell.png deleted file mode 100755 index b161af9eca..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-simple-inset-text-cell.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-top-bottom-separator-line-diagram.png b/submodules/AsyncDisplayKit/docs/static/images/layout-examples-top-bottom-separator-line-diagram.png deleted file mode 100755 index eac57973ce..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-top-bottom-separator-line-diagram.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-top-bottom-separator-line.png b/submodules/AsyncDisplayKit/docs/static/images/layout-examples-top-bottom-separator-line.png deleted file mode 100755 index 38f1fd9564..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-examples-top-bottom-separator-line.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-spec-relationship-1.png b/submodules/AsyncDisplayKit/docs/static/images/layout-spec-relationship-1.png deleted file mode 100755 index a6ca2945c8..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-spec-relationship-1.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout-spec-relationship-2.png b/submodules/AsyncDisplayKit/docs/static/images/layout-spec-relationship-2.png deleted file mode 100755 index a21f052429..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout-spec-relationship-2.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layout2-api-sizing.png b/submodules/AsyncDisplayKit/docs/static/images/layout2-api-sizing.png deleted file mode 100755 index 0a7f054365..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layout2-api-sizing.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-examples/layout-example-inset-overlay.png b/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-examples/layout-example-inset-overlay.png deleted file mode 100755 index f10f8f0fe4..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-examples/layout-example-inset-overlay.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASBackgroundLayoutSpec-diagram.png b/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASBackgroundLayoutSpec-diagram.png deleted file mode 100755 index 5b365c0211..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASBackgroundLayoutSpec-diagram.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASCenterLayoutSpec-diagram-text.png b/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASCenterLayoutSpec-diagram-text.png deleted file mode 100755 index 7559e73d08..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASCenterLayoutSpec-diagram-text.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASCenterLayoutSpec-diagram.png b/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASCenterLayoutSpec-diagram.png deleted file mode 100755 index 040b5ce86e..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASCenterLayoutSpec-diagram.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASInsetLayoutSpec-diagram-text.png b/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASInsetLayoutSpec-diagram-text.png deleted file mode 100755 index f4e3810af4..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASInsetLayoutSpec-diagram-text.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASInsetLayoutSpec-diagram.png b/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASInsetLayoutSpec-diagram.png deleted file mode 100755 index 6ee3642fb3..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASInsetLayoutSpec-diagram.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASInsetLayoutSpec-example-complex.png b/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASInsetLayoutSpec-example-complex.png deleted file mode 100755 index ca08d0c9ec..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASInsetLayoutSpec-example-complex.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASOverlayLayouSpec-diagram.png b/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASOverlayLayouSpec-diagram.png deleted file mode 100755 index 7bba2cf067..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASOverlayLayouSpec-diagram.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASOverlayLayoutSpec-example-diagram.png b/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASOverlayLayoutSpec-example-diagram.png deleted file mode 100755 index deda779f3f..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASOverlayLayoutSpec-example-diagram.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASRatioLayoutSpec-diagram.png b/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASRatioLayoutSpec-diagram.png deleted file mode 100755 index eac1fd3b1f..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layoutSpec-types/ASRatioLayoutSpec-diagram.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/layoutable-types.png b/submodules/AsyncDisplayKit/docs/static/images/layoutable-types.png deleted file mode 100755 index 6ac3e9d11d..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/layoutable-types.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/liveMap.gif b/submodules/AsyncDisplayKit/docs/static/images/liveMap.gif deleted file mode 100755 index 633d1fb344..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/liveMap.gif and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/logo.png b/submodules/AsyncDisplayKit/docs/static/images/logo.png deleted file mode 100644 index d1e84d62c7..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/logo.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/logo.svg b/submodules/AsyncDisplayKit/docs/static/images/logo.svg deleted file mode 100644 index bc30fe6cdc..0000000000 --- a/submodules/AsyncDisplayKit/docs/static/images/logo.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - Texture Logo - Created with Sketch. - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/static/images/mapWithAnnotation.png b/submodules/AsyncDisplayKit/docs/static/images/mapWithAnnotation.png deleted file mode 100755 index e6316293d1..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/mapWithAnnotation.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/node-hierarchy.png b/submodules/AsyncDisplayKit/docs/static/images/node-hierarchy.png deleted file mode 100755 index 8f0c021b62..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/node-hierarchy.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/node-view-layer.png b/submodules/AsyncDisplayKit/docs/static/images/node-view-layer.png deleted file mode 100755 index 544294af8f..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/node-view-layer.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/overlay-vs-inset-spec.png b/submodules/AsyncDisplayKit/docs/static/images/overlay-vs-inset-spec.png deleted file mode 100755 index 2da1be2d80..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/overlay-vs-inset-spec.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/satelliteMap.png b/submodules/AsyncDisplayKit/docs/static/images/satelliteMap.png deleted file mode 100755 index 702f12b248..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/satelliteMap.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/synchronous-concurrency.jpg b/submodules/AsyncDisplayKit/docs/static/images/synchronous-concurrency.jpg deleted file mode 100644 index b49ea5d4c9..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/synchronous-concurrency.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/textNodeTruncation.png b/submodules/AsyncDisplayKit/docs/static/images/textNodeTruncation.png deleted file mode 100755 index a5125a8143..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/textNodeTruncation.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/images/video.gif b/submodules/AsyncDisplayKit/docs/static/images/video.gif deleted file mode 100755 index dd9bab6a78..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/images/video.gif and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/linkify.js b/submodules/AsyncDisplayKit/docs/static/linkify.js deleted file mode 100755 index b6adfbd5f9..0000000000 --- a/submodules/AsyncDisplayKit/docs/static/linkify.js +++ /dev/null @@ -1,22 +0,0 @@ -[].slice.apply( - document.querySelectorAll( - 'article h2, article h3, article h4' - ) -).forEach(function(header) { - var slug = header.innerText - .toLowerCase() - .replace(/[^a-z0-9]/g, '-') - .replace(/-+/g, '-') - .replace(/^-|-$/g, ''); - - var hashref = document.createElement('a'); - hashref.id = slug; - hashref.className = 'hashref'; - header.appendChild(hashref); - - var hash = document.createElement('a'); - hash.className = 'hash'; - hash.href = '#' + slug; - hash.innerText = '#'; - header.appendChild(hash); -}); diff --git a/submodules/AsyncDisplayKit/docs/static/talks/10_3_2016_ASCollectionNode_Sequence_Diagrams.pdf b/submodules/AsyncDisplayKit/docs/static/talks/10_3_2016_ASCollectionNode_Sequence_Diagrams.pdf deleted file mode 100755 index ce202e60be..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/talks/10_3_2016_ASCollectionNode_Sequence_Diagrams.pdf and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/talks/ASCollectionView.pdf b/submodules/AsyncDisplayKit/docs/static/talks/ASCollectionView.pdf deleted file mode 100755 index 43d834f1d9..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/talks/ASCollectionView.pdf and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/talks/UICollectionView.pdf b/submodules/AsyncDisplayKit/docs/static/talks/UICollectionView.pdf deleted file mode 100755 index da3691d049..0000000000 Binary files a/submodules/AsyncDisplayKit/docs/static/talks/UICollectionView.pdf and /dev/null differ diff --git a/submodules/AsyncDisplayKit/docs/static/toggle.js b/submodules/AsyncDisplayKit/docs/static/toggle.js deleted file mode 100755 index 65b9b5e2bd..0000000000 --- a/submodules/AsyncDisplayKit/docs/static/toggle.js +++ /dev/null @@ -1,27 +0,0 @@ -document.addEventListener("DOMContentLoaded", function() { - var swiftButtons = document.getElementsByClassName("swiftButton"); - var objectiveCButons = document.getElementsByClassName("objcButton"); - var objcCodes = document.getElementsByClassName("objcCode"); - var swiftCodes = document.getElementsByClassName("swiftCode"); - - var totalCodeSections = swiftButtons.length; - for(var i = 0; i < totalCodeSections; i++) { - swiftButtons[i].onclick = function () { - for (var i = 0; i < totalCodeSections; i++) { - swiftCodes[i].classList.remove("hidden"); - objcCodes[i].classList.add("hidden"); - objectiveCButons[i].classList.remove("active"); - swiftButtons[i].classList.add("active"); - }; - } - - objectiveCButons[i].onclick = function () { - for (var i = 0; i < totalCodeSections; i++) { - swiftCodes[i].classList.add("hidden"); - objcCodes[i].classList.remove("hidden"); - objectiveCButons[i].classList.add("active"); - swiftButtons[i].classList.remove("active"); - }; - } - } -}); \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/docs/stylesheets/main.scss b/submodules/AsyncDisplayKit/docs/stylesheets/main.scss deleted file mode 100755 index ee270fa770..0000000000 --- a/submodules/AsyncDisplayKit/docs/stylesheets/main.scss +++ /dev/null @@ -1,338 +0,0 @@ ---- ---- - -@charset "utf-8"; - -* { - padding: 0; - margin: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-text-size-adjust: 100%; -} - -html { - -webkit-font-smoothing: antialiased; - text-rendering: optimizeLegibility; - background-color: #FFFFFF; -} - -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-family: proxima-nova, "Helvetica Neue", Helvetica, Arial, sans-serif; - font-weight: 400; - color: #444; - margin: 0; - line-height: 22px; -} - -h1, h2, h3, h4 { - font-weight: normal; - margin: 1.3em 0 0.2em; - line-height: 1.4em; - position: relative; -} - -td { - vertical-align: top; -} - -h1:first-child, h2:first-child, h3:first-child, h4:first-child { - margin-top: 0; -} - -h1 { - font-size: 2em; - font-weight: bold; -} - -h2 { - font-size: 1.5em; -} - -h3 { - font-size: 1.3em; -} - -h4 { - font-size: 1.1em; -} - -p, ul, ol { - margin: 0 0 1em 0; -} - -a { - color: #0484f2; - text-decoration: none; -} - -.btn { - padding: 10px 20px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; - background: #0f70dd; - color: #fff; - display: inline-block; - text-decoration: none; - font-weight: bold; -} - -.container { - width: 90%; - margin: 0 auto; - clear: both; - - &:after { content: ""; display: table; clear: both; } -} - -header { - padding: 30px 0 0 0; - background: #f8f8f8; - - h1 { - position: relative; - top: -5px; - } - - nav { - font-size: 18px; - - ul { - list-style: none; - - li { - float: left; - margin-right: 20px; - - a { - color: #0484f2; - text-decoration: none; - } - } - } - } -} - -#logo { - margin: 0; -} - -.hero { - background: #0f70dd; - margin-bottom: 30px; - padding: 30px 0; - - .hero-title { - font-size: 45px; - line-height: 110%; - color: #fff; - margin-bottom: 20px; - } - - .btn { - background: #fff; - color: #0f70dd; - border: 2px solid #fff; - margin-right: 10px; - } - - .btn.btn-outlined { - background: none; - border: 2px solid #fff; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; - color: #fff; - } -} - -.container-margin { - margin-top: 30px; -} - -.container .sidebar { - font-size: 14px; - - ul { - list-style: none; - - li { - list-style: none; - } - } - - a.active { - font-weight: bold; - } -} - -.container tr > td { - padding-bottom: 30px; -} - -.container tr td img { - display: inline-block; - margin-bottom: 5px; -} - -.container tr td b { - padding-bottom: 5px; - display: inline-block; -} - -.roundrect { - border: 1px solid #f4f4f4; - -webkit-border-radius: 20px; - -moz-border-radius: 20px; - border-radius: 20px; -} - -.container .content ul, .container .content ol { - margin-left: 20px; - margin-bottom: 30px; -} - -.content p img { - display: block; - margin: 1em auto; - max-width: 100%; -} - -.edit-page-link { - font-size: 14px; -} - -@import "code"; - -.language-toggle { - border-bottom: 2px #0484f2 solid; - background: white; - display: block; - box-sizing: border-box; - font-size: 125%; - -webkit-font-smoothing: antialiased; - line-height: 1.5; - padding-right: 10px; - - a { - cursor: pointer; - display: block; - float: right; - padding-left: 1em; - - color: #a3a39e !important; - text-decoration: none; - transition: color 0.1s linear; - - &.active { - color: #222220 !important; - } - } - - &:after { - content: ""; - display: table; - clear: both; - } -} - -.highlight-group { - font-family: 'Inconsolata' !important; - margin: 0; - margin-top: 20px; - margin-bottom: 20px; - background: #f8f7f5; -} - -.hidden { - display: none; -} -.code { - padding: 15px; - overflow: auto; -} -pre { - font-family: 'Inconsolata' !important; - font-weight: 500; - color: #333333; -} - -.note { - padding: 10px; - border-radius: 3px; - background-color: #EFF7FF; - border: 1px solid #CCDDFF; - margin-bottom: 20px; - - p:before { - content: "NOTE:"; - font-weight: bold; - } - - p { - margin-bottom: 0px; - } -} - -.note-important { - padding: 10px; - border-radius: 3px; - background-color: #FFCCCC; - border: 1px solid #FF8899; - margin-bottom: 20px; - - p:before { - content: "IMPORTANT:"; - font-weight: bold; - } - - p { - margin-bottom: 0px; - } -} - -.right { - float: right; -} - -footer { - padding: 20px 0; - - p { - text-align: center; - } -} - -/** Banner */ -.texture-banner { - padding: 20px 0 20px 0; - width: 100%; - background-color: #0e1e28; - box-shadow: inset 0 -2px 20px 0 rgba(0,0,0,0.5); - text-align: center; - - .announcement { - font-stretch: normal; - font-size: 16px; - line-height: 1.75; - letter-spacing: 0.1px; - text-align: center; - color: #d7e2e9; - font-weight: bold; - margin: 0; - } - - .learn-more-link { - font-size: 12px; - font-weight: bold; - font-style: normal; - font-stretch: normal; - line-height: 1.17; - letter-spacing: 0.5px; - color: #0484f2; - margin-left: 10px; - } -} diff --git a/submodules/AsyncDisplayKit/docs/stylesheets/media.css b/submodules/AsyncDisplayKit/docs/stylesheets/media.css deleted file mode 100755 index 37235a7ceb..0000000000 --- a/submodules/AsyncDisplayKit/docs/stylesheets/media.css +++ /dev/null @@ -1,50 +0,0 @@ -/* Media queries */ -@media (min-width: 600px) { - header { - display: block; - } - - header nav { - line-height: 55px; - } - - header ul { - } - - header nav ul { - display: inline-block; - float: right; - margin: 0 auto; - } - - #logo { - float: left; - } - - .container .sidebar { - width: 19%; - float: left; - } - - .container .content { - width: 75%; - float: right; - } - -} - -@media (min-width: 950px) { - .container { - width: 900px; - } - - .container .sidebar { - width: 19%; - float: left; - } - - .container .content { - width: 75%; - float: right; - } -} diff --git a/submodules/AsyncDisplayKit/docs/stylesheets/pygments.css b/submodules/AsyncDisplayKit/docs/stylesheets/pygments.css deleted file mode 100755 index 91f27c87dd..0000000000 --- a/submodules/AsyncDisplayKit/docs/stylesheets/pygments.css +++ /dev/null @@ -1,61 +0,0 @@ -.hll { background-color: #ffffcc } -.c { color: #999988; font-style: italic } /* Comment */ -.err { color: #a61717; background-color: #e3d2d2 } /* Error */ -.k { color: #000000; font-weight: bold } /* Keyword */ -.o { color: #000000; } /* Operator */ -.cm { color: #666666; font-weight: bold; font-style: italic } /* Comment.Multiline */ -.cp { color: #666666; font-weight: bold; font-style: italic } /* Comment.Preproc */ -.c1 { color: #666666; font-weight: bold; font-style: italic } /* Comment.Single */ -.cs { color: #666666; font-weight: bold; font-style: italic } /* Comment.Special */ -.gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ -.ge { color: #000000; font-style: italic } /* Generic.Emph */ -.gr { color: #aa0000 } /* Generic.Error */ -.gh { color: #999999 } /* Generic.Heading */ -.gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ -.go { color: #888888 } /* Generic.Output */ -.gp { color: #555555 } /* Generic.Prompt */ -.gs { font-weight: bold } /* Generic.Strong */ -.gu { color: #aaaaaa } /* Generic.Subheading */ -.gt { color: #aa0000 } /* Generic.Traceback */ -.kc { color: #000000; font-weight: bold } /* Keyword.Constant */ -.kd { color: #000000; font-weight: bold } /* Keyword.Declaration */ -.kn { color: #000000; font-weight: bold } /* Keyword.Namespace */ -.kp { color: #000000; font-weight: bold } /* Keyword.Pseudo */ -.kr { color: #000000; font-weight: bold } /* Keyword.Reserved */ -.kt { color: #445588; font-weight: bold } /* Keyword.Type */ -.m { color: #009999 } /* Literal.Number */ -.s { color: #d01040 } /* Literal.String */ -.na { color: #008080 } /* Name.Attribute */ -.nb { } /* Name.Builtin */ -.nc { color: #445588; font-weight: bold } /* Name.Class */ -.no { color: #008080 } /* Name.Constant */ -.nd { color: #3c5d5d; font-weight: bold } /* Name.Decorator */ -.ni { color: #800080 } /* Name.Entity */ -.ne { color: #990000; font-weight: bold } /* Name.Exception */ -.nf { color: #990000; font-weight: bold } /* Name.Function */ -.nl { color: #990000; font-weight: bold } /* Name.Label */ -.nn { color: #555555 } /* Name.Namespace */ -.nt { color: #000080 } /* Name.Tag */ -.nv { color: #008080 } /* Name.Variable */ -.ow { color: #000000; font-weight: bold } /* Operator.Word */ -.w { color: #bbbbbb } /* Text.Whitespace */ -.mf { color: #009999 } /* Literal.Number.Float */ -.mh { color: #009999 } /* Literal.Number.Hex */ -.mi { color: #009999 } /* Literal.Number.Integer */ -.mo { color: #009999 } /* Literal.Number.Oct */ -.sb { color: #d01040 } /* Literal.String.Backtick */ -.sc { color: #d01040 } /* Literal.String.Char */ -.sd { color: #d01040 } /* Literal.String.Doc */ -.s2 { color: #d01040 } /* Literal.String.Double */ -.se { color: #d01040 } /* Literal.String.Escape */ -.sh { color: #d01040 } /* Literal.String.Heredoc */ -.si { color: #d01040 } /* Literal.String.Interpol */ -.sx { color: #d01040 } /* Literal.String.Other */ -.sr { color: #009926 } /* Literal.String.Regex */ -.s1 { color: #d01040 } /* Literal.String.Single */ -.ss { color: #990073 } /* Literal.String.Symbol */ -.bp { color: #999999 } /* Name.Builtin.Pseudo */ -.vc { color: #008080 } /* Name.Variable.Class */ -.vg { color: #008080 } /* Name.Variable.Global */ -.vi { color: #008080 } /* Name.Variable.Instance */ -.il { color: #009999 } /* Literal.Number.Integer.Long */ diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Podfile b/submodules/AsyncDisplayKit/examples/ASCollectionView/Podfile deleted file mode 100644 index 08d1b7add6..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Podfile +++ /dev/null @@ -1,6 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end - diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/AppDelegate.h deleted file mode 100644 index db20870a31..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#define SIMULATE_WEB_RESPONSE 0 - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/AppDelegate.m deleted file mode 100644 index ad36676ae0..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/AppDelegate.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "PresentingViewController.h" -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[UINavigationController alloc] init]; - - [self pushNewViewControllerAnimated:NO]; - - [self.window makeKeyAndVisible]; - - return YES; -} - -- (void)pushNewViewControllerAnimated:(BOOL)animated -{ - UINavigationController *navController = (UINavigationController *)self.window.rootViewController; - -#if SIMULATE_WEB_RESPONSE - UIViewController *viewController = [[PresentingViewController alloc] init]; -#else - UIViewController *viewController = [[ViewController alloc] init]; - viewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Push Another Copy" style:UIBarButtonItemStylePlain target:self action:@selector(pushNewViewController)]; -#endif - - [navController pushViewController:viewController animated:animated]; -} - -- (void)pushNewViewController -{ - [self pushNewViewControllerAnimated:YES]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Contents.json b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index f0fce54771..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default-568h@2x.png", - "minimum-system-version" : "7.0", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "scale" : "1x", - "orientation" : "portrait" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "orientation" : "portrait" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default-568h@2x.png", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "minimum-system-version" : "7.0", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png deleted file mode 100644 index 1547a98454..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/Info.plist deleted file mode 100644 index eeb71a8d35..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/Info.plist +++ /dev/null @@ -1,49 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIcons - - CFBundleIcons~ipad - - CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - Launchboard - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/ItemNode.h b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/ItemNode.h deleted file mode 100644 index 73eb2629e6..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/ItemNode.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// ItemNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ItemNode : ASTextCellNode - -- (instancetype)initWithString:(NSString *)string; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/ItemNode.m b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/ItemNode.m deleted file mode 100644 index b9850a4b9e..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/ItemNode.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// ItemNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ItemNode.h" - -@implementation ItemNode - -- (instancetype)initWithString:(NSString *)string -{ - self = [super init]; - - if (self != nil) { - self.text = string; - [self updateBackgroundColor]; - } - - return self; -} - -- (void)updateBackgroundColor -{ - if (self.highlighted) { - self.backgroundColor = [UIColor grayColor]; - } else if (self.selected) { - self.backgroundColor = [UIColor darkGrayColor]; - } else { - self.backgroundColor = [UIColor lightGrayColor]; - } -} - -- (void)setSelected:(BOOL)selected -{ - [super setSelected:selected]; - - [self updateBackgroundColor]; -} - -- (void)setHighlighted:(BOOL)highlighted -{ - [super setHighlighted:highlighted]; - - [self updateBackgroundColor]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/Launchboard.storyboard b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/Launchboard.storyboard deleted file mode 100644 index 673e0f7e68..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/Launchboard.storyboard +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/PresentingViewController.h b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/PresentingViewController.h deleted file mode 100644 index 44c07c6a76..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/PresentingViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// PresentingViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface PresentingViewController : UIViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/PresentingViewController.m b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/PresentingViewController.m deleted file mode 100644 index b2d1d5e812..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/PresentingViewController.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// PresentingViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PresentingViewController.h" -#import "ViewController.h" - -@interface PresentingViewController () - -@end - -@implementation PresentingViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Push Details" - style:UIBarButtonItemStylePlain - target:self - action:@selector(pushNewViewController)]; -} - -- (void)pushNewViewController -{ - ViewController *controller = [[ViewController alloc] init]; - [self.navigationController pushViewController:controller animated:true]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/SupplementaryNode.h b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/SupplementaryNode.h deleted file mode 100644 index b29ec002b2..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/SupplementaryNode.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// SupplementaryNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface SupplementaryNode : ASCellNode - -- (instancetype)initWithText:(NSString *)text; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/SupplementaryNode.m b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/SupplementaryNode.m deleted file mode 100644 index f4847ff00b..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/SupplementaryNode.m +++ /dev/null @@ -1,58 +0,0 @@ -// -// SupplementaryNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "SupplementaryNode.h" - -#import -#import -#import - -static CGFloat kInsets = 15.0; - -@interface SupplementaryNode () -@property (nonatomic, strong) ASTextNode *textNode; -@end - -@implementation SupplementaryNode - -- (instancetype)initWithText:(NSString *)text -{ - self = [super init]; - - if (self != nil) { - _textNode = [[ASTextNode alloc] init]; - _textNode.attributedText = [[NSAttributedString alloc] initWithString:text - attributes:[self textAttributes]]; - [self addSubnode:_textNode]; - } - - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASCenterLayoutSpec *center = [[ASCenterLayoutSpec alloc] init]; - center.centeringOptions = ASCenterLayoutSpecCenteringXY; - center.child = self.textNode; - UIEdgeInsets insets = UIEdgeInsetsMake(kInsets, kInsets, kInsets, kInsets); - - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets child:center]; -} - -#pragma mark - Text Formatting - -- (NSDictionary *)textAttributes -{ - return @{ - NSFontAttributeName: [UIFont systemFontOfSize:18.0], - NSForegroundColorAttributeName: [UIColor whiteColor], - }; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/ViewController.h deleted file mode 100644 index c8a0626291..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : UIViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/ViewController.m deleted file mode 100644 index 687635ee68..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/ViewController.m +++ /dev/null @@ -1,193 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" -#import "AppDelegate.h" -#import -#import "SupplementaryNode.h" -#import "ItemNode.h" - -#define ASYNC_COLLECTION_LAYOUT 0 - -static CGSize const kItemSize = (CGSize){180, 90}; - -@interface ViewController () - -@property (nonatomic, strong) ASCollectionNode *collectionNode; -@property (nonatomic, strong) NSMutableArray *> *data; -@property (nonatomic, strong) UILongPressGestureRecognizer *moveRecognizer; - -@end - -@implementation ViewController - -#pragma mark - Lifecycle - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.moveRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress)]; - [self.view addGestureRecognizer:self.moveRecognizer]; - -#if ASYNC_COLLECTION_LAYOUT - ASCollectionGalleryLayoutDelegate *layoutDelegate = [[ASCollectionGalleryLayoutDelegate alloc] initWithScrollableDirections:ASScrollDirectionVerticalDirections]; - layoutDelegate.propertiesProvider = self; - self.collectionNode = [[ASCollectionNode alloc] initWithLayoutDelegate:layoutDelegate layoutFacilitator:nil]; -#else - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.headerReferenceSize = CGSizeMake(50.0, 50.0); - layout.footerReferenceSize = CGSizeMake(50.0, 50.0); - layout.itemSize = kItemSize; - self.collectionNode = [[ASCollectionNode alloc] initWithFrame:self.view.bounds collectionViewLayout:layout]; - [self.collectionNode registerSupplementaryNodeOfKind:UICollectionElementKindSectionHeader]; - [self.collectionNode registerSupplementaryNodeOfKind:UICollectionElementKindSectionFooter]; -#endif - - self.collectionNode.dataSource = self; - self.collectionNode.delegate = self; - - self.collectionNode.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - self.collectionNode.backgroundColor = [UIColor whiteColor]; - - [self.view addSubnode:self.collectionNode]; - self.collectionNode.frame = self.view.bounds; - -#if !SIMULATE_WEB_RESPONSE - self.navigationItem.leftItemsSupplementBackButton = YES; - self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh - target:self - action:@selector(reloadTapped)]; - [self loadData]; -#else - __weak typeof(self) weakSelf = self; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [weakSelf handleSimulatedWebResponse]; - }); -#endif -} - -- (void)handleSimulatedWebResponse -{ - [self.collectionNode performBatchUpdates:^{ - [self loadData]; - [self.collectionNode insertSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, self.data.count)]]; - } completion:nil]; -} - -- (void)loadData -{ - // Form our data array - typeof(self.data) data = [NSMutableArray array]; - for (NSInteger s = 0; s < 100; s++) { - NSMutableArray *items = [NSMutableArray array]; - for (NSInteger i = 0; i < 10; i++) { - items[i] = [NSString stringWithFormat:@"[%zd.%zd] says hi", s, i]; - } - data[s] = items; - } - self.data = data; -} - -#pragma mark - Button Actions - -- (void)reloadTapped -{ - // This method is deprecated because we reccommend using ASCollectionNode instead of ASCollectionView. - // This functionality & example project remains for users who insist on using ASCollectionView. - [self.collectionNode reloadData]; -} - -#pragma mark - ASCollectionGalleryLayoutPropertiesProviding - -- (CGSize)galleryLayoutDelegate:(ASCollectionGalleryLayoutDelegate *)delegate sizeForElements:(ASElementMap *)elements -{ - ASDisplayNodeAssertMainThread(); - return kItemSize; -} - -- (void)handleLongPress -{ - UICollectionView *collectionView = self.collectionNode.view; - CGPoint location = [self.moveRecognizer locationInView:collectionView]; - switch (self.moveRecognizer.state) { - case UIGestureRecognizerStateBegan: { - NSIndexPath *indexPath = [collectionView indexPathForItemAtPoint:location]; - if (indexPath) { - [collectionView beginInteractiveMovementForItemAtIndexPath:indexPath]; - } - break; - } - case UIGestureRecognizerStateChanged: - [collectionView updateInteractiveMovementTargetPosition:location]; - break; - case UIGestureRecognizerStateEnded: - [collectionView endInteractiveMovement]; - break; - case UIGestureRecognizerStateFailed: - case UIGestureRecognizerStateCancelled: - [collectionView cancelInteractiveMovement]; - break; - case UIGestureRecognizerStatePossible: - // nop - break; - } -} - -#pragma mark - ASCollectionDataSource - -- (ASCellNodeBlock)collectionNode:(ASCollectionNode *)collectionNode nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath; -{ - NSString *text = self.data[indexPath.section][indexPath.item]; - return ^{ - return [[ItemNode alloc] initWithString:text]; - }; -} - -- (ASCellNode *)collectionNode:(ASCollectionNode *)collectionNode nodeForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath -{ - NSString *text = [kind isEqualToString:UICollectionElementKindSectionHeader] ? @"Header" : @"Footer"; - SupplementaryNode *node = [[SupplementaryNode alloc] initWithText:text]; - BOOL isHeaderSection = [kind isEqualToString:UICollectionElementKindSectionHeader]; - node.backgroundColor = isHeaderSection ? [UIColor blueColor] : [UIColor redColor]; - return node; -} - -- (NSInteger)collectionNode:(ASCollectionNode *)collectionNode numberOfItemsInSection:(NSInteger)section -{ - return self.data[section].count; -} - -- (NSInteger)numberOfSectionsInCollectionNode:(ASCollectionNode *)collectionNode -{ - return self.data.count; -} - -- (BOOL)collectionNode:(ASCollectionNode *)collectionNode canMoveItemWithNode:(ASCellNode *)node -{ - return YES; -} - -- (void)collectionNode:(ASCollectionNode *)collectionNode moveItemAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath -{ - __auto_type sectionArray = self.data[sourceIndexPath.section]; - __auto_type object = sectionArray[sourceIndexPath.item]; - [sectionArray removeObjectAtIndex:sourceIndexPath.item]; - [self.data[destinationIndexPath.section] insertObject:object atIndex:destinationIndexPath.item]; -} - -#pragma mark - ASCollectionDelegate - -- (void)collectionNode:(ASCollectionNode *)collectionNode willBeginBatchFetchWithContext:(ASBatchContext *)context -{ - NSLog(@"fetch additional content"); - [context completeBatchFetching:YES]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/main.m b/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/main.m deleted file mode 100644 index 65850400e4..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASCollectionView/Sample/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Podfile b/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Podfile deleted file mode 100644 index 0fbf4c9524..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Podfile +++ /dev/null @@ -1,6 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' - pod 'Texture/Yoga', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/AppDelegate.h deleted file mode 100644 index 19db03c153..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/AppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/AppDelegate.m deleted file mode 100644 index d0fd66f775..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/AppDelegate.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[ViewController alloc] init]; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/Info.plist deleted file mode 100644 index fb4115c84c..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/ViewController.h deleted file mode 100644 index c8a0626291..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : UIViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/ViewController.m deleted file mode 100644 index e5d019b1d1..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/ViewController.m +++ /dev/null @@ -1,187 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" - -#import - -#pragma mark - TransitionNode - -#define USE_CUSTOM_LAYOUT_TRANSITION 0 - -@interface TransitionNode : ASDisplayNode -@property (nonatomic, assign) BOOL enabled; -@property (nonatomic, strong) ASButtonNode *buttonNode; -@property (nonatomic, strong) ASTextNode *textNodeOne; -@property (nonatomic, strong) ASTextNode *textNodeTwo; -@end - -@implementation TransitionNode - - -#pragma mark - Lifecycle - -- (instancetype)init -{ - self = [super init]; - if (self == nil) { return self; } - - self.automaticallyManagesSubnodes = YES; - - // Define the layout transition duration for the default transition - self.defaultLayoutTransitionDuration = 1.0; - - _enabled = NO; - - // Setup text nodes - _textNodeOne = [[ASTextNode alloc] init]; - _textNodeOne.attributedText = [[NSAttributedString alloc] initWithString:@"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled"]; - - _textNodeTwo = [[ASTextNode alloc] init]; - _textNodeTwo.attributedText = [[NSAttributedString alloc] initWithString:@"It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English."]; - ASSetDebugNames(_textNodeOne, _textNodeTwo); - - // Setup button - NSString *buttonTitle = @"Start Layout Transition"; - UIFont *buttonFont = [UIFont systemFontOfSize:16.0]; - UIColor *buttonColor = [UIColor blueColor]; - - _buttonNode = [[ASButtonNode alloc] init]; - [_buttonNode setTitle:buttonTitle withFont:buttonFont withColor:buttonColor forState:UIControlStateNormal]; - [_buttonNode setTitle:buttonTitle withFont:buttonFont withColor:[buttonColor colorWithAlphaComponent:0.5] forState:UIControlStateHighlighted]; - - - // Some debug colors - _textNodeOne.backgroundColor = [UIColor orangeColor]; - _textNodeTwo.backgroundColor = [UIColor greenColor]; - - - return self; -} - -- (void)didLoad -{ - [super didLoad]; - - [self.buttonNode addTarget:self action:@selector(buttonPressed:) forControlEvents:ASControlNodeEventTouchUpInside]; -} - -#pragma mark - Actions - -- (void)buttonPressed:(id)sender -{ - self.enabled = !self.enabled; - [self transitionLayoutWithAnimation:YES shouldMeasureAsync:NO measurementCompletion:nil]; -} - - -#pragma mark - Layout - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASTextNode *nextTextNode = self.enabled ? self.textNodeTwo : self.textNodeOne; - nextTextNode.style.flexGrow = 1.0; - nextTextNode.style.flexShrink = 1.0; - - ASStackLayoutSpec *horizontalStackLayout = [ASStackLayoutSpec horizontalStackLayoutSpec]; - horizontalStackLayout.children = @[nextTextNode]; - - self.buttonNode.style.alignSelf = ASStackLayoutAlignSelfCenter; - - ASStackLayoutSpec *verticalStackLayout = [ASStackLayoutSpec verticalStackLayoutSpec]; - verticalStackLayout.spacing = 10.0; - verticalStackLayout.children = @[horizontalStackLayout, self.buttonNode]; - - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(15.0, 15.0, 15.0, 15.0) child:verticalStackLayout]; -} - - -#pragma mark - Transition - -#if USE_CUSTOM_LAYOUT_TRANSITION - -- (void)animateLayoutTransition:(id)context -{ - ASDisplayNode *fromNode = [[context removedSubnodes] objectAtIndex:0]; - ASDisplayNode *toNode = [[context insertedSubnodes] objectAtIndex:0]; - - ASButtonNode *buttonNode = nil; - for (ASDisplayNode *node in [context subnodesForKey:ASTransitionContextToLayoutKey]) { - if ([node isKindOfClass:[ASButtonNode class]]) { - buttonNode = (ASButtonNode *)node; - break; - } - } - - CGRect toNodeFrame = [context finalFrameForNode:toNode]; - toNodeFrame.origin.x += (self.enabled ? toNodeFrame.size.width : -toNodeFrame.size.width); - toNode.frame = toNodeFrame; - toNode.alpha = 0.0; - - CGRect fromNodeFrame = fromNode.frame; - fromNodeFrame.origin.x += (self.enabled ? -fromNodeFrame.size.width : fromNodeFrame.size.width); - - // We will use the same transition duration as the default transition - [UIView animateWithDuration:self.defaultLayoutTransitionDuration animations:^{ - toNode.frame = [context finalFrameForNode:toNode]; - toNode.alpha = 1.0; - - fromNode.frame = fromNodeFrame; - fromNode.alpha = 0.0; - - // Update frame of self - CGSize fromSize = [context layoutForKey:ASTransitionContextFromLayoutKey].size; - CGSize toSize = [context layoutForKey:ASTransitionContextToLayoutKey].size; - BOOL isResized = (CGSizeEqualToSize(fromSize, toSize) == NO); - if (isResized == YES) { - CGPoint position = self.frame.origin; - self.frame = CGRectMake(position.x, position.y, toSize.width, toSize.height); - } - - buttonNode.frame = [context finalFrameForNode:buttonNode]; - } completion:^(BOOL finished) { - [context completeTransition:finished]; - }]; -} - -#endif - -@end - - -#pragma mark - ViewController - -@interface ViewController () -@property (nonatomic, strong) TransitionNode *transitionNode; -@end - -@implementation ViewController - -#pragma mark - UIViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - _transitionNode = [TransitionNode new]; - [self.view addSubnode:_transitionNode]; - - // Some debug colors - _transitionNode.backgroundColor = [UIColor grayColor]; -} - -- (void)viewDidLayoutSubviews -{ - [super viewDidLayoutSubviews]; - - CGSize size = [self.transitionNode layoutThatFits:ASSizeRangeMake(CGSizeZero, self.view.frame.size)].size; - self.transitionNode.frame = CGRectMake(0, 20, size.width, size.height); -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/main.m b/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKLayoutTransition/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples/ASDKTube/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKTube/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples/ASDKTube/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKTube/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples/ASDKTube/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKTube/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Podfile b/submodules/AsyncDisplayKit/examples/ASDKTube/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/AppDelegate.h deleted file mode 100644 index 19db03c153..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/AppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/AppDelegate.m deleted file mode 100644 index 9ceabb213e..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/AppDelegate.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" -#import "WindowWithStatusBarUnderlay.h" -#import "Utilities.h" -#import "VideoFeedNodeController.h" - - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - - // this UIWindow subclass is neccessary to make the status bar opaque - _window = [[WindowWithStatusBarUnderlay alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - _window.backgroundColor = [UIColor whiteColor]; - - - VideoFeedNodeController *asdkHomeFeedVC = [[VideoFeedNodeController alloc] init]; - UINavigationController *asdkHomeFeedNavCtrl = [[UINavigationController alloc] initWithRootViewController:asdkHomeFeedVC]; - - - _window.rootViewController = asdkHomeFeedNavCtrl; - [_window makeKeyAndVisible]; - - // Nav Bar appearance - NSDictionary *attributes = @{NSForegroundColorAttributeName:[UIColor whiteColor]}; - [[UINavigationBar appearance] setTitleTextAttributes:attributes]; - [[UINavigationBar appearance] setBarTintColor:[UIColor lighOrangeColor]]; - [[UINavigationBar appearance] setTranslucent:NO]; - - [application setStatusBarStyle:UIStatusBarStyleLightContent]; - - - return YES; -} -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Controller/VideoFeedNodeController.h b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Controller/VideoFeedNodeController.h deleted file mode 100644 index 131bb38ef7..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Controller/VideoFeedNodeController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// VideoFeedNodeController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface VideoFeedNodeController : ASViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Controller/VideoFeedNodeController.m b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Controller/VideoFeedNodeController.m deleted file mode 100644 index b6e53ba7a5..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Controller/VideoFeedNodeController.m +++ /dev/null @@ -1,77 +0,0 @@ -// -// VideoFeedNodeController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "VideoFeedNodeController.h" -#import -#import "VideoModel.h" -#import "VideoContentCell.h" - -@interface VideoFeedNodeController () - -@end - -@implementation VideoFeedNodeController -{ - ASTableNode *_tableNode; - NSMutableArray *_videoFeedData; -} - -- (instancetype)init -{ - _tableNode = [[ASTableNode alloc] init]; - _tableNode.delegate = self; - _tableNode.dataSource = self; - - if (!(self = [super initWithNode:_tableNode])) { - return nil; - } - - [self generateFeedData]; - self.navigationItem.title = @"Home"; - - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [_tableNode reloadData]; -} - -- (void)generateFeedData -{ - _videoFeedData = [[NSMutableArray alloc] init]; - - for (int i = 0; i < 30; i++) { - [_videoFeedData addObject:[[VideoModel alloc] init]]; - } -} - -#pragma mark - ASCollectionDelegate - ASCollectionDataSource - -- (NSInteger)numberOfSectionsInTableNode:(ASTableNode *)tableNode -{ - return 1; -} - -- (NSInteger)tableNode:(ASTableNode *)tableNode numberOfRowsInSection:(NSInteger)section -{ - return _videoFeedData.count; -} - -- (ASCellNode *)tableNode:(ASTableNode *)tableNode nodeForRowAtIndexPath:(NSIndexPath *)indexPath -{ - VideoModel *videoObject = [_videoFeedData objectAtIndex:indexPath.row]; - VideoContentCell *cellNode = [[VideoContentCell alloc] initWithVideoObject:videoObject]; - - return cellNode; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-mute.png b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-mute.png deleted file mode 100644 index 1f700e3a5d..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-mute.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-mute@2x.png b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-mute@2x.png deleted file mode 100644 index 025f1386a4..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-mute@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-mute@3x.png b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-mute@3x.png deleted file mode 100644 index a4815608b9..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-mute@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-unmute.png b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-unmute.png deleted file mode 100644 index 52d15943f7..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-unmute.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-unmute@2x.png b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-unmute@2x.png deleted file mode 100644 index e671374d47..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-unmute@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-unmute@3x.png b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-unmute@3x.png deleted file mode 100644 index 2fa2462d98..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Icons/ico-unmute@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Info.plist deleted file mode 100644 index 3b4c6c7839..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - UIViewControllerBasedStatusBarAppearance - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UIStatusBarStyle - UIStatusBarStyleLightContent - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - - - diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Models/Utilities.h b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Models/Utilities.h deleted file mode 100644 index 4fd689f18b..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Models/Utilities.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// Utilities.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// -#include -@interface UIColor (Additions) - -+ (UIColor *)lighOrangeColor; -+ (UIColor *)darkBlueColor; -+ (UIColor *)lightBlueColor; - -@end - -@interface UIImage (Additions) - -+ (UIImage *)followingButtonStretchableImageForCornerRadius:(CGFloat)cornerRadius following:(BOOL)followingEnabled; -+ (void)downloadImageForURL:(NSURL *)url completion:(void (^)(UIImage *))block; - -- (UIImage *)makeCircularImageWithSize:(CGSize)size; - -@end - -@interface NSString (Additions) - -// returns a user friendly elapsed time such as '50s', '6m' or '3w' -+ (NSString *)elapsedTimeStringSinceDate:(NSString *)uploadDateString; - -@end - -@interface NSAttributedString (Additions) - -+ (NSAttributedString *)attributedStringWithString:(NSString *)string - fontSize:(CGFloat)size - color:(UIColor *)color - firstWordColor:(UIColor *)firstWordColor; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Models/Utilities.m b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Models/Utilities.m deleted file mode 100644 index c9998154c8..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Models/Utilities.m +++ /dev/null @@ -1,231 +0,0 @@ -// -// Utilities.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "Utilities.h" - -#define StrokeRoundedImages 0 - -@implementation UIColor (Additions) - -+ (UIColor *)lighOrangeColor -{ - return [UIColor colorWithRed:1 green:0.506 blue:0.384 alpha:1]; -} - -+ (UIColor *)darkBlueColor -{ - return [UIColor colorWithRed:70.0/255.0 green:102.0/255.0 blue:118.0/255.0 alpha:1.0]; -} - -+ (UIColor *)lightBlueColor -{ - return [UIColor colorWithRed:70.0/255.0 green:165.0/255.0 blue:196.0/255.0 alpha:1.0]; -} - -@end - -@implementation UIImage (Additions) - -+ (UIImage *)followingButtonStretchableImageForCornerRadius:(CGFloat)cornerRadius following:(BOOL)followingEnabled -{ - CGSize unstretchedSize = CGSizeMake(2 * cornerRadius + 1, 2 * cornerRadius + 1); - CGRect rect = (CGRect) {CGPointZero, unstretchedSize}; - UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius]; - - // create a graphics context for the following status button - UIGraphicsBeginImageContextWithOptions(unstretchedSize, NO, 0); - - [path addClip]; - - if (followingEnabled) { - - [[UIColor whiteColor] setFill]; - [path fill]; - - path.lineWidth = 3; - [[UIColor lightBlueColor] setStroke]; - [path stroke]; - - } else { - - [[UIColor lightBlueColor] setFill]; - [path fill]; - } - - UIImage *followingBtnImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - UIImage *followingBtnImageStretchable = [followingBtnImage stretchableImageWithLeftCapWidth:cornerRadius - topCapHeight:cornerRadius]; - return followingBtnImageStretchable; -} - -+ (void)downloadImageForURL:(NSURL *)url completion:(void (^)(UIImage *))block -{ - static NSCache *simpleImageCache = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - simpleImageCache = [[NSCache alloc] init]; - simpleImageCache.countLimit = 10; - }); - - if (!block) { - return; - } - - // check if image is cached - UIImage *image = [simpleImageCache objectForKey:url]; - if (image) { - dispatch_async(dispatch_get_main_queue(), ^{ - block(image); - }); - } else { - // else download image - NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration ephemeralSessionConfiguration]]; - NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { - if (data) { - UIImage *image = [UIImage imageWithData:data]; - dispatch_async(dispatch_get_main_queue(), ^{ - block(image); - }); - } - }]; - [task resume]; - } -} - -- (UIImage *)makeCircularImageWithSize:(CGSize)size -{ - // make a CGRect with the image's size - CGRect circleRect = (CGRect) {CGPointZero, size}; - - // begin the image context since we're not in a drawRect: - UIGraphicsBeginImageContextWithOptions(circleRect.size, NO, 0); - - // create a UIBezierPath circle - UIBezierPath *circle = [UIBezierPath bezierPathWithRoundedRect:circleRect cornerRadius:circleRect.size.width/2]; - - // clip to the circle - [circle addClip]; - - // draw the image in the circleRect *AFTER* the context is clipped - [self drawInRect:circleRect]; - - // create a border (for white background pictures) -#if StrokeRoundedImages - circle.lineWidth = 1; - [[UIColor darkGrayColor] set]; - [circle stroke]; -#endif - - // get an image from the image context - UIImage *roundedImage = UIGraphicsGetImageFromCurrentImageContext(); - - // end the image context since we're not in a drawRect: - UIGraphicsEndImageContext(); - - return roundedImage; -} - -@end - -@implementation NSString (Additions) - -// Returns a user-visible date time string that corresponds to the -// specified RFC 3339 date time string. Note that this does not handle -// all possible RFC 3339 date time strings, just one of the most common -// styles. -+ (NSDate *)userVisibleDateTimeStringForRFC3339DateTimeString:(NSString *)rfc3339DateTimeString -{ - NSDateFormatter * rfc3339DateFormatter; - NSLocale * enUSPOSIXLocale; - - // Convert the RFC 3339 date time string to an NSDate. - - rfc3339DateFormatter = [[NSDateFormatter alloc] init]; - - enUSPOSIXLocale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; - - [rfc3339DateFormatter setLocale:enUSPOSIXLocale]; - [rfc3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ssZ'"]; - [rfc3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; - - return [rfc3339DateFormatter dateFromString:rfc3339DateTimeString]; -} - -+ (NSString *)elapsedTimeStringSinceDate:(NSString *)uploadDateString -{ - // early return if no post date string - if (!uploadDateString) - { - return @"NO POST DATE"; - } - - NSDate *postDate = [self userVisibleDateTimeStringForRFC3339DateTimeString:uploadDateString]; - - if (!postDate) { - return @"DATE CONVERSION ERROR"; - } - - NSDate *currentDate = [NSDate date]; - - NSCalendar *calendar = [NSCalendar currentCalendar]; - - NSUInteger seconds = [[calendar components:NSCalendarUnitSecond fromDate:postDate toDate:currentDate options:0] second]; - NSUInteger minutes = [[calendar components:NSCalendarUnitMinute fromDate:postDate toDate:currentDate options:0] minute]; - NSUInteger hours = [[calendar components:NSCalendarUnitHour fromDate:postDate toDate:currentDate options:0] hour]; - NSUInteger days = [[calendar components:NSCalendarUnitDay fromDate:postDate toDate:currentDate options:0] day]; - - NSString *elapsedTime; - - if (days > 7) { - elapsedTime = [NSString stringWithFormat:@"%luw", (long)ceil(days/7.0)]; - } else if (days > 0) { - elapsedTime = [NSString stringWithFormat:@"%lud", (long)days]; - } else if (hours > 0) { - elapsedTime = [NSString stringWithFormat:@"%luh", (long)hours]; - } else if (minutes > 0) { - elapsedTime = [NSString stringWithFormat:@"%lum", (long)minutes]; - } else if (seconds > 0) { - elapsedTime = [NSString stringWithFormat:@"%lus", (long)seconds]; - } else if (seconds == 0) { - elapsedTime = @"1s"; - } else { - elapsedTime = @"ERROR"; - } - - return elapsedTime; -} - -@end - -@implementation NSAttributedString (Additions) - -+ (NSAttributedString *)attributedStringWithString:(NSString *)string fontSize:(CGFloat)size - color:(nullable UIColor *)color firstWordColor:(nullable UIColor *)firstWordColor -{ - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init]; - - if (string) { - NSDictionary *attributes = @{NSForegroundColorAttributeName: color ? : [UIColor blackColor], - NSFontAttributeName: [UIFont systemFontOfSize:size]}; - attributedString = [[NSMutableAttributedString alloc] initWithString:string]; - [attributedString addAttributes:attributes range:NSMakeRange(0, string.length)]; - - if (firstWordColor) { - NSRange firstSpaceRange = [string rangeOfCharacterFromSet:[NSCharacterSet whitespaceCharacterSet]]; - NSRange firstWordRange = NSMakeRange(0, firstSpaceRange.location); - [attributedString addAttribute:NSForegroundColorAttributeName value:firstWordColor range:firstWordRange]; - } - } - - return attributedString; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Models/VideoModel.h b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Models/VideoModel.h deleted file mode 100644 index c912ab45fe..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Models/VideoModel.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// VideoModel.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface VideoModel : NSObject -@property (nonatomic, strong, readonly) NSString* title; -@property (nonatomic, strong, readonly) NSURL *url; -@property (nonatomic, strong, readonly) NSString *userName; -@property (nonatomic, strong, readonly) NSURL *avatarUrl; -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Models/VideoModel.m b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Models/VideoModel.m deleted file mode 100644 index 46cd7f3da1..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Models/VideoModel.m +++ /dev/null @@ -1,28 +0,0 @@ -// -// VideoModel.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "VideoModel.h" - -@implementation VideoModel -- (instancetype)init -{ - self = [super init]; - if (self) { - NSString *videoUrlString = @"https://www.w3schools.com/html/mov_bbb.mp4"; - NSString *avatarUrlString = [NSString stringWithFormat:@"https://api.adorable.io/avatars/50/%@",[[NSProcessInfo processInfo] globallyUniqueString]]; - - _title = @"Demo title"; - _url = [NSURL URLWithString:videoUrlString]; - _userName = @"Random User"; - _avatarUrl = [NSURL URLWithString:avatarUrlString]; - } - - return self; -} -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Nodes/VideoContentCell.h b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Nodes/VideoContentCell.h deleted file mode 100644 index 2a386f9241..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Nodes/VideoContentCell.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// VideoContentCell.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "VideoModel.h" - -@interface VideoContentCell : ASCellNode -- (instancetype)initWithVideoObject:(VideoModel *)video; -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Nodes/VideoContentCell.m b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Nodes/VideoContentCell.m deleted file mode 100644 index fac4e389db..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/Nodes/VideoContentCell.m +++ /dev/null @@ -1,229 +0,0 @@ -// -// VideoContentCell.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "VideoContentCell.h" - -#import - -#import "Utilities.h" - -#define AVATAR_IMAGE_HEIGHT 30 -#define HORIZONTAL_BUFFER 10 -#define VERTICAL_BUFFER 5 - -@interface VideoContentCell () - -@end - -@implementation VideoContentCell -{ - VideoModel *_videoModel; - ASTextNode *_titleNode; - ASNetworkImageNode *_avatarNode; - ASVideoPlayerNode *_videoPlayerNode; - ASControlNode *_likeButtonNode; - ASButtonNode *_muteButtonNode; -} - -- (instancetype)initWithVideoObject:(VideoModel *)video -{ - self = [super init]; - if (self) { - _videoModel = video; - - _titleNode = [[ASTextNode alloc] init]; - _titleNode.attributedText = [[NSAttributedString alloc] initWithString:_videoModel.title attributes:[self titleNodeStringOptions]]; - _titleNode.style.flexGrow = 1.0; - [self addSubnode:_titleNode]; - - _avatarNode = [[ASNetworkImageNode alloc] init]; - _avatarNode.URL = _videoModel.avatarUrl; - - [_avatarNode setImageModificationBlock:^UIImage *(UIImage *image) { - CGSize profileImageSize = CGSizeMake(AVATAR_IMAGE_HEIGHT, AVATAR_IMAGE_HEIGHT); - return [image makeCircularImageWithSize:profileImageSize]; - }]; - - [self addSubnode:_avatarNode]; - - _likeButtonNode = [[ASControlNode alloc] init]; - _likeButtonNode.backgroundColor = [UIColor redColor]; - [self addSubnode:_likeButtonNode]; - - _muteButtonNode = [[ASButtonNode alloc] init]; - _muteButtonNode.style.width = ASDimensionMakeWithPoints(16.0); - _muteButtonNode.style.height = ASDimensionMakeWithPoints(22.0); - [_muteButtonNode addTarget:self action:@selector(didTapMuteButton) forControlEvents:ASControlNodeEventTouchUpInside]; - - _videoPlayerNode = [[ASVideoPlayerNode alloc] initWithURL:_videoModel.url]; - _videoPlayerNode.delegate = self; - _videoPlayerNode.backgroundColor = [UIColor blackColor]; - [self addSubnode:_videoPlayerNode]; - - [self setMuteButtonIcon]; - } - return self; -} - -- (NSDictionary*)titleNodeStringOptions -{ - return @{ - NSFontAttributeName : [UIFont systemFontOfSize:14.0], - NSForegroundColorAttributeName: [UIColor blackColor] - }; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - CGFloat fullWidth = [UIScreen mainScreen].bounds.size.width; - - _videoPlayerNode.style.width = ASDimensionMakeWithPoints(fullWidth); - _videoPlayerNode.style.height = ASDimensionMakeWithPoints(fullWidth * 9 / 16); - - _avatarNode.style.width = ASDimensionMakeWithPoints(AVATAR_IMAGE_HEIGHT); - _avatarNode.style.height = ASDimensionMakeWithPoints(AVATAR_IMAGE_HEIGHT); - - _likeButtonNode.style.width = ASDimensionMakeWithPoints(50.0); - _likeButtonNode.style.height = ASDimensionMakeWithPoints(26.0); - - ASStackLayoutSpec *headerStack = [ASStackLayoutSpec horizontalStackLayoutSpec]; - headerStack.spacing = HORIZONTAL_BUFFER; - headerStack.alignItems = ASStackLayoutAlignItemsCenter; - [headerStack setChildren:@[ _avatarNode, _titleNode]]; - - UIEdgeInsets headerInsets = UIEdgeInsetsMake(HORIZONTAL_BUFFER, HORIZONTAL_BUFFER, HORIZONTAL_BUFFER, HORIZONTAL_BUFFER); - ASInsetLayoutSpec *headerInset = [ASInsetLayoutSpec insetLayoutSpecWithInsets:headerInsets child:headerStack]; - - ASStackLayoutSpec *bottomControlsStack = [ASStackLayoutSpec horizontalStackLayoutSpec]; - bottomControlsStack.spacing = HORIZONTAL_BUFFER; - bottomControlsStack.alignItems = ASStackLayoutAlignItemsCenter; - bottomControlsStack.children = @[_likeButtonNode]; - - UIEdgeInsets bottomControlsInsets = UIEdgeInsetsMake(HORIZONTAL_BUFFER, HORIZONTAL_BUFFER, HORIZONTAL_BUFFER, HORIZONTAL_BUFFER); - ASInsetLayoutSpec *bottomControlsInset = [ASInsetLayoutSpec insetLayoutSpecWithInsets:bottomControlsInsets child:bottomControlsStack]; - - - ASStackLayoutSpec *verticalStack = [ASStackLayoutSpec verticalStackLayoutSpec]; - verticalStack.alignItems = ASStackLayoutAlignItemsStretch; - verticalStack.children = @[headerInset, _videoPlayerNode, bottomControlsInset]; - return verticalStack; -} - -- (void)setMuteButtonIcon -{ - if (_videoPlayerNode.muted) { - [_muteButtonNode setImage:[UIImage imageNamed:@"ico-mute"] forState:UIControlStateNormal]; - } else { - [_muteButtonNode setImage:[UIImage imageNamed:@"ico-unmute"] forState:UIControlStateNormal]; - } -} - -- (void)didTapMuteButton -{ - _videoPlayerNode.muted = !_videoPlayerNode.muted; - [self setMuteButtonIcon]; -} - -#pragma mark - ASVideoPlayerNodeDelegate -- (void)didTapVideoPlayerNode:(ASVideoPlayerNode *)videoPlayer -{ - if (_videoPlayerNode.playerState == ASVideoNodePlayerStatePlaying) { - _videoPlayerNode.controlsDisabled = !_videoPlayerNode.controlsDisabled; - [_videoPlayerNode pause]; - } else { - [_videoPlayerNode play]; - } -} - -- (NSDictionary *)videoPlayerNodeCustomControls:(ASVideoPlayerNode *)videoPlayer -{ - return @{ - @"muteControl" : _muteButtonNode - }; -} - -- (NSArray *)controlsForControlBar:(NSDictionary *)availableControls -{ - NSMutableArray *controls = [[NSMutableArray alloc] init]; - - if (availableControls[ @(ASVideoPlayerNodeControlTypePlaybackButton) ]) { - [controls addObject:availableControls[ @(ASVideoPlayerNodeControlTypePlaybackButton) ]]; - } - - if (availableControls[ @(ASVideoPlayerNodeControlTypeElapsedText) ]) { - [controls addObject:availableControls[ @(ASVideoPlayerNodeControlTypeElapsedText) ]]; - } - - if (availableControls[ @(ASVideoPlayerNodeControlTypeScrubber) ]) { - [controls addObject:availableControls[ @(ASVideoPlayerNodeControlTypeScrubber) ]]; - } - - if (availableControls[ @(ASVideoPlayerNodeControlTypeDurationText) ]) { - [controls addObject:availableControls[ @(ASVideoPlayerNodeControlTypeDurationText) ]]; - } - - return controls; -} - -#pragma mark - Layout -- (ASLayoutSpec*)videoPlayerNodeLayoutSpec:(ASVideoPlayerNode *)videoPlayer forControls:(NSDictionary *)controls forMaximumSize:(CGSize)maxSize -{ - ASLayoutSpec *spacer = [[ASLayoutSpec alloc] init]; - spacer.style.flexGrow = 1.0; - - UIEdgeInsets insets = UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0); - - if (controls[ @(ASVideoPlayerNodeControlTypeScrubber) ]) { - ASDisplayNode *scrubber = controls[ @(ASVideoPlayerNodeControlTypeScrubber) ]; - scrubber.style.height = ASDimensionMakeWithPoints(44.0); - scrubber.style.minWidth = ASDimensionMakeWithPoints(0.0); - scrubber.style.maxWidth = ASDimensionMakeWithPoints(maxSize.width); - scrubber.style.flexGrow = 1.0; - } - - NSArray *controlBarControls = [self controlsForControlBar:controls]; - NSMutableArray *topBarControls = [[NSMutableArray alloc] init]; - - //Our custom control - if (controls[@"muteControl"]) { - [topBarControls addObject:controls[@"muteControl"]]; - } - - - ASStackLayoutSpec *topBarSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:10.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsCenter - children:topBarControls]; - - ASInsetLayoutSpec *topBarInsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets child:topBarSpec]; - - ASStackLayoutSpec *controlbarSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:10.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsCenter - children: controlBarControls ]; - controlbarSpec.style.alignSelf = ASStackLayoutAlignSelfStretch; - - - - ASInsetLayoutSpec *controlbarInsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets child:controlbarSpec]; - - controlbarInsetSpec.style.alignSelf = ASStackLayoutAlignSelfStretch; - - ASStackLayoutSpec *mainVerticalStack = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical - spacing:0.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStart - children:@[topBarInsetSpec, spacer, controlbarInsetSpec]]; - - return mainVerticalStack; - -} -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/ViewController.h deleted file mode 100644 index 560b6a2d03..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : ASViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/ViewController.m deleted file mode 100644 index 0fe3274501..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/ViewController.m +++ /dev/null @@ -1,209 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" -#import -#import -#import "VideoModel.h" -#import "VideoContentCell.h" - -@interface ViewController() -@property (nonatomic, strong) ASVideoPlayerNode *videoPlayerNode; -@end - -@implementation ViewController -{ - ASTableNode *_tableNode; - NSMutableArray *_videoFeedData; -} - -- (instancetype)init -{ - _tableNode = [[ASTableNode alloc] init]; - _tableNode.delegate = self; - _tableNode.dataSource = self; - - if (!(self = [super initWithNode:_tableNode])) { - return nil; - } - - return self; -} - -- (void)loadView -{ - [super loadView]; - - _videoFeedData = [[NSMutableArray alloc] initWithObjects:[[VideoModel alloc] init], [[VideoModel alloc] init], nil]; - - [_tableNode reloadData]; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - //[self.view addSubnode:self.videoPlayerNode]; - - //[self.videoPlayerNode setNeedsLayout]; -} - -#pragma mark - ASCollectionDelegate - ASCollectionDataSource - -- (NSInteger)numberOfSectionsInTableNode:(ASTableNode *)tableNode -{ - return 1; -} - -- (NSInteger)tableNode:(ASTableNode *)tableNode numberOfRowsInSection:(NSInteger)section -{ - return _videoFeedData.count; -} - -- (ASCellNode *)tableNode:(ASTableNode *)tableNode nodeForRowAtIndexPath:(NSIndexPath *)indexPath -{ - VideoModel *videoObject = [_videoFeedData objectAtIndex:indexPath.row]; - VideoContentCell *cellNode = [[VideoContentCell alloc] initWithVideoObject:videoObject]; - return cellNode; -} - -- (ASVideoPlayerNode *)videoPlayerNode; -{ - if (_videoPlayerNode) { - return _videoPlayerNode; - } - - NSURL *fileUrl = [NSURL URLWithString:@"https://www.w3schools.com/html/mov_bbb.mp4"]; - - _videoPlayerNode = [[ASVideoPlayerNode alloc] initWithURL:fileUrl]; - _videoPlayerNode.delegate = self; -// _videoPlayerNode.disableControls = YES; -// -// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ -// _videoPlayerNode.disableControls = NO; -// }); - - _videoPlayerNode.backgroundColor = [UIColor blackColor]; - - return _videoPlayerNode; -} - -#pragma mark - ASVideoPlayerNodeDelegate -//- (NSArray *)videoPlayerNodeNeededControls:(ASVideoPlayerNode *)videoPlayer -//{ -// return @[ @(ASVideoPlayerNodeControlTypePlaybackButton), -// @(ASVideoPlayerNodeControlTypeElapsedText), -// @(ASVideoPlayerNodeControlTypeScrubber), -// @(ASVideoPlayerNodeControlTypeDurationText) ]; -//} -// -//- (UIColor *)videoPlayerNodeScrubberMaximumTrackTint:(ASVideoPlayerNode *)videoPlayer -//{ -// return [UIColor colorWithRed:1 green:1 blue:1 alpha:0.3]; -//} -// -//- (UIColor *)videoPlayerNodeScrubberMinimumTrackTint:(ASVideoPlayerNode *)videoPlayer -//{ -// return [UIColor whiteColor]; -//} -// -//- (UIColor *)videoPlayerNodeScrubberThumbTint:(ASVideoPlayerNode *)videoPlayer -//{ -// return [UIColor whiteColor]; -//} -// -//- (NSDictionary *)videoPlayerNodeTimeLabelAttributes:(ASVideoPlayerNode *)videoPlayerNode timeLabelType:(ASVideoPlayerNodeControlType)timeLabelType -//{ -// NSDictionary *options; -// -// if (timeLabelType == ASVideoPlayerNodeControlTypeElapsedText) { -// options = @{ -// NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Medium" size:16.0], -// NSForegroundColorAttributeName: [UIColor orangeColor] -// }; -// } else if (timeLabelType == ASVideoPlayerNodeControlTypeDurationText) { -// options = @{ -// NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Medium" size:16.0], -// NSForegroundColorAttributeName: [UIColor redColor] -// }; -// } -// -// return options; -//} - -/*- (ASLayoutSpec *)videoPlayerNodeLayoutSpec:(ASVideoPlayerNode *)videoPlayer - forControls:(NSDictionary *)controls - forConstrainedSize:(ASSizeRange)constrainedSize -{ - - NSMutableArray *bottomControls = [[NSMutableArray alloc] init]; - NSMutableArray *topControls = [[NSMutableArray alloc] init]; - - ASDisplayNode *scrubberNode = controls[@(ASVideoPlayerNodeControlTypeScrubber)]; - ASDisplayNode *playbackButtonNode = controls[@(ASVideoPlayerNodeControlTypePlaybackButton)]; - ASTextNode *elapsedTexNode = controls[@(ASVideoPlayerNodeControlTypeElapsedText)]; - ASTextNode *durationTexNode = controls[@(ASVideoPlayerNodeControlTypeDurationText)]; - - if (playbackButtonNode) { - [bottomControls addObject:playbackButtonNode]; - } - - if (scrubberNode) { - scrubberNode.preferredFrameSize = CGSizeMake(constrainedSize.max.width, 44.0); - [bottomControls addObject:scrubberNode]; - } - - if (elapsedTexNode) { - [topControls addObject:elapsedTexNode]; - } - - if (durationTexNode) { - [topControls addObject:durationTexNode]; - } - - ASLayoutSpec *spacer = [[ASLayoutSpec alloc] init]; - spacer.flexGrow = 1.0; - - ASStackLayoutSpec *topBarSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:10.0 - justifyContent:ASStackLayoutJustifyContentCenter - alignItems:ASStackLayoutAlignItemsCenter - children:topControls]; - - - - UIEdgeInsets topBarSpecInsets = UIEdgeInsetsMake(20.0, 10.0, 0.0, 10.0); - - ASInsetLayoutSpec *topBarSpecInsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:topBarSpecInsets child:topBarSpec]; - topBarSpecInsetSpec.alignSelf = ASStackLayoutAlignSelfStretch; - - ASStackLayoutSpec *controlbarSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:10.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsCenter - children:bottomControls]; - controlbarSpec.alignSelf = ASStackLayoutAlignSelfStretch; - - UIEdgeInsets insets = UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0); - - ASInsetLayoutSpec *controlbarInsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets child:controlbarSpec]; - - controlbarInsetSpec.alignSelf = ASStackLayoutAlignSelfStretch; - - ASStackLayoutSpec *mainVerticalStack = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical - spacing:0.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStart - children:@[ topBarSpecInsetSpec, spacer, controlbarInsetSpec ]]; - - - return mainVerticalStack; -}*/ - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/WindowWithStatusBarUnderlay.h b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/WindowWithStatusBarUnderlay.h deleted file mode 100644 index 025f3ba4fe..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/WindowWithStatusBarUnderlay.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// WindowWithStatusBarUnderlay.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface WindowWithStatusBarUnderlay : UIWindow - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/WindowWithStatusBarUnderlay.m b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/WindowWithStatusBarUnderlay.m deleted file mode 100644 index 944e5307b5..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/WindowWithStatusBarUnderlay.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// WindowWithStatusBarUnderlay.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "WindowWithStatusBarUnderlay.h" -#import "Utilities.h" - -@implementation WindowWithStatusBarUnderlay -{ - UIView *_statusBarOpaqueUnderlayView; -} - --(instancetype)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - _statusBarOpaqueUnderlayView = [[UIView alloc] init]; - _statusBarOpaqueUnderlayView.backgroundColor = [UIColor lighOrangeColor]; - [self addSubview:_statusBarOpaqueUnderlayView]; - } - return self; -} - --(void)layoutSubviews -{ - [super layoutSubviews]; - - [self bringSubviewToFront:_statusBarOpaqueUnderlayView]; - - CGRect statusBarFrame = CGRectZero; - statusBarFrame.size.width = [[UIScreen mainScreen] bounds].size.width; - statusBarFrame.size.height = [[UIApplication sharedApplication] statusBarFrame].size.height; - _statusBarOpaqueUnderlayView.frame = statusBarFrame; -} -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/main.m b/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKTube/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Podfile b/submodules/AsyncDisplayKit/examples/ASDKgram/Podfile deleted file mode 100644 index 8611fa11f2..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Podfile +++ /dev/null @@ -1,9 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture/IGListKit', :path => '../..' - pod 'Texture/PINRemoteImage', :path => '../..' - pod 'Texture/Yoga', :path => '../..' - pod 'Texture/Video', :path => '../..' - pod 'Weaver', :git => 'git@github.com:TextureGroup/Weaver.git', :branch => 'master' -end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/ASCollectionSectionController.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/ASCollectionSectionController.h deleted file mode 100644 index 1a3a8443c9..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/ASCollectionSectionController.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// ASCollectionSectionController.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface ASCollectionSectionController : IGListSectionController - -/** - * The items managed by this section controller. - */ -@property (nonatomic, strong, readonly) NSArray> *items; - -- (void)setItems:(NSArray> *)newItems - animated:(BOOL)animated - completion:(nullable void(^)())completion; - -- (NSInteger)numberOfItems; - -@end - -NS_ASSUME_NONNULL_END diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/ASCollectionSectionController.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/ASCollectionSectionController.m deleted file mode 100644 index c1ddb42d41..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/ASCollectionSectionController.m +++ /dev/null @@ -1,73 +0,0 @@ -// -// ASCollectionSectionController.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ASCollectionSectionController.h" -#import - -@interface ASCollectionSectionController () -@property (nonatomic, strong, readonly) dispatch_queue_t diffingQueue; - -/// The items that have been diffed and are waiting to be submitted to the collection view. -/// Should always be accessed on the diffing queue, and should never be accessed -/// before the initial items are read (in -numberOfItems). -@property (nonatomic, copy) NSArray *pendingItems; - -@property (nonatomic) BOOL initialItemsRead; -@end - -@implementation ASCollectionSectionController -@synthesize diffingQueue = _diffingQueue; - -- (NSInteger)numberOfItems -{ - if (_initialItemsRead == NO) { - _pendingItems = self.items; - _initialItemsRead = YES; - } - return self.items.count; -} - -- (dispatch_queue_t)diffingQueue -{ - if (_diffingQueue == nil) { - _diffingQueue = dispatch_queue_create("ASCollectionSectionController.diffingQueue", DISPATCH_QUEUE_SERIAL); - } - return _diffingQueue; -} - -- (void)setItems:(NSArray *)newItems animated:(BOOL)animated completion:(void(^)())completion -{ - ASDisplayNodeAssertMainThread(); - newItems = [newItems copy]; - if (!self.initialItemsRead) { - _items = newItems; - if (completion) { - completion(); - } - return; - } - - dispatch_async(self.diffingQueue, ^{ - IGListIndexSetResult *result = IGListDiff(self.pendingItems, newItems, IGListDiffPointerPersonality); - self.pendingItems = newItems; - dispatch_async(dispatch_get_main_queue(), ^{ - id ctx = self.collectionContext; - [ctx performBatchAnimated:animated updates:^(id _Nonnull batchContext) { - [batchContext insertInSectionController:(id)self atIndexes:result.inserts]; - [batchContext deleteInSectionController:(id)self atIndexes:result.deletes]; - _items = newItems; - } completion:^(BOOL finished) { - if (completion) { - completion(); - } - }]; - }); - }); -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/AppDelegate.h deleted file mode 100644 index 169cc651b5..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/AppDelegate.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -@interface AppDelegate : UIResponder - -@end - diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/AppDelegate.m deleted file mode 100644 index 9058c8f100..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/AppDelegate.m +++ /dev/null @@ -1,101 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" -#import "PhotoFeedViewController.h" -#import "PhotoFeedNodeController.h" -#import "PhotoFeedListKitViewController.h" -#import "WindowWithStatusBarUnderlay.h" -#import "Utilities.h" - -#import - -#define WEAVER 0 - -#if WEAVER -#import -#endif - -@interface AppDelegate () -@end - -@implementation AppDelegate -{ - WindowWithStatusBarUnderlay *_window; -} - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - - // this UIWindow subclass is neccessary to make the status bar opaque - _window = [[WindowWithStatusBarUnderlay alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - _window.backgroundColor = [UIColor whiteColor]; - - // ASDK Home Feed viewController & navController - PhotoFeedNodeController *asdkHomeFeedVC = [[PhotoFeedNodeController alloc] init]; - UINavigationController *asdkHomeFeedNavCtrl = [[UINavigationController alloc] initWithRootViewController:asdkHomeFeedVC]; - asdkHomeFeedNavCtrl.navigationBar.barStyle = UIBarStyleBlack; - asdkHomeFeedNavCtrl.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"ASDK" image:[UIImage imageNamed:@"home"] tag:0]; - asdkHomeFeedNavCtrl.hidesBarsOnSwipe = YES; - - // ListKit Home Feed viewController & navController - PhotoFeedListKitViewController *listKitHomeFeedVC = [[PhotoFeedListKitViewController alloc] init]; - UINavigationController *listKitHomeFeedNavCtrl = [[UINavigationController alloc] initWithRootViewController:listKitHomeFeedVC]; - listKitHomeFeedNavCtrl.navigationBar.barStyle = UIBarStyleBlack; - listKitHomeFeedNavCtrl.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"ListKit" image:[UIImage imageNamed:@"home"] tag:0]; - listKitHomeFeedNavCtrl.hidesBarsOnSwipe = YES; - - - - // UIKit Home Feed viewController & navController - PhotoFeedViewController *uikitHomeFeedVC = [[PhotoFeedViewController alloc] init]; - UINavigationController *uikitHomeFeedNavCtrl = [[UINavigationController alloc] initWithRootViewController:uikitHomeFeedVC]; - uikitHomeFeedNavCtrl.navigationBar.barStyle = UIBarStyleBlack; - uikitHomeFeedNavCtrl.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"UIKit" image:[UIImage imageNamed:@"home"] tag:0]; - uikitHomeFeedNavCtrl.hidesBarsOnSwipe = YES; - - // UITabBarController - UITabBarController *tabBarController = [[UITabBarController alloc] init]; - tabBarController.viewControllers = @[uikitHomeFeedNavCtrl, asdkHomeFeedNavCtrl, listKitHomeFeedNavCtrl]; - tabBarController.selectedViewController = asdkHomeFeedNavCtrl; - tabBarController.delegate = self; - [[UITabBar appearance] setTintColor:[UIColor darkBlueColor]]; - - _window.rootViewController = tabBarController; - [_window makeKeyAndVisible]; - - // Nav Bar appearance - NSDictionary *attributes = @{NSForegroundColorAttributeName:[UIColor whiteColor]}; - [[UINavigationBar appearance] setTitleTextAttributes:attributes]; - [[UINavigationBar appearance] setBarTintColor:[UIColor darkBlueColor]]; - [[UINavigationBar appearance] setTranslucent:NO]; - -#if WEAVER - WVDebugger *debugger = [WVDebugger defaultInstance]; - [debugger enableLayoutElementDebuggingWithApplication:application]; - [debugger autoConnect]; -#endif - - return YES; -} - -#pragma mark - UITabBarControllerDelegate - -- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController -{ - if ([viewController isKindOfClass:[UINavigationController class]]) { - NSArray *viewControllers = [(UINavigationController *)viewController viewControllers]; - UIViewController *rootViewController = viewControllers[0]; - if ([rootViewController conformsToProtocol:@protocol(PhotoFeedControllerProtocol)]) { - // FIXME: the dataModel does not currently handle clearing data during loading properly -// [(id )rootViewController resetAllData]; - } - } -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index eeea76c2db..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "83.5x83.5", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Contents.json b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Contents.json deleted file mode 100644 index da4a164c91..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/Contents.json b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/Contents.json deleted file mode 100644 index da4a164c91..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/camera.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/camera.imageset/Contents.json deleted file mode 100644 index 07252697c8..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/camera.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "camera.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "camera@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/camera.imageset/camera.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/camera.imageset/camera.png deleted file mode 100644 index 2eeecba825..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/camera.imageset/camera.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/camera.imageset/camera@2x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/camera.imageset/camera@2x.png deleted file mode 100644 index c1ea4ab857..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/camera.imageset/camera@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/crosshairs.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/crosshairs.imageset/Contents.json deleted file mode 100644 index 66e65dc03e..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/crosshairs.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "crosshair.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/crosshairs.imageset/crosshair.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/crosshairs.imageset/crosshair.png deleted file mode 100644 index ea3c5e27ba..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/crosshairs.imageset/crosshair.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/earth.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/earth.imageset/Contents.json deleted file mode 100644 index 37e4afe0e2..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/earth.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "earth.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "earth@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/earth.imageset/earth.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/earth.imageset/earth.png deleted file mode 100644 index c182ea5565..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/earth.imageset/earth.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/earth.imageset/earth@2x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/earth.imageset/earth@2x.png deleted file mode 100644 index b8049a5004..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/earth.imageset/earth@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/home.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/home.imageset/Contents.json deleted file mode 100644 index ce48b1b641..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/home.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "home.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "home@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/home.imageset/home.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/home.imageset/home.png deleted file mode 100644 index b88cd66a4b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/home.imageset/home.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/home.imageset/home@2x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/home.imageset/home@2x.png deleted file mode 100644 index 838e660097..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/home.imageset/home@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/profile.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/profile.imageset/Contents.json deleted file mode 100644 index ecb5bbebcf..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/profile.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "profile.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "profile@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/profile.imageset/profile.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/profile.imageset/profile.png deleted file mode 100644 index d885b3aedf..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/profile.imageset/profile.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/profile.imageset/profile@2x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/profile.imageset/profile@2x.png deleted file mode 100644 index 81352fe0cb..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/profile.imageset/profile@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Availability.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Availability.h deleted file mode 100644 index 27c8f82ceb..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Availability.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// Availability.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -/** - * Enable Yoga layout engine in Texture cells - */ -#define YOGA_LAYOUT 0 - -/** - * There are many ways to format ASLayoutSpec code. In this example, we offer two different formats: - * A flatter, more ordinary Objective-C style; or a more structured, "visually" declarative style. - */ -#define FLAT_LAYOUT 0 diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Base.lproj/LaunchScreen.storyboard b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 8326657f7a..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/FeedHeaderNode.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/FeedHeaderNode.h deleted file mode 100644 index 13e6b16d6f..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/FeedHeaderNode.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FeedHeaderNode.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface FeedHeaderNode : ASCellNode - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/FeedHeaderNode.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/FeedHeaderNode.m deleted file mode 100644 index f6d922c27c..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/FeedHeaderNode.m +++ /dev/null @@ -1,55 +0,0 @@ -// -// FeedHeaderNode.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "FeedHeaderNode.h" - -#import "Availability.h" -#import "Utilities.h" - -#define YOGA_LAYOUT 0 - -static UIEdgeInsets kFeedHeaderInset = { .top = 20, .bottom = 20, .left = 10, .right = 10 }; - -@interface FeedHeaderNode () -@property (nonatomic, strong, readonly) ASTextNode *textNode; -@end - -@implementation FeedHeaderNode - -- (instancetype)init -{ - if (self = [super init]) { - self.automaticallyManagesSubnodes = YES; - - _textNode = [[ASTextNode alloc] init]; - _textNode.attributedText = [NSAttributedString attributedStringWithString:@"Latest Posts" fontSize:18 color:[UIColor darkGrayColor] firstWordColor:nil]; - - [self setupYogaLayoutIfNeeded]; - } - return self; -} - -#if !YOGA_LAYOUT -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:kFeedHeaderInset child:_textNode]; -} -#endif - -- (void)setupYogaLayoutIfNeeded -{ -#if YOGA_LAYOUT - [self.style yogaNodeCreateIfNeeded]; - [self.textNode.style yogaNodeCreateIfNeeded]; - [self addYogaChild:self.textNode]; - - self.style.padding = ASEdgeInsetsMake(kFeedHeaderInset); -#endif -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/ImageURLModel.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/ImageURLModel.h deleted file mode 100644 index 16828a2dac..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/ImageURLModel.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ImageURLModel.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -@interface ImageURLModel : NSObject - -+ (NSString *)imageParameterForClosestImageSize:(CGSize)size; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/ImageURLModel.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/ImageURLModel.m deleted file mode 100644 index 671027db5e..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/ImageURLModel.m +++ /dev/null @@ -1,50 +0,0 @@ -// -// ImageURLModel.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ImageURLModel.h" - -@implementation ImageURLModel - -+ (NSString *)imageParameterForClosestImageSize:(CGSize)size -{ - BOOL squareImageRequested = (size.width == size.height) ? YES : NO; - - if (squareImageRequested) { - NSUInteger imageParameterID = [self imageParameterForSquareCroppedSize:size]; - return [NSString stringWithFormat:@"&image_size=%lu", (long)imageParameterID]; - } else { - return @""; - } -} - -// 500px standard cropped image sizes -+ (NSUInteger)imageParameterForSquareCroppedSize:(CGSize)size -{ - NSUInteger imageParameterID; - - if (size.height <= 70) { - imageParameterID = 1; - } else if (size.height <= 100) { - imageParameterID = 100; - } else if (size.height <= 140) { - imageParameterID = 2; - } else if (size.height <= 200) { - imageParameterID = 200; - } else if (size.height <= 280) { - imageParameterID = 3; - } else if (size.height <= 400) { - imageParameterID = 400; - } else { - imageParameterID = 600; - } - - return imageParameterID; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Info.plist deleted file mode 100644 index 7641b2f1a3..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Info.plist +++ /dev/null @@ -1,49 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - NSLocationWhenInUseUsageDescription - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoCellNode.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoCellNode.h deleted file mode 100644 index 7724970252..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoCellNode.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// PhotoCellNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoModel.h" -#import -#import "PhotoTableViewCell.h" // PhotoTableViewCellProtocol - - -@interface PhotoCellNode : ASCellNode - -- (instancetype)initWithPhotoObject:(PhotoModel *)photo; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoCellNode.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoCellNode.m deleted file mode 100644 index eef2bb06be..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoCellNode.m +++ /dev/null @@ -1,341 +0,0 @@ -// -// PhotoCellNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoCellNode.h" - -#import -#import - -#import "Availability.h" -#import "PINImageView+PINRemoteImage.h" -#import "PINButton+PINRemoteImage.h" -#import "Utilities.h" - -#define DEBUG_PHOTOCELL_LAYOUT 0 - -#define HEADER_HEIGHT 50 -#define USER_IMAGE_HEIGHT 30 -#define HORIZONTAL_BUFFER 10 -#define VERTICAL_BUFFER 5 -#define FONT_SIZE 14 - -#define InsetForAvatar UIEdgeInsetsMake(HORIZONTAL_BUFFER, 0, HORIZONTAL_BUFFER, HORIZONTAL_BUFFER) -#define InsetForHeader UIEdgeInsetsMake(0, HORIZONTAL_BUFFER, 0, HORIZONTAL_BUFFER) -#define InsetForFooter UIEdgeInsetsMake(VERTICAL_BUFFER, HORIZONTAL_BUFFER, VERTICAL_BUFFER, HORIZONTAL_BUFFER) - -@interface PhotoCellNode () -@end - -@implementation PhotoCellNode -{ - PhotoModel *_photoModel; - ASNetworkImageNode *_userAvatarImageNode; - ASNetworkImageNode *_photoImageNode; - ASTextNode *_userNameLabel; - ASTextNode *_photoLocationLabel; - ASTextNode *_photoTimeIntervalSincePostLabel; - ASTextNode *_photoLikesLabel; - ASTextNode *_photoDescriptionLabel; -} - -#pragma mark - Lifecycle - -- (instancetype)initWithPhotoObject:(PhotoModel *)photo; -{ - self = [super init]; - - if (self) { - - _photoModel = photo; - - _userAvatarImageNode = [[ASNetworkImageNode alloc] init]; - _userAvatarImageNode.URL = photo.ownerUserProfile.userPicURL; // FIXME: make round - - // FIXME: autocomplete for this line seems broken - [_userAvatarImageNode setImageModificationBlock:^UIImage *(UIImage *image) { - CGSize profileImageSize = CGSizeMake(USER_IMAGE_HEIGHT, USER_IMAGE_HEIGHT); - return [image makeCircularImageWithSize:profileImageSize]; - }]; - - _photoImageNode = [[ASNetworkImageNode alloc] init]; - _photoImageNode.delegate = self; - _photoImageNode.URL = photo.URL; - _photoImageNode.layerBacked = YES; - - _userNameLabel = [[ASTextNode alloc] init]; - _userNameLabel.attributedText = [photo.ownerUserProfile usernameAttributedStringWithFontSize:FONT_SIZE]; - - _photoLocationLabel = [[ASTextNode alloc] init]; - _photoLocationLabel.maximumNumberOfLines = 1; - _photoLocationLabel.attributedText = [photo locationAttributedStringWithFontSize:FONT_SIZE]; - - _photoTimeIntervalSincePostLabel = [self createLayerBackedTextNodeWithString:[photo uploadDateAttributedStringWithFontSize:FONT_SIZE]]; - _photoLikesLabel = [self createLayerBackedTextNodeWithString:[photo likesAttributedStringWithFontSize:FONT_SIZE]]; - _photoDescriptionLabel = [self createLayerBackedTextNodeWithString:[photo descriptionAttributedStringWithFontSize:FONT_SIZE]]; - _photoDescriptionLabel.maximumNumberOfLines = 3; - - // instead of adding everything addSubnode: - self.automaticallyManagesSubnodes = YES; - - [self setupYogaLayoutIfNeeded]; - -#if DEBUG_PHOTOCELL_LAYOUT - _userAvatarImageNode.backgroundColor = [UIColor greenColor]; - _userNameLabel.backgroundColor = [UIColor greenColor]; - _photoLocationLabel.backgroundColor = [UIColor greenColor]; - _photoTimeIntervalSincePostLabel.backgroundColor = [UIColor greenColor]; - _photoCommentsNode.backgroundColor = [UIColor greenColor]; - _photoDescriptionLabel.backgroundColor = [UIColor greenColor]; - _photoLikesLabel.backgroundColor = [UIColor greenColor]; -#endif - } - - return self; -} - -#if !YOGA_LAYOUT -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - // There are many ways to format ASLayoutSpec code. In this example, we offer two different formats: - // A flatter, more ordinary Objective-C style; or a more structured, "visually" declarative style. - if (FLAT_LAYOUT) { - // This layout has a horizontal stack of header items at the top, set within a vertical stack of items. - NSMutableArray *headerChildren = [NSMutableArray array]; - NSMutableArray *verticalChildren = [NSMutableArray array]; - - // Header stack - ASStackLayoutSpec *headerStack = [ASStackLayoutSpec horizontalStackLayoutSpec]; - headerStack.alignItems = ASStackLayoutAlignItemsCenter; - - // Avatar Image, with inset - first thing in the header stack. - _userAvatarImageNode.style.preferredSize = CGSizeMake(USER_IMAGE_HEIGHT, USER_IMAGE_HEIGHT); - [headerChildren addObject:[ASInsetLayoutSpec insetLayoutSpecWithInsets:InsetForAvatar child:_userAvatarImageNode]]; - - // User Name and Photo Location stack is next - ASStackLayoutSpec *userPhotoLocationStack = [ASStackLayoutSpec verticalStackLayoutSpec]; - userPhotoLocationStack.style.flexShrink = 1.0; - [headerChildren addObject:userPhotoLocationStack]; - - // Setup the inside of the User Name and Photo Location stack. - _userNameLabel.style.flexShrink = 1.0; - [userPhotoLocationStack setChildren:@[_userNameLabel]]; - - if (_photoLocationLabel.attributedText) { - _photoLocationLabel.style.flexShrink = 1.0; - [userPhotoLocationStack setChildren:[userPhotoLocationStack.children arrayByAddingObject:_photoLocationLabel]]; - } - - // Add a spacer to allow a flexible space between the User Name / Location stack, and the Timestamp. - ASLayoutSpec *spacer = [ASLayoutSpec new]; - spacer.style.flexGrow = 1.0; - [headerChildren addObject:spacer]; - - // Photo Timestamp Label. - _photoTimeIntervalSincePostLabel.style.spacingBefore = HORIZONTAL_BUFFER; - [headerChildren addObject:_photoTimeIntervalSincePostLabel]; - - // Add all of the above items to the horizontal header stack - headerStack.children = headerChildren; - - // Create the last stack before assembling everything: the Footer Stack contains the description and comments. - ASStackLayoutSpec *footerStack = [ASStackLayoutSpec verticalStackLayoutSpec]; - footerStack.spacing = VERTICAL_BUFFER; - footerStack.children = @[_photoLikesLabel, _photoDescriptionLabel]; - - // Main Vertical Stack: contains header, large main photo with fixed aspect ratio, and footer. - ASStackLayoutSpec *verticalStack = [ASStackLayoutSpec verticalStackLayoutSpec]; - - [verticalChildren addObject:[ASInsetLayoutSpec insetLayoutSpecWithInsets:InsetForHeader child:headerStack]]; - [verticalChildren addObject:[ASRatioLayoutSpec ratioLayoutSpecWithRatio :1.0 child:_photoImageNode]]; - [verticalChildren addObject:[ASInsetLayoutSpec insetLayoutSpecWithInsets:InsetForFooter child:footerStack]]; - - verticalStack.children = verticalChildren; - - return verticalStack; - - } else { // The style below is the more structured, visual, and declarative style. It is functionally identical. - - return - // Main stack - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical - spacing:0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStretch - children:@[ - - // Header stack with inset - [ASInsetLayoutSpec - insetLayoutSpecWithInsets:InsetForHeader - child: - // Header stack - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:0.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsCenter - children:@[ - // Avatar image with inset - [ASInsetLayoutSpec - insetLayoutSpecWithInsets:InsetForAvatar - child: - [_userAvatarImageNode styledWithBlock:^(ASLayoutElementStyle *style) { - style.preferredSize = CGSizeMake(USER_IMAGE_HEIGHT, USER_IMAGE_HEIGHT); - }] - ], - // User and photo location stack - [[ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical - spacing:0.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStretch - children:_photoLocationLabel.attributedText ? @[ - [_userNameLabel styledWithBlock:^(ASLayoutElementStyle *style) { - style.flexShrink = 1.0; - }], - [_photoLocationLabel styledWithBlock:^(ASLayoutElementStyle *style) { - style.flexShrink = 1.0; - }] - ] : - @[ - [_userNameLabel styledWithBlock:^(ASLayoutElementStyle *style) { - style.flexShrink = 1.0; - }] - ]] - styledWithBlock:^(ASLayoutElementStyle *style) { - style.flexShrink = 1.0; - }], - // Spacer between user / photo location and photo time inverval - [[ASLayoutSpec new] styledWithBlock:^(ASLayoutElementStyle *style) { - style.flexGrow = 1.0; - }], - // Photo and time interval node - [_photoTimeIntervalSincePostLabel styledWithBlock:^(ASLayoutElementStyle *style) { - // to remove double spaces around spacer - style.spacingBefore = HORIZONTAL_BUFFER; - }] - ]] - ], - - // Center photo with ratio - [ASRatioLayoutSpec - ratioLayoutSpecWithRatio:1.0 - child:_photoImageNode], - - // Footer stack with inset - [ASInsetLayoutSpec - insetLayoutSpecWithInsets:InsetForFooter - child: - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical - spacing:VERTICAL_BUFFER - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStretch - children:@[ - _photoLikesLabel, - _photoDescriptionLabel - ]] - ] - ]]; - } -} -#endif - -#pragma mark - Instance Methods - -- (void)didEnterPreloadState -{ - [super didEnterPreloadState]; -} - -#pragma mark - Network Image Delegate - -- (void)imageNode:(ASNetworkImageNode *)imageNode didLoadImage:(UIImage *)image info:(ASNetworkImageLoadInfo *)info -{ - // Docs say method is called from bg but right now it's called from main. - // Save main thread time by shunting this. - if (info.sourceType == ASNetworkImageSourceDownload) { - ASPerformBlockOnBackgroundThread(^{ - NSLog(@"Received image %@ from %@ with userInfo %@", image, info.url.path, ASObjectDescriptionMakeTiny(info.userInfo)); - }); - } -} - -#pragma mark - Helper Methods - -- (ASTextNode *)createLayerBackedTextNodeWithString:(NSAttributedString *)attributedString -{ - ASTextNode *textNode = [[ASTextNode alloc] init]; - textNode.layerBacked = YES; - textNode.attributedText = attributedString; - return textNode; -} - -- (void)setupYogaLayoutIfNeeded -{ -#if YOGA_LAYOUT - [self.style yogaNodeCreateIfNeeded]; - [_userAvatarImageNode.style yogaNodeCreateIfNeeded]; - [_userNameLabel.style yogaNodeCreateIfNeeded]; - [_photoImageNode.style yogaNodeCreateIfNeeded]; - [_photoLikesLabel.style yogaNodeCreateIfNeeded]; - [_photoDescriptionLabel.style yogaNodeCreateIfNeeded]; - [_photoLocationLabel.style yogaNodeCreateIfNeeded]; - [_photoTimeIntervalSincePostLabel.style yogaNodeCreateIfNeeded]; - - ASDisplayNode *headerStack = [ASDisplayNode yogaHorizontalStack]; - headerStack.style.margin = ASEdgeInsetsMake(InsetForHeader); - headerStack.style.alignItems = ASStackLayoutAlignItemsCenter; - headerStack.style.flexGrow = 1.0; - - // Avatar Image, with inset - first thing in the header stack. - _userAvatarImageNode.style.preferredSize = CGSizeMake(USER_IMAGE_HEIGHT, USER_IMAGE_HEIGHT); - _userAvatarImageNode.style.margin = ASEdgeInsetsMake(InsetForAvatar); - [headerStack addYogaChild:_userAvatarImageNode]; - - // User Name and Photo Location stack is next - ASDisplayNode *userPhotoLocationStack = [ASDisplayNode yogaVerticalStack]; - userPhotoLocationStack.style.flexShrink = 1.0; - [headerStack addYogaChild:userPhotoLocationStack]; - - // Setup the inside of the User Name and Photo Location stack. - _userNameLabel.style.flexShrink = 1.0; - [userPhotoLocationStack addYogaChild:_userNameLabel]; - - if (_photoLocationLabel.attributedText) { - _photoLocationLabel.style.flexShrink = 1.0; - [userPhotoLocationStack addYogaChild:_photoLocationLabel]; - } - - // Add a spacer to allow a flexible space between the User Name / Location stack, and the Timestamp. - [headerStack addYogaChild:[ASDisplayNode yogaSpacerNode]]; - - // Photo Timestamp Label. - _photoTimeIntervalSincePostLabel.style.spacingBefore = HORIZONTAL_BUFFER; - [headerStack addYogaChild:_photoTimeIntervalSincePostLabel]; - - // Create the last stack before assembling everything: the Footer Stack contains the description and comments. - ASDisplayNode *footerStack = [ASDisplayNode yogaVerticalStack]; - footerStack.style.margin = ASEdgeInsetsMake(InsetForFooter); - footerStack.style.padding = ASEdgeInsetsMake(UIEdgeInsetsMake(0.0, 0.0, VERTICAL_BUFFER, 0.0)); - footerStack.yogaChildren = @[_photoLikesLabel, _photoDescriptionLabel]; - - // Main Vertical Stack: contains header, large main photo with fixed aspect ratio, and footer. - _photoImageNode.style.aspectRatio = 1.0; - - ASDisplayNode *verticalStack = self; - self.style.flexDirection = ASStackLayoutDirectionVertical; - - [verticalStack addYogaChild:headerStack]; - [verticalStack addYogaChild:_photoImageNode]; - [verticalStack addYogaChild:footerStack]; -#endif -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoCollectionViewCell.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoCollectionViewCell.h deleted file mode 100644 index d277b5a571..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoCollectionViewCell.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// PhotoCollectionViewCell.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoModel.h" - -@interface PhotoCollectionViewCell : UICollectionViewCell - -- (void)updateCellWithPhotoObject:(PhotoModel *)photo; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoCollectionViewCell.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoCollectionViewCell.m deleted file mode 100644 index d04fe1ca5d..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoCollectionViewCell.m +++ /dev/null @@ -1,58 +0,0 @@ -// -// PhotoCollectionViewCell.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoCollectionViewCell.h" -#import "PINImageView+PINRemoteImage.h" -#import "PINButton+PINRemoteImage.h" - -@implementation PhotoCollectionViewCell -{ - UIImageView *_photoImageView; -} - -#pragma mark - Lifecycle - -- (instancetype)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - - if (self) { - - _photoImageView = [[UIImageView alloc] init]; - [_photoImageView setPin_updateWithProgress:YES]; - [self.contentView addSubview:_photoImageView]; - } - - return self; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - _photoImageView.frame = self.bounds; -} - -- (void)prepareForReuse -{ - [super prepareForReuse]; - - // remove images so that the old content doesn't appear before the new content is loaded - _photoImageView.image = nil; -} - -#pragma mark - Instance Methods - -- (void)updateCellWithPhotoObject:(PhotoModel *)photo -{ - // async download of photo using PINRemoteImage - [_photoImageView pin_setImageFromURL:photo.URL]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedBaseController.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedBaseController.h deleted file mode 100644 index b40a5946c8..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedBaseController.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// PhotoFeedBaseController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "PhotoFeedControllerProtocol.h" - -@protocol PhotoFeedControllerProtocol; -@class PhotoFeedModel; - -@interface PhotoFeedBaseController : ASViewController - -@property (nonatomic, strong, readonly) PhotoFeedModel *photoFeed; -@property (nonatomic, strong, readonly) UITableView *tableView; - -- (void)refreshFeed; -- (void)insertNewRows:(NSArray *)newPhotos; - -#pragma mark - Subclasses must override these methods - -- (void)loadPage; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedBaseController.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedBaseController.m deleted file mode 100644 index d94a34e922..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedBaseController.m +++ /dev/null @@ -1,112 +0,0 @@ -// -// PhotoFeedBaseController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoFeedBaseController.h" -#import "PhotoFeedModel.h" - -@implementation PhotoFeedBaseController -{ - UIActivityIndicatorView *_activityIndicatorView; -} - -// -loadView is guaranteed to be called on the main thread and is the appropriate place to -// set up an UIKit objects you may be using. -- (void)loadView -{ - [super loadView]; - - _activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; - - _photoFeed = [[PhotoFeedModel alloc] initWithPhotoFeedModelType:PhotoFeedModelTypePopular imageSize:[self imageSizeForScreenWidth]]; - [self refreshFeed]; - - CGSize boundSize = self.view.bounds.size; - [_activityIndicatorView sizeToFit]; - CGRect refreshRect = _activityIndicatorView.frame; - refreshRect.origin = CGPointMake((boundSize.width - _activityIndicatorView.frame.size.width) / 2.0, - (boundSize.height - _activityIndicatorView.frame.size.height) / 2.0); - _activityIndicatorView.frame = refreshRect; - [self.view addSubview:_activityIndicatorView]; - - self.tableView.allowsSelection = NO; - self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - - self.view.backgroundColor = [UIColor whiteColor]; -} - -- (void)refreshFeed -{ - [_activityIndicatorView startAnimating]; - // small first batch - [_photoFeed refreshFeedWithCompletionBlock:^(NSArray *newPhotos){ - - [_activityIndicatorView stopAnimating]; - - [self.tableView reloadData]; - - // immediately start second larger fetch - [self loadPage]; - - } numResultsToReturn:4]; -} - -- (void)insertNewRows:(NSArray *)newPhotos -{ - NSInteger section = 0; - NSMutableArray *indexPaths = [NSMutableArray array]; - - NSInteger newTotalNumberOfPhotos = [_photoFeed numberOfItemsInFeed]; - NSInteger existingNumberOfPhotos = newTotalNumberOfPhotos - newPhotos.count; - for (NSInteger row = existingNumberOfPhotos; row < newTotalNumberOfPhotos; row++) { - NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:section]; - [indexPaths addObject:path]; - } - [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]; -} - -- (UIStatusBarStyle)preferredStatusBarStyle -{ - return UIStatusBarStyleLightContent; -} - -- (BOOL)prefersStatusBarHidden -{ - return NO; -} - -- (CGSize)imageSizeForScreenWidth -{ - CGRect screenRect = [[UIScreen mainScreen] bounds]; - CGFloat screenScale = [[UIScreen mainScreen] scale]; - return CGSizeMake(screenRect.size.width * screenScale, screenRect.size.width * screenScale); -} - -#pragma mark - PhotoFeedViewControllerProtocol - -- (void)resetAllData -{ - [_photoFeed clearFeed]; - [self.tableView reloadData]; - [self refreshFeed]; -} - -#pragma mark - Subclassing - -- (UITableView *)tableView -{ - NSAssert(NO, @"Subclasses must override this method"); - return nil; -} - -- (void)loadPage -{ - NSAssert(NO, @"Subclasses must override this method"); -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedControllerProtocol.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedControllerProtocol.h deleted file mode 100644 index df5832939b..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedControllerProtocol.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// PhotoFeedControllerProtocol.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@protocol PhotoFeedControllerProtocol -- (void)resetAllData; -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedListKitViewController.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedListKitViewController.h deleted file mode 100644 index a1e3e6a338..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedListKitViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// PhotoFeedListKitViewController.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "PhotoFeedControllerProtocol.h" - -@interface PhotoFeedListKitViewController : ASViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedListKitViewController.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedListKitViewController.m deleted file mode 100644 index 997e9451b8..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedListKitViewController.m +++ /dev/null @@ -1,118 +0,0 @@ -// -// PhotoFeedListKitViewController.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoFeedListKitViewController.h" -#import -#import "PhotoFeedModel.h" -#import "PhotoFeedSectionController.h" -#import "RefreshingSectionControllerType.h" - -@interface PhotoFeedListKitViewController () -@property (nonatomic, strong) IGListAdapter *listAdapter; -@property (nonatomic, strong) PhotoFeedModel *photoFeed; -@property (nonatomic, strong, readonly) ASCollectionNode *collectionNode; -@property (nonatomic, strong, readonly) UIActivityIndicatorView *spinner; -@property (nonatomic, strong, readonly) UIRefreshControl *refreshCtrl; -@end - -@implementation PhotoFeedListKitViewController -@synthesize spinner = _spinner; - -- (instancetype)init -{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - ASCollectionNode *node = [[ASCollectionNode alloc] initWithCollectionViewLayout:layout]; - if (self = [super initWithNode:node]) { - self.navigationItem.title = @"ListKit"; - - CGRect screenRect = [[UIScreen mainScreen] bounds]; - CGFloat screenScale = [[UIScreen mainScreen] scale]; - CGSize screenWidthImageSize = CGSizeMake(screenRect.size.width * screenScale, screenRect.size.width * screenScale); - _photoFeed = [[PhotoFeedModel alloc] initWithPhotoFeedModelType:PhotoFeedModelTypePopular imageSize:screenWidthImageSize]; - - IGListAdapterUpdater *updater = [[IGListAdapterUpdater alloc] init]; - _listAdapter = [[IGListAdapter alloc] initWithUpdater:updater viewController:self workingRangeSize:0]; - _listAdapter.dataSource = self; - [_listAdapter setASDKCollectionNode:self.collectionNode]; - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.collectionNode.view.alwaysBounceVertical = YES; - _refreshCtrl = [[UIRefreshControl alloc] init]; - [_refreshCtrl addTarget:self action:@selector(refreshFeed) forControlEvents:UIControlEventValueChanged]; - [self.collectionNode.view addSubview:_refreshCtrl]; - _spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; -} - -- (ASCollectionNode *)collectionNode -{ - return self.node; -} - -- (void)resetAllData -{ - // nop, not used currently -} - -- (void)refreshFeed -{ - // Ask the first section controller to do the refreshing. - id secCtrl = [self.listAdapter sectionControllerForObject:self.photoFeed]; - if ([(NSObject*)secCtrl conformsToProtocol:@protocol(RefreshingSectionControllerType)]) { - [secCtrl refreshContentWithCompletion:^{ - [self.refreshCtrl endRefreshing]; - }]; - } -} - -- (UIActivityIndicatorView *)spinner -{ - if (_spinner == nil) { - _spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; - [_spinner startAnimating]; - } - return _spinner; -} - -- (UIStatusBarStyle)preferredStatusBarStyle -{ - return UIStatusBarStyleLightContent; -} - -- (BOOL)prefersStatusBarHidden -{ - return NO; -} - -#pragma mark - IGListAdapterDataSource - -- (NSArray> *)objectsForListAdapter:(IGListAdapter *)listAdapter -{ - return @[ self.photoFeed ]; -} - -- (UIView *)emptyViewForListAdapter:(IGListAdapter *)listAdapter -{ - return self.spinner; -} - -- (IGListSectionController *)listAdapter:(IGListAdapter *)listAdapter sectionControllerForObject:(id)object -{ - if ([object isKindOfClass:[PhotoFeedModel class]]) { - return [[PhotoFeedSectionController alloc] init]; - } else { - ASDisplayNodeFailAssert(@"Only supports objects of class PhotoFeedModel."); - return nil; - } -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedModel.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedModel.h deleted file mode 100644 index a71b830b37..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedModel.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// PhotoFeedModel.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoModel.h" -#import - -typedef NS_ENUM(NSInteger, PhotoFeedModelType) { - PhotoFeedModelTypePopular, - PhotoFeedModelTypeLocation, - PhotoFeedModelTypeUserPhotos -}; - -@interface PhotoFeedModel : NSObject - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithPhotoFeedModelType:(PhotoFeedModelType)type imageSize:(CGSize)size NS_DESIGNATED_INITIALIZER; - -@property (nonatomic, readonly) NSArray *photos; - -- (NSUInteger)totalNumberOfPhotos; -- (NSUInteger)numberOfItemsInFeed; -- (PhotoModel *)objectAtIndex:(NSUInteger)index; -- (NSInteger)indexOfPhotoModel:(PhotoModel *)photoModel; - -- (void)updatePhotoFeedModelTypeUserId:(NSUInteger)userID; - -- (void)clearFeed; -- (void)requestPageWithCompletionBlock:(void (^)(NSArray *))block numResultsToReturn:(NSUInteger)numResults; -- (void)refreshFeedWithCompletionBlock:(void (^)(NSArray *))block numResultsToReturn:(NSUInteger)numResults; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedModel.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedModel.m deleted file mode 100644 index 6548f9d373..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedModel.m +++ /dev/null @@ -1,251 +0,0 @@ -// -// PhotoFeedModel.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoFeedModel.h" -#import "ImageURLModel.h" - -#define unsplash_ENDPOINT_HOST @"https://api.unsplash.com/" -#define unsplash_ENDPOINT_POPULAR @"photos?order_by=popular" -#define unsplash_ENDPOINT_SEARCH @"photos/search?geo=" //latitude,longitude,radius -#define unsplash_ENDPOINT_USER @"photos?user_id=" -#define unsplash_CONSUMER_KEY_PARAM @"&client_id=3b99a69cee09770a4a0bbb870b437dbda53efb22f6f6de63714b71c4df7c9642" // PLEASE REQUEST YOUR OWN UNSPLASH CONSUMER KEY -#define unsplash_IMAGES_PER_PAGE 30 - -@implementation PhotoFeedModel -{ - PhotoFeedModelType _feedType; - - NSMutableArray *_photos; // array of PhotoModel objects - NSMutableArray *_ids; - - CGSize _imageSize; - NSString *_urlString; - NSUInteger _currentPage; - NSUInteger _totalPages; - NSUInteger _totalItems; - BOOL _fetchPageInProgress; - BOOL _refreshFeedInProgress; - NSURLSessionDataTask *_task; - - NSUInteger _userID; -} - -#pragma mark - Lifecycle - -- (instancetype)initWithPhotoFeedModelType:(PhotoFeedModelType)type imageSize:(CGSize)size -{ - self = [super init]; - - if (self) { - _feedType = type; - _imageSize = size; - _photos = [[NSMutableArray alloc] init]; - _ids = [[NSMutableArray alloc] init]; - _currentPage = 0; - - NSString *apiEndpointString; - switch (type) { - case (PhotoFeedModelTypePopular): - apiEndpointString = unsplash_ENDPOINT_POPULAR; - break; - - case (PhotoFeedModelTypeLocation): - apiEndpointString = unsplash_ENDPOINT_SEARCH; - break; - - case (PhotoFeedModelTypeUserPhotos): - apiEndpointString = unsplash_ENDPOINT_USER; - break; - - default: - break; - } - _urlString = [[unsplash_ENDPOINT_HOST stringByAppendingString:apiEndpointString] stringByAppendingString:unsplash_CONSUMER_KEY_PARAM]; - } - - return self; -} - -#pragma mark - Instance Methods - -- (NSArray *)photos -{ - return [_photos copy]; -} - -- (NSUInteger)totalNumberOfPhotos -{ - return _totalItems; -} - -- (NSUInteger)numberOfItemsInFeed -{ - return [_photos count]; -} - -- (PhotoModel *)objectAtIndex:(NSUInteger)index -{ - return [_photos objectAtIndex:index]; -} - -- (NSInteger)indexOfPhotoModel:(PhotoModel *)photoModel -{ - return [_photos indexOfObjectIdenticalTo:photoModel]; -} - -- (void)updatePhotoFeedModelTypeUserId:(NSUInteger)userID -{ - _userID = userID; - - NSString *userString = [NSString stringWithFormat:@"%lu", (long)userID]; - _urlString = [unsplash_ENDPOINT_HOST stringByAppendingString:unsplash_ENDPOINT_USER]; - _urlString = [[_urlString stringByAppendingString:userString] stringByAppendingString:@"&sort=created_at&image_size=3&include_store=store_download&include_states=voted"]; - _urlString = [_urlString stringByAppendingString:unsplash_CONSUMER_KEY_PARAM]; -} - -- (void)clearFeed -{ - _photos = [[NSMutableArray alloc] init]; - _ids = [[NSMutableArray alloc] init]; - _currentPage = 0; - _fetchPageInProgress = NO; - _refreshFeedInProgress = NO; - [_task cancel]; - _task = nil; -} - -- (void)requestPageWithCompletionBlock:(void (^)(NSArray *))block numResultsToReturn:(NSUInteger)numResults -{ - // only one fetch at a time - if (_fetchPageInProgress) { - return; - } else { - _fetchPageInProgress = YES; - [self fetchPageWithCompletionBlock:block numResultsToReturn:numResults]; - } -} - -- (void)refreshFeedWithCompletionBlock:(void (^)(NSArray *))block numResultsToReturn:(NSUInteger)numResults -{ - // only one fetch at a time - if (_refreshFeedInProgress) { - return; - - } else { - _refreshFeedInProgress = YES; - _currentPage = 0; - - // FIXME: blow away any other requests in progress - [self fetchPageWithCompletionBlock:^(NSArray *newPhotos) { - if (block) { - block(newPhotos); - } - _refreshFeedInProgress = NO; - } numResultsToReturn:numResults replaceData:YES]; - } -} - -#pragma mark - Helper Methods - -- (void)fetchPageWithCompletionBlock:(void (^)(NSArray *))block numResultsToReturn:(NSUInteger)numResults -{ - [self fetchPageWithCompletionBlock:block numResultsToReturn:numResults replaceData:NO]; -} - -- (void)fetchPageWithCompletionBlock:(void (^)(NSArray *))block numResultsToReturn:(NSUInteger)numResults replaceData:(BOOL)replaceData -{ - // early return if reached end of pages - if (_totalPages) { - if (_currentPage == _totalPages) { - dispatch_async(dispatch_get_main_queue(), ^{ - if (block) { - block(@[]); - } - }); - return; - } - } - - NSUInteger numPhotos = (numResults < unsplash_IMAGES_PER_PAGE) ? numResults : unsplash_IMAGES_PER_PAGE; - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - NSMutableArray *newPhotos = [NSMutableArray array]; - NSMutableArray *newIDs = [NSMutableArray array]; - - @synchronized(self) { - NSUInteger nextPage = _currentPage + 1; - NSString *imageSizeParam = [ImageURLModel imageParameterForClosestImageSize:_imageSize]; - NSString *urlAdditions = [NSString stringWithFormat:@"&page=%lu&per_page=%lu%@", (unsigned long)nextPage, (long)numPhotos, imageSizeParam]; - NSURL *url = [NSURL URLWithString:[_urlString stringByAppendingString:urlAdditions]]; - NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration ephemeralSessionConfiguration]]; - _task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { - @synchronized(self) { - NSHTTPURLResponse *httpResponse = nil; - if (data && [response isKindOfClass:[NSHTTPURLResponse class]]) { - httpResponse = (NSHTTPURLResponse *)response; - NSArray *objects = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]; - - if ([objects isKindOfClass:[NSArray class]]) { - _currentPage = nextPage; - _totalItems = [[httpResponse allHeaderFields][@"x-total"] integerValue]; - _totalPages = _totalItems / unsplash_IMAGES_PER_PAGE; // default per page is 10 - if (_totalItems % unsplash_IMAGES_PER_PAGE != 0) { - _totalPages += 1; - } - - NSArray *photos = objects; - for (NSDictionary *photoDictionary in photos) { - if ([photoDictionary isKindOfClass:[NSDictionary class]]) { - PhotoModel *photo = [[PhotoModel alloc] initWithUnsplashPhoto:photoDictionary]; - if (photo) { - if (replaceData || ![_ids containsObject:photo.photoID]) { - [newPhotos addObject:photo]; - [newIDs addObject:photo.photoID]; - } - } - } - } - } - } - } - - dispatch_async(dispatch_get_main_queue(), ^{ - @synchronized(self) { - if (replaceData) { - _photos = [newPhotos mutableCopy]; - _ids = [newIDs mutableCopy]; - } else { - [_photos addObjectsFromArray:newPhotos]; - [_ids addObjectsFromArray:newIDs]; - } - if (block) { - block(newPhotos); - } - _fetchPageInProgress = NO; - } - }); - }]; - [_task resume]; - } - }); -} - -#pragma mark - IGListDiffable - -- (id)diffIdentifier -{ - return self; -} - -- (BOOL)isEqualToDiffableObject:(id)object -{ - return self == object; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedNodeController.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedNodeController.h deleted file mode 100644 index e4b8553c08..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedNodeController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// PhotoFeedNodeController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoFeedBaseController.h" - -@interface PhotoFeedNodeController : PhotoFeedBaseController - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedNodeController.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedNodeController.m deleted file mode 100644 index 8abc80bb53..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedNodeController.m +++ /dev/null @@ -1,105 +0,0 @@ -// -// PhotoFeedNodeController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoFeedNodeController.h" -#import -#import "Utilities.h" -#import "PhotoModel.h" -#import "PhotoCellNode.h" -#import "PhotoFeedModel.h" - -#define AUTO_TAIL_LOADING_NUM_SCREENFULS 2.5 - -@interface PhotoFeedNodeController () -@property (nonatomic, strong) ASTableNode *tableNode; -@end - -@implementation PhotoFeedNodeController - -#pragma mark - Lifecycle - -// -init is often called off the main thread in ASDK. Therefore it is imperative that no UIKit objects are accessed. -// Examples of common errors include accessing the node’s view or creating a gesture recognizer. -- (instancetype)init -{ - _tableNode = [[ASTableNode alloc] init]; - self = [super initWithNode:_tableNode]; - - if (self) { - self.navigationItem.title = @"ASDK"; - [self.navigationController setNavigationBarHidden:YES]; - - _tableNode.dataSource = self; - _tableNode.delegate = self; - } - - return self; -} - -// -loadView is guaranteed to be called on the main thread and is the appropriate place to -// set up an UIKit objects you may be using. -- (void)loadView -{ - [super loadView]; - - self.tableNode.leadingScreensForBatching = AUTO_TAIL_LOADING_NUM_SCREENFULS; // overriding default of 2.0 -} - -- (void)loadPageWithContext:(ASBatchContext *)context -{ - [self.photoFeed requestPageWithCompletionBlock:^(NSArray *newPhotos){ - - [self insertNewRows:newPhotos]; - if (context) { - [context completeBatchFetching:YES]; - } - } numResultsToReturn:20]; -} - -#pragma mark - Subclassing - -- (UITableView *)tableView -{ - return _tableNode.view; -} - -- (void)loadPage -{ - [self loadPageWithContext:nil]; -} - -#pragma mark - ASTableDataSource methods - -- (NSInteger)tableNode:(ASTableNode *)tableNode numberOfRowsInSection:(NSInteger)section -{ - return [self.photoFeed numberOfItemsInFeed]; -} - -- (ASCellNodeBlock)tableNode:(ASTableNode *)tableNode nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath -{ - PhotoModel *photoModel = [self.photoFeed objectAtIndex:indexPath.row]; - // this will be executed on a background thread - important to make sure it's thread safe - ASCellNode *(^ASCellNodeBlock)() = ^ASCellNode *() { - PhotoCellNode *cellNode = [[PhotoCellNode alloc] initWithPhotoObject:photoModel]; - return cellNode; - }; - - return ASCellNodeBlock; -} - -#pragma mark - ASTableDelegate methods - -// Receive a message that the tableView is near the end of its data set and more data should be fetched if necessary. -- (void)tableNode:(ASTableNode *)tableNode willBeginBatchFetchWithContext:(ASBatchContext *)context -{ - [context beginBatchFetching]; - [self loadPageWithContext:context]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedSectionController.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedSectionController.h deleted file mode 100644 index f7d820d6e5..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedSectionController.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// PhotoFeedSectionController.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import -#import "RefreshingSectionControllerType.h" -#import "ASCollectionSectionController.h" - -@class PhotoFeedModel; - -NS_ASSUME_NONNULL_BEGIN - -@interface PhotoFeedSectionController : ASCollectionSectionController - -@property (nonatomic, strong, nullable) PhotoFeedModel *photoFeed; - -@end - -NS_ASSUME_NONNULL_END diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedSectionController.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedSectionController.m deleted file mode 100644 index 25e1a1b613..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedSectionController.m +++ /dev/null @@ -1,144 +0,0 @@ -// -// PhotoFeedSectionController.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoFeedSectionController.h" -#import "PhotoFeedModel.h" -#import "PhotoModel.h" -#import "PhotoCellNode.h" -#import "TailLoadingNode.h" -#import "FeedHeaderNode.h" - -@interface PhotoFeedSectionController () -@property (nonatomic, strong) NSString *paginatingSpinner; -@end - -@implementation PhotoFeedSectionController - -- (instancetype)init -{ - if (self = [super init]) { - _paginatingSpinner = @"Paginating Spinner"; - self.supplementaryViewSource = self; - } - return self; -} - -#pragma mark - IGListSectionType - -- (void)didUpdateToObject:(id)object -{ - _photoFeed = object; - [self setItems:_photoFeed.photos animated:NO completion:nil]; -} - -- (__kindof UICollectionViewCell *)cellForItemAtIndex:(NSInteger)index -{ - return [ASIGListSectionControllerMethods cellForItemAtIndex:index sectionController:self]; -} - -- (CGSize)sizeForItemAtIndex:(NSInteger)index -{ - return [ASIGListSectionControllerMethods sizeForItemAtIndex:index]; -} - -- (void)didSelectItemAtIndex:(NSInteger)index -{ - // nop -} - -#pragma mark - ASSectionController - -- (ASCellNodeBlock)nodeBlockForItemAtIndex:(NSInteger)index -{ - id object = self.items[index]; - // this will be executed on a background thread - important to make sure it's thread safe - ASCellNode *(^nodeBlock)() = nil; - if (object == _paginatingSpinner) { - nodeBlock = ^{ - return [[TailLoadingNode alloc] init]; - }; - } else if ([object isKindOfClass:[PhotoModel class]]) { - PhotoModel *photoModel = object; - nodeBlock = ^{ - PhotoCellNode *cellNode = [[PhotoCellNode alloc] initWithPhotoObject:photoModel]; - return cellNode; - }; - } - - return nodeBlock; -} - -- (void)beginBatchFetchWithContext:(ASBatchContext *)context -{ - dispatch_async(dispatch_get_main_queue(), ^{ - // Immediately add the loading spinner if needed. - if (self.items.count > 0) { - NSArray *newItems = [self.items arrayByAddingObject:_paginatingSpinner]; - [self setItems:newItems animated:NO completion:nil]; - } - - // Push to next runloop to give time to insert the spinner - dispatch_async(dispatch_get_main_queue(), ^{ - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - // Start the fetch, then update the items (removing the spinner) when they are loaded. - [_photoFeed requestPageWithCompletionBlock:^(NSArray *newPhotos){ - [self setItems:_photoFeed.photos animated:NO completion:^{ - [context completeBatchFetching:YES]; - }]; - } numResultsToReturn:20]; - }); - }); - }); -} - -#pragma mark - RefreshingSectionControllerType - -- (void)refreshContentWithCompletion:(void(^)())completion -{ - [_photoFeed refreshFeedWithCompletionBlock:^(NSArray *addedItems) { - [self setItems:_photoFeed.photos animated:YES completion:completion]; - } numResultsToReturn:4]; -} - -#pragma mark - ASSupplementaryNodeSource - -- (ASCellNodeBlock)nodeBlockForSupplementaryElementOfKind:(NSString *)elementKind atIndex:(NSInteger)index -{ - ASDisplayNodeAssert([elementKind isEqualToString:UICollectionElementKindSectionHeader], nil); - return ^{ - return [[FeedHeaderNode alloc] init]; - }; -} - -- (ASSizeRange)sizeRangeForSupplementaryElementOfKind:(NSString *)elementKind atIndex:(NSInteger)index -{ - if ([elementKind isEqualToString:UICollectionElementKindSectionHeader]) { - return ASSizeRangeUnconstrained; - } else { - return ASSizeRangeZero; - } -} - -#pragma mark - IGListSupplementaryViewSource - -- (NSArray *)supportedElementKinds -{ - return @[ UICollectionElementKindSectionHeader ]; -} - -- (__kindof UICollectionReusableView *)viewForSupplementaryElementOfKind:(NSString *)elementKind atIndex:(NSInteger)index -{ - return [ASIGListSupplementaryViewSourceMethods viewForSupplementaryElementOfKind:elementKind atIndex:index sectionController:self]; -} - -- (CGSize)sizeForSupplementaryViewOfKind:(NSString *)elementKind atIndex:(NSInteger)index -{ - return [ASIGListSupplementaryViewSourceMethods sizeForSupplementaryViewOfKind:elementKind atIndex:index]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedViewController.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedViewController.h deleted file mode 100644 index 14295d0bbc..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// PhotoFeedViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoFeedBaseController.h" - -@interface PhotoFeedViewController : PhotoFeedBaseController - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedViewController.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedViewController.m deleted file mode 100644 index c3f9a4aefe..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoFeedViewController.m +++ /dev/null @@ -1,104 +0,0 @@ -// -// PhotoFeedViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoFeedViewController.h" -#import "Utilities.h" -#import "PhotoTableViewCell.h" -#import "PhotoFeedModel.h" - -#define AUTO_TAIL_LOADING_NUM_SCREENFULS 2.5 - -@interface PhotoFeedViewController () -@end - -@implementation PhotoFeedViewController -{ - UITableView *_tableView; -} - -#pragma mark - Lifecycle - -- (instancetype)init -{ - self = [super initWithNibName:nil bundle:nil]; - - if (self) { - self.navigationItem.title = @"UIKit"; - [self.navigationController setNavigationBarHidden:YES]; - - _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; - _tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth; - _tableView.delegate = self; - _tableView.dataSource = self; - } - - return self; -} - -// anything involving the view should go here, not init -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [self.view addSubview:_tableView]; - _tableView.frame = self.view.bounds; - [_tableView registerClass:[PhotoTableViewCell class] forCellReuseIdentifier:@"photoCell"]; -} - -#pragma mark - Subclassing - -- (UITableView *)tableView -{ - return _tableView; -} - -- (void)loadPage -{ - [self.photoFeed requestPageWithCompletionBlock:^(NSArray *newPhotos){ - [self insertNewRows:newPhotos]; - } numResultsToReturn:20]; -} - -#pragma mark - UITableViewDataSource methods - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return [self.photoFeed numberOfItemsInFeed]; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - PhotoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"photoCell" forIndexPath:indexPath]; - [cell updateCellWithPhotoObject:[self.photoFeed objectAtIndex:indexPath.row]]; - - return cell; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath -{ - PhotoModel *photo = [self.photoFeed objectAtIndex:indexPath.row]; - return [PhotoTableViewCell heightForPhotoModel:photo withWidth:self.view.bounds.size.width]; -} - -#pragma mark - UITableViewDelegate methods - -// table automatic tail loading --(void)scrollViewDidScroll:(UIScrollView *)scrollView -{ - CGFloat currentOffSetY = scrollView.contentOffset.y; - CGFloat contentHeight = scrollView.contentSize.height; - CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height; - - CGFloat screenfullsBeforeBottom = (contentHeight - currentOffSetY) / screenHeight; - if (screenfullsBeforeBottom < AUTO_TAIL_LOADING_NUM_SCREENFULS) { - [self loadPage]; - } -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoModel.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoModel.h deleted file mode 100644 index 95c1a8130c..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoModel.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// PhotoModel.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "UserModel.h" -#import - -@interface PhotoModel : NSObject - -@property (nonatomic, strong, readonly) NSURL *URL; -@property (nonatomic, strong, readonly) NSString *photoID; -@property (nonatomic, strong, readonly) NSString *uploadDateString; -@property (nonatomic, strong, readonly) NSString *descriptionText; -@property (nonatomic, assign, readonly) NSUInteger likesCount; -@property (nonatomic, strong, readonly) NSString *location; -@property (nonatomic, strong, readonly) UserModel *ownerUserProfile; -@property (nonatomic, assign, readonly) NSUInteger width; -@property (nonatomic, assign, readonly) NSUInteger height; - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithUnsplashPhoto:(NSDictionary *)photoDictionary NS_DESIGNATED_INITIALIZER; - -- (NSAttributedString *)descriptionAttributedStringWithFontSize:(CGFloat)size; -- (NSAttributedString *)uploadDateAttributedStringWithFontSize:(CGFloat)size; -- (NSAttributedString *)likesAttributedStringWithFontSize:(CGFloat)size; -- (NSAttributedString *)locationAttributedStringWithFontSize:(CGFloat)size; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoModel.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoModel.m deleted file mode 100644 index 0662e71ae5..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoModel.m +++ /dev/null @@ -1,90 +0,0 @@ -// -// PhotoModel.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoModel.h" -#import "Utilities.h" - -@implementation PhotoModel -{ - NSDictionary *_dictionaryRepresentation; - NSString *_uploadDateRaw; -} - -#pragma mark - Lifecycle - -- (instancetype)initWithUnsplashPhoto:(NSDictionary *)photoDictionary -{ - self = [super init]; - - if (self) { - _dictionaryRepresentation = photoDictionary; - _uploadDateRaw = [photoDictionary objectForKey:@"created_at"]; - _photoID = [photoDictionary objectForKey:@"id"]; - _descriptionText = [photoDictionary valueForKeyPath:@"description"]; - _likesCount = [[photoDictionary objectForKey:@"likes"] integerValue]; - _location = [photoDictionary objectForKey:@"location"]; - - NSString *urlString = [photoDictionary objectForKey:@"urls"][@"regular"]; - _URL = urlString ? [NSURL URLWithString:urlString] : nil; - - _ownerUserProfile = [[UserModel alloc] initWithUnsplashPhoto:photoDictionary]; - _uploadDateString = [NSString elapsedTimeStringSinceDate:_uploadDateRaw]; - - _height = [[photoDictionary objectForKey:@"height"] integerValue]; - _width = [[photoDictionary objectForKey:@"width"] integerValue]; - } - - return self; -} - -#pragma mark - Instance Methods - -- (NSAttributedString *)descriptionAttributedStringWithFontSize:(CGFloat)size -{ - NSString *string = [NSString stringWithFormat:@"%@ %@", self.ownerUserProfile.username, self.descriptionText]; - NSAttributedString *attrString = [NSAttributedString attributedStringWithString:string - fontSize:size - color:[UIColor darkGrayColor] - firstWordColor:[UIColor darkBlueColor]]; - return attrString; -} - -- (NSAttributedString *)uploadDateAttributedStringWithFontSize:(CGFloat)size -{ - return [NSAttributedString attributedStringWithString:self.uploadDateString fontSize:size color:[UIColor lightGrayColor] firstWordColor:nil]; -} - -- (NSAttributedString *)likesAttributedStringWithFontSize:(CGFloat)size -{ - NSString *likesString = [NSString stringWithFormat:@"♥︎ %lu likes", (unsigned long)_likesCount]; - - return [NSAttributedString attributedStringWithString:likesString fontSize:size color:[UIColor darkBlueColor] firstWordColor:nil]; -} - -- (NSAttributedString *)locationAttributedStringWithFontSize:(CGFloat)size -{ - return [NSAttributedString attributedStringWithString:self.location fontSize:size color:[UIColor lightBlueColor] firstWordColor:nil]; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%@ - %@", _photoID, _descriptionText]; -} - -- (id)diffIdentifier -{ - return self.photoID; -} - -- (BOOL)isEqualToDiffableObject:(id)object -{ - return [self isEqual:object]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoTableViewCell.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoTableViewCell.h deleted file mode 100644 index 47e8e913f7..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoTableViewCell.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// PhotoTableViewCell.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoModel.h" - -@interface PhotoTableViewCell : UITableViewCell - -+ (CGFloat)heightForPhotoModel:(PhotoModel *)photo withWidth:(CGFloat)width; - -- (void)updateCellWithPhotoObject:(PhotoModel *)photo; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoTableViewCell.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoTableViewCell.m deleted file mode 100644 index 9cc5fa785b..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/PhotoTableViewCell.m +++ /dev/null @@ -1,425 +0,0 @@ -// -// PhotoTableViewCell.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PhotoTableViewCell.h" -#import "Utilities.h" -#import "PINImageView+PINRemoteImage.h" -#import "PINButton+PINRemoteImage.h" - -#define DEBUG_PHOTOCELL_LAYOUT 0 -#define USE_UIKIT_AUTOLAYOUT 1 -#define USE_UIKIT_MANUAL_LAYOUT !USE_UIKIT_AUTOLAYOUT - -#define HEADER_HEIGHT 50 -#define USER_IMAGE_HEIGHT 30 -#define HORIZONTAL_BUFFER 10 -#define VERTICAL_BUFFER 5 -#define FONT_SIZE 14 - -@implementation PhotoTableViewCell -{ - PhotoModel *_photoModel; - - UIImageView *_userAvatarImageView; - UIImageView *_photoImageView; - UILabel *_userNameLabel; - UILabel *_photoLocationLabel; - UILabel *_photoTimeIntervalSincePostLabel; - UILabel *_photoLikesLabel; - UILabel *_photoDescriptionLabel; - - NSLayoutConstraint *_userNameYPositionWithPhotoLocation; - NSLayoutConstraint *_userNameYPositionWithoutPhotoLocation; - NSLayoutConstraint *_photoLocationYPosition; -} - -#pragma mark - Class Methods - -+ (CGFloat)heightForPhotoModel:(PhotoModel *)photo withWidth:(CGFloat)width; -{ - CGFloat photoHeight = width; - - UIFont *font = [UIFont systemFontOfSize:FONT_SIZE]; - CGFloat likesHeight = roundf([font lineHeight]); - - NSAttributedString *descriptionAttrString = [photo descriptionAttributedStringWithFontSize:FONT_SIZE]; - CGFloat availableWidth = (width - HORIZONTAL_BUFFER * 2); - CGFloat descriptionHeight = [descriptionAttrString boundingRectWithSize:CGSizeMake(availableWidth, CGFLOAT_MAX) - options:NSStringDrawingUsesLineFragmentOrigin - context:nil].size.height; - - return HEADER_HEIGHT + photoHeight + likesHeight + descriptionHeight + (4 * VERTICAL_BUFFER); -} - -#pragma mark - Lifecycle - -- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - - if (self) { - _userAvatarImageView = [[UIImageView alloc] init]; - _photoImageView = [[UIImageView alloc] init]; - _photoImageView.contentMode = UIViewContentModeScaleAspectFill; - _userNameLabel = [[UILabel alloc] init]; - _photoLocationLabel = [[UILabel alloc] init]; - _photoTimeIntervalSincePostLabel = [[UILabel alloc] init]; - _photoLikesLabel = [[UILabel alloc] init]; - _photoDescriptionLabel = [[UILabel alloc] init]; - _photoDescriptionLabel.numberOfLines = 3; - - [self addSubview:_userAvatarImageView]; - [self addSubview:_photoImageView]; - [self addSubview:_userNameLabel]; - [self addSubview:_photoLocationLabel]; - [self addSubview:_photoTimeIntervalSincePostLabel]; - [self addSubview:_photoLikesLabel]; - [self addSubview:_photoDescriptionLabel]; - -#if USE_UIKIT_AUTOLAYOUT - [_userAvatarImageView setTranslatesAutoresizingMaskIntoConstraints:NO]; - [_photoImageView setTranslatesAutoresizingMaskIntoConstraints:NO]; - [_userNameLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; - [_photoLocationLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; - [_photoTimeIntervalSincePostLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; - [_photoLikesLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; - [_photoDescriptionLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; - - [self setupConstraints]; - [self updateConstraints]; -#endif - -#if DEBUG_PHOTOCELL_LAYOUT - _userAvatarImageView.backgroundColor = [UIColor greenColor]; - _userNameLabel.backgroundColor = [UIColor greenColor]; - _photoLocationLabel.backgroundColor = [UIColor greenColor]; - _photoTimeIntervalSincePostLabel.backgroundColor = [UIColor greenColor]; - _photoDescriptionLabel.backgroundColor = [UIColor greenColor]; - _photoLikesLabel.backgroundColor = [UIColor greenColor]; -#endif - } - - return self; -} - --(void)setFrame:(CGRect)frame -{ - [super setFrame:frame]; -} - -- (void)setupConstraints -{ - // _userAvatarImageView - [self addConstraint:[NSLayoutConstraint constraintWithItem:_userAvatarImageView - attribute:NSLayoutAttributeLeft - relatedBy:NSLayoutRelationEqual - toItem:_userAvatarImageView.superview - attribute:NSLayoutAttributeLeft - multiplier:1.0 - constant:HORIZONTAL_BUFFER]]; - - [self addConstraint:[NSLayoutConstraint constraintWithItem:_userAvatarImageView - attribute:NSLayoutAttributeTop - relatedBy:NSLayoutRelationEqual - toItem:_userAvatarImageView.superview - attribute:NSLayoutAttributeTop - multiplier:1.0 - constant:HORIZONTAL_BUFFER]]; - - [self addConstraint:[NSLayoutConstraint constraintWithItem:_userAvatarImageView - attribute:NSLayoutAttributeWidth - relatedBy:NSLayoutRelationEqual - toItem:nil - attribute:NSLayoutAttributeNotAnAttribute - multiplier:0.0 - constant:USER_IMAGE_HEIGHT]]; - - [self addConstraint:[NSLayoutConstraint constraintWithItem:_userAvatarImageView - attribute:NSLayoutAttributeHeight - relatedBy:NSLayoutRelationEqual - toItem:_userAvatarImageView - attribute:NSLayoutAttributeWidth - multiplier:1.0 - constant:0.0]]; - - // _userNameLabel - [self addConstraint:[NSLayoutConstraint constraintWithItem:_userNameLabel - attribute:NSLayoutAttributeLeft - relatedBy:NSLayoutRelationEqual - toItem:_userAvatarImageView - attribute:NSLayoutAttributeRight - multiplier:1.0 - constant:HORIZONTAL_BUFFER]]; - - [self addConstraint:[NSLayoutConstraint constraintWithItem:_userNameLabel - attribute:NSLayoutAttributeRight - relatedBy:NSLayoutRelationLessThanOrEqual - toItem:_photoTimeIntervalSincePostLabel - attribute:NSLayoutAttributeLeft - multiplier:1.0 - constant:-HORIZONTAL_BUFFER]]; - - _userNameYPositionWithoutPhotoLocation = [NSLayoutConstraint constraintWithItem:_userNameLabel - attribute:NSLayoutAttributeCenterY - relatedBy:NSLayoutRelationEqual - toItem:_userAvatarImageView - attribute:NSLayoutAttributeCenterY - multiplier:1.0 - constant:0.0]; - [self addConstraint:_userNameYPositionWithoutPhotoLocation]; - - _userNameYPositionWithPhotoLocation = [NSLayoutConstraint constraintWithItem:_userNameLabel - attribute:NSLayoutAttributeTop - relatedBy:NSLayoutRelationEqual - toItem:_userAvatarImageView - attribute:NSLayoutAttributeTop - multiplier:1.0 - constant:-2]; - _userNameYPositionWithPhotoLocation.active = NO; - [self addConstraint:_userNameYPositionWithPhotoLocation]; - - // _photoLocationLabel - [self addConstraint:[NSLayoutConstraint constraintWithItem:_photoLocationLabel - attribute:NSLayoutAttributeLeft - relatedBy:NSLayoutRelationEqual - toItem:_userAvatarImageView - attribute:NSLayoutAttributeRight - multiplier:1.0 - constant:HORIZONTAL_BUFFER]]; - - [self addConstraint:[NSLayoutConstraint constraintWithItem:_photoLocationLabel - attribute:NSLayoutAttributeRight - relatedBy:NSLayoutRelationLessThanOrEqual - toItem:_photoTimeIntervalSincePostLabel - attribute:NSLayoutAttributeLeft - multiplier:1.0 - constant:-HORIZONTAL_BUFFER]]; - - _photoLocationYPosition = [NSLayoutConstraint constraintWithItem:_photoLocationLabel - attribute:NSLayoutAttributeBottom - relatedBy:NSLayoutRelationEqual - toItem:_userAvatarImageView - attribute:NSLayoutAttributeBottom - multiplier:1.0 - constant:2]; - _photoLocationYPosition.active = NO; - [self addConstraint:_photoLocationYPosition]; - - // _photoTimeIntervalSincePostLabel - [self addConstraint:[NSLayoutConstraint constraintWithItem:_photoTimeIntervalSincePostLabel - attribute:NSLayoutAttributeRight - relatedBy:NSLayoutRelationEqual - toItem:_photoTimeIntervalSincePostLabel.superview - attribute:NSLayoutAttributeRight - multiplier:1.0 - constant:-HORIZONTAL_BUFFER]]; - - [self addConstraint:[NSLayoutConstraint constraintWithItem:_photoTimeIntervalSincePostLabel - attribute:NSLayoutAttributeCenterY - relatedBy:NSLayoutRelationEqual - toItem:_userAvatarImageView - attribute:NSLayoutAttributeCenterY - multiplier:1.0 - constant:0.0]]; - - // _photoImageView - [self addConstraint:[NSLayoutConstraint constraintWithItem:_photoImageView - attribute:NSLayoutAttributeTop - relatedBy:NSLayoutRelationEqual - toItem:_photoImageView.superview - attribute:NSLayoutAttributeTop - multiplier:1.0 - constant:HEADER_HEIGHT]]; - - [self addConstraint:[NSLayoutConstraint constraintWithItem:_photoImageView - attribute:NSLayoutAttributeWidth - relatedBy:NSLayoutRelationEqual - toItem:self - attribute:NSLayoutAttributeWidth - multiplier:1.0 - constant:0.0]]; - - [self addConstraint:[NSLayoutConstraint constraintWithItem:_photoImageView - attribute:NSLayoutAttributeHeight - relatedBy:NSLayoutRelationEqual - toItem:_photoImageView - attribute:NSLayoutAttributeWidth - multiplier:1.0 - constant:0.0]]; - - // _photoLikesLabel - [self addConstraint:[NSLayoutConstraint constraintWithItem:_photoLikesLabel - attribute:NSLayoutAttributeTop - relatedBy:NSLayoutRelationEqual - toItem:_photoImageView - attribute:NSLayoutAttributeBottom - multiplier:1.0 - constant:VERTICAL_BUFFER]]; - - [self addConstraint:[NSLayoutConstraint constraintWithItem:_photoLikesLabel - attribute:NSLayoutAttributeLeft - relatedBy:NSLayoutRelationEqual - toItem:_photoLikesLabel.superview - attribute:NSLayoutAttributeLeft - multiplier:1.0 - constant:HORIZONTAL_BUFFER]]; - - // _photoDescriptionLabel - [self addConstraint:[NSLayoutConstraint constraintWithItem:_photoDescriptionLabel - attribute:NSLayoutAttributeTop - relatedBy:NSLayoutRelationEqual - toItem:_photoLikesLabel - attribute:NSLayoutAttributeBottom - multiplier:1.0 - constant:VERTICAL_BUFFER]]; - - [self addConstraint:[NSLayoutConstraint constraintWithItem:_photoDescriptionLabel - attribute:NSLayoutAttributeLeft - relatedBy:NSLayoutRelationEqual - toItem:_photoDescriptionLabel.superview - attribute:NSLayoutAttributeLeft - multiplier:1.0 - constant:HORIZONTAL_BUFFER]]; - - [self addConstraint:[NSLayoutConstraint constraintWithItem:_photoDescriptionLabel - attribute:NSLayoutAttributeWidth - relatedBy:NSLayoutRelationEqual - toItem:_photoDescriptionLabel.superview - attribute:NSLayoutAttributeWidth - multiplier:1.0 - constant:-HORIZONTAL_BUFFER]]; -} - -- (void)updateConstraints -{ - [super updateConstraints]; - - if (_photoLocationLabel.attributedText) { - _userNameYPositionWithoutPhotoLocation.active = NO; - _userNameYPositionWithPhotoLocation.active = YES; - _photoLocationYPosition.active = YES; - } else { - _userNameYPositionWithoutPhotoLocation.active = YES; - _userNameYPositionWithPhotoLocation.active = NO; - _photoLocationYPosition.active = NO; - } -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - -#if USE_UIKIT_PROGRAMMATIC_LAYOUT - CGSize boundsSize = self.bounds.size; - - CGRect rect = CGRectMake(HORIZONTAL_BUFFER, (HEADER_HEIGHT - USER_IMAGE_HEIGHT) / 2.0, - USER_IMAGE_HEIGHT, USER_IMAGE_HEIGHT); - _userAvatarImageView.frame = rect; - - rect.size = _photoTimeIntervalSincePostLabel.bounds.size; - rect.origin.x = boundsSize.width - HORIZONTAL_BUFFER - rect.size.width; - rect.origin.y = (HEADER_HEIGHT - rect.size.height) / 2.0; - _photoTimeIntervalSincePostLabel.frame = rect; - - CGFloat availableWidth = CGRectGetMinX(_photoTimeIntervalSincePostLabel.frame) - HORIZONTAL_BUFFER; - rect.size = _userNameLabel.bounds.size; - rect.size.width = MIN(availableWidth, rect.size.width); - - rect.origin.x = HORIZONTAL_BUFFER + USER_IMAGE_HEIGHT + HORIZONTAL_BUFFER; - - if (_photoLocationLabel.attributedText) { - CGSize locationSize = _photoLocationLabel.bounds.size; - locationSize.width = MIN(availableWidth, locationSize.width); - - rect.origin.y = (HEADER_HEIGHT - rect.size.height - locationSize.height) / 2.0; - _userNameLabel.frame = rect; - - // FIXME: Name rects at least for this sub-condition - rect.origin.y += rect.size.height; - rect.size = locationSize; - _photoLocationLabel.frame = rect; - } else { - rect.origin.y = (HEADER_HEIGHT - rect.size.height) / 2.0; - _userNameLabel.frame = rect; - } - - _photoImageView.frame = CGRectMake(0, HEADER_HEIGHT, boundsSize.width, boundsSize.width); - - // FIXME: Make PhotoCellFooterView - rect.size = _photoLikesLabel.bounds.size; - rect.origin = CGPointMake(HORIZONTAL_BUFFER, CGRectGetMaxY(_photoImageView.frame) + VERTICAL_BUFFER); - _photoLikesLabel.frame = rect; - - rect.size = _photoDescriptionLabel.bounds.size; - rect.size.width = MIN(boundsSize.width - HORIZONTAL_BUFFER * 2, rect.size.width); - rect.origin.y = CGRectGetMaxY(_photoLikesLabel.frame) + VERTICAL_BUFFER; - _photoDescriptionLabel.frame = rect; -#endif -} - -- (void)prepareForReuse -{ - [super prepareForReuse]; - - _userAvatarImageView.image = nil; - _photoImageView.image = nil; - _userNameLabel.attributedText = nil; - _photoLocationLabel.attributedText = nil; - _photoLocationLabel.frame = CGRectZero; // next cell might not have a _photoLocationLabel - _photoTimeIntervalSincePostLabel.attributedText = nil; - _photoLikesLabel.attributedText = nil; - _photoDescriptionLabel.attributedText = nil; -} - -#pragma mark - Instance Methods - -- (void)updateCellWithPhotoObject:(PhotoModel *)photo -{ - _photoModel = photo; - _userNameLabel.attributedText = [photo.ownerUserProfile usernameAttributedStringWithFontSize:FONT_SIZE]; - _photoTimeIntervalSincePostLabel.attributedText = [photo uploadDateAttributedStringWithFontSize:FONT_SIZE]; - _photoLikesLabel.attributedText = [photo likesAttributedStringWithFontSize:FONT_SIZE]; - _photoDescriptionLabel.attributedText = [photo descriptionAttributedStringWithFontSize:FONT_SIZE]; - - [_userNameLabel sizeToFit]; - [_photoTimeIntervalSincePostLabel sizeToFit]; - [_photoLikesLabel sizeToFit]; - [_photoDescriptionLabel sizeToFit]; - CGRect rect = _photoDescriptionLabel.frame; - CGFloat availableWidth = (self.bounds.size.width - HORIZONTAL_BUFFER * 2); - rect.size = [_photoDescriptionLabel sizeThatFits:CGSizeMake(availableWidth, CGFLOAT_MAX)]; - _photoDescriptionLabel.frame = rect; - - [UIImage downloadImageForURL:photo.URL completion:^(UIImage *image) { - _photoImageView.image = image; - }]; - - [self downloadAndProcessUserAvatarForPhoto:photo]; - - //update location - _photoLocationLabel.attributedText = [photo locationAttributedStringWithFontSize:FONT_SIZE]; - [_photoLocationLabel sizeToFit]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self updateConstraints]; - [self setNeedsLayout]; - }); -} - -#pragma mark - Helper Methods - -- (void)downloadAndProcessUserAvatarForPhoto:(PhotoModel *)photo -{ - [UIImage downloadImageForURL:photo.URL completion:^(UIImage *image) { - CGSize profileImageSize = CGSizeMake(USER_IMAGE_HEIGHT, USER_IMAGE_HEIGHT); - _userAvatarImageView.image = [image makeCircularImageWithSize:profileImageSize]; - }]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/RefreshingSectionControllerType.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/RefreshingSectionControllerType.h deleted file mode 100644 index 169a996012..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/RefreshingSectionControllerType.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// RefreshingSectionControllerType.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol RefreshingSectionControllerType - -- (void)refreshContentWithCompletion:(nullable void(^)())completion; - -@end - -NS_ASSUME_NONNULL_END diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Sample.pch b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Sample.pch deleted file mode 100644 index 8c35575c9b..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Sample.pch +++ /dev/null @@ -1,15 +0,0 @@ -// -// ASDKgram.pch -// ASDKgram -// -// Created by Hannah Troisi on 2/26/16. -// Copyright © 2016 Hannah Troisi. All rights reserved. -// - -#ifndef Flickrgram_pch -#define Flickrgram_pch - -#import -#import - -#endif /* Flickrgram_pch */ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/TailLoadingNode.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/TailLoadingNode.h deleted file mode 100644 index ae514231f6..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/TailLoadingNode.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// TailLoadingNode.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -/** - * A node that shows a UIActivityIndicatorView, useful for putting at the end of a - * list while the next page is loading. - */ -@interface TailLoadingNode : ASCellNode - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/TailLoadingNode.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/TailLoadingNode.m deleted file mode 100644 index 63c462ab98..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/TailLoadingNode.m +++ /dev/null @@ -1,54 +0,0 @@ -// -// TailLoadingNode.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "TailLoadingNode.h" - -#import "Availability.h" - -@interface TailLoadingNode () -@property (nonatomic, strong) ASDisplayNode *activityIndicatorNode; -@end - -@implementation TailLoadingNode - -- (instancetype)init -{ - if (self = [super init]) { - self.automaticallyManagesSubnodes = YES; - - _activityIndicatorNode = [[ASDisplayNode alloc] initWithViewBlock:^{ - UIActivityIndicatorView *v = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; - [v startAnimating]; - return v; - }]; - self.style.height = ASDimensionMake(100); - - [self setupYogaLayoutIfNeeded]; - } - return self; -} -#if !YOGA_LAYOUT -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - return [ASCenterLayoutSpec centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringXY sizingOptions:ASCenterLayoutSpecSizingOptionMinimumXY child:self.activityIndicatorNode]; -} -#endif - -- (void)setupYogaLayoutIfNeeded -{ -#if YOGA_LAYOUT - [self.style yogaNodeCreateIfNeeded]; - [self.activityIndicatorNode.style yogaNodeCreateIfNeeded]; - [self addYogaChild:self.activityIndicatorNode]; - - self.style.justifyContent = ASStackLayoutJustifyContentCenter; - self.style.alignItems = ASStackLayoutAlignItemsCenter; -#endif -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/TextureConfigDelegate.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/TextureConfigDelegate.m deleted file mode 100644 index b6a2ae9717..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/TextureConfigDelegate.m +++ /dev/null @@ -1,37 +0,0 @@ -// -// TextureConfigDelegate.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface TextureConfigDelegate : NSObject - -@end - -@implementation ASConfiguration (UserProvided) - -+ (ASConfiguration *)textureConfiguration -{ - ASConfiguration *config = [[ASConfiguration alloc] init]; - config.experimentalFeatures = ASExperimentalGraphicsContexts | ASExperimentalTextNode; - config.delegate = [[TextureConfigDelegate alloc] init]; - return config; -} - -@end - -@implementation TextureConfigDelegate - -- (void)textureDidActivateExperimentalFeatures:(ASExperimentalFeatures)features -{ - if (features & ASExperimentalGraphicsContexts) { - NSLog(@"Texture activated experimental graphics contexts."); - } -} - -@end - diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/UserModel.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/UserModel.h deleted file mode 100644 index 299ddb1869..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/UserModel.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// UserModel.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -@interface UserModel : NSObject - -@property (nonatomic, strong, readonly) NSDictionary *dictionaryRepresentation; -@property (nonatomic, assign, readonly) NSString *userID; -@property (nonatomic, strong, readonly) NSString *username; -@property (nonatomic, strong, readonly) NSString *firstName; -@property (nonatomic, strong, readonly) NSString *lastName; -@property (nonatomic, strong, readonly) NSString *fullName; -@property (nonatomic, strong, readonly) NSString *location; -@property (nonatomic, strong, readonly) NSString *about; -@property (nonatomic, strong, readonly) NSURL *userPicURL; -@property (nonatomic, assign, readonly) NSUInteger photoCount; -@property (nonatomic, assign, readonly) NSUInteger galleriesCount; -@property (nonatomic, assign, readonly) NSUInteger affection; -@property (nonatomic, assign, readonly) NSUInteger friendsCount; -@property (nonatomic, assign, readonly) NSUInteger followersCount; -@property (nonatomic, assign, readonly) BOOL following; - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithUnsplashPhoto:(NSDictionary *)dictionary NS_DESIGNATED_INITIALIZER; - -- (NSAttributedString *)usernameAttributedStringWithFontSize:(CGFloat)size; -- (NSAttributedString *)fullNameAttributedStringWithFontSize:(CGFloat)size; - -- (void)fetchAvatarImageWithCompletionBlock:(void(^)(UserModel *, UIImage *))block; - -- (void)downloadCompleteUserDataWithCompletionBlock:(void(^)(UserModel *))block; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/UserModel.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/UserModel.m deleted file mode 100644 index 53e3626026..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/UserModel.m +++ /dev/null @@ -1,167 +0,0 @@ -// -// UserModel.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "UserModel.h" -#import "Utilities.h" - -@implementation UserModel -{ - BOOL _fullUserInfoFetchRequested; - BOOL _fullUserInfoFetchDone; - void (^_fullUserInfoCompletionBlock)(UserModel *); -} - -#pragma mark - Lifecycle - -- (instancetype)initWithUnsplashPhoto:(NSDictionary *)dictionary -{ - self = [super init]; - - if (self) { - _fullUserInfoFetchRequested = NO; - _fullUserInfoFetchDone = NO; - - [self loadUserDataFromDictionary:dictionary]; - } - - return self; -} - -#pragma mark - Instance Methods - -- (NSAttributedString *)usernameAttributedStringWithFontSize:(CGFloat)size -{ - return [NSAttributedString attributedStringWithString:self.username fontSize:size color:[UIColor darkBlueColor] firstWordColor:nil]; -} - -- (NSAttributedString *)fullNameAttributedStringWithFontSize:(CGFloat)size -{ - return [NSAttributedString attributedStringWithString:self.fullName fontSize:size color:[UIColor lightGrayColor] firstWordColor:nil]; -} - -- (void)fetchAvatarImageWithCompletionBlock:(void(^)(UserModel *, UIImage *))block -{ - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - - NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration ephemeralSessionConfiguration]]; - NSURLSessionDataTask *task = [session dataTaskWithURL:_userPicURL completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { - if (data) { - UIImage *image = [UIImage imageWithData:data]; - - dispatch_async(dispatch_get_main_queue(), ^{ - if (block) { - block(self, image); - } - }); - } - }]; - [task resume]; - }); -} - -- (void)downloadCompleteUserDataWithCompletionBlock:(void(^)(UserModel *))block; -{ - if (_fullUserInfoFetchDone) { - NSAssert(!_fullUserInfoCompletionBlock, @"Should not have a waiting block at this point"); - // complete user info fetch complete - excute completion block - if (block) { - block(self); - } - - } else { - NSAssert(!_fullUserInfoCompletionBlock, @"Should not have a waiting block at this point"); - // set completion block - _fullUserInfoCompletionBlock = block; - - if (!_fullUserInfoFetchRequested) { - // if fetch not in progress, beging - [self fetchCompleteUserData]; - } - } -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%@", self.dictionaryRepresentation]; -} - -#pragma mark - Helper Methods - -- (void)fetchCompleteUserData -{ - _fullUserInfoFetchRequested = YES; - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - - // fetch JSON data from server - NSString *urlString = [NSString stringWithFormat:@"https://api.500px.com/v1/users/show?id=%@&consumer_key=Fi13GVb8g53sGvHICzlram7QkKOlSDmAmp9s9aqC", _userID]; - - NSURL *url = [NSURL URLWithString:urlString]; - NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration ephemeralSessionConfiguration]]; - NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { - if (data) { - NSDictionary *response = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; - - // parse JSON data - if ([response isKindOfClass:[NSDictionary class]]) { - [self loadUserDataFromDictionary:response]; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - _fullUserInfoFetchDone = YES; - - if (_fullUserInfoCompletionBlock) { - _fullUserInfoCompletionBlock(self); - - // IT IS ESSENTIAL to nil the block, as it retains a view controller BECAUSE it uses an instance variable which - // means that self is retained. It could continue to live on forever - // If we don't release this. - _fullUserInfoCompletionBlock = nil; - } - }); - } - }]; - [task resume]; - }); -} - -- (void)loadUserDataFromDictionary:(NSDictionary *)dictionary -{ - NSDictionary *userDictionary = [dictionary objectForKey:@"user"]; - if (![userDictionary isKindOfClass:[NSDictionary class]]) { - return; - } - - _userID = [self guardJSONElement:[userDictionary objectForKey:@"id"]]; - _username = [[self guardJSONElement:[userDictionary objectForKey:@"username"]] lowercaseString]; - - if (_username == nil) { - _username = @"Anonymous"; - } - - _firstName = [self guardJSONElement:[userDictionary objectForKey:@"first_name"]]; - _lastName = [self guardJSONElement:[userDictionary objectForKey:@"last_name"]]; - _fullName = [self guardJSONElement:[userDictionary objectForKey:@"name"]]; - _location = [self guardJSONElement:[userDictionary objectForKey:@"location"]]; - _about = [self guardJSONElement:[userDictionary objectForKey:@"bio"]]; - _photoCount = [[self guardJSONElement:[userDictionary objectForKey:@"total_photos"]] integerValue]; - _galleriesCount = [[self guardJSONElement:[userDictionary objectForKey:@"total_collections"]] integerValue]; - _dictionaryRepresentation = userDictionary; - - NSString *urlString = [self guardJSONElement:[userDictionary objectForKey:@"profile_image"][@"medium"]]; - _userPicURL = urlString ? [NSURL URLWithString:urlString] : nil; - -} - -- (id)guardJSONElement:(id)element -{ - return (element == [NSNull null]) ? nil : element; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Utilities.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Utilities.h deleted file mode 100644 index 63f2ab0553..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Utilities.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// Utilities.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -@interface UIColor (Additions) - -+ (UIColor *)darkBlueColor; -+ (UIColor *)lightBlueColor; - -@end - -@interface UIImage (Additions) - -+ (UIImage *)followingButtonStretchableImageForCornerRadius:(CGFloat)cornerRadius following:(BOOL)followingEnabled; -+ (void)downloadImageForURL:(NSURL *)url completion:(void (^)(UIImage *))block; - -- (UIImage *)makeCircularImageWithSize:(CGSize)size; - -@end - -@interface NSString (Additions) - -// returns a user friendly elapsed time such as '50s', '6m' or '3w' -+ (NSString *)elapsedTimeStringSinceDate:(NSString *)uploadDateString; - -@end - -@interface NSAttributedString (Additions) - -+ (NSAttributedString *)attributedStringWithString:(NSString *)string - fontSize:(CGFloat)size - color:(UIColor *)color - firstWordColor:(UIColor *)firstWordColor; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Utilities.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Utilities.m deleted file mode 100644 index 732c5f8171..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/Utilities.m +++ /dev/null @@ -1,294 +0,0 @@ -// -// Utilities.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "Utilities.h" - -#define StrokeRoundedImages 0 - -#define IsDigit(v) (v >= '0' && v <= '9') - -static time_t parseRfc3339ToTimeT(const char *string) -{ - int dy, dm, dd; - int th, tm, ts; - int oh, om, osign; - char current; - - if (!string) - return (time_t)0; - - // date - if (sscanf(string, "%04d-%02d-%02d", &dy, &dm, &dd) == 3) { - string += 10; - - if (*string++ != 'T') - return (time_t)0; - - // time - if (sscanf(string, "%02d:%02d:%02d", &th, &tm, &ts) == 3) { - string += 8; - - current = *string; - - // optional: second fraction - if (current == '.') { - ++string; - while(IsDigit(*string)) - ++string; - - current = *string; - } - - if (current == 'Z') { - oh = om = 0; - osign = 1; - } else if (current == '-') { - ++string; - if (sscanf(string, "%02d:%02d", &oh, &om) != 2) - return (time_t)0; - osign = -1; - } else if (current == '+') { - ++string; - if (sscanf(string, "%02d:%02d", &oh, &om) != 2) - return (time_t)0; - osign = 1; - } else { - return (time_t)0; - } - - struct tm timeinfo; - timeinfo.tm_wday = timeinfo.tm_yday = 0; - timeinfo.tm_zone = NULL; - timeinfo.tm_isdst = -1; - - timeinfo.tm_year = dy - 1900; - timeinfo.tm_mon = dm - 1; - timeinfo.tm_mday = dd; - - timeinfo.tm_hour = th; - timeinfo.tm_min = tm; - timeinfo.tm_sec = ts; - - // convert to utc - return timegm(&timeinfo) - (((oh * 60 * 60) + (om * 60)) * osign); - } - } - - return (time_t)0; -} - -static NSDate *parseRfc3339ToNSDate(NSString *rfc3339DateTimeString) -{ - time_t t = parseRfc3339ToTimeT([rfc3339DateTimeString cStringUsingEncoding:NSUTF8StringEncoding]); - return [NSDate dateWithTimeIntervalSince1970:t]; -} - - -@implementation UIColor (Additions) - -+ (UIColor *)darkBlueColor -{ - return [UIColor colorWithRed:70.0/255.0 green:102.0/255.0 blue:118.0/255.0 alpha:1.0]; -} - -+ (UIColor *)lightBlueColor -{ - return [UIColor colorWithRed:70.0/255.0 green:165.0/255.0 blue:196.0/255.0 alpha:1.0]; -} - -@end - -@implementation UIImage (Additions) - -+ (UIImage *)followingButtonStretchableImageForCornerRadius:(CGFloat)cornerRadius following:(BOOL)followingEnabled -{ - CGSize unstretchedSize = CGSizeMake(2 * cornerRadius + 1, 2 * cornerRadius + 1); - CGRect rect = (CGRect) {CGPointZero, unstretchedSize}; - UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius]; - - // create a graphics context for the following status button - UIGraphicsBeginImageContextWithOptions(unstretchedSize, NO, 0); - - [path addClip]; - - if (followingEnabled) { - - [[UIColor whiteColor] setFill]; - [path fill]; - - path.lineWidth = 3; - [[UIColor lightBlueColor] setStroke]; - [path stroke]; - - } else { - - [[UIColor lightBlueColor] setFill]; - [path fill]; - } - - UIImage *followingBtnImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - UIImage *followingBtnImageStretchable = [followingBtnImage stretchableImageWithLeftCapWidth:cornerRadius - topCapHeight:cornerRadius]; - return followingBtnImageStretchable; -} - -+ (void)downloadImageForURL:(NSURL *)url completion:(void (^)(UIImage *))block -{ - static NSCache *simpleImageCache = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - simpleImageCache = [[NSCache alloc] init]; - simpleImageCache.countLimit = 10; - }); - - if (!block) { - return; - } - - // check if image is cached - UIImage *image = [simpleImageCache objectForKey:url]; - if (image) { - dispatch_async(dispatch_get_main_queue(), ^{ - block(image); - }); - } else { - // else download image - NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration ephemeralSessionConfiguration]]; - NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { - if (data) { - UIImage *image = [UIImage imageWithData:data]; - dispatch_async(dispatch_get_main_queue(), ^{ - block(image); - }); - } - }]; - [task resume]; - } -} - -- (UIImage *)makeCircularImageWithSize:(CGSize)size -{ - // make a CGRect with the image's size - CGRect circleRect = (CGRect) {CGPointZero, size}; - - // begin the image context since we're not in a drawRect: - UIGraphicsBeginImageContextWithOptions(circleRect.size, NO, 0); - - // create a UIBezierPath circle - UIBezierPath *circle = [UIBezierPath bezierPathWithRoundedRect:circleRect cornerRadius:circleRect.size.width/2]; - - // clip to the circle - [circle addClip]; - - // draw the image in the circleRect *AFTER* the context is clipped - [self drawInRect:circleRect]; - - // create a border (for white background pictures) -#if StrokeRoundedImages - circle.lineWidth = 1; - [[UIColor darkGrayColor] set]; - [circle stroke]; -#endif - - // get an image from the image context - UIImage *roundedImage = UIGraphicsGetImageFromCurrentImageContext(); - - // end the image context since we're not in a drawRect: - UIGraphicsEndImageContext(); - - return roundedImage; -} - -@end - -@implementation NSString (Additions) - -/* - * Returns a user-visible date time string that corresponds to the - * specified RFC 3339 date time string. Note that this does not handle - * all possible RFC 3339 date time strings, just one of the most common - * styles. - */ -+ (NSDate *)userVisibleDateTimeStringForRFC3339DateTimeString:(NSString *)rfc3339DateTimeString -{ - return parseRfc3339ToNSDate(rfc3339DateTimeString); -} - -+ (NSString *)elapsedTimeStringSinceDate:(NSString *)uploadDateString -{ - // early return if no post date string - if (!uploadDateString) - { - return @"NO POST DATE"; - } - - NSDate *postDate = [self userVisibleDateTimeStringForRFC3339DateTimeString:uploadDateString]; - - if (!postDate) { - return @"DATE CONVERSION ERROR"; - } - - NSDate *currentDate = [NSDate date]; - - NSCalendar *calendar = [NSCalendar currentCalendar]; - - NSUInteger seconds = [[calendar components:NSCalendarUnitSecond fromDate:postDate toDate:currentDate options:0] second]; - NSUInteger minutes = [[calendar components:NSCalendarUnitMinute fromDate:postDate toDate:currentDate options:0] minute]; - NSUInteger hours = [[calendar components:NSCalendarUnitHour fromDate:postDate toDate:currentDate options:0] hour]; - NSUInteger days = [[calendar components:NSCalendarUnitDay fromDate:postDate toDate:currentDate options:0] day]; - - NSString *elapsedTime; - - if (days > 7) { - elapsedTime = [NSString stringWithFormat:@"%luw", (long)ceil(days/7.0)]; - } else if (days > 0) { - elapsedTime = [NSString stringWithFormat:@"%lud", (long)days]; - } else if (hours > 0) { - elapsedTime = [NSString stringWithFormat:@"%luh", (long)hours]; - } else if (minutes > 0) { - elapsedTime = [NSString stringWithFormat:@"%lum", (long)minutes]; - } else if (seconds > 0) { - elapsedTime = [NSString stringWithFormat:@"%lus", (long)seconds]; - } else if (seconds == 0) { - elapsedTime = @"1s"; - } else { - elapsedTime = @"ERROR"; - } - - return elapsedTime; -} - -@end - -@implementation NSAttributedString (Additions) - -+ (NSAttributedString *)attributedStringWithString:(NSString *)string fontSize:(CGFloat)size - color:(nullable UIColor *)color firstWordColor:(nullable UIColor *)firstWordColor -{ - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init]; - - if (string) { - NSDictionary *attributes = @{NSForegroundColorAttributeName: color ? : [UIColor blackColor], - NSFontAttributeName: [UIFont systemFontOfSize:size]}; - attributedString = [[NSMutableAttributedString alloc] initWithString:string]; - [attributedString addAttributes:attributes range:NSMakeRange(0, string.length)]; - - if (firstWordColor) { - NSRange firstSpaceRange = [string rangeOfCharacterFromSet:[NSCharacterSet whitespaceCharacterSet]]; - NSRange firstWordRange = NSMakeRange(0, firstSpaceRange.location); - [attributedString addAttribute:NSForegroundColorAttributeName value:firstWordColor range:firstWordRange]; - } - } - - return attributedString; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/WindowWithStatusBarUnderlay.h b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/WindowWithStatusBarUnderlay.h deleted file mode 100644 index d9fb31778d..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/WindowWithStatusBarUnderlay.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// WindowWithStatusBarUnderlay.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - - -// this subclass is neccessary to make the status bar have an opaque, colored background -@interface WindowWithStatusBarUnderlay : UIWindow - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/WindowWithStatusBarUnderlay.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/WindowWithStatusBarUnderlay.m deleted file mode 100644 index 91670c2985..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/WindowWithStatusBarUnderlay.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// WindowWithStatusBarUnderlay.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "WindowWithStatusBarUnderlay.h" -#import "Utilities.h" - -@implementation WindowWithStatusBarUnderlay -{ - UIView *_statusBarOpaqueUnderlayView; -} - --(instancetype)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - _statusBarOpaqueUnderlayView = [[UIView alloc] init]; - _statusBarOpaqueUnderlayView.backgroundColor = [UIColor darkBlueColor]; - [self addSubview:_statusBarOpaqueUnderlayView]; - } - return self; -} - --(void)layoutSubviews -{ - [super layoutSubviews]; - - [self bringSubviewToFront:_statusBarOpaqueUnderlayView]; - - CGRect statusBarFrame = CGRectZero; - statusBarFrame.size.width = [[UIScreen mainScreen] bounds].size.width; - statusBarFrame.size.height = [[UIApplication sharedApplication] statusBarFrame].size.height; - _statusBarOpaqueUnderlayView.frame = statusBarFrame; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/main.m b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/main.m deleted file mode 100644 index fb6be69952..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/main.m +++ /dev/null @@ -1,16 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/camera.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/camera.png deleted file mode 100644 index 2eeecba825..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/camera.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/camera@2x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/camera@2x.png deleted file mode 100644 index c1ea4ab857..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/camera@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/cameraRaw.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/cameraRaw.png deleted file mode 100644 index dbf13aa13d..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/cameraRaw.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/earth.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/earth.png deleted file mode 100644 index c182ea5565..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/earth.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/earth@2x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/earth@2x.png deleted file mode 100644 index b8049a5004..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/earth@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/home.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/home.png deleted file mode 100644 index b88cd66a4b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/home.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/home@2x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/home@2x.png deleted file mode 100644 index 838e660097..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/home@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/homeRaw.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/homeRaw.png deleted file mode 100644 index 09aa24c157..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/homeRaw.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/profile.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/profile.png deleted file mode 100644 index d885b3aedf..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/profile.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/profile@2x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/profile@2x.png deleted file mode 100644 index 81352fe0cb..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/profile@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/profileRaw.png b/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/profileRaw.png deleted file mode 100644 index 0d2894d0ab..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/Sample/tabBarIcons/profileRaw.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/camera.png b/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/camera.png deleted file mode 100644 index 2eeecba825..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/camera.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/camera@2x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/camera@2x.png deleted file mode 100644 index c1ea4ab857..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/camera@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/cameraRaw.png b/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/cameraRaw.png deleted file mode 100644 index dbf13aa13d..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/cameraRaw.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/earth.png b/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/earth.png deleted file mode 100644 index c182ea5565..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/earth.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/earth@2x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/earth@2x.png deleted file mode 100644 index b8049a5004..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/earth@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/home.png b/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/home.png deleted file mode 100644 index b88cd66a4b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/home.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/home@2x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/home@2x.png deleted file mode 100644 index 838e660097..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/home@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/homeRaw.png b/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/homeRaw.png deleted file mode 100644 index 09aa24c157..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/homeRaw.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/profile.png b/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/profile.png deleted file mode 100644 index d885b3aedf..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/profile.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/profile@2x.png b/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/profile@2x.png deleted file mode 100644 index 81352fe0cb..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/profile@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/profileRaw.png b/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/profileRaw.png deleted file mode 100644 index 0d2894d0ab..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASDKgram/tabBarIcons/profileRaw.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Podfile b/submodules/AsyncDisplayKit/examples/ASMapNode/Podfile deleted file mode 100644 index 08d1b7add6..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Podfile +++ /dev/null @@ -1,6 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end - diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/AppDelegate.h deleted file mode 100644 index 8d58a13cbe..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - - -@end - diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/AppDelegate.m deleted file mode 100644 index cae730c64e..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/AppDelegate.m +++ /dev/null @@ -1,30 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" -#import "ViewController.h" - -@interface AppDelegate () - -@end - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - // Override point for customization after application launch. - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[ViewController new]]; - [self.window makeKeyAndVisible]; - - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 118c98f746..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Contents.json b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Contents.json deleted file mode 100644 index da4a164c91..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Hill.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Hill.imageset/Contents.json deleted file mode 100644 index 273884cba6..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Hill.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "hill.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "hill@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "hill@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Hill.imageset/hill.png b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Hill.imageset/hill.png deleted file mode 100644 index 8998668eb0..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Hill.imageset/hill.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Hill.imageset/hill@2x.png b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Hill.imageset/hill@2x.png deleted file mode 100644 index d64af0dd9d..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Hill.imageset/hill@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Hill.imageset/hill@3x.png b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Hill.imageset/hill@3x.png deleted file mode 100644 index 761c66684a..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Hill.imageset/hill@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Water.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Water.imageset/Contents.json deleted file mode 100644 index f54c1c3b60..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Water.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "water.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "water@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "water@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Water.imageset/water.png b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Water.imageset/water.png deleted file mode 100644 index cdff6fd035..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Water.imageset/water.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Water.imageset/water@2x.png b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Water.imageset/water@2x.png deleted file mode 100644 index 2cd019f20c..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Water.imageset/water@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Water.imageset/water@3x.png b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Water.imageset/water@3x.png deleted file mode 100644 index e45cd67f2d..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Assets.xcassets/Water.imageset/water@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Base.lproj/LaunchScreen.storyboard b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f4fc7f7736..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/CustomMapAnnotation.h b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/CustomMapAnnotation.h deleted file mode 100644 index 22e62ab7e4..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/CustomMapAnnotation.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// CustomMapAnnotation.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface CustomMapAnnotation : NSObject - -@property (assign, nonatomic) CLLocationCoordinate2D coordinate; -@property (copy, nonatomic, nullable) UIImage *image; -@property (copy, nonatomic, nullable) NSString *title; -@property (copy, nonatomic, nullable) NSString *subtitle; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/CustomMapAnnotation.m b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/CustomMapAnnotation.m deleted file mode 100644 index c6843dcc3c..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/CustomMapAnnotation.m +++ /dev/null @@ -1,14 +0,0 @@ -// -// CustomMapAnnotation.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "CustomMapAnnotation.h" - -@implementation CustomMapAnnotation - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Info.plist deleted file mode 100644 index 6105445463..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/Info.plist +++ /dev/null @@ -1,43 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/MapHandlerNode.h b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/MapHandlerNode.h deleted file mode 100644 index 46a4d74686..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/MapHandlerNode.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MapHandlerNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface MapHandlerNode : ASDisplayNode - - -@end - diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/MapHandlerNode.m b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/MapHandlerNode.m deleted file mode 100644 index 9226253a10..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/MapHandlerNode.m +++ /dev/null @@ -1,335 +0,0 @@ -// -// MapHandlerNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "MapHandlerNode.h" -#import "CustomMapAnnotation.h" - -#import -#import - -@interface MapHandlerNode () - -@property (nonatomic, strong) ASEditableTextNode *latEditableNode; -@property (nonatomic, strong) ASEditableTextNode *lonEditableNode; -@property (nonatomic, strong) ASEditableTextNode *deltaLatEditableNode; -@property (nonatomic, strong) ASEditableTextNode *deltaLonEditableNode; -@property (nonatomic, strong) ASButtonNode *updateRegionButton; -@property (nonatomic, strong) ASButtonNode *liveMapToggleButton; -@property (nonatomic, strong) ASMapNode *mapNode; - -@end - -@implementation MapHandlerNode - -#pragma mark - Lifecycle - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - self.automaticallyManagesSubnodes = YES; - - _mapNode = [[ASMapNode alloc] init]; - _mapNode.mapDelegate = self; - - _latEditableNode = [[ASEditableTextNode alloc] init]; - _lonEditableNode = [[ASEditableTextNode alloc] init]; - _deltaLatEditableNode = [[ASEditableTextNode alloc] init]; - _deltaLonEditableNode = [[ASEditableTextNode alloc] init]; - - _updateRegionButton = [[ASButtonNode alloc] init]; - _liveMapToggleButton = [[ASButtonNode alloc] init]; - - UIImage *backgroundImage = [UIImage as_resizableRoundedImageWithCornerRadius:5 - cornerColor:[UIColor whiteColor] - fillColor:[UIColor lightGrayColor]]; - - UIImage *backgroundHiglightedImage = [UIImage as_resizableRoundedImageWithCornerRadius:5 - cornerColor:[UIColor whiteColor] - fillColor:[[UIColor lightGrayColor] colorWithAlphaComponent:0.4] - borderColor:[UIColor lightGrayColor] - borderWidth:2.0]; - - [_updateRegionButton setBackgroundImage:backgroundImage forState:UIControlStateNormal]; - [_updateRegionButton setBackgroundImage:backgroundHiglightedImage forState:UIControlStateHighlighted]; - - [_liveMapToggleButton setBackgroundImage:backgroundImage forState:UIControlStateNormal]; - [_liveMapToggleButton setBackgroundImage:backgroundHiglightedImage forState:UIControlStateHighlighted]; - - _updateRegionButton.contentEdgeInsets = UIEdgeInsetsMake(5, 5, 5, 5); - [_updateRegionButton setTitle:@"Update Region" withFont:nil withColor:[UIColor blueColor] forState:UIControlStateNormal]; - - [_updateRegionButton addTarget:self action:@selector(updateRegion) forControlEvents:ASControlNodeEventTouchUpInside]; - - [_liveMapToggleButton setTitle:[self liveMapStr] withFont:nil withColor:[UIColor blueColor] forState:UIControlStateNormal]; - - [_liveMapToggleButton addTarget:self action:@selector(toggleLiveMap) forControlEvents:ASControlNodeEventTouchUpInside]; - - return self; -} - -- (void)didLoad -{ - [super didLoad]; - - [self configureEditableNodes:_latEditableNode]; - [self configureEditableNodes:_lonEditableNode]; - [self configureEditableNodes:_deltaLatEditableNode]; - [self configureEditableNodes:_deltaLonEditableNode]; - - [self updateLocationTextWithMKCoordinateRegion:_mapNode.region]; - - // avoiding retain cycles - __weak MapHandlerNode *weakSelf = self; - - self.mapNode.imageForStaticMapAnnotationBlock = ^UIImage *(id annotation, CGPoint *centerOffset){ - MapHandlerNode *grabbedSelf = weakSelf; - if (grabbedSelf) { - if ([annotation isKindOfClass:[CustomMapAnnotation class]]) { - CustomMapAnnotation *customAnnotation = (CustomMapAnnotation *)annotation; - return customAnnotation.image; - } - } - return nil; - }; - - [self addAnnotations]; -} - -/** - * ------------------------------------ASStackLayoutSpec----------------------------------- - * | ---------------------------------ASInsetLayoutSpec-------------------------------- | - * | | ------------------------------ASStackLayoutSpec----------------------------- | | - * | | | ---------------------------ASStackLayoutSpec-------------------------- | | | - * | | | | -----------------ASStackLayoutSpec---------------- | | | | - * | | | | | --------------ASStackLayoutSpec------------- | | | | | - * | | | | | | ASEditableTextNode ASEditableTextNode | | | | | | - * | | | | | -------------------------------------------- | | | | | - * | | | | | --------------ASStackLayoutSpec------------- | ASButtonNode | | | | - * | | | | | | ASEditableTextNode ASEditableTextNode | | | | | | - * | | | | | -------------------------------------------- | | | | | - * | | | | -------------------------------------------------- | | | | - * | | | ---------------------------------------------------------------------- | | | - * | | | ASButtonNode | | | - * | | ---------------------------------------------------------------------------- | | - * | ---------------------------------------------------------------------------------- | - * | ASMapNode | - * ---------------------------------------------------------------------------------------- - * - * This diagram was created by setting a breakpoint on the returned `layoutSpec` - * and calling "po [layoutSpec asciiArtString]" in the debugger. - */ -#define SPACING 5 -#define HEIGHT 30 -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - _latEditableNode.style.width = ASDimensionMake(@"50%"); - _lonEditableNode.style.width = ASDimensionMake(@"50%"); - _deltaLatEditableNode.style.width = ASDimensionMake(@"50%"); - _deltaLonEditableNode.style.width = ASDimensionMake(@"50%"); - - _liveMapToggleButton.style.maxHeight = ASDimensionMake(HEIGHT); - - _mapNode.style.flexGrow = 1.0; - - ASStackLayoutSpec *lonlatSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:SPACING - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsCenter - children:@[_latEditableNode, _lonEditableNode]]; - - ASStackLayoutSpec *deltaLonlatSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:SPACING - justifyContent:ASStackLayoutJustifyContentSpaceBetween - alignItems:ASStackLayoutAlignItemsCenter - children:@[_deltaLatEditableNode, _deltaLonEditableNode]]; - - ASStackLayoutSpec *lonlatConfigSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical - spacing:SPACING - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStretch - children:@[lonlatSpec, deltaLonlatSpec]]; - - lonlatConfigSpec.style.flexGrow = 1.0; - - ASStackLayoutSpec *dashboardSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:SPACING - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStretch - children:@[lonlatConfigSpec, _updateRegionButton]]; - - ASStackLayoutSpec *headerVerticalStack = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical - spacing:SPACING - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStretch - children:@[dashboardSpec, _liveMapToggleButton]]; - - dashboardSpec.style.flexGrow = 1.0; - - ASInsetLayoutSpec *insetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(40, 10, 0, 10) - child:headerVerticalStack]; - - ASStackLayoutSpec *layoutSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical - spacing:SPACING - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStretch - children:@[insetSpec, _mapNode]]; - - return layoutSpec; -} - -#pragma mark - Button Actions - -- (void)updateRegion -{ - NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; - f.numberStyle = NSNumberFormatterDecimalStyle; - - double const lat = [f numberFromString:_latEditableNode.attributedText.string].doubleValue; - double const lon = [f numberFromString:_lonEditableNode.attributedText.string].doubleValue; - double const deltaLat = [f numberFromString:_deltaLatEditableNode.attributedText.string].doubleValue; - double const deltaLon = [f numberFromString:_deltaLonEditableNode.attributedText.string].doubleValue; - - // TODO: check for valid latitude / longitude coordinates - MKCoordinateRegion region = MKCoordinateRegionMake(CLLocationCoordinate2DMake(lat, lon), - MKCoordinateSpanMake(deltaLat, deltaLon)); - - _mapNode.region = region; -} - -- (void)toggleLiveMap -{ - _mapNode.liveMap = !_mapNode.liveMap; - NSString * const liveMapStr = [self liveMapStr]; - [_liveMapToggleButton setTitle:liveMapStr withFont:nil withColor:[UIColor blueColor] forState:UIControlStateNormal]; - [_liveMapToggleButton setTitle:liveMapStr withFont:[UIFont systemFontOfSize:14] withColor:[UIColor blueColor] forState:UIControlStateHighlighted]; -} - -- (void)updateLocationTextWithMKCoordinateRegion:(MKCoordinateRegion)region -{ - _latEditableNode.attributedText = [self attributedStringFromFloat:region.center.latitude]; - _lonEditableNode.attributedText = [self attributedStringFromFloat:region.center.longitude]; - _deltaLatEditableNode.attributedText = [self attributedStringFromFloat:region.span.latitudeDelta]; - _deltaLonEditableNode.attributedText = [self attributedStringFromFloat:region.span.longitudeDelta]; -} - -#pragma mark - Helper Methods - -- (NSAttributedString *)attributedStringFromFloat:(CGFloat)value -{ - return [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%0.3f", value]]; -} - -- (void)addAnnotations { - - MKPointAnnotation *brno = [MKPointAnnotation new]; - brno.coordinate = CLLocationCoordinate2DMake(49.2002211, 16.6078411); - brno.title = @"Brno City"; - - CustomMapAnnotation *atlantic = [CustomMapAnnotation new]; - atlantic.coordinate = CLLocationCoordinate2DMake(38.6442228, -29.9956942); - atlantic.title = @"Atlantic Ocean"; - atlantic.image = [UIImage imageNamed:@"Water"]; - - CustomMapAnnotation *kilimanjaro = [CustomMapAnnotation new]; - kilimanjaro.coordinate = CLLocationCoordinate2DMake(-3.075833, 37.353333); - kilimanjaro.title = @"Kilimanjaro"; - kilimanjaro.image = [UIImage imageNamed:@"Hill"]; - - CustomMapAnnotation *mtblanc = [CustomMapAnnotation new]; - mtblanc.coordinate = CLLocationCoordinate2DMake(45.8325, 6.864444); - mtblanc.title = @"Mont Blanc"; - mtblanc.image = [UIImage imageNamed:@"Hill"]; - - self.mapNode.annotations = @[brno, atlantic, kilimanjaro, mtblanc]; -} - --(NSString *)liveMapStr -{ - return _mapNode.liveMap ? @"Live Map is ON" : @"Live Map is OFF"; -} - --(void)configureEditableNodes:(ASEditableTextNode *)node -{ - node.returnKeyType = node == _deltaLonEditableNode ? UIReturnKeyDone : UIReturnKeyNext; - node.delegate = self; -} - -#pragma mark - ASEditableTextNodeDelegate - -- (BOOL)editableTextNode:(ASEditableTextNode *)editableTextNode shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text -{ - if([text isEqualToString:@"\n"]) { - if(editableTextNode == _latEditableNode) - [_lonEditableNode becomeFirstResponder]; - else if(editableTextNode == _lonEditableNode) - [_deltaLatEditableNode becomeFirstResponder]; - else if(editableTextNode == _deltaLatEditableNode) - [_deltaLonEditableNode becomeFirstResponder]; - else if(editableTextNode == _deltaLonEditableNode) { - [_deltaLonEditableNode resignFirstResponder]; - [self updateRegion]; - } - return NO; - } - - NSMutableCharacterSet * s = [NSMutableCharacterSet characterSetWithCharactersInString:@".-"]; - [s formUnionWithCharacterSet:[NSCharacterSet decimalDigitCharacterSet]]; - [s invert]; - - NSRange r = [text rangeOfCharacterFromSet:s]; - if(r.location != NSNotFound) { - return NO; - } - - if([editableTextNode.attributedText.string rangeOfString:@"."].location != NSNotFound && - [text rangeOfString:@"."].location != NSNotFound) { - return NO; - } - - if ([editableTextNode.attributedText.string rangeOfString:@"-"].location != NSNotFound && - [text rangeOfString:@"-"].location != NSNotFound && - range.location > 0) { - return NO; - } - - return YES; -} - -- (MKAnnotationView *)annotationViewForAnnotation:(id)annotation -{ - MKAnnotationView *av; - - if ([annotation isKindOfClass:[CustomMapAnnotation class]]) { - av = [[MKAnnotationView alloc] init]; - av.centerOffset = CGPointMake(21, 21); - av.image = [(CustomMapAnnotation *)annotation image]; - } else { - av = [[MKPinAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:@""]; - } - - av.opaque = NO; - - return av; -} - -#pragma mark - MKMapViewDelegate - -- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated -{ - [self updateLocationTextWithMKCoordinateRegion:mapView.region]; -} - -- (MKAnnotationView *)mapView:(MKMapView *)__unused mapView viewForAnnotation:(id)annotation -{ - return [self annotationViewForAnnotation:annotation]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/ViewController.h deleted file mode 100644 index 7054e2d89c..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/ViewController.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : ASViewController - - -@end - diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/ViewController.m deleted file mode 100644 index 390532d662..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/ViewController.m +++ /dev/null @@ -1,38 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" - -#import "MapHandlerNode.h" - -@interface ViewController () - -@end - -@implementation ViewController - - -#pragma mark - Lifecycle - -- (instancetype)init -{ - self = [super initWithNode:[[MapHandlerNode alloc] init]]; - if (self == nil) { return self; } - - return self; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - self.navigationController.navigationBarHidden = YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/main.m b/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/main.m deleted file mode 100644 index 0e5da05001..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASMapNode/Sample/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Podfile b/submodules/AsyncDisplayKit/examples/ASViewController/Podfile deleted file mode 100644 index 08d1b7add6..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Podfile +++ /dev/null @@ -1,6 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end - diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/ASViewController/Sample/AppDelegate.h deleted file mode 100644 index 8d58a13cbe..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - - -@end - diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/ASViewController/Sample/AppDelegate.m deleted file mode 100644 index ed2724b182..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/AppDelegate.m +++ /dev/null @@ -1,28 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" -#import "ViewController.h" - -@interface AppDelegate () - -@end - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // Override point for customization after application launch. - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[ViewController new]]; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json b/submodules/AsyncDisplayKit/examples/ASViewController/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 118c98f746..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/Base.lproj/LaunchScreen.storyboard b/submodules/AsyncDisplayKit/examples/ASViewController/Sample/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 90d6157f11..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailCellNode.h b/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailCellNode.h deleted file mode 100644 index d524ff1c02..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailCellNode.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// DetailCellNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@class ASNetworkImageNode; - -@interface DetailCellNode : ASCellNode -@property (nonatomic, assign) NSInteger row; -@property (nonatomic, copy) NSString *imageCategory; -@property (nonatomic, strong) ASNetworkImageNode *imageNode; -@end diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailCellNode.m b/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailCellNode.m deleted file mode 100644 index edc9932076..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailCellNode.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// DetailCellNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "DetailCellNode.h" -#import - -@implementation DetailCellNode - -#pragma mark - Lifecycle - -- (instancetype)init -{ - self = [super init]; - if (self == nil) { return self; } - - self.automaticallyManagesSubnodes = YES; - - _imageNode = [[ASNetworkImageNode alloc] init]; - _imageNode.backgroundColor = ASDisplayNodeDefaultPlaceholderColor(); - - return self; -} - -#pragma mark - ASDisplayNode - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - return [ASRatioLayoutSpec ratioLayoutSpecWithRatio:1.0 child:self.imageNode]; -} - -- (void)layoutDidFinish -{ - [super layoutDidFinish]; - - // In general set URL of ASNetworkImageNode as soon as possible. Ideally in init or a - // view model setter method. - // In this case as we need to know the size of the node the url is set in layoutDidFinish so - // we have the calculatedSize available - self.imageNode.URL = [self imageURL]; -} - -#pragma mark - Image - -- (NSURL *)imageURL -{ - CGSize imageSize = self.calculatedSize; - NSString *imageURLString = [NSString stringWithFormat:@"http://lorempixel.com/%ld/%ld/%@/%ld", (NSInteger)imageSize.width, (NSInteger)imageSize.height, self.imageCategory, self.row]; - return [NSURL URLWithString:imageURLString]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailRootNode.h b/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailRootNode.h deleted file mode 100644 index 648900b30e..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailRootNode.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// DetailRootNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@class ASCollectionNode; - -@interface DetailRootNode : ASDisplayNode - -@property (nonatomic, strong, readonly) ASCollectionNode *collectionNode; - -- (instancetype)initWithImageCategory:(NSString *)imageCategory; - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailRootNode.m b/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailRootNode.m deleted file mode 100644 index 5d478059d9..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailRootNode.m +++ /dev/null @@ -1,88 +0,0 @@ -// -// DetailRootNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "DetailRootNode.h" -#import "DetailCellNode.h" - -#import - -static const NSInteger kImageHeight = 200; - - -@interface DetailRootNode () - -@property (nonatomic, copy) NSString *imageCategory; -@property (nonatomic, strong) ASCollectionNode *collectionNode; - -@end - - -@implementation DetailRootNode - -#pragma mark - Lifecycle - -- (instancetype)initWithImageCategory:(NSString *)imageCategory -{ - self = [super init]; - if (self) { - // Enable automaticallyManagesSubnodes so the first time the layout pass of the node is happening all nodes that are referenced - // in the laaout specification within layoutSpecThatFits: will be added automatically - self.automaticallyManagesSubnodes = YES; - - _imageCategory = imageCategory; - - // Create ASCollectionView. We don't have to add it explicitly as subnode as we will set usesImplicitHierarchyManagement to YES - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - _collectionNode = [[ASCollectionNode alloc] initWithCollectionViewLayout:layout]; - _collectionNode.delegate = self; - _collectionNode.dataSource = self; - _collectionNode.backgroundColor = [UIColor whiteColor]; - } - - return self; -} - -- (void)dealloc -{ - _collectionNode.delegate = nil; - _collectionNode.dataSource = nil; -} - -#pragma mark - ASDisplayNode - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - return [ASWrapperLayoutSpec wrapperWithLayoutElement:self.collectionNode]; -} - -#pragma mark - ASCollectionDataSource - -- (NSInteger)collectionNode:(ASCollectionNode *)collectionNode numberOfItemsInSection:(NSInteger)section -{ - return 10; -} - -- (ASCellNodeBlock)collectionNode:(ASCollectionNode *)collectionNode nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath -{ - NSString *imageCategory = self.imageCategory; - return ^{ - DetailCellNode *node = [[DetailCellNode alloc] init]; - node.row = indexPath.row; - node.imageCategory = imageCategory; - return node; - }; -} - -- (ASSizeRange)collectionNode:(ASCollectionNode *)collectionNode constrainedSizeForItemAtIndexPath:(NSIndexPath *)indexPath -{ - CGSize imageSize = CGSizeMake(CGRectGetWidth(collectionNode.view.frame), kImageHeight); - return ASSizeRangeMake(imageSize, imageSize); -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailViewController.h b/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailViewController.h deleted file mode 100644 index 0c5eb85891..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailViewController.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// DetailViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "DetailRootNode.h" - -@interface DetailViewController : ASViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailViewController.m b/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailViewController.m deleted file mode 100644 index 2d6471cd5d..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/DetailViewController.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// DetailViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "DetailViewController.h" -#import - -#import "DetailRootNode.h" - -@implementation DetailViewController - -#pragma mark - Rotation - -- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator -{ - [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; - [self.node.collectionNode.view.collectionViewLayout invalidateLayout]; -} - - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/ASViewController/Sample/Info.plist deleted file mode 100644 index 6105445463..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/Info.plist +++ /dev/null @@ -1,43 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples/ASViewController/Sample/ViewController.h deleted file mode 100644 index f1700621f0..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/ViewController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface ViewController : ASViewController - - -@end - diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples/ASViewController/Sample/ViewController.m deleted file mode 100644 index f66c7add93..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/ViewController.m +++ /dev/null @@ -1,92 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" -#import - -#import "DetailViewController.h" - - -@interface ViewController () - -@property (nonatomic, copy) NSArray *imageCategories; -@property (nonatomic, strong, readonly) ASTableNode *tableNode; - -@end - - -@implementation ViewController - -#pragma mark - Lifecycle - -- (instancetype)init -{ - self = [super initWithNode:[ASTableNode new]]; - if (self == nil) { return self; } - - _imageCategories = @[@"abstract", @"animals", @"business", @"cats", @"city", @"food", @"nightlife", @"fashion", @"people", @"nature", @"sports", @"technics", @"transport"]; - - return self; -} - -- (void)dealloc -{ - self.node.delegate = nil; - self.node.dataSource = nil; -} - - -#pragma mark - UIViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Image Categories"; - - self.node.delegate = self; - self.node.dataSource = self; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - [self.node deselectRowAtIndexPath:self.node.indexPathForSelectedRow animated:YES]; -} - - -#pragma mark - ASTableDataSource / ASTableDelegate - -- (NSInteger)tableNode:(ASTableNode *)tableNode numberOfRowsInSection:(NSInteger)section -{ - return self.imageCategories.count; -} - -- (ASCellNodeBlock)tableNode:(ASTableNode *)tableNode nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath -{ - // As the block is executed on a background thread we need to cache the image category string outside - NSString *imageCategory = self.imageCategories[indexPath.row]; - return ^{ - ASTextCellNode *textCellNode = [ASTextCellNode new]; - textCellNode.text = [imageCategory capitalizedString]; - return textCellNode; - }; -} - -- (void)tableNode:(ASTableNode *)tableNode didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSString *imageCategory = self.imageCategories[indexPath.row]; - DetailRootNode *detailRootNode = [[DetailRootNode alloc] initWithImageCategory:imageCategory]; - DetailViewController *detailViewController = [[DetailViewController alloc] initWithNode:detailRootNode]; - detailViewController.title = [imageCategory capitalizedString]; - [self.navigationController pushViewController:detailViewController animated:YES]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/main.m b/submodules/AsyncDisplayKit/examples/ASViewController/Sample/main.m deleted file mode 100644 index 0e5da05001..0000000000 --- a/submodules/AsyncDisplayKit/examples/ASViewController/Sample/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/AppDelegate.h b/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/AppDelegate.h deleted file mode 100644 index 8d58a13cbe..0000000000 --- a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - - -@end - diff --git a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/AppDelegate.m b/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/AppDelegate.m deleted file mode 100644 index a21b00ffd1..0000000000 --- a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/AppDelegate.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -@interface AppDelegate () - -@end - -@implementation AppDelegate - - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // Override point for customization after application launch. - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/Assets.xcassets/AppIcon.appiconset/Contents.json b/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 36d2c80d88..0000000000 --- a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/Base.lproj/LaunchScreen.storyboard b/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 2e721e1833..0000000000 --- a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/Base.lproj/Main.storyboard b/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/Base.lproj/Main.storyboard deleted file mode 100644 index f56d2f3bb5..0000000000 --- a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/Base.lproj/Main.storyboard +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/Info.plist b/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/Info.plist deleted file mode 100644 index 40c6215d90..0000000000 --- a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/Info.plist +++ /dev/null @@ -1,47 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/ViewController.h b/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/ViewController.h deleted file mode 100644 index 4627e29285..0000000000 --- a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/ViewController.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : UIViewController - - -@end - diff --git a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/ViewController.m b/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/ViewController.m deleted file mode 100644 index 6fd98321db..0000000000 --- a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/ViewController.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" - -#import - -@interface ViewController () - -@end - -@implementation ViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view, typically from a nib. - - ASNetworkImageNode *imageNode = [[ASNetworkImageNode alloc] init]; - imageNode.URL = [NSURL URLWithString:@"https://i.pinimg.com/originals/07/44/38/074438e7c75034df2dcf37ba1057803e.gif"]; - // Uncomment to see animated webp support - // imageNode.URL = [NSURL URLWithString:@"https://storage.googleapis.com/downloads.webmproject.org/webp/images/dancing_banana2.lossless.webp"]; - imageNode.frame = self.view.bounds; - imageNode.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - imageNode.contentMode = UIViewContentModeScaleAspectFit; - - [self.view addSubnode:imageNode]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/main.m b/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/main.m deleted file mode 100644 index 65850400e4..0000000000 --- a/submodules/AsyncDisplayKit/examples/AnimatedGIF/ASAnimatedImage/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/AnimatedGIF/Podfile b/submodules/AsyncDisplayKit/examples/AnimatedGIF/Podfile deleted file mode 100644 index c998fa0a8d..0000000000 --- a/submodules/AsyncDisplayKit/examples/AnimatedGIF/Podfile +++ /dev/null @@ -1,7 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' - pod 'PINRemoteImage/WebP' -end - diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Podfile b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Podfile deleted file mode 100644 index ff6cb63a31..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Podfile +++ /dev/null @@ -1,10 +0,0 @@ -# Uncomment this line to define a global platform for your project -platform :ios, '9.0' - -# Uncomment this line if you're using Swift -# use_frameworks! - -target 'Sample' do - pod 'Texture', :path => '../..' -end - diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/AppDelegate.h deleted file mode 100644 index 8d58a13cbe..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - - -@end - diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/AppDelegate.m deleted file mode 100644 index 8221f4c755..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/AppDelegate.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" -#import "OverviewComponentsViewController.h" - -@interface AppDelegate () - -@end - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[OverviewComponentsViewController new]]; - self.window.backgroundColor = [UIColor whiteColor]; - [self.window makeKeyAndVisible]; - - [[UINavigationBar appearance] setBarTintColor:[UIColor colorWithRed:47/255.0 green:184/255.0 blue:253/255.0 alpha:1.0]]; - [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; - [[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];; - - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index eeea76c2db..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "83.5x83.5", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Assets.xcassets/Contents.json b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Assets.xcassets/Contents.json deleted file mode 100644 index da4a164c91..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Assets.xcassets/image.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Assets.xcassets/image.imageset/Contents.json deleted file mode 100644 index 28461488b5..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Assets.xcassets/image.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Assets.xcassets/image.imageset/image.jpg b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Assets.xcassets/image.imageset/image.jpg deleted file mode 100644 index 84428e0164..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Assets.xcassets/image.imageset/image.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Base.lproj/LaunchScreen.storyboard b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 2e721e1833..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Info.plist deleted file mode 100644 index 028aa2b33f..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Info.plist +++ /dev/null @@ -1,50 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASCollectionNode.h b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASCollectionNode.h deleted file mode 100644 index 8fc32e4e43..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASCollectionNode.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// OverviewASCollectionNode.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface OverviewASCollectionNode : ASDisplayNode - -@end diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASCollectionNode.m b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASCollectionNode.m deleted file mode 100644 index 5d29eea95e..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASCollectionNode.m +++ /dev/null @@ -1,65 +0,0 @@ -// -// OverviewASCollectionNode.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "OverviewASCollectionNode.h" - -#import - -@interface OverviewASCollectionNode () -@property (nonatomic, strong) ASCollectionNode *node; -@end - -@implementation OverviewASCollectionNode - -#pragma mark - Lifecycle - -- (instancetype)init -{ - self = [super init]; - if (self == nil) { return self; } - - UICollectionViewFlowLayout *flowLayout = [UICollectionViewFlowLayout new]; - _node = [[ASCollectionNode alloc] initWithCollectionViewLayout:flowLayout]; - _node.dataSource = self; - _node.delegate = self; - [self addSubnode:_node];; - - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - // 100% of container - _node.style.width = ASDimensionMakeWithFraction(1.0); - _node.style.height = ASDimensionMakeWithFraction(1.0); - return [ASWrapperLayoutSpec wrapperWithLayoutElement:_node]; -} - -#pragma mark - - -- (NSInteger)collectionNode:(ASCollectionNode *)collectionNode numberOfItemsInSection:(NSInteger)section -{ - return 100; -} - -- (ASCellNodeBlock)collectionNode:(ASCollectionNode *)collectionNode nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath -{ - return ^{ - ASTextCellNode *cellNode = [ASTextCellNode new]; - cellNode.backgroundColor = [UIColor lightGrayColor]; - cellNode.text = [NSString stringWithFormat:@"Row: %ld", indexPath.row]; - return cellNode; - }; -} - -- (ASSizeRange)collectionNode:(ASCollectionNode *)collectionNode constrainedSizeForItemAtIndexPath:(NSIndexPath *)indexPath -{ - return ASSizeRangeMake(CGSizeMake(100, 100)); -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASPagerNode.h b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASPagerNode.h deleted file mode 100644 index dd6d09d014..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASPagerNode.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// OverviewASPagerNode.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface OverviewASPagerNode : ASDisplayNode - -@end diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASPagerNode.m b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASPagerNode.m deleted file mode 100644 index 7e37448497..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASPagerNode.m +++ /dev/null @@ -1,80 +0,0 @@ -// -// OverviewASPagerNode.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "OverviewASPagerNode.h" - -#pragma mark - Helper - -static UIColor *OverViewASPagerNodeRandomColor() { - CGFloat hue = ( arc4random() % 256 / 256.0 ); // 0.0 to 1.0 - CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from white - CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from black - return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1]; -} - - -#pragma mark - OverviewASPageNode - -@interface OverviewASPageNode : ASCellNode @end - -@implementation OverviewASPageNode - -- (ASLayout *)calculateLayoutThatFits:(ASSizeRange)constrainedSize -{ - return [ASLayout layoutWithLayoutElement:self size:constrainedSize.max]; -} - -@end - - -#pragma mark - OverviewASPagerNode - -@interface OverviewASPagerNode () -@property (nonatomic, strong) ASPagerNode *node; -@property (nonatomic, copy) NSArray *data; -@end - -@implementation OverviewASPagerNode - -- (instancetype)init -{ - self = [super init]; - if (self == nil) { return self; } - - _node = [ASPagerNode new]; - _node.dataSource = self; - _node.delegate = self; - [self addSubnode:_node]; - - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - // 100% of container - _node.style.width = ASDimensionMakeWithFraction(1.0); - _node.style.height = ASDimensionMakeWithFraction(1.0); - return [ASWrapperLayoutSpec wrapperWithLayoutElement:_node]; -} - -- (NSInteger)numberOfPagesInPagerNode:(ASPagerNode *)pagerNode -{ - return 4; -} - -- (ASCellNodeBlock)pagerNode:(ASPagerNode *)pagerNode nodeBlockAtIndex:(NSInteger)index -{ - return ^{ - ASCellNode *cellNode = [OverviewASPageNode new]; - cellNode.backgroundColor = OverViewASPagerNodeRandomColor(); - return cellNode; - }; -} - - -@end diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASTableNode.h b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASTableNode.h deleted file mode 100644 index f80af0d2c9..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASTableNode.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// OverviewASTableNode.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface OverviewASTableNode : ASDisplayNode - -@end diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASTableNode.m b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASTableNode.m deleted file mode 100644 index de050c3694..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/Node Containers/OverviewASTableNode.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// OverviewASTableNode.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "OverviewASTableNode.h" - -@interface OverviewASTableNode () -@property (nonatomic, strong) ASTableNode *node; -@end - -@implementation OverviewASTableNode - -#pragma mark - Lifecycle - -- (instancetype)init -{ - self = [super init]; - if (self == nil) { return self; } - - _node = [ASTableNode new]; - _node.dataSource = self; - _node.delegate = self; - [self addSubnode:_node]; - - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - // 100% of container - _node.style.width = ASDimensionMakeWithFraction(1.0); - _node.style.height = ASDimensionMakeWithFraction(1.0); - return [ASWrapperLayoutSpec wrapperWithLayoutElement:_node]; -} - - -#pragma mark - - -- (NSInteger)tableNode:(ASTableNode *)tableNode numberOfRowsInSection:(NSInteger)section -{ - return 100; -} - -- (ASCellNodeBlock)tableNode:(ASTableNode *)tableNode nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return ^{ - ASTextCellNode *cellNode = [ASTextCellNode new]; - cellNode.text = [NSString stringWithFormat:@"Row: %ld", indexPath.row]; - return cellNode; - }; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/OverviewComponentsViewController.h b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/OverviewComponentsViewController.h deleted file mode 100644 index cae34ad209..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/OverviewComponentsViewController.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// OverviewComponentsViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - - -@protocol ASLayoutSpecListEntry - -- (NSString *)entryTitle; -- (NSString *)entryDescription; - -@end - -@interface OverviewComponentsViewController : ASViewController - - -@end - diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/OverviewComponentsViewController.m b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/OverviewComponentsViewController.m deleted file mode 100644 index 740d975d2a..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/OverviewComponentsViewController.m +++ /dev/null @@ -1,556 +0,0 @@ -// -// OverviewComponentsViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "OverviewComponentsViewController.h" - -#import "OverviewDetailViewController.h" -#import "OverviewASCollectionNode.h" -#import "OverviewASTableNode.h" -#import "OverviewASPagerNode.h" - -#import - - -#pragma mark - ASCenterLayoutSpecSizeThatFitsBlock - -typedef ASLayoutSpec *(^OverviewDisplayNodeSizeThatFitsBlock)(ASSizeRange constrainedSize); - - -#pragma mark - OverviewDisplayNodeWithSizeBlock - -@interface OverviewDisplayNodeWithSizeBlock : ASDisplayNode - -@property (nonatomic, copy) NSString *entryTitle; -@property (nonatomic, copy) NSString *entryDescription; -@property (nonatomic, copy) OverviewDisplayNodeSizeThatFitsBlock sizeThatFitsBlock; - -@end - -@implementation OverviewDisplayNodeWithSizeBlock - -// FIXME: Use new ASDisplayNodeAPI (layoutSpecBlock) API if shipped -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - OverviewDisplayNodeSizeThatFitsBlock block = self.sizeThatFitsBlock; - if (block != nil) { - return block(constrainedSize); - } - - return [super layoutSpecThatFits:constrainedSize]; -} - -@end - - -#pragma mark - OverviewTitleDescriptionCellNode - -@interface OverviewTitleDescriptionCellNode : ASCellNode - -@property (nonatomic, strong) ASTextNode *titleNode; -@property (nonatomic, strong) ASTextNode *descriptionNode; - -@end - -@implementation OverviewTitleDescriptionCellNode - -- (instancetype)init -{ - self = [super init]; - if (self == nil) { return self; } - - _titleNode = [[ASTextNode alloc] init]; - _descriptionNode = [[ASTextNode alloc] init]; - - [self addSubnode:_titleNode]; - [self addSubnode:_descriptionNode]; - - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - BOOL hasDescription = self.descriptionNode.attributedText.length > 0; - - ASStackLayoutSpec *verticalStackLayoutSpec = [ASStackLayoutSpec verticalStackLayoutSpec]; - verticalStackLayoutSpec.alignItems = ASStackLayoutAlignItemsStart; - verticalStackLayoutSpec.spacing = 5.0; - verticalStackLayoutSpec.children = hasDescription ? @[self.titleNode, self.descriptionNode] : @[self.titleNode]; - - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(10, 16, 10, 10) child:verticalStackLayoutSpec]; -} - -@end - - -#pragma mark - OverviewComponentsViewController - -@interface OverviewComponentsViewController () - -@property (nonatomic, copy) NSArray *data; -@property (nonatomic, strong) ASTableNode *tableNode; - -@end - -@implementation OverviewComponentsViewController - - -#pragma mark - Lifecycle Methods - -- (instancetype)init -{ - _tableNode = [ASTableNode new]; - - self = [super initWithNode:_tableNode]; - - if (self) { - _tableNode.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - _tableNode.delegate = (id)self; - _tableNode.dataSource = (id)self; - } - - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"AsyncDisplayKit"; - - [self setupData]; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - [_tableNode deselectRowAtIndexPath:_tableNode.indexPathForSelectedRow animated:YES]; -} - - -#pragma mark - Data Model - -- (void)setupData -{ - OverviewDisplayNodeWithSizeBlock *parentNode = nil; - ASDisplayNode *childNode = nil; - - -// Setup Nodes Container -// --------------------------------------------------------------------------------------------------------- - NSMutableArray *mutableNodesContainerData = [NSMutableArray array]; - -#pragma mark ASCollectionNode - childNode = [OverviewASCollectionNode new]; - - parentNode = [self centeringParentNodeWithInset:UIEdgeInsetsZero child:childNode]; - parentNode.entryTitle = @"ASCollectionNode"; - parentNode.entryDescription = @"ASCollectionNode is a node based class that wraps an ASCollectionView. It can be used as a subnode of another node, and provide room for many (great) features and improvements later on."; - [mutableNodesContainerData addObject:parentNode]; - -#pragma mark ASTableNode - childNode = [OverviewASTableNode new]; - - parentNode = [self centeringParentNodeWithInset:UIEdgeInsetsZero child:childNode]; - parentNode.entryTitle = @"ASTableNode"; - parentNode.entryDescription = @"ASTableNode is a node based class that wraps an ASTableView. It can be used as a subnode of another node, and provide room for many (great) features and improvements later on."; - [mutableNodesContainerData addObject:parentNode]; - -#pragma mark ASPagerNode - childNode = [OverviewASPagerNode new]; - - parentNode = [self centeringParentNodeWithInset:UIEdgeInsetsZero child:childNode]; - parentNode.entryTitle = @"ASPagerNode"; - parentNode.entryDescription = @"ASPagerNode is a specialized subclass of ASCollectionNode. Using it allows you to produce a page style UI similar to what you'd create with a UIPageViewController with UIKit. Luckily, the API is quite a bit simpler than UIPageViewController's."; - [mutableNodesContainerData addObject:parentNode]; - - -// Setup Nodes -// --------------------------------------------------------------------------------------------------------- - NSMutableArray *mutableNodesData = [NSMutableArray array]; - -#pragma mark ASDisplayNode - ASDisplayNode *displayNode = [self childNode]; - - parentNode = [self centeringParentNodeWithChild:displayNode]; - parentNode.entryTitle = @"ASDisplayNode"; - parentNode.entryDescription = @"ASDisplayNode is the main view abstraction over UIView and CALayer. It initializes and owns a UIView in the same way UIViews create and own their own backing CALayers."; - [mutableNodesData addObject:parentNode]; - -#pragma mark ASButtonNode - ASButtonNode *buttonNode = [ASButtonNode new]; - - // Set title for button node with a given font or color. If you pass in nil for font or color the default system - // font and black as color will be used - [buttonNode setTitle:@"Button Title Normal" withFont:nil withColor:[UIColor blueColor] forState:UIControlStateNormal]; - [buttonNode setTitle:@"Button Title Highlighted" withFont:[UIFont systemFontOfSize:14] withColor:nil forState:UIControlStateHighlighted]; - [buttonNode addTarget:self action:@selector(buttonPressed:) forControlEvents:ASControlNodeEventTouchUpInside]; - - parentNode = [self centeringParentNodeWithChild:buttonNode]; - parentNode.entryTitle = @"ASButtonNode"; - parentNode.entryDescription = @"ASButtonNode (a subclass of ASControlNode) supports simple buttons, with multiple states for a text label and an image with a few different layout options. Enables layerBacking for subnodes to significantly lighten main thread impact relative to UIButton (though async preparation is the bigger win)."; - [mutableNodesData addObject:parentNode]; - -#pragma mark ASTextNode - ASTextNode *textNode = [ASTextNode new]; - textNode.attributedText = [[NSAttributedString alloc] initWithString:@"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum varius nisi quis mattis dignissim. Proin convallis odio nec ipsum molestie, in porta quam viverra. Fusce ornare dapibus velit, nec malesuada mauris pretium vitae. Etiam malesuada ligula magna."]; - - parentNode = [self centeringParentNodeWithChild:textNode]; - parentNode.entryTitle = @"ASTextNode"; - parentNode.entryDescription = @"Like UITextView — built on TextKit with full-featured rich text support."; - [mutableNodesData addObject:parentNode]; - -#pragma mark ASEditableTextNode - ASEditableTextNode *editableTextNode = [ASEditableTextNode new]; - editableTextNode.backgroundColor = [UIColor lightGrayColor]; - editableTextNode.attributedText = [[NSAttributedString alloc] initWithString:@"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum varius nisi quis mattis dignissim. Proin convallis odio nec ipsum molestie, in porta quam viverra. Fusce ornare dapibus velit, nec malesuada mauris pretium vitae. Etiam malesuada ligula magna."]; - - parentNode = [self centeringParentNodeWithChild:editableTextNode]; - parentNode.entryTitle = @"ASEditableTextNode"; - parentNode.entryDescription = @"ASEditableTextNode provides a flexible, efficient, and animation-friendly editable text component."; - [mutableNodesData addObject:parentNode]; - -#pragma mark ASImageNode - ASImageNode *imageNode = [ASImageNode new]; - imageNode.image = [UIImage imageNamed:@"image.jpg"]; - - CGSize imageNetworkImageNodeSize = (CGSize){imageNode.image.size.width / 7, imageNode.image.size.height / 7}; - - imageNode.style.preferredSize = imageNetworkImageNodeSize; - - parentNode = [self centeringParentNodeWithChild:imageNode]; - parentNode.entryTitle = @"ASImageNode"; - parentNode.entryDescription = @"Like UIImageView — decodes images asynchronously."; - [mutableNodesData addObject:parentNode]; - -#pragma mark ASNetworkImageNode - ASNetworkImageNode *networkImageNode = [ASNetworkImageNode new]; - networkImageNode.URL = [NSURL URLWithString:@"http://i.imgur.com/FjOR9kX.jpg"]; - networkImageNode.style.preferredSize = imageNetworkImageNodeSize; - - parentNode = [self centeringParentNodeWithChild:networkImageNode]; - parentNode.entryTitle = @"ASNetworkImageNode"; - parentNode.entryDescription = @"ASNetworkImageNode is a simple image node that can download and display an image from the network, with support for a placeholder image."; - [mutableNodesData addObject:parentNode]; - -#pragma mark ASMapNode - ASMapNode *mapNode = [ASMapNode new]; - mapNode.style.preferredSize = CGSizeMake(300.0, 300.0); - - // San Francisco - CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(37.7749, -122.4194); - mapNode.region = MKCoordinateRegionMakeWithDistance(coord, 20000, 20000); - - parentNode = [self centeringParentNodeWithChild:mapNode]; - parentNode.entryTitle = @"ASMapNode"; - parentNode.entryDescription = @"ASMapNode offers completely asynchronous preparation, automatic preloading, and efficient memory handling. Its standard mode is a fully asynchronous snapshot, with liveMap mode loading automatically triggered by any ASTableView or ASCollectionView; its .liveMap mode can be flipped on with ease (even on a background thread) to provide a cached, fully interactive map when necessary."; - [mutableNodesData addObject:parentNode]; - -#pragma mark ASVideoNode - ASVideoNode *videoNode = [ASVideoNode new]; - videoNode.style.preferredSize = CGSizeMake(300.0, 400.0); - - AVAsset *asset = [AVAsset assetWithURL:[NSURL URLWithString:@"http://www.w3schools.com/html/mov_bbb.mp4"]]; - videoNode.asset = asset; - - parentNode = [self centeringParentNodeWithChild:videoNode]; - parentNode.entryTitle = @"ASVideoNode"; - parentNode.entryDescription = @"ASVideoNode is a newer class that exposes a relatively full-featured API, and is designed for both efficient and convenient implementation of embedded videos in scrolling views."; - [mutableNodesData addObject:parentNode]; - -#pragma mark ASScrollNode - UIImage *scrollNodeImage = [UIImage imageNamed:@"image"]; - - ASScrollNode *scrollNode = [ASScrollNode new]; - scrollNode.style.preferredSize = CGSizeMake(300.0, 400.0); - - UIScrollView *scrollNodeView = scrollNode.view; - [scrollNodeView addSubview:[[UIImageView alloc] initWithImage:scrollNodeImage]]; - scrollNodeView.contentSize = scrollNodeImage.size; - - parentNode = [self centeringParentNodeWithChild:scrollNode]; - parentNode.entryTitle = @"ASScrollNode"; - parentNode.entryDescription = @"Simple node that wraps UIScrollView."; - [mutableNodesData addObject:parentNode]; - - -// Layout Specs -// --------------------------------------------------------------------------------------------------------- - NSMutableArray *mutableLayoutSpecData = [NSMutableArray array]; - -#pragma mark ASInsetLayoutSpec - childNode = [self childNode]; - - parentNode = [self parentNodeWithChild:childNode]; - parentNode.entryTitle = @"ASInsetLayoutSpec"; - parentNode.entryDescription = @"Applies an inset margin around a component."; - parentNode.sizeThatFitsBlock = ^ASLayoutSpec *(ASSizeRange constrainedSize) { - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(20, 10, 0, 0) child:childNode]; - }; - [parentNode addSubnode:childNode]; - [mutableLayoutSpecData addObject:parentNode]; - - -#pragma mark ASBackgroundLayoutSpec - ASDisplayNode *backgroundNode = [ASDisplayNode new]; - backgroundNode.backgroundColor = [UIColor greenColor]; - - childNode = [self childNode]; - childNode.backgroundColor = [childNode.backgroundColor colorWithAlphaComponent:0.5]; - - parentNode = [self parentNodeWithChild:childNode]; - parentNode.entryTitle = @"ASBackgroundLayoutSpec"; - parentNode.entryDescription = @"Lays out a component, stretching another component behind it as a backdrop."; - parentNode.sizeThatFitsBlock = ^ASLayoutSpec *(ASSizeRange constrainedSize) { - return [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild:childNode background:backgroundNode]; - }; - [parentNode addSubnode:backgroundNode]; - [parentNode addSubnode:childNode]; - [mutableLayoutSpecData addObject:parentNode]; - - -#pragma mark ASOverlayLayoutSpec - ASDisplayNode *overlayNode = [ASDisplayNode new]; - overlayNode.backgroundColor = [[UIColor greenColor] colorWithAlphaComponent:0.5]; - - childNode = [self childNode]; - - parentNode = [self parentNodeWithChild:childNode]; - parentNode.entryTitle = @"ASOverlayLayoutSpec"; - parentNode.entryDescription = @"Lays out a component, stretching another component on top of it as an overlay."; - parentNode.sizeThatFitsBlock = ^ASLayoutSpec *(ASSizeRange constrainedSize) { - return [ASOverlayLayoutSpec overlayLayoutSpecWithChild:childNode overlay:overlayNode]; - }; - [parentNode addSubnode:childNode]; - [parentNode addSubnode:overlayNode]; - [mutableLayoutSpecData addObject:parentNode]; - - -#pragma mark ASCenterLayoutSpec - childNode = [self childNode]; - - parentNode = [self parentNodeWithChild:childNode]; - parentNode.entryTitle = @"ASCenterLayoutSpec"; - parentNode.entryDescription = @"Centers a component in the available space."; - parentNode.sizeThatFitsBlock = ^ASLayoutSpec *(ASSizeRange constrainedSize) { - return [ASCenterLayoutSpec centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringXY - sizingOptions:ASCenterLayoutSpecSizingOptionDefault - child:childNode]; - }; - [parentNode addSubnode:childNode]; - [mutableLayoutSpecData addObject:parentNode]; - -#pragma mark ASRatioLayoutSpec - childNode = [self childNode]; - - parentNode = [self parentNodeWithChild:childNode]; - parentNode.entryTitle = @"ASRatioLayoutSpec"; - parentNode.entryDescription = @"Lays out a component at a fixed aspect ratio. Great for images, gifs and videos."; - parentNode.sizeThatFitsBlock = ^ASLayoutSpec *(ASSizeRange constrainedSize) { - return [ASRatioLayoutSpec ratioLayoutSpecWithRatio:0.25 child:childNode]; - }; - [parentNode addSubnode:childNode]; - [mutableLayoutSpecData addObject:parentNode]; - -#pragma mark ASRelativeLayoutSpec - childNode = [self childNode]; - - parentNode = [self parentNodeWithChild:childNode]; - parentNode.entryTitle = @"ASRelativeLayoutSpec"; - parentNode.entryDescription = @"Lays out a component and positions it within the layout bounds according to vertical and horizontal positional specifiers. Similar to the “9-part” image areas, a child can be positioned at any of the 4 corners, or the middle of any of the 4 edges, as well as the center."; - parentNode.sizeThatFitsBlock = ^ASLayoutSpec *(ASSizeRange constrainedSize) { - return [ASRelativeLayoutSpec relativePositionLayoutSpecWithHorizontalPosition:ASRelativeLayoutSpecPositionEnd - verticalPosition:ASRelativeLayoutSpecPositionCenter - sizingOption:ASRelativeLayoutSpecSizingOptionDefault - child:childNode]; - }; - [parentNode addSubnode:childNode]; - [mutableLayoutSpecData addObject:parentNode]; - -#pragma mark ASAbsoluteLayoutSpec - childNode = [self childNode]; - // Add a layout position to the child node that the absolute layout spec will pick up and place it on that position - childNode.style.layoutPosition = CGPointMake(10.0, 10.0); - - parentNode = [self parentNodeWithChild:childNode]; - parentNode.entryTitle = @"ASAbsoluteLayoutSpec"; - parentNode.entryDescription = @"Allows positioning children at fixed offsets."; - parentNode.sizeThatFitsBlock = ^ASLayoutSpec *(ASSizeRange constrainedSize) { - return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[childNode]]; - }; - [parentNode addSubnode:childNode]; - [mutableLayoutSpecData addObject:parentNode]; - - -#pragma mark Vertical ASStackLayoutSpec - ASDisplayNode *childNode1 = [self childNode]; - childNode1.backgroundColor = [UIColor greenColor]; - - ASDisplayNode *childNode2 = [self childNode]; - childNode2.backgroundColor = [UIColor blueColor]; - - ASDisplayNode *childNode3 = [self childNode]; - childNode3.backgroundColor = [UIColor yellowColor]; - - // If we just would add the childrent to the stack layout the layout would be to tall and run out of the edge of - // the node as 50+50+50 = 150 but the parent node is only 100 height. To prevent that we set flexShrink on 2 of the - // children to let the stack layout know it should shrink these children in case the layout will run over the edge - childNode2.style.flexShrink = 1.0; - childNode3.style.flexShrink = 1.0; - - parentNode = [self parentNodeWithChild:childNode]; - parentNode.entryTitle = @"Vertical ASStackLayoutSpec"; - parentNode.entryDescription = @"Is based on a simplified version of CSS flexbox. It allows you to stack components vertically or horizontally and specify how they should be flexed and aligned to fit in the available space."; - parentNode.sizeThatFitsBlock = ^ASLayoutSpec *(ASSizeRange constrainedSize) { - ASStackLayoutSpec *verticalStackLayoutSpec = [ASStackLayoutSpec verticalStackLayoutSpec]; - verticalStackLayoutSpec.alignItems = ASStackLayoutAlignItemsStart; - verticalStackLayoutSpec.children = @[childNode1, childNode2, childNode3]; - return verticalStackLayoutSpec; - }; - [parentNode addSubnode:childNode1]; - [parentNode addSubnode:childNode2]; - [parentNode addSubnode:childNode3]; - [mutableLayoutSpecData addObject:parentNode]; - -#pragma mark Horizontal ASStackLayoutSpec - childNode1 = [ASDisplayNode new]; - childNode1.style.preferredSize = CGSizeMake(10.0, 20.0); - childNode1.style.flexGrow = 1.0; - childNode1.backgroundColor = [UIColor greenColor]; - - childNode2 = [ASDisplayNode new]; - childNode2.style.preferredSize = CGSizeMake(10.0, 20.0); - childNode2.style.alignSelf = ASStackLayoutAlignSelfStretch; - childNode2.backgroundColor = [UIColor blueColor]; - - childNode3 = [ASDisplayNode new]; - childNode3.style.preferredSize = CGSizeMake(10.0, 20.0); - childNode3.backgroundColor = [UIColor yellowColor]; - - parentNode = [self parentNodeWithChild:childNode]; - parentNode.entryTitle = @"Horizontal ASStackLayoutSpec"; - parentNode.entryDescription = @"Is based on a simplified version of CSS flexbox. It allows you to stack components vertically or horizontally and specify how they should be flexed and aligned to fit in the available space."; - parentNode.sizeThatFitsBlock = ^ASLayoutSpec *(ASSizeRange constrainedSize) { - - // Create stack alyout spec to layout children - ASStackLayoutSpec *horizontalStackSpec = [ASStackLayoutSpec horizontalStackLayoutSpec]; - horizontalStackSpec.alignItems = ASStackLayoutAlignItemsStart; - horizontalStackSpec.children = @[childNode1, childNode2, childNode3]; - horizontalStackSpec.spacing = 5.0; // Spacing between children - - // Layout the stack layout with 100% width and 100% height of the parent node - horizontalStackSpec.style.height = ASDimensionMakeWithFraction(1.0); - horizontalStackSpec.style.width = ASDimensionMakeWithFraction(1.0); - - // Add a bit of inset - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(0.0, 5.0, 0.0, 5.0) child:horizontalStackSpec]; - }; - [parentNode addSubnode:childNode1]; - [parentNode addSubnode:childNode2]; - [parentNode addSubnode:childNode3]; - [mutableLayoutSpecData addObject:parentNode]; - - -// Setup Data -// --------------------------------------------------------------------------------------------------------- - NSMutableArray *mutableData = [NSMutableArray array]; - [mutableData addObject:@{@"title" : @"Node Containers", @"data" : mutableNodesContainerData}]; - [mutableData addObject:@{@"title" : @"Nodes", @"data" : mutableNodesData}]; - [mutableData addObject:@{@"title" : @"Layout Specs", @"data" : [mutableLayoutSpecData copy]}]; - self.data = mutableData; -} - -#pragma mark - Parent / Child Helper - -- (OverviewDisplayNodeWithSizeBlock *)parentNodeWithChild:(ASDisplayNode *)child -{ - OverviewDisplayNodeWithSizeBlock *parentNode = [OverviewDisplayNodeWithSizeBlock new]; - parentNode.style.preferredSize = CGSizeMake(100, 100); - parentNode.backgroundColor = [UIColor redColor]; - return parentNode; -} - -- (OverviewDisplayNodeWithSizeBlock *)centeringParentNodeWithChild:(ASDisplayNode *)child -{ - return [self centeringParentNodeWithInset:UIEdgeInsetsMake(10, 10, 10, 10) child:child]; -} - -- (OverviewDisplayNodeWithSizeBlock *)centeringParentNodeWithInset:(UIEdgeInsets)insets child:(ASDisplayNode *)child -{ - OverviewDisplayNodeWithSizeBlock *parentNode = [OverviewDisplayNodeWithSizeBlock new]; - [parentNode addSubnode:child]; - parentNode.sizeThatFitsBlock = ^ASLayoutSpec *(ASSizeRange constrainedSize) { - ASCenterLayoutSpec *centerLayoutSpec = [ASCenterLayoutSpec centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringXY sizingOptions:ASCenterLayoutSpecSizingOptionDefault child:child]; - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets child:centerLayoutSpec]; - }; - return parentNode; -} - -- (ASDisplayNode *)childNode -{ - ASDisplayNode *childNode = [ASDisplayNode new]; - childNode.style.preferredSize = CGSizeMake(50, 50); - childNode.backgroundColor = [UIColor blueColor]; - return childNode; -} - -#pragma mark - Actions - -- (void)buttonPressed:(ASButtonNode *)buttonNode -{ - NSLog(@"Button Pressed"); -} - -#pragma mark - - -- (NSInteger)numberOfSectionsInTableNode:(ASTableNode *)tableNode -{ - return self.data.count; -} - -- (nullable NSString *)tableNode:(ASTableNode *)tableNode titleForHeaderInSection:(NSInteger)section -{ - return self.data[section][@"title"]; -} - -- (NSInteger)tableNode:(ASTableNode *)tableNode numberOfRowsInSection:(NSInteger)section -{ - return [self.data[section][@"data"] count]; -} - -- (ASCellNodeBlock)tableNode:(ASTableNode *)tableNode nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath -{ - // You should get the node or data you want to pass to the cell node outside of the ASCellNodeBlock - ASDisplayNode *node = self.data[indexPath.section][@"data"][indexPath.row]; - return ^{ - OverviewTitleDescriptionCellNode *cellNode = [OverviewTitleDescriptionCellNode new]; - - NSDictionary *titleNodeAttributes = @{ - NSFontAttributeName : [UIFont boldSystemFontOfSize:14.0], - NSForegroundColorAttributeName : [UIColor blackColor] - }; - cellNode.titleNode.attributedText = [[NSAttributedString alloc] initWithString:node.entryTitle attributes:titleNodeAttributes]; - - if (node.entryDescription) { - NSDictionary *descriptionNodeAttributes = @{NSForegroundColorAttributeName : [UIColor lightGrayColor]}; - cellNode.descriptionNode.attributedText = [[NSAttributedString alloc] initWithString:node.entryDescription attributes:descriptionNodeAttributes]; - } - - return cellNode; - }; -} - -- (void)tableNode:(ASTableNode *)tableNode didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - ASDisplayNode *node = self.data[indexPath.section][@"data"][indexPath.row]; - OverviewDetailViewController *detail = [[OverviewDetailViewController alloc] initWithNode:node]; - [self.navigationController pushViewController:detail animated:YES]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/OverviewDetailViewController.h b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/OverviewDetailViewController.h deleted file mode 100644 index 8a006b4428..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/OverviewDetailViewController.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// OverviewDetailViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@class ASDisplayNode; - -@interface OverviewDetailViewController : UIViewController -- (instancetype)initWithNode:(ASDisplayNode *)node; -@end diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/OverviewDetailViewController.m b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/OverviewDetailViewController.m deleted file mode 100644 index b81b307921..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/OverviewDetailViewController.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// OverviewDetailViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "OverviewDetailViewController.h" - -@interface OverviewDetailViewController () -@property (nonatomic, strong) ASDisplayNode *node; -@end - -@implementation OverviewDetailViewController - -#pragma mark - Lifecycle - -- (instancetype)initWithNode:(ASDisplayNode *)node -{ - self = [super initWithNibName:nil bundle:nil]; - if (self == nil) { return self; } - _node = node; - return self; -} - -#pragma mark - UIViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor whiteColor]; - [self.view addSubnode:self.node]; -} - -- (void)viewDidLayoutSubviews -{ - [super viewDidLayoutSubviews]; - - // Center node frame - CGRect bounds = self.view.bounds; - CGSize nodeSize = [self.node layoutThatFits:ASSizeRangeMake(CGSizeZero, bounds.size)].size; - self.node.frame = CGRectMake(CGRectGetMidX(bounds) - (nodeSize.width / 2.0), - CGRectGetMidY(bounds) - (nodeSize.height / 2.0), - nodeSize.width, - nodeSize.height); -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/main.m b/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/main.m deleted file mode 100644 index 0e5da05001..0000000000 --- a/submodules/AsyncDisplayKit/examples/AsyncDisplayKitOverview/Sample/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Podfile b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ASDisplayNode+CatDeals.h b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ASDisplayNode+CatDeals.h deleted file mode 100644 index a851e58122..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ASDisplayNode+CatDeals.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// ASDisplayNode+CatDeals.h -// Sample -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface ASDisplayNode (CatDeals) - -@property (nullable, copy) NSString *catsLoggingID; - -@end - -NS_ASSUME_NONNULL_END diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ASDisplayNode+CatDeals.mm b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ASDisplayNode+CatDeals.mm deleted file mode 100644 index f7154ae5e3..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ASDisplayNode+CatDeals.mm +++ /dev/null @@ -1,61 +0,0 @@ -// -// ASDisplayNode+CatDeals.mm -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 - -#import "ASDisplayNode+CatDeals.h" - -#import - -// A place to store info on any display node in this app. -struct CatDealsNodeContext { - NSString *loggingID = nil; -}; - -// Convenience to cast _displayNodeContext into our struct reference. -NS_INLINE CatDealsNodeContext &GetNodeContext(ASDisplayNode *node) { - return *static_cast(node->_displayNodeContext); -} - -@implementation ASDisplayNode (CatDeals) - -- (void)baseDidInit -{ - _displayNodeContext = new CatDealsNodeContext; -} - -- (void)baseWillDealloc -{ - delete &GetNodeContext(self); -} - -- (void)setCatsLoggingID:(NSString *)catsLoggingID -{ - NSString *copy = [catsLoggingID copy]; - ASLockScopeSelf(); - GetNodeContext(self).loggingID = copy; -} - -- (NSString *)catsLoggingID -{ - ASLockScopeSelf(); - return GetNodeContext(self).loggingID; -} - -- (void)didEnterVisibleState -{ - if (NSString *loggingID = self.catsLoggingID) { - NSLog(@"Visible: %@", loggingID); - } -} - -- (void)didExitVisibleState -{ - if (NSString *loggingID = self.catsLoggingID) { - NSLog(@"NotVisible: %@", loggingID); - } -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/AppDelegate.h deleted file mode 100644 index db20870a31..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#define SIMULATE_WEB_RESPONSE 0 - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/AppDelegate.m deleted file mode 100644 index 447ff93b88..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/AppDelegate.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "PresentingViewController.h" -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[UINavigationController alloc] init]; - - [self pushNewViewControllerAnimated:NO]; - - [self.window makeKeyAndVisible]; - - return YES; -} - -- (void)pushNewViewControllerAnimated:(BOOL)animated -{ - UINavigationController *navController = (UINavigationController *)self.window.rootViewController; - -#if SIMULATE_WEB_RESPONSE - UIViewController *viewController = [[PresentingViewController alloc] init]; -#else - UIViewController *viewController = [[ViewController alloc] init]; - viewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Push Another Copy" style:UIBarButtonItemStylePlain target:self action:@selector(pushNewViewController)]; -#endif - - [navController pushViewController:viewController animated:animated]; -} - -- (void)pushNewViewController -{ - [self pushNewViewControllerAnimated:YES]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/BlurbNode.h b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/BlurbNode.h deleted file mode 100644 index 5451fb39f0..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/BlurbNode.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// BlurbNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -/** - * Simple node that displays a placekitten.com attribution. - */ -@interface BlurbNode : ASCellNode - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/BlurbNode.m b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/BlurbNode.m deleted file mode 100644 index 9c72b6d573..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/BlurbNode.m +++ /dev/null @@ -1,104 +0,0 @@ -// -// BlurbNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "BlurbNode.h" - -#import -#import - -#import -#import - -static CGFloat kTextPadding = 10.0f; - -@interface BlurbNode () -{ - ASTextNode *_textNode; -} - -@end - - -@implementation BlurbNode - -#pragma mark - -#pragma mark ASCellNode. - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - self.backgroundColor = [UIColor lightGrayColor]; - // create a text node - _textNode = [[ASTextNode alloc] init]; - _textNode.maximumNumberOfLines = 2; - - // configure the node to support tappable links - _textNode.delegate = self; - _textNode.userInteractionEnabled = YES; - - // generate an attributed string using the custom link attribute specified above - NSString *blurb = @"Kittens courtesy lorempixel.com \U0001F638 \nTitles courtesy of catipsum.com"; - NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:blurb]; - [string addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue-Light" size:16.0f] range:NSMakeRange(0, blurb.length)]; - [string addAttributes:@{ - NSLinkAttributeName: [NSURL URLWithString:@"http://lorempixel.com/"], - NSForegroundColorAttributeName: [UIColor blueColor], - NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle | NSUnderlinePatternDot), - } range:[blurb rangeOfString:@"lorempixel.com"]]; - [string addAttributes:@{ - NSLinkAttributeName: [NSURL URLWithString:@"http://www.catipsum.com/"], - NSForegroundColorAttributeName: [UIColor blueColor], - NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle | NSUnderlinePatternDot), - } range:[blurb rangeOfString:@"catipsum.com"]]; - _textNode.attributedText = string; - - // add it as a subnode, and we're done - [self addSubnode:_textNode]; - - return self; -} - -- (void)didLoad -{ - // enable highlighting now that self.layer has loaded -- see ASHighlightOverlayLayer.h - self.layer.as_allowsHighlightDrawing = YES; - - [super didLoad]; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASCenterLayoutSpec *centerSpec = [[ASCenterLayoutSpec alloc] init]; - centerSpec.centeringOptions = ASCenterLayoutSpecCenteringX; - centerSpec.sizingOptions = ASCenterLayoutSpecSizingOptionMinimumY; - centerSpec.child = _textNode; - - UIEdgeInsets padding = UIEdgeInsetsMake(kTextPadding, kTextPadding, kTextPadding, kTextPadding); - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:padding child:centerSpec]; -} - - -#pragma mark - -#pragma mark ASTextNodeDelegate methods. - -- (BOOL)textNode:(ASTextNode *)richTextNode shouldHighlightLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point -{ - // opt into link highlighting -- tap and hold the link to try it! must enable highlighting on a layer, see -didLoad - return YES; -} - -- (void)textNode:(ASTextNode *)richTextNode tappedLinkAttribute:(NSString *)attribute value:(NSURL *)URL atPoint:(CGPoint)point textRange:(NSRange)textRange -{ - // the node tapped a link, open it - [[UIApplication sharedApplication] openURL:URL]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Images.xcassets/cat_face.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Images.xcassets/cat_face.imageset/Contents.json deleted file mode 100644 index a9e3a5b11b..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Images.xcassets/cat_face.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "cat_face.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Images.xcassets/cat_face.imageset/cat_face.png b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Images.xcassets/cat_face.imageset/cat_face.png deleted file mode 100644 index ee4407212c..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Images.xcassets/cat_face.imageset/cat_face.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Info.plist deleted file mode 100644 index 8c57e7a83d..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Info.plist +++ /dev/null @@ -1,59 +0,0 @@ - - - - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - NSExceptionDomains - - http://lorempixel.com - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIcons - - CFBundleIcons~ipad - - CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - Launchboard - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemNode.h b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemNode.h deleted file mode 100644 index 19bfec29cc..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemNode.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// ItemNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "ItemViewModel.h" - -@interface ItemNode : ASCellNode - -+ (CGSize)sizeForWidth:(CGFloat)width; -+ (CGSize)preferredViewSize; - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemNode.m b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemNode.m deleted file mode 100644 index 6cd05accdb..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemNode.m +++ /dev/null @@ -1,393 +0,0 @@ -// -// ItemNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ItemNode.h" - -#import "ASDisplayNode+CatDeals.h" -#import "ItemStyles.h" -#import "PlaceholderNetworkImageNode.h" -#import - -static CGFloat ASIsRTL() -{ - static BOOL __isRTL = NO; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - __isRTL = [UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft; - }); - return __isRTL; -} - -const CGFloat kFixedLabelsAreaHeight = 96.0; -const CGFloat kDesignWidth = 320.0; -const CGFloat kDesignHeight = 299.0; -const CGFloat kBadgeHeight = 34.0; -const CGFloat kSoldOutGBHeight = 50.0; - -@interface ItemNode() - -@property (nonatomic, strong) ItemViewModel *nodeModel; - -@property (nonatomic, strong) PlaceholderNetworkImageNode *dealImageView; - -@property (nonatomic, strong) ASTextNode *titleLabel; -@property (nonatomic, strong) ASTextNode *firstInfoLabel; -@property (nonatomic, strong) ASTextNode *distanceLabel; -@property (nonatomic, strong) ASTextNode *secondInfoLabel; -@property (nonatomic, strong) ASTextNode *originalPriceLabel; -@property (nonatomic, strong) ASTextNode *finalPriceLabel; -@property (nonatomic, strong) ASTextNode *soldOutLabelFlat; -@property (nonatomic, strong) ASDisplayNode *soldOutLabelBackground; -@property (nonatomic, strong) ASDisplayNode *soldOutOverlay; -@property (nonatomic, strong) ASTextNode *badge; - -@end - -@implementation ItemNode -// Defined on ASCellNode -@dynamic nodeModel; - -+ (void)load -{ - // Need to happen on main thread. - ASIsRTL(); -} - -- (instancetype)init -{ - self = [super init]; - if (self != nil) { - [self setupNodes]; - [self updateBackgroundColor]; - } - return self; -} - -- (void)setNodeModel:(ItemViewModel *)nodeModel -{ - [super setNodeModel:nodeModel]; - - self.catsLoggingID = [NSString stringWithFormat:@"CatDeal#%ld", (long)nodeModel.identifier]; - [self updateLabels]; - [self updateAccessibilityIdentifier]; -} - -- (void)setupNodes -{ - self.dealImageView = [[PlaceholderNetworkImageNode alloc] init]; - self.dealImageView.delegate = self; - self.dealImageView.placeholderEnabled = YES; - self.dealImageView.placeholderImageOverride = [ItemStyles placeholderImage]; - self.dealImageView.defaultImage = [ItemStyles placeholderImage]; - self.dealImageView.contentMode = UIViewContentModeScaleToFill; - self.dealImageView.placeholderFadeDuration = 0.0; - self.dealImageView.layerBacked = YES; - - self.titleLabel = [[ASTextNode alloc] init]; - self.titleLabel.maximumNumberOfLines = 2; - self.titleLabel.style.alignSelf = ASStackLayoutAlignSelfStart; - self.titleLabel.style.flexGrow = 1.0; - self.titleLabel.layerBacked = YES; - - self.firstInfoLabel = [[ASTextNode alloc] init]; - self.firstInfoLabel.maximumNumberOfLines = 1; - self.firstInfoLabel.layerBacked = YES; - - self.secondInfoLabel = [[ASTextNode alloc] init]; - self.secondInfoLabel.maximumNumberOfLines = 1; - self.secondInfoLabel.layerBacked = YES; - - self.distanceLabel = [[ASTextNode alloc] init]; - self.distanceLabel.maximumNumberOfLines = 1; - self.distanceLabel.layerBacked = YES; - - self.originalPriceLabel = [[ASTextNode alloc] init]; - self.originalPriceLabel.maximumNumberOfLines = 1; - self.originalPriceLabel.layerBacked = YES; - - self.finalPriceLabel = [[ASTextNode alloc] init]; - self.finalPriceLabel.maximumNumberOfLines = 1; - self.finalPriceLabel.layerBacked = YES; - - self.badge = [[ASTextNode alloc] init]; - self.badge.hidden = YES; - self.badge.layerBacked = YES; - - self.soldOutLabelFlat = [[ASTextNode alloc] init]; - self.soldOutLabelFlat.layerBacked = YES; - - self.soldOutLabelBackground = [[ASDisplayNode alloc] init]; - self.soldOutLabelBackground.style.width = ASDimensionMakeWithFraction(1.0); - self.soldOutLabelBackground.style.height = ASDimensionMakeWithPoints(kSoldOutGBHeight); - self.soldOutLabelBackground.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.9]; - self.soldOutLabelBackground.style.flexGrow = 1.0; - self.soldOutLabelBackground.layerBacked = YES; - - self.soldOutOverlay = [[ASDisplayNode alloc] init]; - self.soldOutOverlay.style.flexGrow = 1.0; - self.soldOutOverlay.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.5]; - self.soldOutOverlay.layerBacked = YES; - - [self addSubnode:self.dealImageView]; - [self addSubnode:self.titleLabel]; - [self addSubnode:self.firstInfoLabel]; - [self addSubnode:self.secondInfoLabel]; - [self addSubnode:self.originalPriceLabel]; - [self addSubnode:self.finalPriceLabel]; - [self addSubnode:self.distanceLabel]; - [self addSubnode:self.badge]; - - [self addSubnode:self.soldOutLabelBackground]; - [self addSubnode:self.soldOutLabelFlat]; - [self addSubnode:self.soldOutOverlay]; - self.soldOutOverlay.hidden = YES; - self.soldOutLabelBackground.hidden = YES; - self.soldOutLabelFlat.hidden = YES; - - if (ASIsRTL()) { - self.titleLabel.style.alignSelf = ASStackLayoutAlignSelfEnd; - self.firstInfoLabel.style.alignSelf = ASStackLayoutAlignSelfEnd; - self.distanceLabel.style.alignSelf = ASStackLayoutAlignSelfEnd; - self.secondInfoLabel.style.alignSelf = ASStackLayoutAlignSelfEnd; - self.originalPriceLabel.style.alignSelf = ASStackLayoutAlignSelfStart; - self.finalPriceLabel.style.alignSelf = ASStackLayoutAlignSelfStart; - } else { - self.firstInfoLabel.style.alignSelf = ASStackLayoutAlignSelfStart; - self.distanceLabel.style.alignSelf = ASStackLayoutAlignSelfStart; - self.secondInfoLabel.style.alignSelf = ASStackLayoutAlignSelfStart; - self.originalPriceLabel.style.alignSelf = ASStackLayoutAlignSelfEnd; - self.finalPriceLabel.style.alignSelf = ASStackLayoutAlignSelfEnd; - } -} - -- (void)updateLabels -{ - // Set Title text - if (self.nodeModel.titleText) { - self.titleLabel.attributedText = [[NSAttributedString alloc] initWithString:self.nodeModel.titleText attributes:[ItemStyles titleStyle]]; - } - if (self.nodeModel.firstInfoText) { - self.firstInfoLabel.attributedText = [[NSAttributedString alloc] initWithString:self.nodeModel.firstInfoText attributes:[ItemStyles subtitleStyle]]; - } - - if (self.nodeModel.secondInfoText) { - self.secondInfoLabel.attributedText = [[NSAttributedString alloc] initWithString:self.nodeModel.secondInfoText attributes:[ItemStyles secondInfoStyle]]; - } - if (self.nodeModel.originalPriceText) { - self.originalPriceLabel.attributedText = [[NSAttributedString alloc] initWithString:self.nodeModel.originalPriceText attributes:[ItemStyles originalPriceStyle]]; - } - if (self.nodeModel.finalPriceText) { - self.finalPriceLabel.attributedText = [[NSAttributedString alloc] initWithString:self.nodeModel.finalPriceText attributes:[ItemStyles finalPriceStyle]]; - } - if (self.nodeModel.distanceLabelText) { - NSString *format = ASIsRTL() ? @"%@ •" : @"• %@"; - NSString *distanceText = [NSString stringWithFormat:format, self.nodeModel.distanceLabelText]; - - self.distanceLabel.attributedText = [[NSAttributedString alloc] initWithString:distanceText attributes:[ItemStyles distanceStyle]]; - } - - BOOL isSoldOut = self.nodeModel.soldOutText != nil; - - if (isSoldOut) { - NSString *soldOutText = self.nodeModel.soldOutText; - self.soldOutLabelFlat.attributedText = [[NSAttributedString alloc] initWithString:soldOutText attributes:[ItemStyles soldOutStyle]]; - } - self.soldOutOverlay.hidden = !isSoldOut; - self.soldOutLabelFlat.hidden = !isSoldOut; - self.soldOutLabelBackground.hidden = !isSoldOut; - - BOOL hasBadge = self.nodeModel.badgeText != nil; - if (hasBadge) { - self.badge.attributedText = [[NSAttributedString alloc] initWithString:self.nodeModel.badgeText attributes:[ItemStyles badgeStyle]]; - self.badge.backgroundColor = [ItemStyles badgeColor]; - } - self.badge.hidden = !hasBadge; -} - -- (void)updateAccessibilityIdentifier -{ - ASSetDebugName(self, @"Item #%zd", self.nodeModel.identifier); - self.accessibilityIdentifier = self.nodeModel.titleText; -} - -- (void)updateBackgroundColor -{ - if (self.highlighted) { - self.backgroundColor = [[UIColor grayColor] colorWithAlphaComponent:0.3]; - } else if (self.selected) { - self.backgroundColor = [UIColor lightGrayColor]; - } else { - self.backgroundColor = [UIColor whiteColor]; - } -} - -- (void)setSelected:(BOOL)selected -{ - [super setSelected:selected]; - [self updateBackgroundColor]; -} - -- (void)setHighlighted:(BOOL)highlighted -{ - [super setHighlighted:highlighted]; - [self updateBackgroundColor]; -} - -#pragma mark - ASDisplayNode - -- (void)displayWillStart -{ - [super displayWillStart]; - [self didEnterPreloadState]; -} - -- (void)didEnterPreloadState -{ - [super didEnterPreloadState]; - if (self.nodeModel) { - [self loadImage]; - } -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize { - - ASLayoutSpec *textSpec = [self textSpec]; - ASLayoutSpec *imageSpec = [self imageSpecWithSize:constrainedSize]; - ASOverlayLayoutSpec *soldOutOverImage = [ASOverlayLayoutSpec overlayLayoutSpecWithChild:imageSpec overlay:[self soldOutLabelSpec]]; - - NSArray *stackChildren = @[soldOutOverImage, textSpec]; - - ASStackLayoutSpec *mainStack = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical spacing:0.0 justifyContent:ASStackLayoutJustifyContentStart alignItems:ASStackLayoutAlignItemsStretch children:stackChildren]; - - ASOverlayLayoutSpec *soldOutOverlay = [ASOverlayLayoutSpec overlayLayoutSpecWithChild:mainStack overlay:self.soldOutOverlay]; - - return soldOutOverlay; -} - -- (ASLayoutSpec *)textSpec -{ - CGFloat kInsetHorizontal = 16.0; - CGFloat kInsetTop = 6.0; - CGFloat kInsetBottom = 0.0; - - UIEdgeInsets textInsets = UIEdgeInsetsMake(kInsetTop, kInsetHorizontal, kInsetBottom, kInsetHorizontal); - - ASLayoutSpec *verticalSpacer = [[ASLayoutSpec alloc] init]; - verticalSpacer.style.flexGrow = 1.0; - - ASLayoutSpec *horizontalSpacer1 = [[ASLayoutSpec alloc] init]; - horizontalSpacer1.style.flexGrow = 1.0; - - ASLayoutSpec *horizontalSpacer2 = [[ASLayoutSpec alloc] init]; - horizontalSpacer2.style.flexGrow = 1.0; - - NSArray *info1Children = @[self.firstInfoLabel, self.distanceLabel, horizontalSpacer1, self.originalPriceLabel]; - NSArray *info2Children = @[self.secondInfoLabel, horizontalSpacer2, self.finalPriceLabel]; - if (ASIsRTL()) { - info1Children = [[info1Children reverseObjectEnumerator] allObjects]; - info2Children = [[info2Children reverseObjectEnumerator] allObjects]; - } - - ASStackLayoutSpec *info1Stack = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal spacing:1.0 justifyContent:ASStackLayoutJustifyContentStart alignItems:ASStackLayoutAlignItemsBaselineLast children:info1Children]; - - ASStackLayoutSpec *info2Stack = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal spacing:0.0 justifyContent:ASStackLayoutJustifyContentCenter alignItems:ASStackLayoutAlignItemsBaselineLast children:info2Children]; - - ASStackLayoutSpec *textStack = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical spacing:0.0 justifyContent:ASStackLayoutJustifyContentEnd alignItems:ASStackLayoutAlignItemsStretch children:@[self.titleLabel, verticalSpacer, info1Stack, info2Stack]]; - - ASInsetLayoutSpec *textWrapper = [ASInsetLayoutSpec insetLayoutSpecWithInsets:textInsets child:textStack]; - textWrapper.style.flexGrow = 1.0; - - return textWrapper; -} - -- (ASLayoutSpec *)imageSpecWithSize:(ASSizeRange)constrainedSize -{ - CGFloat imageRatio = [self imageRatioFromSize:constrainedSize.max]; - - ASRatioLayoutSpec *imagePlace = [ASRatioLayoutSpec ratioLayoutSpecWithRatio:imageRatio child:self.dealImageView]; - - self.badge.style.layoutPosition = CGPointMake(0, constrainedSize.max.height - kFixedLabelsAreaHeight - kBadgeHeight); - self.badge.style.height = ASDimensionMakeWithPoints(kBadgeHeight); - ASAbsoluteLayoutSpec *badgePosition = [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[self.badge]]; - - ASOverlayLayoutSpec *badgeOverImage = [ASOverlayLayoutSpec overlayLayoutSpecWithChild:imagePlace overlay:badgePosition]; - badgeOverImage.style.flexGrow = 1.0; - - return badgeOverImage; -} - -- (ASLayoutSpec *)soldOutLabelSpec { - ASCenterLayoutSpec *centerSoldOutLabel = [ASCenterLayoutSpec centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringXY sizingOptions:ASCenterLayoutSpecSizingOptionMinimumXY child:self.soldOutLabelFlat]; - ASCenterLayoutSpec *centerSoldOut = [ASCenterLayoutSpec centerLayoutSpecWithCenteringOptions:ASCenterLayoutSpecCenteringXY sizingOptions:ASCenterLayoutSpecSizingOptionDefault child:self.soldOutLabelBackground]; - ASBackgroundLayoutSpec *soldOutLabelOverBackground = [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild:centerSoldOutLabel background:centerSoldOut]; - return soldOutLabelOverBackground; -} - -+ (CGSize)sizeForWidth:(CGFloat)width -{ - CGFloat height = [self scaledHeightForPreferredSize:[self preferredViewSize] scaledWidth:width]; - return CGSizeMake(width, height); -} - - -+ (CGSize)preferredViewSize -{ - return CGSizeMake(kDesignWidth, kDesignHeight); -} - -+ (CGFloat)scaledHeightForPreferredSize:(CGSize)preferredSize scaledWidth:(CGFloat)scaledWidth -{ - CGFloat scale = scaledWidth / kDesignWidth; - CGFloat scaledHeight = ceilf(scale * (kDesignHeight - kFixedLabelsAreaHeight)) + kFixedLabelsAreaHeight; - - return scaledHeight; -} - -#pragma mark - Image - -- (CGFloat)imageRatioFromSize:(CGSize)size -{ - CGFloat imageHeight = size.height - kFixedLabelsAreaHeight; - CGFloat imageRatio = imageHeight / size.width; - - return imageRatio; -} - -- (CGSize)imageSize -{ - if (!CGSizeEqualToSize(self.dealImageView.frame.size, CGSizeZero)) { - return self.dealImageView.frame.size; - } else if (!CGSizeEqualToSize(self.calculatedSize, CGSizeZero)) { - CGFloat imageRatio = [self imageRatioFromSize:self.calculatedSize]; - CGFloat imageWidth = self.calculatedSize.width; - return CGSizeMake(imageWidth, imageRatio * imageWidth); - } else { - return CGSizeZero; - } -} - -- (void)loadImage -{ - CGSize imageSize = [self imageSize]; - if (CGSizeEqualToSize(CGSizeZero, imageSize)) { - return; - } - - NSURL *url = [self.nodeModel imageURLWithSize:imageSize]; - - // if we're trying to set the deal image to what it already was, skip the work - if ([[url absoluteString] isEqualToString:[self.dealImageView.URL absoluteString]]) { - return; - } - - // Clear the flag that says we've loaded our image - [self.dealImageView setURL:url]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemStyles.h b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemStyles.h deleted file mode 100644 index db4d0d08d5..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemStyles.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// ItemStyles.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface ItemStyles : NSObject -+ (NSDictionary *)titleStyle; -+ (NSDictionary *)subtitleStyle; -+ (NSDictionary *)distanceStyle; -+ (NSDictionary *)secondInfoStyle; -+ (NSDictionary *)originalPriceStyle; -+ (NSDictionary *)finalPriceStyle; -+ (NSDictionary *)soldOutStyle; -+ (NSDictionary *)badgeStyle; -+ (UIColor *)badgeColor; -+ (UIImage *)placeholderImage; -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemStyles.m b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemStyles.m deleted file mode 100644 index 1659341161..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemStyles.m +++ /dev/null @@ -1,95 +0,0 @@ -// -// ItemStyles.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ItemStyles.h" - -const CGFloat kTitleFontSize = 20.0; -const CGFloat kInfoFontSize = 14.0; - -UIColor *kTitleColor; -UIColor *kInfoColor; -UIColor *kFinalPriceColor; -UIFont *kTitleFont; -UIFont *kInfoFont; - -@implementation ItemStyles - -+ (void)initialize { - if (self == [ItemStyles class]) { - kTitleColor = [UIColor darkGrayColor]; - kInfoColor = [UIColor grayColor]; - kFinalPriceColor = [UIColor greenColor]; - kTitleFont = [UIFont boldSystemFontOfSize:kTitleFontSize]; - kInfoFont = [UIFont systemFontOfSize:kInfoFontSize]; - } -} - -+ (NSDictionary *)titleStyle { - // Title Label - return @{ NSFontAttributeName:kTitleFont, - NSForegroundColorAttributeName:kTitleColor }; -} - -+ (NSDictionary *)subtitleStyle { - // First Subtitle - return @{ NSFontAttributeName:kInfoFont, - NSForegroundColorAttributeName:kInfoColor }; -} - -+ (NSDictionary *)distanceStyle { - // Distance Label - return @{ NSFontAttributeName:kInfoFont, - NSForegroundColorAttributeName:kInfoColor}; -} - -+ (NSDictionary *)secondInfoStyle { - // Second Subtitle - return @{ NSFontAttributeName:kInfoFont, - NSForegroundColorAttributeName:kInfoColor}; -} - -+ (NSDictionary *)originalPriceStyle { - // Original price - return @{ NSFontAttributeName:kInfoFont, - NSForegroundColorAttributeName:kInfoColor, - NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle)}; -} - -+ (NSDictionary *)finalPriceStyle { - // Discounted / Claimable price label - return @{ NSFontAttributeName:kTitleFont, - NSForegroundColorAttributeName:kFinalPriceColor}; -} - -+ (NSDictionary *)soldOutStyle { - // Setup Sold Out Label - return @{ NSFontAttributeName:kTitleFont, - NSForegroundColorAttributeName:kTitleColor}; -} - -+ (NSDictionary *)badgeStyle { - // Setup Sold Out Label - return @{ NSFontAttributeName:kTitleFont, - NSForegroundColorAttributeName:[UIColor whiteColor]}; -} - -+ (UIColor *)badgeColor { - return [[UIColor purpleColor] colorWithAlphaComponent:0.4]; -} - -+ (UIImage *)placeholderImage { - static UIImage *__catFace = nil; - static dispatch_once_t onceToken; - dispatch_once (&onceToken, ^{ - __catFace = [UIImage imageNamed:@"cat_face"]; - }); - return __catFace; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemViewModel.h b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemViewModel.h deleted file mode 100644 index 489a10515b..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemViewModel.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// ItemViewModel.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface ItemViewModel : NSObject - -+ (ItemViewModel *)randomItem; - -@property (nonatomic, readonly) NSInteger identifier; -@property (nonatomic, copy) NSString *titleText; -@property (nonatomic, copy) NSString *firstInfoText; -@property (nonatomic, copy) NSString *secondInfoText; -@property (nonatomic, copy) NSString *originalPriceText; -@property (nonatomic, copy) NSString *finalPriceText; -@property (nonatomic, copy) NSString *soldOutText; -@property (nonatomic, copy) NSString *distanceLabelText; -@property (nonatomic, copy) NSString *badgeText; - -- (NSURL *)imageURLWithSize:(CGSize)size; - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemViewModel.m b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemViewModel.m deleted file mode 100644 index 8f60900c60..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ItemViewModel.m +++ /dev/null @@ -1,103 +0,0 @@ -// -// ItemViewModel.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ItemViewModel.h" -#import - -NSArray *titles; -NSArray *firstInfos; -NSArray *badges; - -@interface ItemViewModel() - -@property (nonatomic, assign) NSInteger catNumber; -@property (nonatomic, assign) NSInteger labelNumber; - -@end - -@implementation ItemViewModel - -+ (ItemViewModel *)randomItem { - return [[ItemViewModel alloc] init]; -} - -- (instancetype)init -{ - self = [super init]; - if (self) { - static _Atomic(NSInteger) nextID = ATOMIC_VAR_INIT(1); - _identifier = atomic_fetch_add(&nextID, 1); - _titleText = [self randomObjectFromArray:titles]; - _firstInfoText = [self randomObjectFromArray:firstInfos]; - _secondInfoText = [NSString stringWithFormat:@"%zd+ bought", [self randomNumberInRange:5 to:6000]]; - _originalPriceText = [NSString stringWithFormat:@"$%zd", [self randomNumberInRange:40 to:90]]; - _finalPriceText = [NSString stringWithFormat:@"$%zd", [self randomNumberInRange:5 to:30]]; - _soldOutText = (arc4random() % 5 == 0) ? @"SOLD OUT" : nil; - _distanceLabelText = [NSString stringWithFormat:@"%zd mi", [self randomNumberInRange:1 to:20]]; - if (arc4random() % 2 == 0) { - _badgeText = [self randomObjectFromArray:badges]; - } - _catNumber = [self randomNumberInRange:1 to:10]; - _labelNumber = [self randomNumberInRange:1 to:10000]; - } - return self; -} - -- (NSURL *)imageURLWithSize:(CGSize)size -{ - NSString *imageText = [NSString stringWithFormat:@"Fun cat pic %zd", self.labelNumber]; - NSString *urlString = [NSString stringWithFormat:@"http://lorempixel.com/%zd/%zd/cats/%zd/%@", - (NSInteger)roundl(size.width), - (NSInteger)roundl(size.height), self.catNumber, imageText]; - - urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]]; - return [NSURL URLWithString:urlString]; -} - -// titles courtesy of http://www.catipsum.com/ -+ (void)initialize -{ - titles = @[@"Leave fur on owners clothes intrigued by the shower", - @"Meowwww", - @"Immediately regret falling into bathtub stare out the window", - @"Jump launch to pounce upon little yarn mouse, bare fangs at toy run hide in litter box until treats are fed", - @"Sleep nap", - @"Lick butt", - @"Chase laser lick arm hair present belly, scratch hand when stroked"]; - firstInfos = @[@"Kitty Shop", - @"Cat's r us", - @"Fantastic Felines", - @"The Cat Shop", - @"Cat in a hat", - @"Cat-tastic" - ]; - - badges = @[@"ADORABLE", - @"BOUNCES", - @"HATES CUCUMBERS", - @"SCRATCHY" - ]; -} - - -- (id)randomObjectFromArray:(NSArray *)strings -{ - u_int32_t ipsumCount = (u_int32_t)[strings count]; - u_int32_t location = arc4random_uniform(ipsumCount); - - return strings[location]; -} - -- (uint32_t)randomNumberInRange:(uint32_t)start to:(uint32_t)end { - - return start + arc4random_uniform(end - start); -} - - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Launchboard.storyboard b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Launchboard.storyboard deleted file mode 100644 index 673e0f7e68..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Launchboard.storyboard +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/LoadingNode.h b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/LoadingNode.h deleted file mode 100644 index 996a6798cf..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/LoadingNode.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// LoadingNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface LoadingNode : ASCellNode - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/LoadingNode.m b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/LoadingNode.m deleted file mode 100644 index 18681c011c..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/LoadingNode.m +++ /dev/null @@ -1,47 +0,0 @@ -// -// LoadingNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "LoadingNode.h" - -#import - -@implementation LoadingNode { - ASDisplayNode *_loadingSpinner; -} - -#pragma mark - ASCellNode - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - _loadingSpinner = [[ASDisplayNode alloc] initWithViewBlock:^UIView * _Nonnull{ - UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; - [spinner startAnimating]; - return spinner; - }]; - _loadingSpinner.style.preferredSize = CGSizeMake(50, 50); - - // add it as a subnode, and we're done - [self addSubnode:_loadingSpinner]; - - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASCenterLayoutSpec *centerSpec = [[ASCenterLayoutSpec alloc] init]; - centerSpec.centeringOptions = ASCenterLayoutSpecCenteringXY; - centerSpec.sizingOptions = ASCenterLayoutSpecSizingOptionDefault; - centerSpec.child = _loadingSpinner; - return centerSpec; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/PlaceholderNetworkImageNode.h b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/PlaceholderNetworkImageNode.h deleted file mode 100644 index a18e17c9ea..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/PlaceholderNetworkImageNode.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// PlaceholderNetworkImageNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface PlaceholderNetworkImageNode : ASNetworkImageNode - -@property (nonatomic, strong) UIImage *placeholderImageOverride; - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/PlaceholderNetworkImageNode.m b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/PlaceholderNetworkImageNode.m deleted file mode 100644 index 81129392a9..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/PlaceholderNetworkImageNode.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// PlaceholderNetworkImageNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PlaceholderNetworkImageNode.h" - -@implementation PlaceholderNetworkImageNode - -- (UIImage *)placeholderImage -{ - return self.placeholderImageOverride; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/PresentingViewController.h b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/PresentingViewController.h deleted file mode 100644 index 44c07c6a76..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/PresentingViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// PresentingViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface PresentingViewController : UIViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/PresentingViewController.m b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/PresentingViewController.m deleted file mode 100644 index 216cf4dd28..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/PresentingViewController.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// PresentingViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PresentingViewController.h" -#import "ViewController.h" - -@interface PresentingViewController () - -@end - -@implementation PresentingViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Push Details" style:UIBarButtonItemStylePlain target:self action:@selector(pushNewViewController)]; -} - -- (void)pushNewViewController -{ - ViewController *controller = [[ViewController alloc] init]; - [self.navigationController pushViewController:controller animated:true]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ViewController.h deleted file mode 100644 index 560b6a2d03..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : ASViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ViewController.m deleted file mode 100644 index c1f9111ad0..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/ViewController.m +++ /dev/null @@ -1,221 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" - -#import -#import "ItemNode.h" -#import "BlurbNode.h" -#import "LoadingNode.h" - -static const NSTimeInterval kWebResponseDelay = 1.0; -static const BOOL kSimulateWebResponse = YES; -static const NSInteger kBatchSize = 20; - -static const CGFloat kHorizontalSectionPadding = 10.0f; - -@interface ViewController () -{ - ASCollectionNode *_collectionNode; - NSMutableArray *_data; -} - -@end - - -@implementation ViewController - -#pragma mark - -#pragma mark UIViewController. - -- (instancetype)init -{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - _collectionNode = [[ASCollectionNode alloc] initWithCollectionViewLayout:layout]; - - self = [super initWithNode:_collectionNode]; - - if (self) { - self.title = @"Cat Deals"; - - _collectionNode.dataSource = self; - _collectionNode.delegate = self; - _collectionNode.backgroundColor = [UIColor grayColor]; - _collectionNode.accessibilityIdentifier = @"Cat deals list"; - - ASRangeTuningParameters preloadTuning; - preloadTuning.leadingBufferScreenfuls = 2; - preloadTuning.trailingBufferScreenfuls = 1; - [_collectionNode setTuningParameters:preloadTuning forRangeType:ASLayoutRangeTypePreload]; - - ASRangeTuningParameters displayTuning; - displayTuning.leadingBufferScreenfuls = 1; - displayTuning.trailingBufferScreenfuls = 0.5; - [_collectionNode setTuningParameters:displayTuning forRangeType:ASLayoutRangeTypeDisplay]; - - [_collectionNode registerSupplementaryNodeOfKind:UICollectionElementKindSectionHeader]; - [_collectionNode registerSupplementaryNodeOfKind:UICollectionElementKindSectionFooter]; - - _data = [[NSMutableArray alloc] init]; - - self.navigationItem.leftItemsSupplementBackButton = YES; - self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(reloadTapped)]; - } - - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - // set any collectionView properties here (once the node's backing view is loaded) - _collectionNode.leadingScreensForBatching = 2; - [self fetchMoreCatsWithCompletion:nil]; -} - -- (void)fetchMoreCatsWithCompletion:(void (^)(BOOL))completion -{ - if (kSimulateWebResponse) { - __weak typeof(self) weakSelf = self; - void(^mockWebService)() = ^{ - NSLog(@"ViewController \"got data from a web service\""); - ViewController *strongSelf = weakSelf; - if (strongSelf != nil) - { - [strongSelf appendMoreItems:kBatchSize completion:completion]; - } - else { - NSLog(@"ViewController is nil - won't update collection"); - } - }; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(kWebResponseDelay * NSEC_PER_SEC)), dispatch_get_main_queue(), mockWebService); - } else { - [self appendMoreItems:kBatchSize completion:completion]; - } -} - -- (void)appendMoreItems:(NSInteger)numberOfNewItems completion:(void (^)(BOOL))completion -{ - NSArray *newData = [self getMoreData:numberOfNewItems]; - [_collectionNode performBatchAnimated:YES updates:^{ - [_data addObjectsFromArray:newData]; - NSArray *addedIndexPaths = [self indexPathsForObjects:newData]; - [_collectionNode insertItemsAtIndexPaths:addedIndexPaths]; - } completion:completion]; -} - -- (NSArray *)getMoreData:(NSInteger)count -{ - NSMutableArray *data = [NSMutableArray array]; - for (int i = 0; i < count; i++) { - [data addObject:[ItemViewModel randomItem]]; - } - return data; -} - -- (NSArray *)indexPathsForObjects:(NSArray *)data -{ - NSMutableArray *indexPaths = [NSMutableArray array]; - NSInteger section = 0; - for (ItemViewModel *viewModel in data) { - NSInteger item = [_data indexOfObject:viewModel]; - NSAssert(item < [_data count] && item != NSNotFound, @"Item should be in _data"); - [indexPaths addObject:[NSIndexPath indexPathForItem:item inSection:section]]; - } - return indexPaths; -} - -- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator -{ - [_collectionNode.view.collectionViewLayout invalidateLayout]; -} - -- (void)reloadTapped -{ - [_collectionNode reloadData]; -} - -#pragma mark - ASCollectionNodeDelegate / ASCollectionNodeDataSource - -- (ASCellNodeBlock)collectionNode:(ASCollectionNode *)collectionNode nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath -{ - return ^{ - return [[ItemNode alloc] init]; - }; -} - -- (id)collectionNode:(ASCollectionNode *)collectionNode nodeModelForItemAtIndexPath:(NSIndexPath *)indexPath -{ - return _data[indexPath.item]; -} - -- (ASCellNode *)collectionNode:(ASCollectionNode *)collectionNode nodeForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath -{ - if ([kind isEqualToString:UICollectionElementKindSectionHeader] && indexPath.section == 0) { - return [[BlurbNode alloc] init]; - } else if ([kind isEqualToString:UICollectionElementKindSectionFooter] && indexPath.section == 0) { - return [[LoadingNode alloc] init]; - } - return nil; -} - -- (ASSizeRange)collectionNode:(ASCollectionNode *)collectionNode constrainedSizeForItemAtIndexPath:(NSIndexPath *)indexPath -{ - CGFloat collectionViewWidth = CGRectGetWidth(self.view.frame) - 2 * kHorizontalSectionPadding; - CGFloat oneItemWidth = [ItemNode preferredViewSize].width; - NSInteger numColumns = floor(collectionViewWidth / oneItemWidth); - // Number of columns should be at least 1 - numColumns = MAX(1, numColumns); - - CGFloat totalSpaceBetweenColumns = (numColumns - 1) * kHorizontalSectionPadding; - CGFloat itemWidth = ((collectionViewWidth - totalSpaceBetweenColumns) / numColumns); - CGSize itemSize = [ItemNode sizeForWidth:itemWidth]; - return ASSizeRangeMake(itemSize, itemSize); -} - -- (NSInteger)collectionNode:(ASCollectionNode *)collectionNode numberOfItemsInSection:(NSInteger)section -{ - return [_data count]; -} - -- (NSInteger)numberOfSectionsInCollectionNode:(ASCollectionNode *)collectionNode -{ - return 1; -} - -- (void)collectionNode:(ASCollectionNode *)collectionNode willBeginBatchFetchWithContext:(ASBatchContext *)context -{ - [self fetchMoreCatsWithCompletion:^(BOOL finished){ - [context completeBatchFetching:YES]; - }]; -} - -#pragma mark - ASCollectionDelegateFlowLayout - -- (ASSizeRange)collectionNode:(ASCollectionNode *)collectionNode sizeRangeForHeaderInSection:(NSInteger)section -{ - if (section == 0) { - return ASSizeRangeUnconstrained; - } else { - return ASSizeRangeZero; - } -} - -- (ASSizeRange)collectionNode:(ASCollectionNode *)collectionNode sizeRangeForFooterInSection:(NSInteger)section -{ - if (section == 0) { - return ASSizeRangeUnconstrained; - } else { - return ASSizeRangeZero; - } -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/main.m b/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/main.m deleted file mode 100644 index 65850400e4..0000000000 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Podfile b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Podfile deleted file mode 100644 index 92a9acc9c8..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Podfile +++ /dev/null @@ -1,8 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' - -use_frameworks! - -target 'Sample' do - pod 'Texture', :path => '../..' -end \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/AppDelegate.swift b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/AppDelegate.swift deleted file mode 100644 index 5556f8c77e..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/AppDelegate.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// AppDelegate.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. - let window = UIWindow(frame: UIScreen.main.bounds) - window.backgroundColor = .white - window.rootViewController = ViewController() - window.makeKeyAndVisible() - - self.window = window - - return true - } - - func applicationWillResignActive(_ application: UIApplication) { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. - } - - func applicationDidEnterBackground(_ application: UIApplication) { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. - } - - func applicationWillEnterForeground(_ application: UIApplication) { - // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. - } - - func applicationDidBecomeActive(_ application: UIApplication) { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. - } - - func applicationWillTerminate(_ application: UIApplication) { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. - } - - -} - diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index b8236c6534..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/Contents.json deleted file mode 100644 index da4a164c91..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_0.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_0.imageset/Contents.json deleted file mode 100644 index 09ec0851ee..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_0.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image_0.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_0.imageset/image_0.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_0.imageset/image_0.jpg deleted file mode 100644 index 4a365897ea..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_0.imageset/image_0.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_1.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_1.imageset/Contents.json deleted file mode 100644 index 6d2e9f5f7c..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_1.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image_1.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_1.imageset/image_1.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_1.imageset/image_1.jpg deleted file mode 100644 index 5cb4828f44..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_1.imageset/image_1.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_10.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_10.imageset/Contents.json deleted file mode 100644 index ea10700189..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_10.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image_10.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_10.imageset/image_10.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_10.imageset/image_10.jpg deleted file mode 100644 index ea5cd6d268..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_10.imageset/image_10.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_11.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_11.imageset/Contents.json deleted file mode 100644 index dc85469057..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_11.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image_11.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_11.imageset/image_11.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_11.imageset/image_11.jpg deleted file mode 100644 index e93c68e512..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_11.imageset/image_11.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_12.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_12.imageset/Contents.json deleted file mode 100644 index a6d99003d1..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_12.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image_12.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_12.imageset/image_12.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_12.imageset/image_12.jpg deleted file mode 100644 index d520b6d80f..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_12.imageset/image_12.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_13.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_13.imageset/Contents.json deleted file mode 100644 index 4eb6baad3b..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_13.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image_13.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_13.imageset/image_13.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_13.imageset/image_13.jpg deleted file mode 100644 index c0232370cd..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_13.imageset/image_13.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_2.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_2.imageset/Contents.json deleted file mode 100644 index b2536e53de..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_2.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image_2.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_2.imageset/image_2.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_2.imageset/image_2.jpg deleted file mode 100644 index 175343454d..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_2.imageset/image_2.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_3.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_3.imageset/Contents.json deleted file mode 100644 index 512e735090..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_3.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image_3.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_3.imageset/image_3.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_3.imageset/image_3.jpg deleted file mode 100644 index f5398cac79..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_3.imageset/image_3.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_4.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_4.imageset/Contents.json deleted file mode 100644 index 88b2b7b98a..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_4.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image_4.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_4.imageset/image_4.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_4.imageset/image_4.jpg deleted file mode 100644 index 2a6fe4c264..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_4.imageset/image_4.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_5.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_5.imageset/Contents.json deleted file mode 100644 index 1f24c086d9..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_5.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image_5.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_5.imageset/image_5.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_5.imageset/image_5.jpg deleted file mode 100644 index 4e507b8064..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_5.imageset/image_5.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_6.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_6.imageset/Contents.json deleted file mode 100644 index 25f33f2acd..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_6.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image_6.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_6.imageset/image_6.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_6.imageset/image_6.jpg deleted file mode 100644 index 35fe778b3a..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_6.imageset/image_6.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_7.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_7.imageset/Contents.json deleted file mode 100644 index 5fdd6ba2cf..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_7.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image_7.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_7.imageset/image_7.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_7.imageset/image_7.jpg deleted file mode 100644 index 8f5e037722..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_7.imageset/image_7.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_8.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_8.imageset/Contents.json deleted file mode 100644 index 563d5ba824..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_8.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image_8.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_8.imageset/image_8.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_8.imageset/image_8.jpg deleted file mode 100644 index 5651436bb6..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_8.imageset/image_8.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_9.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_9.imageset/Contents.json deleted file mode 100644 index 66c1b859b1..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_9.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "image_9.jpg", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_9.imageset/image_9.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_9.imageset/image_9.jpg deleted file mode 100644 index 9fb6e47d3f..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Assets.xcassets/image_9.imageset/image_9.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Base.lproj/LaunchScreen.storyboard b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index fdf3f97d1b..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/ImageCellNode.swift b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/ImageCellNode.swift deleted file mode 100644 index 70c1692679..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/ImageCellNode.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// ImageCellNode.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit -import AsyncDisplayKit - -class ImageCellNode: ASCellNode { - let imageNode = ASImageNode() - required init(with image : UIImage) { - super.init() - imageNode.image = image - self.addSubnode(self.imageNode) - } - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - var imageRatio: CGFloat = 0.5 - if imageNode.image != nil { - imageRatio = (imageNode.image?.size.height)! / (imageNode.image?.size.width)! - } - - let imagePlace = ASRatioLayoutSpec(ratio: imageRatio, child: imageNode) - - let stackLayout = ASStackLayoutSpec.horizontal() - stackLayout.justifyContent = .start - stackLayout.alignItems = .start - stackLayout.style.flexShrink = 1.0 - stackLayout.children = [imagePlace] - - return ASInsetLayoutSpec(insets: UIEdgeInsets.zero, child: stackLayout) - } - -} diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Info.plist deleted file mode 100755 index b8901eef4f..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/MosaicCollectionViewLayout.swift b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/MosaicCollectionViewLayout.swift deleted file mode 100644 index 976481c8d2..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/MosaicCollectionViewLayout.swift +++ /dev/null @@ -1,246 +0,0 @@ -// -// MosaicCollectionViewLayout.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import Foundation -import UIKit -import AsyncDisplayKit - -protocol MosaicCollectionViewLayoutDelegate: ASCollectionDelegate { - func collectionView(_ collectionView: UICollectionView, layout: MosaicCollectionViewLayout, originalItemSizeAtIndexPath: IndexPath) -> CGSize -} - -class MosaicCollectionViewLayout: UICollectionViewFlowLayout { - var numberOfColumns: Int - var columnSpacing: CGFloat - var _sectionInset: UIEdgeInsets - var interItemSpacing: UIEdgeInsets - var headerHeight: CGFloat - var _columnHeights: [[CGFloat]]? - var _itemAttributes = [[UICollectionViewLayoutAttributes]]() - var _headerAttributes = [UICollectionViewLayoutAttributes]() - var _allAttributes = [UICollectionViewLayoutAttributes]() - - required override init() { - self.numberOfColumns = 2 - self.columnSpacing = 10.0 - self.headerHeight = 44.0 //viewcontroller - self._sectionInset = UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0) - self.interItemSpacing = UIEdgeInsetsMake(10.0, 0, 10.0, 0) - super.init() - self.scrollDirection = .vertical - } - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - public var delegate : MosaicCollectionViewLayoutDelegate? - - override func prepare() { - super.prepare() - guard let collectionView = self.collectionView else { return } - - _itemAttributes = [] - _allAttributes = [] - _headerAttributes = [] - _columnHeights = [] - - var top: CGFloat = 0 - - let numberOfSections: NSInteger = collectionView.numberOfSections - - for section in 0 ..< numberOfSections { - let numberOfItems = collectionView.numberOfItems(inSection: section) - - top += _sectionInset.top - - if (headerHeight > 0) { - let headerSize: CGSize = self._headerSizeForSection(section: section) - - let attributes = UICollectionViewLayoutAttributes(forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, with: NSIndexPath(row: 0, section: section) as IndexPath) - - attributes.frame = CGRect(x: _sectionInset.left, y: top, width: headerSize.width, height: headerSize.height) - _headerAttributes.append(attributes) - _allAttributes.append(attributes) - top = attributes.frame.maxY - } - - _columnHeights?.append([]) //Adding new Section - for _ in 0 ..< self.numberOfColumns { - self._columnHeights?[section].append(top) - } - - let columnWidth = self._columnWidthForSection(section: section) - _itemAttributes.append([]) - for idx in 0 ..< numberOfItems { - let columnIndex: Int = self._shortestColumnIndexInSection(section: section) - let indexPath = IndexPath(item: idx, section: section) - - let itemSize = self._itemSizeAtIndexPath(indexPath: indexPath); - let xOffset = _sectionInset.left + (columnWidth + columnSpacing) * CGFloat(columnIndex) - let yOffset = _columnHeights![section][columnIndex] - - let attributes = UICollectionViewLayoutAttributes(forCellWith: indexPath) - - attributes.frame = CGRect(x: xOffset, y: yOffset, width: itemSize.width, height: itemSize.height) - - _columnHeights?[section][columnIndex] = attributes.frame.maxY + interItemSpacing.bottom - - _itemAttributes[section].append(attributes) - _allAttributes.append(attributes) - } - - let columnIndex: Int = self._tallestColumnIndexInSection(section: section) - top = (_columnHeights?[section][columnIndex])! - interItemSpacing.bottom + _sectionInset.bottom - - for idx in 0 ..< _columnHeights![section].count { - _columnHeights![section][idx] = top - } - } - } - - override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? - { - var includedAttributes: [UICollectionViewLayoutAttributes] = [] - // Slow search for small batches - for attribute in _allAttributes { - if (attribute.frame.intersects(rect)) { - includedAttributes.append(attribute) - } - } - return includedAttributes - } - - override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? - { - guard indexPath.section < _itemAttributes.count, - indexPath.item < _itemAttributes[indexPath.section].count - else { - return nil - } - return _itemAttributes[indexPath.section][indexPath.item] - } - - override func layoutAttributesForSupplementaryView(ofKind elementKind: String, at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? - { - if (elementKind == UICollectionElementKindSectionHeader) { - return _headerAttributes[indexPath.section] - } - return nil - } - - override func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool { - if (!(self.collectionView?.bounds.size.equalTo(newBounds.size))!) { - return true; - } - return false; - } - - func _widthForSection (section: Int) -> CGFloat - { - return self.collectionView!.bounds.size.width - _sectionInset.left - _sectionInset.right; - } - - func _columnWidthForSection(section: Int) -> CGFloat - { - return (self._widthForSection(section: section) - ((CGFloat(numberOfColumns - 1)) * columnSpacing)) / CGFloat(numberOfColumns) - } - - func _itemSizeAtIndexPath(indexPath: IndexPath) -> CGSize - { - var size = CGSize(width: self._columnWidthForSection(section: indexPath.section), height: 0) - let originalSize = self.delegate!.collectionView(self.collectionView!, layout:self, originalItemSizeAtIndexPath:indexPath) - if (originalSize.height > 0 && originalSize.width > 0) { - size.height = originalSize.height / originalSize.width * size.width - } - return size - } - - func _headerSizeForSection(section: Int) -> CGSize - { - return CGSize(width: self._widthForSection(section: section), height: headerHeight) - } - - override var collectionViewContentSize: CGSize - { - var height: CGFloat = 0 - if ((_columnHeights?.count)! > 0) { - if (_columnHeights?[(_columnHeights?.count)!-1].count)! > 0 { - height = (_columnHeights?[(_columnHeights?.count)!-1][0])! - } - } - return CGSize(width: self.collectionView!.bounds.size.width, height: height) - } - - func _tallestColumnIndexInSection(section: Int) -> Int - { - var index: Int = 0; - var tallestHeight: CGFloat = 0; - _ = _columnHeights?[section].enumerated().map { (idx,height) in - if (height > tallestHeight) { - index = idx; - tallestHeight = height - } - } - return index - } - - func _shortestColumnIndexInSection(section: Int) -> Int - { - var index: Int = 0; - var shortestHeight: CGFloat = CGFloat.greatestFiniteMagnitude - _ = _columnHeights?[section].enumerated().map { (idx,height) in - if (height < shortestHeight) { - index = idx; - shortestHeight = height - } - } - return index - } - -} - -class MosaicCollectionViewLayoutInspector: NSObject, ASCollectionViewLayoutInspecting -{ - func collectionView(_ collectionView: ASCollectionView, constrainedSizeForNodeAt indexPath: IndexPath) -> ASSizeRange { - let layout = collectionView.collectionViewLayout as! MosaicCollectionViewLayout - return ASSizeRangeMake(CGSize.zero, layout._itemSizeAtIndexPath(indexPath: indexPath)) - } - - func collectionView(_ collectionView: ASCollectionView, constrainedSizeForSupplementaryNodeOfKind: String, at atIndexPath: IndexPath) -> ASSizeRange - { - let layout = collectionView.collectionViewLayout as! MosaicCollectionViewLayout - return ASSizeRange.init(min: CGSize.zero, max: layout._headerSizeForSection(section: atIndexPath.section)) - } - - /** - * Asks the inspector for the number of supplementary sections in the collection view for the given kind. - */ - func collectionView(_ collectionView: ASCollectionView, numberOfSectionsForSupplementaryNodeOfKind kind: String) -> UInt { - if (kind == UICollectionElementKindSectionHeader) { - return UInt((collectionView.dataSource?.numberOfSections!(in: collectionView))!) - } else { - return 0 - } - } - - /** - * Asks the inspector for the number of supplementary views for the given kind in the specified section. - */ - func collectionView(_ collectionView: ASCollectionView, supplementaryNodesOfKind kind: String, inSection section: UInt) -> UInt { - if (kind == UICollectionElementKindSectionHeader) { - return 1 - } else { - return 0 - } - } - - func scrollableDirections() -> ASScrollDirection { - return ASScrollDirectionVerticalDirections; - } -} diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/ViewController.swift b/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/ViewController.swift deleted file mode 100644 index 24345cdcef..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView-Swift/Sample/ViewController.swift +++ /dev/null @@ -1,85 +0,0 @@ -// -// ViewController.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit -import AsyncDisplayKit - -class ViewController: ASViewController, MosaicCollectionViewLayoutDelegate, ASCollectionDataSource, ASCollectionDelegate { - - var _sections = [[UIImage]]() - let _collectionNode: ASCollectionNode - let _layoutInspector = MosaicCollectionViewLayoutInspector() - let kNumberOfImages: UInt = 14 - - init() { - let layout = MosaicCollectionViewLayout() - layout.numberOfColumns = 3; - layout.headerHeight = 44; - _collectionNode = ASCollectionNode(frame: CGRect.zero, collectionViewLayout: layout) - super.init(node: _collectionNode) - layout.delegate = self - - _sections.append([]); - var section = 0 - for idx in 0 ..< kNumberOfImages { - let name = String(format: "image_%d.jpg", idx) - _sections[section].append(UIImage(named: name)!) - if ((idx + 1) % 5 == 0 && idx < kNumberOfImages - 1) { - section += 1 - _sections.append([]) - } - } - - _collectionNode.backgroundColor = UIColor.white - _collectionNode.dataSource = self - _collectionNode.delegate = self - _collectionNode.layoutInspector = _layoutInspector - _collectionNode.registerSupplementaryNode(ofKind: UICollectionElementKindSectionHeader) - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func viewDidLoad() { - super.viewDidLoad() - _collectionNode.view.isScrollEnabled = true - } - - func collectionNode(_ collectionNode: ASCollectionNode, nodeForItemAt indexPath: IndexPath) -> ASCellNode { - let image = _sections[indexPath.section][indexPath.item] - return ImageCellNode(with: image) - } - - - func collectionNode(_ collectionNode: ASCollectionNode, nodeForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> ASCellNode { - let textAttributes : NSDictionary = [ - NSFontAttributeName: UIFont.preferredFont(forTextStyle: UIFontTextStyle.headline), - NSForegroundColorAttributeName: UIColor.gray - ] - let textInsets = UIEdgeInsets(top: 11, left: 0, bottom: 11, right: 0) - let textCellNode = ASTextCellNode(attributes: textAttributes as! [AnyHashable : Any], insets: textInsets) - textCellNode.text = String(format: "Section %zd", indexPath.section + 1) - return textCellNode - } - - - func numberOfSections(in collectionNode: ASCollectionNode) -> Int { - return _sections.count - } - - func collectionNode(_ collectionNode: ASCollectionNode, numberOfItemsInSection section: Int) -> Int { - return _sections[section].count - } - - internal func collectionView(_ collectionView: UICollectionView, layout: MosaicCollectionViewLayout, originalItemSizeAtIndexPath: IndexPath) -> CGSize { - return _sections[originalItemSizeAtIndexPath.section][originalItemSizeAtIndexPath.item].size - } -} - diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Podfile b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/AppDelegate.h deleted file mode 100644 index 19db03c153..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/AppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/AppDelegate.m deleted file mode 100644 index 867dafbc92..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/AppDelegate.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[ViewController alloc] init]; - - [self.window makeKeyAndVisible]; - - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ImageCellNode.h b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ImageCellNode.h deleted file mode 100644 index 787ee041ca..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ImageCellNode.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// ImageCellNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ImageCellNode : ASCellNode - -- (instancetype)initWithImage:(UIImage *)image; -@property (nonatomic, strong) UIImage *image; - -@end diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ImageCellNode.m b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ImageCellNode.m deleted file mode 100644 index 9e3e4a72ff..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ImageCellNode.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// ImageCellNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ImageCellNode.h" - -@implementation ImageCellNode { - ASImageNode *_imageNode; -} - -- (id)initWithImage:(UIImage *)image -{ - self = [super init]; - if (self != nil) { - _imageNode = [[ASImageNode alloc] init]; - _imageNode.image = image; - [self addSubnode:_imageNode]; - } - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - CGSize imageSize = self.image.size; - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsZero - child:[ASRatioLayoutSpec ratioLayoutSpecWithRatio:imageSize.height/imageSize.width - child:_imageNode]]; -} - -- (void)setImage:(UIImage *)image -{ - _imageNode.image = image; -} - -- (UIImage *)image -{ - return _imageNode.image; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ImageCollectionViewCell.h b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ImageCollectionViewCell.h deleted file mode 100644 index 8359fb72a0..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ImageCollectionViewCell.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// ImageCollectionViewCell.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ImageCollectionViewCell : UICollectionViewCell - -@end diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ImageCollectionViewCell.m b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ImageCollectionViewCell.m deleted file mode 100644 index c04c865039..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ImageCollectionViewCell.m +++ /dev/null @@ -1,46 +0,0 @@ -// -// ImageCollectionViewCell.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ImageCollectionViewCell.h" - -@implementation ImageCollectionViewCell -{ - UILabel *_title; - UILabel *_description; -} - -- (id)initWithFrame:(CGRect)aRect -{ - self = [super initWithFrame:aRect]; - if (self) { - _title = [[UILabel alloc] init]; - _title.text = @"UICollectionViewCell"; - [self.contentView addSubview:_title]; - - _description = [[UILabel alloc] init]; - _description.text = @"description for cell"; - [self.contentView addSubview:_description]; - - self.contentView.backgroundColor = [UIColor orangeColor]; - } - return self; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - [_title sizeToFit]; - [_description sizeToFit]; - - CGRect frame = _title.frame; - frame.origin.y = _title.frame.size.height; - _description.frame = frame; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index f0fce54771..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default-568h@2x.png", - "minimum-system-version" : "7.0", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "scale" : "1x", - "orientation" : "portrait" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "orientation" : "portrait" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default-568h@2x.png", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "minimum-system-version" : "7.0", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png deleted file mode 100644 index 1547a98454..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_0.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_0.imageset/Contents.json deleted file mode 100644 index 4eaff61cc1..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_0.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_0.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_0.imageset/image_0.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_0.imageset/image_0.jpg deleted file mode 100644 index 4a365897ea..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_0.imageset/image_0.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_1.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_1.imageset/Contents.json deleted file mode 100644 index 80c90eca3e..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_1.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_1.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_1.imageset/image_1.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_1.imageset/image_1.jpg deleted file mode 100644 index 5cb4828f44..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_1.imageset/image_1.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_10.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_10.imageset/Contents.json deleted file mode 100644 index d61e934e39..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_10.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_10.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_10.imageset/image_10.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_10.imageset/image_10.jpg deleted file mode 100644 index ea5cd6d268..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_10.imageset/image_10.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_11.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_11.imageset/Contents.json deleted file mode 100644 index 94921077f9..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_11.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_11.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_11.imageset/image_11.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_11.imageset/image_11.jpg deleted file mode 100644 index e93c68e512..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_11.imageset/image_11.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_12.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_12.imageset/Contents.json deleted file mode 100644 index 61488a9fdc..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_12.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_12.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_12.imageset/image_12.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_12.imageset/image_12.jpg deleted file mode 100644 index d520b6d80f..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_12.imageset/image_12.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_13.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_13.imageset/Contents.json deleted file mode 100644 index 7f83f8a390..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_13.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_13.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_13.imageset/image_13.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_13.imageset/image_13.jpg deleted file mode 100644 index c0232370cd..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_13.imageset/image_13.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_2.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_2.imageset/Contents.json deleted file mode 100644 index 774cde7833..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_2.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_2.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_2.imageset/image_2.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_2.imageset/image_2.jpg deleted file mode 100644 index 175343454d..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_2.imageset/image_2.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_3.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_3.imageset/Contents.json deleted file mode 100644 index c0abe414cd..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_3.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_3.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_3.imageset/image_3.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_3.imageset/image_3.jpg deleted file mode 100644 index f5398cac79..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_3.imageset/image_3.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_4.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_4.imageset/Contents.json deleted file mode 100644 index 55a498a8a0..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_4.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_4.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_4.imageset/image_4.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_4.imageset/image_4.jpg deleted file mode 100644 index 2a6fe4c264..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_4.imageset/image_4.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_5.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_5.imageset/Contents.json deleted file mode 100644 index 9a1181e83b..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_5.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_5.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_5.imageset/image_5.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_5.imageset/image_5.jpg deleted file mode 100644 index 4e507b8064..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_5.imageset/image_5.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_6.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_6.imageset/Contents.json deleted file mode 100644 index 6aef7d6047..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_6.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_6.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_6.imageset/image_6.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_6.imageset/image_6.jpg deleted file mode 100644 index 35fe778b3a..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_6.imageset/image_6.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_7.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_7.imageset/Contents.json deleted file mode 100644 index acdb0e87f0..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_7.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_7.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_7.imageset/image_7.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_7.imageset/image_7.jpg deleted file mode 100644 index 8f5e037722..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_7.imageset/image_7.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_8.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_8.imageset/Contents.json deleted file mode 100644 index 40d616ed40..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_8.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_8.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_8.imageset/image_8.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_8.imageset/image_8.jpg deleted file mode 100644 index 5651436bb6..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_8.imageset/image_8.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_9.imageset/Contents.json b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_9.imageset/Contents.json deleted file mode 100644 index b3b3c74e12..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_9.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_9.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_9.imageset/image_9.jpg b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_9.imageset/image_9.jpg deleted file mode 100644 index 9fb6e47d3f..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Images.xcassets/image_9.imageset/image_9.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Info.plist deleted file mode 100644 index eeb71a8d35..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Info.plist +++ /dev/null @@ -1,49 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIcons - - CFBundleIcons~ipad - - CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - Launchboard - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Launchboard.storyboard b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Launchboard.storyboard deleted file mode 100644 index 673e0f7e68..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/Launchboard.storyboard +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/MosaicCollectionLayoutDelegate.h b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/MosaicCollectionLayoutDelegate.h deleted file mode 100644 index b6651953d1..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/MosaicCollectionLayoutDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MosaicCollectionLayoutDelegate.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface MosaicCollectionLayoutDelegate : NSObject - -- (instancetype)initWithNumberOfColumns:(NSInteger)numberOfColumns headerHeight:(CGFloat)headerHeight; - -@end diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/MosaicCollectionLayoutDelegate.m b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/MosaicCollectionLayoutDelegate.m deleted file mode 100644 index 1715e1c374..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/MosaicCollectionLayoutDelegate.m +++ /dev/null @@ -1,167 +0,0 @@ -// -// MosaicCollectionLayoutDelegate.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "MosaicCollectionLayoutDelegate.h" -#import "MosaicCollectionLayoutInfo.h" -#import "ImageCellNode.h" - -#import - -@implementation MosaicCollectionLayoutDelegate { - // Read-only properties - MosaicCollectionLayoutInfo *_info; -} - -- (instancetype)initWithNumberOfColumns:(NSInteger)numberOfColumns headerHeight:(CGFloat)headerHeight -{ - self = [super init]; - if (self != nil) { - _info = [[MosaicCollectionLayoutInfo alloc] initWithNumberOfColumns:numberOfColumns - headerHeight:headerHeight - columnSpacing:10.0 - sectionInsets:UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0) - interItemSpacing:UIEdgeInsetsMake(10.0, 0, 10.0, 0)]; - } - return self; -} - -- (ASScrollDirection)scrollableDirections -{ - ASDisplayNodeAssertMainThread(); - return ASScrollDirectionVerticalDirections; -} - -- (id)additionalInfoForLayoutWithElements:(ASElementMap *)elements -{ - ASDisplayNodeAssertMainThread(); - return _info; -} - -+ (ASCollectionLayoutState *)calculateLayoutWithContext:(ASCollectionLayoutContext *)context -{ - CGFloat layoutWidth = context.viewportSize.width; - ASElementMap *elements = context.elements; - CGFloat top = 0; - MosaicCollectionLayoutInfo *info = (MosaicCollectionLayoutInfo *)context.additionalInfo; - - NSMapTable *attrsMap = [NSMapTable elementToLayoutAttributesTable]; - NSMutableArray *columnHeights = [NSMutableArray array]; - - NSInteger numberOfSections = [elements numberOfSections]; - for (NSUInteger section = 0; section < numberOfSections; section++) { - NSInteger numberOfItems = [elements numberOfItemsInSection:section]; - - top += info.sectionInsets.top; - - if (info.headerHeight > 0) { - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:0 inSection:section]; - ASCollectionElement *element = [elements supplementaryElementOfKind:UICollectionElementKindSectionHeader - atIndexPath:indexPath]; - UICollectionViewLayoutAttributes *attrs = [UICollectionViewLayoutAttributes layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader - withIndexPath:indexPath]; - - ASSizeRange sizeRange = [self _sizeRangeForHeaderOfSection:section withLayoutWidth:layoutWidth info:info]; - CGSize size = [element.node layoutThatFits:sizeRange].size; - CGRect frame = CGRectMake(info.sectionInsets.left, top, size.width, size.height); - - attrs.frame = frame; - [attrsMap setObject:attrs forKey:element]; - top = CGRectGetMaxY(frame); - } - - [columnHeights addObject:[NSMutableArray array]]; - for (NSUInteger idx = 0; idx < info.numberOfColumns; idx++) { - [columnHeights[section] addObject:@(top)]; - } - - CGFloat columnWidth = [self _columnWidthForSection:section withLayoutWidth:layoutWidth info:info]; - for (NSUInteger idx = 0; idx < numberOfItems; idx++) { - NSUInteger columnIndex = [self _shortestColumnIndexInSection:section withColumnHeights:columnHeights]; - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:idx inSection:section]; - ASCollectionElement *element = [elements elementForItemAtIndexPath:indexPath]; - UICollectionViewLayoutAttributes *attrs = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath]; - - ASSizeRange sizeRange = [self _sizeRangeForItem:element.node atIndexPath:indexPath withLayoutWidth:layoutWidth info:info]; - CGSize size = [element.node layoutThatFits:sizeRange].size; - CGPoint position = CGPointMake(info.sectionInsets.left + (columnWidth + info.columnSpacing) * columnIndex, - [columnHeights[section][columnIndex] floatValue]); - CGRect frame = CGRectMake(position.x, position.y, size.width, size.height); - - attrs.frame = frame; - [attrsMap setObject:attrs forKey:element]; - // TODO Profile and avoid boxing if there are significant retain/release overheads - columnHeights[section][columnIndex] = @(CGRectGetMaxY(frame) + info.interItemSpacing.bottom); - } - - NSUInteger columnIndex = [self _tallestColumnIndexInSection:section withColumnHeights:columnHeights]; - top = [columnHeights[section][columnIndex] floatValue] - info.interItemSpacing.bottom + info.sectionInsets.bottom; - - for (NSUInteger idx = 0; idx < [columnHeights[section] count]; idx++) { - columnHeights[section][idx] = @(top); - } - } - - CGFloat contentHeight = [[[columnHeights lastObject] firstObject] floatValue]; - CGSize contentSize = CGSizeMake(layoutWidth, contentHeight); - return [[ASCollectionLayoutState alloc] initWithContext:context - contentSize:contentSize - elementToLayoutAttributesTable:attrsMap]; -} - -+ (CGFloat)_columnWidthForSection:(NSUInteger)section withLayoutWidth:(CGFloat)layoutWidth info:(MosaicCollectionLayoutInfo *)info -{ - return ([self _widthForSection:section withLayoutWidth:layoutWidth info:info] - ((info.numberOfColumns - 1) * info.columnSpacing)) / info.numberOfColumns; -} - -+ (CGFloat)_widthForSection:(NSUInteger)section withLayoutWidth:(CGFloat)layoutWidth info:(MosaicCollectionLayoutInfo *)info -{ - return layoutWidth - info.sectionInsets.left - info.sectionInsets.right; -} - -+ (ASSizeRange)_sizeRangeForItem:(ASCellNode *)item atIndexPath:(NSIndexPath *)indexPath withLayoutWidth:(CGFloat)layoutWidth info:(MosaicCollectionLayoutInfo *)info -{ - CGFloat itemWidth = [self _columnWidthForSection:indexPath.section withLayoutWidth:layoutWidth info:info]; - if ([item isKindOfClass:[ImageCellNode class]]) { - return ASSizeRangeMake(CGSizeMake(itemWidth, 0), CGSizeMake(itemWidth, CGFLOAT_MAX)); - } else { - return ASSizeRangeMake(CGSizeMake(itemWidth, itemWidth)); // In kShowUICollectionViewCells = YES mode, make those cells itemWidth x itemWidth. - } -} - -+ (ASSizeRange)_sizeRangeForHeaderOfSection:(NSInteger)section withLayoutWidth:(CGFloat)layoutWidth info:(MosaicCollectionLayoutInfo *)info -{ - return ASSizeRangeMake(CGSizeMake(0, info.headerHeight), CGSizeMake([self _widthForSection:section withLayoutWidth:layoutWidth info:info], info.headerHeight)); -} - -+ (NSUInteger)_tallestColumnIndexInSection:(NSUInteger)section withColumnHeights:(NSArray *)columnHeights -{ - __block NSUInteger index = 0; - __block CGFloat tallestHeight = 0; - [columnHeights[section] enumerateObjectsUsingBlock:^(NSNumber *height, NSUInteger idx, BOOL *stop) { - if (height.floatValue > tallestHeight) { - index = idx; - tallestHeight = height.floatValue; - } - }]; - return index; -} - -+ (NSUInteger)_shortestColumnIndexInSection:(NSUInteger)section withColumnHeights:(NSArray *)columnHeights -{ - __block NSUInteger index = 0; - __block CGFloat shortestHeight = CGFLOAT_MAX; - [columnHeights[section] enumerateObjectsUsingBlock:^(NSNumber *height, NSUInteger idx, BOOL *stop) { - if (height.floatValue < shortestHeight) { - index = idx; - shortestHeight = height.floatValue; - } - }]; - return index; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/MosaicCollectionLayoutInfo.h b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/MosaicCollectionLayoutInfo.h deleted file mode 100644 index b887e1d2be..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/MosaicCollectionLayoutInfo.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// MosaicCollectionLayoutInfo.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface MosaicCollectionLayoutInfo : NSObject - -// Read-only properties -@property (nonatomic, assign, readonly) NSInteger numberOfColumns; -@property (nonatomic, assign, readonly) CGFloat headerHeight; -@property (nonatomic, assign, readonly) CGFloat columnSpacing; -@property (nonatomic, assign, readonly) UIEdgeInsets sectionInsets; -@property (nonatomic, assign, readonly) UIEdgeInsets interItemSpacing; - -- (instancetype)initWithNumberOfColumns:(NSInteger)numberOfColumns - headerHeight:(CGFloat)headerHeight - columnSpacing:(CGFloat)columnSpacing - sectionInsets:(UIEdgeInsets)sectionInsets - interItemSpacing:(UIEdgeInsets)interItemSpacing NS_DESIGNATED_INITIALIZER; - -- (instancetype)init __unavailable; - -@end diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/MosaicCollectionLayoutInfo.m b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/MosaicCollectionLayoutInfo.m deleted file mode 100644 index 9eb80c2186..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/MosaicCollectionLayoutInfo.m +++ /dev/null @@ -1,74 +0,0 @@ -// -// MosaicCollectionLayoutInfo.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "MosaicCollectionLayoutInfo.h" - -#import - -@implementation MosaicCollectionLayoutInfo - -- (instancetype)initWithNumberOfColumns:(NSInteger)numberOfColumns - headerHeight:(CGFloat)headerHeight - columnSpacing:(CGFloat)columnSpacing - sectionInsets:(UIEdgeInsets)sectionInsets - interItemSpacing:(UIEdgeInsets)interItemSpacing -{ - self = [super init]; - if (self) { - _numberOfColumns = numberOfColumns; - _headerHeight = headerHeight; - _columnSpacing = columnSpacing; - _sectionInsets = sectionInsets; - _interItemSpacing = interItemSpacing; - } - return self; -} - -- (BOOL)isEqualToInfo:(MosaicCollectionLayoutInfo *)info -{ - if (info == nil) { - return NO; - } - - return _numberOfColumns == info.numberOfColumns - && _headerHeight == info.headerHeight - && _columnSpacing == info.columnSpacing - && UIEdgeInsetsEqualToEdgeInsets(_sectionInsets, info.sectionInsets) - && UIEdgeInsetsEqualToEdgeInsets(_interItemSpacing, info.interItemSpacing); -} - -- (BOOL)isEqual:(id)other -{ - if (self == other) { - return YES; - } - if (! [other isKindOfClass:[MosaicCollectionLayoutInfo class]]) { - return NO; - } - return [self isEqualToInfo:other]; -} - -- (NSUInteger)hash -{ - struct { - NSInteger numberOfColumns; - CGFloat headerHeight; - CGFloat columnSpacing; - UIEdgeInsets sectionInsets; - UIEdgeInsets interItemSpacing; - } data = { - _numberOfColumns, - _headerHeight, - _columnSpacing, - _sectionInsets, - _interItemSpacing, - }; - return ASHashBytes(&data, sizeof(data)); -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ViewController.h deleted file mode 100644 index da850f7446..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ViewController.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface ViewController : ASViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ViewController.m deleted file mode 100644 index 7715fc8c07..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/ViewController.m +++ /dev/null @@ -1,142 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" - -#import -#import -#import "MosaicCollectionLayoutDelegate.h" -#import "ImageCellNode.h" -#import "ImageCollectionViewCell.h" - -// This option demonstrates that raw UIKit cells can still be used alongside native ASCellNodes. -static BOOL kShowUICollectionViewCells = YES; -static NSString *kReuseIdentifier = @"ImageCollectionViewCell"; -static NSUInteger kNumberOfImages = 14; - -@interface ViewController () -{ - NSMutableArray *_sections; - ASCollectionNode *_collectionNode; -} - -@end - -@implementation ViewController - -#pragma mark - -#pragma mark UIViewController - -- (instancetype)init -{ - MosaicCollectionLayoutDelegate *layoutDelegate = [[MosaicCollectionLayoutDelegate alloc] initWithNumberOfColumns:2 headerHeight:44.0]; - _collectionNode = [[ASCollectionNode alloc] initWithLayoutDelegate:layoutDelegate layoutFacilitator:nil]; - _collectionNode.dataSource = self; - _collectionNode.delegate = self; - _collectionNode.layoutInspector = self; - - if (!(self = [super initWithNode:_collectionNode])) - return nil; - - _sections = [NSMutableArray array]; - [_sections addObject:[NSMutableArray array]]; - for (NSUInteger idx = 0, section = 0; idx < kNumberOfImages; idx++) { - NSString *name = [NSString stringWithFormat:@"image_%lu.jpg", (unsigned long)idx]; - [_sections[section] addObject:[UIImage imageNamed:name]]; - if ((idx + 1) % 5 == 0 && idx < kNumberOfImages - 1) { - section++; - [_sections addObject:[NSMutableArray array]]; - } - } - - [_collectionNode registerSupplementaryNodeOfKind:UICollectionElementKindSectionHeader]; - - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [_collectionNode.view registerClass:[ImageCollectionViewCell class] forCellWithReuseIdentifier:kReuseIdentifier]; -} - -- (void)reloadTapped -{ - [_collectionNode reloadData]; -} - -#pragma mark - ASCollectionNode data source. - -- (ASCellNodeBlock)collectionNode:(ASCollectionNode *)collectionNode nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath -{ - if (kShowUICollectionViewCells && indexPath.item % 3 == 1) { - // When enabled, return nil for every third cell and then cellForItemAtIndexPath: will be called. - return nil; - } - - UIImage *image = _sections[indexPath.section][indexPath.item]; - return ^{ - return [[ImageCellNode alloc] initWithImage:image]; - }; -} - -// The below 2 methods are required by ASCollectionViewLayoutInspecting, but ASCollectionLayout and its layout delegate are the ones that really determine the size ranges and directions -// TODO Remove these methods once a layout inspector is no longer required under ASCollectionLayout mode -- (ASSizeRange)collectionView:(ASCollectionView *)collectionView constrainedSizeForNodeAtIndexPath:(NSIndexPath *)indexPath -{ - return ASSizeRangeZero; -} - -- (ASScrollDirection)scrollableDirections -{ - return ASScrollDirectionVerticalDirections; -} - -/** - * Asks the inspector for the number of supplementary views for the given kind in the specified section. - */ -- (NSUInteger)collectionView:(ASCollectionView *)collectionView supplementaryNodesOfKind:(NSString *)kind inSection:(NSUInteger)section -{ - return [kind isEqualToString:UICollectionElementKindSectionHeader] ? 1 : 0; -} - -- (ASCellNode *)collectionNode:(ASCollectionNode *)collectionNode nodeForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath -{ - NSDictionary *textAttributes = @{ - NSFontAttributeName: [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline], - NSForegroundColorAttributeName: [UIColor grayColor] - }; - UIEdgeInsets textInsets = UIEdgeInsetsMake(11.0, 0, 11.0, 0); - ASTextCellNode *textCellNode = [[ASTextCellNode alloc] initWithAttributes:textAttributes insets:textInsets]; - textCellNode.text = [NSString stringWithFormat:@"Section %zd", indexPath.section + 1]; - return textCellNode; -} - -- (NSInteger)numberOfSectionsInCollectionNode:(ASCollectionNode *)collectionNode -{ - return _sections.count; -} - -- (NSInteger)collectionNode:(ASCollectionNode *)collectionNode numberOfItemsInSection:(NSInteger)section -{ - return [_sections[section] count]; -} - -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath -{ - return [_collectionNode.view dequeueReusableCellWithReuseIdentifier:kReuseIdentifier forIndexPath:indexPath]; -} - -- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath -{ - return nil; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/main.m b/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/main.m deleted file mode 100644 index 65850400e4..0000000000 --- a/submodules/AsyncDisplayKit/examples/CustomCollectionView/Sample/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Podfile b/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/AppDelegate.h deleted file mode 100644 index c30a27f4dc..0000000000 --- a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#define UseAutomaticLayout 1 - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/AppDelegate.m deleted file mode 100644 index f8437855b0..0000000000 --- a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/AppDelegate.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]]; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/HorizontalScrollCellNode.h b/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/HorizontalScrollCellNode.h deleted file mode 100644 index 49b6e48d09..0000000000 --- a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/HorizontalScrollCellNode.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// HorizontalScrollCellNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -/** - * This ASCellNode contains an ASCollectionNode. It intelligently interacts with a containing ASCollectionView or ASTableView, - * to preload and clean up contents as the user scrolls around both vertically and horizontally — in a way that minimizes memory usage. - */ -@interface HorizontalScrollCellNode : ASCellNode - -- (instancetype)initWithElementSize:(CGSize)size; - -@end diff --git a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/HorizontalScrollCellNode.mm b/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/HorizontalScrollCellNode.mm deleted file mode 100644 index 0794643893..0000000000 --- a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/HorizontalScrollCellNode.mm +++ /dev/null @@ -1,105 +0,0 @@ -// -// HorizontalScrollCellNode.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "HorizontalScrollCellNode.h" -#import "RandomCoreGraphicsNode.h" -#import "AppDelegate.h" - -#import - -#import -#import - -static const CGFloat kOuterPadding = 16.0f; -static const CGFloat kInnerPadding = 10.0f; - -@interface HorizontalScrollCellNode () -{ - ASCollectionNode *_collectionNode; - CGSize _elementSize; - ASDisplayNode *_divider; -} - -@end - - -@implementation HorizontalScrollCellNode - -#pragma mark - Lifecycle - -- (instancetype)initWithElementSize:(CGSize)size -{ - if (!(self = [super init])) - return nil; - - _elementSize = size; - - // the containing table uses -nodeForRowAtIndexPath (rather than -nodeBlockForRowAtIndexPath), - // so this init method will always be run on the main thread (thus it is safe to do UIKit things). - UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; - flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; - flowLayout.itemSize = _elementSize; - flowLayout.minimumInteritemSpacing = kInnerPadding; - - _collectionNode = [[ASCollectionNode alloc] initWithCollectionViewLayout:flowLayout]; - _collectionNode.delegate = self; - _collectionNode.dataSource = self; - [self addSubnode:_collectionNode]; - - // hairline cell separator - _divider = [[ASDisplayNode alloc] init]; - _divider.backgroundColor = [UIColor lightGrayColor]; - [self addSubnode:_divider]; - - return self; -} - -// With box model, you don't need to override this method, unless you want to add custom logic. -- (void)layout -{ - [super layout]; - - _collectionNode.view.contentInset = UIEdgeInsetsMake(0.0, kOuterPadding, 0.0, kOuterPadding); - - // Manually layout the divider. - CGFloat pixelHeight = 1.0f / [[UIScreen mainScreen] scale]; - _divider.frame = CGRectMake(0.0f, 0.0f, self.calculatedSize.width, pixelHeight); -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - CGSize collectionNodeSize = CGSizeMake(constrainedSize.max.width, _elementSize.height); - _collectionNode.style.preferredSize = collectionNodeSize; - - ASInsetLayoutSpec *insetSpec = [[ASInsetLayoutSpec alloc] init]; - insetSpec.insets = UIEdgeInsetsMake(kOuterPadding, 0.0, kOuterPadding, 0.0); - insetSpec.child = _collectionNode; - - return insetSpec; -} - -#pragma mark - ASCollectionNode - -- (NSInteger)collectionNode:(ASCollectionNode *)collectionNode numberOfItemsInSection:(NSInteger)section -{ - return 5; -} - -- (ASCellNodeBlock)collectionNode:(ASCollectionNode *)collectionNode nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath -{ - CGSize elementSize = _elementSize; - - return ^{ - RandomCoreGraphicsNode *elementNode = [[RandomCoreGraphicsNode alloc] init]; - elementNode.style.preferredSize = elementSize; - return elementNode; - }; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/Info.plist deleted file mode 100644 index 35d842827b..0000000000 --- a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/RandomCoreGraphicsNode.h b/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/RandomCoreGraphicsNode.h deleted file mode 100644 index 85b53290cc..0000000000 --- a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/RandomCoreGraphicsNode.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// RandomCoreGraphicsNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface RandomCoreGraphicsNode : ASCellNode - -@end diff --git a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/RandomCoreGraphicsNode.m b/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/RandomCoreGraphicsNode.m deleted file mode 100644 index 83d9ed6795..0000000000 --- a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/RandomCoreGraphicsNode.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// RandomCoreGraphicsNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "RandomCoreGraphicsNode.h" -#import - -@implementation RandomCoreGraphicsNode - -+ (UIColor *)randomColor -{ - CGFloat hue = ( arc4random() % 256 / 256.0 ); // 0.0 to 1.0 - CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from white - CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from black - return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1]; -} - -+ (void)drawRect:(CGRect)bounds withParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing -{ - CGFloat locations[3]; - NSMutableArray *colors = [NSMutableArray arrayWithCapacity:3]; - [colors addObject:(id)[[RandomCoreGraphicsNode randomColor] CGColor]]; - locations[0] = 0.0; - [colors addObject:(id)[[RandomCoreGraphicsNode randomColor] CGColor]]; - locations[1] = 1.0; - [colors addObject:(id)[[RandomCoreGraphicsNode randomColor] CGColor]]; - locations[2] = ( arc4random() % 256 / 256.0 ); - - - CGContextRef ctx = UIGraphicsGetCurrentContext(); - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)colors, locations); - - CGContextDrawLinearGradient(ctx, gradient, CGPointZero, CGPointMake(bounds.size.width, bounds.size.height), 0); - - CGGradientRelease(gradient); - CGColorSpaceRelease(colorSpace); -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/ViewController.h deleted file mode 100644 index 560b6a2d03..0000000000 --- a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : ASViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/ViewController.m deleted file mode 100644 index f1b1858825..0000000000 --- a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/ViewController.m +++ /dev/null @@ -1,68 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "ViewController.h" -#import "HorizontalScrollCellNode.h" - -@interface ViewController () -{ - ASTableNode *_tableNode; -} - -@end - -@implementation ViewController - -#pragma mark - -#pragma mark UIViewController. - -- (instancetype)init -{ - _tableNode = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain]; - _tableNode.dataSource = self; - _tableNode.delegate = self; - - if (!(self = [super initWithNode:_tableNode])) - return nil; - - self.title = @"Horizontal Scrolling Gradients"; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRedo - target:self - action:@selector(reloadEverything)]; - - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - _tableNode.view.separatorStyle = UITableViewCellSeparatorStyleNone; -} - -- (void)reloadEverything -{ - [_tableNode reloadData]; -} - -#pragma mark - ASTableNode - -- (ASCellNode *)tableNode:(ASTableNode *)tableNode nodeForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return [[HorizontalScrollCellNode alloc] initWithElementSize:CGSizeMake(100, 100)]; -} - -- (NSInteger)tableNode:(ASTableNode *)tableNode numberOfRowsInSection:(NSInteger)section -{ - return 100; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/main.m b/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples/HorizontalWithinVerticalScrolling/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/Kittens/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples/Kittens/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/Kittens/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/Kittens/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples/Kittens/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/Kittens/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/Kittens/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples/Kittens/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/Kittens/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/Kittens/Podfile b/submodules/AsyncDisplayKit/examples/Kittens/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples/Kittens/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples/Kittens/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/Kittens/Sample/AppDelegate.h deleted file mode 100644 index c30a27f4dc..0000000000 --- a/submodules/AsyncDisplayKit/examples/Kittens/Sample/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#define UseAutomaticLayout 1 - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples/Kittens/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/Kittens/Sample/AppDelegate.m deleted file mode 100644 index 2395642bd1..0000000000 --- a/submodules/AsyncDisplayKit/examples/Kittens/Sample/AppDelegate.m +++ /dev/null @@ -1,37 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" -#import - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]]; - [self.window makeKeyAndVisible]; - return YES; -} - -@end - -@implementation ASConfiguration (UserProvided) - -+ (ASConfiguration *)textureConfiguration -{ - ASConfiguration *configuration = [ASConfiguration new]; - return configuration; - -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/Kittens/Sample/BlurbNode.h b/submodules/AsyncDisplayKit/examples/Kittens/Sample/BlurbNode.h deleted file mode 100644 index 5451fb39f0..0000000000 --- a/submodules/AsyncDisplayKit/examples/Kittens/Sample/BlurbNode.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// BlurbNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -/** - * Simple node that displays a placekitten.com attribution. - */ -@interface BlurbNode : ASCellNode - -@end diff --git a/submodules/AsyncDisplayKit/examples/Kittens/Sample/BlurbNode.m b/submodules/AsyncDisplayKit/examples/Kittens/Sample/BlurbNode.m deleted file mode 100644 index 6014711d33..0000000000 --- a/submodules/AsyncDisplayKit/examples/Kittens/Sample/BlurbNode.m +++ /dev/null @@ -1,120 +0,0 @@ -// -// BlurbNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "BlurbNode.h" -#import "AppDelegate.h" - -#import -#import - -#import -#import - -static CGFloat kTextPadding = 10.0f; -static NSString *kLinkAttributeName = @"PlaceKittenNodeLinkAttributeName"; - -@interface BlurbNode () -{ - ASTextNode *_textNode; -} - -@end - - -@implementation BlurbNode - -#pragma mark - -#pragma mark ASCellNode. - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - // create a text node - _textNode = [[ASTextNode alloc] init]; - - // configure the node to support tappable links - _textNode.delegate = self; - _textNode.userInteractionEnabled = YES; - _textNode.linkAttributeNames = @[ kLinkAttributeName ]; - - // generate an attributed string using the custom link attribute specified above - NSString *blurb = @"kittens courtesy placekitten.com \U0001F638"; - NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:blurb]; - [string addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue-Light" size:16.0f] range:NSMakeRange(0, blurb.length)]; - [string addAttributes:@{ - kLinkAttributeName: [NSURL URLWithString:@"http://placekitten.com/"], - NSForegroundColorAttributeName: [UIColor grayColor], - NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle | NSUnderlinePatternDot), - } - range:[blurb rangeOfString:@"placekitten.com"]]; - _textNode.attributedText = string; - - // add it as a subnode, and we're done - [self addSubnode:_textNode]; - - return self; -} - -- (void)didLoad -{ - // enable highlighting now that self.layer has loaded -- see ASHighlightOverlayLayer.h - self.layer.as_allowsHighlightDrawing = YES; - - [super didLoad]; -} - -#if UseAutomaticLayout -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASCenterLayoutSpec *centerSpec = [[ASCenterLayoutSpec alloc] init]; - centerSpec.centeringOptions = ASCenterLayoutSpecCenteringX; - centerSpec.sizingOptions = ASCenterLayoutSpecSizingOptionMinimumY; - centerSpec.child = _textNode; - - UIEdgeInsets padding =UIEdgeInsetsMake(kTextPadding, kTextPadding, kTextPadding, kTextPadding); - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:padding child:centerSpec]; -} -#else -- (CGSize)calculateSizeThatFits:(CGSize)constrainedSize -{ - // called on a background thread. custom nodes must call -measure: on their subnodes in -calculateSizeThatFits: - CGSize measuredSize = [_textNode measure:CGSizeMake(constrainedSize.width - 2 * kTextPadding, - constrainedSize.height - 2 * kTextPadding)]; - return CGSizeMake(constrainedSize.width, measuredSize.height + 2 * kTextPadding); -} - -- (void)layout -{ - // called on the main thread. we'll use the stashed size from above, instead of blocking on text sizing - CGSize textNodeSize = _textNode.calculatedSize; - _textNode.frame = CGRectMake(roundf((self.calculatedSize.width - textNodeSize.width) / 2.0f), - kTextPadding, - textNodeSize.width, - textNodeSize.height); -} -#endif - -#pragma mark - -#pragma mark ASTextNodeDelegate methods. - -- (BOOL)textNode:(ASTextNode *)richTextNode shouldHighlightLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point -{ - // opt into link highlighting -- tap and hold the link to try it! must enable highlighting on a layer, see -didLoad - return YES; -} - -- (void)textNode:(ASTextNode *)richTextNode tappedLinkAttribute:(NSString *)attribute value:(NSURL *)URL atPoint:(CGPoint)point textRange:(NSRange)textRange -{ - // the node tapped a link, open it - [[UIApplication sharedApplication] openURL:URL]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/Kittens/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/Kittens/Sample/Info.plist deleted file mode 100644 index fb4115c84c..0000000000 --- a/submodules/AsyncDisplayKit/examples/Kittens/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/Kittens/Sample/KittenNode.h b/submodules/AsyncDisplayKit/examples/Kittens/Sample/KittenNode.h deleted file mode 100644 index 5b0b04203e..0000000000 --- a/submodules/AsyncDisplayKit/examples/Kittens/Sample/KittenNode.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// KittenNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -/** - * Social media-style node that displays a kitten picture and a random length - * of lorem ipsum text. Uses a placekitten.com kitten of the specified size. - */ -@interface KittenNode : ASCellNode - -- (instancetype)initWithKittenOfSize:(CGSize)size; - -- (void)toggleImageEnlargement; - -@end diff --git a/submodules/AsyncDisplayKit/examples/Kittens/Sample/KittenNode.mm b/submodules/AsyncDisplayKit/examples/Kittens/Sample/KittenNode.mm deleted file mode 100644 index f8ae2ef2e6..0000000000 --- a/submodules/AsyncDisplayKit/examples/Kittens/Sample/KittenNode.mm +++ /dev/null @@ -1,252 +0,0 @@ -// -// KittenNode.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "KittenNode.h" -#import "AppDelegate.h" - -#import - -#import -#import -#import - -static const CGFloat kImageSize = 80.0f; -static const CGFloat kOuterPadding = 16.0f; -static const CGFloat kInnerPadding = 10.0f; - - -@interface KittenNode () -{ - CGSize _kittenSize; - - ASNetworkImageNode *_imageNode; - ASTextNode *_textNode; - ASDisplayNode *_divider; - BOOL _isImageEnlarged; - BOOL _swappedTextAndImage; -} - -@end - - -@implementation KittenNode - -// lorem ipsum text courtesy https://kittyipsum.com/ <3 -+ (NSArray *)placeholders -{ - static NSArray *placeholders = nil; - - static dispatch_once_t once; - dispatch_once(&once, ^{ - placeholders = @[ - @"Kitty ipsum dolor sit amet, purr sleep on your face lay down in your way biting, sniff tincidunt a etiam fluffy fur judging you stuck in a tree kittens.", - @"Lick tincidunt a biting eat the grass, egestas enim ut lick leap puking climb the curtains lick.", - @"Lick quis nunc toss the mousie vel, tortor pellentesque sunbathe orci turpis non tail flick suscipit sleep in the sink.", - @"Orci turpis litter box et stuck in a tree, egestas ac tempus et aliquam elit.", - @"Hairball iaculis dolor dolor neque, nibh adipiscing vehicula egestas dolor aliquam.", - @"Sunbathe fluffy fur tortor faucibus pharetra jump, enim jump on the table I don't like that food catnip toss the mousie scratched.", - @"Quis nunc nam sleep in the sink quis nunc purr faucibus, chase the red dot consectetur bat sagittis.", - @"Lick tail flick jump on the table stretching purr amet, rhoncus scratched jump on the table run.", - @"Suspendisse aliquam vulputate feed me sleep on your keyboard, rip the couch faucibus sleep on your keyboard tristique give me fish dolor.", - @"Rip the couch hiss attack your ankles biting pellentesque puking, enim suspendisse enim mauris a.", - @"Sollicitudin iaculis vestibulum toss the mousie biting attack your ankles, puking nunc jump adipiscing in viverra.", - @"Nam zzz amet neque, bat tincidunt a iaculis sniff hiss bibendum leap nibh.", - @"Chase the red dot enim puking chuf, tristique et egestas sniff sollicitudin pharetra enim ut mauris a.", - @"Sagittis scratched et lick, hairball leap attack adipiscing catnip tail flick iaculis lick.", - @"Neque neque sleep in the sink neque sleep on your face, climb the curtains chuf tail flick sniff tortor non.", - @"Ac etiam kittens claw toss the mousie jump, pellentesque rhoncus litter box give me fish adipiscing mauris a.", - @"Pharetra egestas sunbathe faucibus ac fluffy fur, hiss feed me give me fish accumsan.", - @"Tortor leap tristique accumsan rutrum sleep in the sink, amet sollicitudin adipiscing dolor chase the red dot.", - @"Knock over the lamp pharetra vehicula sleep on your face rhoncus, jump elit cras nec quis quis nunc nam.", - @"Sollicitudin feed me et ac in viverra catnip, nunc eat I don't like that food iaculis give me fish.", - ]; - }); - - return placeholders; -} - -- (instancetype)initWithKittenOfSize:(CGSize)size -{ - if (!(self = [super init])) - return nil; - - _kittenSize = size; - - // kitten image, with a solid background colour serving as placeholder - _imageNode = [[ASNetworkImageNode alloc] init]; - _imageNode.URL = [NSURL URLWithString:[NSString stringWithFormat:@"https://placekitten.com/%zd/%zd", - (NSInteger)roundl(_kittenSize.width), - (NSInteger)roundl(_kittenSize.height)]]; - _imageNode.placeholderFadeDuration = .5; - _imageNode.placeholderColor = ASDisplayNodeDefaultPlaceholderColor(); - // _imageNode.contentMode = UIViewContentModeCenter; - [_imageNode addTarget:self action:@selector(toggleNodesSwap) forControlEvents:ASControlNodeEventTouchUpInside]; - [self addSubnode:_imageNode]; - - // lorem ipsum text, plus some nice styling - - _textNode = [[ASTextNode alloc] init]; - _textNode.shadowColor = [UIColor blackColor].CGColor; - _textNode.shadowRadius = 3; - _textNode.shadowOffset = CGSizeMake(-2, -2); - _textNode.shadowOpacity = 0.3; - if (_textNode.usingExperiment) { - _textNode.backgroundColor = [UIColor colorWithRed:0.9 green:0.9 blue:1 alpha:1]; - } else { - _textNode.backgroundColor = [UIColor colorWithRed:1 green:0.9 blue:0.9 alpha:1]; - } - _textNode.maximumNumberOfLines = 2; - _textNode.truncationAttributedText = [[NSAttributedString alloc] initWithString:@"…"]; - _textNode.additionalTruncationMessage = [[NSAttributedString alloc] initWithString:@"More"]; - _textNode.attributedText = [[NSAttributedString alloc] initWithString:[self kittyIpsum] attributes:[self textStyle]]; - [self addSubnode:_textNode]; - - // hairline cell separator - _divider = [[ASDisplayNode alloc] init]; - _divider.backgroundColor = [UIColor lightGrayColor]; - [self addSubnode:_divider]; - - return self; -} - -- (NSString *)kittyIpsum -{ - NSArray *placeholders = [KittenNode placeholders]; - u_int32_t ipsumCount = (u_int32_t)[placeholders count]; - u_int32_t location = arc4random_uniform(ipsumCount); - u_int32_t length = arc4random_uniform(ipsumCount - location); - - NSMutableString *string = [placeholders[location] mutableCopy]; - for (u_int32_t i = location + 1; i < location + length; i++) { - [string appendString:(i % 2 == 0) ? @"\n" : @" "]; - [string appendString:placeholders[i]]; - } - - return string; -} - -- (NSDictionary *)textStyle -{ - UIFont *font = [UIFont fontWithName:@"HelveticaNeue" size:12.0f]; - - NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; - style.paragraphSpacing = 0.5 * font.lineHeight; - style.hyphenationFactor = 1.0; - - return @{ - NSFontAttributeName: font, - NSParagraphStyleAttributeName: style, - ASTextNodeWordKerningAttributeName : @.5 - }; -} - -#if UseAutomaticLayout -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - // Set an intrinsic size for the image node - CGSize imageSize = _isImageEnlarged ? CGSizeMake(2.0 * kImageSize, 2.0 * kImageSize) : CGSizeMake(kImageSize, kImageSize); - _imageNode.style.preferredSize = imageSize; - - // Shrink the text node in case the image + text gonna be too wide - _textNode.style.flexShrink = 1.0; - - // Configure stack - ASStackLayoutSpec *stackLayoutSpec = - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:kInnerPadding - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStart - children:_swappedTextAndImage ? @[_textNode, _imageNode] : @[_imageNode, _textNode]]; - - // Add inset - return [ASInsetLayoutSpec - insetLayoutSpecWithInsets:UIEdgeInsetsMake(kOuterPadding, kOuterPadding, kOuterPadding, kOuterPadding) - child:stackLayoutSpec]; -} - -// With box model, you don't need to override this method, unless you want to add custom logic. -- (void)layout -{ - [super layout]; - - // Manually layout the divider. - CGFloat pixelHeight = 1.0f / [[UIScreen mainScreen] scale]; - _divider.frame = CGRectMake(0.0f, 0.0f, self.calculatedSize.width, pixelHeight); -} -#else -- (CGSize)calculateSizeThatFits:(CGSize)constrainedSize -{ - CGSize imageSize = CGSizeMake(kImageSize, kImageSize); - CGSize textSize = [_textNode measure:CGSizeMake(constrainedSize.width - kImageSize - 2 * kOuterPadding - kInnerPadding, - constrainedSize.height)]; - - // ensure there's room for the text - CGFloat requiredHeight = MAX(textSize.height, imageSize.height); - return CGSizeMake(constrainedSize.width, requiredHeight + 2 * kOuterPadding); -} - -- (void)layout -{ - CGFloat pixelHeight = 1.0f / [[UIScreen mainScreen] scale]; - _divider.frame = CGRectMake(0.0f, 0.0f, self.calculatedSize.width, pixelHeight); - - _imageNode.frame = CGRectMake(kOuterPadding, kOuterPadding, kImageSize, kImageSize); - - CGSize textSize = _textNode.calculatedSize; - _textNode.frame = CGRectMake(kOuterPadding + kImageSize + kInnerPadding, kOuterPadding, textSize.width, textSize.height); -} -#endif - -- (void)toggleImageEnlargement -{ - _isImageEnlarged = !_isImageEnlarged; - [self setNeedsLayout]; -} - -- (void)toggleNodesSwap -{ - _swappedTextAndImage = !_swappedTextAndImage; - - [UIView animateWithDuration:0.15 animations:^{ - self.alpha = 0; - } completion:^(BOOL finished) { - [self setNeedsLayout]; - [self.view layoutIfNeeded]; - - [UIView animateWithDuration:0.15 animations:^{ - self.alpha = 1; - }]; - }]; -} - -- (void)updateBackgroundColor -{ - if (self.highlighted) { - self.backgroundColor = [UIColor lightGrayColor]; - } else if (self.selected) { - self.backgroundColor = [UIColor blueColor]; - } else { - self.backgroundColor = [UIColor whiteColor]; - } -} - -- (void)setSelected:(BOOL)selected -{ - [super setSelected:selected]; - [self updateBackgroundColor]; -} - -- (void)setHighlighted:(BOOL)highlighted -{ - [super setHighlighted:highlighted]; - [self updateBackgroundColor]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/Kittens/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples/Kittens/Sample/ViewController.h deleted file mode 100644 index 560b6a2d03..0000000000 --- a/submodules/AsyncDisplayKit/examples/Kittens/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : ASViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/Kittens/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples/Kittens/Sample/ViewController.m deleted file mode 100644 index 552f482886..0000000000 --- a/submodules/AsyncDisplayKit/examples/Kittens/Sample/ViewController.m +++ /dev/null @@ -1,176 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" - -#import -#import - -#import "BlurbNode.h" -#import "KittenNode.h" - - -static const NSInteger kLitterSize = 20; // intial number of kitten cells in ASTableNode -static const NSInteger kLitterBatchSize = 10; // number of kitten cells to add to ASTableNode -static const NSInteger kMaxLitterSize = 100; // max number of kitten cells allowed in ASTableNode - -@interface ViewController () -{ - ASTableNode *_tableNode; - - // array of boxed CGSizes corresponding to placekitten.com kittens - NSMutableArray *_kittenDataSource; - - NSIndexPath *_blurbNodeIndexPath; -} - -@property (nonatomic, strong) NSMutableArray *kittenDataSource; - -@end - - -@implementation ViewController - -#pragma mark - Lifecycle - -- (instancetype)init -{ - _tableNode = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain]; - _tableNode.dataSource = self; - _tableNode.delegate = self; - - if (!(self = [super initWithNode:_tableNode])) - return nil; - - // populate our "data source" with some random kittens - _kittenDataSource = [self createLitterWithSize:kLitterSize]; - _blurbNodeIndexPath = [NSIndexPath indexPathForItem:0 inSection:0]; - - self.title = @"Kittens"; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit - target:self - action:@selector(toggleEditingMode)]; - - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - _tableNode.view.separatorStyle = UITableViewCellSeparatorStyleNone; // KittenNode has its own separator - [self.node addSubnode:_tableNode]; -} - -#pragma mark - Data Model - -- (NSMutableArray *)createLitterWithSize:(NSInteger)litterSize -{ - NSMutableArray *kittens = [NSMutableArray arrayWithCapacity:litterSize]; - for (NSInteger i = 0; i < litterSize; i++) { - - // placekitten.com will return the same kitten picture if the same pixel height & width are requested, - // so generate kittens with different width & height values. - u_int32_t deltaX = arc4random_uniform(10) - 5; - u_int32_t deltaY = arc4random_uniform(10) - 5; - CGSize size = CGSizeMake(350 + 2 * deltaX, 350 + 4 * deltaY); - - [kittens addObject:[NSValue valueWithCGSize:size]]; - } - return kittens; -} - -- (void)toggleEditingMode -{ - [_tableNode.view setEditing:!_tableNode.view.editing animated:YES]; -} - - -#pragma mark - ASTableNode - -- (NSInteger)tableNode:(ASTableNode *)tableNode numberOfRowsInSection:(NSInteger)section -{ - // blurb node + kLitterSize kitties - return 1 + _kittenDataSource.count; -} - -- (ASCellNode *)tableNode:(ASTableNode *)tableNode nodeForRowAtIndexPath:(NSIndexPath *)indexPath -{ - // special-case the first row - if ([_blurbNodeIndexPath compare:indexPath] == NSOrderedSame) { - BlurbNode *node = [[BlurbNode alloc] init]; - return node; - } - - NSValue *size = _kittenDataSource[indexPath.row - 1]; - KittenNode *node = [[KittenNode alloc] initWithKittenOfSize:size.CGSizeValue]; - return node; -} - -- (void)tableNode:(ASTableNode *)tableNode didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [_tableNode deselectRowAtIndexPath:indexPath animated:YES]; - - // Assume only kitten nodes are selectable (see -tableNode:shouldHighlightRowAtIndexPath:). - KittenNode *node = (KittenNode *)[_tableNode nodeForRowAtIndexPath:indexPath]; - - [node toggleImageEnlargement]; -} - -- (BOOL)tableNode:(ASTableNode *)tableNode shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath -{ - // Enable selection for kitten nodes - return [_blurbNodeIndexPath compare:indexPath] != NSOrderedSame; -} - -- (void)tableNode:(ASTableNode *)tableNode willBeginBatchFetchWithContext:(nonnull ASBatchContext *)context -{ - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - // populate a new array of random-sized kittens - NSArray *moarKittens = [self createLitterWithSize:kLitterBatchSize]; - - NSMutableArray *indexPaths = [[NSMutableArray alloc] init]; - - // find number of kittens in the data source and create their indexPaths - NSInteger existingRows = _kittenDataSource.count + 1; - - for (NSInteger i = 0; i < moarKittens.count; i++) { - [indexPaths addObject:[NSIndexPath indexPathForRow:existingRows + i inSection:0]]; - } - - // add new kittens to the data source & notify table of new indexpaths - [_kittenDataSource addObjectsFromArray:moarKittens]; - [tableNode insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade]; - - [context completeBatchFetching:YES]; - }); -} - -- (BOOL)shouldBatchFetchForTableNode:(ASTableNode *)tableNode -{ - return _kittenDataSource.count < kMaxLitterSize; -} - -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath -{ - // Enable editing for Kitten nodes - return [_blurbNodeIndexPath compare:indexPath] != NSOrderedSame; -} - -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle - forRowAtIndexPath:(NSIndexPath *)indexPath -{ - if (editingStyle == UITableViewCellEditingStyleDelete) { - // Assume only kitten nodes are editable (see -tableView:canEditRowAtIndexPath:). - [_kittenDataSource removeObjectAtIndex:indexPath.row - 1]; - [_tableNode deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; - } -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/Kittens/Sample/main.m b/submodules/AsyncDisplayKit/examples/Kittens/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples/Kittens/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Podfile b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Podfile deleted file mode 100644 index 83d2cae8bf..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Podfile +++ /dev/null @@ -1,8 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' - -use_frameworks! - -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/AppDelegate.swift b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/AppDelegate.swift deleted file mode 100644 index 9a465c6de8..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/AppDelegate.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// AppDelegate.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - let window = UIWindow(frame: UIScreen.main.bounds) - window.backgroundColor = UIColor.white - window.rootViewController = UINavigationController(rootViewController: OverviewViewController()) - window.makeKeyAndVisible() - self.window = window - - UINavigationBar.appearance().barTintColor = UIColor(red: 47/255.0, green: 184/255.0, blue: 253/255.0, alpha: 1.0) - UINavigationBar.appearance().tintColor = .white - UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white] - - return true - } - -} diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/Base.lproj/LaunchScreen.storyboard b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f4fc7f7736..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/Info.plist deleted file mode 100644 index 6105445463..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/Info.plist +++ /dev/null @@ -1,43 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/LayoutExampleNode+Layouts.swift b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/LayoutExampleNode+Layouts.swift deleted file mode 100644 index cf6bfbf1a6..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/LayoutExampleNode+Layouts.swift +++ /dev/null @@ -1,85 +0,0 @@ -// -// LayoutExampleNode+Layouts.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import AsyncDisplayKit - -extension HeaderWithRightAndLeftItems { - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - let nameLocationStack = ASStackLayoutSpec.vertical() - nameLocationStack.style.flexShrink = 1.0 - nameLocationStack.style.flexGrow = 1.0 - - if postLocationNode.attributedText != nil { - nameLocationStack.children = [userNameNode, postLocationNode] - } else { - nameLocationStack.children = [userNameNode] - } - - let headerStackSpec = ASStackLayoutSpec(direction: .horizontal, - spacing: 40, - justifyContent: .start, - alignItems: .center, - children: [nameLocationStack, postTimeNode]) - - return ASInsetLayoutSpec(insets: UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 10), child: headerStackSpec) - } - -} - -extension PhotoWithInsetTextOverlay { - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - let photoDimension: CGFloat = constrainedSize.max.width / 4.0 - photoNode.style.preferredSize = CGSize(width: photoDimension, height: photoDimension) - - // INFINITY is used to make the inset unbounded - let insets = UIEdgeInsets(top: CGFloat.infinity, left: 12, bottom: 12, right: 12) - let textInsetSpec = ASInsetLayoutSpec(insets: insets, child: titleNode) - - return ASOverlayLayoutSpec(child: photoNode, overlay: textInsetSpec) - } - -} - -extension PhotoWithOutsetIconOverlay { - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - iconNode.style.preferredSize = CGSize(width: 40, height: 40); - iconNode.style.layoutPosition = CGPoint(x: 150, y: 0); - - photoNode.style.preferredSize = CGSize(width: 150, height: 150); - photoNode.style.layoutPosition = CGPoint(x: 40 / 2.0, y: 40 / 2.0); - - let absoluteSpec = ASAbsoluteLayoutSpec(children: [photoNode, iconNode]) - - // ASAbsoluteLayoutSpec's .sizing property recreates the behavior of ASDK Layout API 1.0's "ASStaticLayoutSpec" - absoluteSpec.sizing = .sizeToFit - - return absoluteSpec; - } - -} - -extension FlexibleSeparatorSurroundingContent { - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - topSeparator.style.flexGrow = 1.0 - bottomSeparator.style.flexGrow = 1.0 - textNode.style.alignSelf = .center - - let verticalStackSpec = ASStackLayoutSpec.vertical() - verticalStackSpec.spacing = 20 - verticalStackSpec.justifyContent = .center - verticalStackSpec.children = [topSeparator, textNode, bottomSeparator] - - return ASInsetLayoutSpec(insets:UIEdgeInsets(top: 60, left: 0, bottom: 60, right: 0), child: verticalStackSpec) - } - -} diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/LayoutExampleNode.swift b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/LayoutExampleNode.swift deleted file mode 100644 index c113e07d37..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/LayoutExampleNode.swift +++ /dev/null @@ -1,274 +0,0 @@ -// -// LayoutExampleNode.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import AsyncDisplayKit - -class LayoutExampleNode: ASDisplayNode { - override required init() { - super.init() - automaticallyManagesSubnodes = true - backgroundColor = .white - } - - class func title() -> String { - assertionFailure("All layout example nodes must provide a title!") - return "" - } - - class func descriptionTitle() -> String? { - return nil - } -} - -class HeaderWithRightAndLeftItems : LayoutExampleNode { - let userNameNode = ASTextNode() - let postLocationNode = ASTextNode() - let postTimeNode = ASTextNode() - - required init() { - super.init() - - userNameNode.attributedText = NSAttributedString.attributedString(string: "hannahmbanana", fontSize: 20, color: .darkBlueColor()) - userNameNode.maximumNumberOfLines = 1 - userNameNode.truncationMode = .byTruncatingTail - - postLocationNode.attributedText = NSAttributedString.attributedString(string: "Sunset Beach, San Fransisco, CA", fontSize: 20, color: .lightBlueColor()) - postLocationNode.maximumNumberOfLines = 1 - postLocationNode.truncationMode = .byTruncatingTail - - postTimeNode.attributedText = NSAttributedString.attributedString(string: "30m", fontSize: 20, color: .lightGray) - postTimeNode.maximumNumberOfLines = 1 - postTimeNode.truncationMode = .byTruncatingTail - } - - override class func title() -> String { - return "Header with left and right justified text" - } - - override class func descriptionTitle() -> String? { - return "try rotating me!" - } -} - -class PhotoWithInsetTextOverlay : LayoutExampleNode { - let photoNode = ASNetworkImageNode() - let titleNode = ASTextNode() - - required init() { - super.init() - - backgroundColor = .clear - - photoNode.url = URL(string: "http://texturegroup.org/static/images/layout-examples-photo-with-inset-text-overlay-photo.png") - photoNode.willDisplayNodeContentWithRenderingContext = { context, drawParameters in - let bounds = context.boundingBoxOfClipPath - UIBezierPath(roundedRect: bounds, cornerRadius: 10).addClip() - } - - titleNode.attributedText = NSAttributedString.attributedString(string: "family fall hikes", fontSize: 16, color: .white) - titleNode.truncationAttributedText = NSAttributedString.attributedString(string: "...", fontSize: 16, color: .white) - titleNode.maximumNumberOfLines = 2 - titleNode.truncationMode = .byTruncatingTail - } - - override class func title() -> String { - return "Photo with inset text overlay" - } - - override class func descriptionTitle() -> String? { - return "try rotating me!" - } -} - -class PhotoWithOutsetIconOverlay : LayoutExampleNode { - let photoNode = ASNetworkImageNode() - let iconNode = ASNetworkImageNode() - - required init() { - super.init() - - photoNode.url = URL(string: "http://texturegroup.org/static/images/layout-examples-photo-with-outset-icon-overlay-photo.png") - - iconNode.url = URL(string: "http://texturegroup.org/static/images/layout-examples-photo-with-outset-icon-overlay-icon.png") - - iconNode.imageModificationBlock = { image in - let profileImageSize = CGSize(width: 60, height: 60) - return image.makeCircularImage(size: profileImageSize, borderWidth: 10) - } - } - - override class func title() -> String { - return "Photo with outset icon overlay" - } - - override class func descriptionTitle() -> String? { - return nil - } -} - -class FlexibleSeparatorSurroundingContent : LayoutExampleNode { - let topSeparator = ASImageNode() - let bottomSeparator = ASImageNode() - let textNode = ASTextNode() - - required init() { - super.init() - - topSeparator.image = UIImage.as_resizableRoundedImage(withCornerRadius: 1.0, cornerColor: .black, fill: .black) - - textNode.attributedText = NSAttributedString.attributedString(string: "this is a long text node", fontSize: 16, color: .black) - - bottomSeparator.image = UIImage.as_resizableRoundedImage(withCornerRadius: 1.0, cornerColor: .black, fill: .black) - } - - override class func title() -> String { - return "Top and bottom cell separator lines" - } - - override class func descriptionTitle() -> String? { - return "try rotating me!" - } -} - -class CornerLayoutSample : PhotoWithOutsetIconOverlay { - let photoNode1 = ASImageNode() - let photoNode2 = ASImageNode() - let dotNode = ASImageNode() - let badgeTextNode = ASTextNode() - let badgeImageNode = ASImageNode() - - struct ImageSize { - static let avatar = CGSize(width: 100, height: 100) - static let icon = CGSize(width: 26, height: 26) - } - - struct ImageColor { - static let avatar = UIColor.lightGray - static let icon = UIColor.red - } - - required init() { - super.init() - - let avatarImage = UIImage.draw(size: ImageSize.avatar, fillColor: ImageColor.avatar) { () -> UIBezierPath in - return UIBezierPath(roundedRect: CGRect(origin: CGPoint.zero, size: ImageSize.avatar), cornerRadius: ImageSize.avatar.width / 20) - } - - let iconImage = UIImage.draw(size: ImageSize.icon, fillColor: ImageColor.icon) { () -> UIBezierPath in - return UIBezierPath(ovalIn: CGRect(origin: CGPoint.zero, size: ImageSize.icon)) - } - - photoNode1.image = avatarImage - photoNode2.image = avatarImage - dotNode.image = iconImage - - badgeTextNode.attributedText = NSAttributedString.attributedString(string: " 999+ ", fontSize: 20, color: .white) - - badgeImageNode.image = UIImage.as_resizableRoundedImage(withCornerRadius: 12, cornerColor: .clear, fill: .red) - } - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - photoNode.style.preferredSize = ImageSize.avatar - iconNode.style.preferredSize = ImageSize.icon - - let badgeSpec = ASBackgroundLayoutSpec(child: badgeTextNode, background: badgeImageNode) - let cornerSpec1 = ASCornerLayoutSpec(child: photoNode1, corner: dotNode, location: .topRight) - let cornerSpec2 = ASCornerLayoutSpec(child: photoNode2, corner: badgeSpec, location: .topRight) - let cornerSpec3 = ASCornerLayoutSpec(child: photoNode, corner: iconNode, location: .topRight) - - cornerSpec1.offset = CGPoint(x: -3, y: 3) - - let stackSpec = ASStackLayoutSpec.vertical() - stackSpec.spacing = 40 - stackSpec.children = [cornerSpec1, cornerSpec2, cornerSpec3] - - return stackSpec - } - - override class func title() -> String { - return "Declarative way for Corner image Layout" - } - - override class func descriptionTitle() -> String? { - return nil - } -} - -class UserProfileSample : LayoutExampleNode { - - let badgeNode = ASImageNode() - let avatarNode = ASImageNode() - let usernameNode = ASTextNode() - let subtitleNode = ASTextNode() - - struct ImageSize { - static let avatar = CGSize(width: 44, height: 44) - static let badge = CGSize(width: 15, height: 15) - } - - struct ImageColor { - static let avatar = UIColor.lightGray - static let badge = UIColor.red - } - - required init() { - super.init() - - avatarNode.image = UIImage.draw(size: ImageSize.avatar, fillColor: ImageColor.avatar) { () -> UIBezierPath in - return UIBezierPath(ovalIn: CGRect(origin: CGPoint.zero, size: ImageSize.avatar)) - } - - badgeNode.image = UIImage.draw(size: ImageSize.badge, fillColor: ImageColor.badge) { () -> UIBezierPath in - return UIBezierPath(ovalIn: CGRect(origin: CGPoint.zero, size: ImageSize.badge)) - } - - makeSingleLine(for: usernameNode, with: "Hello world", fontSize: 17, textColor: .black) - makeSingleLine(for: subtitleNode, with: "This is a long long subtitle, with a long long appended string.", fontSize: 14, textColor: .lightGray) - } - - private func makeSingleLine(for node: ASTextNode, with text: String, fontSize: CGFloat, textColor: UIColor) { - node.attributedText = NSAttributedString.attributedString(string: text, fontSize: fontSize, color: textColor) - node.maximumNumberOfLines = 1 - } - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - let avatarBox = ASCornerLayoutSpec(child: avatarNode, corner: badgeNode, location: .bottomRight) - avatarBox.offset = CGPoint(x: -6, y: -6) - - let textBox = ASStackLayoutSpec.vertical() - textBox.justifyContent = .spaceAround - textBox.children = [usernameNode, subtitleNode] - - let profileBox = ASStackLayoutSpec.horizontal() - profileBox.spacing = 10 - profileBox.children = [avatarBox, textBox] - - // Apply text truncation - let elems: [ASLayoutElement] = [usernameNode, subtitleNode, textBox, profileBox] - for elem in elems { - elem.style.flexShrink = 1 - } - - let insetBox = ASInsetLayoutSpec( - insets: UIEdgeInsets(top: 120, left: 20, bottom: CGFloat.infinity, right: 20), - child: profileBox - ) - - return insetBox - } - - override class func title() -> String { - return "Common user profile layout." - } - - override class func descriptionTitle() -> String? { - return "For corner image layout and text truncation." - } - -} diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/LayoutExampleViewController.swift b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/LayoutExampleViewController.swift deleted file mode 100644 index 25a391694f..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/LayoutExampleViewController.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// LayoutExampleViewController.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import AsyncDisplayKit - -class LayoutExampleViewController: ASViewController { - - let customNode: LayoutExampleNode - - init(layoutExampleType: LayoutExampleNode.Type) { - customNode = layoutExampleType.init() - - super.init(node: ASDisplayNode()) - self.title = "Layout Example" - - self.node.addSubnode(customNode) - let needsOnlyYCentering = (layoutExampleType.isEqual(HeaderWithRightAndLeftItems.self) || layoutExampleType.isEqual(FlexibleSeparatorSurroundingContent.self)) - - self.node.backgroundColor = needsOnlyYCentering ? .lightGray : .white - - self.node.layoutSpecBlock = { [weak self] node, constrainedSize in - guard let customNode = self?.customNode else { return ASLayoutSpec() } - return ASCenterLayoutSpec(centeringOptions: needsOnlyYCentering ? .Y : .XY, - sizingOptions: .minimumXY, - child: customNode) - } - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } -} diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/OverviewCellNode.swift b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/OverviewCellNode.swift deleted file mode 100644 index e6e511b62d..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/OverviewCellNode.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// OverviewCellNode.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import AsyncDisplayKit - -class OverviewCellNode: ASCellNode { - - let layoutExampleType: LayoutExampleNode.Type - - fileprivate let titleNode = ASTextNode() - fileprivate let descriptionNode = ASTextNode() - - init(layoutExampleType le: LayoutExampleNode.Type) { - layoutExampleType = le - - super.init() - self.automaticallyManagesSubnodes = true - - titleNode.attributedText = NSAttributedString.attributedString(string: layoutExampleType.title(), fontSize: 16, color: .black) - descriptionNode.attributedText = NSAttributedString.attributedString(string: layoutExampleType.descriptionTitle(), fontSize: 12, color: .lightGray) - } - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - let verticalStackSpec = ASStackLayoutSpec.vertical() - verticalStackSpec.alignItems = .start - verticalStackSpec.spacing = 5.0 - verticalStackSpec.children = [titleNode, descriptionNode] - - return ASInsetLayoutSpec(insets: UIEdgeInsets(top: 10, left: 16, bottom: 10, right: 10), child: verticalStackSpec) - } - -} diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/OverviewViewController.swift b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/OverviewViewController.swift deleted file mode 100644 index c43856f11a..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/OverviewViewController.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// OverviewViewController.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import AsyncDisplayKit - -class OverviewViewController: ASViewController { - let tableNode = ASTableNode() - let layoutExamples: [LayoutExampleNode.Type] - - init() { - layoutExamples = [ - HeaderWithRightAndLeftItems.self, - PhotoWithInsetTextOverlay.self, - PhotoWithOutsetIconOverlay.self, - FlexibleSeparatorSurroundingContent.self, - CornerLayoutSample.self, - UserProfileSample.self - ] - - super.init(node: tableNode) - - self.title = "Layout Examples" - self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) - tableNode.delegate = self - tableNode.dataSource = self - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - - if let indexPath = tableNode.indexPathForSelectedRow { - tableNode.deselectRow(at: indexPath, animated: true) - } - } - -} - -extension OverviewViewController: ASTableDataSource { - func tableNode(_ tableNode: ASTableNode, numberOfRowsInSection section: Int) -> Int { - return layoutExamples.count - } - - func tableNode(_ tableNode: ASTableNode, nodeForRowAt indexPath: IndexPath) -> ASCellNode { - return OverviewCellNode(layoutExampleType: layoutExamples[indexPath.row]) - } -} - -extension OverviewViewController: ASTableDelegate { - func tableNode(_ tableNode: ASTableNode, didSelectRowAt indexPath: IndexPath) { - let layoutExampleType = (tableNode.nodeForRow(at: indexPath) as! OverviewCellNode).layoutExampleType - let detail = LayoutExampleViewController(layoutExampleType: layoutExampleType) - self.navigationController?.pushViewController(detail, animated: true) - } -} diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/Utilities.swift b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/Utilities.swift deleted file mode 100644 index f235be8166..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples-Swift/Sample/Utilities.swift +++ /dev/null @@ -1,99 +0,0 @@ -// -// Utilities.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit -import Foundation - -extension UIColor { - - static func darkBlueColor() -> UIColor { - return UIColor(red: 18.0/255.0, green: 86.0/255.0, blue: 136.0/255.0, alpha: 1.0) - } - - static func lightBlueColor() -> UIColor { - return UIColor(red: 0.0, green: 122.0/255.0, blue: 1.0, alpha: 1.0) - } - - static func duskColor() -> UIColor { - return UIColor(red: 255/255.0, green: 181/255.0, blue: 68/255.0, alpha: 1.0) - } - - static func customOrangeColor() -> UIColor { - return UIColor(red: 40/255.0, green: 43/255.0, blue: 53/255.0, alpha: 1.0) - } - -} - -extension UIImage { - - func makeCircularImage(size: CGSize, borderWidth width: CGFloat) -> UIImage { - // make a CGRect with the image's size - let circleRect = CGRect(origin: .zero, size: size) - - // begin the image context since we're not in a drawRect: - UIGraphicsBeginImageContextWithOptions(circleRect.size, false, 0) - - // create a UIBezierPath circle - let circle = UIBezierPath(roundedRect: circleRect, cornerRadius: circleRect.size.width * 0.5) - - // clip to the circle - circle.addClip() - - UIColor.white.set() - circle.fill() - - // draw the image in the circleRect *AFTER* the context is clipped - self.draw(in: circleRect) - - // create a border (for white background pictures) - if width > 0 { - circle.lineWidth = width; - UIColor.white.set() - circle.stroke() - } - - // get an image from the image context - let roundedImage = UIGraphicsGetImageFromCurrentImageContext(); - - // end the image context since we're not in a drawRect: - UIGraphicsEndImageContext(); - - return roundedImage ?? self - } - - class func draw(size: CGSize, fillColor: UIColor, shapeClosure: () -> UIBezierPath) -> UIImage { - UIGraphicsBeginImageContext(size) - - let path = shapeClosure() - path.addClip() - - fillColor.setFill() - path.fill() - - let image = UIGraphicsGetImageFromCurrentImageContext() - UIGraphicsEndImageContext() - - return image! - } -} - -extension NSAttributedString { - - static func attributedString(string: String?, fontSize size: CGFloat, color: UIColor?) -> NSAttributedString? { - guard let string = string else { return nil } - - let attributes = [NSForegroundColorAttributeName: color ?? UIColor.black, - NSFontAttributeName: UIFont.boldSystemFont(ofSize: size)] - - let attributedString = NSMutableAttributedString(string: string, attributes: attributes) - - return attributedString - } - -} diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Podfile b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Podfile deleted file mode 100644 index 08d1b7add6..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Podfile +++ /dev/null @@ -1,6 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end - diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/AppDelegate.h deleted file mode 100644 index d5c7194563..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/AppDelegate.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder -@property (strong, nonatomic) UIWindow *window; -@end - diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/AppDelegate.m deleted file mode 100644 index 73fc27af6e..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/AppDelegate.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" -#import "OverviewViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[OverviewViewController new]]; - [self.window makeKeyAndVisible]; - - [[UINavigationBar appearance] setBarTintColor:[UIColor colorWithRed:47/255.0 green:184/255.0 blue:253/255.0 alpha:1.0]]; - [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; - [[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];; - - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/Base.lproj/LaunchScreen.storyboard b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f4fc7f7736..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/Info.plist deleted file mode 100644 index 6105445463..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/Info.plist +++ /dev/null @@ -1,43 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/LayoutExampleNodes.h b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/LayoutExampleNodes.h deleted file mode 100644 index 484ba5d418..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/LayoutExampleNodes.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// LayoutExampleNodes.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface LayoutExampleNode : ASDisplayNode -+ (NSString *)title; -+ (NSString *)descriptionTitle; -@end - -@interface HeaderWithRightAndLeftItems : LayoutExampleNode -@end - -@interface PhotoWithInsetTextOverlay : LayoutExampleNode -@end - -@interface PhotoWithOutsetIconOverlay : LayoutExampleNode -@end - -@interface FlexibleSeparatorSurroundingContent : LayoutExampleNode -@end - -@interface CornerLayoutExample : PhotoWithOutsetIconOverlay -@end - -@interface UserProfileSample : LayoutExampleNode -@end diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/LayoutExampleNodes.m b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/LayoutExampleNodes.m deleted file mode 100644 index 5d9d63663f..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/LayoutExampleNodes.m +++ /dev/null @@ -1,461 +0,0 @@ -// -// LayoutExampleNodes.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "LayoutExampleNodes.h" - -#import - -#import "Utilities.h" - -@interface HeaderWithRightAndLeftItems () -@property (nonatomic, strong) ASTextNode *usernameNode; -@property (nonatomic, strong) ASTextNode *postLocationNode; -@property (nonatomic, strong) ASTextNode *postTimeNode; -@end - -@interface PhotoWithInsetTextOverlay () -@property (nonatomic, strong) ASNetworkImageNode *photoNode; -@property (nonatomic, strong) ASTextNode *titleNode; -@end - -@interface PhotoWithOutsetIconOverlay () -@property (nonatomic, strong) ASNetworkImageNode *photoNode; -@property (nonatomic, strong) ASNetworkImageNode *iconNode; -@end - -@interface FlexibleSeparatorSurroundingContent () -@property (nonatomic, strong) ASImageNode *topSeparator; -@property (nonatomic, strong) ASImageNode *bottomSeparator; -@property (nonatomic, strong) ASTextNode *textNode; -@end - -@implementation HeaderWithRightAndLeftItems - -+ (NSString *)title -{ - return @"Header with left and right justified text"; -} - -+ (NSString *)descriptionTitle -{ - return @"try rotating me!"; -} - -- (instancetype)init -{ - self = [super init]; - - if (self) { - _usernameNode = [[ASTextNode alloc] init]; - _usernameNode.attributedText = [NSAttributedString attributedStringWithString:@"hannahmbanana" - fontSize:20 - color:[UIColor darkBlueColor]]; - _usernameNode.maximumNumberOfLines = 1; - _usernameNode.truncationMode = NSLineBreakByTruncatingTail; - - _postLocationNode = [[ASTextNode alloc] init]; - _postLocationNode.maximumNumberOfLines = 1; - _postLocationNode.attributedText = [NSAttributedString attributedStringWithString:@"Sunset Beach, San Fransisco, CA" - fontSize:20 - color:[UIColor lightBlueColor]]; - _postLocationNode.maximumNumberOfLines = 1; - _postLocationNode.truncationMode = NSLineBreakByTruncatingTail; - - _postTimeNode = [[ASTextNode alloc] init]; - _postTimeNode.attributedText = [NSAttributedString attributedStringWithString:@"30m" - fontSize:20 - color:[UIColor lightGrayColor]]; - _postLocationNode.maximumNumberOfLines = 1; - _postLocationNode.truncationMode = NSLineBreakByTruncatingTail; - } - - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - - ASStackLayoutSpec *nameLocationStack = [ASStackLayoutSpec verticalStackLayoutSpec]; - nameLocationStack.style.flexShrink = 1.0; - nameLocationStack.style.flexGrow = 1.0; - - if (_postLocationNode.attributedText) { - nameLocationStack.children = @[_usernameNode, _postLocationNode]; - } else { - nameLocationStack.children = @[_usernameNode]; - } - - ASStackLayoutSpec *headerStackSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:40 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsCenter - children:@[nameLocationStack, _postTimeNode]]; - - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(0, 10, 0, 10) child:headerStackSpec]; -} - -@end - - -@implementation PhotoWithInsetTextOverlay - -+ (NSString *)title -{ - return @"Photo with inset text overlay"; -} - -+ (NSString *)descriptionTitle -{ - return @"try rotating me!"; -} - -- (instancetype)init -{ - self = [super init]; - - if (self) { - self.backgroundColor = [UIColor clearColor]; - - _photoNode = [[ASNetworkImageNode alloc] init]; - _photoNode.URL = [NSURL URLWithString:@"http://texturegroup.org/static/images/layout-examples-photo-with-inset-text-overlay-photo.png"]; - _photoNode.willDisplayNodeContentWithRenderingContext = ^(CGContextRef context, id drawParameters) { - CGRect bounds = CGContextGetClipBoundingBox(context); - [[UIBezierPath bezierPathWithRoundedRect:bounds cornerRadius:10] addClip]; - }; - - _titleNode = [[ASTextNode alloc] init]; - _titleNode.maximumNumberOfLines = 2; - _titleNode.truncationMode = NSLineBreakByTruncatingTail; - _titleNode.truncationAttributedText = [NSAttributedString attributedStringWithString:@"..." fontSize:16 color:[UIColor whiteColor]]; - _titleNode.attributedText = [NSAttributedString attributedStringWithString:@"family fall hikes" fontSize:16 color:[UIColor whiteColor]]; - } - - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - CGFloat photoDimension = constrainedSize.max.width / 4.0; - _photoNode.style.preferredSize = CGSizeMake(photoDimension, photoDimension); - - // INFINITY is used to make the inset unbounded - UIEdgeInsets insets = UIEdgeInsetsMake(INFINITY, 12, 12, 12); - ASInsetLayoutSpec *textInsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:insets child:_titleNode]; - - return [ASOverlayLayoutSpec overlayLayoutSpecWithChild:_photoNode overlay:textInsetSpec];; -} - -@end - - -@implementation PhotoWithOutsetIconOverlay - -+ (NSString *)title -{ - return @"Photo with outset icon overlay"; -} - -- (instancetype)init -{ - self = [super init]; - - if (self) { - _photoNode = [[ASNetworkImageNode alloc] init]; - _photoNode.URL = [NSURL URLWithString:@"http://texturegroup.org/static/images/layout-examples-photo-with-outset-icon-overlay-photo.png"]; - - _iconNode = [[ASNetworkImageNode alloc] init]; - _iconNode.URL = [NSURL URLWithString:@"http://texturegroup.org/static/images/layout-examples-photo-with-outset-icon-overlay-icon.png"]; - - [_iconNode setImageModificationBlock:^UIImage *(UIImage *image) { // FIXME: in framework autocomplete for setImageModificationBlock line seems broken - CGSize profileImageSize = CGSizeMake(60, 60); - return [image makeCircularImageWithSize:profileImageSize withBorderWidth:10]; - }]; - } - - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - _iconNode.style.preferredSize = CGSizeMake(40, 40); - _iconNode.style.layoutPosition = CGPointMake(150, 0); - - _photoNode.style.preferredSize = CGSizeMake(150, 150); - _photoNode.style.layoutPosition = CGPointMake(40 / 2.0, 40 / 2.0); - - ASAbsoluteLayoutSpec *absoluteSpec = [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[_photoNode, _iconNode]]; - - // ASAbsoluteLayoutSpec's .sizing property recreates the behavior of ASDK Layout API 1.0's "ASStaticLayoutSpec" - absoluteSpec.sizing = ASAbsoluteLayoutSpecSizingSizeToFit; - - return absoluteSpec; -} - - - -@end - - -@implementation FlexibleSeparatorSurroundingContent - -+ (NSString *)title -{ - return @"Top and bottom cell separator lines"; -} - -+ (NSString *)descriptionTitle -{ - return @"try rotating me!"; -} - -- (instancetype)init -{ - self = [super init]; - - if (self) { - self.backgroundColor = [UIColor whiteColor]; - - _topSeparator = [[ASImageNode alloc] init]; - _topSeparator.image = [UIImage as_resizableRoundedImageWithCornerRadius:1.0 cornerColor:[UIColor blackColor] fillColor:[UIColor blackColor]]; - - _textNode = [[ASTextNode alloc] init]; - _textNode.attributedText = [NSAttributedString attributedStringWithString:@"this is a long text node" - fontSize:16 - color:[UIColor blackColor]]; - - _bottomSeparator = [[ASImageNode alloc] init]; - _bottomSeparator.image = [UIImage as_resizableRoundedImageWithCornerRadius:1.0 cornerColor:[UIColor blackColor] fillColor:[UIColor blackColor]]; - } - - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - _topSeparator.style.flexGrow = 1.0; - _bottomSeparator.style.flexGrow = 1.0; - _textNode.style.alignSelf = ASStackLayoutAlignSelfCenter; - - ASStackLayoutSpec *verticalStackSpec = [ASStackLayoutSpec verticalStackLayoutSpec]; - verticalStackSpec.spacing = 20; - verticalStackSpec.justifyContent = ASStackLayoutJustifyContentCenter; - verticalStackSpec.children = @[_topSeparator, _textNode, _bottomSeparator]; - - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(60, 0, 60, 0) child:verticalStackSpec]; -} - -@end - -@interface CornerLayoutExample () -@property (nonatomic, strong) ASImageNode *dotNode; -@property (nonatomic, strong) ASImageNode *photoNode1; -@property (nonatomic, strong) ASTextNode *badgeTextNode; -@property (nonatomic, strong) ASImageNode *badgeImageNode; -@property (nonatomic, strong) ASImageNode *photoNode2; -@end - -@implementation CornerLayoutExample - -static CGFloat const kSampleAvatarSize = 100; -static CGFloat const kSampleIconSize = 26; -static CGFloat const kSampleBadgeCornerRadius = 12; - -+ (NSString *)title -{ - return @"Declarative way for Corner image Layout"; -} - -+ (NSString *)descriptionTitle -{ - return nil; -} - -- (instancetype)init -{ - self = [super init]; - if (self) { - UIImage *avatarImage = [self avatarImageWithSize:CGSizeMake(kSampleAvatarSize, kSampleAvatarSize)]; - UIImage *cornerImage = [self cornerImageWithSize:CGSizeMake(kSampleIconSize, kSampleIconSize)]; - - NSAttributedString *numberText = [NSAttributedString attributedStringWithString:@" 999+ " fontSize:20 color:UIColor.whiteColor]; - - _dotNode = [ASImageNode new]; - _dotNode.image = cornerImage; - - _photoNode1 = [ASImageNode new]; - _photoNode1.image = avatarImage; - - _badgeTextNode = [ASTextNode new]; - _badgeTextNode.attributedText = numberText; - - _badgeImageNode = [ASImageNode new]; - _badgeImageNode.image = [UIImage as_resizableRoundedImageWithCornerRadius:kSampleBadgeCornerRadius - cornerColor:UIColor.clearColor - fillColor:UIColor.redColor]; - - _photoNode2 = [ASImageNode new]; - _photoNode2.image = avatarImage; - } - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - - ASBackgroundLayoutSpec *badgeSpec = [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild:_badgeTextNode - background:_badgeImageNode]; - - ASCornerLayoutSpec *cornerSpec1 = [ASCornerLayoutSpec cornerLayoutSpecWithChild:_photoNode1 corner:_dotNode location:ASCornerLayoutLocationTopRight]; - cornerSpec1.offset = CGPointMake(-3, 3); - - ASCornerLayoutSpec *cornerSpec2 = [ASCornerLayoutSpec cornerLayoutSpecWithChild:_photoNode2 corner:badgeSpec location:ASCornerLayoutLocationTopRight]; - - self.photoNode.style.preferredSize = CGSizeMake(kSampleAvatarSize, kSampleAvatarSize); - self.iconNode.style.preferredSize = CGSizeMake(kSampleIconSize, kSampleIconSize); - - ASCornerLayoutSpec *cornerSpec3 = [ASCornerLayoutSpec cornerLayoutSpecWithChild:self.photoNode corner:self.iconNode location:ASCornerLayoutLocationTopRight]; - - ASStackLayoutSpec *stackSpec = [ASStackLayoutSpec verticalStackLayoutSpec]; - stackSpec.spacing = 40; - stackSpec.children = @[cornerSpec1, cornerSpec2, cornerSpec3]; - - return stackSpec; -} - -- (UIImage *)avatarImageWithSize:(CGSize)size -{ - return [UIImage imageWithSize:size fillColor:UIColor.lightGrayColor shapeBlock:^UIBezierPath *{ - CGRect rect = (CGRect){ CGPointZero, size }; - return [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:MIN(size.width, size.height) / 20]; - }]; -} - -- (UIImage *)cornerImageWithSize:(CGSize)size -{ - return [UIImage imageWithSize:size fillColor:UIColor.redColor shapeBlock:^UIBezierPath *{ - return [UIBezierPath bezierPathWithOvalInRect:(CGRect){ CGPointZero, size }]; - }]; -} - -@end - - -@interface UserProfileSample () -@property (nonatomic, strong) ASImageNode *badgeNode; -@property (nonatomic, strong) ASImageNode *avatarNode; -@property (nonatomic, strong) ASTextNode *usernameNode; -@property (nonatomic, strong) ASTextNode *subtitleNode; -@property (nonatomic, assign) CGFloat photoSizeValue; -@property (nonatomic, assign) CGFloat iconSizeValue; -@end - -@implementation UserProfileSample - -+ (NSString *)title -{ - return @"Common user profile layout."; -} - -+ (NSString *)descriptionTitle -{ - return @"For corner image layout and text truncation."; -} - -- (instancetype)init -{ - self = [super init]; - if (self) { - _photoSizeValue = 44; - _iconSizeValue = 15; - - CGSize iconSize = CGSizeMake(_iconSizeValue, _iconSizeValue); - CGSize photoSize = CGSizeMake(_photoSizeValue, _photoSizeValue); - - _badgeNode = [ASImageNode new]; - _badgeNode.style.preferredSize = iconSize; - _badgeNode.image = [UIImage imageWithSize:iconSize fillColor:UIColor.redColor shapeBlock:^UIBezierPath *{ - return [UIBezierPath bezierPathWithOvalInRect:(CGRect){ CGPointZero, iconSize }]; - }]; - - _avatarNode = [ASImageNode new]; - _avatarNode.style.preferredSize = photoSize; - _avatarNode.image = [UIImage imageWithSize:photoSize fillColor:UIColor.lightGrayColor shapeBlock:^UIBezierPath *{ - return [UIBezierPath bezierPathWithOvalInRect:(CGRect){ CGPointZero, photoSize }]; - }]; - - _usernameNode = [ASTextNode new]; - _usernameNode.attributedText = [NSAttributedString attributedStringWithString:@"Hello World" fontSize:17 color:UIColor.blackColor]; - _usernameNode.maximumNumberOfLines = 1; - - _subtitleNode = [ASTextNode new]; - _subtitleNode.attributedText = [NSAttributedString attributedStringWithString:@"This is a long long subtitle, with a long long appended string." fontSize:14 color:UIColor.lightGrayColor]; - _subtitleNode.maximumNumberOfLines = 1; - } - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - // Apply avatar with badge - // Normally, avatar's box size is the only photo size and it will not include the badge size. - // Otherwise, use includeCornerForSizeCalculation property to increase the box's size if needed. - ASCornerLayoutSpec *avatarBox = [ASCornerLayoutSpec new]; - avatarBox.child = _avatarNode; - avatarBox.corner = _badgeNode; - avatarBox.cornerLocation = ASCornerLayoutLocationBottomRight; - avatarBox.offset = CGPointMake(-6, -6); - - ASStackLayoutSpec *textBox = [ASStackLayoutSpec verticalStackLayoutSpec]; - textBox.justifyContent = ASStackLayoutJustifyContentSpaceAround; - textBox.children = @[_usernameNode, _subtitleNode]; - - ASStackLayoutSpec *profileBox = [ASStackLayoutSpec horizontalStackLayoutSpec]; - profileBox.spacing = 10; - profileBox.children = @[avatarBox, textBox]; - - // Apply text truncation. - NSArray *elems = @[_usernameNode, _subtitleNode, textBox, profileBox]; - for (id elem in elems) { - elem.style.flexShrink = 1; - } - - ASInsetLayoutSpec *profileInsetBox = [ASInsetLayoutSpec new]; - profileInsetBox.insets = UIEdgeInsetsMake(120, 20, INFINITY, 20); - profileInsetBox.child = profileBox; - - return profileInsetBox; -} - -@end - -@implementation LayoutExampleNode - -+ (NSString *)title -{ - NSAssert(NO, @"All layout example nodes must provide a title!"); - return nil; -} - -+ (NSString *)descriptionTitle -{ - return nil; -} - -- (instancetype)init -{ - self = [super init]; - if (self) { - self.automaticallyManagesSubnodes = YES; - self.backgroundColor = [UIColor whiteColor]; - } - return self; -} - -@end - diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/LayoutExampleViewController.h b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/LayoutExampleViewController.h deleted file mode 100644 index d087bcc77f..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/LayoutExampleViewController.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// LayoutExampleViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface LayoutExampleViewController : ASViewController -- (instancetype)initWithLayoutExampleClass:(Class)layoutExampleClass NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithNode:(ASDisplayNode *)node NS_UNAVAILABLE; -@end diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/LayoutExampleViewController.m b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/LayoutExampleViewController.m deleted file mode 100644 index 71607a6f87..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/LayoutExampleViewController.m +++ /dev/null @@ -1,47 +0,0 @@ -// -// LayoutExampleViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "LayoutExampleViewController.h" -#import "LayoutExampleNodes.h" - -@interface LayoutExampleViewController () -@property (nonatomic, strong) LayoutExampleNode *customNode; -@end - -@implementation LayoutExampleViewController - -- (instancetype)initWithLayoutExampleClass:(Class)layoutExampleClass -{ - NSAssert([layoutExampleClass isSubclassOfClass:[LayoutExampleNode class]], @"Must pass a subclass of LayoutExampleNode."); - - self = [super initWithNode:[ASDisplayNode new]]; - - if (self) { - self.title = @"Layout Example"; - - _customNode = [layoutExampleClass new]; - [self.node addSubnode:_customNode]; - - BOOL needsOnlyYCentering = [layoutExampleClass isEqual:[HeaderWithRightAndLeftItems class]] || - [layoutExampleClass isEqual:[FlexibleSeparatorSurroundingContent class]]; - - self.node.backgroundColor = needsOnlyYCentering ? [UIColor lightGrayColor] : [UIColor whiteColor]; - - __weak __typeof(self) weakself = self; - self.node.layoutSpecBlock = ^ASLayoutSpec*(__kindof ASDisplayNode * _Nonnull node, ASSizeRange constrainedSize) { - return [ASCenterLayoutSpec centerLayoutSpecWithCenteringOptions:needsOnlyYCentering ? ASCenterLayoutSpecCenteringY : ASCenterLayoutSpecCenteringXY - sizingOptions:ASCenterLayoutSpecSizingOptionMinimumXY - child:weakself.customNode]; - }; - } - - return self; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/OverviewCellNode.h b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/OverviewCellNode.h deleted file mode 100644 index 7a98c031cd..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/OverviewCellNode.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// OverviewCellNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface OverviewCellNode : ASCellNode - -@property (nonatomic, strong) Class layoutExampleClass; - -- (instancetype)initWithLayoutExampleClass:(Class)layoutExampleClass NS_DESIGNATED_INITIALIZER; -- (instancetype)init NS_UNAVAILABLE; - -@end diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/OverviewCellNode.m b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/OverviewCellNode.m deleted file mode 100644 index 6cd4eb845f..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/OverviewCellNode.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// OverviewCellNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "OverviewCellNode.h" -#import "LayoutExampleNodes.h" -#import "Utilities.h" - -@interface OverviewCellNode () -@property (nonatomic, strong) ASTextNode *titleNode; -@property (nonatomic, strong) ASTextNode *descriptionNode; -@end - -@implementation OverviewCellNode - -- (instancetype)initWithLayoutExampleClass:(Class)layoutExampleClass -{ - self = [super init]; - if (self) { - self.automaticallyManagesSubnodes = YES; - - _layoutExampleClass = layoutExampleClass; - - _titleNode = [[ASTextNode alloc] init]; - _titleNode.attributedText = [NSAttributedString attributedStringWithString:[layoutExampleClass title] - fontSize:16 - color:[UIColor blackColor]]; - - _descriptionNode = [[ASTextNode alloc] init]; - _descriptionNode.attributedText = [NSAttributedString attributedStringWithString:[layoutExampleClass descriptionTitle] - fontSize:12 - color:[UIColor lightGrayColor]]; - } - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASStackLayoutSpec *verticalStackSpec = [ASStackLayoutSpec verticalStackLayoutSpec]; - verticalStackSpec.alignItems = ASStackLayoutAlignItemsStart; - verticalStackSpec.spacing = 5.0; - verticalStackSpec.children = @[self.titleNode, self.descriptionNode]; - - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(10, 16, 10, 10) child:verticalStackSpec]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/OverviewViewController.h b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/OverviewViewController.h deleted file mode 100644 index 83381429a3..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/OverviewViewController.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// OverviewViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - - -@interface OverviewViewController : ASViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/OverviewViewController.m b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/OverviewViewController.m deleted file mode 100644 index 9d9700f5e2..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/OverviewViewController.m +++ /dev/null @@ -1,77 +0,0 @@ -// -// OverviewViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "OverviewViewController.h" -#import "LayoutExampleNodes.h" -#import "LayoutExampleViewController.h" -#import "OverviewCellNode.h" - -@interface OverviewViewController () -@property (nonatomic, strong) NSArray *layoutExamples; -@property (nonatomic, strong) ASTableNode *tableNode; -@end - -@implementation OverviewViewController - -#pragma mark - Lifecycle Methods - -- (instancetype)init -{ - _tableNode = [ASTableNode new]; - self = [super initWithNode:_tableNode]; - - if (self) { - self.title = @"Layout Examples"; - self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]; - - _tableNode.delegate = self; - _tableNode.dataSource = self; - - _layoutExamples = @[[HeaderWithRightAndLeftItems class], - [PhotoWithInsetTextOverlay class], - [PhotoWithOutsetIconOverlay class], - [FlexibleSeparatorSurroundingContent class], - [CornerLayoutExample class], - [UserProfileSample class] - ]; - } - - return self; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - NSIndexPath *indexPath = _tableNode.indexPathForSelectedRow; - if (indexPath != nil) { - [_tableNode deselectRowAtIndexPath:indexPath animated:YES]; - } -} - -#pragma mark - ASTableDelegate, ASTableDataSource - -- (NSInteger)tableNode:(ASTableNode *)tableNode numberOfRowsInSection:(NSInteger)section -{ - return [_layoutExamples count]; -} - -- (ASCellNode *)tableNode:(ASTableNode *)tableNode nodeForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return [[OverviewCellNode alloc] initWithLayoutExampleClass:_layoutExamples[indexPath.row]]; -} - -- (void)tableNode:(ASTableNode *)tableNode didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - Class layoutExampleClass = [[tableNode nodeForRowAtIndexPath:indexPath] layoutExampleClass]; - LayoutExampleViewController *detail = [[LayoutExampleViewController alloc] initWithLayoutExampleClass:layoutExampleClass]; - [self.navigationController pushViewController:detail animated:YES]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/Utilities.h b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/Utilities.h deleted file mode 100644 index 5719a4ab85..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/Utilities.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// Utilities.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface UIColor (Additions) -+ (UIColor *)darkBlueColor; -+ (UIColor *)lightBlueColor; -@end - -@interface UIImage (Additions) -- (UIImage *)makeCircularImageWithSize:(CGSize)size withBorderWidth:(CGFloat)width; -+ (UIImage *)imageWithSize:(CGSize)size fillColor:(UIColor *)fillColor shapeBlock:(UIBezierPath *(^)(void))shapeBlock; -@end - -@interface NSAttributedString (Additions) -+ (NSAttributedString *)attributedStringWithString:(NSString *)string fontSize:(CGFloat)size color:(UIColor *)color; -@end diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/Utilities.m b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/Utilities.m deleted file mode 100644 index d999ddd32d..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/Utilities.m +++ /dev/null @@ -1,99 +0,0 @@ -// -// Utilities.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "Utilities.h" - -#define StrokeRoundedImages 0 - -@implementation UIColor (Additions) - -+ (UIColor *)darkBlueColor -{ - return [UIColor colorWithRed:18.0/255.0 green:86.0/255.0 blue:136.0/255.0 alpha:1.0]; -} - -+ (UIColor *)lightBlueColor -{ - return [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0]; -} - -@end - -@implementation UIImage (Additions) - -- (UIImage *)makeCircularImageWithSize:(CGSize)size withBorderWidth:(CGFloat)width -{ - // make a CGRect with the image's size - CGRect circleRect = (CGRect) {CGPointZero, size}; - - // begin the image context since we're not in a drawRect: - UIGraphicsBeginImageContextWithOptions(circleRect.size, NO, 0); - - // create a UIBezierPath circle - UIBezierPath *circle = [UIBezierPath bezierPathWithRoundedRect:circleRect cornerRadius:circleRect.size.width/2]; - - // clip to the circle - [circle addClip]; - - [[UIColor whiteColor] set]; - [circle fill]; - - // draw the image in the circleRect *AFTER* the context is clipped - [self drawInRect:circleRect]; - - // create a border (for white background pictures) - if (width > 0) { - circle.lineWidth = width; - [[UIColor whiteColor] set]; - [circle stroke]; - } - - // get an image from the image context - UIImage *roundedImage = UIGraphicsGetImageFromCurrentImageContext(); - - // end the image context since we're not in a drawRect: - UIGraphicsEndImageContext(); - - return roundedImage; -} - -+ (UIImage *)imageWithSize:(CGSize)size fillColor:(UIColor *)fillColor shapeBlock:(UIBezierPath *(^)(void))shapeBlock -{ - UIGraphicsBeginImageContext(size); - [fillColor setFill]; - - UIBezierPath *path = shapeBlock(); - [path addClip]; - [path fill]; - - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return image; -} - -@end - -@implementation NSAttributedString (Additions) - -+ (NSAttributedString *)attributedStringWithString:(NSString *)string fontSize:(CGFloat)size color:(nullable UIColor *)color -{ - if (string == nil) { - return nil; - } - - NSDictionary *attributes = @{NSForegroundColorAttributeName: color ? : [UIColor blackColor], - NSFontAttributeName: [UIFont boldSystemFontOfSize:size]}; - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string]; - [attributedString addAttributes:attributes range:NSMakeRange(0, string.length)]; - - return attributedString; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/main.m b/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/main.m deleted file mode 100644 index 0e5da05001..0000000000 --- a/submodules/AsyncDisplayKit/examples/LayoutSpecExamples/Sample/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/PagerNode/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples/PagerNode/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/PagerNode/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/PagerNode/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples/PagerNode/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/PagerNode/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/PagerNode/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples/PagerNode/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/PagerNode/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/PagerNode/Podfile b/submodules/AsyncDisplayKit/examples/PagerNode/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples/PagerNode/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/PagerNode/Sample/AppDelegate.h deleted file mode 100644 index 19db03c153..0000000000 --- a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/AppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/PagerNode/Sample/AppDelegate.m deleted file mode 100644 index f8437855b0..0000000000 --- a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/AppDelegate.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]]; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/PagerNode/Sample/Info.plist deleted file mode 100644 index fb4115c84c..0000000000 --- a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/PageNode.h b/submodules/AsyncDisplayKit/examples/PagerNode/Sample/PageNode.h deleted file mode 100644 index f4346289c5..0000000000 --- a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/PageNode.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// PageNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface PageNode : ASCellNode - -@end diff --git a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/PageNode.m b/submodules/AsyncDisplayKit/examples/PagerNode/Sample/PageNode.m deleted file mode 100644 index bedd46f0c0..0000000000 --- a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/PageNode.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// PageNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PageNode.h" - -@implementation PageNode - -- (CGSize)calculateSizeThatFits:(CGSize)constrainedSize -{ - return constrainedSize; -} - -- (void)didEnterPreloadState -{ - [super didEnterPreloadState]; - NSLog(@"didEnterPreloadState for node: %@", self); -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples/PagerNode/Sample/ViewController.h deleted file mode 100644 index 3af731c848..0000000000 --- a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : ASViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples/PagerNode/Sample/ViewController.m deleted file mode 100644 index b55fa343f9..0000000000 --- a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/ViewController.m +++ /dev/null @@ -1,73 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" - -#import - -#import "PageNode.h" - -static UIColor *randomColor() { - CGFloat hue = ( arc4random() % 256 / 256.0 ); // 0.0 to 1.0 - CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from white - CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from black - return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1]; -} - -@interface ViewController () - -@end - -@implementation ViewController - -- (instancetype)init -{ - self = [super initWithNode:[[ASPagerNode alloc] init]]; - if (self == nil) { - return self; - } - - self.title = @"Pages"; - self.node.dataSource = self; - - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Next" style:UIBarButtonItemStylePlain target:self action:@selector(scrollToNextPage:)]; - self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Previous" style:UIBarButtonItemStylePlain target:self action:@selector(scrollToPreviousPage:)]; - self.automaticallyAdjustsScrollViewInsets = NO; - return self; -} - -#pragma mark - Actions - -- (void)scrollToNextPage:(id)sender -{ - [self.node scrollToPageAtIndex:self.node.currentPageIndex+1 animated:YES]; -} - -- (void)scrollToPreviousPage:(id)sender -{ - [self.node scrollToPageAtIndex:self.node.currentPageIndex-1 animated:YES]; -} - -#pragma mark - ASPagerNodeDataSource - -- (NSInteger)numberOfPagesInPagerNode:(ASPagerNode *)pagerNode -{ - return 5; -} - -- (ASCellNodeBlock)pagerNode:(ASPagerNode *)pagerNode nodeBlockAtIndex:(NSInteger)index -{ - return ^{ - PageNode *page = [[PageNode alloc] init]; - page.backgroundColor = randomColor(); - return page; - }; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/main.m b/submodules/AsyncDisplayKit/examples/PagerNode/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples/PagerNode/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/README.md b/submodules/AsyncDisplayKit/examples/README.md deleted file mode 100644 index 76c71a75d0..0000000000 --- a/submodules/AsyncDisplayKit/examples/README.md +++ /dev/null @@ -1,232 +0,0 @@ -# Sample projects - -## Building - -Run `pod install` in each sample project directory to set up their -dependencies. - -## Example Catalog - -### ASCollectionView [ObjC] - -![ASCollectionView Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/ASCollectionView.png) - -Featuring: -- ASCollectionView with header/footer supplementary node support -- ASCollectionView batch API -- ASDelegateProxy - -### ASDKgram [ObjC] - -![ASDKgram Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/ASDKgram.png) - -### ASDKLayoutTransition [ObjC] - -![ASDKLayoutTransition Example App](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/ASDKLayoutTransition.gif) - -### ASDKTube [ObjC] - -![ASDKTube Example App](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/ASDKTube.gif) - -### ASMapNode [ObjC] - -![ASMapNode Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/ASMapNode.png) - -### ASTableViewStressTest [ObjC] - -![ASTableViewStressTest Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/ASTableViewStressTest.png) - -### ASViewController [ObjC] - -![ASViewController Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/ASViewController.png) - -Featuring: -- ASViewController -- ASTableView -- ASMultiplexImageNode -- ASLayoutSpec - -### AsyncDisplayKitOverview [ObjC] - -![AsyncDisplayKitOverview Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/AsyncDisplayKitOverview.png) - -### BackgroundPropertySetting [Swift] - -![BackgroundPropertySetting Example App gif](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/BackgroundPropertySetting.gif) - -Featuring: -- ASDK Swift compatibility -- ASViewController -- ASCollectionView -- thread affinity -- ASLayoutSpec - -### CarthageBuildTest -### CatDealsCollectionView [ObjC] - -![CatDealsCollectionView Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/CatDealsCollectionView.png) - -Featuring: -- ASCollectionView -- ASRangeTuningParameters -- Placeholder Images -- ASLayoutSpec - -### CollectionViewWithViewControllerCells [ObjC] - -![CollectionViewWithViewControllerCells Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/CollectionViewWithViewControllerCells.png) - -Featuring: -- custom collection view layout -- ASLayoutSpec -- ASMultiplexImageNode - -### CustomCollectionView [ObjC+Swift] - -![CustomCollectionView Example App gif](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/CustomCollectionView.git) - -Featuring: -- custom collection view layout -- ASCollectionView with sections - -### EditableText [ObjC] - -![EditableText Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/EditableText.png) - -Featuring: -- ASEditableTextNode - -### HorizontalwithinVerticalScrolling [ObjC] - -![HorizontalwithinVerticalScrolling Example App gif](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/HorizontalwithinVerticalScrolling.gif) - -Featuring: -- UIViewController with ASTableView -- ASCollectionView -- ASCellNode - -### Kittens [ObjC] - -![Kittens Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/Kittens.png) - -Featuring: -- UIViewController with ASTableView -- ASCellNodes with ASNetworkImageNode and ASTextNode - -### LayoutSpecPlayground [ObjC] - -![LayoutSpecPlayground Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/LayoutSpecPlayground.png) - -### Multiplex [ObjC] - -![Multiplex Example App](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/Multiplex.gif) - -Featuring: -- ASMultiplexImageNode (with artificial delay inserted) -- ASLayoutSpec - -### PagerNode [ObjC] - -![PagerNode Example App](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/PagerNode.gif) - -Featuring: -- ASPagerNode - -### Placeholders [ObjC] - -Featuring: -- ASDisplayNodes now have an overidable method -placeholderImage that lets you provide a custom UIImage to display while a node is displaying asyncronously. The default implementation of this method returns nil and thus does nothing. A provided example project also demonstrates using the placeholder API. - -### SocialAppLayout [ObjC] - -![SocialAppLayout Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/SocialAppLayout.png) - -Featuring: -- ASLayoutSpec -- UIViewController with ASTableView - -### Swift [Swift] - -![Swift Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/Swift.png) - -Featuring: -- ASViewController with ASTableNode - -### SynchronousConcurrency [ObjC] - -![SynchronousConcurrency Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/SynchronousConcurrency.png) - -Implementation of Synchronous Concurrency features for AsyncDisplayKit 2.0 - -This provides internal features on _ASAsyncTransaction and ASDisplayNode to facilitate -implementing public API that allows clients to choose if they would prefer to block -on the completion of unfinished rendering, rather than allow a placeholder state to -become visible. - -The internal features are: --[_ASAsyncTransaction waitUntilComplete] --[ASDisplayNode recursivelyEnsureDisplay] - -Also provided are two such implementations: --[ASCellNode setNeverShowPlaceholders:], which integrates with both Tables and Collections --[ASViewController setNeverShowPlaceholders:], which should work with Nav and Tab controllers. - -Lastly, on ASDisplayNode, a new property .shouldBypassEnsureDisplay allows individual node types -to exempt themselves from blocking the main thread on their display. - -By implementing the feature at the ASCellNode level rather than ASTableView & ASCollectionView, -developers can retain fine-grained control on display characteristics. For example, certain -cell types may be appropriate to display to the user with placeholders, whereas others may not. - -### SynchronousKittens [ObjC] - -### VerticalWithinHorizontalScrolling [ObjC] - -![VerticalWithinHorizontalScrolling Example App](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/VerticalWithinHorizontalScrolling.gif) - -Features: -- UIViewController containing ASPagerNode containing ASTableNodes - -### Videos [ObjC] - -![VideoTableView Example App gif](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/Videos.gif) - -Featuring: -- ASVideoNode - -### VideoTableView [ObjC] - -![VideoTableView Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/VideoTableView.png) - -Featuring: -- ASVideoNode -- ASTableView -- ASCellNode - -### LayoutSpecExamples [ObjC] - -![Layout Spec Example App Screenshot](https://github.com/AsyncDisplayKit/Documentation/raw/master/docs/static/images/example-app-screenshots/ASCornerLayoutSpec.png) - -Featuring: -- ASStackLayoutSpec -- ASInsetLayoutSpec -- ASOverlayLayoutSpec -- ASAbsoluteLayoutSpec -- ASBackgroundLayoutSpec -- ASCornerLayoutSpec - -There is an associated swift version app: LayoutSpecExamples-Swift with same logic implementation. - -## License - - This file provided by Facebook is for non-commercial testing and evaluation - purposes only. Facebook reserves all rights not expressly granted. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Podfile b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/AppDelegate.h deleted file mode 100644 index 19db03c153..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/AppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/AppDelegate.m deleted file mode 100644 index 73663a6919..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/AppDelegate.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]]; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 118c98f746..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/CommentsNode.h b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/CommentsNode.h deleted file mode 100644 index 422460fe9e..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/CommentsNode.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// CommentsNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface CommentsNode : ASControlNode - -- (instancetype)initWithCommentsCount:(NSInteger)comentsCount; - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/CommentsNode.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/CommentsNode.m deleted file mode 100644 index 96ba688881..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/CommentsNode.m +++ /dev/null @@ -1,62 +0,0 @@ -// -// CommentsNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "CommentsNode.h" -#import "TextStyles.h" - -@interface CommentsNode () -@property (nonatomic, strong) ASImageNode *iconNode; -@property (nonatomic, strong) ASTextNode *countNode; -@property (nonatomic, assign) NSInteger commentsCount; -@end - -@implementation CommentsNode - -- (instancetype)initWithCommentsCount:(NSInteger)comentsCount -{ - self = [super init]; - if (self) { - _commentsCount = comentsCount; - - _iconNode = [[ASImageNode alloc] init]; - _iconNode.image = [UIImage imageNamed:@"icon_comment.png"]; - [self addSubnode:_iconNode]; - - _countNode = [[ASTextNode alloc] init]; - if (_commentsCount > 0) { - _countNode.attributedText = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%zd", _commentsCount] attributes:[TextStyles cellControlStyle]]; - } - [self addSubnode:_countNode]; - - // make it tappable easily - self.hitTestSlop = UIEdgeInsetsMake(-10, -10, -10, -10); - } - - return self; - -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASStackLayoutSpec *mainStack = - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:6.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsCenter - children:@[_iconNode, _countNode]]; - - // Adjust size - mainStack.style.minWidth = ASDimensionMakeWithPoints(60.0); - mainStack.style.maxHeight = ASDimensionMakeWithPoints(40.0); - - return mainStack; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Info.plist deleted file mode 100644 index ed1c9acf9b..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Info.plist +++ /dev/null @@ -1,41 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/LikesNode.h b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/LikesNode.h deleted file mode 100644 index 1dbbc191e1..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/LikesNode.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// LikesNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface LikesNode : ASControlNode - -- (instancetype)initWithLikesCount:(NSInteger)likesCount; - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/LikesNode.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/LikesNode.m deleted file mode 100644 index cd5ade1db4..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/LikesNode.m +++ /dev/null @@ -1,75 +0,0 @@ -// -// LikesNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "LikesNode.h" -#import "TextStyles.h" - -@interface LikesNode () -@property (nonatomic, strong) ASImageNode *iconNode; -@property (nonatomic, strong) ASTextNode *countNode; -@property (nonatomic, assign) NSInteger likesCount; -@property (nonatomic, assign) BOOL liked; -@end - -@implementation LikesNode - -- (instancetype)initWithLikesCount:(NSInteger)likesCount -{ - self = [super init]; - if (self) { - _likesCount = likesCount; - _liked = (_likesCount > 0) ? [LikesNode getYesOrNo] : NO; - - _iconNode = [[ASImageNode alloc] init]; - _iconNode.image = (_liked) ? [UIImage imageNamed:@"icon_liked.png"] : [UIImage imageNamed:@"icon_like.png"]; - [self addSubnode:_iconNode]; - - _countNode = [[ASTextNode alloc] init]; - if (_likesCount > 0) { - - NSDictionary *attributes = _liked ? [TextStyles cellControlColoredStyle] : [TextStyles cellControlStyle]; - _countNode.attributedText = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%ld", (long)_likesCount] attributes:attributes]; - - } - [self addSubnode:_countNode]; - - // make it tappable easily - self.hitTestSlop = UIEdgeInsetsMake(-10, -10, -10, -10); - } - - return self; - -} - -+ (BOOL)getYesOrNo -{ - int tmp = (arc4random() % 30)+1; - if (tmp % 5 == 0) { - return YES; - } - return NO; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASStackLayoutSpec *mainStack = - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:6.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsCenter - children:@[_iconNode, _countNode]]; - - mainStack.style.minWidth = ASDimensionMakeWithPoints(60.0); - mainStack.style.maxHeight = ASDimensionMakeWithPoints(40.0); - - return mainStack; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Post.h b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Post.h deleted file mode 100644 index c8259237b8..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Post.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// Post.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface Post : NSObject - -@property (nonatomic, copy) NSString *username; -@property (nonatomic, copy) NSString *name; -@property (nonatomic, copy) NSString *photo; -@property (nonatomic, copy) NSString *post; -@property (nonatomic, copy) NSString *time; -@property (nonatomic, copy) NSString *media; -@property (nonatomic, assign) NSInteger via; - -@property (nonatomic, assign) NSInteger likes; -@property (nonatomic, assign) NSInteger comments; - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Post.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Post.m deleted file mode 100644 index fc61c5bf82..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/Post.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// Post.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "Post.h" - -@implementation Post -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/PostNode.h b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/PostNode.h deleted file mode 100644 index b558158e31..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/PostNode.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// PostNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@class Post; - -@interface PostNode : ASCellNode - -- (instancetype)initWithPost:(Post *)post; - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/PostNode.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/PostNode.m deleted file mode 100644 index defafc0061..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/PostNode.m +++ /dev/null @@ -1,337 +0,0 @@ -// -// PostNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PostNode.h" -#import "Post.h" -#import "TextStyles.h" -#import "LikesNode.h" -#import "CommentsNode.h" - -#define PostNodeDividerColor [UIColor lightGrayColor] - -@interface PostNode() - -@property (strong, nonatomic) Post *post; -@property (strong, nonatomic) ASDisplayNode *divider; -@property (strong, nonatomic) ASTextNode *nameNode; -@property (strong, nonatomic) ASTextNode *usernameNode; -@property (strong, nonatomic) ASTextNode *timeNode; -@property (strong, nonatomic) ASTextNode *postNode; -@property (strong, nonatomic) ASImageNode *viaNode; -@property (strong, nonatomic) ASNetworkImageNode *avatarNode; -@property (strong, nonatomic) ASNetworkImageNode *mediaNode; -@property (strong, nonatomic) LikesNode *likesNode; -@property (strong, nonatomic) CommentsNode *commentsNode; -@property (strong, nonatomic) ASImageNode *optionsNode; - -@end - -@implementation PostNode - -#pragma mark - Lifecycle - -- (instancetype)initWithPost:(Post *)post -{ - self = [super init]; - if (self) { - _post = post; - - self.selectionStyle = UITableViewCellSelectionStyleNone; - - // Name node - _nameNode = [[ASTextNode alloc] init]; - _nameNode.attributedText = [[NSAttributedString alloc] initWithString:_post.name attributes:[TextStyles nameStyle]]; - _nameNode.maximumNumberOfLines = 1; - [self addSubnode:_nameNode]; - - // Username node - _usernameNode = [[ASTextNode alloc] init]; - _usernameNode.attributedText = [[NSAttributedString alloc] initWithString:_post.username attributes:[TextStyles usernameStyle]]; - _usernameNode.style.flexShrink = 1.0; //if name and username don't fit to cell width, allow username shrink - _usernameNode.truncationMode = NSLineBreakByTruncatingTail; - _usernameNode.maximumNumberOfLines = 1; - [self addSubnode:_usernameNode]; - - // Time node - _timeNode = [[ASTextNode alloc] init]; - _timeNode.attributedText = [[NSAttributedString alloc] initWithString:_post.time attributes:[TextStyles timeStyle]]; - [self addSubnode:_timeNode]; - - // Post node - _postNode = [[ASTextNode alloc] init]; - - // Processing URLs in post - NSString *kLinkAttributeName = @"TextLinkAttributeName"; - - if (![_post.post isEqualToString:@""]) { - - NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:_post.post attributes:[TextStyles postStyle]]; - - NSDataDetector *urlDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil]; - - [urlDetector enumerateMatchesInString:attrString.string options:kNilOptions range:NSMakeRange(0, attrString.string.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop){ - - if (result.resultType == NSTextCheckingTypeLink) { - - NSMutableDictionary *linkAttributes = [[NSMutableDictionary alloc] initWithDictionary:[TextStyles postLinkStyle]]; - linkAttributes[kLinkAttributeName] = [NSURL URLWithString:result.URL.absoluteString]; - - [attrString addAttributes:linkAttributes range:result.range]; - - } - - }]; - - // Configure node to support tappable links - _postNode.delegate = self; - _postNode.userInteractionEnabled = YES; - _postNode.linkAttributeNames = @[ kLinkAttributeName ]; - _postNode.attributedText = attrString; - _postNode.passthroughNonlinkTouches = YES; // passes touches through when they aren't on a link - - } - - [self addSubnode:_postNode]; - - - // Media - if (![_post.media isEqualToString:@""]) { - - _mediaNode = [[ASNetworkImageNode alloc] init]; - _mediaNode.backgroundColor = ASDisplayNodeDefaultPlaceholderColor(); - _mediaNode.cornerRadius = 4.0; - _mediaNode.URL = [NSURL URLWithString:_post.media]; - _mediaNode.delegate = self; - _mediaNode.imageModificationBlock = ^UIImage *(UIImage *image) { - - UIImage *modifiedImage; - CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); - - UIGraphicsBeginImageContextWithOptions(image.size, false, [[UIScreen mainScreen] scale]); - - [[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:8.0] addClip]; - [image drawInRect:rect]; - modifiedImage = UIGraphicsGetImageFromCurrentImageContext(); - - UIGraphicsEndImageContext(); - - return modifiedImage; - - }; - [self addSubnode:_mediaNode]; - } - - // User pic - _avatarNode = [[ASNetworkImageNode alloc] init]; - _avatarNode.backgroundColor = ASDisplayNodeDefaultPlaceholderColor(); - _avatarNode.style.width = ASDimensionMakeWithPoints(44); - _avatarNode.style.height = ASDimensionMakeWithPoints(44); - _avatarNode.cornerRadius = 22.0; - _avatarNode.URL = [NSURL URLWithString:_post.photo]; - _avatarNode.imageModificationBlock = ^UIImage *(UIImage *image) { - - UIImage *modifiedImage; - CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); - - UIGraphicsBeginImageContextWithOptions(image.size, false, [[UIScreen mainScreen] scale]); - - [[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:44.0] addClip]; - [image drawInRect:rect]; - modifiedImage = UIGraphicsGetImageFromCurrentImageContext(); - - UIGraphicsEndImageContext(); - - return modifiedImage; - - }; - [self addSubnode:_avatarNode]; - - // Hairline cell separator - _divider = [[ASDisplayNode alloc] init]; - [self updateDividerColor]; - [self addSubnode:_divider]; - - // Via - if (_post.via != 0) { - _viaNode = [[ASImageNode alloc] init]; - _viaNode.image = (_post.via == 1) ? [UIImage imageNamed:@"icon_ios.png"] : [UIImage imageNamed:@"icon_android.png"]; - [self addSubnode:_viaNode]; - } - - // Bottom controls - _likesNode = [[LikesNode alloc] initWithLikesCount:_post.likes]; - [self addSubnode:_likesNode]; - - _commentsNode = [[CommentsNode alloc] initWithCommentsCount:_post.comments]; - [self addSubnode:_commentsNode]; - - _optionsNode = [[ASImageNode alloc] init]; - _optionsNode.image = [UIImage imageNamed:@"icon_more"]; - [self addSubnode:_optionsNode]; - - for (ASDisplayNode *node in self.subnodes) { - // ASTextNode with embedded links doesn't support layer backing - if (node.supportsLayerBacking) { - node.layerBacked = YES; - } - } - } - return self; -} - -- (void)updateDividerColor -{ - /* - * UITableViewCell traverses through all its descendant views and adjusts their background color accordingly - * either to [UIColor clearColor], although potentially it could use the same color as the selection highlight itself. - * After selection, the same trick is performed again in reverse, putting all the backgrounds back as they used to be. - * But in our case, we don't want to have the background color disappearing so we reset it after highlighting or - * selection is done. - */ - _divider.backgroundColor = PostNodeDividerColor; -} - -#pragma mark - ASDisplayNode - -- (void)didLoad -{ - // enable highlighting now that self.layer has loaded -- see ASHighlightOverlayLayer.h - self.layer.as_allowsHighlightDrawing = YES; - - [super didLoad]; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - // Flexible spacer between username and time - ASLayoutSpec *spacer = [[ASLayoutSpec alloc] init]; - spacer.style.flexGrow = 1.0; - - // Horizontal stack for name, username, via icon and time - NSMutableArray *layoutSpecChildren = [@[_nameNode, _usernameNode, spacer] mutableCopy]; - if (_post.via != 0) { - [layoutSpecChildren addObject:_viaNode]; - } - [layoutSpecChildren addObject:_timeNode]; - - ASStackLayoutSpec *nameStack = - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:5.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsCenter - children:layoutSpecChildren]; - nameStack.style.alignSelf = ASStackLayoutAlignSelfStretch; - - // bottom controls horizontal stack - ASStackLayoutSpec *controlsStack = - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:10 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsCenter - children:@[_likesNode, _commentsNode, _optionsNode]]; - - // Add more gaps for control line - controlsStack.style.spacingAfter = 3.0; - controlsStack.style.spacingBefore = 3.0; - - NSMutableArray *mainStackContent = [[NSMutableArray alloc] init]; - [mainStackContent addObject:nameStack]; - [mainStackContent addObject:_postNode]; - - - if (![_post.media isEqualToString:@""]){ - - // Only add the media node if an image is present - if (_mediaNode.image != nil) { - ASRatioLayoutSpec *imagePlace = - [ASRatioLayoutSpec - ratioLayoutSpecWithRatio:0.5 - child:_mediaNode]; - imagePlace.style.spacingAfter = 3.0; - imagePlace.style.spacingBefore = 3.0; - - [mainStackContent addObject:imagePlace]; - } - } - [mainStackContent addObject:controlsStack]; - - // Vertical spec of cell main content - ASStackLayoutSpec *contentSpec = - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical - spacing:8.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStretch - children:mainStackContent]; - contentSpec.style.flexShrink = 1.0; - - // Horizontal spec for avatar - ASStackLayoutSpec *avatarContentSpec = - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:8.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStart - children:@[_avatarNode, contentSpec]]; - - return [ASInsetLayoutSpec - insetLayoutSpecWithInsets:UIEdgeInsetsMake(10, 10, 10, 10) - child:avatarContentSpec]; - -} - -- (void)layout -{ - [super layout]; - - // Manually layout the divider. - CGFloat pixelHeight = 1.0f / [[UIScreen mainScreen] scale]; - _divider.frame = CGRectMake(0.0f, 0.0f, self.calculatedSize.width, pixelHeight); -} - -#pragma mark - ASCellNode - -- (void)setHighlighted:(BOOL)highlighted -{ - [super setHighlighted:highlighted]; - - [self updateDividerColor]; -} - -- (void)setSelected:(BOOL)selected -{ - [super setSelected:selected]; - - [self updateDividerColor]; -} - -#pragma mark - - -- (BOOL)textNode:(ASTextNode *)richTextNode shouldHighlightLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point -{ - // Opt into link highlighting -- tap and hold the link to try it! must enable highlighting on a layer, see -didLoad - return YES; -} - -- (void)textNode:(ASTextNode *)richTextNode tappedLinkAttribute:(NSString *)attribute value:(NSURL *)URL atPoint:(CGPoint)point textRange:(NSRange)textRange -{ - // The node tapped a link, open it - [[UIApplication sharedApplication] openURL:URL]; -} - -#pragma mark - ASNetworkImageNodeDelegate methods. - -- (void)imageNode:(ASNetworkImageNode *)imageNode didLoadImage:(UIImage *)image -{ - [self setNeedsLayout]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/TextStyles.h b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/TextStyles.h deleted file mode 100644 index 2a975bdea3..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/TextStyles.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// TextStyles.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface TextStyles : NSObject - -+ (NSDictionary *)nameStyle; -+ (NSDictionary *)usernameStyle; -+ (NSDictionary *)timeStyle; -+ (NSDictionary *)postStyle; -+ (NSDictionary *)postLinkStyle; -+ (NSDictionary *)cellControlStyle; -+ (NSDictionary *)cellControlColoredStyle; - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/TextStyles.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/TextStyles.m deleted file mode 100644 index ad7798c445..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/TextStyles.m +++ /dev/null @@ -1,71 +0,0 @@ -// -// TextStyles.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "TextStyles.h" - -@implementation TextStyles - -+ (NSDictionary *)nameStyle -{ - return @{ - NSFontAttributeName : [UIFont boldSystemFontOfSize:15.0], - NSForegroundColorAttributeName: [UIColor blackColor] - }; -} - -+ (NSDictionary *)usernameStyle -{ - return @{ - NSFontAttributeName : [UIFont systemFontOfSize:13.0], - NSForegroundColorAttributeName: [UIColor lightGrayColor] - }; -} - -+ (NSDictionary *)timeStyle -{ - return @{ - NSFontAttributeName : [UIFont systemFontOfSize:13.0], - NSForegroundColorAttributeName: [UIColor grayColor] - }; -} - -+ (NSDictionary *)postStyle -{ - return @{ - NSFontAttributeName : [UIFont systemFontOfSize:15.0], - NSForegroundColorAttributeName: [UIColor blackColor] - }; -} - -+ (NSDictionary *)postLinkStyle -{ - return @{ - NSFontAttributeName : [UIFont systemFontOfSize:15.0], - NSForegroundColorAttributeName: [UIColor colorWithRed:59.0/255.0 green:89.0/255.0 blue:152.0/255.0 alpha:1.0], - NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle) - }; -} - -+ (NSDictionary *)cellControlStyle -{ - return @{ - NSFontAttributeName : [UIFont systemFontOfSize:13.0], - NSForegroundColorAttributeName: [UIColor lightGrayColor] - }; -} - -+ (NSDictionary *)cellControlColoredStyle -{ - return @{ - NSFontAttributeName : [UIFont systemFontOfSize:13.0], - NSForegroundColorAttributeName: [UIColor colorWithRed:59.0/255.0 green:89.0/255.0 blue:152.0/255.0 alpha:1.0] - }; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/ViewController.h deleted file mode 100644 index 6416242247..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/ViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : ASViewController -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/ViewController.m deleted file mode 100644 index efc9d06e4a..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/ViewController.m +++ /dev/null @@ -1,144 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" -#import "Post.h" -#import "PostNode.h" - -#import -#import - -#include - -@interface ViewController () - -@property (nonatomic, strong) ASTableNode *tableNode; -@property (nonatomic, strong) NSMutableArray *socialAppDataSource; - -@end - -#pragma mark - Lifecycle - -@implementation ViewController - -- (instancetype)init -{ - _tableNode = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain]; - _tableNode.inverted = YES; - self = [super initWithNode:_tableNode]; - - - if (self) { - - _tableNode.delegate = self; - _tableNode.dataSource = self; - self.title = @"Timeline"; - - [self createSocialAppDataSource]; - } - - return self; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - CGFloat inset = [self topBarsHeight]; - self.tableNode.view.contentInset = UIEdgeInsetsMake(-inset, 0, inset, 0); - self.tableNode.view.scrollIndicatorInsets = UIEdgeInsetsMake(-inset, 0, inset, 0); -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - // SocialAppNode has its own separator - self.tableNode.view.separatorStyle = UITableViewCellSeparatorStyleNone; -} - -- (CGFloat)topBarsHeight -{ - // No need to adjust if the edge isn't available - if ((self.edgesForExtendedLayout & UIRectEdgeTop) == 0) { - return 0.0; - } - return CGRectGetHeight(self.navigationController.navigationBar.frame) + CGRectGetHeight([UIApplication sharedApplication].statusBarFrame); -} - - -#pragma mark - Data Model - -- (void)createSocialAppDataSource -{ - _socialAppDataSource = [[NSMutableArray alloc] init]; - - Post *newPost = [[Post alloc] init]; - newPost.name = @"Apple Guy"; - newPost.username = @"@appleguy"; - newPost.photo = @"https://avatars1.githubusercontent.com/u/565251?v=3&s=96"; - newPost.post = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."; - newPost.time = @"3s"; - newPost.media = @""; - newPost.via = 0; - newPost.likes = arc4random_uniform(74); - newPost.comments = arc4random_uniform(40); - [_socialAppDataSource addObject:newPost]; - - newPost = [[Post alloc] init]; - newPost.name = @"Huy Nguyen"; - newPost.username = @"@nguyenhuy"; - newPost.photo = @"https://avatars2.githubusercontent.com/u/587874?v=3&s=96"; - newPost.post = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; - newPost.time = @"1m"; - newPost.media = @""; - newPost.via = 1; - newPost.likes = arc4random_uniform(74); - newPost.comments = arc4random_uniform(40); - [_socialAppDataSource addObject:newPost]; - - newPost = [[Post alloc] init]; - newPost.name = @"Alex Long Name"; - newPost.username = @"@veryyyylongusername"; - newPost.photo = @"https://avatars1.githubusercontent.com/u/8086633?v=3&s=96"; - newPost.post = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; - newPost.time = @"3:02"; - newPost.media = @"http://www.ngmag.ru/upload/iblock/f93/f9390efc34151456598077c1ba44a94d.jpg"; - newPost.via = 2; - newPost.likes = arc4random_uniform(74); - newPost.comments = arc4random_uniform(40); - [_socialAppDataSource addObject:newPost]; - - newPost = [[Post alloc] init]; - newPost.name = @"Vitaly Baev"; - newPost.username = @"@vitalybaev"; - newPost.photo = @"https://avatars0.githubusercontent.com/u/724423?v=3&s=96"; - newPost.post = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. https://github.com/facebook/AsyncDisplayKit Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; - newPost.time = @"yesterday"; - newPost.media = @""; - newPost.via = 1; - newPost.likes = arc4random_uniform(74); - newPost.comments = arc4random_uniform(40); - [_socialAppDataSource addObject:newPost]; -} - -#pragma mark - ASTableNode - -- (ASCellNodeBlock)tableNode:(ASTableNode *)tableNode nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath -{ - Post *post = self.socialAppDataSource[indexPath.row]; - return ^{ - return [[PostNode alloc] initWithPost:post]; - }; -} - -- (NSInteger)tableNode:(ASTableNode *)tableNode numberOfRowsInSection:(NSInteger)section -{ - return self.socialAppDataSource.count; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_android.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_android.png deleted file mode 100644 index 6d30985339..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_android.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_android@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_android@2x.png deleted file mode 100644 index c0dd2f5977..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_android@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_android@3x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_android@3x.png deleted file mode 100644 index d3e83e9334..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_android@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_comment.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_comment.png deleted file mode 100644 index 59ccfe43c1..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_comment.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_comment@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_comment@2x.png deleted file mode 100644 index bedd0593c0..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_comment@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_comment@3x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_comment@3x.png deleted file mode 100644 index eb8a0d7660..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_comment@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_ios.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_ios.png deleted file mode 100644 index 0cd417d446..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_ios.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_ios@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_ios@2x.png deleted file mode 100644 index f73561fd09..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_ios@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_ios@3x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_ios@3x.png deleted file mode 100644 index 35d2bb2b37..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_ios@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_like.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_like.png deleted file mode 100644 index 43110b9d59..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_like.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_like@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_like@2x.png deleted file mode 100644 index 1b535d748b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_like@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_like@3x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_like@3x.png deleted file mode 100644 index 8c80507335..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_like@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_liked.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_liked.png deleted file mode 100644 index b1c1ade901..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_liked.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_liked@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_liked@2x.png deleted file mode 100644 index d9dc5988ea..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_liked@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_liked@3x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_liked@3x.png deleted file mode 100644 index 00578ac63e..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_liked@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_more.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_more.png deleted file mode 100644 index 013126d291..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_more.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_more@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_more@2x.png deleted file mode 100644 index 3d183df436..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_more@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_more@3x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_more@3x.png deleted file mode 100644 index d5f829ab11..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/icon_more@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/main.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/main.m deleted file mode 100644 index 0e5da05001..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout-Inverted/Sample/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Podfile b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/AppDelegate.h deleted file mode 100644 index 19db03c153..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/AppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/AppDelegate.m deleted file mode 100644 index 73663a6919..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/AppDelegate.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]]; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 118c98f746..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/CommentsNode.h b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/CommentsNode.h deleted file mode 100644 index 422460fe9e..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/CommentsNode.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// CommentsNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface CommentsNode : ASControlNode - -- (instancetype)initWithCommentsCount:(NSInteger)comentsCount; - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/CommentsNode.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/CommentsNode.m deleted file mode 100644 index 96ba688881..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/CommentsNode.m +++ /dev/null @@ -1,62 +0,0 @@ -// -// CommentsNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "CommentsNode.h" -#import "TextStyles.h" - -@interface CommentsNode () -@property (nonatomic, strong) ASImageNode *iconNode; -@property (nonatomic, strong) ASTextNode *countNode; -@property (nonatomic, assign) NSInteger commentsCount; -@end - -@implementation CommentsNode - -- (instancetype)initWithCommentsCount:(NSInteger)comentsCount -{ - self = [super init]; - if (self) { - _commentsCount = comentsCount; - - _iconNode = [[ASImageNode alloc] init]; - _iconNode.image = [UIImage imageNamed:@"icon_comment.png"]; - [self addSubnode:_iconNode]; - - _countNode = [[ASTextNode alloc] init]; - if (_commentsCount > 0) { - _countNode.attributedText = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%zd", _commentsCount] attributes:[TextStyles cellControlStyle]]; - } - [self addSubnode:_countNode]; - - // make it tappable easily - self.hitTestSlop = UIEdgeInsetsMake(-10, -10, -10, -10); - } - - return self; - -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASStackLayoutSpec *mainStack = - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:6.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsCenter - children:@[_iconNode, _countNode]]; - - // Adjust size - mainStack.style.minWidth = ASDimensionMakeWithPoints(60.0); - mainStack.style.maxHeight = ASDimensionMakeWithPoints(40.0); - - return mainStack; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Info.plist deleted file mode 100644 index ed1c9acf9b..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Info.plist +++ /dev/null @@ -1,41 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/LikesNode.h b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/LikesNode.h deleted file mode 100644 index 1dbbc191e1..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/LikesNode.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// LikesNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface LikesNode : ASControlNode - -- (instancetype)initWithLikesCount:(NSInteger)likesCount; - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/LikesNode.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/LikesNode.m deleted file mode 100644 index cd5ade1db4..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/LikesNode.m +++ /dev/null @@ -1,75 +0,0 @@ -// -// LikesNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "LikesNode.h" -#import "TextStyles.h" - -@interface LikesNode () -@property (nonatomic, strong) ASImageNode *iconNode; -@property (nonatomic, strong) ASTextNode *countNode; -@property (nonatomic, assign) NSInteger likesCount; -@property (nonatomic, assign) BOOL liked; -@end - -@implementation LikesNode - -- (instancetype)initWithLikesCount:(NSInteger)likesCount -{ - self = [super init]; - if (self) { - _likesCount = likesCount; - _liked = (_likesCount > 0) ? [LikesNode getYesOrNo] : NO; - - _iconNode = [[ASImageNode alloc] init]; - _iconNode.image = (_liked) ? [UIImage imageNamed:@"icon_liked.png"] : [UIImage imageNamed:@"icon_like.png"]; - [self addSubnode:_iconNode]; - - _countNode = [[ASTextNode alloc] init]; - if (_likesCount > 0) { - - NSDictionary *attributes = _liked ? [TextStyles cellControlColoredStyle] : [TextStyles cellControlStyle]; - _countNode.attributedText = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%ld", (long)_likesCount] attributes:attributes]; - - } - [self addSubnode:_countNode]; - - // make it tappable easily - self.hitTestSlop = UIEdgeInsetsMake(-10, -10, -10, -10); - } - - return self; - -} - -+ (BOOL)getYesOrNo -{ - int tmp = (arc4random() % 30)+1; - if (tmp % 5 == 0) { - return YES; - } - return NO; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASStackLayoutSpec *mainStack = - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:6.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsCenter - children:@[_iconNode, _countNode]]; - - mainStack.style.minWidth = ASDimensionMakeWithPoints(60.0); - mainStack.style.maxHeight = ASDimensionMakeWithPoints(40.0); - - return mainStack; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Post.h b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Post.h deleted file mode 100644 index c8259237b8..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Post.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// Post.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface Post : NSObject - -@property (nonatomic, copy) NSString *username; -@property (nonatomic, copy) NSString *name; -@property (nonatomic, copy) NSString *photo; -@property (nonatomic, copy) NSString *post; -@property (nonatomic, copy) NSString *time; -@property (nonatomic, copy) NSString *media; -@property (nonatomic, assign) NSInteger via; - -@property (nonatomic, assign) NSInteger likes; -@property (nonatomic, assign) NSInteger comments; - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Post.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Post.m deleted file mode 100644 index fc61c5bf82..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/Post.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// Post.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "Post.h" - -@implementation Post -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/PostNode.h b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/PostNode.h deleted file mode 100644 index b558158e31..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/PostNode.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// PostNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@class Post; - -@interface PostNode : ASCellNode - -- (instancetype)initWithPost:(Post *)post; - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/PostNode.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/PostNode.m deleted file mode 100644 index defafc0061..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/PostNode.m +++ /dev/null @@ -1,337 +0,0 @@ -// -// PostNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PostNode.h" -#import "Post.h" -#import "TextStyles.h" -#import "LikesNode.h" -#import "CommentsNode.h" - -#define PostNodeDividerColor [UIColor lightGrayColor] - -@interface PostNode() - -@property (strong, nonatomic) Post *post; -@property (strong, nonatomic) ASDisplayNode *divider; -@property (strong, nonatomic) ASTextNode *nameNode; -@property (strong, nonatomic) ASTextNode *usernameNode; -@property (strong, nonatomic) ASTextNode *timeNode; -@property (strong, nonatomic) ASTextNode *postNode; -@property (strong, nonatomic) ASImageNode *viaNode; -@property (strong, nonatomic) ASNetworkImageNode *avatarNode; -@property (strong, nonatomic) ASNetworkImageNode *mediaNode; -@property (strong, nonatomic) LikesNode *likesNode; -@property (strong, nonatomic) CommentsNode *commentsNode; -@property (strong, nonatomic) ASImageNode *optionsNode; - -@end - -@implementation PostNode - -#pragma mark - Lifecycle - -- (instancetype)initWithPost:(Post *)post -{ - self = [super init]; - if (self) { - _post = post; - - self.selectionStyle = UITableViewCellSelectionStyleNone; - - // Name node - _nameNode = [[ASTextNode alloc] init]; - _nameNode.attributedText = [[NSAttributedString alloc] initWithString:_post.name attributes:[TextStyles nameStyle]]; - _nameNode.maximumNumberOfLines = 1; - [self addSubnode:_nameNode]; - - // Username node - _usernameNode = [[ASTextNode alloc] init]; - _usernameNode.attributedText = [[NSAttributedString alloc] initWithString:_post.username attributes:[TextStyles usernameStyle]]; - _usernameNode.style.flexShrink = 1.0; //if name and username don't fit to cell width, allow username shrink - _usernameNode.truncationMode = NSLineBreakByTruncatingTail; - _usernameNode.maximumNumberOfLines = 1; - [self addSubnode:_usernameNode]; - - // Time node - _timeNode = [[ASTextNode alloc] init]; - _timeNode.attributedText = [[NSAttributedString alloc] initWithString:_post.time attributes:[TextStyles timeStyle]]; - [self addSubnode:_timeNode]; - - // Post node - _postNode = [[ASTextNode alloc] init]; - - // Processing URLs in post - NSString *kLinkAttributeName = @"TextLinkAttributeName"; - - if (![_post.post isEqualToString:@""]) { - - NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:_post.post attributes:[TextStyles postStyle]]; - - NSDataDetector *urlDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil]; - - [urlDetector enumerateMatchesInString:attrString.string options:kNilOptions range:NSMakeRange(0, attrString.string.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop){ - - if (result.resultType == NSTextCheckingTypeLink) { - - NSMutableDictionary *linkAttributes = [[NSMutableDictionary alloc] initWithDictionary:[TextStyles postLinkStyle]]; - linkAttributes[kLinkAttributeName] = [NSURL URLWithString:result.URL.absoluteString]; - - [attrString addAttributes:linkAttributes range:result.range]; - - } - - }]; - - // Configure node to support tappable links - _postNode.delegate = self; - _postNode.userInteractionEnabled = YES; - _postNode.linkAttributeNames = @[ kLinkAttributeName ]; - _postNode.attributedText = attrString; - _postNode.passthroughNonlinkTouches = YES; // passes touches through when they aren't on a link - - } - - [self addSubnode:_postNode]; - - - // Media - if (![_post.media isEqualToString:@""]) { - - _mediaNode = [[ASNetworkImageNode alloc] init]; - _mediaNode.backgroundColor = ASDisplayNodeDefaultPlaceholderColor(); - _mediaNode.cornerRadius = 4.0; - _mediaNode.URL = [NSURL URLWithString:_post.media]; - _mediaNode.delegate = self; - _mediaNode.imageModificationBlock = ^UIImage *(UIImage *image) { - - UIImage *modifiedImage; - CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); - - UIGraphicsBeginImageContextWithOptions(image.size, false, [[UIScreen mainScreen] scale]); - - [[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:8.0] addClip]; - [image drawInRect:rect]; - modifiedImage = UIGraphicsGetImageFromCurrentImageContext(); - - UIGraphicsEndImageContext(); - - return modifiedImage; - - }; - [self addSubnode:_mediaNode]; - } - - // User pic - _avatarNode = [[ASNetworkImageNode alloc] init]; - _avatarNode.backgroundColor = ASDisplayNodeDefaultPlaceholderColor(); - _avatarNode.style.width = ASDimensionMakeWithPoints(44); - _avatarNode.style.height = ASDimensionMakeWithPoints(44); - _avatarNode.cornerRadius = 22.0; - _avatarNode.URL = [NSURL URLWithString:_post.photo]; - _avatarNode.imageModificationBlock = ^UIImage *(UIImage *image) { - - UIImage *modifiedImage; - CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); - - UIGraphicsBeginImageContextWithOptions(image.size, false, [[UIScreen mainScreen] scale]); - - [[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:44.0] addClip]; - [image drawInRect:rect]; - modifiedImage = UIGraphicsGetImageFromCurrentImageContext(); - - UIGraphicsEndImageContext(); - - return modifiedImage; - - }; - [self addSubnode:_avatarNode]; - - // Hairline cell separator - _divider = [[ASDisplayNode alloc] init]; - [self updateDividerColor]; - [self addSubnode:_divider]; - - // Via - if (_post.via != 0) { - _viaNode = [[ASImageNode alloc] init]; - _viaNode.image = (_post.via == 1) ? [UIImage imageNamed:@"icon_ios.png"] : [UIImage imageNamed:@"icon_android.png"]; - [self addSubnode:_viaNode]; - } - - // Bottom controls - _likesNode = [[LikesNode alloc] initWithLikesCount:_post.likes]; - [self addSubnode:_likesNode]; - - _commentsNode = [[CommentsNode alloc] initWithCommentsCount:_post.comments]; - [self addSubnode:_commentsNode]; - - _optionsNode = [[ASImageNode alloc] init]; - _optionsNode.image = [UIImage imageNamed:@"icon_more"]; - [self addSubnode:_optionsNode]; - - for (ASDisplayNode *node in self.subnodes) { - // ASTextNode with embedded links doesn't support layer backing - if (node.supportsLayerBacking) { - node.layerBacked = YES; - } - } - } - return self; -} - -- (void)updateDividerColor -{ - /* - * UITableViewCell traverses through all its descendant views and adjusts their background color accordingly - * either to [UIColor clearColor], although potentially it could use the same color as the selection highlight itself. - * After selection, the same trick is performed again in reverse, putting all the backgrounds back as they used to be. - * But in our case, we don't want to have the background color disappearing so we reset it after highlighting or - * selection is done. - */ - _divider.backgroundColor = PostNodeDividerColor; -} - -#pragma mark - ASDisplayNode - -- (void)didLoad -{ - // enable highlighting now that self.layer has loaded -- see ASHighlightOverlayLayer.h - self.layer.as_allowsHighlightDrawing = YES; - - [super didLoad]; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - // Flexible spacer between username and time - ASLayoutSpec *spacer = [[ASLayoutSpec alloc] init]; - spacer.style.flexGrow = 1.0; - - // Horizontal stack for name, username, via icon and time - NSMutableArray *layoutSpecChildren = [@[_nameNode, _usernameNode, spacer] mutableCopy]; - if (_post.via != 0) { - [layoutSpecChildren addObject:_viaNode]; - } - [layoutSpecChildren addObject:_timeNode]; - - ASStackLayoutSpec *nameStack = - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:5.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsCenter - children:layoutSpecChildren]; - nameStack.style.alignSelf = ASStackLayoutAlignSelfStretch; - - // bottom controls horizontal stack - ASStackLayoutSpec *controlsStack = - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:10 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsCenter - children:@[_likesNode, _commentsNode, _optionsNode]]; - - // Add more gaps for control line - controlsStack.style.spacingAfter = 3.0; - controlsStack.style.spacingBefore = 3.0; - - NSMutableArray *mainStackContent = [[NSMutableArray alloc] init]; - [mainStackContent addObject:nameStack]; - [mainStackContent addObject:_postNode]; - - - if (![_post.media isEqualToString:@""]){ - - // Only add the media node if an image is present - if (_mediaNode.image != nil) { - ASRatioLayoutSpec *imagePlace = - [ASRatioLayoutSpec - ratioLayoutSpecWithRatio:0.5 - child:_mediaNode]; - imagePlace.style.spacingAfter = 3.0; - imagePlace.style.spacingBefore = 3.0; - - [mainStackContent addObject:imagePlace]; - } - } - [mainStackContent addObject:controlsStack]; - - // Vertical spec of cell main content - ASStackLayoutSpec *contentSpec = - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical - spacing:8.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStretch - children:mainStackContent]; - contentSpec.style.flexShrink = 1.0; - - // Horizontal spec for avatar - ASStackLayoutSpec *avatarContentSpec = - [ASStackLayoutSpec - stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal - spacing:8.0 - justifyContent:ASStackLayoutJustifyContentStart - alignItems:ASStackLayoutAlignItemsStart - children:@[_avatarNode, contentSpec]]; - - return [ASInsetLayoutSpec - insetLayoutSpecWithInsets:UIEdgeInsetsMake(10, 10, 10, 10) - child:avatarContentSpec]; - -} - -- (void)layout -{ - [super layout]; - - // Manually layout the divider. - CGFloat pixelHeight = 1.0f / [[UIScreen mainScreen] scale]; - _divider.frame = CGRectMake(0.0f, 0.0f, self.calculatedSize.width, pixelHeight); -} - -#pragma mark - ASCellNode - -- (void)setHighlighted:(BOOL)highlighted -{ - [super setHighlighted:highlighted]; - - [self updateDividerColor]; -} - -- (void)setSelected:(BOOL)selected -{ - [super setSelected:selected]; - - [self updateDividerColor]; -} - -#pragma mark - - -- (BOOL)textNode:(ASTextNode *)richTextNode shouldHighlightLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point -{ - // Opt into link highlighting -- tap and hold the link to try it! must enable highlighting on a layer, see -didLoad - return YES; -} - -- (void)textNode:(ASTextNode *)richTextNode tappedLinkAttribute:(NSString *)attribute value:(NSURL *)URL atPoint:(CGPoint)point textRange:(NSRange)textRange -{ - // The node tapped a link, open it - [[UIApplication sharedApplication] openURL:URL]; -} - -#pragma mark - ASNetworkImageNodeDelegate methods. - -- (void)imageNode:(ASNetworkImageNode *)imageNode didLoadImage:(UIImage *)image -{ - [self setNeedsLayout]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/TextStyles.h b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/TextStyles.h deleted file mode 100644 index 2a975bdea3..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/TextStyles.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// TextStyles.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface TextStyles : NSObject - -+ (NSDictionary *)nameStyle; -+ (NSDictionary *)usernameStyle; -+ (NSDictionary *)timeStyle; -+ (NSDictionary *)postStyle; -+ (NSDictionary *)postLinkStyle; -+ (NSDictionary *)cellControlStyle; -+ (NSDictionary *)cellControlColoredStyle; - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/TextStyles.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/TextStyles.m deleted file mode 100644 index ad7798c445..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/TextStyles.m +++ /dev/null @@ -1,71 +0,0 @@ -// -// TextStyles.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "TextStyles.h" - -@implementation TextStyles - -+ (NSDictionary *)nameStyle -{ - return @{ - NSFontAttributeName : [UIFont boldSystemFontOfSize:15.0], - NSForegroundColorAttributeName: [UIColor blackColor] - }; -} - -+ (NSDictionary *)usernameStyle -{ - return @{ - NSFontAttributeName : [UIFont systemFontOfSize:13.0], - NSForegroundColorAttributeName: [UIColor lightGrayColor] - }; -} - -+ (NSDictionary *)timeStyle -{ - return @{ - NSFontAttributeName : [UIFont systemFontOfSize:13.0], - NSForegroundColorAttributeName: [UIColor grayColor] - }; -} - -+ (NSDictionary *)postStyle -{ - return @{ - NSFontAttributeName : [UIFont systemFontOfSize:15.0], - NSForegroundColorAttributeName: [UIColor blackColor] - }; -} - -+ (NSDictionary *)postLinkStyle -{ - return @{ - NSFontAttributeName : [UIFont systemFontOfSize:15.0], - NSForegroundColorAttributeName: [UIColor colorWithRed:59.0/255.0 green:89.0/255.0 blue:152.0/255.0 alpha:1.0], - NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle) - }; -} - -+ (NSDictionary *)cellControlStyle -{ - return @{ - NSFontAttributeName : [UIFont systemFontOfSize:13.0], - NSForegroundColorAttributeName: [UIColor lightGrayColor] - }; -} - -+ (NSDictionary *)cellControlColoredStyle -{ - return @{ - NSFontAttributeName : [UIFont systemFontOfSize:13.0], - NSForegroundColorAttributeName: [UIColor colorWithRed:59.0/255.0 green:89.0/255.0 blue:152.0/255.0 alpha:1.0] - }; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/ViewController.h deleted file mode 100644 index 6416242247..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/ViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : ASViewController -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/ViewController.m deleted file mode 100644 index 1eebcb516c..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/ViewController.m +++ /dev/null @@ -1,128 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" -#import "Post.h" -#import "PostNode.h" - -#import -#import - -#include - -@interface ViewController () - -@property (nonatomic, strong) ASTableNode *tableNode; -@property (nonatomic, strong) NSMutableArray *socialAppDataSource; - -@end - -#pragma mark - Lifecycle - -@implementation ViewController - -- (instancetype)init -{ - _tableNode = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain]; - - self = [super initWithNode:_tableNode]; - - if (self) { - - _tableNode.delegate = self; - _tableNode.dataSource = self; - _tableNode.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - - self.title = @"Timeline"; - - [self createSocialAppDataSource]; - } - - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - // SocialAppNode has its own separator - self.tableNode.view.separatorStyle = UITableViewCellSeparatorStyleNone; -} - -#pragma mark - Data Model - -- (void)createSocialAppDataSource -{ - _socialAppDataSource = [[NSMutableArray alloc] init]; - - Post *newPost = [[Post alloc] init]; - newPost.name = @"Apple Guy"; - newPost.username = @"@appleguy"; - newPost.photo = @"https://avatars1.githubusercontent.com/u/565251?v=3&s=96"; - newPost.post = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."; - newPost.time = @"3s"; - newPost.media = @""; - newPost.via = 0; - newPost.likes = arc4random_uniform(74); - newPost.comments = arc4random_uniform(40); - [_socialAppDataSource addObject:newPost]; - - newPost = [[Post alloc] init]; - newPost.name = @"Huy Nguyen"; - newPost.username = @"@nguyenhuy"; - newPost.photo = @"https://avatars2.githubusercontent.com/u/587874?v=3&s=96"; - newPost.post = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; - newPost.time = @"1m"; - newPost.media = @""; - newPost.via = 1; - newPost.likes = arc4random_uniform(74); - newPost.comments = arc4random_uniform(40); - [_socialAppDataSource addObject:newPost]; - - newPost = [[Post alloc] init]; - newPost.name = @"Alex Long Name"; - newPost.username = @"@veryyyylongusername"; - newPost.photo = @"https://avatars1.githubusercontent.com/u/8086633?v=3&s=96"; - newPost.post = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; - newPost.time = @"3:02"; - newPost.media = @"http://www.ngmag.ru/upload/iblock/f93/f9390efc34151456598077c1ba44a94d.jpg"; - newPost.via = 2; - newPost.likes = arc4random_uniform(74); - newPost.comments = arc4random_uniform(40); - [_socialAppDataSource addObject:newPost]; - - newPost = [[Post alloc] init]; - newPost.name = @"Vitaly Baev"; - newPost.username = @"@vitalybaev"; - newPost.photo = @"https://avatars0.githubusercontent.com/u/724423?v=3&s=96"; - newPost.post = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. https://github.com/facebook/AsyncDisplayKit Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; - newPost.time = @"yesterday"; - newPost.media = @""; - newPost.via = 1; - newPost.likes = arc4random_uniform(74); - newPost.comments = arc4random_uniform(40); - [_socialAppDataSource addObject:newPost]; -} - -#pragma mark - ASTableNode - -- (ASCellNodeBlock)tableNode:(ASTableNode *)tableNode nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath -{ - Post *post = self.socialAppDataSource[indexPath.row]; - return ^{ - return [[PostNode alloc] initWithPost:post]; - }; -} - -- (NSInteger)tableNode:(ASTableNode *)tableNode numberOfRowsInSection:(NSInteger)section -{ - return self.socialAppDataSource.count; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_android.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_android.png deleted file mode 100644 index 6d30985339..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_android.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_android@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_android@2x.png deleted file mode 100644 index c0dd2f5977..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_android@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_android@3x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_android@3x.png deleted file mode 100644 index d3e83e9334..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_android@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_comment.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_comment.png deleted file mode 100644 index 59ccfe43c1..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_comment.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_comment@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_comment@2x.png deleted file mode 100644 index bedd0593c0..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_comment@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_comment@3x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_comment@3x.png deleted file mode 100644 index eb8a0d7660..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_comment@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_ios.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_ios.png deleted file mode 100644 index 0cd417d446..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_ios.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_ios@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_ios@2x.png deleted file mode 100644 index f73561fd09..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_ios@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_ios@3x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_ios@3x.png deleted file mode 100644 index 35d2bb2b37..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_ios@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_like.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_like.png deleted file mode 100644 index 43110b9d59..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_like.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_like@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_like@2x.png deleted file mode 100644 index 1b535d748b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_like@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_like@3x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_like@3x.png deleted file mode 100644 index 8c80507335..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_like@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_liked.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_liked.png deleted file mode 100644 index b1c1ade901..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_liked.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_liked@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_liked@2x.png deleted file mode 100644 index d9dc5988ea..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_liked@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_liked@3x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_liked@3x.png deleted file mode 100644 index 00578ac63e..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_liked@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_more.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_more.png deleted file mode 100644 index 013126d291..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_more.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_more@2x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_more@2x.png deleted file mode 100644 index 3d183df436..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_more@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_more@3x.png b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_more@3x.png deleted file mode 100644 index d5f829ab11..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/icon_more@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/main.m b/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/main.m deleted file mode 100644 index 0e5da05001..0000000000 --- a/submodules/AsyncDisplayKit/examples/SocialAppLayout/Sample/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/Swift/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples/Swift/Default-568h@2x.png deleted file mode 100644 index 1547a98454..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/Swift/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/Swift/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples/Swift/Default-667h@2x.png deleted file mode 100644 index 988ea56bab..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/Swift/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/Swift/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples/Swift/Default-736h@3x.png deleted file mode 100644 index d19eb325a2..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/Swift/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/Swift/Podfile b/submodules/AsyncDisplayKit/examples/Swift/Podfile deleted file mode 100644 index 83d2cae8bf..0000000000 --- a/submodules/AsyncDisplayKit/examples/Swift/Podfile +++ /dev/null @@ -1,8 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' - -use_frameworks! - -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples/Swift/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples/Swift/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples/Swift/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples/Swift/Sample/AppDelegate.swift b/submodules/AsyncDisplayKit/examples/Swift/Sample/AppDelegate.swift deleted file mode 100644 index df48167298..0000000000 --- a/submodules/AsyncDisplayKit/examples/Swift/Sample/AppDelegate.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// AppDelegate.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - let window = UIWindow(frame: UIScreen.main.bounds) - window.backgroundColor = UIColor.white - window.rootViewController = UINavigationController(rootViewController: ViewController()) - window.makeKeyAndVisible() - self.window = window - return true - } - -} diff --git a/submodules/AsyncDisplayKit/examples/Swift/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/Swift/Sample/Info.plist deleted file mode 100644 index fb4115c84c..0000000000 --- a/submodules/AsyncDisplayKit/examples/Swift/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/Swift/Sample/TailLoadingCellNode.swift b/submodules/AsyncDisplayKit/examples/Swift/Sample/TailLoadingCellNode.swift deleted file mode 100644 index 5b586e7086..0000000000 --- a/submodules/AsyncDisplayKit/examples/Swift/Sample/TailLoadingCellNode.swift +++ /dev/null @@ -1,62 +0,0 @@ -// -// TailLoadingCellNode.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import AsyncDisplayKit -import UIKit - -final class TailLoadingCellNode: ASCellNode { - let spinner = SpinnerNode() - let text = ASTextNode() - - override init() { - super.init() - - addSubnode(text) - text.attributedText = NSAttributedString( - string: "Loading…", - attributes: [ - NSFontAttributeName: UIFont.systemFont(ofSize: 12), - NSForegroundColorAttributeName: UIColor.lightGray, - NSKernAttributeName: -0.3 - ]) - addSubnode(spinner) - } - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - - return ASStackLayoutSpec( - direction: .horizontal, - spacing: 16, - justifyContent: .center, - alignItems: .center, - children: [ text, spinner ]) - } -} - -final class SpinnerNode: ASDisplayNode { - var activityIndicatorView: UIActivityIndicatorView { - return view as! UIActivityIndicatorView - } - - override init() { - super.init() - setViewBlock { - UIActivityIndicatorView(activityIndicatorStyle: .gray) - } - - // Set spinner node to default size of the activitiy indicator view - self.style.preferredSize = CGSize(width: 20.0, height: 20.0) - } - - override func didLoad() { - super.didLoad() - - activityIndicatorView.startAnimating() - } -} diff --git a/submodules/AsyncDisplayKit/examples/Swift/Sample/ViewController.swift b/submodules/AsyncDisplayKit/examples/Swift/Sample/ViewController.swift deleted file mode 100644 index e68c178ad5..0000000000 --- a/submodules/AsyncDisplayKit/examples/Swift/Sample/ViewController.swift +++ /dev/null @@ -1,142 +0,0 @@ -// -// ViewController.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit -import AsyncDisplayKit - -final class ViewController: ASViewController, ASTableDataSource, ASTableDelegate { - - struct State { - var itemCount: Int - var fetchingMore: Bool - static let empty = State(itemCount: 20, fetchingMore: false) - } - - enum Action { - case beginBatchFetch - case endBatchFetch(resultCount: Int) - } - - var tableNode: ASTableNode { - return node as! ASTableNode - } - - fileprivate(set) var state: State = .empty - - init() { - super.init(node: ASTableNode()) - tableNode.delegate = self - tableNode.dataSource = self - } - - required init?(coder aDecoder: NSCoder) { - fatalError("storyboards are incompatible with truth and beauty") - } - - // MARK: ASTableNode data source and delegate. - - func tableNode(_ tableNode: ASTableNode, nodeForRowAt indexPath: IndexPath) -> ASCellNode { - // Should read the row count directly from table view but - // https://github.com/facebook/AsyncDisplayKit/issues/1159 - let rowCount = self.tableNode(tableNode, numberOfRowsInSection: 0) - - if state.fetchingMore && indexPath.row == rowCount - 1 { - let node = TailLoadingCellNode() - node.style.height = ASDimensionMake(44.0) - return node; - } - - let node = ASTextCellNode() - node.text = String(format: "[%ld.%ld] says hello!", indexPath.section, indexPath.row) - - return node - } - - func numberOfSections(in tableNode: ASTableNode) -> Int { - return 1 - } - - func tableNode(_ tableNode: ASTableNode, numberOfRowsInSection section: Int) -> Int { - var count = state.itemCount - if state.fetchingMore { - count += 1 - } - return count - } - - func tableNode(_ tableNode: ASTableNode, willBeginBatchFetchWith context: ASBatchContext) { - /// This call will come in on a background thread. Switch to main - /// to add our spinner, then fire off our fetch. - DispatchQueue.main.async { - let oldState = self.state - self.state = ViewController.handleAction(.beginBatchFetch, fromState: oldState) - self.renderDiff(oldState) - } - - ViewController.fetchDataWithCompletion { resultCount in - let action = Action.endBatchFetch(resultCount: resultCount) - let oldState = self.state - self.state = ViewController.handleAction(action, fromState: oldState) - self.renderDiff(oldState) - context.completeBatchFetching(true) - } - } - - fileprivate func renderDiff(_ oldState: State) { - - self.tableNode.performBatchUpdates({ - - // Add or remove items - let rowCountChange = state.itemCount - oldState.itemCount - if rowCountChange > 0 { - let indexPaths = (oldState.itemCount.. Void) { - let time = DispatchTime.now() + Double(Int64(TimeInterval(NSEC_PER_SEC) * 1.0)) / Double(NSEC_PER_SEC) - DispatchQueue.main.asyncAfter(deadline: time) { - let resultCount = Int(arc4random_uniform(20)) - completion(resultCount) - } - } - - fileprivate static func handleAction(_ action: Action, fromState state: State) -> State { - var state = state - switch action { - case .beginBatchFetch: - state.fetchingMore = true - case let .endBatchFetch(resultCount): - state.itemCount += resultCount - state.fetchingMore = false - } - return state - } -} diff --git a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Podfile b/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/AppDelegate.h deleted file mode 100644 index c30a27f4dc..0000000000 --- a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#define UseAutomaticLayout 1 - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/AppDelegate.m deleted file mode 100644 index faa44dc60b..0000000000 --- a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/AppDelegate.m +++ /dev/null @@ -1,28 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" - -#import -#import - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]]; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/GradientTableNode.h b/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/GradientTableNode.h deleted file mode 100644 index e679beb7d7..0000000000 --- a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/GradientTableNode.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// GradientTableNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -/** - * This ASCellNode contains an ASTableNode. It intelligently interacts with a containing ASCollectionView, - * to preload and clean up contents as the user scrolls around both vertically and horizontally — in a way that minimizes memory usage. - */ -@interface GradientTableNode : ASCellNode - -- (instancetype)initWithElementSize:(CGSize)size; - -@property (nonatomic) NSInteger pageNumber; - -@end diff --git a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/GradientTableNode.mm b/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/GradientTableNode.mm deleted file mode 100644 index af36ca637c..0000000000 --- a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/GradientTableNode.mm +++ /dev/null @@ -1,79 +0,0 @@ -// -// GradientTableNode.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "GradientTableNode.h" -#import "RandomCoreGraphicsNode.h" -#import "AppDelegate.h" - -#import - -#import -#import - - -@interface GradientTableNode () -{ - ASTableNode *_tableNode; - CGSize _elementSize; -} - -@end - - -@implementation GradientTableNode - -- (instancetype)initWithElementSize:(CGSize)size -{ - if (!(self = [super init])) - return nil; - - _elementSize = size; - - _tableNode = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain]; - _tableNode.delegate = self; - _tableNode.dataSource = self; - - ASRangeTuningParameters rangeTuningParameters; - rangeTuningParameters.leadingBufferScreenfuls = 1.0; - rangeTuningParameters.trailingBufferScreenfuls = 0.5; - [_tableNode setTuningParameters:rangeTuningParameters forRangeType:ASLayoutRangeTypeDisplay]; - - [self addSubnode:_tableNode]; - - return self; -} - -- (NSInteger)tableNode:(ASTableNode *)tableNode numberOfRowsInSection:(NSInteger)section -{ - return 100; -} - -- (ASCellNode *)tableNode:(ASTableNode *)tableNode nodeForRowAtIndexPath:(NSIndexPath *)indexPath -{ - RandomCoreGraphicsNode *elementNode = [[RandomCoreGraphicsNode alloc] init]; - elementNode.style.preferredSize = _elementSize; - elementNode.indexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:_pageNumber]; - - return elementNode; -} - -- (void)tableNode:(ASTableNode *)tableNode didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [tableNode deselectRowAtIndexPath:indexPath animated:NO]; - [_tableNode reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; -} - -- (void)layout -{ - [super layout]; - - _tableNode.frame = self.bounds; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/Info.plist deleted file mode 100644 index 35d842827b..0000000000 --- a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/RandomCoreGraphicsNode.h b/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/RandomCoreGraphicsNode.h deleted file mode 100644 index c07752ab1a..0000000000 --- a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/RandomCoreGraphicsNode.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// RandomCoreGraphicsNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface RandomCoreGraphicsNode : ASCellNode -{ - ASTextNode *_indexPathTextNode; -} - -@property NSIndexPath *indexPath; - -@end diff --git a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/RandomCoreGraphicsNode.m b/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/RandomCoreGraphicsNode.m deleted file mode 100644 index bf114349e5..0000000000 --- a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/RandomCoreGraphicsNode.m +++ /dev/null @@ -1,103 +0,0 @@ -// -// RandomCoreGraphicsNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "RandomCoreGraphicsNode.h" -#import - -@implementation RandomCoreGraphicsNode - -@synthesize indexPath = _indexPath; - -+ (UIColor *)randomColor -{ - CGFloat hue = ( arc4random() % 256 / 256.0 ); // 0.0 to 1.0 - CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from white - CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from black - return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1]; -} - -+ (void)drawRect:(CGRect)bounds withParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing -{ - CGFloat locations[3]; - NSMutableArray *colors = [NSMutableArray arrayWithCapacity:3]; - [colors addObject:(id)[[RandomCoreGraphicsNode randomColor] CGColor]]; - locations[0] = 0.0; - [colors addObject:(id)[[RandomCoreGraphicsNode randomColor] CGColor]]; - locations[1] = 1.0; - [colors addObject:(id)[[RandomCoreGraphicsNode randomColor] CGColor]]; - locations[2] = ( arc4random() % 256 / 256.0 ); - - - CGContextRef ctx = UIGraphicsGetCurrentContext(); - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)colors, locations); - - CGContextDrawLinearGradient(ctx, gradient, CGPointZero, CGPointMake(bounds.size.width, bounds.size.height), 0); - - CGGradientRelease(gradient); - CGColorSpaceRelease(colorSpace); -} - -- (instancetype)init -{ - if (!(self = [super init])) { - return nil; - } - - _indexPathTextNode = [[ASTextNode alloc] init]; - [self addSubnode:_indexPathTextNode]; - - return self; -} - -- (void)setIndexPath:(NSIndexPath *)indexPath -{ - @synchronized (self) { - _indexPath = indexPath; - _indexPathTextNode.attributedText = [[NSAttributedString alloc] initWithString:[indexPath description] attributes:nil]; - } -} - -- (NSIndexPath *)indexPath -{ - NSIndexPath *indexPath = nil; - @synchronized (self) { - indexPath = _indexPath; - } - return indexPath; -} - -- (void)layout -{ - [super layout]; - - _indexPathTextNode.frame = self.bounds; -} - -#if 0 -- (void)fetchData -{ - NSLog(@"fetchData - %@, %@", self, self.indexPath); - [super fetchData]; -} - -- (void)clearFetchedData -{ - NSLog(@"clearFetchedData - %@, %@", self, self.indexPath); - [super clearFetchedData]; -} - -- (void)visibilityDidChange:(BOOL)isVisible -{ - NSLog(@"visibilityDidChange:%d - %@, %@", isVisible, self, self.indexPath); - [super visibilityDidChange:isVisible]; -} -#endif - -@end diff --git a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/ViewController.h deleted file mode 100644 index c8a0626291..0000000000 --- a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : UIViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/ViewController.m deleted file mode 100644 index 7e852414c4..0000000000 --- a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/ViewController.m +++ /dev/null @@ -1,86 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "ViewController.h" -#import "GradientTableNode.h" - -@interface ViewController () -{ - ASPagerNode *_pagerNode; -} - -@end - -@implementation ViewController - -#pragma mark - -#pragma mark UIViewController. - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - _pagerNode = [[ASPagerNode alloc] init]; - _pagerNode.dataSource = self; - _pagerNode.delegate = self; - ASDisplayNode.shouldShowRangeDebugOverlay = YES; - - // Could implement ASCollectionDelegate if we wanted extra callbacks, like from UIScrollView. - //_pagerNode.delegate = self; - - self.title = @"Paging Table Nodes"; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRedo - target:self - action:@selector(reloadEverything)]; - - return self; -} - -- (void)reloadEverything -{ - [_pagerNode reloadData]; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [self.view addSubnode:_pagerNode]; -} - -- (void)viewWillLayoutSubviews -{ - _pagerNode.frame = self.view.bounds; -} - -#pragma mark - -#pragma mark ASPagerNode. - -- (ASCellNode *)pagerNode:(ASPagerNode *)pagerNode nodeAtIndex:(NSInteger)index -{ - CGSize boundsSize = pagerNode.bounds.size; - CGSize gradientRowSize = CGSizeMake(boundsSize.width, 100); - GradientTableNode *node = [[GradientTableNode alloc] initWithElementSize:gradientRowSize]; - node.pageNumber = index; - return node; -} - -- (ASSizeRange)pagerNode:(ASPagerNode *)pagerNode constrainedSizeForNodeAtIndex:(NSInteger)index; -{ - return ASSizeRangeMake(pagerNode.bounds.size); -} - -- (NSInteger)numberOfPagesInPagerNode:(ASPagerNode *)pagerNode -{ - return 10; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/main.m b/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples/VerticalWithinHorizontalScrolling/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/Videos/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples/Videos/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/Videos/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/Videos/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples/Videos/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/Videos/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/Videos/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples/Videos/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/Videos/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/Videos/Podfile b/submodules/AsyncDisplayKit/examples/Videos/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples/Videos/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples/Videos/Sample/ASVideoNode.h b/submodules/AsyncDisplayKit/examples/Videos/Sample/ASVideoNode.h deleted file mode 100644 index bec76ccc57..0000000000 --- a/submodules/AsyncDisplayKit/examples/Videos/Sample/ASVideoNode.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// ASVideoNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -typedef NS_ENUM(NSUInteger, ASVideoGravity) { - ASVideoGravityResizeAspect, - ASVideoGravityResizeAspectFill, - ASVideoGravityResize -}; - -// set up boolean to repeat video -// set up delegate methods to provide play button -// tapping should play and pause - -@interface ASVideoNode : ASDisplayNode -@property (nonatomic) NSURL *URL; -@property (nonatomic) BOOL shouldRepeat; -@property (nonatomic) ASVideoGravity gravity; - -- (instancetype)initWithURL:(NSURL *)URL; -- (instancetype)initWithURL:(NSURL *)URL videoGravity:(ASVideoGravity)gravity; - -- (void)play; -- (void)pause; - -@end - -@protocol ASVideoNodeDelegate - -@end diff --git a/submodules/AsyncDisplayKit/examples/Videos/Sample/ASVideoNode.m b/submodules/AsyncDisplayKit/examples/Videos/Sample/ASVideoNode.m deleted file mode 100644 index f7db712b5b..0000000000 --- a/submodules/AsyncDisplayKit/examples/Videos/Sample/ASVideoNode.m +++ /dev/null @@ -1,80 +0,0 @@ -// -// ASVideoNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - - -#import "ASVideoNode.h" - -@interface ASVideoNode () -@property (nonatomic) AVPlayer *player; -@end - -@implementation ASVideoNode - -- (instancetype)initWithURL:(NSURL *)URL; -{ - return [self initWithURL:URL videoGravity:ASVideoGravityResizeAspect]; -} - -- (instancetype)initWithURL:(NSURL *)URL videoGravity:(ASVideoGravity)gravity; -{ - if (!(self = [super initWithLayerBlock:^CALayer *{ - AVPlayerLayer *layer = [[AVPlayerLayer alloc] init]; - AVPlayerItem *item = [[AVPlayerItem alloc] initWithURL:URL]; - - layer.player = [[AVPlayer alloc] initWithPlayerItem:item]; - - return layer; - }])) { return nil; } - - self.gravity = gravity; - - return self; -} - -- (void)setGravity:(ASVideoGravity)gravity; -{ - switch (gravity) { - case ASVideoGravityResize: - ((AVPlayerLayer *)self.layer).videoGravity = AVLayerVideoGravityResize; - break; - case ASVideoGravityResizeAspect: - ((AVPlayerLayer *)self.layer).videoGravity = AVLayerVideoGravityResizeAspect; - break; - case ASVideoGravityResizeAspectFill: - ((AVPlayerLayer *)self.layer).videoGravity = AVLayerVideoGravityResizeAspectFill; - break; - default: - ((AVPlayerLayer *)self.layer).videoGravity = AVLayerVideoGravityResizeAspect; - break; - } -} - -- (ASVideoGravity)gravity; -{ - if ([((AVPlayerLayer *)self.layer).contentsGravity isEqualToString:AVLayerVideoGravityResize]) { - return ASVideoGravityResize; - } - if ([((AVPlayerLayer *)self.layer).contentsGravity isEqualToString:AVLayerVideoGravityResizeAspectFill]) { - return ASVideoGravityResizeAspectFill; - } - - return ASVideoGravityResizeAspect; -} - -- (void)play; -{ - [[((AVPlayerLayer *)self.layer) player] play]; -} - -- (void)pause; -{ - [[((AVPlayerLayer *)self.layer) player] pause]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/Videos/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples/Videos/Sample/AppDelegate.h deleted file mode 100644 index 19db03c153..0000000000 --- a/submodules/AsyncDisplayKit/examples/Videos/Sample/AppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples/Videos/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples/Videos/Sample/AppDelegate.m deleted file mode 100644 index d0fd66f775..0000000000 --- a/submodules/AsyncDisplayKit/examples/Videos/Sample/AppDelegate.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[ViewController alloc] init]; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/Videos/Sample/Info.plist b/submodules/AsyncDisplayKit/examples/Videos/Sample/Info.plist deleted file mode 100644 index 35d842827b..0000000000 --- a/submodules/AsyncDisplayKit/examples/Videos/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples/Videos/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples/Videos/Sample/ViewController.h deleted file mode 100644 index 40cc00f2fc..0000000000 --- a/submodules/AsyncDisplayKit/examples/Videos/Sample/ViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// -#import - -@interface ViewController : UIViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples/Videos/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples/Videos/Sample/ViewController.m deleted file mode 100644 index 988b3579b8..0000000000 --- a/submodules/AsyncDisplayKit/examples/Videos/Sample/ViewController.m +++ /dev/null @@ -1,200 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" -#import - -@interface ViewController() -@property (nonatomic, strong) ASDisplayNode *rootNode; -@property (nonatomic, strong) ASVideoNode *guitarVideoNode; -@end - -@implementation ViewController - -#pragma mark - UIViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - // Root node for the view controller - _rootNode = [ASDisplayNode new]; - _rootNode.frame = self.view.bounds; - _rootNode.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - - ASVideoNode *guitarVideoNode = self.guitarVideoNode; - [_rootNode addSubnode:self.guitarVideoNode]; - - ASVideoNode *nicCageVideoNode = self.nicCageVideoNode; - [_rootNode addSubnode:nicCageVideoNode]; - - // Video node with custom play button - ASVideoNode *simonVideoNode = self.simonVideoNode; - [_rootNode addSubnode:simonVideoNode]; - - ASVideoNode *hlsVideoNode = self.hlsVideoNode; - [_rootNode addSubnode:hlsVideoNode]; - - CGSize mainScreenBoundsSize = [UIScreen mainScreen].bounds.size; - - _rootNode.layoutSpecBlock = ^ASLayoutSpec *(ASDisplayNode * _Nonnull node, ASSizeRange constrainedSize) { - - // Layout all nodes absolute in a static layout spec - guitarVideoNode.style.preferredSize = CGSizeMake(mainScreenBoundsSize.width, mainScreenBoundsSize.height / 3.0); - guitarVideoNode.style.layoutPosition = CGPointMake(0, 0); - - nicCageVideoNode.style.preferredSize = CGSizeMake(mainScreenBoundsSize.width/2, mainScreenBoundsSize.height / 3.0); - nicCageVideoNode.style.layoutPosition = CGPointMake(mainScreenBoundsSize.width / 2.0, mainScreenBoundsSize.height / 3.0); - - simonVideoNode.style.preferredSize = CGSizeMake(mainScreenBoundsSize.width/2, mainScreenBoundsSize.height / 3.0); - simonVideoNode.style.layoutPosition = CGPointMake(0.0, mainScreenBoundsSize.height - (mainScreenBoundsSize.height / 3.0)); - - hlsVideoNode.style.preferredSize = CGSizeMake(mainScreenBoundsSize.width / 2.0, mainScreenBoundsSize.height / 3.0); - hlsVideoNode.style.layoutPosition = CGPointMake(0.0, mainScreenBoundsSize.height / 3.0); - - return [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:@[guitarVideoNode, nicCageVideoNode, simonVideoNode, hlsVideoNode]]; - }; - - // Delay setting video asset for testing that the transition between the placeholder and setting/playing the asset is seamless. - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - hlsVideoNode.asset = [AVAsset assetWithURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8"]]; - [hlsVideoNode play]; - }); - - [self.view addSubnode:_rootNode]; -} - -#pragma mark - Getter / Setter - -- (ASVideoNode *)guitarVideoNode; -{ - if (_guitarVideoNode) { - return _guitarVideoNode; - } - - _guitarVideoNode = [[ASVideoNode alloc] init]; - _guitarVideoNode.asset = [AVAsset assetWithURL:[NSURL URLWithString:@"https://files.parsetfss.com/8a8a3b0c-619e-4e4d-b1d5-1b5ba9bf2b42/tfss-3045b261-7e93-4492-b7e5-5d6358376c9f-editedLiveAndDie.mov"]]; - _guitarVideoNode.gravity = AVLayerVideoGravityResizeAspectFill; - _guitarVideoNode.backgroundColor = [UIColor lightGrayColor]; - _guitarVideoNode.periodicTimeObserverTimescale = 1; //Default is 100 - _guitarVideoNode.delegate = self; - - return _guitarVideoNode; -} - -- (ASVideoNode *)nicCageVideoNode; -{ - ASVideoNode *nicCageVideoNode = [[ASVideoNode alloc] init]; - nicCageVideoNode.delegate = self; - nicCageVideoNode.asset = [AVAsset assetWithURL:[NSURL URLWithString:@"https://files.parsetfss.com/8a8a3b0c-619e-4e4d-b1d5-1b5ba9bf2b42/tfss-753fe655-86bb-46da-89b7-aa59c60e49c0-niccage.mp4"]]; - nicCageVideoNode.gravity = AVLayerVideoGravityResize; - nicCageVideoNode.backgroundColor = [UIColor lightGrayColor]; - nicCageVideoNode.shouldAutorepeat = YES; - nicCageVideoNode.shouldAutoplay = YES; - nicCageVideoNode.muted = YES; - - return nicCageVideoNode; -} - -- (ASVideoNode *)simonVideoNode -{ - ASVideoNode *simonVideoNode = [[ASVideoNode alloc] init]; - - NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"simon" ofType:@"mp4"]]; - simonVideoNode.asset = [AVAsset assetWithURL:url]; - simonVideoNode.gravity = AVLayerVideoGravityResizeAspect; - simonVideoNode.backgroundColor = [UIColor lightGrayColor]; - simonVideoNode.shouldAutorepeat = YES; - simonVideoNode.shouldAutoplay = YES; - simonVideoNode.muted = YES; - - return simonVideoNode; -} - -- (ASVideoNode *)hlsVideoNode; -{ - ASVideoNode *hlsVideoNode = [[ASVideoNode alloc] init]; - - hlsVideoNode.delegate = self; - hlsVideoNode.gravity = AVLayerVideoGravityResize; - hlsVideoNode.backgroundColor = [UIColor redColor]; // Should not be seen after placeholder image is loaded - hlsVideoNode.shouldAutorepeat = YES; - hlsVideoNode.shouldAutoplay = YES; - hlsVideoNode.muted = YES; - - // Placeholder image - hlsVideoNode.URL = [NSURL URLWithString:@"https://upload.wikimedia.org/wikipedia/en/5/52/Testcard_F.jpg"]; - - return hlsVideoNode; -} - -- (ASButtonNode *)playButton; -{ - ASButtonNode *playButtonNode = [[ASButtonNode alloc] init]; - - UIImage *image = [UIImage imageNamed:@"playButton@2x.png"]; - [playButtonNode setImage:image forState:UIControlStateNormal]; - [playButtonNode setImage:[UIImage imageNamed:@"playButtonSelected@2x.png"] forState:UIControlStateHighlighted]; - - // Change placement of play button if necessary - //playButtonNode.contentHorizontalAlignment = ASHorizontalAlignmentStart; - //playButtonNode.contentVerticalAlignment = ASVerticalAlignmentCenter; - - return playButtonNode; -} - -#pragma mark - Actions - -- (void)didTapVideoNode:(ASVideoNode *)videoNode -{ - if (videoNode == self.guitarVideoNode) { - if (videoNode.playerState == ASVideoNodePlayerStatePlaying) { - [videoNode pause]; - } else if(videoNode.playerState == ASVideoNodePlayerStateLoading) { - [videoNode pause]; - } else { - [videoNode play]; - } - return; - } - if (videoNode.player.muted == YES) { - videoNode.player.muted = NO; - } else { - videoNode.player.muted = YES; - } -} - -#pragma mark - ASVideoNodeDelegate - -- (void)videoNode:(ASVideoNode *)videoNode willChangePlayerState:(ASVideoNodePlayerState)state toState:(ASVideoNodePlayerState)toState -{ - //Ignore nicCageVideo - if (videoNode != _guitarVideoNode) { - return; - } - - if (toState == ASVideoNodePlayerStatePlaying) { - NSLog(@"guitarVideoNode is playing"); - } else if (toState == ASVideoNodePlayerStateFinished) { - NSLog(@"guitarVideoNode finished"); - } else if (toState == ASVideoNodePlayerStateLoading) { - NSLog(@"guitarVideoNode is buffering"); - } -} - -- (void)videoNode:(ASVideoNode *)videoNode didPlayToTimeInterval:(NSTimeInterval)timeInterval -{ - if (videoNode != _guitarVideoNode) { - return; - } - - NSLog(@"guitarVideoNode playback time is: %f",timeInterval); -} - -@end diff --git a/submodules/AsyncDisplayKit/examples/Videos/Sample/bearacrat@2x.jpg b/submodules/AsyncDisplayKit/examples/Videos/Sample/bearacrat@2x.jpg deleted file mode 100644 index a083949d6f..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/Videos/Sample/bearacrat@2x.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/Videos/Sample/main.m b/submodules/AsyncDisplayKit/examples/Videos/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples/Videos/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples/Videos/Sample/playButton@2x.png b/submodules/AsyncDisplayKit/examples/Videos/Sample/playButton@2x.png deleted file mode 100644 index 9ac2481afe..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/Videos/Sample/playButton@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/Videos/Sample/playButtonSelected@2x.png b/submodules/AsyncDisplayKit/examples/Videos/Sample/playButtonSelected@2x.png deleted file mode 100644 index f22ebc0f81..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/Videos/Sample/playButtonSelected@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples/Videos/Sample/simon.mp4 b/submodules/AsyncDisplayKit/examples/Videos/Sample/simon.mp4 deleted file mode 100644 index 95a4176c82..0000000000 Binary files a/submodules/AsyncDisplayKit/examples/Videos/Sample/simon.mp4 and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 102e5c6013..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/AppDelegate.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/AppDelegate.swift deleted file mode 100644 index 990773f687..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/AppDelegate.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// AppDelegate.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit -import AsyncDisplayKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - - // UIKit Home Feed viewController & navController - - let UIKitNavController = UINavigationController(rootViewController: PhotoFeedTableViewController()) - UIKitNavController.tabBarItem.title = "UIKit" - - // ASDK Home Feed viewController & navController - - let ASDKNavController = UINavigationController(rootViewController: PhotoFeedTableNodeController()) - ASDKNavController.tabBarItem.title = "ASDK" - - // UITabBarController - - let tabBarController = UITabBarController() - tabBarController.viewControllers = [UIKitNavController, ASDKNavController] - tabBarController.selectedIndex = 1 - tabBarController.tabBar.tintColor = UIColor.mainBarTintColor - - // Nav Bar appearance - - UINavigationBar.appearance().barTintColor = UIColor.mainBarTintColor - - // UIWindow - - window = UIWindow() - window?.backgroundColor = .white - window?.rootViewController = tabBarController - window?.makeKeyAndVisible() - - return true - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Assets.xcassets/AppIcon.appiconset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 1d060ed288..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "83.5x83.5", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Base.lproj/LaunchScreen.storyboard b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index c1191aaf8d..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Base.lproj/Main.storyboard b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Base.lproj/Main.storyboard deleted file mode 100644 index 273375fc70..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Constants.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Constants.swift deleted file mode 100644 index f4da709f26..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Constants.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// Constants.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -struct Constants { - struct Unsplash { - struct URLS { - static let Host = "https://api.unsplash.com/" - static let PopularEndpoint = "photos?order_by=popular" - static let SearchEndpoint = "photos/search?geo=" //latitude,longitude,radius - static let UserEndpoint = "photos?user_id=" - static let ConsumerKey = "&client_id=3b99a69cee09770a4a0bbb870b437dbda53efb22f6f6de63714b71c4df7c9642" - static let ImagesPerPage = 30 - } - } - - struct CellLayout { - static let FontSize: CGFloat = 14 - static let HeaderHeight: CGFloat = 50 - static let UserImageHeight: CGFloat = 30 - static let HorizontalBuffer: CGFloat = 10 - static let VerticalBuffer: CGFloat = 5 - static let InsetForAvatar = UIEdgeInsets(top: HorizontalBuffer, left: 0, bottom: HorizontalBuffer, right: HorizontalBuffer) - static let InsetForHeader = UIEdgeInsets(top: 0, left: HorizontalBuffer, bottom: 0, right: HorizontalBuffer) - static let InsetForFooter = UIEdgeInsets(top: VerticalBuffer, left: HorizontalBuffer, bottom: VerticalBuffer, right: HorizontalBuffer) - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Date.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Date.swift deleted file mode 100644 index d367584b10..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Date.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// Date.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import Foundation - -extension Date { - static let iso8601Formatter: DateFormatter = { - let formatter = DateFormatter() - formatter.calendar = Calendar(identifier: .iso8601) - formatter.locale = Locale(identifier: "en_US_POSIX") - formatter.timeZone = TimeZone(secondsFromGMT: 0) - formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" - return formatter - }() - - static func timeStringSince(fromConverted date: Date) -> String { - let diffDates = NSCalendar.current.dateComponents([.day, .hour, .second], from: date, to: Date()) - - if let week = diffDates.day, week > 7 { - return "\(week / 7)w" - } else if let day = diffDates.day, day > 0 { - return "\(day)d" - } else if let hour = diffDates.hour, hour > 0 { - return "\(hour)h" - } else if let second = diffDates.second, second > 0 { - return "\(second)s" - } else if let zero = diffDates.second, zero == 0 { - return "1s" - } else { - return "ERROR" - } - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Info.plist b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Info.plist deleted file mode 100644 index c12df3b8a9..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Info.plist +++ /dev/null @@ -1,43 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/NetworkImageView.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/NetworkImageView.swift deleted file mode 100644 index 937f87fadf..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/NetworkImageView.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// NetworkImageView.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -let imageCache = NSCache() - -class NetworkImageView: UIImageView { - - var imageUrlString: String? - - func loadImageUsingUrlString(urlString: String) { - - imageUrlString = urlString - - let url = URL(string: urlString) - - image = nil - - if let imageFromCache = imageCache.object(forKey: urlString as NSString) { - self.image = imageFromCache - return - } - - URLSession.shared.dataTask(with: url!, completionHandler: { (data, respones, error) in - - if error != nil { - print(error!) - return - } - - DispatchQueue.main.async { - let imageToCache = UIImage(data: data!) - if self.imageUrlString == urlString { - self.image = imageToCache - } - imageCache.setObject(imageToCache!, forKey: urlString as NSString) - } - }).resume() - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/NumberFormatter.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/NumberFormatter.swift deleted file mode 100644 index 246f398b94..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/NumberFormatter.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// NumberFormatter.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import Foundation - -extension NumberFormatter { - static let decimalNumberFormatter: NumberFormatter = { - let formatter = NumberFormatter() - formatter.numberStyle = .decimal - return formatter - }() -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/OrderedDictionary/OrderedDictionary+Codable.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/OrderedDictionary/OrderedDictionary+Codable.swift deleted file mode 100644 index 45e5de48f7..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/OrderedDictionary/OrderedDictionary+Codable.swift +++ /dev/null @@ -1,142 +0,0 @@ -// -// OrderedDictionary+Codable.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#if swift(>=4.1) - -extension OrderedDictionary: Encodable where Key: Encodable, Value: Encodable { - - /// __inheritdoc__ - public func encode(to encoder: Encoder) throws { - // Encode the ordered dictionary as an array of alternating key-value pairs. - var container = encoder.unkeyedContainer() - - for (key, value) in self { - try container.encode(key) - try container.encode(value) - } - } - -} - -extension OrderedDictionary: Decodable where Key: Decodable, Value: Decodable { - - /// __inheritdoc__ - public init(from decoder: Decoder) throws { - // Decode the ordered dictionary from an array of alternating key-value pairs. - self.init() - - var container = try decoder.unkeyedContainer() - - while !container.isAtEnd { - let key = try container.decode(Key.self) - guard !container.isAtEnd else { throw DecodingError.unkeyedContainerReachedEndBeforeValue(decoder.codingPath) } - let value = try container.decode(Value.self) - - self[key] = value - } - } - -} - -#else - -extension OrderedDictionary: Encodable { - - /// __inheritdoc__ - public func encode(to encoder: Encoder) throws { - // Since Swift 4.0 lacks the protocol conditional conformance support, we have to make the - // whole OrderedDictionary type conform to Encodable and assert that the key and value - // types conform to Encodable. Furthermore, we leverage a trick of super encoders to be - // able to encode objects without knowing their exact types. This trick was used in the - // standard library for encoding/decoding Dictionary before Swift 4.1. - - _assertTypeIsEncodable(Key.self, in: type(of: self)) - _assertTypeIsEncodable(Value.self, in: type(of: self)) - - var container = encoder.unkeyedContainer() - - for (key, value) in self { - let keyEncoder = container.superEncoder() - try (key as! Encodable).encode(to: keyEncoder) - - let valueEncoder = container.superEncoder() - try (value as! Encodable).encode(to: valueEncoder) - } - } - - private func _assertTypeIsEncodable(_ type: T.Type, in wrappingType: Any.Type) { - guard T.self is Encodable.Type else { - if T.self == Encodable.self || T.self == Codable.self { - preconditionFailure("\(wrappingType) does not conform to Encodable because Encodable does not conform to itself. You must use a concrete type to encode or decode.") - } else { - preconditionFailure("\(wrappingType) does not conform to Encodable because \(T.self) does not conform to Encodable.") - } - } - } - -} - -extension OrderedDictionary: Decodable { - - /// __inheritdoc__ - public init(from decoder: Decoder) throws { - // Since Swift 4.0 lacks the protocol conditional conformance support, we have to make the - // whole OrderedDictionary type conform to Decodable and assert that the key and value - // types conform to Decodable. Furthermore, we leverage a trick of super decoders to be - // able to decode objects without knowing their exact types. This trick was used in the - // standard library for encoding/decoding Dictionary before Swift 4.1. - - self.init() - - _assertTypeIsDecodable(Key.self, in: type(of: self)) - _assertTypeIsDecodable(Value.self, in: type(of: self)) - - var container = try decoder.unkeyedContainer() - - let keyMetaType = (Key.self as! Decodable.Type) - let valueMetaType = (Value.self as! Decodable.Type) - - while !container.isAtEnd { - let keyDecoder = try container.superDecoder() - let key = try keyMetaType.init(from: keyDecoder) as! Key - - guard !container.isAtEnd else { throw DecodingError.unkeyedContainerReachedEndBeforeValue(decoder.codingPath) } - - let valueDecoder = try container.superDecoder() - let value = try valueMetaType.init(from: valueDecoder) as! Value - - self[key] = value - } - } - - private func _assertTypeIsDecodable(_ type: T.Type, in wrappingType: Any.Type) { - guard T.self is Decodable.Type else { - if T.self == Decodable.self || T.self == Codable.self { - preconditionFailure("\(wrappingType) does not conform to Decodable because Decodable does not conform to itself. You must use a concrete type to encode or decode.") - } else { - preconditionFailure("\(wrappingType) does not conform to Decodable because \(T.self) does not conform to Decodable.") - } - } - } - -} - -#endif - -fileprivate extension DecodingError { - - fileprivate static func unkeyedContainerReachedEndBeforeValue(_ codingPath: [CodingKey]) -> DecodingError { - return DecodingError.dataCorrupted( - DecodingError.Context( - codingPath: codingPath, - debugDescription: "Unkeyed container reached end before value in key-value pair." - ) - ) - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/OrderedDictionary/OrderedDictionary+Description.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/OrderedDictionary/OrderedDictionary+Description.swift deleted file mode 100644 index 604dbac119..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/OrderedDictionary/OrderedDictionary+Description.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// OrderedDictionary+Description.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -extension OrderedDictionary: CustomStringConvertible { - - /// A textual representation of the ordered dictionary. - public var description: String { - return makeDescription(debug: false) - } - -} - -extension OrderedDictionary: CustomDebugStringConvertible { - - /// A textual representation of the ordered dictionary, suitable for debugging. - public var debugDescription: String { - return makeDescription(debug: true) - } - -} - -extension OrderedDictionary { - - fileprivate func makeDescription(debug: Bool) -> String { - // The implementation of the description is inspired by zwaldowski's implementation of the - // ordered dictionary. See http://bit.ly/2iqGhrb - - if isEmpty { return "[:]" } - - let printFunction: (Any, inout String) -> () = { - if debug { - return { debugPrint($0, separator: "", terminator: "", to: &$1) } - } else { - return { print($0, separator: "", terminator: "", to: &$1) } - } - }() - - let descriptionForItem: (Any) -> String = { item in - var description = "" - printFunction(item, &description) - return description - } - - let bodyComponents = map { element in - return descriptionForItem(element.key) + ": " + descriptionForItem(element.value) - } - - let body = bodyComponents.joined(separator: ", ") - - return "[\(body)]" - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/OrderedDictionary/OrderedDictionary.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/OrderedDictionary/OrderedDictionary.swift deleted file mode 100644 index 38bb9853f2..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/OrderedDictionary/OrderedDictionary.swift +++ /dev/null @@ -1,618 +0,0 @@ -// -// OrderedDictionary.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -/// A generic collection for storing key-value pairs in an ordered manner. -/// -/// Same as in a dictionary all keys in the collection are unique and have an associated value. -/// Same as in an array, all key-value pairs (elements) are kept sorted and accessible by -/// a zero-based integer index. -public struct OrderedDictionary: BidirectionalCollection { - - // ======================================================= // - // MARK: - Type Aliases - // ======================================================= // - - /// The type of the key-value pair stored in the ordered dictionary. - public typealias Element = (key: Key, value: Value) - - /// The type of the index. - public typealias Index = Int - - /// The type of the indices collection. - public typealias Indices = CountableRange - - /// The type of the contiguous subrange of the ordered dictionary's elements. - /// - /// - SeeAlso: OrderedDictionarySlice - public typealias SubSequence = OrderedDictionarySlice - - // ======================================================= // - // MARK: - Initialization - // ======================================================= // - - /// Creates an empty ordered dictionary. - public init() {} - - /// Creates an ordered dictionary from a sequence of values keyed by a key which gets extracted - /// from the value in the provided closure. - /// - /// - Parameter values: The sequence of values. - /// - Parameter getKey: The closure which provides a key for the given value from the values - /// sequence. - public init(values: Values, keyedBy getKey: (Value) -> Key) where Values.Element == Value { - self.init(values.map { (getKey($0), $0) }) - } - - /// Creates an ordered dictionary from a sequence of values keyed by a key loaded from the value - /// at the given key path. - /// - /// - Parameter values: The sequence of values. - /// - Parameter keyPath: The key path for the value to locate its key at. - public init(values: [Value], keyedBy keyPath: KeyPath) { - self.init(values.map { ($0[keyPath: keyPath], $0) }) - } - - /// Creates an ordered dictionary from a regular unsorted dictionary by sorting it using the - /// the given sort function. - /// - /// - Parameter unsorted: The unsorted dictionary. - /// - Parameter areInIncreasingOrder: The sort function which compares the key-value pairs. - public init(unsorted: Dictionary, areInIncreasingOrder: (Element, Element) -> Bool) { - let elements = unsorted - .map { (key: $0.key, value: $0.value) } - .sorted(by: areInIncreasingOrder) - - self.init(elements) - } - - /// Creates an ordered dictionary from a sequence of key-value pairs. - /// - /// - Parameter elements: The key-value pairs that will make up the new ordered dictionary. - /// Each key in `elements` must be unique. - public init(_ elements: S) where S.Element == Element { - for (key, value) in elements { - precondition(!containsKey(key), "Elements sequence contains duplicate keys") - self[key] = value - } - } - - // ======================================================= // - // MARK: - Ordered Keys & Values - // ======================================================= // - - /// A collection containing just the keys of the ordered dictionary in the correct order. - public var orderedKeys: OrderedDictionaryKeys { - return self.lazy.map { $0.key } - } - - /// A collection containing just the values of the ordered dictionary in the correct order. - public var orderedValues: OrderedDictionaryValues { - return self.lazy.map { $0.value } - } - - // ======================================================= // - // MARK: - Dictionary - // ======================================================= // - - /// Converts itself to a common unsorted dictionary. - public var unorderedDictionary: Dictionary { - return _keysToValues - } - - // ======================================================= // - // MARK: - Key-based Access - // ======================================================= // - - /// Accesses the value associated with the given key for reading and writing. - /// - /// This key-based subscript returns the value for the given key if the key is found in the - /// ordered dictionary, or `nil` if the key is not found. - /// - /// When you assign a value for a key and that key already exists, the ordered dictionary - /// overwrites the existing value and preservers the index of the key-value pair. If the ordered - /// dictionary does not contain the key, a new key-value pair is appended to the end of the - /// ordered dictionary. - /// - /// If you assign `nil` as the value for the given key, the ordered dictionary removes that key - /// and its associated value if it exists. - /// - /// - Parameter key: The key to find in the ordered dictionary. - /// - Returns: The value associated with `key` if `key` is in the ordered dictionary; otherwise, - /// `nil`. - public subscript(key: Key) -> Value? { - get { - return value(forKey: key) - } - set(newValue) { - if let newValue = newValue { - updateValue(newValue, forKey: key) - } else { - removeValue(forKey: key) - } - } - } - - /// Returns a Boolean value indicating whether the ordered dictionary contains the given key. - /// - /// - Parameter key: The key to be looked up. - /// - Returns: `true` if the ordered dictionary contains the given key; otherwise, `false`. - public func containsKey(_ key: Key) -> Bool { - return _keysToValues[key] != nil - } - - /// Returns the value associated with the given key if the key is found in the ordered - /// dictionary, or `nil` if the key is not found. - /// - /// - Parameter key: The key to find in the ordered dictionary. - /// - Returns: The value associated with `key` if `key` is in the ordered dictionary; otherwise, - /// `nil`. - public func value(forKey key: Key) -> Value? { - return _keysToValues[key] - } - - /// Updates the value stored in the ordered dictionary for the given key, or appends a new - /// key-value pair if the key does not exist. - /// - /// - Parameter value: The new value to add to the ordered dictionary. - /// - Parameter key: The key to associate with `value`. If `key` already exists in the ordered - /// dictionary, `value` replaces the existing associated value. If `key` is not already a key - /// of the ordered dictionary, the `(key, value)` pair is appended at the end of the ordered - /// dictionary. - @discardableResult - public mutating func updateValue(_ value: Value, forKey key: Key) -> Value? { - if containsKey(key) { - let currentValue = _unsafeValue(forKey: key) - - _keysToValues[key] = value - - return currentValue - } else { - _orderedKeys.append(key) - _keysToValues[key] = value - - return nil - } - } - - /// Removes the given key and its associated value from the ordered dictionary. - /// - /// If the key is found in the ordered dictionary, this method returns the key's associated - /// value. On removal, the indices of the ordered dictionary are invalidated. If the key is - /// not found in the ordered dictionary, this method returns `nil`. - /// - /// - Parameter key: The key to remove along with its associated value. - /// - Returns: The value that was removed, or `nil` if the key was not present in the - /// ordered dictionary. - /// - /// - SeeAlso: remove(at:) - @discardableResult - public mutating func removeValue(forKey key: Key) -> Value? { - guard let index = index(forKey: key) else { return nil } - - let currentValue = self[index].value - - _orderedKeys.remove(at: index) - _keysToValues[key] = nil - - return currentValue - } - - /// Removes all key-value pairs from the ordered dictionary and invalidates all indices. - /// - /// - Parameter keepCapacity: Whether the ordered dictionary should keep its underlying storage. - /// If you pass `true`, the operation preserves the storage capacity that the collection has, - /// otherwise the underlying storage is released. The default is `false`. - public mutating func removeAll(keepingCapacity keepCapacity: Bool = false) { - _orderedKeys.removeAll(keepingCapacity: keepCapacity) - _keysToValues.removeAll(keepingCapacity: keepCapacity) - } - - private func _unsafeValue(forKey key: Key) -> Value { - let value = _keysToValues[key] - precondition(value != nil, "Inconsistency error occurred in OrderedDictionary") - return value! - } - - // ======================================================= // - // MARK: - Index-based Access - // ======================================================= // - - /// Accesses the key-value pair at the specified position. - /// - /// The specified position has to be a valid index of the ordered dictionary. The index-base - /// subscript returns the key-value pair corresponding to the index. - /// - /// - Parameter position: The position of the key-value pair to access. `position` must be - /// a valid index of the ordered dictionary and not equal to `endIndex`. - /// - Returns: A tuple containing the key-value pair corresponding to `position`. - /// - /// - SeeAlso: update(:at:) - public subscript(position: Index) -> Element { - precondition(indices.contains(position), "OrderedDictionary index is out of range") - - let key = _orderedKeys[position] - let value = _unsafeValue(forKey: key) - - return (key, value) - } - - /// Returns the index for the given key. - /// - /// - Parameter key: The key to find in the ordered dictionary. - /// - Returns: The index for `key` and its associated value if `key` is in the ordered - /// dictionary; otherwise, `nil`. - public func index(forKey key: Key) -> Index? { - return _orderedKeys.index(of: key) - } - - /// Returns the key-value pair at the specified index, or `nil` if there is no key-value pair - /// at that index. - /// - /// - Parameter index: The index of the key-value pair to be looked up. `index` does not have to - /// be a valid index. - /// - Returns: A tuple containing the key-value pair corresponding to `index` if the index is - /// valid; otherwise, `nil`. - public func elementAt(_ index: Index) -> Element? { - return indices.contains(index) ? self[index] : nil - } - - /// Checks whether the given key-value pair can be inserted into to ordered dictionary by - /// validating the presence of the key. - /// - /// - Parameter newElement: The key-value pair to be inserted into the ordered dictionary. - /// - Returns: `true` if the key-value pair can be safely inserted; otherwise, `false`. - /// - /// - SeeAlso: canInsert(key:) - /// - SeeAlso: canInsert(at:) - @available(*, deprecated, message: "Use canInsert(key:) with the element's key instead") - public func canInsert(_ newElement: Element) -> Bool { - return canInsert(key: newElement.key) - } - - /// Checks whether a key-value pair with the given key can be inserted into the ordered - /// dictionary by validating its presence. - /// - /// - Parameter key: The key to be inserted into the ordered dictionary. - /// - Returns: `true` if the key can safely be inserted; ortherwise, `false`. - /// - /// - SeeAlso: canInsert(at:) - public func canInsert(key: Key) -> Bool { - return !containsKey(key) - } - - /// Checks whether a new key-value pair can be inserted into the ordered dictionary at the - /// given index. - /// - /// - Parameter index: The index the new key-value pair should be inserted at. - /// - Returns: `true` if a new key-value pair can be inserted at the specified index; otherwise, - /// `false`. - /// - /// - SeeAlso: canInsert(key:) - public func canInsert(at index: Index) -> Bool { - return index >= startIndex && index <= endIndex - } - - /// Inserts a new key-value pair at the specified position. - /// - /// If the key of the inserted pair already exists in the ordered dictionary, a runtime error - /// is triggered. Use `canInsert(_:)` for performing a check first, so that this method can - /// be executed safely. - /// - /// - Parameter newElement: The new key-value pair to insert into the ordered dictionary. The - /// key contained in the pair must not be already present in the ordered dictionary. - /// - Parameter index: The position at which to insert the new key-value pair. `index` must be - /// a valid index of the ordered dictionary or equal to `endIndex` property. - /// - /// - SeeAlso: canInsert(key:) - /// - SeeAlso: canInsert(at:) - /// - SeeAlso: update(:at:) - public mutating func insert(_ newElement: Element, at index: Index) { - precondition(canInsert(key: newElement.key), "Cannot insert duplicate key in OrderedDictionary") - precondition(canInsert(at: index), "Cannot insert at invalid index in OrderedDictionary") - - let (key, value) = newElement - - _orderedKeys.insert(key, at: index) - _keysToValues[key] = value - } - - /// Checks whether the key-value pair at the given index can be updated with the given key-value - /// pair. This is not the case if the key of the updated element is already present in the - /// ordered dictionary and located at another index than the updated one. - /// - /// Although this is a checking method, a valid index has to be provided. - /// - /// - Parameter newElement: The key-value pair to be set at the specified position. - /// - Parameter index: The position at which to set the key-value pair. `index` must be a valid - /// index of the ordered dictionary. - public func canUpdate(_ newElement: Element, at index: Index) -> Bool { - var keyPresentAtIndex = false - return _canUpdate(newElement, at: index, keyPresentAtIndex: &keyPresentAtIndex) - } - - /// Updates the key-value pair located at the specified position. - /// - /// If the key of the updated pair already exists in the ordered dictionary *and* is located at - /// a different position than the specified one, a runtime error is triggered. Use - /// `canUpdate(_:at:)` for performing a check first, so that this method can be executed safely. - /// - /// - Parameter newElement: The key-value pair to be set at the specified position. - /// - Parameter index: The position at which to set the key-value pair. `index` must be a valid - /// index of the ordered dictionary. - /// - /// - SeeAlso: canUpdate(_:at:) - /// - SeeAlso: insert(:at:) - @discardableResult - public mutating func update(_ newElement: Element, at index: Index) -> Element? { - // Store the flag indicating whether the key of the inserted element - // is present at the updated index - var keyPresentAtIndex = false - - precondition( - _canUpdate(newElement, at: index, keyPresentAtIndex: &keyPresentAtIndex), - "OrderedDictionary update duplicates key" - ) - - // Decompose the element - let (key, value) = newElement - - // Load the current element at the index - let replacedElement = self[index] - - // If its key differs, remove its associated value - if (!keyPresentAtIndex) { - _keysToValues.removeValue(forKey: replacedElement.key) - } - - // Store the new position of the key and the new value associated with the key - _orderedKeys[index] = key - _keysToValues[key] = value - - return replacedElement - } - - /// Removes and returns the key-value pair at the specified position if there is any key-value - /// pair, or `nil` if there is none. - /// - /// - Parameter index: The position of the key-value pair to remove. - /// - Returns: The element at the specified index, or `nil` if the position is not taken. - /// - /// - SeeAlso: removeValue(forKey:) - @discardableResult - public mutating func remove(at index: Index) -> Element? { - guard let element = elementAt(index) else { return nil } - - _orderedKeys.remove(at: index) - _keysToValues.removeValue(forKey: element.key) - - return element - } - - private func _canUpdate(_ newElement: Element, at index: Index, keyPresentAtIndex: inout Bool) -> Bool { - precondition(indices.contains(index), "OrderedDictionary index is out of range") - - let currentIndexOfKey = self.index(forKey: newElement.key) - - let keyNotPresent = currentIndexOfKey == nil - keyPresentAtIndex = currentIndexOfKey == index - - return keyNotPresent || keyPresentAtIndex - } - - // ======================================================= // - // MARK: - Moving Elements - // ======================================================= // - - /// Moves an existing key-value pair specified by the given key to the new index by removing it - /// from its original index first and inserting it at the new index. If the movement is - /// actually performed, the previous index of the key-value pair is returned. Otherwise, `nil` - /// is returned. - /// - /// - Parameter key: The key specifying the key-value pair to move. - /// - Parameter newIndex: The new index the key-value pair should be moved to. - /// - Returns: The previous index of the key-value pair if it was sucessfully moved. - @discardableResult - public mutating func moveElement(forKey key: Key, to newIndex: Index) -> Index? { - // Load the previous index and return nil if the index is not found. - guard let previousIndex = index(forKey: key) else { return nil } - - // If the previous and new indices match, threat it as if the movement was already - // performed. - guard previousIndex != newIndex else { return previousIndex } - - // Remove the value for the key at its original index. - let value = removeValue(forKey: key)! - - // Validate the new index. - precondition(canInsert(at: newIndex), "Cannot move to invalid index in OrderedDictionary") - - // Insert the element at the new index. - insert((key: key, value: value), at: newIndex) - - return previousIndex - } - - // ======================================================= // - // MARK: - Sorting Elements - // ======================================================= // - - /// Sorts the ordered dictionary in place, using the given predicate as the comparison between - /// elements. - /// - /// The predicate must be a *strict weak ordering* over the elements. - /// - /// - Parameter areInIncreasingOrder: A predicate that returns `true` if its first argument - /// should be ordered before its second argument; otherwise, `false`. - /// - /// - SeeAlso: MutableCollection.sort(by:), sorted(by:) - public mutating func sort(by areInIncreasingOrder: (Element, Element) -> Bool) { - _orderedKeys = _sortedElements(by: areInIncreasingOrder).map { $0.key } - } - - /// Returns a new ordered dictionary, sorted using the given predicate as the comparison between - /// elements. - /// - /// The predicate must be a *strict weak ordering* over the elements. - /// - /// - Parameter areInIncreasingOrder: A predicate that returns `true` if its first argument - /// should be ordered before its second argument; otherwise, `false`. - /// - Returns: A new ordered dictionary sorted according to the predicate. - /// - /// - SeeAlso: MutableCollection.sorted(by:), sort(by:) - /// - MutatingVariant: sort - public func sorted(by areInIncreasingOrder: (Element, Element) -> Bool) -> OrderedDictionary { - return OrderedDictionary(_sortedElements(by: areInIncreasingOrder)) - } - - private func _sortedElements(by areInIncreasingOrder: (Element, Element) -> Bool) -> [Element] { - return sorted(by: areInIncreasingOrder) - } - - // ======================================================= // - // MARK: - Slices - // ======================================================= // - - /// Accesses a contiguous subrange of the ordered dictionary. - /// - /// - Parameter bounds: A range of the ordered dictionary's indices. The bounds of the range - /// must be valid indices of the ordered dictionary. - /// - Returns: The slice view at the ordered dictionary in the specified subrange. - public subscript(bounds: Range) -> SubSequence { - return OrderedDictionarySlice(base: self, bounds: bounds) - } - - // ======================================================= // - // MARK: - Indices - // ======================================================= // - - /// The indices that are valid for subscripting the ordered dictionary. - public var indices: Indices { - return _orderedKeys.indices - } - - /// The position of the first key-value pair in a non-empty ordered dictionary. - public var startIndex: Index { - return _orderedKeys.startIndex - } - - /// The position which is one greater than the position of the last valid key-value pair in the - /// ordered dictionary. - public var endIndex: Index { - return _orderedKeys.endIndex - } - - /// Returns the position immediately after the given index. - public func index(after i: Index) -> Index { - return _orderedKeys.index(after: i) - } - - /// Returns the position immediately before the given index. - public func index(before i: Index) -> Index { - return _orderedKeys.index(before: i) - } - - // ======================================================= // - // MARK: - Internal Storage - // ======================================================= // - - /// The backing storage for the ordered keys. - fileprivate var _orderedKeys = [Key]() - - /// The backing storage for the mapping of keys to values. - fileprivate var _keysToValues = [Key: Value]() - -} - -// ======================================================= // -// MARK: - Subtypes -// ======================================================= // - -#if swift(>=4.1) - -/// A view into an ordered dictionary whose indices are a subrange of the indices of the ordered -/// dictionary. -public typealias OrderedDictionarySlice = Slice> - -/// A collection containing the keys of the ordered dictionary. -/// -/// Under the hood this is a lazily evaluated bidirectional collection deriving the keys from -/// the base ordered dictionary on-the-fly. -public typealias OrderedDictionaryKeys = LazyMapCollection, Key> - -/// A collection containing the values of the ordered dictionary. -/// -/// Under the hood this is a lazily evaluated bidirectional collection deriving the values from -/// the base ordered dictionary on-the-fly. -public typealias OrderedDictionaryValues = LazyMapCollection, Value> - -#else - -/// A view into an ordered dictionary whose indices are a subrange of the indices of the ordered -/// dictionary. -public typealias OrderedDictionarySlice = Slice> - -/// A collection containing the keys of the ordered dictionary. -/// -/// Under the hood this is a lazily evaluated bidirectional collection deriving the keys from -/// the base ordered dictionary on-the-fly. -public typealias OrderedDictionaryKeys = LazyMapCollection, Key> - -/// A collection containing the values of the ordered dictionary. -/// -/// Under the hood this is a lazily evaluated bidirectional collection deriving the values from -/// the base ordered dictionary on-the-fly. -public typealias OrderedDictionaryValues = LazyMapCollection, Value> - -#endif - -// ======================================================= // -// MARK: - Literals -// ======================================================= // - -extension OrderedDictionary: ExpressibleByArrayLiteral { - - /// Creates an ordered dictionary initialized from an array literal containing a list of - /// key-value pairs. - public init(arrayLiteral elements: Element...) { - self.init(elements) - } - -} - -extension OrderedDictionary: ExpressibleByDictionaryLiteral { - - /// Creates an ordered dictionary initialized from a dictionary literal. - public init(dictionaryLiteral elements: (Key, Value)...) { - self.init(elements.map { element in - let (key, value) = element - return (key: key, value: value) - }) - } - -} - -// ======================================================= // -// MARK: - Equatable Conformance -// ======================================================= // - -#if swift(>=4.1) - -extension OrderedDictionary: Equatable where Value: Equatable {} - -#endif - -extension OrderedDictionary where Value: Equatable { - - /// Returns a Boolean value that indicates whether the two given ordered dictionaries with - /// equatable values are equal. - public static func == (lhs: OrderedDictionary, rhs: OrderedDictionary) -> Bool { - return lhs._orderedKeys == rhs._orderedKeys - && lhs._keysToValues == rhs._keysToValues - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PX500Convenience.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PX500Convenience.swift deleted file mode 100644 index a8754d695b..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PX500Convenience.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// PX500Convenience.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import Foundation - -func parsePopularPage(withURL: URL) -> Resource { - - let parse = Resource(url: withURL, parseJSON: { jsonData in - - guard let json = jsonData as? JSONDictionary, let photos = json["photos"] as? [JSONDictionary] else { return .failure(.errorParsingJSON) } - - guard let model = PopularPageModel(dictionary: json, photosArray: photos.flatMap(PhotoModel.init)) else { return .failure(.errorParsingJSON) } - - return .success(model) - }) - - return parse -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/ParseResponse.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/ParseResponse.swift deleted file mode 100644 index 0870651e89..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/ParseResponse.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// ParseResponse.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import Foundation - -func parsePopularPage(withURL: URL, page: Int) -> Resource { - let parse = Resource(url: withURL, page: page) { metaData, jsonData in - do { - let photos = try JSONDecoder().decode([PhotoModel].self, from: jsonData) - return .success(PopularPageModel(metaData: metaData, photos: photos)) - } catch { - return .failure(.errorParsingJSON) - } - } - - return parse -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoFeedModel.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoFeedModel.swift deleted file mode 100644 index edfe37ff37..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoFeedModel.swift +++ /dev/null @@ -1,119 +0,0 @@ -// -// PhotoFeedModel.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -final class PhotoFeedModel { - - // MARK: Properties - - public private(set) var photoFeedModelType: PhotoFeedModelType - - private var orderedPhotos: OrderedDictionary = [:] - private var currentPage: Int = 0 - private var totalPages: Int = 0 - private var totalItems: Int = 0 - private var fetchPageInProgress: Bool = false - - // MARK: Lifecycle - - init(photoFeedModelType: PhotoFeedModelType) { - self.photoFeedModelType = photoFeedModelType - } - - // MARK: API - - lazy var url: URL = { - return URL.URLForFeedModelType(feedModelType: self.photoFeedModelType) - }() - - var numberOfItems: Int { - return orderedPhotos.count - } - - func itemAtIndexPath(_ indexPath: IndexPath) -> PhotoModel { - return orderedPhotos[indexPath.row].value - } - - // return in completion handler the number of additions and the status of internet connection - - func updateNewBatchOfPopularPhotos(additionsAndConnectionStatusCompletion: @escaping (Int, InternetStatus) -> ()) { - - // For this example let's use the main thread as locking queue - DispatchQueue.main.async { - guard !self.fetchPageInProgress else { - return - } - - self.fetchPageInProgress = true - self.fetchNextPageOfPopularPhotos(replaceData: false) { [unowned self] additions, error in - self.fetchPageInProgress = false - - if let error = error { - switch error { - case .noInternetConnection: - additionsAndConnectionStatusCompletion(0, .noConnection) - default: - additionsAndConnectionStatusCompletion(0, .connected) - } - } else { - additionsAndConnectionStatusCompletion(additions, .connected) - } - } - } - } - - private func fetchNextPageOfPopularPhotos(replaceData: Bool, numberOfAdditionsCompletion: @escaping (Int, NetworkingError?) -> ()) { - if currentPage == totalPages, currentPage != 0 { - numberOfAdditionsCompletion(0, .customError("No pages left to parse")) - return - } - - let pageToFetch = currentPage + 1 - WebService().load(resource: parsePopularPage(withURL: url, page: pageToFetch)) { [unowned self] result in - // Callback will happen on main for now - switch result { - case .success(let itemsPage): - // Update current state - self.totalItems = itemsPage.totalNumberOfItems - self.totalPages = itemsPage.totalPages - self.currentPage = itemsPage.page - - // Update photos - if replaceData { - self.orderedPhotos = [] - } - var insertedItems = 0 - for photo in itemsPage.photos { - if !self.orderedPhotos.containsKey(photo.photoID) { - // Append a new key-value pair by setting a value for an non-existent key - self.orderedPhotos[photo.photoID] = photo - insertedItems += 1 - } - } - - numberOfAdditionsCompletion(insertedItems, nil) - case .failure(let fail): - print(fail) - numberOfAdditionsCompletion(0, fail) - } - } - } -} - -enum PhotoFeedModelType { - case photoFeedModelTypePopular - case photoFeedModelTypeLocation - case photoFeedModelTypeUserPhotos -} - -enum InternetStatus { - case connected - case noConnection -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoFeedTableNodeController.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoFeedTableNodeController.swift deleted file mode 100644 index 6c2fe39f14..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoFeedTableNodeController.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// PhotoFeedTableNodeController.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import AsyncDisplayKit - -class PhotoFeedTableNodeController: ASViewController { - - // MARK: Lifecycle - - private lazy var activityIndicatorView: UIActivityIndicatorView = { - return UIActivityIndicatorView(activityIndicatorStyle: .gray) - }() - - var photoFeedModel = PhotoFeedModel(photoFeedModelType: .photoFeedModelTypePopular) - - init() { - super.init(node: ASTableNode()) - - navigationItem.title = "ASDK" - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MAKR: UIViewController - - override func viewDidLoad() { - super.viewDidLoad() - - node.allowsSelection = false - node.dataSource = self - node.delegate = self - node.leadingScreensForBatching = 2.5 - node.view.separatorStyle = .none - - navigationController?.hidesBarsOnSwipe = true - - node.view.addSubview(activityIndicatorView) - } - - override func viewDidLayoutSubviews() { - super.viewDidLayoutSubviews() - - // Center the activity indicator view - let bounds = node.bounds - activityIndicatorView.frame.origin = CGPoint( - x: (bounds.width - activityIndicatorView.frame.width) / 2.0, - y: (bounds.height - activityIndicatorView.frame.height) / 2.0 - ) - } - - func fetchNewBatchWithContext(_ context: ASBatchContext?) { - DispatchQueue.main.async { - self.activityIndicatorView.startAnimating() - } - - photoFeedModel.updateNewBatchOfPopularPhotos() { additions, connectionStatus in - switch connectionStatus { - case .connected: - self.activityIndicatorView.stopAnimating() - self.addRowsIntoTableNode(newPhotoCount: additions) - context?.completeBatchFetching(true) - case .noConnection: - self.activityIndicatorView.stopAnimating() - context?.completeBatchFetching(true) - } - } - } - - func addRowsIntoTableNode(newPhotoCount newPhotos: Int) { - let indexRange = (photoFeedModel.numberOfItems - newPhotos.. Int { - return photoFeedModel.numberOfItems - } - - func tableNode(_ tableNode: ASTableNode, nodeBlockForRowAt indexPath: IndexPath) -> ASCellNodeBlock { - let photo = photoFeedModel.itemAtIndexPath(indexPath) - let nodeBlock: ASCellNodeBlock = { _ in - return PhotoTableNodeCell(photoModel: photo) - } - return nodeBlock - } - - func shouldBatchFetchForCollectionNode(collectionNode: ASCollectionNode) -> Bool { - return true - } - - func tableNode(_ tableNode: ASTableNode, willBeginBatchFetchWith context: ASBatchContext) { - fetchNewBatchWithContext(context) - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoFeedTableViewController.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoFeedTableViewController.swift deleted file mode 100644 index 1f19fe8dc9..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoFeedTableViewController.swift +++ /dev/null @@ -1,108 +0,0 @@ -// -// PhotoFeedTableViewController.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -class PhotoFeedTableViewController: UITableViewController { - - var activityIndicator: UIActivityIndicatorView! - var photoFeed = PhotoFeedModel(photoFeedModelType: .photoFeedModelTypePopular) - - init() { - super.init(nibName: nil, bundle: nil) - - navigationItem.title = "UIKit" - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func viewDidLoad() { - super.viewDidLoad() - - navigationController?.hidesBarsOnSwipe = true - setupActivityIndicator() - configureTableView() - fetchNewBatch() - } - - func fetchNewBatch() { - activityIndicator.startAnimating() - photoFeed.updateNewBatchOfPopularPhotos() { additions, connectionStatus in - switch connectionStatus { - case .connected: - self.activityIndicator.stopAnimating() - self.addRowsIntoTableView(newPhotoCount: additions) - case .noConnection: - self.activityIndicator.stopAnimating() - break - } - } - } - - // Helper functions - func setupActivityIndicator() { - let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray) - activityIndicator.translatesAutoresizingMaskIntoConstraints = false - self.activityIndicator = activityIndicator - self.tableView.addSubview(activityIndicator) - - NSLayoutConstraint.activate([ - activityIndicator.centerXAnchor.constraint(equalTo: self.tableView.centerXAnchor), - activityIndicator.centerYAnchor.constraint(equalTo: self.tableView.centerYAnchor) - ]) - } - - func configureTableView() { - tableView.register(PhotoTableViewCell.self, forCellReuseIdentifier: "photoCell") - tableView.allowsSelection = false - tableView.rowHeight = UITableViewAutomaticDimension - tableView.separatorStyle = .none - } -} - -extension PhotoFeedTableViewController { - - func addRowsIntoTableView(newPhotoCount newPhotos: Int) { - - let indexRange = (photoFeed.numberOfItems - newPhotos.. Int { - return photoFeed.numberOfItems - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - guard let cell = tableView.dequeueReusableCell(withIdentifier: "photoCell", for: indexPath) as? PhotoTableViewCell else { fatalError("Wrong cell type") } - cell.photoModel = photoFeed.itemAtIndexPath(indexPath) - return cell - } - - override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - return PhotoTableViewCell.height( - for: photoFeed.itemAtIndexPath(indexPath), - withWidth: self.view.frame.size.width - ) - } - - override func scrollViewDidScroll(_ scrollView: UIScrollView) { - let currentOffSetY = scrollView.contentOffset.y - let contentHeight = scrollView.contentSize.height - let screenHeight = UIScreen.main.bounds.height - let screenfullsBeforeBottom = (contentHeight - currentOffSetY) / screenHeight - if screenfullsBeforeBottom < 2.5 { - self.fetchNewBatch() - } - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoModel.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoModel.swift deleted file mode 100644 index 5f5c5bbe71..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoModel.swift +++ /dev/null @@ -1,133 +0,0 @@ -// -// PhotoModel.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -// MARK: ProfileImage - -struct ProfileImage: Codable { - let large: String - let medium: String - let small: String -} - -// MARK: UserModel - -struct UserModel: Codable { - let userName: String - let profileImages: ProfileImage - - enum CodingKeys: String, CodingKey { - case userName = "username" - case profileImages = "profile_image" - } -} - -extension UserModel { - var profileImage: String { - return profileImages.medium - } -} - -// MARK: PhotoURL - -struct PhotoURL: Codable { - let full: String - let raw: String - let regular: String - let small: String - let thumb: String -} - -// MARK: PhotoModel - -struct PhotoModel: Codable { - let urls: PhotoURL - let photoID: String - let uploadedDateString: String - let descriptionText: String? - let likesCount: Int - let width: Int - let height: Int - let user: UserModel - - enum CodingKeys: String, CodingKey { - case photoID = "id" - case urls = "urls" - case uploadedDateString = "created_at" - case descriptionText = "description" - case likesCount = "likes" - case width = "width" - case height = "height" - case user = "user" - } -} - -extension PhotoModel { - var url: String { - return urls.regular - } -} - -extension PhotoModel { - - // MARK: - Attributed Strings - - func attributedStringForUserName(withSize size: CGFloat) -> NSAttributedString { - let attributes = [ - NSForegroundColorAttributeName : UIColor.darkGray, - NSFontAttributeName: UIFont.boldSystemFont(ofSize: size) - ] - return NSAttributedString(string: user.userName, attributes: attributes) - } - - func attributedStringForDescription(withSize size: CGFloat) -> NSAttributedString { - let attributes = [ - NSForegroundColorAttributeName : UIColor.darkGray, - NSFontAttributeName: UIFont.systemFont(ofSize: size) - ] - return NSAttributedString(string: descriptionText ?? "", attributes: attributes) - } - - func attributedStringLikes(withSize size: CGFloat) -> NSAttributedString { - guard let formattedLikesNumber = NumberFormatter.decimalNumberFormatter.string(from: NSNumber(value: likesCount)) else { - return NSAttributedString() - } - - let likesAttributes = [ - NSForegroundColorAttributeName : UIColor.mainBarTintColor, - NSFontAttributeName: UIFont.systemFont(ofSize: size) - ] - let likesAttrString = NSAttributedString(string: "\(formattedLikesNumber) Likes", attributes: likesAttributes) - - let heartAttributes = [ - NSForegroundColorAttributeName : UIColor.red, - NSFontAttributeName: UIFont.systemFont(ofSize: size) - ] - let heartAttrString = NSAttributedString(string: "♥︎ ", attributes: heartAttributes) - - let combine = NSMutableAttributedString() - combine.append(heartAttrString) - combine.append(likesAttrString) - return combine - } - - func attributedStringForTimeSinceString(withSize size: CGFloat) -> NSAttributedString { - guard let date = Date.iso8601Formatter.date(from: self.uploadedDateString) else { - return NSAttributedString(); - } - - let attributes = [ - NSForegroundColorAttributeName : UIColor.mainBarTintColor, - NSFontAttributeName: UIFont.systemFont(ofSize: size) - ] - - return NSAttributedString(string: Date.timeStringSince(fromConverted: date), attributes: attributes) - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoTableNodeCell.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoTableNodeCell.swift deleted file mode 100644 index 58f2a7086c..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoTableNodeCell.swift +++ /dev/null @@ -1,89 +0,0 @@ -// -// PhotoTableNodeCell.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import Foundation -import AsyncDisplayKit - -class PhotoTableNodeCell: ASCellNode { - - // MARK: Properties - - let usernameLabel = ASTextNode() - let timeIntervalLabel = ASTextNode() - let photoLikesLabel = ASTextNode() - let photoDescriptionLabel = ASTextNode() - - let avatarImageNode: ASNetworkImageNode = { - let node = ASNetworkImageNode() - node.contentMode = .scaleAspectFill - // Set the imageModificationBlock for a rounded avatar - node.imageModificationBlock = ASImageNodeRoundBorderModificationBlock(0, nil) - return node - }() - - let photoImageNode: ASNetworkImageNode = { - let node = ASNetworkImageNode() - node.contentMode = .scaleAspectFill - return node - }() - - // MARK: Lifecycle - - init(photoModel: PhotoModel) { - super.init() - - automaticallyManagesSubnodes = true - photoImageNode.url = URL(string: photoModel.url) - avatarImageNode.url = URL(string: photoModel.user.profileImage) - usernameLabel.attributedText = photoModel.attributedStringForUserName(withSize: Constants.CellLayout.FontSize) - timeIntervalLabel.attributedText = photoModel.attributedStringForTimeSinceString(withSize: Constants.CellLayout.FontSize) - photoLikesLabel.attributedText = photoModel.attributedStringLikes(withSize: Constants.CellLayout.FontSize) - photoDescriptionLabel.attributedText = photoModel.attributedStringForDescription(withSize: Constants.CellLayout.FontSize) - } - - // MARK: ASDisplayNode - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - - // Header Stack - - var headerChildren: [ASLayoutElement] = [] - - let headerStack = ASStackLayoutSpec.horizontal() - headerStack.alignItems = .center - avatarImageNode.style.preferredSize = CGSize( - width: Constants.CellLayout.UserImageHeight, - height: Constants.CellLayout.UserImageHeight - ) - headerChildren.append(ASInsetLayoutSpec(insets: Constants.CellLayout.InsetForAvatar, child: avatarImageNode)) - - usernameLabel.style.flexShrink = 1.0 - headerChildren.append(usernameLabel) - - let spacer = ASLayoutSpec() - spacer.style.flexGrow = 1.0 - headerChildren.append(spacer) - - timeIntervalLabel.style.spacingBefore = Constants.CellLayout.HorizontalBuffer - headerChildren.append(timeIntervalLabel) - - let footerStack = ASStackLayoutSpec.vertical() - footerStack.spacing = Constants.CellLayout.VerticalBuffer - footerStack.children = [photoLikesLabel, photoDescriptionLabel] - headerStack.children = headerChildren - - let verticalStack = ASStackLayoutSpec.vertical() - verticalStack.children = [ - ASInsetLayoutSpec(insets: Constants.CellLayout.InsetForHeader, child: headerStack), - ASRatioLayoutSpec(ratio: 1.0, child: photoImageNode), - ASInsetLayoutSpec(insets: Constants.CellLayout.InsetForFooter, child: footerStack) - ] - return verticalStack - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoTableViewCell.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoTableViewCell.swift deleted file mode 100644 index 0698ff2cee..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PhotoTableViewCell.swift +++ /dev/null @@ -1,132 +0,0 @@ -// -// PhotoTableViewCell.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -class PhotoTableViewCell: UITableViewCell { - - var photoModel: PhotoModel? { - didSet { - if let model = photoModel { - photoImageView.loadImageUsingUrlString(urlString: model.url) - avatarImageView.loadImageUsingUrlString(urlString: model.user.profileImage) - photoLikesLabel.attributedText = model.attributedStringLikes(withSize: Constants.CellLayout.FontSize) - usernameLabel.attributedText = model.attributedStringForUserName(withSize: Constants.CellLayout.FontSize) - timeIntervalLabel.attributedText = model.attributedStringForTimeSinceString(withSize: Constants.CellLayout.FontSize) - photoDescriptionLabel.attributedText = model.attributedStringForDescription(withSize: Constants.CellLayout.FontSize) - photoDescriptionLabel.sizeToFit() - var rect = photoDescriptionLabel.frame - let availableWidth = self.bounds.size.width - Constants.CellLayout.HorizontalBuffer * 2 - rect.size = model.attributedStringForDescription(withSize: Constants.CellLayout.FontSize).boundingRect(with: CGSize(width: availableWidth, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, context: nil).size - photoDescriptionLabel.frame = rect - } - } - } - - let photoImageView: NetworkImageView = { - let imageView = NetworkImageView() - imageView.contentMode = .scaleAspectFill - imageView.translatesAutoresizingMaskIntoConstraints = false - return imageView - }() - - let avatarImageView: NetworkImageView = { - let imageView = NetworkImageView() - imageView.contentMode = .scaleAspectFill - imageView.translatesAutoresizingMaskIntoConstraints = false - imageView.layer.cornerRadius = Constants.CellLayout.UserImageHeight / 2 - imageView.clipsToBounds = true - return imageView - }() - - let usernameLabel: UILabel = { - let label = UILabel() - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - let timeIntervalLabel: UILabel = { - let label = UILabel() - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - let photoLikesLabel: UILabel = { - let label = UILabel() - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - let photoDescriptionLabel: UILabel = { - let label = UILabel() - label.translatesAutoresizingMaskIntoConstraints = false - label.numberOfLines = 3 - return label - }() - - override init(style: UITableViewCellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - setupViews() - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - func setupViews() { - addSubview(photoImageView) - addSubview(avatarImageView) - addSubview(usernameLabel) - addSubview(timeIntervalLabel) - addSubview(photoLikesLabel) - addSubview(photoDescriptionLabel) - setupConstraints() - } - - func setupConstraints() { - - NSLayoutConstraint.activate ([ - //photoImageView - photoImageView.topAnchor.constraint(equalTo: topAnchor, constant: Constants.CellLayout.HeaderHeight), - photoImageView.widthAnchor.constraint(equalTo: widthAnchor), - photoImageView.heightAnchor.constraint(equalTo: photoImageView.widthAnchor), - // avatarImageView - avatarImageView.leftAnchor.constraint(equalTo: leftAnchor, constant: Constants.CellLayout.HorizontalBuffer), - avatarImageView.topAnchor.constraint(equalTo: topAnchor, constant: Constants.CellLayout.HorizontalBuffer), - avatarImageView.heightAnchor.constraint(equalToConstant: Constants.CellLayout.UserImageHeight), - avatarImageView.widthAnchor.constraint(equalTo: avatarImageView.heightAnchor), - // usernameLabel - usernameLabel.leftAnchor.constraint(equalTo: avatarImageView.rightAnchor, constant: Constants.CellLayout.HorizontalBuffer), - usernameLabel.rightAnchor.constraint(equalTo: timeIntervalLabel.leftAnchor, constant: -Constants.CellLayout.HorizontalBuffer), - usernameLabel.centerYAnchor.constraint(equalTo: avatarImageView.centerYAnchor), - // timeIntervalLabel - timeIntervalLabel.rightAnchor.constraint(equalTo: rightAnchor, constant: -Constants.CellLayout.HorizontalBuffer), - timeIntervalLabel.centerYAnchor.constraint(equalTo: avatarImageView.centerYAnchor), - // photoLikesLabel - photoLikesLabel.topAnchor.constraint(equalTo: photoImageView.bottomAnchor, constant: Constants.CellLayout.VerticalBuffer), - photoLikesLabel.leftAnchor.constraint(equalTo: leftAnchor, constant: Constants.CellLayout.HorizontalBuffer), - // photoDescriptionLabel - photoDescriptionLabel.topAnchor.constraint(equalTo: photoLikesLabel.bottomAnchor, constant: Constants.CellLayout.VerticalBuffer), - photoDescriptionLabel.leftAnchor.constraint(equalTo: leftAnchor, constant: Constants.CellLayout.HorizontalBuffer), - photoDescriptionLabel.rightAnchor.constraint(equalTo: rightAnchor, constant: -Constants.CellLayout.HorizontalBuffer), - photoDescriptionLabel.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -Constants.CellLayout.VerticalBuffer) - ]) - } - - class func height(for photo: PhotoModel, withWidth width: CGFloat) -> CGFloat { - let photoHeight = width - let font = UIFont.systemFont(ofSize: Constants.CellLayout.FontSize) - let likesHeight = round(font.lineHeight) - let descriptionAttrString = photo.attributedStringForDescription(withSize: Constants.CellLayout.FontSize) - let availableWidth = width - Constants.CellLayout.HorizontalBuffer * 2 - let descriptionHeight = descriptionAttrString.boundingRect(with: CGSize(width: availableWidth, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, context: nil).size.height - - return likesHeight + descriptionHeight + photoHeight + Constants.CellLayout.HeaderHeight + Constants.CellLayout.VerticalBuffer * 3 - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PopularPageModel.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PopularPageModel.swift deleted file mode 100644 index 048b219211..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/PopularPageModel.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// PopularPageModel.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import Foundation - -struct PopularPageModel { - let page: Int - let totalPages: Int - let totalNumberOfItems: Int - let photos: [PhotoModel] - - init(metaData: ResponseMetadata, photos:[PhotoModel]) { - self.page = metaData.currentPage - self.totalPages = metaData.pagesTotal - self.totalNumberOfItems = metaData.itemsTotal - self.photos = photos - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/UIColor.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/UIColor.swift deleted file mode 100644 index 5498f07ce9..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/UIColor.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// UIColor.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -extension UIColor { - static var mainBarTintColor: UIColor { - return UIColor(red: 69/255, green: 142/255, blue: 255/255, alpha: 1) - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/URL.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/URL.swift deleted file mode 100644 index be9b4a49e9..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/URL.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// URL.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -extension URL { - static func URLForFeedModelType(feedModelType: PhotoFeedModelType) -> URL { - switch feedModelType { - case .photoFeedModelTypePopular: - return URL(string: assembleUnsplashURLString(endpoint: Constants.Unsplash.URLS.PopularEndpoint))! - - case .photoFeedModelTypeLocation: - return URL(string: assembleUnsplashURLString(endpoint: Constants.Unsplash.URLS.SearchEndpoint))! - - case .photoFeedModelTypeUserPhotos: - return URL(string: assembleUnsplashURLString(endpoint: Constants.Unsplash.URLS.UserEndpoint))! - } - } - - private static func assembleUnsplashURLString(endpoint: String) -> String { - return Constants.Unsplash.URLS.Host + endpoint + Constants.Unsplash.URLS.ConsumerKey - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Webservice.swift b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Webservice.swift deleted file mode 100644 index a103d21653..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/ASDKgram-Swift/Webservice.swift +++ /dev/null @@ -1,109 +0,0 @@ -// -// Webservice.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -final class WebService { - /// Load a new resource. Callback is called on main - func load(resource: Resource, completion: @escaping (Result) -> ()) { - URLSession.shared.dataTask(with: resource.url) { data, response, error in - // Check for errors in responses. - let result = self.checkForNetworkErrors(data, response, error) - DispatchQueue.main.async { - // Parsing should happen off main - switch result { - case .success(let data): - completion(resource.parse(data, response)) - case .failure(let error): - completion(.failure(error)) - } - } - }.resume() - } -} - -extension WebService { - /// // Check for errors in responses. - fileprivate func checkForNetworkErrors(_ data: Data?, _ response: URLResponse?, _ error: Error?) -> Result { - if let error = error { - switch error { - case URLError.notConnectedToInternet, URLError.timedOut: - return .failure(.noInternetConnection) - default: - return .failure(.returnedError(error)) - } - } - - if let response = response as? HTTPURLResponse, response.statusCode <= 200 && response.statusCode >= 299 { - return .failure((.invalidStatusCode("Request returned status code other than 2xx \(response)"))) - } - - guard let data = data else { - return .failure(.dataReturnedNil) - } - - return .success(data) - } -} - -struct ResponseMetadata { - let currentPage: Int - let itemsTotal: Int - let itemsPerPage: Int -} - -extension ResponseMetadata { - var pagesTotal: Int { - return itemsTotal / itemsPerPage - } -} - -struct Resource { - let url: URL - let parse: (Data, URLResponse?) -> Result -} - -extension Resource { - init(url: URL, page: Int, parseResponse: @escaping (ResponseMetadata, Data) -> Result) { - // Append extra data to url for paging - guard let url = URL(string: url.absoluteString.appending("&page=\(page)")) else { - fatalError("Malformed URL given"); - } - self.url = url - self.parse = { data, response in - // Parse out metadata from header - guard let httpUrlResponse = response as? HTTPURLResponse, - let xTotalString = httpUrlResponse.allHeaderFields["x-total"] as? String, - let xTotal = Int(xTotalString), - let xPerPageString = httpUrlResponse.allHeaderFields["x-per-page"] as? String, - let xPerPage = Int(xPerPageString) - else { - return .failure(.errorParsingResponse) - } - - let metadata = ResponseMetadata(currentPage: page, itemsTotal: xTotal, itemsPerPage: xPerPage) - return parseResponse(metadata, data) - } - } -} - -enum Result { - case success(T) - case failure(NetworkingError) -} - -enum NetworkingError: Error { - case errorParsingResponse - case errorParsingJSON - case noInternetConnection - case dataReturnedNil - case returnedError(Error) - case invalidStatusCode(String) - case customError(String) -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/Podfile b/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/Podfile deleted file mode 100644 index 5510b59d9e..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASDKgram-Swift/Podfile +++ /dev/null @@ -1,9 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'ASDKgram-Swift' do - use_frameworks! - inhibit_all_warnings! - - pod 'Texture/PINRemoteImage', :path => '../..' - -end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Podfile b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Podfile deleted file mode 100644 index 3b379097a0..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Podfile +++ /dev/null @@ -1,6 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -use_frameworks! -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Info.plist b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Info.plist deleted file mode 100644 index fbe1e6b314..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.h b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.h deleted file mode 100644 index d80265a099..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// Sample.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -//! Project version number for Sample. -FOUNDATION_EXPORT double SampleVersionNumber; - -//! Project version string for Sample. -FOUNDATION_EXPORT const unsigned char SampleVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - - diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/HorizontalStackWithSpacer.xcplaygroundpage/Contents.swift b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/HorizontalStackWithSpacer.xcplaygroundpage/Contents.swift deleted file mode 100644 index 43cf09026e..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/HorizontalStackWithSpacer.xcplaygroundpage/Contents.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// Contents.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import AsyncDisplayKit - -extension HorizontalStackWithSpacer { - - override public func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - usernameNode.style.flexShrink = 1.0 - postLocationNode.style.flexShrink = 1.0 - - let verticalStackSpec = ASStackLayoutSpec.vertical() - verticalStackSpec.style.flexShrink = 1.0 - - // if fetching post location data from server, check if it is available yet - if postLocationNode.attributedText != nil { - verticalStackSpec.children = [usernameNode, postLocationNode] - } else { - verticalStackSpec.children = [usernameNode] - } - - let spacerSpec = ASLayoutSpec() - spacerSpec.style.flexGrow = 1.0 - spacerSpec.style.flexShrink = 1.0 - - // horizontal stack - let horizontalStack = ASStackLayoutSpec.horizontal() - horizontalStack.alignItems = .center // center items vertically in horiz stack - horizontalStack.justifyContent = .start // justify content to left - horizontalStack.style.flexShrink = 1.0 - horizontalStack.style.flexGrow = 1.0 - horizontalStack.children = [verticalStackSpec, spacerSpec, postTimeNode] - - // inset horizontal stack - let insets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 10) - let headerInsetSpec = ASInsetLayoutSpec(insets: insets, child: horizontalStack) - headerInsetSpec.style.flexShrink = 1.0 - headerInsetSpec.style.flexGrow = 1.0 - - return headerInsetSpec - } - -} - -HorizontalStackWithSpacer().show() - -//: [Index](Index) diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/Index.xcplaygroundpage/Contents.swift b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/Index.xcplaygroundpage/Contents.swift deleted file mode 100644 index 655f86b0f5..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/Index.xcplaygroundpage/Contents.swift +++ /dev/null @@ -1,7 +0,0 @@ -// -// Contents.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/PhotoWithInsetTextOverlay.xcplaygroundpage/Contents.swift b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/PhotoWithInsetTextOverlay.xcplaygroundpage/Contents.swift deleted file mode 100644 index 88360fd4fb..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/PhotoWithInsetTextOverlay.xcplaygroundpage/Contents.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// Contents.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import AsyncDisplayKit - -let userImageHeight = 60 - -extension PhotoWithInsetTextOverlay { - - override public func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - photoNode.style.preferredSize = CGSize(width: userImageHeight * 2, height: userImageHeight * 2) - let backgroundImageAbsoluteSpec = ASAbsoluteLayoutSpec(children: [photoNode]) - - let insets = UIEdgeInsets(top: CGFloat.infinity, left: 12, bottom: 12, right: 12) - let textInsetSpec = ASInsetLayoutSpec(insets: insets, - child: titleNode) - - let textOverlaySpec = ASOverlayLayoutSpec(child: backgroundImageAbsoluteSpec, overlay: textInsetSpec) - - return textOverlaySpec - } - -} - -PhotoWithInsetTextOverlay().show() - -//: [Photo With Outset Icon Overlay](PhotoWithOutsetIconOverlay) diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/PhotoWithOutsetIconOverlay.xcplaygroundpage/Contents.swift b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/PhotoWithOutsetIconOverlay.xcplaygroundpage/Contents.swift deleted file mode 100644 index ba866f3b6d..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/PhotoWithOutsetIconOverlay.xcplaygroundpage/Contents.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// Contents.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import AsyncDisplayKit - -extension PhotoWithOutsetIconOverlay { - - override public func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - let iconWidth: CGFloat = 40 - let iconHeight: CGFloat = 40 - - iconNode.style.preferredSize = CGSize(width: iconWidth, height: iconWidth) - photoNode.style.preferredSize = CGSize(width: 150, height: 150) - - let x: CGFloat = 150 - let y: CGFloat = 0 - - iconNode.style.layoutPosition = CGPoint(x: x, y: y) - photoNode.style.layoutPosition = CGPoint(x: iconWidth * 0.5, y: iconHeight * 0.5); - - let absoluteLayoutSpec = ASAbsoluteLayoutSpec(children: [photoNode, iconNode]) - return absoluteLayoutSpec; - } - -} - -PhotoWithOutsetIconOverlay().show() - -//: [Horizontal Stack With Spacer](HorizontalStackWithSpacer) diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/StackLayout.xcplaygroundpage/Contents.swift b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/StackLayout.xcplaygroundpage/Contents.swift deleted file mode 100644 index ec63def40a..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Pages/StackLayout.xcplaygroundpage/Contents.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// Contents.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// -import AsyncDisplayKit - -extension StackLayout { - - override public func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - // Try commenting out the flexShrink to see its consequences. - subtitleNode.style.flexShrink = 1.0 - - let stackSpec = ASStackLayoutSpec(direction: .horizontal, - spacing: 5, - justifyContent: .start, - alignItems: .start, - children: [titleNode, subtitleNode]) - - let insetSpec = ASInsetLayoutSpec(insets: UIEdgeInsets(top: 5, - left: 5, - bottom: 5, - right: 5), - child: stackSpec) - return insetSpec - } - -} - -StackLayout().show() - -//: [Photo With Inset Text Overlay](PhotoWithInsetTextOverlay) diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/ASPlayground.swift b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/ASPlayground.swift deleted file mode 100644 index 1edf7db0bb..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/ASPlayground.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// ASPlayground.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// -import PlaygroundSupport -import AsyncDisplayKit - -public protocol ASPlayground: class { - func display(inRect: CGRect) -} - -extension ASPlayground { - public func display(inRect rect: CGRect) { - var rect = rect - if rect.size == .zero { - rect.size = CGSize(width: 400, height: 400) - } - - guard let nodeSelf = self as? ASDisplayNode else { - assertionFailure("Class inheriting ASPlayground must be an ASDisplayNode") - return - } - - let constrainedSize = ASSizeRange(min: rect.size, max: rect.size) - _ = ASCalculateRootLayout(nodeSelf, constrainedSize) - nodeSelf.frame = rect - PlaygroundPage.current.needsIndefiniteExecution = true - PlaygroundPage.current.liveView = nodeSelf.view - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/HorizontalStackWithSpacer.swift b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/HorizontalStackWithSpacer.swift deleted file mode 100644 index 84b38c8e4d..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/HorizontalStackWithSpacer.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// HorizontalStackWithSpacer.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// -import AsyncDisplayKit - -fileprivate let fontSize: CGFloat = 20 - -public class HorizontalStackWithSpacer: ASDisplayNode, ASPlayground { - public let usernameNode = ASTextNode() - public let postLocationNode = ASTextNode() - public let postTimeNode = ASTextNode() - - override public init() { - super.init() - backgroundColor = .white - - automaticallyManagesSubnodes = true - setupNodes() - } - - private func setupNodes() { - usernameNode.backgroundColor = .yellow - usernameNode.attributedText = NSAttributedString.attributedString(string: "hannahmbanana", fontSize: fontSize, color: .darkBlueColor(), firstWordColor: nil) - - postLocationNode.backgroundColor = .lightGray - postLocationNode.maximumNumberOfLines = 1; - postLocationNode.attributedText = NSAttributedString.attributedString(string: "San Fransisco, CA", fontSize: fontSize, color: .lightBlueColor(), firstWordColor: nil) - - postTimeNode.backgroundColor = .brown - postTimeNode.attributedText = NSAttributedString.attributedString(string: "30m", fontSize: fontSize, color: .lightGray, firstWordColor: nil) - } - - // This is used to expose this function for overriding in extensions - override public func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - return ASLayoutSpec() - } - - public func show() { - display(inRect: CGRect(x: 0, y: 0, width: 450, height: 100)) - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/PhotoWithInsetTextOverlay.swift b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/PhotoWithInsetTextOverlay.swift deleted file mode 100644 index 2a9736446c..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/PhotoWithInsetTextOverlay.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// PhotoWithInsetTextOverlay.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// -import AsyncDisplayKit - -public class PhotoWithInsetTextOverlay: ASDisplayNode, ASPlayground { - public let photoNode = ASNetworkImageNode() - public let titleNode = ASTextNode() - - override public init() { - super.init() - backgroundColor = .white - - automaticallyManagesSubnodes = true - setupNodes() - } - - private func setupNodes() { - photoNode.url = URL(string: "http://asyncdisplaykit.org/static/images/layout-examples-photo-with-inset-text-overlay-photo.png") - photoNode.backgroundColor = .black - - titleNode.backgroundColor = .blue - titleNode.maximumNumberOfLines = 2 - titleNode.truncationAttributedText = NSAttributedString.attributedString(string: "...", fontSize: 16, color: .white, firstWordColor: nil) - titleNode.attributedText = NSAttributedString.attributedString(string: "family fall hikes", fontSize: 16, color: .white, firstWordColor: nil) - } - - // This is used to expose this function for overriding in extensions - override public func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - return ASLayoutSpec() - } - - public func show() { - display(inRect: CGRect(x: 0, y: 0, width: 120, height: 120)) - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/PhotoWithOutsetIconOverlay.swift b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/PhotoWithOutsetIconOverlay.swift deleted file mode 100644 index 9a8c9f3ab3..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/PhotoWithOutsetIconOverlay.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// PhotoWithOutsetIconOverlay.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// -import AsyncDisplayKit - -fileprivate let userImageHeight = 60 - -public class PhotoWithOutsetIconOverlay: ASDisplayNode, ASPlayground { - public let photoNode = ASNetworkImageNode() - public let iconNode = ASNetworkImageNode() - - override public init() { - super.init() - backgroundColor = .white - - automaticallyManagesSubnodes = true - setupNodes() - } - - private func setupNodes() { - photoNode.url = URL(string: "http://asyncdisplaykit.org/static/images/layout-examples-photo-with-outset-icon-overlay-photo.png") - photoNode.backgroundColor = .black - - iconNode.url = URL(string: "http://asyncdisplaykit.org/static/images/layout-examples-photo-with-outset-icon-overlay-icon.png") - iconNode.imageModificationBlock = ASImageNodeRoundBorderModificationBlock(10, .white) - } - - // This is used to expose this function for overriding in extensions - override public func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - return ASLayoutSpec() - } - - public func show() { - display(inRect: CGRect(x: 0, y: 0, width: 190, height: 190)) - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/StackLayout.swift b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/StackLayout.swift deleted file mode 100644 index 871252e0fc..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/StackLayout.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// StackLayout.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// -import AsyncDisplayKit - -public class StackLayout: ASDisplayNode, ASPlayground { - public let titleNode = ASTextNode() - public let subtitleNode = ASTextNode() - - override public init() { - super.init() - backgroundColor = .white - - automaticallyManagesSubnodes = true - setupNodes() - } - - private func setupNodes() { - titleNode.backgroundColor = .blue - titleNode.attributedText = NSAttributedString.attributedString(string: "Headline!", fontSize: 14, color: .white, firstWordColor: nil) - - subtitleNode.backgroundColor = .yellow - subtitleNode.attributedText = NSAttributedString(string: "Lorem ipsum dolor sit amet, sed ex laudem utroque meliore, at cum lucilius vituperata. Ludus mollis consulatu mei eu, esse vocent epicurei sed at. Ut cum recusabo prodesset. Ut cetero periculis sed, mundi senserit est ut. Nam ut sonet mandamus intellegebat, summo voluptaria vim ad.") - } - - // This is used to expose this function for overriding in extensions - override public func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - return ASLayoutSpec() - } - - public func show() { - display(inRect: .zero) - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/Utilities.swift b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/Utilities.swift deleted file mode 100644 index ab2cccc798..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/Sources/Utilities.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// Utilities.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// -import UIKit -import Foundation - -extension UIColor { - - static func darkBlueColor() -> UIColor { - return UIColor(red: 18.0/255.0, green: 86.0/255.0, blue: 136.0/255.0, alpha: 1.0) - } - - - static func lightBlueColor() -> UIColor { - return UIColor(red: 0.0, green: 122.0/255.0, blue: 1.0, alpha: 1.0) - } - - static func duskColor() -> UIColor { - return UIColor(red: 255/255.0, green: 181/255.0, blue: 68/255.0, alpha: 1.0) - } - - static func customOrangeColor() -> UIColor { - return UIColor(red: 40/255.0, green: 43/255.0, blue: 53/255.0, alpha: 1.0) - } - -} - -extension NSAttributedString { - - static func attributedString(string: String, fontSize size: CGFloat, color: UIColor?, firstWordColor: UIColor?) -> NSAttributedString { - let attributes = [NSForegroundColorAttributeName: color ?? UIColor.black, - NSFontAttributeName: UIFont.boldSystemFont(ofSize: size)] - - let attributedString = NSMutableAttributedString(string: string, attributes: attributes) - - if let firstWordColor = firstWordColor { - let nsString = string as NSString - let firstSpaceRange = nsString.rangeOfCharacter(from: NSCharacterSet.whitespaces) - let firstWordRange = NSMakeRange(0, firstSpaceRange.location) - attributedString.addAttribute(NSForegroundColorAttributeName, value: firstWordColor, range: firstWordRange) - } - - return attributedString - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/contents.xcplayground b/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/contents.xcplayground deleted file mode 100644 index c7f819f0e3..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASLayoutSpecPlayground-Swift/Sample/Sample.playground/contents.xcplayground +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Podfile b/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/AppDelegate.h deleted file mode 100644 index 19db03c153..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/AppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/AppDelegate.m deleted file mode 100644 index 1a89581c33..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/AppDelegate.m +++ /dev/null @@ -1,47 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" - -#import -#import - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[UINavigationController alloc] init]; - - [self pushNewViewControllerAnimated:NO]; - - [self.window makeKeyAndVisible]; - - return YES; -} - -- (void)pushNewViewControllerAnimated:(BOOL)animated -{ - UINavigationController *navController = (UINavigationController *)self.window.rootViewController; - - UIViewController *viewController = [[ViewController alloc] init]; - viewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Push Another Copy" style:UIBarButtonItemStylePlain target:self action:@selector(pushNewViewController)]; - - [navController pushViewController:viewController animated:animated]; -} - -- (void)pushNewViewController -{ - [self pushNewViewControllerAnimated:YES]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/Info.plist b/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/Info.plist deleted file mode 100644 index ad825d6e33..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - org.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/ViewController.h deleted file mode 100644 index c8a0626291..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : UIViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/ViewController.m deleted file mode 100644 index d75f9ac3ef..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/ViewController.m +++ /dev/null @@ -1,192 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" - -#import -#import - -#define NumberOfSections 10 -#define NumberOfRowsPerSection 20 -#define NumberOfReloadIterations 50 - -typedef enum : NSUInteger { - ReloadData, - ReloadRows, - ReloadSections, - ReloadTypeMax -} ReloadType; - -@interface ViewController () -{ - ASTableView *_tableView; - NSMutableArray *_sections; // Contains arrays of indexPaths representing rows -} - -@end - - -@implementation ViewController - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - _tableView = [[ASTableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; - _tableView.asyncDataSource = self; - _tableView.asyncDelegate = self; - _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - - _sections = [NSMutableArray arrayWithCapacity:NumberOfSections]; - for (int i = 0; i < NumberOfSections; i++) { - NSMutableArray *rowsArray = [NSMutableArray arrayWithCapacity:NumberOfRowsPerSection]; - for (int j = 0; j < NumberOfRowsPerSection; j++) { - [rowsArray addObject:[NSIndexPath indexPathForRow:j inSection:i]]; - } - [_sections addObject:rowsArray]; - } - - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [self.view addSubview:_tableView]; -} - -- (void)viewWillLayoutSubviews -{ - _tableView.frame = self.view.bounds; -} - -- (void)viewDidAppear:(BOOL)animated -{ - [super viewDidAppear:animated]; - - [self thrashTableView]; -} - -- (NSIndexSet *)randomIndexSet -{ - u_int32_t upperBound = (u_int32_t)_sections.count - 1; - u_int32_t randA = arc4random_uniform(upperBound); - u_int32_t randB = arc4random_uniform(upperBound); - - return [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(MIN(randA, randB), MAX(randA, randB) - MIN(randA, randB))]; -} - -- (NSArray *)randomIndexPathsExisting:(BOOL)existing -{ - NSMutableArray *indexPaths = [NSMutableArray array]; - [[self randomIndexSet] enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { - NSUInteger rowNum = [self tableView:_tableView numberOfRowsInSection:idx]; - NSIndexPath *sectionIndex = [[NSIndexPath alloc] initWithIndex:idx]; - for (NSUInteger i = (existing ? 0 : rowNum); i < (existing ? rowNum : rowNum * 2); i++) { - // Maximize evility by sporadically skipping indicies 1/3rd of the time, but only if reloading existing rows - if (existing && arc4random_uniform(2) == 0) { - continue; - } - - NSIndexPath *indexPath = [sectionIndex indexPathByAddingIndex:i]; - [indexPaths addObject:indexPath]; - } - }]; - return indexPaths; -} - -- (void)thrashTableView -{ - [_tableView reloadData]; - - NSArray *indexPathsAddedAndRemoved = nil; - - for (int i = 0; i < NumberOfReloadIterations; ++i) { - UITableViewRowAnimation rowAnimation = (arc4random_uniform(1) == 0 ? UITableViewRowAnimationMiddle : UITableViewRowAnimationNone); - - BOOL animatedScroll = (arc4random_uniform(2) == 0 ? YES : NO); - ReloadType reloadType = (arc4random_uniform(ReloadTypeMax)); - BOOL letRunloopProceed = (arc4random_uniform(2) == 0 ? YES : NO); - BOOL useBeginEndUpdates = (arc4random_uniform(3) == 0 ? YES : NO); - - // FIXME: Need to revise the logic to support mutating the data source rather than just reload thrashing. - // UITableView itself does not support deleting a row in the same edit transaction as reloading it, for example. - BOOL addIndexPaths = NO; //(arc4random_uniform(2) == 0 ? YES : NO); - - if (useBeginEndUpdates) { - [_tableView beginUpdates]; - } - - switch (reloadType) { - case ReloadData: - [_tableView reloadData]; - break; - - case ReloadRows: - [_tableView reloadRowsAtIndexPaths:[self randomIndexPathsExisting:YES] withRowAnimation:rowAnimation]; - break; - - case ReloadSections: - [_tableView reloadSections:[self randomIndexSet] withRowAnimation:rowAnimation]; - break; - - default: - break; - } - - if (addIndexPaths && !indexPathsAddedAndRemoved) { - indexPathsAddedAndRemoved = [self randomIndexPathsExisting:NO]; - for (NSIndexPath *indexPath in indexPathsAddedAndRemoved) { - [_sections[indexPath.section] addObject:indexPath]; - } - [_tableView insertRowsAtIndexPaths:indexPathsAddedAndRemoved withRowAnimation:rowAnimation]; - } - - [_tableView setContentOffset:CGPointMake(0, arc4random_uniform(_tableView.contentSize.height - _tableView.bounds.size.height)) animated:animatedScroll]; - - if (letRunloopProceed) { - // Run other stuff on the main queue for between 2ms and 1000ms. - [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:(1 / (1 + arc4random_uniform(500)))]]; - - if (indexPathsAddedAndRemoved) { - for (NSIndexPath *indexPath in indexPathsAddedAndRemoved) { - [_sections[indexPath.section] removeObjectIdenticalTo:indexPath]; - } - [_tableView deleteRowsAtIndexPaths:indexPathsAddedAndRemoved withRowAnimation:rowAnimation]; - indexPathsAddedAndRemoved = nil; - } - } - - if (useBeginEndUpdates) { - [_tableView endUpdates]; - } - } -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return _sections.count; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return [(NSArray *)[_sections objectAtIndex:section] count]; -} - -- (ASCellNode *)tableView:(ASTableView *)tableView nodeForRowAtIndexPath:(NSIndexPath *)indexPath -{ - ASTextCellNode *textCellNode = [ASTextCellNode new]; - textCellNode.text = indexPath.description; - - return textCellNode; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/main.m b/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTableViewStressTest/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Podfile b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/AppDelegate.h deleted file mode 100644 index c30a27f4dc..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#define UseAutomaticLayout 1 - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/AppDelegate.m deleted file mode 100644 index 0a4654ae14..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/AppDelegate.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" -#import "TableViewController.h" -#import "CollectionViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - UITabBarController *tabController = [[UITabBarController alloc] init]; - [tabController setViewControllers:@[[[ViewController alloc] init], [[TableViewController alloc] init], [[CollectionViewController alloc] init]]]; - self.window.rootViewController = tabController; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/CollectionViewController.h b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/CollectionViewController.h deleted file mode 100644 index 0528310b79..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/CollectionViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// CollectionViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface CollectionViewController : ASViewController -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/CollectionViewController.m b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/CollectionViewController.m deleted file mode 100644 index 7e57f74434..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/CollectionViewController.m +++ /dev/null @@ -1,71 +0,0 @@ -// -// CollectionViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "CollectionViewController.h" -#import "KittenNode.h" -#import - -@interface CollectionViewController () -@property (nonatomic, strong) ASCollectionNode *collectionNode; -@end - -@implementation CollectionViewController - -- (instancetype)init -{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumLineSpacing = 10; - layout.minimumInteritemSpacing = 10; - - ASCollectionNode *collectionNode = [[ASCollectionNode alloc] initWithCollectionViewLayout:layout]; - - if (!(self = [super initWithNode:collectionNode])) - return nil; - - self.title = @"Collection Node"; - _collectionNode = collectionNode; - collectionNode.dataSource = self; - collectionNode.delegate = self; - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.collectionNode.view.contentInset = UIEdgeInsetsMake(20, 10, CGRectGetHeight(self.tabBarController.tabBar.frame), 10); -} - -#pragma mark - ASCollectionDataSource - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section -{ - return 50; -} - -- (ASCellNode *)collectionView:(ASCollectionView *)collectionView nodeForItemAtIndexPath:(NSIndexPath *)indexPath -{ - KittenNode *cell = [[KittenNode alloc] init]; - cell.textNode.maximumNumberOfLines = 3; - cell.imageTappedBlock = ^{ - [KittenNode defaultImageTappedAction:self]; - }; - return cell; -} - -- (ASSizeRange)collectionView:(ASCollectionView *)collectionView constrainedSizeForNodeAtIndexPath:(NSIndexPath *)indexPath -{ - ASTraitCollection *traitCollection = [self.collectionNode asyncTraitCollection]; - - if (traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular) { - return ASSizeRangeMake(CGSizeMake(200, 120), CGSizeMake(200, 120)); - } - return ASSizeRangeMake(CGSizeMake(132, 180), CGSizeMake(132, 180)); -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/Info.plist b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/Info.plist deleted file mode 100644 index acc713cc71..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/Info.plist +++ /dev/null @@ -1,39 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - Launch Screen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - UIInterfaceOrientationPortraitUpsideDown - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/KittenNode.h b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/KittenNode.h deleted file mode 100644 index 17655e0765..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/KittenNode.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// KittenNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface KittenNode : ASCellNode -@property (nonatomic, strong, readonly) ASNetworkImageNode *imageNode; -@property (nonatomic, strong, readonly) ASTextNode *textNode; - -@property (nonatomic, copy) dispatch_block_t imageTappedBlock; - -// The default action when an image node is tapped. This action will create an -// OverrideVC and override its display traits to always be compact. -+ (void)defaultImageTappedAction:(ASViewController *)sourceViewController; -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/KittenNode.m b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/KittenNode.m deleted file mode 100644 index 1526563e04..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/KittenNode.m +++ /dev/null @@ -1,167 +0,0 @@ -// -// KittenNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "KittenNode.h" -#import "OverrideViewController.h" - -#import - -static const CGFloat kOuterPadding = 16.0f; -static const CGFloat kInnerPadding = 10.0f; - -@interface KittenNode () -{ - CGSize _kittenSize; -} - -@end - - -@implementation KittenNode - -// lorem ipsum text courtesy https://kittyipsum.com/ <3 -+ (NSArray *)placeholders -{ - static NSArray *placeholders = nil; - - static dispatch_once_t once; - dispatch_once(&once, ^{ - placeholders = @[ - @"Kitty ipsum dolor sit amet, purr sleep on your face lay down in your way biting, sniff tincidunt a etiam fluffy fur judging you stuck in a tree kittens.", - @"Lick tincidunt a biting eat the grass, egestas enim ut lick leap puking climb the curtains lick.", - @"Lick quis nunc toss the mousie vel, tortor pellentesque sunbathe orci turpis non tail flick suscipit sleep in the sink.", - @"Orci turpis litter box et stuck in a tree, egestas ac tempus et aliquam elit.", - @"Hairball iaculis dolor dolor neque, nibh adipiscing vehicula egestas dolor aliquam.", - @"Sunbathe fluffy fur tortor faucibus pharetra jump, enim jump on the table I don't like that food catnip toss the mousie scratched.", - @"Quis nunc nam sleep in the sink quis nunc purr faucibus, chase the red dot consectetur bat sagittis.", - @"Lick tail flick jump on the table stretching purr amet, rhoncus scratched jump on the table run.", - @"Suspendisse aliquam vulputate feed me sleep on your keyboard, rip the couch faucibus sleep on your keyboard tristique give me fish dolor.", - @"Rip the couch hiss attack your ankles biting pellentesque puking, enim suspendisse enim mauris a.", - @"Sollicitudin iaculis vestibulum toss the mousie biting attack your ankles, puking nunc jump adipiscing in viverra.", - @"Nam zzz amet neque, bat tincidunt a iaculis sniff hiss bibendum leap nibh.", - @"Chase the red dot enim puking chuf, tristique et egestas sniff sollicitudin pharetra enim ut mauris a.", - @"Sagittis scratched et lick, hairball leap attack adipiscing catnip tail flick iaculis lick.", - @"Neque neque sleep in the sink neque sleep on your face, climb the curtains chuf tail flick sniff tortor non.", - @"Ac etiam kittens claw toss the mousie jump, pellentesque rhoncus litter box give me fish adipiscing mauris a.", - @"Pharetra egestas sunbathe faucibus ac fluffy fur, hiss feed me give me fish accumsan.", - @"Tortor leap tristique accumsan rutrum sleep in the sink, amet sollicitudin adipiscing dolor chase the red dot.", - @"Knock over the lamp pharetra vehicula sleep on your face rhoncus, jump elit cras nec quis quis nunc nam.", - @"Sollicitudin feed me et ac in viverra catnip, nunc eat I don't like that food iaculis give me fish.", - ]; - }); - - return placeholders; -} - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - _kittenSize = CGSizeMake(100,100); - - // kitten image, with a solid background colour serving as placeholder - _imageNode = [[ASNetworkImageNode alloc] init]; - _imageNode.backgroundColor = ASDisplayNodeDefaultPlaceholderColor(); - _imageNode.style.preferredSize = _kittenSize; - [_imageNode addTarget:self action:@selector(imageTapped:) forControlEvents:ASControlNodeEventTouchUpInside]; - - CGFloat scale = [UIScreen mainScreen].scale; - _imageNode.URL = [NSURL URLWithString:[NSString stringWithFormat:@"https://placekitten.com/%zd/%zd?image=%zd", - (NSInteger)roundl(_kittenSize.width * scale), - (NSInteger)roundl(_kittenSize.height * scale), - (NSInteger)arc4random_uniform(20)]]; - [self addSubnode:_imageNode]; - - // lorem ipsum text, plus some nice styling - _textNode = [[ASTextNode alloc] init]; - _textNode.attributedText = [[NSAttributedString alloc] initWithString:[self kittyIpsum] - attributes:[self textStyle]]; - _textNode.style.flexShrink = 1.0; - _textNode.style.flexGrow = 1.0; - [self addSubnode:_textNode]; - - return self; -} - -- (void)imageTapped:(id)sender -{ - if (self.imageTappedBlock) { - self.imageTappedBlock(); - } -} - -- (NSString *)kittyIpsum -{ - NSArray *placeholders = [KittenNode placeholders]; - u_int32_t ipsumCount = (u_int32_t)[placeholders count]; - u_int32_t location = arc4random_uniform(ipsumCount); - u_int32_t length = arc4random_uniform(ipsumCount - location); - - NSMutableString *string = [placeholders[location] mutableCopy]; - for (u_int32_t i = location + 1; i < location + length; i++) { - [string appendString:(i % 2 == 0) ? @"\n" : @" "]; - [string appendString:placeholders[i]]; - } - - return string; -} - -- (NSDictionary *)textStyle -{ - UIFont *font = [UIFont fontWithName:@"HelveticaNeue" size:12.0f]; - - NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; - style.paragraphSpacing = 0.5 * font.lineHeight; - style.hyphenationFactor = 1.0; - - return @{ NSFontAttributeName: font, - NSParagraphStyleAttributeName: style, - ASTextNodeWordKerningAttributeName : @.5}; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASStackLayoutSpec *stackSpec = [[ASStackLayoutSpec alloc] init]; - stackSpec.spacing = kInnerPadding; - [stackSpec setChildren:@[_imageNode, _textNode]]; - - if (self.asyncTraitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular) { - _imageNode.style.alignSelf = ASStackLayoutAlignSelfStart; - stackSpec.direction = ASStackLayoutDirectionHorizontal; - } else { - _imageNode.style.alignSelf = ASStackLayoutAlignSelfCenter; - stackSpec.direction = ASStackLayoutDirectionVertical; - } - - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(kOuterPadding, kOuterPadding, kOuterPadding, kOuterPadding) child:stackSpec]; -} - -+ (void)defaultImageTappedAction:(ASViewController *)sourceViewController -{ - OverrideViewController *overrideVC = [[OverrideViewController alloc] init]; - - __weak OverrideViewController *weakOverrideVC = overrideVC; - overrideVC.overrideDisplayTraitsWithTraitCollection = ^(UITraitCollection *traitCollection) { - ASTraitCollection *asyncTraitCollection = [ASTraitCollection traitCollectionWithDisplayScale:traitCollection.displayScale - userInterfaceIdiom:traitCollection.userInterfaceIdiom - horizontalSizeClass:UIUserInterfaceSizeClassCompact - verticalSizeClass:UIUserInterfaceSizeClassCompact - forceTouchCapability:traitCollection.forceTouchCapability - containerSize:weakOverrideVC.view.bounds.size]; - return asyncTraitCollection; - }; - - [sourceViewController presentViewController:overrideVC animated:YES completion:nil]; - overrideVC.closeBlock = ^{ - [sourceViewController dismissViewControllerAnimated:YES completion:nil]; - }; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/Launch Screen.storyboard b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/Launch Screen.storyboard deleted file mode 100644 index 95c8ef474d..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/Launch Screen.storyboard +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/OverrideViewController.h b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/OverrideViewController.h deleted file mode 100644 index f5de270ae5..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/OverrideViewController.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// OverrideViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -/* - * A simple node that displays the attribution for the kitties in the app. Note that - * for a regular horizontal size class it does something stupid and sets the font size to 100. - * It's VC, OverrideViewController, will have its display traits overridden such that - * it will always have a compact horizontal size class. - */ -@interface OverrideNode : ASDisplayNode -@end - -/* - * This is a fairly stupid VC that's main purpose is to show how to override ASDisplayTraits. - * Take a look at `defaultImageTappedAction` in KittenNode to see how this is accomplished. - */ -@interface OverrideViewController : ASViewController -@property (nonatomic, copy) dispatch_block_t closeBlock; -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/OverrideViewController.m b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/OverrideViewController.m deleted file mode 100644 index 3e9fcc305e..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/OverrideViewController.m +++ /dev/null @@ -1,95 +0,0 @@ -// -// OverrideViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "OverrideViewController.h" -#import - -static NSString *kLinkAttributeName = @"PlaceKittenNodeLinkAttributeName"; - -@interface OverrideNode() -@property (nonatomic, strong) ASTextNode *textNode; -@property (nonatomic, strong) ASButtonNode *buttonNode; -@end - -@implementation OverrideNode - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - _textNode = [[ASTextNode alloc] init]; - _textNode.style.flexGrow = 1.0; - _textNode.style.flexShrink = 1.0; - _textNode.maximumNumberOfLines = 3; - [self addSubnode:_textNode]; - - _buttonNode = [[ASButtonNode alloc] init]; - [_buttonNode setAttributedTitle:[[NSAttributedString alloc] initWithString:@"Close"] forState:UIControlStateNormal]; - [self addSubnode:_buttonNode]; - - self.backgroundColor = [UIColor lightGrayColor]; - - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - CGFloat pointSize = 16.f; - ASTraitCollection *traitCollection = [self asyncTraitCollection]; - if (traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular) { - // This should never happen because we override the VC's display traits to always be compact. - pointSize = 100; - } - - NSString *blurb = @"kittens courtesy placekitten.com"; - NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:blurb]; - [string addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue" size:pointSize] range:NSMakeRange(0, blurb.length)]; - [string addAttributes:@{ - kLinkAttributeName: [NSURL URLWithString:@"http://placekitten.com/"], - NSForegroundColorAttributeName: [UIColor grayColor], - NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle | NSUnderlinePatternDot), - } - range:[blurb rangeOfString:@"placekitten.com"]]; - - _textNode.attributedText = string; - - ASStackLayoutSpec *stackSpec = [ASStackLayoutSpec verticalStackLayoutSpec]; - stackSpec.children = @[_textNode, _buttonNode]; - stackSpec.spacing = 10; - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(40, 20, 20, 20) child:stackSpec]; -} - -@end - -@interface OverrideViewController () - -@end - -@implementation OverrideViewController - -- (instancetype)init -{ - OverrideNode *overrideNode = [[OverrideNode alloc] init]; - - if (!(self = [super initWithNode:overrideNode])) - return nil; - - [overrideNode.buttonNode addTarget:self action:@selector(closeTapped:) forControlEvents:ASControlNodeEventTouchUpInside]; - return self; -} - -- (void)closeTapped:(id)sender -{ - if (self.closeBlock) { - self.closeBlock(); - } -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/TableViewController.h b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/TableViewController.h deleted file mode 100644 index bfb5fad618..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/TableViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// TableViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface TableViewController : ASViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/TableViewController.m b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/TableViewController.m deleted file mode 100644 index 3a91be7588..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/TableViewController.m +++ /dev/null @@ -1,60 +0,0 @@ -// -// TableViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "TableViewController.h" -#import "KittenNode.h" - -@interface TableViewController () -@property (nonatomic, strong) ASTableNode *tableNode; -@end - -@implementation TableViewController - -- (instancetype)init -{ - ASTableNode *tableNode = [[ASTableNode alloc] init]; - if (!(self = [super initWithNode:tableNode])) - return nil; - - _tableNode = tableNode; - tableNode.delegate = self; - tableNode.dataSource = self; - self.title = @"Table Node"; - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.tableNode.view.contentInset = UIEdgeInsetsMake(CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]), 0, CGRectGetHeight(self.tabBarController.tabBar.frame), 0); -} - -#pragma mark - -#pragma mark ASTableView. - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [tableView deselectRowAtIndexPath:indexPath animated:YES]; -} - -- (ASCellNode *)tableView:(ASTableView *)tableView nodeForRowAtIndexPath:(NSIndexPath *)indexPath -{ - KittenNode *cell = [[KittenNode alloc] init]; - cell.imageTappedBlock = ^{ - [KittenNode defaultImageTappedAction:self]; - }; - return cell; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return 15; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/ViewController.h deleted file mode 100644 index 4499f93bab..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : ASViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/ViewController.m deleted file mode 100644 index ddb1d708f2..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/ViewController.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" -#import "KittenNode.h" -#import "OverrideViewController.h" - -#import -#import - -@interface ViewController () -@end - -@implementation ViewController - -#pragma mark - -#pragma mark UIViewController. - -- (instancetype)init -{ - KittenNode *displayNode = [[KittenNode alloc] init]; - if (!(self = [super initWithNode:displayNode])) - return nil; - - self.title = @"Display Node"; - displayNode.imageTappedBlock = ^{ - [KittenNode defaultImageTappedAction:self]; - }; - return self; -} - -- (void)viewWillLayoutSubviews -{ - [super viewWillLayoutSubviews]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/main.m b/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/ASTraitCollection/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Podfile b/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Podfile deleted file mode 100644 index 3b379097a0..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Podfile +++ /dev/null @@ -1,6 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -use_frameworks! -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/AppDelegate.swift b/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/AppDelegate.swift deleted file mode 100644 index 5868314aaf..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/AppDelegate.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// AppDelegate.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { - let window = UIWindow(frame: UIScreen.mainScreen().bounds) - self.window = window - let vc = ViewController() - window.rootViewController = UINavigationController(rootViewController: vc) - window.makeKeyAndVisible() - return true - } - - func applicationWillResignActive(application: UIApplication) { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. - } - - func applicationDidEnterBackground(application: UIApplication) { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. - } - - func applicationWillEnterForeground(application: UIApplication) { - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. - } - - func applicationDidBecomeActive(application: UIApplication) { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. - } - - func applicationWillTerminate(application: UIApplication) { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. - } - - -} - diff --git a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 118c98f746..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/Base.lproj/LaunchScreen.storyboard b/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 2e721e1833..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/DemoCellNode.swift b/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/DemoCellNode.swift deleted file mode 100644 index 6c3e7e529b..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/DemoCellNode.swift +++ /dev/null @@ -1,88 +0,0 @@ -// -// DemoCellNode.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit -import AsyncDisplayKit - -final class DemoCellNode: ASCellNode { - let childA = ASDisplayNode() - let childB = ASDisplayNode() - var state = State.Right - - override init() { - super.init() - automaticallyManagesSubnodes = true - } - - override func layoutSpecThatFits(constrainedSize: ASSizeRange) -> ASLayoutSpec { - let specA = ASRatioLayoutSpec(ratio: 1, child: childA) - specA.style.flexBasis = ASDimensionMakeWithPoints(1) - specA.style.flexGrow = 1.0 - let specB = ASRatioLayoutSpec(ratio: 1, child: childB) - specB.style.flexBasis = ASDimensionMakeWithPoints(1) - specB.style.flexGrow = 1.0 - let children = state.isReverse ? [ specB, specA ] : [ specA, specB ] - let direction: ASStackLayoutDirection = state.isVertical ? .Vertical : .Horizontal - return ASStackLayoutSpec(direction: direction, - spacing: 20, - justifyContent: .SpaceAround, - alignItems: .Center, - children: children) - } - - override func animateLayoutTransition(context: ASContextTransitioning) { - childA.frame = context.initialFrameForNode(childA) - childB.frame = context.initialFrameForNode(childB) - let tinyDelay = drand48() / 10 - UIView.animateWithDuration(0.5, delay: tinyDelay, usingSpringWithDamping: 0.9, initialSpringVelocity: 1.5, options: .BeginFromCurrentState, animations: { () -> Void in - self.childA.frame = context.finalFrameForNode(self.childA) - self.childB.frame = context.finalFrameForNode(self.childB) - }, completion: { - context.completeTransition($0) - }) - } - - enum State { - case Right - case Up - case Left - case Down - - var isVertical: Bool { - switch self { - case .Up, .Down: - return true - default: - return false - } - } - - var isReverse: Bool { - switch self { - case .Left, .Up: - return true - default: - return false - } - } - - mutating func advance() { - switch self { - case .Right: - self = .Up - case .Up: - self = .Left - case .Left: - self = .Down - case .Down: - self = .Right - } - } - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/Info.plist b/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/Info.plist deleted file mode 100644 index 61861abb1a..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/Utilities.swift b/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/Utilities.swift deleted file mode 100644 index f33065245c..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/Utilities.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// Utilities.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -extension UIColor { - static func random() -> UIColor { - return UIColor(red: CGFloat(drand48()), green: CGFloat(drand48()), blue: CGFloat(drand48()), alpha: 1.0) - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/ViewController.swift b/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/ViewController.swift deleted file mode 100644 index 47faf4384e..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/BackgroundPropertySetting/Sample/ViewController.swift +++ /dev/null @@ -1,96 +0,0 @@ -// -// ViewController.swift -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit -import AsyncDisplayKit - -final class ViewController: ASViewController, ASCollectionDelegate, ASCollectionDataSource { - let itemCount = 1000 - - let itemSize: CGSize - let padding: CGFloat - var collectionNode: ASCollectionNode { - return node as! ASCollectionNode - } - - init() { - let layout = UICollectionViewFlowLayout() - (padding, itemSize) = ViewController.computeLayoutSizesForMainScreen() - layout.minimumInteritemSpacing = padding - layout.minimumLineSpacing = padding - super.init(node: ASCollectionNode(collectionViewLayout: layout)) - navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Color", style: .Plain, target: self, action: #selector(didTapColorsButton)) - navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Layout", style: .Plain, target: self, action: #selector(didTapLayoutButton)) - collectionNode.delegate = self - collectionNode.dataSource = self - title = "Background Updating" - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: ASCollectionDataSource - - func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return itemCount - } - - func collectionView(collectionView: ASCollectionView, nodeBlockForItemAtIndexPath indexPath: NSIndexPath) -> ASCellNodeBlock { - return { - let node = DemoCellNode() - node.backgroundColor = UIColor.random() - node.childA.backgroundColor = UIColor.random() - node.childB.backgroundColor = UIColor.random() - return node - } - } - - func collectionView(collectionView: ASCollectionView, constrainedSizeForNodeAtIndexPath indexPath: NSIndexPath) -> ASSizeRange { - return ASSizeRangeMake(itemSize, itemSize) - } - - // MARK: Action Handling - - @objc private func didTapColorsButton() { - let currentlyVisibleNodes = collectionNode.view.visibleNodes() - let queue = dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0) - dispatch_async(queue) { - for case let node as DemoCellNode in currentlyVisibleNodes { - node.backgroundColor = UIColor.random() - } - } - } - - @objc private func didTapLayoutButton() { - let currentlyVisibleNodes = collectionNode.view.visibleNodes() - let queue = dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0) - dispatch_async(queue) { - for case let node as DemoCellNode in currentlyVisibleNodes { - node.state.advance() - node.setNeedsLayout() - } - } - } - - // MARK: Static - - static func computeLayoutSizesForMainScreen() -> (padding: CGFloat, itemSize: CGSize) { - let numberOfColumns = 4 - let screen = UIScreen.mainScreen() - let scale = screen.scale - let screenWidth = Int(screen.bounds.width * screen.scale) - let itemWidthPx = (screenWidth - (numberOfColumns - 1)) / numberOfColumns - let leftover = screenWidth - itemWidthPx * numberOfColumns - let paddingPx = leftover / (numberOfColumns - 1) - let itemDimension = CGFloat(itemWidthPx) / scale - let padding = CGFloat(paddingPx) / scale - return (padding: padding, itemSize: CGSize(width: itemDimension, height: itemDimension)) - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/Cartfile b/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/Cartfile deleted file mode 100644 index aa14143b00..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/Cartfile +++ /dev/null @@ -1 +0,0 @@ -github "facebook/AsyncDisplayKit" "master" diff --git a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/AppDelegate.h b/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/AppDelegate.h deleted file mode 100644 index 8d58a13cbe..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - - -@end - diff --git a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/AppDelegate.m b/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/AppDelegate.m deleted file mode 100644 index f4d3339633..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/AppDelegate.m +++ /dev/null @@ -1,48 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -@import AsyncDisplayKit; - -#import "AppDelegate.h" - -@interface AppDelegate () - -@end - -@implementation AppDelegate - - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // Override point for customization after application launch. - return YES; -} - -- (void)applicationWillResignActive:(UIApplication *)application { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. -} - -- (void)applicationDidEnterBackground:(UIApplication *)application { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. -} - -- (void)applicationWillEnterForeground:(UIApplication *)application { - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. -} - -- (void)applicationDidBecomeActive:(UIApplication *)application { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. -} - -- (void)applicationWillTerminate:(UIApplication *)application { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/Assets.xcassets/AppIcon.appiconset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 118c98f746..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/Base.lproj/LaunchScreen.storyboard b/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index ebf48f6039..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/Base.lproj/Main.storyboard b/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/Base.lproj/Main.storyboard deleted file mode 100644 index 82cf14be21..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/Info.plist b/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/Info.plist deleted file mode 100644 index 6905cc67bb..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/Info.plist +++ /dev/null @@ -1,40 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/ViewController.h b/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/ViewController.h deleted file mode 100644 index 4627e29285..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/ViewController.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : UIViewController - - -@end - diff --git a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/ViewController.m b/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/ViewController.m deleted file mode 100644 index 993d6ac152..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/ViewController.m +++ /dev/null @@ -1,36 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" -#import - -@interface ViewController () - -@end - -@implementation ViewController - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - CGSize screenSize = self.view.bounds.size; - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - ASTextNode *node = [[ASTextNode alloc] init]; - node.attributedText = [[NSAttributedString alloc] initWithString:@"hello world"]; - [node layoutThatFits:ASSizeRangeMake(CGSizeZero, (CGSize){.width = screenSize.width, .height = CGFLOAT_MAX})]; - node.frame = (CGRect) {.origin = (CGPoint){.x = 100, .y = 100}, .size = node.calculatedSize }; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self.view addSubview:node.view]; - }); - }); -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/main.m b/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/main.m deleted file mode 100644 index 0e5da05001..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/CarthageExample/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/README.md b/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/README.md deleted file mode 100644 index 65ad6a6737..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CarthageBuildTest/README.md +++ /dev/null @@ -1,7 +0,0 @@ -This project is supposed to test that the `AsyncDisplayKit.framework` built by Carthage from the master branch can be imported as a module without causing any warnings and errors. - -Steps to verify: - -- Run `carthage update --platform iOS` -- Build `CarthageExample.xcodeproj` -- Verify that there are 0 Errors and 0 Warnings diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Podfile b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/AppDelegate.h deleted file mode 100644 index 19db03c153..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/AppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/AppDelegate.m deleted file mode 100644 index 78de0a3151..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/AppDelegate.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[ViewController alloc] init]; - - [self.window makeKeyAndVisible]; - - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/ImageViewController.h b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/ImageViewController.h deleted file mode 100644 index 07000b0e3f..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/ImageViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ImageViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ImageViewController : UIViewController -- (instancetype)initWithImage:(UIImage *)image; -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/ImageViewController.m b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/ImageViewController.m deleted file mode 100644 index 60e5027dae..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/ImageViewController.m +++ /dev/null @@ -1,48 +0,0 @@ -// -// ImageViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - - -#import "ImageViewController.h" - -@interface ImageViewController () -@property (nonatomic) UIImageView *imageView; -@end - -@implementation ImageViewController - -- (instancetype)initWithImage:(UIImage *)image { - if (!(self = [super init])) { return nil; } - - self.imageView = [[UIImageView alloc] initWithImage:image]; - - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self.view addSubview:self.imageView]; - - UIGestureRecognizer *tap = [[UIGestureRecognizer alloc] initWithTarget:self action:@selector(tapped)]; - [self.view addGestureRecognizer:tap]; - - self.imageView.contentMode = UIViewContentModeScaleAspectFill; -} - -- (void)tapped; -{ - NSLog(@"tapped!"); -} - -- (void)viewWillLayoutSubviews -{ - self.imageView.frame = self.view.bounds; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/LaunchImage.launchimage/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index f0fce54771..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default-568h@2x.png", - "minimum-system-version" : "7.0", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "scale" : "1x", - "orientation" : "portrait" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "orientation" : "portrait" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default-568h@2x.png", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "minimum-system-version" : "7.0", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png deleted file mode 100644 index 1547a98454..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_0.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_0.imageset/Contents.json deleted file mode 100644 index 4eaff61cc1..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_0.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_0.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_0.imageset/image_0.jpg b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_0.imageset/image_0.jpg deleted file mode 100644 index 4a365897ea..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_0.imageset/image_0.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_1.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_1.imageset/Contents.json deleted file mode 100644 index 80c90eca3e..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_1.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_1.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_1.imageset/image_1.jpg b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_1.imageset/image_1.jpg deleted file mode 100644 index 5cb4828f44..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_1.imageset/image_1.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_10.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_10.imageset/Contents.json deleted file mode 100644 index d61e934e39..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_10.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_10.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_10.imageset/image_10.jpg b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_10.imageset/image_10.jpg deleted file mode 100644 index ea5cd6d268..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_10.imageset/image_10.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_11.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_11.imageset/Contents.json deleted file mode 100644 index 94921077f9..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_11.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_11.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_11.imageset/image_11.jpg b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_11.imageset/image_11.jpg deleted file mode 100644 index e93c68e512..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_11.imageset/image_11.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_12.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_12.imageset/Contents.json deleted file mode 100644 index 61488a9fdc..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_12.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_12.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_12.imageset/image_12.jpg b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_12.imageset/image_12.jpg deleted file mode 100644 index d520b6d80f..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_12.imageset/image_12.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_13.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_13.imageset/Contents.json deleted file mode 100644 index 7f83f8a390..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_13.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_13.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_13.imageset/image_13.jpg b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_13.imageset/image_13.jpg deleted file mode 100644 index c0232370cd..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_13.imageset/image_13.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_2.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_2.imageset/Contents.json deleted file mode 100644 index 774cde7833..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_2.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_2.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_2.imageset/image_2.jpg b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_2.imageset/image_2.jpg deleted file mode 100644 index 175343454d..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_2.imageset/image_2.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_3.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_3.imageset/Contents.json deleted file mode 100644 index c0abe414cd..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_3.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_3.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_3.imageset/image_3.jpg b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_3.imageset/image_3.jpg deleted file mode 100644 index f5398cac79..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_3.imageset/image_3.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_4.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_4.imageset/Contents.json deleted file mode 100644 index 55a498a8a0..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_4.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_4.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_4.imageset/image_4.jpg b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_4.imageset/image_4.jpg deleted file mode 100644 index 2a6fe4c264..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_4.imageset/image_4.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_5.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_5.imageset/Contents.json deleted file mode 100644 index 9a1181e83b..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_5.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_5.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_5.imageset/image_5.jpg b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_5.imageset/image_5.jpg deleted file mode 100644 index 4e507b8064..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_5.imageset/image_5.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_6.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_6.imageset/Contents.json deleted file mode 100644 index 6aef7d6047..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_6.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_6.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_6.imageset/image_6.jpg b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_6.imageset/image_6.jpg deleted file mode 100644 index 35fe778b3a..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_6.imageset/image_6.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_7.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_7.imageset/Contents.json deleted file mode 100644 index acdb0e87f0..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_7.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_7.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_7.imageset/image_7.jpg b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_7.imageset/image_7.jpg deleted file mode 100644 index 8f5e037722..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_7.imageset/image_7.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_8.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_8.imageset/Contents.json deleted file mode 100644 index 40d616ed40..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_8.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_8.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_8.imageset/image_8.jpg b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_8.imageset/image_8.jpg deleted file mode 100644 index 5651436bb6..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_8.imageset/image_8.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_9.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_9.imageset/Contents.json deleted file mode 100644 index b3b3c74e12..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_9.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x", - "filename" : "image_9.jpg" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_9.imageset/image_9.jpg b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_9.imageset/image_9.jpg deleted file mode 100644 index 9fb6e47d3f..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Images.xcassets/image_9.imageset/image_9.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Info.plist b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Info.plist deleted file mode 100644 index eeb71a8d35..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Info.plist +++ /dev/null @@ -1,49 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIcons - - CFBundleIcons~ipad - - CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - Launchboard - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Launchboard.storyboard b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Launchboard.storyboard deleted file mode 100644 index 673e0f7e68..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/Launchboard.storyboard +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/MosaicCollectionViewLayout.h b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/MosaicCollectionViewLayout.h deleted file mode 100644 index c7a9867fb5..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/MosaicCollectionViewLayout.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MosaicCollectionViewLayout.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface MosaicCollectionViewLayout : UICollectionViewLayout - -@property (assign, nonatomic) NSUInteger numberOfColumns; -@property (assign, nonatomic) CGFloat columnSpacing; -@property (assign, nonatomic) UIEdgeInsets sectionInset; -@property (assign, nonatomic) UIEdgeInsets interItemSpacing; -@property (assign, nonatomic) CGFloat headerHeight; - -@end - -@protocol MosaicCollectionViewLayoutDelegate - -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(MosaicCollectionViewLayout *)layout originalItemSizeAtIndexPath:(NSIndexPath *)indexPath; - -@end - -@interface MosaicCollectionViewLayoutInspector : NSObject - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/MosaicCollectionViewLayout.m b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/MosaicCollectionViewLayout.m deleted file mode 100644 index bc48035100..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/MosaicCollectionViewLayout.m +++ /dev/null @@ -1,231 +0,0 @@ -// -// MosaicCollectionViewLayout.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "MosaicCollectionViewLayout.h" - -@implementation MosaicCollectionViewLayout { - NSMutableArray *_columnHeights; - NSMutableArray *_itemAttributes; - NSMutableDictionary *_headerAttributes; - NSMutableArray *_allAttributes; -} - -- (instancetype)init -{ - self = [super init]; - if (self != nil) { - self.numberOfColumns = 3; - self.columnSpacing = 10.0; - self.sectionInset = UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0); - self.interItemSpacing = UIEdgeInsetsMake(10.0, 0, 10.0, 0); - } - return self; -} - -- (void)prepareLayout -{ - _itemAttributes = [NSMutableArray array]; - _columnHeights = [NSMutableArray array]; - _allAttributes = [NSMutableArray array]; - _headerAttributes = [NSMutableDictionary dictionary]; - - CGFloat top = 0; - - NSInteger numberOfSections = [self.collectionView numberOfSections]; - for (NSUInteger section = 0; section < numberOfSections; section++) { - NSInteger numberOfItems = [self.collectionView numberOfItemsInSection:section]; - - top += _sectionInset.top; - - if (_headerHeight > 0) { - CGSize headerSize = [self _headerSizeForSection:section]; - UICollectionViewLayoutAttributes *attributes = [UICollectionViewLayoutAttributes - layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader - withIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]]; - attributes.frame = CGRectMake(_sectionInset.left, top, headerSize.width, headerSize.height); - _headerAttributes[@(section)] = attributes; - [_allAttributes addObject:attributes]; - top = CGRectGetMaxY(attributes.frame); - } - - [_columnHeights addObject:[NSMutableArray array]]; - for (NSUInteger idx = 0; idx < self.numberOfColumns; idx++) { - [_columnHeights[section] addObject:@(top)]; - } - - CGFloat columnWidth = [self _columnWidthForSection:section]; - [_itemAttributes addObject:[NSMutableArray array]]; - for (NSUInteger idx = 0; idx < numberOfItems; idx++) { - NSUInteger columnIndex = [self _shortestColumnIndexInSection:section]; - NSIndexPath *indexPath = [NSIndexPath indexPathForItem:idx inSection:section]; - - CGSize itemSize = [self _itemSizeAtIndexPath:indexPath]; - CGFloat xOffset = _sectionInset.left + (columnWidth + _columnSpacing) * columnIndex; - CGFloat yOffset = [_columnHeights[section][columnIndex] floatValue]; - - UICollectionViewLayoutAttributes *attributes = [UICollectionViewLayoutAttributes - layoutAttributesForCellWithIndexPath:indexPath]; - attributes.frame = CGRectMake(xOffset, yOffset, itemSize.width, itemSize.height); - - _columnHeights[section][columnIndex] = @(CGRectGetMaxY(attributes.frame) + _interItemSpacing.bottom); - - [_itemAttributes[section] addObject:attributes]; - [_allAttributes addObject:attributes]; - } - - NSUInteger columnIndex = [self _tallestColumnIndexInSection:section]; - top = [_columnHeights[section][columnIndex] floatValue] - _interItemSpacing.bottom + _sectionInset.bottom; - - for (NSUInteger idx = 0; idx < [_columnHeights[section] count]; idx++) { - _columnHeights[section][idx] = @(top); - } - } -} - -- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect -{ - NSMutableArray *includedAttributes = [NSMutableArray array]; - // Slow search for small batches - for (UICollectionViewLayoutAttributes *attributes in _allAttributes) { - if (CGRectIntersectsRect(attributes.frame, rect)) { - [includedAttributes addObject:attributes]; - } - } - return includedAttributes; -} - -- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath -{ - if (indexPath.section >= _itemAttributes.count) { - return nil; - } else if (indexPath.item >= [_itemAttributes[indexPath.section] count]) { - return nil; - } - return _itemAttributes[indexPath.section][indexPath.item]; -} - -- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath -{ - if ([elementKind isEqualToString:UICollectionElementKindSectionHeader]) { - return _headerAttributes[@(indexPath.section)]; - } - return nil; -} - -- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds -{ - if (!CGRectEqualToRect(self.collectionView.bounds, newBounds)) { - return YES; - } - return NO; -} - -- (CGFloat)_widthForSection:(NSUInteger)section -{ - return self.collectionView.bounds.size.width - _sectionInset.left - _sectionInset.right; -} - -- (CGFloat)_columnWidthForSection:(NSUInteger)section -{ - return ([self _widthForSection:section] - ((_numberOfColumns - 1) * _columnSpacing)) / _numberOfColumns; -} - -- (CGSize)_itemSizeAtIndexPath:(NSIndexPath *)indexPath -{ - CGSize size = CGSizeMake([self _columnWidthForSection:indexPath.section], 0); - CGSize originalSize = [[self _delegate] collectionView:self.collectionView layout:self originalItemSizeAtIndexPath:indexPath]; - if (originalSize.height > 0 && originalSize.width > 0) { - size.height = originalSize.height / originalSize.width * size.width; - } - return size; -} - -- (CGSize)_headerSizeForSection:(NSUInteger)section -{ - return CGSizeMake([self _widthForSection:section], _headerHeight); -} - -- (CGSize)collectionViewContentSize -{ - CGFloat height = [[[_columnHeights lastObject] firstObject] floatValue]; - return CGSizeMake(self.collectionView.bounds.size.width, height); -} - -- (NSUInteger)_tallestColumnIndexInSection:(NSUInteger)section -{ - __block NSUInteger index = 0; - __block CGFloat tallestHeight = 0; - [_columnHeights[section] enumerateObjectsUsingBlock:^(NSNumber *height, NSUInteger idx, BOOL *stop) { - if (height.floatValue > tallestHeight) { - index = idx; - tallestHeight = height.floatValue; - } - }]; - return index; -} - -- (NSUInteger)_shortestColumnIndexInSection:(NSUInteger)section -{ - __block NSUInteger index = 0; - __block CGFloat shortestHeight = CGFLOAT_MAX; - [_columnHeights[section] enumerateObjectsUsingBlock:^(NSNumber *height, NSUInteger idx, BOOL *stop) { - if (height.floatValue < shortestHeight) { - index = idx; - shortestHeight = height.floatValue; - } - }]; - return index; -} - -- (id)_delegate -{ - return (id)self.collectionView.delegate; -} - -@end - -@implementation MosaicCollectionViewLayoutInspector - -- (ASSizeRange)collectionView:(ASCollectionView *)collectionView constrainedSizeForNodeAtIndexPath:(NSIndexPath *)indexPath -{ - MosaicCollectionViewLayout *layout = (MosaicCollectionViewLayout *)[collectionView collectionViewLayout]; - return ASSizeRangeMake(CGSizeZero, [layout _itemSizeAtIndexPath:indexPath]); -} - -- (ASSizeRange)collectionView:(ASCollectionView *)collectionView constrainedSizeForSupplementaryNodeOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath -{ - MosaicCollectionViewLayout *layout = (MosaicCollectionViewLayout *)[collectionView collectionViewLayout]; - return ASSizeRangeMake(CGSizeZero, [layout _headerSizeForSection:indexPath.section]); -} - -/** - * Asks the inspector for the number of supplementary sections in the collection view for the given kind. - */ -- (NSUInteger)collectionView:(ASCollectionView *)collectionView numberOfSectionsForSupplementaryNodeOfKind:(NSString *)kind -{ - if ([kind isEqualToString:UICollectionElementKindSectionHeader]) { - return [[collectionView asyncDataSource] numberOfSectionsInCollectionView:collectionView]; - } else { - return 0; - } -} - -/** - * Asks the inspector for the number of supplementary views for the given kind in the specified section. - */ -- (NSUInteger)collectionView:(ASCollectionView *)collectionView supplementaryNodesOfKind:(NSString *)kind inSection:(NSUInteger)section -{ - if ([kind isEqualToString:UICollectionElementKindSectionHeader]) { - return 1; - } else { - return 0; - } -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/SupplementaryNode.h b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/SupplementaryNode.h deleted file mode 100644 index b29ec002b2..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/SupplementaryNode.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// SupplementaryNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface SupplementaryNode : ASCellNode - -- (instancetype)initWithText:(NSString *)text; - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/SupplementaryNode.m b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/SupplementaryNode.m deleted file mode 100644 index 47dfa786b5..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/SupplementaryNode.m +++ /dev/null @@ -1,50 +0,0 @@ -// -// SupplementaryNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "SupplementaryNode.h" - -#import -#import -#import - -@implementation SupplementaryNode { - ASTextNode *_textNode; -} - -- (instancetype)initWithText:(NSString *)text -{ - self = [super init]; - if (self != nil) { - _textNode = [[ASTextNode alloc] init]; - _textNode.attributedText = [[NSAttributedString alloc] initWithString:text - attributes:[self textAttributes]]; - [self addSubnode:_textNode]; - } - return self; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASCenterLayoutSpec *center = [[ASCenterLayoutSpec alloc] init]; - center.centeringOptions = ASCenterLayoutSpecCenteringY; - center.child = _textNode; - return center; -} - -#pragma mark - Text Formatting - -- (NSDictionary *)textAttributes -{ - return @{ - NSFontAttributeName: [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline], - NSForegroundColorAttributeName: [UIColor grayColor], - }; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/ViewController.h deleted file mode 100644 index c8a0626291..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : UIViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/ViewController.m deleted file mode 100644 index 60979faf3e..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/ViewController.m +++ /dev/null @@ -1,122 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" - -#import -#import "MosaicCollectionViewLayout.h" -#import "SupplementaryNode.h" -#import "ImageViewController.h" - -static NSUInteger kNumberOfImages = 14; - -@interface ViewController () -{ - NSMutableArray *_sections; - ASCollectionView *_collectionView; - MosaicCollectionViewLayoutInspector *_layoutInspector; -} - -@end - -@implementation ViewController - -#pragma mark - -#pragma mark UIViewController. - -- (instancetype)init -{ - self = [super init]; - if (self) { - - _sections = [NSMutableArray array]; - [_sections addObject:[NSMutableArray array]]; - for (NSUInteger idx = 0, section = 0; idx < kNumberOfImages; idx++) { - NSString *name = [NSString stringWithFormat:@"image_%lu.jpg", (unsigned long)idx]; - [_sections[section] addObject:[UIImage imageNamed:name]]; - if ((idx + 1) % 5 == 0 && idx < kNumberOfImages - 1) { - section++; - [_sections addObject:[NSMutableArray array]]; - } - } - - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - MosaicCollectionViewLayout *layout = [[MosaicCollectionViewLayout alloc] init]; - layout.numberOfColumns = 2; - layout.headerHeight = 44.0; - - _layoutInspector = [[MosaicCollectionViewLayoutInspector alloc] init]; - - _collectionView = [[ASCollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout]; - _collectionView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - _collectionView.asyncDataSource = self; - _collectionView.asyncDelegate = self; - _collectionView.layoutInspector = _layoutInspector; - _collectionView.backgroundColor = [UIColor whiteColor]; - - [_collectionView registerSupplementaryNodeOfKind:UICollectionElementKindSectionHeader]; - [self.view addSubview:_collectionView]; -} - -- (void)dealloc -{ - _collectionView.asyncDataSource = nil; - _collectionView.asyncDelegate = nil; -} - -- (void)reloadTapped -{ - [_collectionView reloadData]; -} - -#pragma mark - -#pragma mark ASCollectionView data source. - -- (ASCellNodeBlock)collectionView:(ASCollectionView *)collectionView nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath -{ - UIImage *image = _sections[indexPath.section][indexPath.item]; - return ^{ - return [[ASCellNode alloc] initWithViewControllerBlock:^UIViewController *{ - return [[ImageViewController alloc] initWithImage:image]; - } didLoadBlock:^(ASDisplayNode * _Nonnull node) { - node.layer.borderWidth = 1.0; - node.layer.borderColor = [UIColor blackColor].CGColor; - }]; - }; -} - -- (ASCellNode *)collectionView:(ASCollectionView *)collectionView nodeForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath -{ - NSString *text = [NSString stringWithFormat:@"Section %d", (int)indexPath.section + 1]; - return [[SupplementaryNode alloc] initWithText:text]; -} - -- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView -{ - return _sections.count; -} - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section -{ - return [_sections[section] count]; -} - -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout originalItemSizeAtIndexPath:(NSIndexPath *)indexPath -{ - return [(UIImage *)_sections[indexPath.section][indexPath.item] size]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/main.m b/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/main.m deleted file mode 100644 index 65850400e4..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/CollectionViewWithViewControllerCells/Sample/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/EditableText/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples_extra/EditableText/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/EditableText/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/EditableText/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples_extra/EditableText/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/EditableText/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/EditableText/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples_extra/EditableText/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/EditableText/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/EditableText/Podfile b/submodules/AsyncDisplayKit/examples_extra/EditableText/Podfile deleted file mode 100644 index 08d1b7add6..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/EditableText/Podfile +++ /dev/null @@ -1,6 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end - diff --git a/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/AppDelegate.h deleted file mode 100644 index 19db03c153..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/AppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/AppDelegate.m deleted file mode 100644 index d0fd66f775..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/AppDelegate.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[ViewController alloc] init]; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/Info.plist b/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/Info.plist deleted file mode 100644 index fb4115c84c..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/ViewController.h deleted file mode 100644 index c8a0626291..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : UIViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/ViewController.m deleted file mode 100644 index 0a9703b897..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/ViewController.m +++ /dev/null @@ -1,94 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" - -#import - - -@interface ViewController () -{ - ASEditableTextNode *_textNode; - - // These elements are a test case for ASTextNode truncation. - UILabel *_label; - ASTextNode *_node; -} - -@end - - -@implementation ViewController - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - // simple editable text node. here we use it synchronously, but it fully supports async layout & display - _textNode = [[ASEditableTextNode alloc] init]; - _textNode.returnKeyType = UIReturnKeyDone; - _textNode.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.1f]; - - // with placeholder text (displayed if the user hasn't entered text) - NSDictionary *placeholderAttrs = @{ NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-LightItalic" size:18.0f] }; - _textNode.attributedPlaceholderText = [[NSAttributedString alloc] initWithString:@"Tap to type!" - attributes:placeholderAttrs]; - - // and typing attributes (style for any text the user enters) - _textNode.typingAttributes = @{ NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Light" size:18.0f] }; - - // the usual delegate methods are available; see ASEditableTextNodeDelegate - _textNode.delegate = self; - - - // Do any additional setup after loading the view, typically from a nib. - NSDictionary *attrs = @{ NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:12.0f] }; - NSAttributedString *string = [[NSAttributedString alloc] initWithString:@"1\n2\n3\n4\n5" attributes:attrs]; - - _label = [[UILabel alloc] init]; - _label.attributedText = string; - _label.backgroundColor = [UIColor lightGrayColor]; - _label.numberOfLines = 3; - _label.frame = CGRectMake(20, 400, 40, 100); - - _node = [[ASTextNode alloc] init]; - _node.maximumNumberOfLines = 3; - _node.backgroundColor = [UIColor lightGrayColor]; - _node.attributedText = string; - _node.frame = CGRectMake(70, 400, 40, 100); -// [_node measure:CGSizeMake(40, 50)]; No longer needed now that https://github.com/facebook/AsyncDisplayKit/issues/1295 is fixed. - - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [self.view addSubnode:_textNode]; - [self.view addSubnode:_node]; - [self.view addSubview:_label]; - - [self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]]; -} - -- (void)viewWillLayoutSubviews -{ - // place the text node in the top half of the screen, with a bit of padding - _textNode.frame = CGRectMake(0, 20, self.view.bounds.size.width, (self.view.bounds.size.height / 2) - 40); -} - -- (void)tap:(UITapGestureRecognizer *)sender -{ - // dismiss the keyboard when we tap outside the text field - [_textNode resignFirstResponder]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/main.m b/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/EditableText/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples_extra/Multiplex/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples_extra/Multiplex/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples_extra/Multiplex/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Podfile b/submodules/AsyncDisplayKit/examples_extra/Multiplex/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/AppDelegate.h deleted file mode 100644 index 19db03c153..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/AppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/AppDelegate.m deleted file mode 100644 index d0fd66f775..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/AppDelegate.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[ViewController alloc] init]; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/Info.plist b/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/Info.plist deleted file mode 100644 index 35d842827b..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/ScreenNode.h b/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/ScreenNode.h deleted file mode 100644 index 4ade23a06b..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/ScreenNode.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// ScreenNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ScreenNode : ASDisplayNode - -@property (nonatomic, strong) ASMultiplexImageNode *imageNode; -@property (nonatomic, strong) ASButtonNode *buttonNode; - -- (void)start; -- (void)reload; - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/ScreenNode.m b/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/ScreenNode.m deleted file mode 100644 index 345c5bed5d..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/ScreenNode.m +++ /dev/null @@ -1,159 +0,0 @@ -// -// ScreenNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ScreenNode.h" - -@interface ScreenNode() -@end - -@implementation ScreenNode - -- (instancetype)init -{ - if (!(self = [super init])) { - return nil; - } - - // multiplex image node! - // NB: we're using a custom downloader with an artificial delay for this demo, but ASPINRemoteImageDownloader works too! - _imageNode = [[ASMultiplexImageNode alloc] initWithCache:nil downloader:self]; - _imageNode.dataSource = self; - _imageNode.delegate = self; - - // placeholder colour - _imageNode.backgroundColor = ASDisplayNodeDefaultPlaceholderColor(); - - // load low-quality images before high-quality images - _imageNode.downloadsIntermediateImages = YES; - - // simple status label. Synchronous to avoid flicker / placeholder state when updating. - _buttonNode = [[ASButtonNode alloc] init]; - [_buttonNode addTarget:self action:@selector(reload) forControlEvents:ASControlNodeEventTouchUpInside]; - _buttonNode.titleNode.displaysAsynchronously = NO; - - [self addSubnode:_imageNode]; - [self addSubnode:_buttonNode]; - - return self; -} - -- (void)start -{ - [self setText:@"loading…"]; - _buttonNode.userInteractionEnabled = NO; - _imageNode.imageIdentifiers = @[ @"best", @"medium", @"worst" ]; // go! -} - -- (void)reload -{ - [self start]; - [_imageNode reloadImageIdentifierSources]; -} - -- (void)setText:(NSString *)text -{ - NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Light" size:22.0f]}; - NSAttributedString *string = [[NSAttributedString alloc] initWithString:text - attributes:attributes]; - [_buttonNode setAttributedTitle:string forState:UIControlStateNormal]; - [self setNeedsLayout]; -} - -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASRatioLayoutSpec *imagePlaceholder = [ASRatioLayoutSpec ratioLayoutSpecWithRatio:1 child:_imageNode]; - - ASStackLayoutSpec *verticalStack = [[ASStackLayoutSpec alloc] init]; - verticalStack.direction = ASStackLayoutDirectionVertical; - verticalStack.spacing = 10; - verticalStack.justifyContent = ASStackLayoutJustifyContentCenter; - verticalStack.alignItems = ASStackLayoutAlignItemsCenter; - verticalStack.children = @[imagePlaceholder, _buttonNode]; - - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(10, 10, 10, 10) child:verticalStack]; -} - -#pragma mark - -#pragma mark ASMultiplexImageNode data source & delegate. - -- (NSURL *)multiplexImageNode:(ASMultiplexImageNode *)imageNode URLForImageIdentifier:(id)imageIdentifier -{ - if ([imageIdentifier isEqualToString:@"worst"]) { - return [NSURL URLWithString:@"https://raw.githubusercontent.com/facebook/AsyncDisplayKit/master/examples_extra/Multiplex/worst.png"]; - } - - if ([imageIdentifier isEqualToString:@"medium"]) { - return [NSURL URLWithString:@"https://raw.githubusercontent.com/facebook/AsyncDisplayKit/master/examples_extra/Multiplex/medium.png"]; - } - - if ([imageIdentifier isEqualToString:@"best"]) { - return [NSURL URLWithString:@"https://raw.githubusercontent.com/facebook/AsyncDisplayKit/master/examples_extra/Multiplex/best.png"]; - } - - // unexpected identifier - return nil; -} - -- (void)multiplexImageNode:(ASMultiplexImageNode *)imageNode didFinishDownloadingImageWithIdentifier:(id)imageIdentifier error:(NSError *)error -{ - [self setText:[NSString stringWithFormat:@"loaded '%@'", imageIdentifier]]; - - if ([imageIdentifier isEqualToString:@"best"]) { - [self setText:[_buttonNode.titleNode.attributedText.string stringByAppendingString:@". tap to reload"]]; - _buttonNode.userInteractionEnabled = YES; - } -} - - -#pragma mark - -#pragma mark ASImageDownloaderProtocol. - -- (nullable id)downloadImageWithURL:(NSURL *)URL - callbackQueue:(dispatch_queue_t)callbackQueue - downloadProgress:(nullable ASImageDownloaderProgress)downloadProgressBlock - completion:(ASImageDownloaderCompletion)completion -{ - // if no callback queue is supplied, run on the main thread - if (callbackQueue == nil) { - callbackQueue = dispatch_get_main_queue(); - } - - // call completion blocks - void (^handler)(NSURLResponse *, NSData *, NSError *) = ^(NSURLResponse *response, NSData *data, NSError *connectionError) { - // add an artificial delay - usleep(1.0 * USEC_PER_SEC); - - // ASMultiplexImageNode callbacks - dispatch_async(callbackQueue, ^{ - if (downloadProgressBlock) { - downloadProgressBlock(1.0f); - } - - if (completion) { - completion([UIImage imageWithData:data], connectionError, nil, nil); - } - }); - }; - - // let NSURLConnection do the heavy lifting - NSURLRequest *request = [NSURLRequest requestWithURL:URL]; - [NSURLConnection sendAsynchronousRequest:request - queue:[[NSOperationQueue alloc] init] - completionHandler:handler]; - - // return nil, don't support cancellation - return nil; -} - -- (void)cancelImageDownloadForIdentifier:(id)downloadIdentifier -{ - // no-op, don't support cancellation -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/ViewController.h deleted file mode 100644 index 27738fcbe1..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : ASViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/ViewController.m deleted file mode 100644 index cd687f5bc7..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/ViewController.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" -#import "ScreenNode.h" - -@interface ViewController() -{ - ScreenNode *_screenNode; -} - -@end - -@implementation ViewController - -- (instancetype)init -{ - ScreenNode *node = [[ScreenNode alloc] init]; - if (!(self = [super initWithNode:node])) - return nil; - - _screenNode = node; - - return self; -} - -- (void)viewWillAppear:(BOOL)animated -{ - // This should be done before calling super's viewWillAppear which triggers data fetching on the node. - [_screenNode start]; - [super viewWillAppear:animated]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/main.m b/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Multiplex/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/best.png b/submodules/AsyncDisplayKit/examples_extra/Multiplex/best.png deleted file mode 100644 index d50d8103a6..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Multiplex/best.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/medium.png b/submodules/AsyncDisplayKit/examples_extra/Multiplex/medium.png deleted file mode 100644 index 7c08e0adc0..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Multiplex/medium.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Multiplex/worst.png b/submodules/AsyncDisplayKit/examples_extra/Multiplex/worst.png deleted file mode 100644 index 78727fa98f..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Multiplex/worst.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Podfile b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/AppDelegate.h deleted file mode 100644 index 19db03c153..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/AppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/AppDelegate.m deleted file mode 100644 index d0fd66f775..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/AppDelegate.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[ViewController alloc] init]; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/Info.plist b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/Info.plist deleted file mode 100644 index 35d842827b..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/PostNode.h b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/PostNode.h deleted file mode 100644 index 646f72232d..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/PostNode.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// PostNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface PostNode : ASDisplayNode - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/PostNode.m b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/PostNode.m deleted file mode 100644 index 5c8bbd6dad..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/PostNode.m +++ /dev/null @@ -1,92 +0,0 @@ -// -// PostNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "PostNode.h" - -#import "SlowpokeShareNode.h" -#import "SlowpokeTextNode.h" -#import - -@interface PostNode () -{ - SlowpokeTextNode *_textNode; - SlowpokeShareNode *_needyChildNode; // this node slows down display -} - -@end - -@implementation PostNode - -// turn on to demo that the parent displays a placeholder even if it takes the longest -//+ (void)drawRect:(CGRect)bounds withParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing -//{ -// usleep( (long)(1.2 * USEC_PER_SEC) ); // artificial delay of 1.2s -// -// // demonstrates that the parent node should also adhere to the placeholder -// [[UIColor colorWithWhite:0.95 alpha:1.0] setFill]; -// UIRectFill(bounds); -//} - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - _textNode = [[SlowpokeTextNode alloc] init]; - _textNode.placeholderInsets = UIEdgeInsetsMake(3.0, 0.0, 3.0, 0.0); - _textNode.placeholderEnabled = YES; - - NSString *text = @"Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh."; - NSDictionary *attributes = @{ NSFontAttributeName: [UIFont systemFontOfSize:17.0] }; - _textNode.attributedText = [[NSAttributedString alloc] initWithString:text attributes:attributes]; - - _needyChildNode = [[SlowpokeShareNode alloc] init]; - _needyChildNode.opaque = NO; - - [self addSubnode:_textNode]; - [self addSubnode:_needyChildNode]; - - return self; -} - -- (UIImage *)placeholderImage -{ - CGSize size = self.calculatedSize; - if (CGSizeEqualToSize(size, CGSizeZero)) { - return nil; - } - - UIGraphicsBeginImageContext(size); - [[UIColor colorWithWhite:0.9 alpha:1] setFill]; - UIRectFill((CGRect){CGPointZero, size}); - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return image; -} - -- (CGSize)calculateSizeThatFits:(CGSize)constrainedSize -{ - CGSize textSize = [_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - CGSize shareSize = [_needyChildNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - - return CGSizeMake(constrainedSize.width, textSize.height + 10.0 + shareSize.height); -} - -- (void)layout -{ - [super layout]; - - CGSize textSize = _textNode.calculatedSize; - CGSize needyChildSize = _needyChildNode.calculatedSize; - - _textNode.frame = (CGRect){CGPointZero, textSize}; - _needyChildNode.frame = (CGRect){0.0, CGRectGetMaxY(_textNode.frame) + 10.0, needyChildSize}; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeImageNode.h b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeImageNode.h deleted file mode 100644 index 9c6ef5c42d..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeImageNode.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// SlowpokeImageNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface SlowpokeImageNode : ASImageNode - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeImageNode.m b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeImageNode.m deleted file mode 100644 index 8bf0f25bdf..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeImageNode.m +++ /dev/null @@ -1,76 +0,0 @@ -// -// SlowpokeImageNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "SlowpokeImageNode.h" - -#import - -static CGFloat const kASDKLogoAspectRatio = 2.79; - -@interface ASImageNode (ForwardWorkaround) -// This is a workaround until subclass overriding of custom drawing class methods is fixed -- (UIImage *)displayWithParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock; -@end - -@implementation SlowpokeImageNode - -- (UIImage *)displayWithParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock -{ - usleep( (long)(0.5 * USEC_PER_SEC) ); // artificial delay of 0.5s - - return [super displayWithParameters:parameters isCancelled:isCancelledBlock]; -} - -- (instancetype)init -{ - if (self = [super init]) { - self.placeholderEnabled = YES; - self.placeholderFadeDuration = 0.1; - } - return self; -} - -- (CGSize)calculateSizeThatFits:(CGSize)constrainedSize -{ - if (constrainedSize.width > 0.0) { - return CGSizeMake(constrainedSize.width, constrainedSize.width / kASDKLogoAspectRatio); - } else if (constrainedSize.height > 0.0) { - return CGSizeMake(constrainedSize.height * kASDKLogoAspectRatio, constrainedSize.height); - } - return CGSizeZero; -} - -- (UIImage *)placeholderImage -{ - CGSize size = self.calculatedSize; - if (CGSizeEqualToSize(size, CGSizeZero)) { - return nil; - } - - UIGraphicsBeginImageContext(size); - [[UIColor whiteColor] setFill]; - [[UIColor colorWithWhite:0.9 alpha:1] setStroke]; - - UIRectFill((CGRect){CGPointZero, size}); - - UIBezierPath *path = [UIBezierPath bezierPath]; - [path moveToPoint:CGPointZero]; - [path addLineToPoint:(CGPoint){size.width, size.height}]; - [path stroke]; - - [path moveToPoint:(CGPoint){size.width, 0.0}]; - [path addLineToPoint:(CGPoint){0.0, size.height}]; - [path stroke]; - - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return image; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeShareNode.h b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeShareNode.h deleted file mode 100644 index 3742854276..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeShareNode.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// SlowpokeShareNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface SlowpokeShareNode : ASControlNode - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeShareNode.m b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeShareNode.m deleted file mode 100644 index 3d1e568756..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeShareNode.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// SlowpokeShareNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "SlowpokeShareNode.h" - -#import - -static NSUInteger const kRingCount = 3; -static CGFloat const kRingStrokeWidth = 1.0; -static CGSize const kIconSize = (CGSize){ 60.0, 17.0 }; - -@implementation SlowpokeShareNode - -+ (void)drawRect:(CGRect)bounds withParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing -{ - usleep( (long)(0.8 * USEC_PER_SEC) ); // artificial delay of 0.8s - - [[UIColor colorWithRed:0.f green:122/255.f blue:1.f alpha:1.f] setStroke]; - - for (NSUInteger i = 0; i < kRingCount; i++) { - CGFloat x = i * kIconSize.width / kRingCount; - CGRect frame = CGRectMake(x, 0.f, kIconSize.height, kIconSize.height); - CGRect strokeFrame = CGRectInset(frame, kRingStrokeWidth, kRingStrokeWidth); - UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:strokeFrame cornerRadius:kIconSize.height / 2.f]; - [path setLineWidth:kRingStrokeWidth]; - [path stroke]; - } -} - -- (CGSize)calculateSizeThatFits:(CGSize)constrainedSize -{ - return kIconSize; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeTextNode.h b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeTextNode.h deleted file mode 100644 index 069833e53f..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeTextNode.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// SlowpokeTextNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface SlowpokeTextNode : ASTextNode - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeTextNode.m b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeTextNode.m deleted file mode 100644 index 81cedf3ccd..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/SlowpokeTextNode.m +++ /dev/null @@ -1,28 +0,0 @@ -// -// SlowpokeTextNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "SlowpokeTextNode.h" - -#import - -@interface ASTextNode (ForwardWorkaround) -// This is a workaround until subclass overriding of custom drawing class methods is fixed -- (void)drawRect:(CGRect)bounds withParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing; -@end - -@implementation SlowpokeTextNode - -- (void)drawRect:(CGRect)bounds withParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing -{ - usleep( (long)(1.0 * USEC_PER_SEC) ); // artificial delay of 1.0 - - [super drawRect:bounds withParameters:parameters isCancelled:isCancelledBlock isRasterizing:isRasterizing]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/ViewController.h deleted file mode 100644 index c8a0626291..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : UIViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/ViewController.m deleted file mode 100644 index d10f83c55d..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/ViewController.m +++ /dev/null @@ -1,103 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" - -#import - -#import "PostNode.h" -#import "SlowpokeImageNode.h" -#import - -@interface ViewController () -{ - PostNode *_postNode; - SlowpokeImageNode *_imageNode; - UIButton *_displayButton; -} - -@end - - -@implementation ViewController - -#pragma mark - -#pragma mark UIViewController - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - _displayButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_displayButton setTitle:@"Display me!" forState:UIControlStateNormal]; - [_displayButton addTarget:self action:@selector(onDisplayButton:) forControlEvents:UIControlEventTouchUpInside]; - - UIColor *tintBlue = [UIColor colorWithRed:0 green:122/255.0 blue:1.0 alpha:1.0]; - [_displayButton setTitleColor:tintBlue forState:UIControlStateNormal]; - [_displayButton setTitleColor:[tintBlue colorWithAlphaComponent:0.5] forState:UIControlStateHighlighted]; - _displayButton.backgroundColor = [UIColor colorWithWhite:0.95 alpha:1.0]; - - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [self.view addSubview:_displayButton]; -} - -- (void)viewWillLayoutSubviews -{ - CGFloat padding = 20.0; - CGRect bounds = self.view.bounds; - CGFloat constrainedWidth = CGRectGetWidth(bounds); - CGSize constrainedSize = CGSizeMake(constrainedWidth - 2 * padding, CGFLOAT_MAX); - - CGSize postSize = [_postNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - CGSize imageSize = [_imageNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)].size; - - _imageNode.frame = (CGRect){padding, padding, imageSize}; - _postNode.frame = (CGRect){padding, CGRectGetMaxY(_imageNode.frame) + 10.0, postSize}; - - CGFloat buttonHeight = 55.0; - _displayButton.frame = (CGRect){0.0, CGRectGetHeight(bounds) - buttonHeight, CGRectGetWidth(bounds), buttonHeight}; -} - -// this method is pretty gross and just for demonstration :] -- (void)createAndDisplayNodes -{ - [_imageNode.view removeFromSuperview]; - [_postNode.view removeFromSuperview]; - - // ASImageNode gets placeholders by default - _imageNode = [[SlowpokeImageNode alloc] init]; - _imageNode.image = [UIImage imageNamed:@"logo"]; - - _postNode = [[PostNode alloc] init]; - - // change to NO to see text placeholders, change to YES to see the parent placeholder - // this placeholder will cover all subnodes while they are displaying, just a like a stage curtain! - _postNode.placeholderEnabled = NO; - - [self.view addSubnode:_imageNode]; - [self.view addSubnode:_postNode]; -} - - -#pragma mark - -#pragma mark Actions - -- (void)onDisplayButton:(id)sender -{ - [self createAndDisplayNodes]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/logo.png b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/logo.png deleted file mode 100755 index dce1ebc950..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/logo.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/main.m b/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Placeholders/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/Podfile b/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/Podfile deleted file mode 100644 index 21dc49860f..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/Podfile +++ /dev/null @@ -1,9 +0,0 @@ -platform :ios, '9.0' - -target 'RepoSearcher' do - # Comment the next line if you're not using Swift and don't want to use dynamic frameworks - use_frameworks! - - # Pods for RepoSearcher - pod 'Texture/IGListKit', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index c9f12e24dd..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/AppDelegate.swift b/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/AppDelegate.swift deleted file mode 100644 index 75583b7cd9..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/AppDelegate.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// AppDelegate.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? = { - let window = UIWindow(frame: UIScreen.main.bounds) - window.backgroundColor = .white - return window - }() - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. - window?.rootViewController = UINavigationController(rootViewController: SearchViewController()) - window?.makeKeyAndVisible() - - return true - } -} - diff --git a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/Assets.xcassets/AppIcon.appiconset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 36d2c80d88..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/IGListCollectionContext+ASDK.swift b/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/IGListCollectionContext+ASDK.swift deleted file mode 100644 index 31a951f349..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/IGListCollectionContext+ASDK.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// IGListCollectionContext+ASDK.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import Foundation -import IGListKit -import AsyncDisplayKit - -extension ListCollectionContext { - func nodeForItem(at index: Int, sectionController: ListSectionController) -> ASCellNode? { - return (cellForItem(at: index, sectionController: sectionController) as? _ASCollectionViewCell)?.node - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/Info.plist b/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/Info.plist deleted file mode 100644 index 0f3cc77a42..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/Info.plist +++ /dev/null @@ -1,43 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - Launch Screen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/LabelSectionController.swift b/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/LabelSectionController.swift deleted file mode 100644 index d76dfdd78c..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/LabelSectionController.swift +++ /dev/null @@ -1,44 +0,0 @@ -// -// LabelSectionController.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import Foundation -import AsyncDisplayKit -import IGListKit - -final class LabelSectionController: ListSectionController, ASSectionController { - var object: String? - - func nodeBlockForItem(at index: Int) -> ASCellNodeBlock { - let text = object ?? "" - return { - let node = ASTextCellNode() - node.text = text - return node - } - } - - override func numberOfItems() -> Int { - return 1 - } - - override func didUpdate(to object: Any) { - self.object = String(describing: object) - } - - override func didSelectItem(at index: Int) {} - - //ASDK Replacement - override func sizeForItem(at index: Int) -> CGSize { - return ASIGListSectionControllerMethods.sizeForItem(at: index) - } - - override func cellForItem(at index: Int) -> UICollectionViewCell { - return ASIGListSectionControllerMethods.cellForItem(at: index, sectionController: self) - } -} - diff --git a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/Launch Screen.storyboard b/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/Launch Screen.storyboard deleted file mode 100644 index b90f693902..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/Launch Screen.storyboard +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/NSObject+IGListDiffable.swift b/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/NSObject+IGListDiffable.swift deleted file mode 100644 index eb95b06c78..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/NSObject+IGListDiffable.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// NSObject+IGListDiffable.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import IGListKit - -extension NSObject: ListDiffable { - public func diffIdentifier() -> NSObjectProtocol { - return self - } - public func isEqual(toDiffableObject object: ListDiffable?) -> Bool { - return isEqual(object) - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/SearchNode.swift b/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/SearchNode.swift deleted file mode 100644 index c25322c9cc..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/SearchNode.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// SearchNode.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import Foundation -import AsyncDisplayKit - -class SearchNode: ASCellNode { - var searchBarNode: SearchBarNode - - init(delegate: UISearchBarDelegate?) { - self.searchBarNode = SearchBarNode(delegate: delegate) - super.init() - automaticallyManagesSubnodes = true - } - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - return ASInsetLayoutSpec(insets: .zero, child: searchBarNode) - } -} - -final class SearchBarNode: ASDisplayNode { - - weak var delegate: UISearchBarDelegate? - - init(delegate: UISearchBarDelegate?) { - self.delegate = delegate - super.init() - setViewBlock { - UISearchBar() - } - - style.preferredSize = CGSize(width: UIScreen.main.bounds.width, height: 44) - } - - var searchBar: UISearchBar { - return view as! UISearchBar - } - - override func didLoad() { - super.didLoad() - searchBar.delegate = delegate - searchBar.searchBarStyle = .minimal - searchBar.tintColor = .black - searchBar.backgroundColor = .white - searchBar.placeholder = "Search" - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/SearchSectionController.swift b/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/SearchSectionController.swift deleted file mode 100644 index def4b10edd..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/SearchSectionController.swift +++ /dev/null @@ -1,71 +0,0 @@ -// -// SearchSectionController.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import AsyncDisplayKit -import IGListKit - -protocol SearchSectionControllerDelegate: class { - func searchSectionController(_ sectionController: SearchSectionController, didChangeText text: String) -} - -final class SearchSectionController: ListSectionController, ASSectionController { - - weak var delegate: SearchSectionControllerDelegate? - - override init() { - super.init() - scrollDelegate = self - } - - func nodeBlockForItem(at index: Int) -> ASCellNodeBlock { - return { [weak self] in - return SearchNode(delegate: self) - } - } - - override func numberOfItems() -> Int { - return 1 - } - - override func didUpdate(to object: Any) {} - override func didSelectItem(at index: Int) {} - - //ASDK Replacement - override func sizeForItem(at index: Int) -> CGSize { - return ASIGListSectionControllerMethods.sizeForItem(at: index) - } - - override func cellForItem(at index: Int) -> UICollectionViewCell { - return ASIGListSectionControllerMethods.cellForItem(at: index, sectionController: self) - } -} - -extension SearchSectionController: ListScrollDelegate { - func listAdapter(_ listAdapter: ListAdapter, didScroll sectionController: ListSectionController) { - guard let searchNode = collectionContext?.nodeForItem(at: 0, sectionController: self) as? SearchNode else { return } - - let searchBar = searchNode.searchBarNode.searchBar - searchBar.text = "" - searchBar.resignFirstResponder() - } - - func listAdapter(_ listAdapter: ListAdapter, willBeginDragging sectionController: ListSectionController) {} - func listAdapter(_ listAdapter: ListAdapter, didEndDragging sectionController: ListSectionController, willDecelerate decelerate: Bool) {} - -} - -extension SearchSectionController: UISearchBarDelegate { - func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { - delegate?.searchSectionController(self, didChangeText: searchText) - } - - func searchBarTextDidEndEditing(_ searchBar: UISearchBar) { - delegate?.searchSectionController(self, didChangeText: "") - } -} - diff --git a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/SearchViewController.swift b/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/SearchViewController.swift deleted file mode 100644 index 59556d4b37..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/RepoSearcher/RepoSearcher/SearchViewController.swift +++ /dev/null @@ -1,65 +0,0 @@ -// -// SearchViewController.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit -import AsyncDisplayKit -import IGListKit - -class SearchToken: NSObject {} - -final class SearchViewController: ASViewController { - - lazy var adapter: ListAdapter = { - return ListAdapter(updater: ListAdapterUpdater(), viewController: self, workingRangeSize: 0) - }() - - let words = ["first", "second", "third", "more", "hi", "others"] - - let searchToken = SearchToken() - var filterString = "" - - init() { - let flowLayout = UICollectionViewFlowLayout() - super.init(node: ASCollectionNode(collectionViewLayout: flowLayout)) - adapter.setASDKCollectionNode(node) - adapter.dataSource = self - title = "Search" - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } -} - -extension SearchViewController: ListAdapterDataSource { - func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController { - if object is SearchToken { - let section = SearchSectionController() - section.delegate = self - return section - } - return LabelSectionController() - } - - func emptyView(for listAdapter: ListAdapter) -> UIView? { - // emptyView dosent work in this secenario, there is always one section (searchbar) present in collection - return nil - } - - func objects(for listAdapter: ListAdapter) -> [ListDiffable] { - guard filterString != "" else { return [searchToken] + words.map { $0 as ListDiffable } } - return [searchToken] + words.filter { $0.lowercased().contains(filterString.lowercased()) }.map { $0 as ListDiffable } - } -} - -extension SearchViewController: SearchSectionControllerDelegate { - func searchSectionController(_ sectionController: SearchSectionController, didChangeText text: String) { - filterString = text - adapter.performUpdates(animated: true, completion: nil) - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Podfile b/submodules/AsyncDisplayKit/examples_extra/Shop/Podfile deleted file mode 100644 index b12d45be71..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Podfile +++ /dev/null @@ -1,17 +0,0 @@ -# Uncomment the next line to define a global platform for your project -# platform :ios, '9.0' - -target 'Shop' do - # Comment the next line if you're not using Swift and don't want to use dynamic frameworks - # use_frameworks! - - # Pods for Shop - -pod 'Texture' - - target 'ShopTests' do - inherit! :search_paths - # Pods for testing - end - -end diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Screenshots/IMG_0008.jpg b/submodules/AsyncDisplayKit/examples_extra/Shop/Screenshots/IMG_0008.jpg deleted file mode 100644 index 8e0862586d..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Shop/Screenshots/IMG_0008.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Screenshots/IMG_0009.jpg b/submodules/AsyncDisplayKit/examples_extra/Shop/Screenshots/IMG_0009.jpg deleted file mode 100644 index 9e7906cc60..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Shop/Screenshots/IMG_0009.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Screenshots/IMG_0010.jpg b/submodules/AsyncDisplayKit/examples_extra/Shop/Screenshots/IMG_0010.jpg deleted file mode 100644 index 3d1209299f..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Shop/Screenshots/IMG_0010.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Screenshots/IMG_0011.jpg b/submodules/AsyncDisplayKit/examples_extra/Shop/Screenshots/IMG_0011.jpg deleted file mode 100644 index 717deae6b2..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Shop/Screenshots/IMG_0011.jpg and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index a8472b4e8a..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/AppDelegate.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/AppDelegate.swift deleted file mode 100644 index ebae7efc3a..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/AppDelegate.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// AppDelegate.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. - - UINavigationBar.appearance().tintColor = UIColor.white - UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white] - UINavigationBar.appearance().barTintColor = UIColor.primaryBarTintColor() - - self.window = UIWindow(frame: UIScreen.main.bounds) - self.window?.backgroundColor = UIColor.white - self.window?.rootViewController = UINavigationController(rootViewController: ShopViewController()) - self.window?.makeKeyAndVisible() - - return true - } - - func applicationWillResignActive(_ application: UIApplication) { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. - } - - func applicationDidEnterBackground(_ application: UIApplication) { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. - } - - func applicationWillEnterForeground(_ application: UIApplication) { - // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. - } - - func applicationDidBecomeActive(_ application: UIApplication) { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. - } - - func applicationWillTerminate(_ application: UIApplication) { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. - } - - -} - diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/AppIcon.appiconset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index b8236c6534..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Contents.json b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Contents.json deleted file mode 100644 index da4a164c91..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/Contents.json b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/Contents.json deleted file mode 100644 index da4a164c91..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/filled_star.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/filled_star.imageset/Contents.json deleted file mode 100644 index bf7a318771..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/filled_star.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "filled_star.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "filled_star-1.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "filled_star-2.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/filled_star.imageset/filled_star-1.png b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/filled_star.imageset/filled_star-1.png deleted file mode 100644 index 21884f8fe8..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/filled_star.imageset/filled_star-1.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/filled_star.imageset/filled_star-2.png b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/filled_star.imageset/filled_star-2.png deleted file mode 100644 index 21884f8fe8..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/filled_star.imageset/filled_star-2.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/filled_star.imageset/filled_star.png b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/filled_star.imageset/filled_star.png deleted file mode 100644 index 21884f8fe8..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/filled_star.imageset/filled_star.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/placeholder.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/placeholder.imageset/Contents.json deleted file mode 100644 index 70a59709db..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/placeholder.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "category_placeholder-2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "category_placeholder-1.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "category_placeholder.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/placeholder.imageset/category_placeholder-1.png b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/placeholder.imageset/category_placeholder-1.png deleted file mode 100644 index 8dec56ca18..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/placeholder.imageset/category_placeholder-1.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/placeholder.imageset/category_placeholder-2.png b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/placeholder.imageset/category_placeholder-2.png deleted file mode 100644 index 8dec56ca18..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/placeholder.imageset/category_placeholder-2.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/placeholder.imageset/category_placeholder.png b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/placeholder.imageset/category_placeholder.png deleted file mode 100644 index 8dec56ca18..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/placeholder.imageset/category_placeholder.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/unfilled_star.imageset/Contents.json b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/unfilled_star.imageset/Contents.json deleted file mode 100644 index 8a56ccde81..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/unfilled_star.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "unfilled_star.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "unfilled_star-1.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "unfilled_star-2.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/unfilled_star.imageset/unfilled_star-1.png b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/unfilled_star.imageset/unfilled_star-1.png deleted file mode 100644 index a8c225bf04..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/unfilled_star.imageset/unfilled_star-1.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/unfilled_star.imageset/unfilled_star-2.png b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/unfilled_star.imageset/unfilled_star-2.png deleted file mode 100644 index a8c225bf04..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/unfilled_star.imageset/unfilled_star-2.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/unfilled_star.imageset/unfilled_star.png b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/unfilled_star.imageset/unfilled_star.png deleted file mode 100644 index a8c225bf04..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Assets.xcassets/Shop/unfilled_star.imageset/unfilled_star.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Base.lproj/LaunchScreen.storyboard b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index fdf3f97d1b..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Extensions/UIColor.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Extensions/UIColor.swift deleted file mode 100644 index 4d6444f131..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Extensions/UIColor.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// UIColor.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import Foundation - -extension UIColor { - - class func primaryBackgroundColor() -> UIColor { - return UIColor.init(red: 237/255, green: 239/255, blue: 242/255, alpha: 1.0) - } - - class func primaryBarTintColor() -> UIColor { - return UIColor.init(red: 57/255, green: 59/255, blue: 63/255, alpha: 1.0) - } - - class func containerBackgroundColor() -> UIColor { - return UIColor.init(red: 255/255, green: 255/255, blue: 255/255, alpha: 1.0) - } - - class func containerBorderColor() -> UIColor { - return UIColor.init(red: 231/255, green: 232/255, blue: 235/255, alpha: 1.0) - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Info.plist b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Info.plist deleted file mode 100644 index ce18bd2acf..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UIStatusBarStyle - UIStatusBarStyleLightContent - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Models/Category.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Models/Category.swift deleted file mode 100644 index d5e4949230..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Models/Category.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// Category.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import Foundation - -struct Category { - - var id: String = UUID().uuidString - var imageURL: String - var numberOfProducts: Int = 0 - var title: String - var products: [Product] - - init(title: String, imageURL: String, products: [Product]) { - self.title = title - self.imageURL = imageURL - self.products = products - self.numberOfProducts = products.count - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Models/DummyGenerator.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Models/DummyGenerator.swift deleted file mode 100644 index d68e43751f..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Models/DummyGenerator.swift +++ /dev/null @@ -1,160 +0,0 @@ -// -// DummyGenerator.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import Foundation - -class DummyGenerator { - - static let sharedGenerator = DummyGenerator() - - // MARK: - Variables - - private let numberOfCategories = 15 - private let imageURLs = ["https://placebear.com/200/200", - "https://placebear.com/200/250", - "https://placebear.com/250/250", - "https://placebear.com/300/200", - "https://placebear.com/300/250", - "https://placebear.com/300/300", - "https://placebear.com/350/200", - "https://placebear.com/350/250", - "https://placebear.com/350/300"] - - // MARK: - Private initializer - - private init() { - - } - - // MARK: - Generate random categories - - func randomCategories() -> [Category] { - var categories: [Category] = [] - for _ in 0.. [Product] { - var products: [Product] = [] - for _ in 0.. String { - return compose(provider: { word }, count: count, middleSeparator: .Space) - } - - public static var sentence: String { - let numberOfWordsInSentence = Int.random(min: 8, max: 16) - let capitalizeFirstLetterDecorator: (String) -> String = { $0.stringWithCapitalizedFirstLetter } - return compose(provider: { word }, count: numberOfWordsInSentence, middleSeparator: .Space, endSeparator: .Dot, decorator: capitalizeFirstLetterDecorator) - } - - public static func sentences(count: Int) -> String { - return compose(provider: { sentence }, count: count, middleSeparator: .Space) - } - - public static var paragraph: String { - let numberOfSentencesInParagraph = Int.random(min: 4, max: 10) - return sentences(count: numberOfSentencesInParagraph) - } - - public static func paragraphs(count: Int) -> String { - return compose(provider: { paragraph }, count: count, middleSeparator: .NewLine) - } - - public static var title: String { - let numberOfWordsInTitle = Int.random(min: 1, max: 2) - let capitalizeStringDecorator: (String) -> String = { $0.capitalized } - return compose(provider: { word }, count: numberOfWordsInTitle, middleSeparator: .Space, decorator: capitalizeStringDecorator) - } - - private enum Separator: String { - case None = "" - case Space = " " - case Dot = "." - case NewLine = "\n" - } - - private static func compose(provider: () -> String, count: Int, middleSeparator: Separator, endSeparator: Separator = .None, decorator: ((String) -> String)? = nil) -> String { - var composedString = "" - - for index in 0.. Element { - let index = Int(arc4random_uniform(UInt32(self.count))) - return self[index] - } -} - -private extension Int { - static func random(min: Int = 0, max: Int) -> Int { - assert(min >= 0) - assert(min < max) - - return Int(arc4random_uniform(UInt32((max - min) + 1))) + min - } -} - -private extension Array { - var randomElement: Element { - return self[Int.random(max: count - 1)] - } -} - -private extension String { - var stringWithCapitalizedFirstLetter: String { - let firstLetterRange = startIndex.. ASLayoutSpec { - return ASInsetLayoutSpec(insets: UIEdgeInsets.zero, child: self.productNode) - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Product/ProductNode.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Product/ProductNode.swift deleted file mode 100644 index 8dda39d137..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Product/ProductNode.swift +++ /dev/null @@ -1,118 +0,0 @@ -// -// ProductNode.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -class ProductNode: ASDisplayNode { - - // MARK: - Variables - - private let imageNode: ASNetworkImageNode - private let titleNode: ASTextNode - private let priceNode: ASTextNode - private let starRatingNode: StarRatingNode - private let reviewsNode: ASTextNode - private let descriptionNode: ASTextNode - - private let product: Product - - // MARK: - Object life cycle - - init(product: Product) { - self.product = product - - imageNode = ASNetworkImageNode() - titleNode = ASTextNode() - starRatingNode = StarRatingNode(rating: product.starRating) - priceNode = ASTextNode() - reviewsNode = ASTextNode() - descriptionNode = ASTextNode() - - super.init() - self.setupNodes() - self.buildNodeHierarchy() - } - - // MARK: - Setup nodes - - private func setupNodes() { - self.setupImageNode() - self.setupTitleNode() - self.setupDescriptionNode() - self.setupPriceNode() - self.setupReviewsNode() - } - - private func setupImageNode() { - self.imageNode.url = URL(string: self.product.imageURL) - self.imageNode.style.preferredSize = CGSize(width: UIScreen.main.bounds.width, height: 300) - } - - private func setupTitleNode() { - self.titleNode.attributedText = NSAttributedString(string: self.product.title, attributes: self.titleTextAttributes()) - self.titleNode.maximumNumberOfLines = 1 - self.titleNode.truncationMode = .byTruncatingTail - } - - private var titleTextAttributes = { - return [NSForegroundColorAttributeName: UIColor.black, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 16)] - } - - private func setupDescriptionNode() { - self.descriptionNode.attributedText = NSAttributedString(string: self.product.descriptionText, attributes: self.descriptionTextAttributes()) - self.descriptionNode.maximumNumberOfLines = 0 - } - - private var descriptionTextAttributes = { - return [NSForegroundColorAttributeName: UIColor.darkGray, NSFontAttributeName: UIFont.systemFont(ofSize: 14)] - } - - private func setupPriceNode() { - self.priceNode.attributedText = NSAttributedString(string: self.product.currency + " \(self.product.price)", attributes: self.priceTextAttributes()) - } - - private var priceTextAttributes = { - return [NSForegroundColorAttributeName: UIColor.red, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 15)] - } - - private func setupReviewsNode() { - self.reviewsNode.attributedText = NSAttributedString(string: "\(self.product.numberOfReviews) reviews", attributes: self.reviewsTextAttributes()) - } - - private var reviewsTextAttributes = { - return [NSForegroundColorAttributeName: UIColor.lightGray, NSFontAttributeName: UIFont.systemFont(ofSize: 14)] - } - - // MARK: - Build node hierarchy - - private func buildNodeHierarchy() { - self.addSubnode(imageNode) - self.addSubnode(titleNode) - self.addSubnode(descriptionNode) - self.addSubnode(starRatingNode) - self.addSubnode(priceNode) - self.addSubnode(reviewsNode) - } - - // MARK: - Layout - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - let spacer = ASLayoutSpec() - spacer.style.flexGrow = 1 - self.titleNode.style.flexShrink = 1 - let titlePriceSpec = ASStackLayoutSpec(direction: .horizontal, spacing: 2.0, justifyContent: .start, alignItems: .center, children: [self.titleNode, spacer, self.priceNode]) - titlePriceSpec.style.alignSelf = .stretch - let starRatingReviewsSpec = ASStackLayoutSpec(direction: .horizontal, spacing: 25.0, justifyContent: .start, alignItems: .center, children: [self.starRatingNode, self.reviewsNode]) - let contentSpec = ASStackLayoutSpec(direction: .vertical, spacing: 8.0, justifyContent: .start, alignItems: .stretch, children: [titlePriceSpec, starRatingReviewsSpec, self.descriptionNode]) - contentSpec.style.flexShrink = 1 - let insetSpec = ASInsetLayoutSpec(insets: UIEdgeInsetsMake(12.0, 12.0, 12.0, 12.0), child: contentSpec) - let finalSpec = ASStackLayoutSpec(direction: .vertical, spacing: 5.0, justifyContent: .start, alignItems: .center, children: [self.imageNode, insetSpec]) - return finalSpec - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Product/ProductViewController.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Product/ProductViewController.swift deleted file mode 100644 index 9d36298e1d..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Product/ProductViewController.swift +++ /dev/null @@ -1,62 +0,0 @@ -// -// ProductViewController.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -class ProductViewController: ASViewController { - - // MARK: - Variables - - let product: Product - - private var tableNode: ASTableNode { - return node - } - - // MARK: - Object life cycle - - init(product: Product) { - self.product = product - super.init(node: ASTableNode()) - tableNode.delegate = self - tableNode.dataSource = self - tableNode.backgroundColor = UIColor.primaryBackgroundColor() - tableNode.view.separatorStyle = .none - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - View life cycle - - override func viewDidLoad() { - super.viewDidLoad() - self.setupTitle() - } - -} - -extension ProductViewController: ASTableDataSource, ASTableDelegate { - - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return 1 - } - - func tableView(_ tableView: ASTableView, nodeForRowAt indexPath: IndexPath) -> ASCellNode { - let node = ProductCellNode(product: self.product) - return node - } - -} - -extension ProductViewController { - func setupTitle() { - self.title = self.product.title - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Product/StarRatingNode.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Product/StarRatingNode.swift deleted file mode 100644 index 21c373c858..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Product/StarRatingNode.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// StarRatingNode.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -class StarRatingNode: ASDisplayNode { - - // MARK: - Variable - - private lazy var starSize: CGSize = { - return CGSize(width: 15, height: 15) - }() - - private let rating: Int - - private var starImageNodes: [ASDisplayNode] = [] - - // MARK: - Object life cycle - - init(rating: Int) { - self.rating = rating - super.init() - - self.setupStarNodes() - self.buildNodeHierarchy() - } - - // MARK: - Star nodes setup - - private func setupStarNodes() { - for i in 0..<5 { - let imageNode = ASImageNode() - imageNode.image = i <= self.rating ? UIImage(named: "filled_star") : UIImage(named: "unfilled_star") - imageNode.style.preferredSize = self.starSize - self.starImageNodes.append(imageNode) - } - } - - // MARK: - Build node hierarchy - - private func buildNodeHierarchy() { - for node in self.starImageNodes { - self.addSubnode(node) - } - } - - // MARK: - Layout - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - let layoutSpec = ASStackLayoutSpec(direction: .horizontal, spacing: 5, justifyContent: .start, alignItems: .stretch, children: self.starImageNodes) - return layoutSpec - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductCollectionNode.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductCollectionNode.swift deleted file mode 100644 index 5c95586fed..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductCollectionNode.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// ProductCollectionNode.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -class ProductCollectionNode: ASCellNode { - - // MARK: - Variables - - private let containerNode: ContainerNode - - // MARK: - Object life cycle - - init(product: Product) { - self.containerNode = ContainerNode(node: ProductContentNode(product: product)) - super.init() - self.selectionStyle = .none - self.addSubnode(self.containerNode) - } - - // MARK: - Layout - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - let insets = UIEdgeInsetsMake(2, 2, 2, 2) - return ASInsetLayoutSpec(insets: insets, child: self.containerNode) - } - -} - -class ProductContentNode: ASDisplayNode { - - // MARK: - Variables - - private let imageNode: ASNetworkImageNode - private let titleNode: ASTextNode - private let subtitleNode: ASTextNode - - // MARK: - Object life cycle - - init(product: Product) { - imageNode = ASNetworkImageNode() - imageNode.url = URL(string: product.imageURL) - - titleNode = ASTextNode() - let title = NSAttributedString(string: product.title, attributes: [NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 17)]) - titleNode.attributedText = title - - subtitleNode = ASTextNode() - let subtitle = NSAttributedString(string: product.currency + " \(product.price)", attributes: [NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 15)]) - subtitleNode.attributedText = subtitle - - super.init() - - self.imageNode.addSubnode(self.titleNode) - self.imageNode.addSubnode(self.subtitleNode) - self.addSubnode(self.imageNode) - } - - // MARK: - Layout - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - let textNodesStack = ASStackLayoutSpec(direction: .vertical, spacing: 5, justifyContent: .end, alignItems: .stretch, children: [self.titleNode, self.subtitleNode]) - let insetStack = ASInsetLayoutSpec(insets: UIEdgeInsetsMake(CGFloat.infinity, 10, 10, 10), child: textNodesStack) - return ASOverlayLayoutSpec(child: self.imageNode, overlay: insetStack) - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductTableNode.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductTableNode.swift deleted file mode 100644 index 816d405dcf..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductTableNode.swift +++ /dev/null @@ -1,123 +0,0 @@ -// -// ProductTableNode.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -class ProductTableNode: ASCellNode { - - // MARK: - Variables - - private lazy var imageSize: CGSize = { - return CGSize(width: 80, height: 80) - }() - - private let product: Product - - private let imageNode: ASNetworkImageNode - private let titleNode: ASTextNode - private let subtitleNode: ASTextNode - private let starRatingNode: StarRatingNode - private let priceNode: ASTextNode - private let separatorNode: ASDisplayNode - - // MARK: - Object life cycle - - init(product: Product) { - self.product = product - - imageNode = ASNetworkImageNode() - titleNode = ASTextNode() - subtitleNode = ASTextNode() - starRatingNode = StarRatingNode(rating: product.starRating) - priceNode = ASTextNode() - separatorNode = ASDisplayNode() - - super.init() - self.setupNodes() - self.buildNodeHierarchy() - } - - // MARK: - Setup nodes - - private func setupNodes() { - self.setupImageNode() - self.setupTitleNode() - self.setupSubtitleNode() - self.setupPriceNode() - self.setupSeparatorNode() - } - - private func setupImageNode() { - self.imageNode.url = URL(string: self.product.imageURL) - self.imageNode.style.preferredSize = self.imageSize - } - - private func setupTitleNode() { - self.titleNode.attributedText = NSAttributedString(string: self.product.title, attributes: self.titleTextAttributes()) - self.titleNode.maximumNumberOfLines = 1 - self.titleNode.truncationMode = .byTruncatingTail - } - - private var titleTextAttributes = { - return [NSForegroundColorAttributeName: UIColor.black, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 16)] - } - - private func setupSubtitleNode() { - self.subtitleNode.attributedText = NSAttributedString(string: self.product.descriptionText, attributes: self.subtitleTextAttributes()) - self.subtitleNode.maximumNumberOfLines = 2 - self.subtitleNode.truncationMode = .byTruncatingTail - } - - private var subtitleTextAttributes = { - return [NSForegroundColorAttributeName: UIColor.darkGray, NSFontAttributeName: UIFont.systemFont(ofSize: 14)] - } - - private func setupPriceNode() { - self.priceNode.attributedText = NSAttributedString(string: self.product.currency + " \(self.product.price)", attributes: self.priceTextAttributes()) - } - - private var priceTextAttributes = { - return [NSForegroundColorAttributeName: UIColor.red, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 15)] - } - - private func setupSeparatorNode() { - self.separatorNode.backgroundColor = UIColor.lightGray - } - - // MARK: - Build node hierarchy - - private func buildNodeHierarchy() { - self.addSubnode(imageNode) - self.addSubnode(titleNode) - self.addSubnode(subtitleNode) - self.addSubnode(starRatingNode) - self.addSubnode(priceNode) - self.addSubnode(separatorNode) - } - - // MARK: - Layout - - override func layout() { - super.layout() - let separatorHeight = 1 / UIScreen.main.scale - self.separatorNode.frame = CGRect(x: 0.0, y: 0.0, width: self.calculatedSize.width, height: separatorHeight) - } - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - let spacer = ASLayoutSpec() - spacer.style.flexGrow = 1 - self.titleNode.style.flexShrink = 1 - let titlePriceSpec = ASStackLayoutSpec(direction: .horizontal, spacing: 2.0, justifyContent: .start, alignItems: .center, children: [self.titleNode, spacer, self.priceNode]) - titlePriceSpec.style.alignSelf = .stretch - let contentSpec = ASStackLayoutSpec(direction: .vertical, spacing: 4.0, justifyContent: .start, alignItems: .stretch, children: [titlePriceSpec, self.subtitleNode, self.starRatingNode]) - contentSpec.style.flexShrink = 1 - let finalSpec = ASStackLayoutSpec(direction: .horizontal, spacing: 10.0, justifyContent: .start, alignItems: .start, children: [self.imageNode, contentSpec]) - return ASInsetLayoutSpec(insets: UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0), child: finalSpec) - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductsCollectionViewController.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductsCollectionViewController.swift deleted file mode 100644 index caa5278f07..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductsCollectionViewController.swift +++ /dev/null @@ -1,69 +0,0 @@ -// -// ProductsCollectionViewController.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -class ProductsCollectionViewController: ASViewController { - - // MARK: - Variables - - var products: [Product] - - private var collectionNode: ASCollectionNode { - return node - } - - // MARK: - Object life cycle - - init(products: [Product]) { - self.products = products - super.init(node: ASCollectionNode(collectionViewLayout: ProductsLayout())) - collectionNode.delegate = self - collectionNode.dataSource = self - collectionNode.backgroundColor = UIColor.primaryBackgroundColor() - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - View life cycle - - override func viewDidLoad() { - super.viewDidLoad() - self.setupTitle() - } - -} - -extension ProductsCollectionViewController: ASCollectionDataSource, ASCollectionDelegate { - - func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return self.products.count - } - - func collectionView(_ collectionView: ASCollectionView, nodeForItemAt indexPath: IndexPath) -> ASCellNode { - let product = self.products[indexPath.row] - return ProductCollectionNode(product: product) - } - - func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - let product = self.products[indexPath.row] - let viewController = ProductViewController(product: product) - self.navigationController?.pushViewController(viewController, animated: true) - } - -} - -extension ProductsCollectionViewController { - - func setupTitle() { - self.title = "Bears" - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductsLayout.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductsLayout.swift deleted file mode 100644 index 67f4a77837..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductsLayout.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// ProductsLayout.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -class ProductsLayout: UICollectionViewFlowLayout { - - // MARK: - Variables - - let itemHeight: CGFloat = 220 - let numberOfColumns: CGFloat = 2 - - // MARK: - Object life cycle - - override init() { - super.init() - self.setupLayout() - } - - required init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - self.setupLayout() - } - - // MARK: - Layout - - private func setupLayout() { - self.minimumInteritemSpacing = 0 - self.minimumLineSpacing = 0 - self.scrollDirection = .vertical - } - - func itemWidth() -> CGFloat { - return (collectionView!.frame.width / numberOfColumns) - } - - override var itemSize: CGSize { - set { - self.itemSize = CGSize(width: itemWidth(), height: itemHeight) - } - get { - return CGSize(width: itemWidth(), height: itemHeight) - } - } - - override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint) -> CGPoint { - return self.collectionView!.contentOffset - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductsTableViewController.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductsTableViewController.swift deleted file mode 100644 index bfb851a3f6..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Products/ProductsTableViewController.swift +++ /dev/null @@ -1,78 +0,0 @@ -// -// ProductsTableViewController.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -class ProductsTableViewController: ASViewController { - - // MARK: - Variables - - var products: [Product] - - private var tableNode: ASTableNode { - return node - } - - // MARK: - Object life cycle - - init(products: [Product]) { - self.products = products - super.init(node: ASTableNode()) - tableNode.delegate = self - tableNode.dataSource = self - tableNode.backgroundColor = UIColor.white - tableNode.view.separatorStyle = .none - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - View life cycle - - override func viewDidLoad() { - super.viewDidLoad() - self.setupTitle() - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - if let indexPath = self.tableNode.indexPathForSelectedRow { - self.tableNode.view.deselectRow(at: indexPath, animated: true) - } - } - -} - -extension ProductsTableViewController: ASTableDataSource, ASTableDelegate { - - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return self.products.count - } - - func tableView(_ tableView: ASTableView, nodeForRowAt indexPath: IndexPath) -> ASCellNode { - let product = self.products[indexPath.row] - let node = ProductTableNode(product: product) - return node - } - - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let product = self.products[indexPath.row] - let viewController = ProductViewController(product: product) - self.navigationController?.pushViewController(viewController, animated: true) - } - -} - -extension ProductsTableViewController { - - func setupTitle() { - self.title = "Bears" - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Shop/ShopCellNode.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Shop/ShopCellNode.swift deleted file mode 100644 index 5e71328296..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Shop/ShopCellNode.swift +++ /dev/null @@ -1,105 +0,0 @@ -// -// ShopCellNode.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -class ShopCellNode: ASCellNode { - - // MARK: - Variables - - private let containerNode: ContainerNode - private let categoryNode: CategoryNode - - // MARK: - Object life cycle - - init(category: Category) { - categoryNode = CategoryNode(category: category) - containerNode = ContainerNode(node: categoryNode) - super.init() - self.selectionStyle = .none - self.addSubnode(self.containerNode) - } - - // MARK: - Layout - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - return ASInsetLayoutSpec(insets: UIEdgeInsetsMake(5, 10, 5, 10), child: self.containerNode) - } - -} - -class ContainerNode: ASDisplayNode { - - // MARK: - Variables - - private let contentNode: ASDisplayNode - - // MARK: - Object life cycle - - init(node: ASDisplayNode) { - contentNode = node - super.init() - self.backgroundColor = UIColor.containerBackgroundColor() - self.addSubnode(self.contentNode) - } - - // MARK: - Node life cycle - - override func didLoad() { - super.didLoad() - self.layer.cornerRadius = 5.0 - self.layer.borderColor = UIColor.containerBorderColor().cgColor - self.layer.borderWidth = 1.0 - } - - // MARK: - Layout - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - return ASInsetLayoutSpec(insets: UIEdgeInsetsMake(8, 8, 8, 8), child: self.contentNode) - } - -} - -class CategoryNode: ASDisplayNode { - - // MARK: - Variables - - private let imageNode: ASNetworkImageNode - private let titleNode: ASTextNode - private let subtitleNode: ASTextNode - - // MARK: - Object life cycle - - init(category: Category) { - imageNode = ASNetworkImageNode() - imageNode.url = URL(string: category.imageURL) - - titleNode = ASTextNode() - let title = NSAttributedString(string: category.title, attributes: [NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 17)]) - titleNode.attributedText = title - - subtitleNode = ASTextNode() - let subtitle = NSAttributedString(string: "\(category.numberOfProducts) products", attributes: [NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 15)]) - subtitleNode.attributedText = subtitle - - super.init() - - self.imageNode.addSubnode(self.titleNode) - self.imageNode.addSubnode(self.subtitleNode) - self.addSubnode(self.imageNode) - } - - // MARK: - Layout - - override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec { - let textNodesStack = ASStackLayoutSpec(direction: .vertical, spacing: 5, justifyContent: .end, alignItems: .stretch, children: [self.titleNode, self.subtitleNode]) - let insetStack = ASInsetLayoutSpec(insets: UIEdgeInsetsMake(CGFloat.infinity, 10, 10, 10), child: textNodesStack) - return ASOverlayLayoutSpec(child: self.imageNode, overlay: insetStack) - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Shop/ShopViewController.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Shop/ShopViewController.swift deleted file mode 100644 index 8feefa3f25..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Scenes/Shop/ShopViewController.swift +++ /dev/null @@ -1,91 +0,0 @@ -// -// ShopViewController.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import UIKit - -class ShopViewController: ASViewController { - - // MARK: - Variables - - lazy var categories: [Category] = { - return DummyGenerator.sharedGenerator.randomCategories() - }() - - private var tableNode: ASTableNode { - return node - } - - // MARK: - Object life cycle - - init() { - super.init(node: ASTableNode()) - tableNode.delegate = self - tableNode.dataSource = self - tableNode.backgroundColor = UIColor.primaryBackgroundColor() - tableNode.view.separatorStyle = .none - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - View life cycle - - override func viewDidLoad() { - super.viewDidLoad() - self.setupTitle() - } - -} - -extension ShopViewController: ASTableDataSource, ASTableDelegate { - - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return self.categories.count - } - - func tableView(_ tableView: ASTableView, nodeForRowAt indexPath: IndexPath) -> ASCellNode { - let category = self.categories[indexPath.row] - let node = ShopCellNode(category: category) - return node - } - - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let products = self.categories[indexPath.row].products - let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) - let tableViewAction = UIAlertAction(title: "ASTableNode", style: .default, handler: { (action) in - let viewController = ProductsTableViewController(products: products) - self.navigationController?.pushViewController(viewController, animated: true) - }) - let collectionViewAction = UIAlertAction(title: "ASCollectionNode", style: .default, handler: { (action) in - let viewController = ProductsCollectionViewController(products: products) - self.navigationController?.pushViewController(viewController, animated: true) - }) - let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) - alertController.addAction(tableViewAction) - alertController.addAction(collectionViewAction) - alertController.addAction(cancelAction) - DispatchQueue.main.async { - self.present(alertController, animated: true, completion: nil) - } - } - - func tableView(_ tableView: ASTableView, constrainedSizeForRowAt indexPath: IndexPath) -> ASSizeRange { - let width = UIScreen.main.bounds.width - return ASSizeRangeMake(CGSize(width: width, height: 175)) - } - -} - -extension ShopViewController { - - func setupTitle() { - self.title = "Bear Shop" - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Shop-Bridging-Header.h b/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Shop-Bridging-Header.h deleted file mode 100644 index 943168eead..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/Shop/Shop-Bridging-Header.h +++ /dev/null @@ -1,9 +0,0 @@ -// -// Shop-Bridging-Header.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/ShopTests/Info.plist b/submodules/AsyncDisplayKit/examples_extra/Shop/ShopTests/Info.plist deleted file mode 100644 index 6c6c23c43a..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/ShopTests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/submodules/AsyncDisplayKit/examples_extra/Shop/ShopTests/ShopTests.swift b/submodules/AsyncDisplayKit/examples_extra/Shop/ShopTests/ShopTests.swift deleted file mode 100644 index b42098bc4c..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/Shop/ShopTests/ShopTests.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// ShopTests.swift -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -import XCTest -@testable import Shop - -class ShopTests: XCTestCase { - - override func setUp() { - super.setUp() - // Put setup code here. This method is called before the invocation of each test method in the class. - } - - override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. - super.tearDown() - } - - func testExample() { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - func testPerformanceExample() { - // This is an example of a performance test case. - self.measure { - // Put the code you want to measure the time of here. - } - } - -} diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Podfile b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AppDelegate.h deleted file mode 100644 index c30a27f4dc..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#define UseAutomaticLayout 1 - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AppDelegate.m deleted file mode 100644 index 662357cb71..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AppDelegate.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "AsyncTableViewController.h" -#import "AsyncViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - - UITabBarController *tabBarController = [[UITabBarController alloc] initWithNibName:nil bundle:nil]; - self.window.rootViewController = tabBarController; - - [tabBarController setViewControllers:@[[[AsyncTableViewController alloc] init], [[AsyncViewController alloc] init]]]; - - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AsyncTableViewController.h b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AsyncTableViewController.h deleted file mode 100644 index 2b8fe4ed9f..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AsyncTableViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// AsyncTableViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AsyncTableViewController : UIViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AsyncTableViewController.m b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AsyncTableViewController.m deleted file mode 100644 index 2cacef05ea..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AsyncTableViewController.m +++ /dev/null @@ -1,80 +0,0 @@ -// -// AsyncTableViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -#import "AsyncTableViewController.h" -#import "RandomCoreGraphicsNode.h" - -@interface AsyncTableViewController () -{ - ASTableView *_tableView; -} - -@end - -@implementation AsyncTableViewController - -#pragma mark - UIViewController. - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - self.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFeatured tag:0]; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRedo - target:self - action:@selector(reloadEverything)]; - - return self; -} - -- (void)reloadEverything -{ - [_tableView reloadData]; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - _tableView = [[ASTableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; - _tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - _tableView.asyncDataSource = self; - _tableView.asyncDelegate = self; - - ASRangeTuningParameters tuningParameters; - tuningParameters.leadingBufferScreenfuls = 0.5; - tuningParameters.trailingBufferScreenfuls = 1.0; - [_tableView setTuningParameters:tuningParameters forRangeType:ASLayoutRangeTypePreload]; - [_tableView setTuningParameters:tuningParameters forRangeType:ASLayoutRangeTypeDisplay]; - - [self.view addSubview:_tableView]; -} - -#pragma mark - ASTableView. - -- (ASCellNodeBlock)tableView:(ASTableView *)tableView nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return ^{ - RandomCoreGraphicsNode *elementNode = [[RandomCoreGraphicsNode alloc] init]; - elementNode.style.preferredSize = CGSizeMake(320, 100); - return elementNode; - }; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return 100; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AsyncViewController.h b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AsyncViewController.h deleted file mode 100644 index 2c20ade6e9..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AsyncViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// AsyncViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AsyncViewController : ASViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AsyncViewController.m b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AsyncViewController.m deleted file mode 100644 index de9b71cc89..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/AsyncViewController.m +++ /dev/null @@ -1,38 +0,0 @@ -// -// AsyncViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AsyncViewController.h" -#import "RandomCoreGraphicsNode.h" - -@implementation AsyncViewController - -- (instancetype)init -{ - if (!(self = [super initWithNode:[[RandomCoreGraphicsNode alloc] init]])) { - return nil; - } - - self.neverShowPlaceholders = YES; - self.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:0]; - return self; -} - -- (void)viewWillAppear:(BOOL)animated -{ - // FIXME: This is only being called on the first time the UITabBarController shows us. - [super viewWillAppear:animated]; -} - -- (void)viewDidDisappear:(BOOL)animated -{ - [self.node recursivelyClearContents]; - [super viewDidDisappear:animated]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/Info.plist b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/Info.plist deleted file mode 100644 index 35d842827b..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/RandomCoreGraphicsNode.h b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/RandomCoreGraphicsNode.h deleted file mode 100644 index cdd60a3465..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/RandomCoreGraphicsNode.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// RandomCoreGraphicsNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface RandomCoreGraphicsNode : ASCellNode -{ - ASTextNode *_textNode; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/RandomCoreGraphicsNode.m b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/RandomCoreGraphicsNode.m deleted file mode 100644 index d80c51caf2..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/RandomCoreGraphicsNode.m +++ /dev/null @@ -1,96 +0,0 @@ -// -// RandomCoreGraphicsNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "RandomCoreGraphicsNode.h" -#import - -@implementation RandomCoreGraphicsNode - -+ (UIColor *)randomColor -{ - CGFloat hue = ( arc4random() % 256 / 256.0 ); // 0.0 to 1.0 - CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from white - CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from black - return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1]; -} - -+ (void)drawRect:(CGRect)bounds withParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing -{ - CGFloat locations[3]; - NSMutableArray *colors = [NSMutableArray arrayWithCapacity:3]; - [colors addObject:(id)[[RandomCoreGraphicsNode randomColor] CGColor]]; - locations[0] = 0.0; - [colors addObject:(id)[[RandomCoreGraphicsNode randomColor] CGColor]]; - locations[1] = 1.0; - [colors addObject:(id)[[RandomCoreGraphicsNode randomColor] CGColor]]; - locations[2] = ( arc4random() % 256 / 256.0 ); - - - CGContextRef ctx = UIGraphicsGetCurrentContext(); - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)colors, locations); - - CGGradientDrawingOptions drawingOptions; - CGContextDrawLinearGradient(ctx, gradient, CGPointZero, CGPointMake(bounds.size.width, bounds.size.height), drawingOptions); - - CGColorSpaceRelease(colorSpace); -} - -- (NSObject *)drawParametersForAsyncLayer:(_ASDisplayLayer *)layer -{ - return [self description]; -} - -- (NSDictionary *)textStyle -{ - UIFont *font = [UIFont fontWithName:@"HelveticaNeue" size:36.0f]; - - NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; - style.paragraphSpacing = 0.5 * font.lineHeight; - style.hyphenationFactor = 1.0; - - return @{ NSFontAttributeName: font, - NSParagraphStyleAttributeName: style }; -} - -- (instancetype)init -{ - if (!(self = [super init])) { - return nil; - } - - _textNode = [[ASTextNode alloc] init]; - _textNode.placeholderEnabled = NO; - _textNode.attributedText = [[NSAttributedString alloc] initWithString:@"Hello, ASDK!" - attributes:[self textStyle]]; - [self addSubnode:_textNode]; - - return self; -} - -- (CGSize)calculateSizeThatFits:(CGSize)constrainedSize -{ - [_textNode layoutThatFits:ASSizeRangeMake(CGSizeZero, constrainedSize)]; - return CGSizeMake(constrainedSize.width, 100); -} - -- (void)layout -{ - [super layout]; - - CGSize boundsSize = self.bounds.size; - CGSize textSize = _textNode.calculatedSize; - CGRect textRect = CGRectMake(roundf((boundsSize.width - textSize.width) / 2.0), - roundf((boundsSize.height - textSize.height) / 2.0), - textSize.width, - textSize.height); - _textNode.frame = textRect; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/main.m b/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousConcurrency/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Podfile b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/AppDelegate.h deleted file mode 100644 index c30a27f4dc..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#define UseAutomaticLayout 1 - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/AppDelegate.m deleted file mode 100644 index f8437855b0..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/AppDelegate.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]]; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/BlurbNode.h b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/BlurbNode.h deleted file mode 100644 index 5451fb39f0..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/BlurbNode.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// BlurbNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -/** - * Simple node that displays a placekitten.com attribution. - */ -@interface BlurbNode : ASCellNode - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/BlurbNode.m b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/BlurbNode.m deleted file mode 100644 index 6014711d33..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/BlurbNode.m +++ /dev/null @@ -1,120 +0,0 @@ -// -// BlurbNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "BlurbNode.h" -#import "AppDelegate.h" - -#import -#import - -#import -#import - -static CGFloat kTextPadding = 10.0f; -static NSString *kLinkAttributeName = @"PlaceKittenNodeLinkAttributeName"; - -@interface BlurbNode () -{ - ASTextNode *_textNode; -} - -@end - - -@implementation BlurbNode - -#pragma mark - -#pragma mark ASCellNode. - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - // create a text node - _textNode = [[ASTextNode alloc] init]; - - // configure the node to support tappable links - _textNode.delegate = self; - _textNode.userInteractionEnabled = YES; - _textNode.linkAttributeNames = @[ kLinkAttributeName ]; - - // generate an attributed string using the custom link attribute specified above - NSString *blurb = @"kittens courtesy placekitten.com \U0001F638"; - NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:blurb]; - [string addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue-Light" size:16.0f] range:NSMakeRange(0, blurb.length)]; - [string addAttributes:@{ - kLinkAttributeName: [NSURL URLWithString:@"http://placekitten.com/"], - NSForegroundColorAttributeName: [UIColor grayColor], - NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle | NSUnderlinePatternDot), - } - range:[blurb rangeOfString:@"placekitten.com"]]; - _textNode.attributedText = string; - - // add it as a subnode, and we're done - [self addSubnode:_textNode]; - - return self; -} - -- (void)didLoad -{ - // enable highlighting now that self.layer has loaded -- see ASHighlightOverlayLayer.h - self.layer.as_allowsHighlightDrawing = YES; - - [super didLoad]; -} - -#if UseAutomaticLayout -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASCenterLayoutSpec *centerSpec = [[ASCenterLayoutSpec alloc] init]; - centerSpec.centeringOptions = ASCenterLayoutSpecCenteringX; - centerSpec.sizingOptions = ASCenterLayoutSpecSizingOptionMinimumY; - centerSpec.child = _textNode; - - UIEdgeInsets padding =UIEdgeInsetsMake(kTextPadding, kTextPadding, kTextPadding, kTextPadding); - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:padding child:centerSpec]; -} -#else -- (CGSize)calculateSizeThatFits:(CGSize)constrainedSize -{ - // called on a background thread. custom nodes must call -measure: on their subnodes in -calculateSizeThatFits: - CGSize measuredSize = [_textNode measure:CGSizeMake(constrainedSize.width - 2 * kTextPadding, - constrainedSize.height - 2 * kTextPadding)]; - return CGSizeMake(constrainedSize.width, measuredSize.height + 2 * kTextPadding); -} - -- (void)layout -{ - // called on the main thread. we'll use the stashed size from above, instead of blocking on text sizing - CGSize textNodeSize = _textNode.calculatedSize; - _textNode.frame = CGRectMake(roundf((self.calculatedSize.width - textNodeSize.width) / 2.0f), - kTextPadding, - textNodeSize.width, - textNodeSize.height); -} -#endif - -#pragma mark - -#pragma mark ASTextNodeDelegate methods. - -- (BOOL)textNode:(ASTextNode *)richTextNode shouldHighlightLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point -{ - // opt into link highlighting -- tap and hold the link to try it! must enable highlighting on a layer, see -didLoad - return YES; -} - -- (void)textNode:(ASTextNode *)richTextNode tappedLinkAttribute:(NSString *)attribute value:(NSURL *)URL atPoint:(CGPoint)point textRange:(NSRange)textRange -{ - // the node tapped a link, open it - [[UIApplication sharedApplication] openURL:URL]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/Info.plist b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/Info.plist deleted file mode 100644 index 35d842827b..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/KittenNode.h b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/KittenNode.h deleted file mode 100644 index 5b0b04203e..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/KittenNode.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// KittenNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -/** - * Social media-style node that displays a kitten picture and a random length - * of lorem ipsum text. Uses a placekitten.com kitten of the specified size. - */ -@interface KittenNode : ASCellNode - -- (instancetype)initWithKittenOfSize:(CGSize)size; - -- (void)toggleImageEnlargement; - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/KittenNode.mm b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/KittenNode.mm deleted file mode 100644 index 5fcebf393e..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/KittenNode.mm +++ /dev/null @@ -1,197 +0,0 @@ -// -// KittenNode.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "KittenNode.h" -#import "AppDelegate.h" - -#import - -#import -#import - -static const CGFloat kImageSize = 80.0f; -static const CGFloat kOuterPadding = 16.0f; -static const CGFloat kInnerPadding = 10.0f; - - -@interface KittenNode () -{ - CGSize _kittenSize; - - ASNetworkImageNode *_imageNode; - ASTextNode *_textNode; - ASDisplayNode *_divider; - BOOL _isImageEnlarged; - BOOL _swappedTextAndImage; -} - -@end - - -@implementation KittenNode - -// lorem ipsum text courtesy https://kittyipsum.com/ <3 -+ (NSArray *)placeholders -{ - static NSArray *placeholders = nil; - - static dispatch_once_t once; - dispatch_once(&once, ^{ - placeholders = @[ - @"Kitty ipsum dolor sit amet, purr sleep on your face lay down in your way biting, sniff tincidunt a etiam fluffy fur judging you stuck in a tree kittens.", - @"Lick tincidunt a biting eat the grass, egestas enim ut lick leap puking climb the curtains lick.", - @"Lick quis nunc toss the mousie vel, tortor pellentesque sunbathe orci turpis non tail flick suscipit sleep in the sink.", - @"Orci turpis litter box et stuck in a tree, egestas ac tempus et aliquam elit.", - @"Hairball iaculis dolor dolor neque, nibh adipiscing vehicula egestas dolor aliquam.", - @"Sunbathe fluffy fur tortor faucibus pharetra jump, enim jump on the table I don't like that food catnip toss the mousie scratched.", - @"Quis nunc nam sleep in the sink quis nunc purr faucibus, chase the red dot consectetur bat sagittis.", - @"Lick tail flick jump on the table stretching purr amet, rhoncus scratched jump on the table run.", - @"Suspendisse aliquam vulputate feed me sleep on your keyboard, rip the couch faucibus sleep on your keyboard tristique give me fish dolor.", - @"Rip the couch hiss attack your ankles biting pellentesque puking, enim suspendisse enim mauris a.", - @"Sollicitudin iaculis vestibulum toss the mousie biting attack your ankles, puking nunc jump adipiscing in viverra.", - @"Nam zzz amet neque, bat tincidunt a iaculis sniff hiss bibendum leap nibh.", - @"Chase the red dot enim puking chuf, tristique et egestas sniff sollicitudin pharetra enim ut mauris a.", - @"Sagittis scratched et lick, hairball leap attack adipiscing catnip tail flick iaculis lick.", - @"Neque neque sleep in the sink neque sleep on your face, climb the curtains chuf tail flick sniff tortor non.", - @"Ac etiam kittens claw toss the mousie jump, pellentesque rhoncus litter box give me fish adipiscing mauris a.", - @"Pharetra egestas sunbathe faucibus ac fluffy fur, hiss feed me give me fish accumsan.", - @"Tortor leap tristique accumsan rutrum sleep in the sink, amet sollicitudin adipiscing dolor chase the red dot.", - @"Knock over the lamp pharetra vehicula sleep on your face rhoncus, jump elit cras nec quis quis nunc nam.", - @"Sollicitudin feed me et ac in viverra catnip, nunc eat I don't like that food iaculis give me fish.", - ]; - }); - - return placeholders; -} - -- (instancetype)initWithKittenOfSize:(CGSize)size -{ - if (!(self = [super init])) - return nil; - - _kittenSize = size; - - // kitten image, with a solid background colour serving as placeholder - _imageNode = [[ASNetworkImageNode alloc] init]; - _imageNode.backgroundColor = ASDisplayNodeDefaultPlaceholderColor(); - _imageNode.URL = [NSURL URLWithString:[NSString stringWithFormat:@"https://placekitten.com/%zd/%zd", - (NSInteger)roundl(_kittenSize.width), - (NSInteger)roundl(_kittenSize.height)]]; -// _imageNode.contentMode = UIViewContentModeCenter; - [_imageNode addTarget:self action:@selector(toggleNodesSwap) forControlEvents:ASControlNodeEventTouchUpInside]; - [self addSubnode:_imageNode]; - - // lorem ipsum text, plus some nice styling - _textNode = [[ASTextNode alloc] init]; - _textNode.attributedText = [[NSAttributedString alloc] initWithString:[self kittyIpsum] - attributes:[self textStyle]]; - [self addSubnode:_textNode]; - - // hairline cell separator - _divider = [[ASDisplayNode alloc] init]; - _divider.backgroundColor = [UIColor lightGrayColor]; - [self addSubnode:_divider]; - - return self; -} - -- (NSString *)kittyIpsum -{ - NSArray *placeholders = [KittenNode placeholders]; - u_int32_t ipsumCount = (u_int32_t)[placeholders count]; - u_int32_t location = arc4random_uniform(ipsumCount); - u_int32_t length = arc4random_uniform(ipsumCount - location); - - NSMutableString *string = [placeholders[location] mutableCopy]; - for (u_int32_t i = location + 1; i < location + length; i++) { - [string appendString:(i % 2 == 0) ? @"\n" : @" "]; - [string appendString:placeholders[i]]; - } - - return string; -} - -- (NSDictionary *)textStyle -{ - UIFont *font = [UIFont fontWithName:@"HelveticaNeue" size:12.0f]; - - NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; - style.paragraphSpacing = 0.5 * font.lineHeight; - style.hyphenationFactor = 1.0; - - return @{ NSFontAttributeName: font, - NSParagraphStyleAttributeName: style }; -} - -#if UseAutomaticLayout -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - CGSize imageSize = _isImageEnlarged ? CGSizeMake(2.0 * kImageSize, 2.0 * kImageSize) - : CGSizeMake(kImageSize, kImageSize); - _imageNode.size = ASRelativeSizeRangeMakeWithExactCGSize(imageSize); - _textNode.flexShrink = 1.0; - - ASStackLayoutSpec *stackSpec = [[ASStackLayoutSpec alloc] init]; - stackSpec.direction = ASStackLayoutDirectionHorizontal; - stackSpec.spacing = kInnerPadding; - [stackSpec setChildren:!_swappedTextAndImage ? @[_imageNode, _textNode] : @[_textNode, _imageNode]]; - - ASInsetLayoutSpec *insetSpec = [[ASInsetLayoutSpec alloc] init]; - insetSpec.insets = UIEdgeInsetsMake(kOuterPadding, kOuterPadding, kOuterPadding, kOuterPadding); - insetSpec.child = stackSpec; - - return insetSpec; -} - -// With box model, you don't need to override this method, unless you want to add custom logic. -- (void)layout -{ - [super layout]; - - // Manually layout the divider. - CGFloat pixelHeight = 1.0f / [[UIScreen mainScreen] scale]; - _divider.frame = CGRectMake(0.0f, 0.0f, self.calculatedSize.width, pixelHeight); -} -#else -- (CGSize)calculateSizeThatFits:(CGSize)constrainedSize -{ - CGSize imageSize = CGSizeMake(kImageSize, kImageSize); - CGSize textSize = [_textNode measure:CGSizeMake(constrainedSize.width - kImageSize - 2 * kOuterPadding - kInnerPadding, - constrainedSize.height)]; - - // ensure there's room for the text - CGFloat requiredHeight = MAX(textSize.height, imageSize.height); - return CGSizeMake(constrainedSize.width, requiredHeight + 2 * kOuterPadding); -} - -- (void)layout -{ - CGFloat pixelHeight = 1.0f / [[UIScreen mainScreen] scale]; - _divider.frame = CGRectMake(0.0f, 0.0f, self.calculatedSize.width, pixelHeight); - - _imageNode.frame = CGRectMake(kOuterPadding, kOuterPadding, kImageSize, kImageSize); - - CGSize textSize = _textNode.calculatedSize; - _textNode.frame = CGRectMake(kOuterPadding + kImageSize + kInnerPadding, kOuterPadding, textSize.width, textSize.height); -} -#endif - -- (void)toggleImageEnlargement -{ - _isImageEnlarged = !_isImageEnlarged; - [self setNeedsLayout]; -} - -- (void)toggleNodesSwap -{ - _swappedTextAndImage = !_swappedTextAndImage; - [self setNeedsLayout]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/ViewController.h deleted file mode 100644 index c8a0626291..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : UIViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/ViewController.m deleted file mode 100644 index 1757807a1d..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/ViewController.m +++ /dev/null @@ -1,209 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" - -#import -#import - -#import "BlurbNode.h" -#import "KittenNode.h" - - -static const NSInteger kLitterSize = 20; // intial number of kitten cells in ASTableView -static const NSInteger kLitterBatchSize = 10; // number of kitten cells to add to ASTableView -static const NSInteger kMaxLitterSize = 100; // max number of kitten cells allowed in ASTableView - -@interface ViewController () -{ - ASTableView *_tableView; - - // array of boxed CGSizes corresponding to placekitten.com kittens - NSMutableArray *_kittenDataSource; - - BOOL _dataSourceLocked; - NSIndexPath *_blurbNodeIndexPath; -} - -@property (nonatomic, strong) NSMutableArray *kittenDataSource; -@property (atomic, assign) BOOL dataSourceLocked; - -@end - - -@implementation ViewController - -#pragma mark - -#pragma mark UIViewController. - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - _tableView = [[ASTableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; - _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; // KittenNode has its own separator - _tableView.asyncDataSource = self; - _tableView.asyncDelegate = self; - - // populate our "data source" with some random kittens - _kittenDataSource = [self createLitterWithSize:kLitterSize]; - - _blurbNodeIndexPath = [NSIndexPath indexPathForItem:0 inSection:0]; - - self.title = @"Kittens"; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit - target:self - action:@selector(toggleEditingMode)]; - - return self; -} - -- (NSMutableArray *)createLitterWithSize:(NSInteger)litterSize -{ - NSMutableArray *kittens = [NSMutableArray arrayWithCapacity:litterSize]; - for (NSInteger i = 0; i < litterSize; i++) { - - // placekitten.com will return the same kitten picture if the same pixel height & width are requested, - // so generate kittens with different width & height values. - u_int32_t deltaX = arc4random_uniform(10) - 5; - u_int32_t deltaY = arc4random_uniform(10) - 5; - CGSize size = CGSizeMake(350 + 2 * deltaX, 350 + 4 * deltaY); - - [kittens addObject:[NSValue valueWithCGSize:size]]; - } - return kittens; -} - -- (void)setKittenDataSource:(NSMutableArray *)kittenDataSource { - ASDisplayNodeAssert(!self.dataSourceLocked, @"Could not update data source when it is locked !"); - - _kittenDataSource = kittenDataSource; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [self.view addSubview:_tableView]; - - [_tableView reloadDataImmediately]; -} - -- (void)viewWillLayoutSubviews -{ - _tableView.frame = self.view.bounds; -} - -- (void)toggleEditingMode -{ - [_tableView setEditing:!_tableView.editing animated:YES]; -} - - -#pragma mark - -#pragma mark ASTableView. - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [_tableView deselectRowAtIndexPath:indexPath animated:YES]; - [_tableView beginUpdates]; - // Assume only kitten nodes are selectable (see -tableView:shouldHighlightRowAtIndexPath:). - KittenNode *node = (KittenNode *)[_tableView nodeForRowAtIndexPath:indexPath]; - [node toggleImageEnlargement]; - [_tableView endUpdates]; -} - -- (ASCellNode *)tableView:(ASTableView *)tableView nodeForRowAtIndexPath:(NSIndexPath *)indexPath -{ - // special-case the first row - if ([_blurbNodeIndexPath compare:indexPath] == NSOrderedSame) { - BlurbNode *node = [[BlurbNode alloc] init]; - return node; - } - - NSValue *size = _kittenDataSource[indexPath.row - 1]; - KittenNode *node = [[KittenNode alloc] initWithKittenOfSize:size.CGSizeValue]; - return node; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - // blurb node + kLitterSize kitties - return 1 + _kittenDataSource.count; -} - -- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath -{ - // Enable selection for kitten nodes - return [_blurbNodeIndexPath compare:indexPath] != NSOrderedSame; -} - -- (void)tableViewLockDataSource:(ASTableView *)tableView -{ - self.dataSourceLocked = YES; -} - -- (void)tableViewUnlockDataSource:(ASTableView *)tableView -{ - self.dataSourceLocked = NO; -} - -- (BOOL)shouldBatchFetchForTableView:(UITableView *)tableView -{ - return _kittenDataSource.count < kMaxLitterSize; -} - -- (void)tableView:(UITableView *)tableView willBeginBatchFetchWithContext:(ASBatchContext *)context -{ - NSLog(@"adding kitties"); - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - sleep(1); - dispatch_async(dispatch_get_main_queue(), ^{ - - // populate a new array of random-sized kittens - NSArray *moarKittens = [self createLitterWithSize:kLitterBatchSize]; - - NSMutableArray *indexPaths = [[NSMutableArray alloc] init]; - - // find number of kittens in the data source and create their indexPaths - NSInteger existingRows = _kittenDataSource.count + 1; - - for (NSInteger i = 0; i < moarKittens.count; i++) { - [indexPaths addObject:[NSIndexPath indexPathForRow:existingRows + i inSection:0]]; - } - - // add new kittens to the data source & notify table of new indexpaths - [_kittenDataSource addObjectsFromArray:moarKittens]; - [tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade]; - - [context completeBatchFetching:YES]; - - NSLog(@"kittens added"); - }); - }); -} - -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath -{ - // Enable editing for Kitten nodes - return [_blurbNodeIndexPath compare:indexPath] != NSOrderedSame; -} - -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath -{ - if (editingStyle == UITableViewCellEditingStyleDelete) { - // Assume only kitten nodes are editable (see -tableView:canEditRowAtIndexPath:). - [_kittenDataSource removeObjectAtIndex:indexPath.row - 1]; - [_tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; - } -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/main.m b/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/SynchronousKittens/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Podfile b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Podfile deleted file mode 100644 index 73e26195cd..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Podfile +++ /dev/null @@ -1,6 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture/Yoga', :path => '../..' -end - diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/AppDelegate.h deleted file mode 100644 index e4a477eb23..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/AppDelegate.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/AppDelegate.m deleted file mode 100644 index c54a53505e..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/AppDelegate.m +++ /dev/null @@ -1,37 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "TabBarController.h" -#import "CollectionViewController.h" -#import "ViewController.h" - - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - - ViewController *viewController = [[ViewController alloc] init]; - viewController.tabBarItem.title = @"TextStress"; - - CollectionViewController *cvc = [[CollectionViewController alloc] init]; - cvc.tabBarItem.title = @"Flexbox"; - - TabBarController *tabBarController = [[TabBarController alloc] init]; - tabBarController.viewControllers = @[cvc, viewController]; - - self.window.rootViewController = tabBarController; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/CollectionViewController.h b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/CollectionViewController.h deleted file mode 100644 index d9329bdb07..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/CollectionViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// CollectionViewController.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import -#import - -@interface CollectionViewController : ASViewController -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/CollectionViewController.m b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/CollectionViewController.m deleted file mode 100644 index 0464c376fa..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/CollectionViewController.m +++ /dev/null @@ -1,63 +0,0 @@ -// -// CollectionViewController.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "CollectionViewController.h" -#import "TextCellNode.h" - -@interface CollectionViewController() -{ - ASCollectionNode *_collectionNode; - NSArray *_labels; - TextCellNode *_cellNode; -} - -@end - -@implementation CollectionViewController - -- (instancetype)init -{ - UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; - _collectionNode = [[ASCollectionNode alloc] initWithCollectionViewLayout:flowLayout]; - CGRect rect = [[UIApplication sharedApplication] statusBarFrame]; - _collectionNode.contentInset = UIEdgeInsetsMake(rect.size.height, 0, 0, 0); - self = [super initWithNode:_collectionNode]; - if (self) { - _collectionNode.delegate = self; - _collectionNode.dataSource = self; - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - _collectionNode.backgroundColor = [UIColor whiteColor]; - _labels = @[@"Fight of the Living Dead: Experiment Fight of the Living Dead: Experiment", @"S1 • E1"]; -} - -- (NSInteger)collectionNode:(ASCollectionNode *)collectionNode numberOfItemsInSection:(NSInteger)section -{ - return 1; -} - -- (ASCellNodeBlock)collectionNode:(ASCollectionNode *)collectionNode nodeBlockForItemAtIndexPath:(NSIndexPath *)indexPath -{ - return ^{ - _cellNode = [[TextCellNode alloc] initWithText1:_labels[0] text2:_labels[1]]; - return _cellNode; - }; -} - -- (ASSizeRange)collectionNode:(ASCollectionNode *)collectionNode constrainedSizeForItemAtIndexPath:(NSIndexPath *)indexPath -{ - CGFloat width = collectionNode.view.bounds.size.width; - return ASSizeRangeMake(CGSizeMake(width, 0.0f), CGSizeMake(width, CGFLOAT_MAX)); -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/Info.plist b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/Info.plist deleted file mode 100644 index fb4115c84c..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/TabBarController.h b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/TabBarController.h deleted file mode 100644 index a8d7f80512..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/TabBarController.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// TabBarController.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface TabBarController : ASTabBarController -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/TabBarController.m b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/TabBarController.m deleted file mode 100644 index d056f1f679..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/TabBarController.m +++ /dev/null @@ -1,15 +0,0 @@ -// -// TabBarController.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "TabBarController.h" - -@interface TabBarController () -@end - -@implementation TabBarController -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/TextCellNode.h b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/TextCellNode.h deleted file mode 100644 index 2ae855e5fb..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/TextCellNode.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// TextCellNode.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface TextCellNode : ASCellNode -- (instancetype)initWithText1:(NSString *)text1 text2:(NSString *)text2; -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/TextCellNode.m b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/TextCellNode.m deleted file mode 100644 index 4b777b5677..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/TextCellNode.m +++ /dev/null @@ -1,96 +0,0 @@ -// -// TextCellNode.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "TextCellNode.h" -#import -#import - -#ifndef USE_ASTEXTNODE_2 -#define USE_ASTEXTNODE_2 1 -#endif - -@interface TextCellNode() -{ -#if USE_ASTEXTNODE_2 - ASTextNode2 *_label1; - ASTextNode2 *_label2; -#else - ASTextNode *_label1; - ASTextNode *_label2; -#endif -} -@end - -@implementation TextCellNode - -- (instancetype)initWithText1:(NSString *)text1 text2:(NSString *)text2 -{ - self = [super init]; - if (self) { - self.automaticallyManagesSubnodes = YES; - self.clipsToBounds = YES; -#if USE_ASTEXTNODE_2 - _label1 = [[ASTextNode2 alloc] init]; - _label2 = [[ASTextNode2 alloc] init]; -#else - _label1 = [[ASTextNode alloc] init]; - _label2 = [[ASTextNode alloc] init]; -#endif - - _label1.attributedText = [[NSAttributedString alloc] initWithString:text1]; - _label2.attributedText = [[NSAttributedString alloc] initWithString:text2]; - - _label1.maximumNumberOfLines = 1; - _label1.truncationMode = NSLineBreakByTruncatingTail; - _label2.maximumNumberOfLines = 1; - _label2.truncationMode = NSLineBreakByTruncatingTail; - - [self simpleSetupYogaLayout]; - } - return self; -} - -/** - This is to text a row with two labels, the first should be truncated with "...". - Layout is like: [l1Container[_label1], label2]. - This shows a bug of ASTextNode2. - */ -- (void)simpleSetupYogaLayout -{ - [self.style yogaNodeCreateIfNeeded]; - [_label1.style yogaNodeCreateIfNeeded]; - [_label2.style yogaNodeCreateIfNeeded]; - - _label1.style.flexGrow = 0; - _label1.style.flexShrink = 1; - _label1.backgroundColor = [UIColor lightGrayColor]; - - _label2.style.flexGrow = 0; - _label2.style.flexShrink = 0; - _label2.backgroundColor = [UIColor greenColor]; - - ASDisplayNode *l1Container = [ASDisplayNode yogaVerticalStack]; - - // TODO(fix ASTextNode2): next two line will show the bug of TextNode2 - // which works for ASTextNode though - // see discussion here: https://github.com/TextureGroup/Texture/pull/553 - l1Container.style.alignItems = ASStackLayoutAlignItemsCenter; - _label1.style.alignSelf = ASStackLayoutAlignSelfStart; - - l1Container.style.flexGrow = 0; - l1Container.style.flexShrink = 1; - - l1Container.yogaChildren = @[_label1]; - - self.style.justifyContent = ASStackLayoutJustifyContentSpaceBetween; - self.style.alignItems = ASStackLayoutAlignItemsStart; - self.style.flexDirection = ASStackLayoutDirectionHorizontal; - self.yogaChildren = @[l1Container, _label2]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/ViewController.h deleted file mode 100644 index 8c2d4162b9..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/ViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : UIViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/ViewController.m deleted file mode 100644 index f14bba18b3..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/ViewController.m +++ /dev/null @@ -1,162 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" -#import - -#define NUMBER_ELEMENTS 2 - -@interface ViewController () -{ - NSMutableArray *_textNodes; - NSMutableArray *_textLabels; - UIScrollView *_scrollView; -} - -@end - - -@implementation ViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - _textNodes = [NSMutableArray array]; - _textLabels = [NSMutableArray array]; - - _scrollView = [[UIScrollView alloc] init]; - [self.view addSubview:_scrollView]; - - for (int i = 0; i < NUMBER_ELEMENTS; i++) { - - ASTextNode *node = [self createNodeForIndex:i]; - [_textNodes addObject:node]; - [_scrollView addSubnode:node]; - - UILabel *label = [self createLabelForIndex:i]; - [_textLabels addObject:label]; - [_scrollView addSubview:label]; - } -} - -- (void)viewWillLayoutSubviews -{ - [super viewWillLayoutSubviews]; - - CGFloat maxWidth = 0; - CGFloat maxHeight = 0; - - CGRect frame = CGRectMake(50, 50, 0, 0); - - for (int i = 0; i < NUMBER_ELEMENTS; i++) { - frame.size = [self sizeForIndex:i]; - [[_textNodes objectAtIndex:i] setFrame:frame]; - - frame.origin.x += frame.size.width + 50; - - [[_textLabels objectAtIndex:i] setFrame:frame]; - - if (frame.size.width > maxWidth) { - maxWidth = frame.size.width; - } - if ((frame.size.height + frame.origin.y) > maxHeight) { - maxHeight = frame.size.height + frame.origin.y; - } - - frame.origin.x -= frame.size.width + 50; - frame.origin.y += frame.size.height + 20; - } - - _scrollView.frame = self.view.bounds; - _scrollView.contentSize = CGSizeMake(maxWidth, maxHeight); -} - -- (ASTextNode *)createNodeForIndex:(NSUInteger)index -{ - ASTextNode *node = [[ASTextNode alloc] init]; - node.attributedText = [self textForIndex:index]; - node.backgroundColor = [UIColor orangeColor]; - - NSMutableAttributedString *string = [node.attributedText mutableCopy]; - - switch (index) { - case 0: // top justification (ASDK) vs. center justification (UILabel) - node.maximumNumberOfLines = 3; - return node; - - case 1: // default truncation attributed string color shouldn't match attributed text color (ASDK) vs. match (UIKit) - node.maximumNumberOfLines = 3; - [string addAttribute:NSForegroundColorAttributeName - value:[UIColor redColor] - range:NSMakeRange(0, [string length])]; - node.attributedText = string; - return node; - - default: - return nil; - } -} - -- (UILabel *)createLabelForIndex:(NSUInteger)index -{ - UILabel *label = [[UILabel alloc] init]; - label.attributedText = [self textForIndex:index]; - label.backgroundColor = [UIColor greenColor]; - - NSMutableAttributedString *string = [label.attributedText mutableCopy]; - - switch (index) { - case 0: - label.numberOfLines = 3; - return label; - - case 1: - label.numberOfLines = 3; - [string addAttribute:NSForegroundColorAttributeName - value:[UIColor redColor] - range:NSMakeRange(0, [string length])]; - label.attributedText = string; - return label; - - default: - return nil; - } -} - -- (NSAttributedString *)textForIndex:(NSUInteger)index -{ - NSDictionary *attrs = @{ NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:12.0f] }; - - switch (index) { - case 0: - return [[NSAttributedString alloc] initWithString:@"1\n2\n3\n4\n5" attributes:attrs]; - - case 1: - return [[NSAttributedString alloc] initWithString:@"1\n2\n3\n4\n5" attributes:attrs]; - - default: - return nil; - } -} - -- (CGSize)sizeForIndex:(NSUInteger)index -{ - switch (index) { - case 0: - return CGSizeMake(40, 100); - - case 1: - return CGSizeMake(40, 100); - - default: - return CGSizeZero; - } -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/main.m b/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/main.m deleted file mode 100644 index 1745cc192d..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/TextStressTest/Sample/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Default-568h@2x.png b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Default-568h@2x.png deleted file mode 100644 index 6ee80b9393..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Default-568h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Default-667h@2x.png b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Default-667h@2x.png deleted file mode 100644 index e7b975e21b..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Default-667h@2x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Default-736h@3x.png b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Default-736h@3x.png deleted file mode 100644 index c8949cae16..0000000000 Binary files a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Default-736h@3x.png and /dev/null differ diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Podfile b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Podfile deleted file mode 100644 index 71a7f2c4b2..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -target 'Sample' do - pod 'Texture', :path => '../..' -end diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample.xcworkspace/contents.xcworkspacedata b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 7b5a2f3050..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/AppDelegate.h b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/AppDelegate.h deleted file mode 100644 index c30a27f4dc..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#define UseAutomaticLayout 1 - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/AppDelegate.m b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/AppDelegate.m deleted file mode 100644 index f8437855b0..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/AppDelegate.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// AppDelegate.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "AppDelegate.h" - -#import "ViewController.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]]; - [self.window makeKeyAndVisible]; - return YES; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/BlurbNode.h b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/BlurbNode.h deleted file mode 100644 index 5451fb39f0..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/BlurbNode.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// BlurbNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -/** - * Simple node that displays a placekitten.com attribution. - */ -@interface BlurbNode : ASCellNode - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/BlurbNode.m b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/BlurbNode.m deleted file mode 100644 index ba39439157..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/BlurbNode.m +++ /dev/null @@ -1,113 +0,0 @@ -// -// BlurbNode.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "BlurbNode.h" -#import "AppDelegate.h" - -#import -#import - -#import -#import - -static CGFloat kTextPadding = 10.0f; -static NSString *kLinkAttributeName = @"PlaceKittenNodeLinkAttributeName"; - -@interface BlurbNode () -{ - ASTextNode *_textNode; -} - -@end - - -@implementation BlurbNode - -#pragma mark - -#pragma mark ASCellNode. - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - // create a text node - _textNode = [[ASTextNode alloc] init]; - - // configure the node to support tappable links - _textNode.delegate = self; - _textNode.userInteractionEnabled = YES; - _textNode.linkAttributeNames = @[ kLinkAttributeName ]; - - // generate an attributed string using the custom link attribute specified above - NSString *blurb = @"Nic Cage courtesy of himself."; - NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:blurb]; - _textNode.attributedText = string; - - // add it as a subnode, and we're done - [self addSubnode:_textNode]; - - return self; -} - -- (void)didLoad -{ - // enable highlighting now that self.layer has loaded -- see ASHighlightOverlayLayer.h - self.layer.as_allowsHighlightDrawing = YES; - - [super didLoad]; -} - -#if UseAutomaticLayout -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - ASCenterLayoutSpec *centerSpec = [[ASCenterLayoutSpec alloc] init]; - centerSpec.centeringOptions = ASCenterLayoutSpecCenteringX; - centerSpec.sizingOptions = ASCenterLayoutSpecSizingOptionMinimumY; - centerSpec.child = _textNode; - - UIEdgeInsets padding =UIEdgeInsetsMake(kTextPadding, kTextPadding, kTextPadding, kTextPadding); - return [ASInsetLayoutSpec insetLayoutSpecWithInsets:padding child:centerSpec]; -} -#else -- (CGSize)calculateSizeThatFits:(CGSize)constrainedSize -{ - // called on a background thread. custom nodes must call -measure: on their subnodes in -calculateSizeThatFits: - CGSize measuredSize = [_textNode measure:CGSizeMake(constrainedSize.width - 2 * kTextPadding, - constrainedSize.height - 2 * kTextPadding)]; - return CGSizeMake(constrainedSize.width, measuredSize.height + 2 * kTextPadding); -} - -- (void)layout -{ - // called on the main thread. we'll use the stashed size from above, instead of blocking on text sizing - CGSize textNodeSize = _textNode.calculatedSize; - _textNode.frame = CGRectMake(roundf((self.calculatedSize.width - textNodeSize.width) / 2.0f), - kTextPadding, - textNodeSize.width, - textNodeSize.height); -} -#endif - -#pragma mark - -#pragma mark ASTextNodeDelegate methods. - -- (BOOL)textNode:(ASTextNode *)richTextNode shouldHighlightLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point -{ - // opt into link highlighting -- tap and hold the link to try it! must enable highlighting on a layer, see -didLoad - return YES; -} - -- (void)textNode:(ASTextNode *)richTextNode tappedLinkAttribute:(NSString *)attribute value:(NSURL *)URL atPoint:(CGPoint)point textRange:(NSRange)textRange -{ - // the node tapped a link, open it - [[UIApplication sharedApplication] openURL:URL]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/Info.plist b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/Info.plist deleted file mode 100644 index 35d842827b..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/NicCageNode.h b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/NicCageNode.h deleted file mode 100644 index b2937f6a44..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/NicCageNode.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// NicCageNode.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -/** - * Social media-style node that displays a kitten picture and a random length - * of lorem ipsum text. Uses a placekitten.com kitten of the specified size. - */ -@interface NicCageNode : ASCellNode - -- (instancetype)initWithKittenOfSize:(CGSize)size; - -- (void)toggleImageEnlargement; - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/NicCageNode.mm b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/NicCageNode.mm deleted file mode 100644 index 5e960ee013..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/NicCageNode.mm +++ /dev/null @@ -1,260 +0,0 @@ -// -// NicCageNode.mm -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "NicCageNode.h" -#import "AppDelegate.h" - -#import - -#import -#import -#import -#import - -static const CGFloat kImageSize = 80.0f; -static const CGFloat kOuterPadding = 16.0f; -static const CGFloat kInnerPadding = 10.0f; - -#define kVideoURL @"https://www.w3schools.com/html/mov_bbb.mp4" -#define kVideoStreamURL @"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8" - -@interface NicCageNode () -{ - CGSize _kittenSize; - -// ASNetworkImageNode *_imageNode; - ASVideoNode *_videoNode; - ASTextNode *_textNode; - ASDisplayNode *_divider; - BOOL _isImageEnlarged; - BOOL _swappedTextAndImage; -} - -@end - - -@implementation NicCageNode - -// lorem ipsum text courtesy https://kittyipsum.com/ <3 -+ (NSArray *)placeholders -{ - static NSArray *placeholders = nil; - - static dispatch_once_t once; - dispatch_once(&once, ^{ - placeholders = @[ - @"Kitty ipsum dolor sit amet, purr sleep on your face lay down in your way biting, sniff tincidunt a etiam fluffy fur judging you stuck in a tree kittens.", - @"Lick tincidunt a biting eat the grass, egestas enim ut lick leap puking climb the curtains lick.", - @"Lick quis nunc toss the mousie vel, tortor pellentesque sunbathe orci turpis non tail flick suscipit sleep in the sink.", - @"Orci turpis litter box et stuck in a tree, egestas ac tempus et aliquam elit.", - @"Hairball iaculis dolor dolor neque, nibh adipiscing vehicula egestas dolor aliquam.", - @"Sunbathe fluffy fur tortor faucibus pharetra jump, enim jump on the table I don't like that food catnip toss the mousie scratched.", - @"Quis nunc nam sleep in the sink quis nunc purr faucibus, chase the red dot consectetur bat sagittis.", - @"Lick tail flick jump on the table stretching purr amet, rhoncus scratched jump on the table run.", - @"Suspendisse aliquam vulputate feed me sleep on your keyboard, rip the couch faucibus sleep on your keyboard tristique give me fish dolor.", - @"Rip the couch hiss attack your ankles biting pellentesque puking, enim suspendisse enim mauris a.", - @"Sollicitudin iaculis vestibulum toss the mousie biting attack your ankles, puking nunc jump adipiscing in viverra.", - @"Nam zzz amet neque, bat tincidunt a iaculis sniff hiss bibendum leap nibh.", - @"Chase the red dot enim puking chuf, tristique et egestas sniff sollicitudin pharetra enim ut mauris a.", - @"Sagittis scratched et lick, hairball leap attack adipiscing catnip tail flick iaculis lick.", - @"Neque neque sleep in the sink neque sleep on your face, climb the curtains chuf tail flick sniff tortor non.", - @"Ac etiam kittens claw toss the mousie jump, pellentesque rhoncus litter box give me fish adipiscing mauris a.", - @"Pharetra egestas sunbathe faucibus ac fluffy fur, hiss feed me give me fish accumsan.", - @"Tortor leap tristique accumsan rutrum sleep in the sink, amet sollicitudin adipiscing dolor chase the red dot.", - @"Knock over the lamp pharetra vehicula sleep on your face rhoncus, jump elit cras nec quis quis nunc nam.", - @"Sollicitudin feed me et ac in viverra catnip, nunc eat I don't like that food iaculis give me fish.", - ]; - }); - - return placeholders; -} - -- (instancetype)initWithKittenOfSize:(CGSize)size -{ - if (!(self = [super init])) - return nil; - - _kittenSize = size; - - u_int32_t videoInitMethod = arc4random_uniform(3); - u_int32_t autoPlay = arc4random_uniform(2); - NSArray* methodArray = @[@"AVAsset", @"File URL", @"HLS URL"]; - NSArray* autoPlayArray = @[@"paused", @"auto play"]; - - switch (videoInitMethod) { - case 0: - // Construct an AVAsset from a URL - _videoNode = [[ASVideoNode alloc] init]; - _videoNode.asset = [AVAsset assetWithURL:[NSURL URLWithString:kVideoURL]]; - break; - - case 1: - // Construct the video node directly from the .mp4 URL - _videoNode = [[ASVideoNode alloc] init]; - _videoNode.asset = [AVAsset assetWithURL:[NSURL URLWithString:kVideoURL]]; - break; - - case 2: - // Construct the video node from an HTTP Live Streaming URL - // URL from https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/02_Playback.html - _videoNode = [[ASVideoNode alloc] init]; - _videoNode.asset = [AVAsset assetWithURL:[NSURL URLWithString:kVideoStreamURL]]; - break; - } - - if (autoPlay == 1) - _videoNode.shouldAutoplay = YES; - - _videoNode.shouldAutorepeat = YES; - _videoNode.backgroundColor = ASDisplayNodeDefaultPlaceholderColor(); - - [self addSubnode:_videoNode]; - - _textNode = [[ASTextNode alloc] init]; - _textNode.attributedText = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ %@ %@", methodArray[videoInitMethod], autoPlayArray[autoPlay], [self kittyIpsum]] - attributes:[self textStyle]]; - [self addSubnode:_textNode]; - - // hairline cell separator - _divider = [[ASDisplayNode alloc] init]; - _divider.backgroundColor = [UIColor lightGrayColor]; - [self addSubnode:_divider]; - - return self; -} - -- (NSString *)kittyIpsum -{ - NSArray *placeholders = [NicCageNode placeholders]; - u_int32_t ipsumCount = (u_int32_t)[placeholders count]; - u_int32_t location = arc4random_uniform(ipsumCount); - u_int32_t length = arc4random_uniform(ipsumCount - location); - - NSMutableString *string = [placeholders[location] mutableCopy]; - for (u_int32_t i = location + 1; i < location + length; i++) { - [string appendString:(i % 2 == 0) ? @"\n" : @" "]; - [string appendString:placeholders[i]]; - } - - return string; -} - -- (NSDictionary *)textStyle -{ - UIFont *font = [UIFont fontWithName:@"HelveticaNeue" size:12.0f]; - - NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; - style.paragraphSpacing = 0.5 * font.lineHeight; - style.hyphenationFactor = 1.0; - - return @{ NSFontAttributeName: font, - NSParagraphStyleAttributeName: style }; -} - -#if UseAutomaticLayout -- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize -{ - CGSize videoNodeSize = _isImageEnlarged ? CGSizeMake(2.0 * kImageSize, 2.0 * kImageSize) - : CGSizeMake(kImageSize, kImageSize); - - [_videoNode.style setPreferredSize:videoNodeSize]; - - _textNode.style.flexShrink = 1.0; - - ASStackLayoutSpec *stackSpec = [[ASStackLayoutSpec alloc] init]; - stackSpec.direction = ASStackLayoutDirectionHorizontal; - stackSpec.spacing = kInnerPadding; - [stackSpec setChildren:!_swappedTextAndImage ? @[_videoNode, _textNode] : @[_textNode, _videoNode]]; - - ASInsetLayoutSpec *insetSpec = [[ASInsetLayoutSpec alloc] init]; - insetSpec.insets = UIEdgeInsetsMake(kOuterPadding, kOuterPadding, kOuterPadding, kOuterPadding); - insetSpec.child = stackSpec; - - return insetSpec; -} - -// With box model, you don't need to override this method, unless you want to add custom logic. -- (void)layout -{ - [super layout]; - - // Manually layout the divider. - CGFloat pixelHeight = 1.0f / [[UIScreen mainScreen] scale]; - _divider.frame = CGRectMake(0.0f, 0.0f, self.calculatedSize.width, pixelHeight); -} -#else -- (CGSize)calculateSizeThatFits:(CGSize)constrainedSize -{ - CGSize imageSize = CGSizeMake(kImageSize, kImageSize); - CGSize textSize = [_textNode measure:CGSizeMake(constrainedSize.width - kImageSize - 2 * kOuterPadding - kInnerPadding, - constrainedSize.height)]; - - // ensure there's room for the text - CGFloat requiredHeight = MAX(textSize.height, imageSize.height); - return CGSizeMake(constrainedSize.width, requiredHeight + 2 * kOuterPadding); -} - -- (void)layout -{ - CGFloat pixelHeight = 1.0f / [[UIScreen mainScreen] scale]; - _divider.frame = CGRectMake(0.0f, 0.0f, self.calculatedSize.width, pixelHeight); - - _imageNode.frame = CGRectMake(kOuterPadding, kOuterPadding, kImageSize, kImageSize); - - CGSize textSize = _textNode.calculatedSize; - _textNode.frame = CGRectMake(kOuterPadding + kImageSize + kInnerPadding, kOuterPadding, textSize.width, textSize.height); -} -#endif - -- (void)toggleImageEnlargement -{ - _isImageEnlarged = !_isImageEnlarged; - [self setNeedsLayout]; -} - -- (void)toggleNodesSwap -{ - _swappedTextAndImage = !_swappedTextAndImage; - - [UIView animateWithDuration:0.15 animations:^{ - self.alpha = 0; - } completion:^(BOOL finished) { - [self setNeedsLayout]; - [self.view layoutIfNeeded]; - - [UIView animateWithDuration:0.15 animations:^{ - self.alpha = 1; - }]; - }]; -} - -- (void)updateBackgroundColor -{ - if (self.highlighted) { - self.backgroundColor = [UIColor lightGrayColor]; - } else if (self.selected) { - self.backgroundColor = [UIColor blueColor]; - } else { - self.backgroundColor = [UIColor whiteColor]; - } -} - -- (void)setSelected:(BOOL)selected -{ - [super setSelected:selected]; - [self updateBackgroundColor]; -} - -- (void)setHighlighted:(BOOL)highlighted -{ - [super setHighlighted:highlighted]; - [self updateBackgroundColor]; -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/ViewController.h b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/ViewController.h deleted file mode 100644 index c8a0626291..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/ViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// ViewController.h -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -@interface ViewController : UIViewController - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/ViewController.m b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/ViewController.m deleted file mode 100644 index 5e1553c571..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/ViewController.m +++ /dev/null @@ -1,197 +0,0 @@ -// -// ViewController.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import "ViewController.h" - -#import -#import - -#import "BlurbNode.h" -#import "NicCageNode.h" -#import - -static const NSInteger kCageSize = 20; // intial number of Cage cells in ASTableView -static const NSInteger kCageBatchSize = 10; // number of Cage cells to add to ASTableView -static const NSInteger kMaxCageSize = 100; // max number of Cage cells allowed in ASTableView - -@interface ViewController () -{ - ASTableView *_tableView; - - // array of boxed CGSizes corresponding to placekitten.com kittens - NSMutableArray *_kittenDataSource; - - BOOL _dataSourceLocked; - NSIndexPath *_blurbNodeIndexPath; -} - -@property (nonatomic, strong) NSMutableArray *kittenDataSource; -@property (atomic, assign) BOOL dataSourceLocked; - -@end - -@implementation ViewController - -#pragma mark - -#pragma mark UIViewController. - -- (instancetype)init -{ - if (!(self = [super init])) - return nil; - - _tableView = [[ASTableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; - _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; // KittenNode has its own separator - _tableView.asyncDataSource = self; - _tableView.asyncDelegate = self; - - // populate our "data source" with some random kittens - _kittenDataSource = [self createLitterWithSize:kCageSize]; - - _blurbNodeIndexPath = [NSIndexPath indexPathForItem:0 inSection:0]; - - self.title = @"Nic Cage"; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit - target:self - action:@selector(toggleEditingMode)]; - - return self; -} - -- (NSMutableArray *)createLitterWithSize:(NSInteger)litterSize -{ - NSMutableArray *cages = [NSMutableArray arrayWithCapacity:litterSize]; - for (NSInteger i = 0; i < litterSize; i++) { - - u_int32_t deltaX = arc4random_uniform(10) - 5; - u_int32_t deltaY = arc4random_uniform(10) - 5; - CGSize size = CGSizeMake(350 + 2 * deltaX, 350 + 4 * deltaY); - - [cages addObject:[NSValue valueWithCGSize:size]]; - } - return cages; -} - -- (void)setKittenDataSource:(NSMutableArray *)kittenDataSource { - ASDisplayNodeAssert(!self.dataSourceLocked, @"Could not update data source when it is locked !"); - - _kittenDataSource = kittenDataSource; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [self.view addSubview:_tableView]; -} - -- (void)viewWillLayoutSubviews -{ - _tableView.frame = self.view.bounds; -} - -- (void)toggleEditingMode -{ - [_tableView setEditing:!_tableView.editing animated:YES]; -} - -#pragma mark - -#pragma mark ASTableView. - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [_tableView deselectRowAtIndexPath:indexPath animated:YES]; - // Assume only kitten nodes are selectable (see -tableView:shouldHighlightRowAtIndexPath:). - NicCageNode *node = (NicCageNode *)[_tableView nodeForRowAtIndexPath:indexPath]; - [node toggleImageEnlargement]; -} - -- (ASCellNode *)tableView:(ASTableView *)tableView nodeForRowAtIndexPath:(NSIndexPath *)indexPath -{ - // special-case the first row - if ([_blurbNodeIndexPath compare:indexPath] == NSOrderedSame) { - BlurbNode *node = [[BlurbNode alloc] init]; - return node; - } - - NSValue *size = _kittenDataSource[indexPath.row - 1]; - NicCageNode *node = [[NicCageNode alloc] initWithKittenOfSize:size.CGSizeValue]; - return node; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - // blurb node + kLitterSize kitties - return 1 + _kittenDataSource.count; -} - -- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath -{ - // Enable selection for kitten nodes - return [_blurbNodeIndexPath compare:indexPath] != NSOrderedSame; -} - -- (void)tableViewLockDataSource:(ASTableView *)tableView -{ - self.dataSourceLocked = YES; -} - -- (void)tableViewUnlockDataSource:(ASTableView *)tableView -{ - self.dataSourceLocked = NO; -} - -- (BOOL)shouldBatchFetchForTableView:(UITableView *)tableView -{ - return _kittenDataSource.count < kMaxCageSize; -} - -- (void)tableView:(UITableView *)tableView willBeginBatchFetchWithContext:(ASBatchContext *)context -{ - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - sleep(1); - dispatch_async(dispatch_get_main_queue(), ^{ - - // populate a new array of random-sized kittens - NSArray *moarKittens = [self createLitterWithSize:kCageBatchSize]; - - NSMutableArray *indexPaths = [[NSMutableArray alloc] init]; - - // find number of kittens in the data source and create their indexPaths - NSInteger existingRows = _kittenDataSource.count + 1; - - for (NSInteger i = 0; i < moarKittens.count; i++) { - [indexPaths addObject:[NSIndexPath indexPathForRow:existingRows + i inSection:0]]; - } - - // add new kittens to the data source & notify table of new indexpaths - [_kittenDataSource addObjectsFromArray:moarKittens]; - [tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade]; - - [context completeBatchFetching:YES]; - }); - }); -} - -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath -{ - // Enable editing for Kitten nodes - return [_blurbNodeIndexPath compare:indexPath] != NSOrderedSame; -} - -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath -{ - if (editingStyle == UITableViewCellEditingStyleDelete) { - // Assume only kitten nodes are editable (see -tableView:canEditRowAtIndexPath:). - [_kittenDataSource removeObjectAtIndex:indexPath.row - 1]; - [_tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; - } -} - -@end diff --git a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/main.m b/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/main.m deleted file mode 100644 index 511cd1a7ac..0000000000 --- a/submodules/AsyncDisplayKit/examples_extra/VideoTableView/Sample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Texture -// -// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. -// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved. -// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0 -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/submodules/BotPaymentsUI/Sources/BotCheckoutHeaderItem.swift b/submodules/BotPaymentsUI/Sources/BotCheckoutHeaderItem.swift index ba565fc0eb..ada9ca2d90 100644 --- a/submodules/BotPaymentsUI/Sources/BotCheckoutHeaderItem.swift +++ b/submodules/BotPaymentsUI/Sources/BotCheckoutHeaderItem.swift @@ -157,7 +157,7 @@ class BotCheckoutHeaderItemNode: ListViewItemNode { var imageApply: (() -> Void)? var updatedImageSignal: Signal<(TransformImageArguments) -> DrawingContext?, NoError>? if let photo = item.invoice.photo, let dimensions = photo.dimensions { - let arguments = TransformImageArguments(corners: ImageCorners(), imageSize: dimensions.aspectFilled(imageSize), boundingSize: imageSize, intrinsicInsets: UIEdgeInsets(), emptyColor: item.theme.list.mediaPlaceholderColor) + let arguments = TransformImageArguments(corners: ImageCorners(), imageSize: dimensions.cgSize.aspectFilled(imageSize), boundingSize: imageSize, intrinsicInsets: UIEdgeInsets(), emptyColor: item.theme.list.mediaPlaceholderColor) imageApply = makeImageLayout(arguments) maxTextWidth = max(1.0, maxTextWidth - imageSize.width - imageTextSpacing) if imageUpdated { diff --git a/submodules/ChatListSearchItemHeader/Sources/ChatListSearchItemHeader.swift b/submodules/ChatListSearchItemHeader/Sources/ChatListSearchItemHeader.swift index cb332caf59..2721ed5600 100644 --- a/submodules/ChatListSearchItemHeader/Sources/ChatListSearchItemHeader.swift +++ b/submodules/ChatListSearchItemHeader/Sources/ChatListSearchItemHeader.swift @@ -109,6 +109,6 @@ public final class ChatListSearchItemHeaderNode: ListViewItemHeaderNode { override public func animateRemoved(duration: Double) { self.alpha = 0.0 - self.layer.animateAlpha(from: 1.0, to: 0.0, duration: duration, removeOnCompletion: false) + self.layer.animateAlpha(from: 1.0, to: 0.0, duration: duration, removeOnCompletion: true) } } diff --git a/submodules/ChatListUI/Sources/ChatListController.swift b/submodules/ChatListUI/Sources/ChatListController.swift index b45eee862c..eddf2da3ce 100644 --- a/submodules/ChatListUI/Sources/ChatListController.swift +++ b/submodules/ChatListUI/Sources/ChatListController.swift @@ -75,6 +75,8 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent let navigationController: NavigationController? + let passthroughTouches: Bool = true + init(controller: ViewController, sourceNode: ASDisplayNode?, navigationController: NavigationController?) { self.controller = controller self.sourceNode = sourceNode @@ -91,6 +93,9 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent } }) } + + func animatedIn() { + } } public class ChatListControllerImpl: TelegramBaseController, ChatListController, UIViewControllerPreviewingDelegate { diff --git a/submodules/ChatListUI/Sources/Node/ChatListItem.swift b/submodules/ChatListUI/Sources/Node/ChatListItem.swift index 5be302526b..f678a36ab7 100644 --- a/submodules/ChatListUI/Sources/Node/ChatListItem.swift +++ b/submodules/ChatListUI/Sources/Node/ChatListItem.swift @@ -1206,9 +1206,9 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { var dimensions: CGSize? if let contentImageMedia = contentImageMedia as? TelegramMediaImage { - dimensions = largestRepresentationForPhoto(contentImageMedia)?.dimensions + dimensions = largestRepresentationForPhoto(contentImageMedia)?.dimensions.cgSize } else if let contentImageMedia = contentImageMedia as? TelegramMediaFile { - dimensions = contentImageMedia.dimensions + dimensions = contentImageMedia.dimensions?.cgSize } var contentImageNodeAppeared = false diff --git a/submodules/ContactListUI/Sources/ContactsControllerNode.swift b/submodules/ContactListUI/Sources/ContactsControllerNode.swift index bc34980964..ee7fcb6e3f 100644 --- a/submodules/ContactListUI/Sources/ContactsControllerNode.swift +++ b/submodules/ContactListUI/Sources/ContactsControllerNode.swift @@ -33,6 +33,8 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent let navigationController: NavigationController? = nil + let passthroughTouches: Bool = true + init(controller: ViewController, sourceNode: ASDisplayNode?) { self.controller = controller self.sourceNode = sourceNode @@ -48,6 +50,9 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent } }) } + + func animatedIn() { + } } final class ContactsControllerNode: ASDisplayNode { diff --git a/submodules/ContextUI/Sources/ContextController.swift b/submodules/ContextUI/Sources/ContextController.swift index 6cdc330029..5aa8a38c00 100644 --- a/submodules/ContextUI/Sources/ContextController.swift +++ b/submodules/ContextUI/Sources/ContextController.swift @@ -211,7 +211,7 @@ private final class ContextControllerNode: ViewControllerTracingNode, UIScrollVi if strongSelf.didCompleteAnimationIn { if !strongSelf.didMoveFromInitialGesturePoint { let distance = abs(localPoint.y - initialPoint.y) - if distance > 4.0 { + if distance > 12.0 { strongSelf.didMoveFromInitialGesturePoint = true } } @@ -581,6 +581,13 @@ private final class ContextControllerNode: ViewControllerTracingNode, UIScrollVi self.contentContainerNode.layer.animateSpring(from: min(localSourceFrame.width / self.contentContainerNode.frame.width, localSourceFrame.height / self.contentContainerNode.frame.height) as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: springDuration, initialVelocity: 0.0, damping: springDamping) + switch self.source { + case let .controller(controller): + controller.animatedIn() + default: + break + } + let contentContainerOffset = CGPoint(x: localSourceFrame.center.x - self.contentContainerNode.frame.center.x, y: localSourceFrame.center.y - self.contentContainerNode.frame.center.y) if let contentNode = self.contentContainerNode.contentNode, case let .controller(controller) = contentNode { let snapshotView: UIView? = nil// controller.sourceNode.view.snapshotContentTree() @@ -1099,7 +1106,16 @@ private final class ContextControllerNode: ViewControllerTracingNode, UIScrollVi } } case let .controller(contentParentNode): - let projectedFrame = convertFrame(contentParentNode.sourceNode.bounds, from: contentParentNode.sourceNode.view, to: self.view) + var projectedFrame: CGRect = convertFrame(contentParentNode.sourceNode.bounds, from: contentParentNode.sourceNode.view, to: self.view) + switch self.source { + case let .controller(source): + let transitionInfo = source.transitionInfo() + if let (sourceNode, sourceRect) = transitionInfo?.sourceNode() { + projectedFrame = convertFrame(sourceRect, from: sourceNode.view, to: self.view) + } + default: + break + } self.originalProjectedContentViewFrame = (projectedFrame, projectedFrame) if let originalProjectedContentViewFrame = self.originalProjectedContentViewFrame { @@ -1149,8 +1165,9 @@ private final class ContextControllerNode: ViewControllerTracingNode, UIScrollVi var contentHeight: CGFloat if case .compact = layout.metrics.widthClass { if layout.size.width < layout.size.height { - originalActionsFrame = CGRect(origin: CGPoint(x: actionsSideInset, y: min(maximumActionsFrameOrigin, floor((layout.size.height - contentActionsSpacing - contentSize.height) / 2.0) + contentSize.height + contentActionsSpacing)), size: actionsSize) - originalContentFrame = CGRect(origin: CGPoint(x: actionsSideInset, y: originalActionsFrame.minY - contentActionsSpacing - contentSize.height), size: contentSize) + let sideInset = floor((layout.size.width - max(contentSize.width, actionsSize.width)) / 2.0) + originalActionsFrame = CGRect(origin: CGPoint(x: sideInset, y: min(maximumActionsFrameOrigin, floor((layout.size.height - contentActionsSpacing - contentSize.height) / 2.0) + contentSize.height + contentActionsSpacing)), size: actionsSize) + originalContentFrame = CGRect(origin: CGPoint(x: sideInset, y: originalActionsFrame.minY - contentActionsSpacing - contentSize.height), size: contentSize) if originalContentFrame.minY < topEdge { let requiredOffset = topEdge - originalContentFrame.minY let availableOffset = max(0.0, layout.size.height - layout.intrinsicInsets.bottom - actionsBottomInset - originalActionsFrame.maxY) @@ -1271,12 +1288,21 @@ private final class ContextControllerNode: ViewControllerTracingNode, UIScrollVi } } case let .controller(controller): - let controllerPoint = self.view.convert(point, to: controller.controller.view) - if let result = controller.controller.view.hitTest(controllerPoint, with: event) { - #if DEBUG - //return controller.view - #endif - return result + var passthrough = false + switch self.source { + case let .controller(controllerSource): + passthrough = controllerSource.passthroughTouches + default: + break + } + if passthrough { + let controllerPoint = self.view.convert(point, to: controller.controller.view) + if let result = controller.controller.view.hitTest(controllerPoint, with: event) { + #if DEBUG + //return controller.view + #endif + return result + } } } } @@ -1325,8 +1351,11 @@ public protocol ContextExtractedContentSource: class { public protocol ContextControllerContentSource: class { var controller: ViewController { get } var navigationController: NavigationController? { get } + var passthroughTouches: Bool { get } func transitionInfo() -> ContextControllerTakeControllerInfo? + + func animatedIn() } public enum ContextContentSource { diff --git a/submodules/ContextUI/Sources/ContextControllerSourceNode.swift b/submodules/ContextUI/Sources/ContextControllerSourceNode.swift index 0ff94a03f0..64f798b11b 100644 --- a/submodules/ContextUI/Sources/ContextControllerSourceNode.swift +++ b/submodules/ContextUI/Sources/ContextControllerSourceNode.swift @@ -11,6 +11,8 @@ public final class ContextControllerSourceNode: ASDisplayNode { } } public var activated: ((ContextGesture) -> Void)? + public var shouldBegin: ((CGPoint) -> Bool)? + public var customActivationProgress: ((CGFloat, ContextGestureTransition) -> Void)? override public func didLoad() { super.didLoad() @@ -19,21 +21,32 @@ public final class ContextControllerSourceNode: ASDisplayNode { self.contextGesture = contextGesture self.view.addGestureRecognizer(contextGesture) + contextGesture.shouldBegin = { [weak self] point in + guard let strongSelf = self, !strongSelf.bounds.width.isZero else { + return false + } + return strongSelf.shouldBegin?(point) ?? false + } + contextGesture.activationProgress = { [weak self] progress, update in guard let strongSelf = self, !strongSelf.bounds.width.isZero else { return } - let minScale: CGFloat = (strongSelf.bounds.width - 10.0) / strongSelf.bounds.width - let currentScale = 1.0 * (1.0 - progress) + minScale * progress - switch update { - case .update: - strongSelf.layer.sublayerTransform = CATransform3DMakeScale(currentScale, currentScale, 1.0) - case .begin: - strongSelf.layer.sublayerTransform = CATransform3DMakeScale(currentScale, currentScale, 1.0) - case let .ended(previousProgress): - let previousScale = 1.0 * (1.0 - previousProgress) + minScale * previousProgress - strongSelf.layer.sublayerTransform = CATransform3DMakeScale(currentScale, currentScale, 1.0) - strongSelf.layer.animateSpring(from: previousScale as NSNumber, to: currentScale as NSNumber, keyPath: "sublayerTransform.scale", duration: 0.5, delay: 0.0, initialVelocity: 0.0, damping: 90.0) + if let customActivationProgress = strongSelf.customActivationProgress { + customActivationProgress(progress, update) + } else { + let minScale: CGFloat = (strongSelf.bounds.width - 10.0) / strongSelf.bounds.width + let currentScale = 1.0 * (1.0 - progress) + minScale * progress + switch update { + case .update: + strongSelf.layer.sublayerTransform = CATransform3DMakeScale(currentScale, currentScale, 1.0) + case .begin: + strongSelf.layer.sublayerTransform = CATransform3DMakeScale(currentScale, currentScale, 1.0) + case let .ended(previousProgress): + let previousScale = 1.0 * (1.0 - previousProgress) + minScale * previousProgress + strongSelf.layer.sublayerTransform = CATransform3DMakeScale(currentScale, currentScale, 1.0) + strongSelf.layer.animateSpring(from: previousScale as NSNumber, to: currentScale as NSNumber, keyPath: "sublayerTransform.scale", duration: 0.5, delay: 0.0, initialVelocity: 0.0, damping: 90.0) + } } } contextGesture.activated = { [weak self] gesture in diff --git a/submodules/ContextUI/Sources/ContextGesture.swift b/submodules/ContextUI/Sources/ContextGesture.swift index 3843d577e2..eb8235a3d2 100644 --- a/submodules/ContextUI/Sources/ContextGesture.swift +++ b/submodules/ContextUI/Sources/ContextGesture.swift @@ -56,6 +56,7 @@ public final class ContextGesture: UIGestureRecognizer, UIGestureRecognizerDeleg private var animator: DisplayLinkAnimator? private var isValidated: Bool = false + public var shouldBegin: ((CGPoint) -> Bool)? public var activationProgress: ((CGFloat, ContextGestureTransition) -> Void)? public var activated: ((ContextGesture) -> Void)? public var externalUpdated: ((UIView?, CGPoint) -> Void)? @@ -92,6 +93,13 @@ public final class ContextGesture: UIGestureRecognizer, UIGestureRecognizerDeleg override public func touchesBegan(_ touches: Set, with event: UIEvent) { super.touchesBegan(touches, with: event) + if let shouldBegin = self.shouldBegin, let touch = touches.first { + if !shouldBegin(touch.location(in: self.view)) { + self.state = .failed + return + } + } + if self.delayTimer == nil { let delayTimer = Timer(timeInterval: beginDelay, target: TimerTargetWrapper { [weak self] in guard let strongSelf = self, let _ = strongSelf.delayTimer else { diff --git a/submodules/Crc32/Crc32_Xcode.xcodeproj/project.pbxproj b/submodules/Crc32/Crc32_Xcode.xcodeproj/project.pbxproj deleted file mode 100644 index ac6072ee0a..0000000000 --- a/submodules/Crc32/Crc32_Xcode.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1595 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - D03E45692305CC310049C28B /* Crc32.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45672305CC310049C28B /* Crc32.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E45742305CCD20049C28B /* Crc32.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45732305CCD20049C28B /* Crc32.m */; }; - D03E45772305CCEC0049C28B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E45762305CCEB0049C28B /* Foundation.framework */; }; - D03E45792305CCF00049C28B /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E45782305CCF00049C28B /* libz.tbd */; }; - D03E46362306E0BB0049C28B /* crc32mac.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E46342306E0BB0049C28B /* crc32mac.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E463E2306E22E0049C28B /* Crc32.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45732305CCD20049C28B /* Crc32.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - D03E45642305CC310049C28B /* Crc32.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Crc32.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D03E45672305CC310049C28B /* Crc32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Crc32.h; sourceTree = ""; }; - D03E45682305CC310049C28B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D03E45732305CCD20049C28B /* Crc32.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Crc32.m; sourceTree = ""; }; - D03E45762305CCEB0049C28B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - D03E45782305CCF00049C28B /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - D03E46322306E0BB0049C28B /* crc32mac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = crc32mac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D03E46342306E0BB0049C28B /* crc32mac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = crc32mac.h; sourceTree = ""; }; - D03E46352306E0BB0049C28B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - D03E45612305CC310049C28B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E45792305CCF00049C28B /* libz.tbd in Frameworks */, - D03E45772305CCEC0049C28B /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D03E462F2306E0BB0049C28B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - D03E455A2305CC310049C28B = { - isa = PBXGroup; - children = ( - D03E45682305CC310049C28B /* Info.plist */, - D03E45662305CC310049C28B /* Sources */, - D03E46332306E0BB0049C28B /* crc32mac */, - D03E45652305CC310049C28B /* Products */, - D03E45752305CCEB0049C28B /* Frameworks */, - ); - sourceTree = ""; - }; - D03E45652305CC310049C28B /* Products */ = { - isa = PBXGroup; - children = ( - D03E45642305CC310049C28B /* Crc32.framework */, - D03E46322306E0BB0049C28B /* crc32mac.framework */, - ); - name = Products; - sourceTree = ""; - }; - D03E45662305CC310049C28B /* Sources */ = { - isa = PBXGroup; - children = ( - D03E45732305CCD20049C28B /* Crc32.m */, - D03E45672305CC310049C28B /* Crc32.h */, - ); - path = Sources; - sourceTree = ""; - }; - D03E45752305CCEB0049C28B /* Frameworks */ = { - isa = PBXGroup; - children = ( - D03E45782305CCF00049C28B /* libz.tbd */, - D03E45762305CCEB0049C28B /* Foundation.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - D03E46332306E0BB0049C28B /* crc32mac */ = { - isa = PBXGroup; - children = ( - D03E46342306E0BB0049C28B /* crc32mac.h */, - D03E46352306E0BB0049C28B /* Info.plist */, - ); - path = crc32mac; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - D03E455F2305CC310049C28B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E45692305CC310049C28B /* Crc32.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D03E462D2306E0BB0049C28B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E46362306E0BB0049C28B /* crc32mac.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - D03E45632305CC310049C28B /* Crc32 */ = { - isa = PBXNativeTarget; - buildConfigurationList = D03E456C2305CC310049C28B /* Build configuration list for PBXNativeTarget "Crc32" */; - buildPhases = ( - D03E455F2305CC310049C28B /* Headers */, - D03E45602305CC310049C28B /* Sources */, - D03E45612305CC310049C28B /* Frameworks */, - D03E45622305CC310049C28B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Crc32; - productName = Crc32; - productReference = D03E45642305CC310049C28B /* Crc32.framework */; - productType = "com.apple.product-type.framework"; - }; - D03E46312306E0BB0049C28B /* crc32mac */ = { - isa = PBXNativeTarget; - buildConfigurationList = D03E463B2306E0BB0049C28B /* Build configuration list for PBXNativeTarget "crc32mac" */; - buildPhases = ( - D03E462D2306E0BB0049C28B /* Headers */, - D03E462E2306E0BB0049C28B /* Sources */, - D03E462F2306E0BB0049C28B /* Frameworks */, - D03E46302306E0BB0049C28B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = crc32mac; - productName = crc32mac; - productReference = D03E46322306E0BB0049C28B /* crc32mac.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D03E455B2305CC310049C28B /* Project object */ = { - isa = PBXProject; - attributes = { - DefaultBuildSystemTypeForWorkspace = Latest; - LastUpgradeCheck = 1030; - ORGANIZATIONNAME = "Telegram Messenger LLP"; - TargetAttributes = { - D03E45632305CC310049C28B = { - CreatedOnToolsVersion = 10.3; - }; - D03E46312306E0BB0049C28B = { - CreatedOnToolsVersion = 10.3; - }; - }; - }; - buildConfigurationList = D03E455E2305CC310049C28B /* Build configuration list for PBXProject "Crc32_Xcode" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = D03E455A2305CC310049C28B; - productRefGroup = D03E45652305CC310049C28B /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - D03E45632305CC310049C28B /* Crc32 */, - D03E46312306E0BB0049C28B /* crc32mac */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - D03E45622305CC310049C28B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D03E46302306E0BB0049C28B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - D03E45602305CC310049C28B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E45742305CCD20049C28B /* Crc32.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D03E462E2306E0BB0049C28B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E463E2306E22E0049C28B /* Crc32.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - D0208AAC2306E7EB00A23503 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = HockeyappMacAlpha; - }; - D0208AAD2306E7EB00A23503 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Crc32; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = HockeyappMacAlpha; - }; - D0208AAE2306E7EB00A23503 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = crc32mac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.crc32mac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = HockeyappMacAlpha; - }; - D0208AAF2306E7F700A23503 /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStore; - }; - D0208AB02306E7F700A23503 /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Crc32; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugAppStore; - }; - D0208AB12306E7F700A23503 /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = crc32mac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.crc32mac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStore; - }; - D0208AB22306E7FD00A23503 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStore; - }; - D0208AB32306E7FD00A23503 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Crc32; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseAppStore; - }; - D0208AB42306E7FD00A23503 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = crc32mac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.crc32mac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStore; - }; - D0208AB52306E80300A23503 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyapp; - }; - D0208AB62306E80300A23503 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Crc32; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseHockeyapp; - }; - D0208AB72306E80300A23503 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = crc32mac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.crc32mac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyapp; - }; - D03E456A2305CC310049C28B /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStoreLLC; - }; - D03E456B2305CC310049C28B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStoreLLC; - }; - D03E456D2305CC310049C28B /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Crc32; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugAppStoreLLC; - }; - D03E456E2305CC310049C28B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Crc32; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseAppStoreLLC; - }; - D03E456F2305CC4E0049C28B /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugHockeyapp; - }; - D03E45702305CC4E0049C28B /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Crc32; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugHockeyapp; - }; - D03E45712305CC590049C28B /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyappInternal; - }; - D03E45722305CC590049C28B /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Crc32; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseHockeyappInternal; - }; - D03E46372306E0BB0049C28B /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = crc32mac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.crc32mac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStoreLLC; - }; - D03E46382306E0BB0049C28B /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = crc32mac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.crc32mac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugHockeyapp; - }; - D03E46392306E0BB0049C28B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = crc32mac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.crc32mac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStoreLLC; - }; - D03E463A2306E0BB0049C28B /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = crc32mac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.crc32mac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyappInternal; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - D03E455E2305CC310049C28B /* Build configuration list for PBXProject "Crc32_Xcode" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D03E456A2305CC310049C28B /* DebugAppStoreLLC */, - D03E456F2305CC4E0049C28B /* DebugHockeyapp */, - D0208AAF2306E7F700A23503 /* DebugAppStore */, - D0208AAC2306E7EB00A23503 /* HockeyappMacAlpha */, - D03E456B2305CC310049C28B /* ReleaseAppStoreLLC */, - D0208AB22306E7FD00A23503 /* ReleaseAppStore */, - D0208AB52306E80300A23503 /* ReleaseHockeyapp */, - D03E45712305CC590049C28B /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseAppStoreLLC; - }; - D03E456C2305CC310049C28B /* Build configuration list for PBXNativeTarget "Crc32" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D03E456D2305CC310049C28B /* DebugAppStoreLLC */, - D03E45702305CC4E0049C28B /* DebugHockeyapp */, - D0208AB02306E7F700A23503 /* DebugAppStore */, - D0208AAD2306E7EB00A23503 /* HockeyappMacAlpha */, - D03E456E2305CC310049C28B /* ReleaseAppStoreLLC */, - D0208AB32306E7FD00A23503 /* ReleaseAppStore */, - D0208AB62306E80300A23503 /* ReleaseHockeyapp */, - D03E45722305CC590049C28B /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseAppStoreLLC; - }; - D03E463B2306E0BB0049C28B /* Build configuration list for PBXNativeTarget "crc32mac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D03E46372306E0BB0049C28B /* DebugAppStoreLLC */, - D03E46382306E0BB0049C28B /* DebugHockeyapp */, - D0208AB12306E7F700A23503 /* DebugAppStore */, - D0208AAE2306E7EB00A23503 /* HockeyappMacAlpha */, - D03E46392306E0BB0049C28B /* ReleaseAppStoreLLC */, - D0208AB42306E7FD00A23503 /* ReleaseAppStore */, - D0208AB72306E80300A23503 /* ReleaseHockeyapp */, - D03E463A2306E0BB0049C28B /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseAppStoreLLC; - }; -/* End XCConfigurationList section */ - }; - rootObject = D03E455B2305CC310049C28B /* Project object */; -} diff --git a/submodules/Crc32/Info.plist b/submodules/Crc32/Info.plist deleted file mode 100644 index e1fe4cfb7b..0000000000 --- a/submodules/Crc32/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - - diff --git a/submodules/Crc32/crc32mac/Info.plist b/submodules/Crc32/crc32mac/Info.plist deleted file mode 100644 index 5371a6e108..0000000000 --- a/submodules/Crc32/crc32mac/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSHumanReadableCopyright - Copyright © 2019 Telegram Messenger LLP. All rights reserved. - - diff --git a/submodules/Crc32/crc32mac/crc32mac.h b/submodules/Crc32/crc32mac/crc32mac.h deleted file mode 100644 index ab2edb774a..0000000000 --- a/submodules/Crc32/crc32mac/crc32mac.h +++ /dev/null @@ -1,9 +0,0 @@ -#import - -//! Project version number for crc32mac. -FOUNDATION_EXPORT double crc32macVersionNumber; - -//! Project version string for crc32mac. -FOUNDATION_EXPORT const unsigned char crc32macVersionString[]; - -uint32_t Crc32(const void *bytes, int length); diff --git a/submodules/Display/Display/ListView.swift b/submodules/Display/Display/ListView.swift index 0c510a2d1f..d7c2c6f63c 100644 --- a/submodules/Display/Display/ListView.swift +++ b/submodules/Display/Display/ListView.swift @@ -249,6 +249,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture public final var generalScrollDirectionUpdated: (GeneralScrollDirection) -> Void = { _ in } public final var reorderItem: (Int, Int, Any?) -> Signal = { _, _, _ in return .single(false) } + public final var reorderCompleted: (Any?) -> Void = { _ in } private final var animations: [ListViewAnimation] = [] private final var actionsForVSync: [() -> ()] = [] @@ -439,6 +440,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture reorderNode.removeFromSupernode() } } + self.reorderCompleted(self.opaqueTransactionState) } private func updateReordering(offset: CGFloat) { @@ -2680,6 +2682,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture if highlightedItemNode.index != self.highlightedItemIndex { highlightedItemNode.setHighlighted(false, at: CGPoint(), animated: false) self.highlightedItemIndex = nil + self.selectionTouchLocation = nil } } else if self.highlightedItemIndex != nil { self.highlightedItemIndex = nil diff --git a/submodules/Display/Display/WindowContent.swift b/submodules/Display/Display/WindowContent.swift index 0fcb504484..872429065c 100644 --- a/submodules/Display/Display/WindowContent.swift +++ b/submodules/Display/Display/WindowContent.swift @@ -899,6 +899,8 @@ public class Window1 { self.presentationContext.updateToInterfaceOrientation(orientation) self.overlayPresentationContext.updateToInterfaceOrientation(orientation) + self.topPresentationContext.updateToInterfaceOrientation(orientation) + for controller in self.topLevelOverlayControllers { controller.updateToInterfaceOrientation(orientation) } @@ -972,6 +974,8 @@ public class Window1 { } self.presentationContext.containerLayoutUpdated(childLayout, transition: updatingLayout.transition) self.overlayPresentationContext.containerLayoutUpdated(childLayout, transition: updatingLayout.transition) + + self.topPresentationContext.containerLayoutUpdated(childLayout, transition: updatingLayout.transition) for controller in self.topLevelOverlayControllers { updatingLayout.transition.updateFrame(node: controller.displayNode, frame: CGRect(origin: CGPoint(), size: self.windowLayout.size)) diff --git a/submodules/EncryptionProvider/Sources/EncryptionProvider.h b/submodules/EncryptionProvider/Sources/EncryptionProvider.h index adbd6579ae..0e43eab5d8 100644 --- a/submodules/EncryptionProvider/Sources/EncryptionProvider.h +++ b/submodules/EncryptionProvider/Sources/EncryptionProvider.h @@ -55,6 +55,8 @@ NS_ASSUME_NONNULL_BEGIN - (NSData * _Nullable)rsaEncryptPKCS1OAEPWithPublicKey:(NSString *)publicKey data:(NSData *)data; - (id)parseRSAPublicKey:(NSString *)publicKey; +-(NSData * _Nonnull)macosRSAEncrypt:(NSString *) publicKey data: (NSData *)data; + @end NS_ASSUME_NONNULL_END diff --git a/submodules/GalleryUI/Sources/GalleryController.swift b/submodules/GalleryUI/Sources/GalleryController.swift index 4140849f47..e91d5ce149 100644 --- a/submodules/GalleryUI/Sources/GalleryController.swift +++ b/submodules/GalleryUI/Sources/GalleryController.swift @@ -204,7 +204,7 @@ public func galleryItemForEntry(context: AccountContext, presentationData: Prese if let file = webpageContent.file, file.isVideo { content = NativeVideoContent(id: .message(message.stableId, file.fileId), fileReference: .message(message: MessageReference(message), media: file), imageReference: mediaImage.flatMap({ ImageMediaReference.message(message: MessageReference(message), media: $0) }), streamVideo: .conservative, loopVideo: loopVideos, tempFilePath: tempFilePath) } else if URL(string: embedUrl)?.pathExtension == "mp4" { - content = SystemVideoContent(url: embedUrl, imageReference: .webPage(webPage: WebpageReference(webpage), media: image), dimensions: webpageContent.embedSize ?? CGSize(width: 640.0, height: 640.0), duration: Int32(webpageContent.duration ?? 0)) + content = SystemVideoContent(url: embedUrl, imageReference: .webPage(webPage: WebpageReference(webpage), media: image), dimensions: webpageContent.embedSize?.cgSize ?? CGSize(width: 640.0, height: 640.0), duration: Int32(webpageContent.duration ?? 0)) } } if content == nil, let webEmbedContent = WebEmbedVideoContent(webPage: webpage, webpageContent: webpageContent, forcedTimestamp: timecode.flatMap(Int.init)) { diff --git a/submodules/GalleryUI/Sources/Items/ChatImageGalleryItem.swift b/submodules/GalleryUI/Sources/Items/ChatImageGalleryItem.swift index 44e5a460a3..25c7ca919c 100644 --- a/submodules/GalleryUI/Sources/Items/ChatImageGalleryItem.swift +++ b/submodules/GalleryUI/Sources/Items/ChatImageGalleryItem.swift @@ -60,13 +60,13 @@ final class ChatMediaGalleryThumbnailItem: GalleryThumbnailItem { switch self.thumbnail { case let .image(imageReference): if let representation = largestImageRepresentation(imageReference.media.representations) { - return (mediaGridMessagePhoto(account: self.account, photoReference: imageReference), representation.dimensions) + return (mediaGridMessagePhoto(account: self.account, photoReference: imageReference), representation.dimensions.cgSize) } else { return (.single({ _ in return nil }), CGSize(width: 128.0, height: 128.0)) } case let .video(fileReference): if let representation = largestImageRepresentation(fileReference.media.previewRepresentations) { - return (mediaGridMessageVideo(postbox: self.account.postbox, videoReference: fileReference), representation.dimensions) + return (mediaGridMessageVideo(postbox: self.account.postbox, videoReference: fileReference), representation.dimensions.cgSize) } else { return (.single({ _ in return nil }), CGSize(width: 128.0, height: 128.0)) } @@ -220,10 +220,10 @@ final class ChatImageGalleryItemNode: ZoomableContentGalleryItemNode { fileprivate func setImage(imageReference: ImageMediaReference) { if self.contextAndMedia == nil || !self.contextAndMedia!.1.media.isEqual(to: imageReference.media) { if let largestSize = largestRepresentationForPhoto(imageReference.media) { - let displaySize = largestSize.dimensions.fitted(CGSize(width: 1280.0, height: 1280.0)).dividedByScreenScale().integralFloor + let displaySize = largestSize.dimensions.cgSize.fitted(CGSize(width: 1280.0, height: 1280.0)).dividedByScreenScale().integralFloor self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: displaySize, boundingSize: displaySize, intrinsicInsets: UIEdgeInsets()))() self.imageNode.setSignal(chatMessagePhoto(postbox: context.account.postbox, photoReference: imageReference), dispatchOnDisplayLink: false) - self.zoomableContent = (largestSize.dimensions, self.imageNode) + self.zoomableContent = (largestSize.dimensions.cgSize, self.imageNode) self.fetchDisposable.set(fetchedMediaResource(mediaBox: self.context.account.postbox.mediaBox, reference: imageReference.resourceReference(largestSize.resource)).start()) self.setupStatus(resource: largestSize.resource) @@ -237,18 +237,18 @@ final class ChatImageGalleryItemNode: ZoomableContentGalleryItemNode { func setFile(context: AccountContext, fileReference: FileMediaReference) { if self.contextAndMedia == nil || !self.contextAndMedia!.1.media.isEqual(to: fileReference.media) { if var largestSize = fileReference.media.dimensions { - var displaySize = largestSize.dividedByScreenScale() + var displaySize = largestSize.cgSize.dividedByScreenScale() if let previewDimensions = largestImageRepresentation(fileReference.media.previewRepresentations)?.dimensions { - let previewAspect = previewDimensions.width / previewDimensions.height + let previewAspect = CGFloat(previewDimensions.width) / CGFloat(previewDimensions.height) let aspect = displaySize.width / displaySize.height if abs(previewAspect - 1.0 / aspect) < 0.1 { displaySize = CGSize(width: displaySize.height, height: displaySize.width) - largestSize = CGSize(width: largestSize.height, height: largestSize.width) + largestSize = PixelDimensions(width: largestSize.height, height: largestSize.width) } } self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: displaySize, boundingSize: displaySize, intrinsicInsets: UIEdgeInsets()))() self.imageNode.setSignal(chatMessageImageFile(account: context.account, fileReference: fileReference, thumbnail: false), dispatchOnDisplayLink: false) - self.zoomableContent = (largestSize, self.imageNode) + self.zoomableContent = (largestSize.cgSize, self.imageNode) self.setupStatus(resource: fileReference.media.resource) } else { self._ready.set(.single(Void())) diff --git a/submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift b/submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift index 9bf5e784b1..253455e154 100644 --- a/submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift +++ b/submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift @@ -167,6 +167,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { private var pictureInPictureNode: UniversalVideoGalleryItemPictureInPictureNode? private let statusButtonNode: HighlightableButtonNode private let statusNode: RadialStatusNode + private var statusNodeShouldBeHidden = true private var isCentral = false private var _isVisible: Bool? @@ -463,7 +464,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { } } - self.statusDisposable.set((combineLatest(videoNode.status, mediaFileStatus) + self.statusDisposable.set((combineLatest(queue: .mainQueue(), videoNode.status, mediaFileStatus) |> deliverOnMainQueue).start(next: { [weak self] value, fetchStatus in if let strongSelf = self { var initialBuffering = false @@ -496,6 +497,13 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { default: isStreaming = true } + } else { + switch fetchStatus { + case .Local: + break + default: + isStreaming = true + } } if let content = item.content as? NativeVideoContent, !isStreaming { initialBuffering = false @@ -542,7 +550,8 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { strongSelf.fetchStatus = fetchStatus if !item.hideControls { - strongSelf.statusButtonNode.isHidden = strongSelf.hideStatusNodeUntilCentrality || (!initialBuffering && (strongSelf.didPause || !isPaused) && !fetching) + strongSelf.statusNodeShouldBeHidden = (!initialBuffering && (strongSelf.didPause || !isPaused) && !fetching) + strongSelf.statusButtonNode.isHidden = strongSelf.hideStatusNodeUntilCentrality || strongSelf.statusNodeShouldBeHidden } if isAnimated || disablePlayerControls { @@ -648,6 +657,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { } self.hideStatusNodeUntilCentrality = false + self.statusButtonNode.isHidden = self.hideStatusNodeUntilCentrality || self.statusNodeShouldBeHidden if videoNode.ownsContentNode { if isAnimated { videoNode.seek(0.0) @@ -731,6 +741,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { videoNode.play() } else { self.hideStatusNodeUntilCentrality = false + self.statusButtonNode.isHidden = self.hideStatusNodeUntilCentrality || self.statusNodeShouldBeHidden videoNode.playOnceWithSound(playAndRecord: false, seek: seek, actionAtEnd: .stop) } } diff --git a/submodules/InstantPageUI/Sources/InstantImageGalleryItem.swift b/submodules/InstantPageUI/Sources/InstantImageGalleryItem.swift index 3d9c93438d..64034b701b 100644 --- a/submodules/InstantPageUI/Sources/InstantImageGalleryItem.swift +++ b/submodules/InstantPageUI/Sources/InstantImageGalleryItem.swift @@ -17,9 +17,9 @@ private struct InstantImageGalleryThumbnailItem: GalleryThumbnailItem { var image: (Signal<(TransformImageArguments) -> DrawingContext?, NoError>, CGSize) { if let imageReferene = mediaReference.concrete(TelegramMediaImage.self), let representation = largestImageRepresentation(imageReferene.media.representations) { - return (mediaGridMessagePhoto(account: self.account, photoReference: imageReferene), representation.dimensions) + return (mediaGridMessagePhoto(account: self.account, photoReference: imageReferene), representation.dimensions.cgSize) } else if let fileReference = mediaReference.concrete(TelegramMediaFile.self), let dimensions = fileReference.media.dimensions { - return (mediaGridMessageVideo(postbox: account.postbox, videoReference: fileReference), dimensions) + return (mediaGridMessageVideo(postbox: account.postbox, videoReference: fileReference), dimensions.cgSize) } else { return (.single({ _ in return nil }), CGSize(width: 128.0, height: 128.0)) } @@ -133,10 +133,10 @@ final class InstantImageGalleryItemNode: ZoomableContentGalleryItemNode { fileprivate func setImage(imageReference: ImageMediaReference) { if self.contextAndMedia == nil || !self.contextAndMedia!.1.media.isEqual(to: imageReference.media) { if let largestSize = largestRepresentationForPhoto(imageReference.media) { - let displaySize = largestSize.dimensions.fitted(CGSize(width: 1280.0, height: 1280.0)).dividedByScreenScale().integralFloor + let displaySize = largestSize.dimensions.cgSize.fitted(CGSize(width: 1280.0, height: 1280.0)).dividedByScreenScale().integralFloor self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: displaySize, boundingSize: displaySize, intrinsicInsets: UIEdgeInsets(), emptyColor: .black))() self.imageNode.setSignal(chatMessagePhoto(postbox: self.context.account.postbox, photoReference: imageReference), dispatchOnDisplayLink: false) - self.zoomableContent = (largestSize.dimensions, self.imageNode) + self.zoomableContent = (largestSize.dimensions.cgSize, self.imageNode) self.fetchDisposable.set(fetchedMediaResource(mediaBox: self.context.account.postbox.mediaBox, reference: imageReference.resourceReference(largestSize.resource)).start()) } else { self._ready.set(.single(Void())) @@ -149,10 +149,10 @@ final class InstantImageGalleryItemNode: ZoomableContentGalleryItemNode { func setFile(context: AccountContext, fileReference: FileMediaReference) { if self.contextAndMedia == nil || !self.contextAndMedia!.1.media.isEqual(to: fileReference.media) { if let largestSize = fileReference.media.dimensions { - let displaySize = largestSize.dividedByScreenScale() + let displaySize = largestSize.cgSize.dividedByScreenScale() self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: displaySize, boundingSize: displaySize, intrinsicInsets: UIEdgeInsets()))() self.imageNode.setSignal(chatMessageImageFile(account: context.account, fileReference: fileReference, thumbnail: false), dispatchOnDisplayLink: false) - self.zoomableContent = (largestSize, self.imageNode) + self.zoomableContent = (largestSize.cgSize, self.imageNode) } else { self._ready.set(.single(Void())) } diff --git a/submodules/InstantPageUI/Sources/InstantPageArticleNode.swift b/submodules/InstantPageUI/Sources/InstantPageArticleNode.swift index b1aa39e3d8..a493fa8efa 100644 --- a/submodules/InstantPageUI/Sources/InstantPageArticleNode.swift +++ b/submodules/InstantPageUI/Sources/InstantPageArticleNode.swift @@ -102,7 +102,7 @@ final class InstantPageArticleNode: ASDisplayNode, InstantPageNode { self.contentTileNode.frame = self.bounds if let imageNode = self.imageNode, let image = self.cover, let largest = largestImageRepresentation(image.representations) { - let size = largest.dimensions.aspectFilled(imageSize) + let size = largest.dimensions.cgSize.aspectFilled(imageSize) let boundingSize = imageSize let makeLayout = imageNode.asyncLayout() diff --git a/submodules/InstantPageUI/Sources/InstantPageImageNode.swift b/submodules/InstantPageUI/Sources/InstantPageImageNode.swift index 314486e58e..df7375c3db 100644 --- a/submodules/InstantPageUI/Sources/InstantPageImageNode.swift +++ b/submodules/InstantPageUI/Sources/InstantPageImageNode.swift @@ -199,7 +199,7 @@ final class InstantPageImageNode: ASDisplayNode, InstantPageNode { self.statusNode.frame = CGRect(x: floorToScreenPixels((size.width - radialStatusSize) / 2.0), y: floorToScreenPixels((size.height - radialStatusSize) / 2.0), width: radialStatusSize, height: radialStatusSize) if let image = self.media.media as? TelegramMediaImage, let largest = largestImageRepresentation(image.representations) { - let imageSize = largest.dimensions.aspectFilled(size) + let imageSize = largest.dimensions.cgSize.aspectFilled(size) let boundingSize = size let radius: CGFloat = self.roundCorners ? floor(min(imageSize.width, imageSize.height) / 2.0) : 0.0 let makeLayout = self.imageNode.asyncLayout() @@ -210,7 +210,7 @@ final class InstantPageImageNode: ASDisplayNode, InstantPageNode { } else if let file = self.media.media as? TelegramMediaFile, let dimensions = file.dimensions { let emptyColor = file.mimeType.hasPrefix("image/") ? self.theme.imageTintColor : nil - let imageSize = dimensions.aspectFilled(size) + let imageSize = dimensions.cgSize.aspectFilled(size) let boundingSize = size let makeLayout = self.imageNode.asyncLayout() let apply = makeLayout(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: boundingSize, intrinsicInsets: UIEdgeInsets(), emptyColor: emptyColor)) @@ -234,7 +234,7 @@ final class InstantPageImageNode: ASDisplayNode, InstantPageNode { self.pinNode.frame = CGRect(origin: CGPoint(x: floor((size.width - pinSize.width) / 2.0), y: floor(size.height * 0.5 - 10.0 - pinSize.height / 2.0)), size: pinSize) pinApply() } else if let webPage = media.media as? TelegramMediaWebpage, case let .Loaded(content) = webPage.content, let image = content.image, let largest = largestImageRepresentation(image.representations) { - let imageSize = largest.dimensions.aspectFilled(size) + let imageSize = largest.dimensions.cgSize.aspectFilled(size) let boundingSize = size let radius: CGFloat = self.roundCorners ? floor(min(imageSize.width, imageSize.height) / 2.0) : 0.0 let makeLayout = self.imageNode.asyncLayout() diff --git a/submodules/InstantPageUI/Sources/InstantPageLayout.swift b/submodules/InstantPageUI/Sources/InstantPageLayout.swift index a457c1d6bb..ddd2d2eb6a 100644 --- a/submodules/InstantPageUI/Sources/InstantPageLayout.swift +++ b/submodules/InstantPageUI/Sources/InstantPageLayout.swift @@ -376,12 +376,12 @@ func layoutInstantPageBlock(webpage: TelegramMediaWebpage, rtl: Bool, block: Ins case let .image(id, caption, url, webpageId): if let image = media[id] as? TelegramMediaImage, let largest = largestImageRepresentation(image.representations) { let imageSize = largest.dimensions - var filledSize = imageSize.aspectFitted(CGSize(width: boundingWidth - safeInset * 2.0, height: 1200.0)) + var filledSize = imageSize.cgSize.aspectFitted(CGSize(width: boundingWidth - safeInset * 2.0, height: 1200.0)) if let size = fillToSize { filledSize = size } else if isCover { - filledSize = imageSize.aspectFilled(CGSize(width: boundingWidth - safeInset * 2.0, height: 1.0)) + filledSize = imageSize.cgSize.aspectFilled(CGSize(width: boundingWidth - safeInset * 2.0, height: 1.0)) if !filledSize.height.isZero { filledSize = filledSize.cropped(CGSize(width: boundingWidth - safeInset * 2.0, height: floor((boundingWidth - safeInset * 2.0) * 3.0 / 5.0))) } @@ -416,12 +416,12 @@ func layoutInstantPageBlock(webpage: TelegramMediaWebpage, rtl: Bool, block: Ins case let .video(id, caption, autoplay, loop): if let file = media[id] as? TelegramMediaFile, let dimensions = file.dimensions { let imageSize = dimensions - var filledSize = imageSize.aspectFitted(CGSize(width: boundingWidth - safeInset * 2.0, height: 1200.0)) + var filledSize = imageSize.cgSize.aspectFitted(CGSize(width: boundingWidth - safeInset * 2.0, height: 1200.0)) if let size = fillToSize { filledSize = size } else if isCover { - filledSize = imageSize.aspectFilled(CGSize(width: boundingWidth - safeInset * 2.0, height: 1.0)) + filledSize = imageSize.cgSize.aspectFilled(CGSize(width: boundingWidth - safeInset * 2.0, height: 1.0)) if !filledSize.height.isZero { filledSize = filledSize.cropped(CGSize(width: boundingWidth - safeInset * 2.0, height: floor((boundingWidth - safeInset * 2.0) * 3.0 / 5.0))) } @@ -462,11 +462,11 @@ func layoutInstantPageBlock(webpage: TelegramMediaWebpage, rtl: Bool, block: Ins switch subItem { case let .image(id, _, _, _): if let image = media[id] as? TelegramMediaImage, let largest = largestImageRepresentation(image.representations) { - size = largest.dimensions + size = largest.dimensions.cgSize } case let .video(id, _, _, _): if let file = media[id] as? TelegramMediaFile, let dimensions = file.dimensions { - size = dimensions + size = dimensions.cgSize } default: break @@ -577,7 +577,7 @@ func layoutInstantPageBlock(webpage: TelegramMediaWebpage, rtl: Bool, block: Ins let mediaIndex = mediaIndexCounter mediaIndexCounter += 1 - let filledSize = imageSize.fitted(CGSize(width: boundingWidth, height: 1200.0)) + let filledSize = imageSize.cgSize.fitted(CGSize(width: boundingWidth, height: 1200.0)) contentSize.height = max(contentSize.height, filledSize.height) var mediaUrl: InstantPageUrlItem? @@ -610,10 +610,10 @@ func layoutInstantPageBlock(webpage: TelegramMediaWebpage, rtl: Bool, block: Ins let size: CGSize if let dimensions = dimensions { - if dimensions.width.isLessThanOrEqualTo(0.0) { - size = CGSize(width: embedBoundingWidth, height: dimensions.height) + if dimensions.width <= 0 { + size = CGSize(width: embedBoundingWidth, height: dimensions.cgSize.height) } else { - size = dimensions.aspectFitted(CGSize(width: embedBoundingWidth, height: embedBoundingWidth)) + size = dimensions.cgSize.aspectFitted(CGSize(width: embedBoundingWidth, height: embedBoundingWidth)) } } else { if let height = webEmbedHeights[embedIndex] { @@ -628,7 +628,7 @@ func layoutInstantPageBlock(webpage: TelegramMediaWebpage, rtl: Bool, block: Ins let frame = CGRect(origin: CGPoint(x: floor((boundingWidth - size.width) / 2.0), y: 0.0), size: size) let item: InstantPageItem if let url = url, let coverId = coverId, let image = media[coverId] as? TelegramMediaImage { - let loadedContent = TelegramMediaWebpageLoadedContent(url: url, displayUrl: url, hash: 0, type: "video", websiteName: nil, title: nil, text: nil, embedUrl: url, embedType: "video", embedSize: size, duration: nil, author: nil, image: image, file: nil, files: nil, instantPage: nil) + let loadedContent = TelegramMediaWebpageLoadedContent(url: url, displayUrl: url, hash: 0, type: "video", websiteName: nil, title: nil, text: nil, embedUrl: url, embedType: "video", embedSize: PixelDimensions(size), duration: nil, author: nil, image: image, file: nil, files: nil, instantPage: nil) let content = TelegramMediaWebpageContent.Loaded(loadedContent) item = InstantPageImageItem(frame: frame, webPage: webpage, media: InstantPageMedia(index: embedIndex, media: TelegramMediaWebpage(webpageId: MediaId(namespace: Namespaces.Media.LocalWebpage, id: -1), content: content), url: nil, caption: nil, credit: nil), attributes: [], interactive: true, roundCorners: false, fit: false) @@ -805,19 +805,19 @@ func layoutInstantPageBlock(webpage: TelegramMediaWebpage, rtl: Bool, block: Ins return InstantPageLayout(origin: CGPoint(), contentSize: contentSize, items: items) case let .map(latitude, longitude, zoom, dimensions, caption): let imageSize = dimensions - var filledSize = imageSize.aspectFitted(CGSize(width: boundingWidth - safeInset * 2.0, height: 1200.0)) + var filledSize = imageSize.cgSize.aspectFitted(CGSize(width: boundingWidth - safeInset * 2.0, height: 1200.0)) if let size = fillToSize { filledSize = size } else if isCover { - filledSize = imageSize.aspectFilled(CGSize(width: boundingWidth - safeInset * 2.0, height: 1.0)) + filledSize = imageSize.cgSize.aspectFilled(CGSize(width: boundingWidth - safeInset * 2.0, height: 1.0)) if !filledSize.height.isZero { filledSize = filledSize.cropped(CGSize(width: boundingWidth - safeInset * 2.0, height: floor((boundingWidth - safeInset * 2.0) * 3.0 / 5.0))) } } let map = TelegramMediaMap(latitude: latitude, longitude: longitude, geoPlace: nil, venue: nil, liveBroadcastingTimeout: nil) - let attributes: [InstantPageImageAttribute] = [InstantPageMapAttribute(zoom: zoom, dimensions: dimensions)] + let attributes: [InstantPageImageAttribute] = [InstantPageMapAttribute(zoom: zoom, dimensions: dimensions.cgSize)] var contentSize = CGSize(width: boundingWidth - safeInset * 2.0, height: 0.0) var items: [InstantPageItem] = [] diff --git a/submodules/InstantPageUI/Sources/InstantPageTextItem.swift b/submodules/InstantPageUI/Sources/InstantPageTextItem.swift index ff18ceb44a..bf828c6898 100644 --- a/submodules/InstantPageUI/Sources/InstantPageTextItem.swift +++ b/submodules/InstantPageUI/Sources/InstantPageTextItem.swift @@ -520,10 +520,10 @@ func attributedStringForRichText(_ text: RichText, styleStack: InstantPageTextSt } var dimensions = dimensions if let boundingWidth = boundingWidth { - dimensions = dimensions.fittedToWidthOrSmaller(boundingWidth) + dimensions = PixelDimensions(dimensions.cgSize.fittedToWidthOrSmaller(boundingWidth)) } let extentBuffer = UnsafeMutablePointer.allocate(capacity: 1) - extentBuffer.initialize(to: RunStruct(ascent: 0.0, descent: 0.0, width: dimensions.width)) + extentBuffer.initialize(to: RunStruct(ascent: 0.0, descent: 0.0, width: dimensions.cgSize.width)) var callbacks = CTRunDelegateCallbacks(version: kCTRunDelegateVersion1, dealloc: { (pointer) in }, getAscent: { (pointer) -> CGFloat in let d = pointer.assumingMemoryBound(to: RunStruct.self) diff --git a/submodules/ItemListStickerPackItem/Sources/ItemListStickerPackItem.swift b/submodules/ItemListStickerPackItem/Sources/ItemListStickerPackItem.swift index 5711bb3559..d48b59bc09 100644 --- a/submodules/ItemListStickerPackItem/Sources/ItemListStickerPackItem.swift +++ b/submodules/ItemListStickerPackItem/Sources/ItemListStickerPackItem.swift @@ -388,7 +388,7 @@ class ItemListStickerPackItemNode: ItemListRevealOptionsItemNode { if let thumbnailItem = thumbnailItem { switch thumbnailItem { case let .still(representation): - let stillImageSize = representation.dimensions.aspectFitted(imageBoundingSize) + let stillImageSize = representation.dimensions.cgSize.aspectFitted(imageBoundingSize) imageSize = stillImageSize if fileUpdated { diff --git a/submodules/ItemListUI/Sources/ItemListController.swift b/submodules/ItemListUI/Sources/ItemListController.swift index b9ab3817c6..d6ccf5ff40 100644 --- a/submodules/ItemListUI/Sources/ItemListController.swift +++ b/submodules/ItemListUI/Sources/ItemListController.swift @@ -209,6 +209,19 @@ open class ItemListController: ViewController, KeyShortcutResponder, Presentable } } + public func setReorderCompleted(_ f: @escaping ([T]) -> Void) { + self.reorderCompleted = { list in + f(list.map { $0 as! T }) + } + } + private var reorderCompleted: (([ItemListNodeAnyEntry]) -> Void)? { + didSet { + if self.isNodeLoaded { + (self.displayNode as! ItemListControllerNode).reorderCompleted = self.reorderCompleted + } + } + } + public var previewItemWithTag: ((ItemListItemTag) -> UIViewController?)? public var commitPreview: ((UIViewController) -> Void)? @@ -431,6 +444,7 @@ open class ItemListController: ViewController, KeyShortcutResponder, Presentable displayNode.contentScrollingEnded = self.contentScrollingEnded displayNode.searchActivated = self.searchActivated displayNode.reorderEntry = self.reorderEntry + displayNode.reorderCompleted = self.reorderCompleted displayNode.listNode.experimentalSnapScrollToItem = self.experimentalSnapScrollToItem displayNode.requestLayout = { [weak self] transition in self?.requestLayout(transition: transition) diff --git a/submodules/ItemListUI/Sources/ItemListControllerNode.swift b/submodules/ItemListUI/Sources/ItemListControllerNode.swift index 846de989c5..4bd1eb822c 100644 --- a/submodules/ItemListUI/Sources/ItemListControllerNode.swift +++ b/submodules/ItemListUI/Sources/ItemListControllerNode.swift @@ -216,6 +216,7 @@ open class ItemListControllerNode: ASDisplayNode, UIScrollViewDelegate { public var contentScrollingEnded: ((ListView) -> Bool)? public var searchActivated: ((Bool) -> Void)? public var reorderEntry: ((Int, Int, [ItemListNodeAnyEntry]) -> Void)? + public var reorderCompleted: (([ItemListNodeAnyEntry]) -> Void)? public var requestLayout: ((ContainedViewLayoutTransition) -> Void)? public var enableInteractiveDismiss = false { @@ -272,6 +273,12 @@ open class ItemListControllerNode: ASDisplayNode, UIScrollViewDelegate { return .single(false) } + self.listNode.reorderCompleted = { [weak self] opaqueTransactionState in + if let strongSelf = self, let reorderCompleted = strongSelf.reorderCompleted, let mergedEntries = (opaqueTransactionState as? ItemListNodeOpaqueState)?.mergedEntries { + reorderCompleted(mergedEntries) + } + } + self.listNode.visibleBottomContentOffsetChanged = { [weak self] offset in self?.visibleBottomContentOffsetChanged?(offset) } diff --git a/submodules/LegacyComponents/LegacyComponents/TGAttachmentAssetCell.m b/submodules/LegacyComponents/LegacyComponents/TGAttachmentAssetCell.m index 4aa30205a7..51b23a8596 100644 --- a/submodules/LegacyComponents/LegacyComponents/TGAttachmentAssetCell.m +++ b/submodules/LegacyComponents/LegacyComponents/TGAttachmentAssetCell.m @@ -6,6 +6,7 @@ @interface TGAttachmentAssetCell () { SMetaDisposable *_itemSelectedDisposable; + bool _ignoreSetSelected; } @end @@ -126,14 +127,16 @@ - (void)checkButtonPressed { - [_checkButton setSelected:!_checkButton.selected animated:true]; + _ignoreSetSelected = true; - [self.selectionContext setItem:(id)self.asset selected:_checkButton.selected animated:false sender:_checkButton]; + [self.selectionContext setItem:(id)self.asset selected:!_checkButton.selected animated:true sender:_checkButton]; bool value = [self.selectionContext isItemSelected:(id)self.asset]; if (value != _checkButton.selected) { - [_checkButton setSelected:value animated:false]; + [_checkButton setSelected:value animated:true]; } + + _ignoreSetSelected = false; } - (void)setChecked:(bool)checked animated:(bool)animated diff --git a/submodules/LegacyComponents/LegacyComponents/TGCheckButtonView.m b/submodules/LegacyComponents/LegacyComponents/TGCheckButtonView.m index 8bf2270aa4..8aa9440404 100644 --- a/submodules/LegacyComponents/LegacyComponents/TGCheckButtonView.m +++ b/submodules/LegacyComponents/LegacyComponents/TGCheckButtonView.m @@ -483,7 +483,7 @@ static CGAffineTransform TGCheckButtonDefaultTransform; { _numberLabel = [[UILabel alloc] init]; _numberLabel.backgroundColor = [UIColor clearColor]; - _numberLabel.frame = CGRectMake(0.0f, -TGScreenPixel, _wrapperView.frame.size.width, _wrapperView.frame.size.height); + _numberLabel.frame = CGRectMake(0.0f, -TGScreenPixel, _wrapperView.bounds.size.width, _wrapperView.bounds.size.height); _numberLabel.textColor = _checkColor; _numberLabel.textAlignment = NSTextAlignmentCenter; _numberLabel.userInteractionEnabled = false; diff --git a/submodules/LegacyComponents/LegacyComponents/TGMediaPickerCell.m b/submodules/LegacyComponents/LegacyComponents/TGMediaPickerCell.m index 993848100d..263eb2aa9c 100644 --- a/submodules/LegacyComponents/LegacyComponents/TGMediaPickerCell.m +++ b/submodules/LegacyComponents/LegacyComponents/TGMediaPickerCell.m @@ -96,8 +96,7 @@ - (void)checkButtonPressed { - [_checkButton setSelected:!_checkButton.selected animated:true]; - [self.selectionContext setItem:(id)self.item selected:_checkButton.selected animated:false sender:_checkButton]; + [self.selectionContext setItem:(id)self.item selected:!_checkButton.selected animated:false sender:_checkButton]; bool value = [self.selectionContext isItemSelected:(id)self.item]; if (value != _checkButton.selected) { [_checkButton setSelected:value animated:true]; diff --git a/submodules/LegacyComponents/LegacyComponents/TGMediaPickerGalleryInterfaceView.m b/submodules/LegacyComponents/LegacyComponents/TGMediaPickerGalleryInterfaceView.m index d3d5f3a38b..c94f055775 100644 --- a/submodules/LegacyComponents/LegacyComponents/TGMediaPickerGalleryInterfaceView.m +++ b/submodules/LegacyComponents/LegacyComponents/TGMediaPickerGalleryInterfaceView.m @@ -64,6 +64,7 @@ TGModernButton *_muteButton; TGCheckButtonView *_checkButton; + bool _ignoreSetSelected; TGMediaPickerPhotoCounterButton *_photoCounterButton; TGMediaPickerGroupButton *_groupButton; TGMediaPickerCameraButton *_cameraButton; @@ -531,7 +532,9 @@ if ([_currentItem conformsToProtocol:@protocol(TGModernGallerySelectableItem)]) selectableItem = ((id)_currentItem).selectableMediaItem; - [_checkButton setSelected:[_selectionContext isItemSelected:selectableItem] animated:false]; + if (!_ignoreSetSelected) { + [_checkButton setSelected:[_selectionContext isItemSelected:selectableItem] animated:false]; + } [_checkButton setNumber:[_selectionContext indexOfItem:selectableItem]]; signal = [_selectionContext itemInformativeSelectedSignal:selectableItem]; [_itemSelectedDisposable setDisposable:[signal startWithNext:^(TGMediaSelectionChange *next) @@ -669,15 +672,17 @@ if ([_currentItem conformsToProtocol:@protocol(TGModernGallerySelectableItem)]) selectableItem = ((id)_currentItem).selectableMediaItem; - [_checkButton setSelected:!_checkButton.selected animated:true]; + _ignoreSetSelected = true; if (selectableItem != nil) { - [_selectionContext setItem:selectableItem selected:_checkButton.selected animated:animated sender:_checkButton]; + [_selectionContext setItem:selectableItem selected:!_checkButton.selected animated:animated sender:_checkButton]; bool value = [_selectionContext isItemSelected:selectableItem]; - if (value != _checkButton.selected) { - [_checkButton setSelected:value animated:true]; - } + [_checkButton setSelected:value animated:true]; + } else { + [_checkButton setSelected:!_checkButton.selected animated:true]; } + + _ignoreSetSelected = false; } - (void)photoCounterButtonPressed diff --git a/submodules/LegacyDataImport/Sources/LegacyChatImport.swift b/submodules/LegacyDataImport/Sources/LegacyChatImport.swift index c11f17e066..595b920e9b 100644 --- a/submodules/LegacyDataImport/Sources/LegacyChatImport.swift +++ b/submodules/LegacyDataImport/Sources/LegacyChatImport.swift @@ -405,7 +405,7 @@ private func loadLegacyMessages(account: TemporaryAccount, basePath: String, acc if let resourcePath = resourcePath, let image = UIImage(contentsOfFile: resourcePath) { dimensions = image.size } - representations.append(TelegramMediaImageRepresentation(dimensions: dimensions, resource: resource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(dimensions), resource: resource)) } } @@ -414,7 +414,7 @@ private func loadLegacyMessages(account: TemporaryAccount, basePath: String, acc if let image = UIImage(contentsOfFile: fullSizePath) { let resource: TelegramMediaResource = LocalFileMediaResource(fileId: arc4random64()) copyLocalFiles.append((resource, fullSizePath)) - representations.append(TelegramMediaImageRepresentation(dimensions: image.size, resource: resource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(image.size), resource: resource)) } } @@ -431,14 +431,14 @@ private func loadLegacyMessages(account: TemporaryAccount, basePath: String, acc } else if imageUrl.hasPrefix("file://"), let path = URL(string: imageUrl)?.path { copyLocalFiles.append((resource, path)) } - representations.append(TelegramMediaImageRepresentation(dimensions: sizeValue.cgSizeValue, resource: resource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(sizeValue.cgSizeValue), resource: resource)) } } var resource: TelegramMediaResource = LocalFileMediaResource(fileId: arc4random64()) var attributes: [TelegramMediaFileAttribute] = [] - attributes.append(.Video(duration: Int(item.duration), size: item.dimensions, flags: item.roundMessage ? .instantRoundVideo : [])) + attributes.append(.Video(duration: Int(item.duration), size: PixelDimensions(item.dimensions), flags: item.roundMessage ? .instantRoundVideo : [])) var size: Int32 = 0 if let videoUrl = item.videoInfo?.url(withQuality: 1, actualQuality: nil, actualSize: &size) { @@ -488,7 +488,7 @@ private func loadLegacyMessages(account: TemporaryAccount, basePath: String, acc resource = updatedResource copyLocalFiles.append((resource, pathFromLegacyImageUrl(basePath: basePath, url: imageUrl))) } - representations.append(TelegramMediaImageRepresentation(dimensions: sizeValue.cgSizeValue, resource: resource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(sizeValue.cgSizeValue), resource: resource)) } } @@ -512,7 +512,7 @@ private func loadLegacyMessages(account: TemporaryAccount, basePath: String, acc } else if let _ = attribute as? TGDocumentAttributeAnimated { attributes.append(.Animated) } else if let attribute = attribute as? TGDocumentAttributeVideo { - attributes.append(.Video(duration: Int(attribute.duration), size: attribute.size, flags: attribute.isRoundMessage ? .instantRoundVideo : [])) + attributes.append(.Video(duration: Int(attribute.duration), size: PixelDimensions(attribute.size), flags: attribute.isRoundMessage ? .instantRoundVideo : [])) } else if let attribute = attribute as? TGDocumentAttributeSticker { var packReference: StickerPackReference? if let reference = attribute.packReference as? TGStickerPackIdReference { @@ -522,7 +522,7 @@ private func loadLegacyMessages(account: TemporaryAccount, basePath: String, acc } attributes.append(.Sticker(displayText: attribute.alt ?? "", packReference: packReference, maskData: nil)) } else if let attribute = attribute as? TGDocumentAttributeImageSize { - attributes.append(.ImageSize(size: attribute.size)) + attributes.append(.ImageSize(size: PixelDimensions(attribute.size))) } } } diff --git a/submodules/LegacyDataImport/Sources/LegacyUserDataImport.swift b/submodules/LegacyDataImport/Sources/LegacyUserDataImport.swift index 431007d79f..51fec45c1f 100644 --- a/submodules/LegacyDataImport/Sources/LegacyUserDataImport.swift +++ b/submodules/LegacyDataImport/Sources/LegacyUserDataImport.swift @@ -18,10 +18,10 @@ func loadLegacyUser(database: SqliteInterface, id: Int32) -> (TelegramUser, Tele let photoBig = cursor.getString(at: 6) var photo: [TelegramMediaImageRepresentation] = [] if let resource = resourceFromLegacyImageUrl(photoSmall) { - photo.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: 80.0, height: 80.0), resource: resource)) + photo.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 80, height: 80), resource: resource)) } if let resource = resourceFromLegacyImageUrl(photoBig) { - photo.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: 600.0, height: 600.0), resource: resource)) + photo.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 600, height: 600), resource: resource)) } let user = TelegramUser(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: cursor.getInt32(at: 0)), accessHash: accessHash == 0 ? nil : .personal(accessHash), firstName: firstName.isEmpty ? nil : firstName, lastName: lastName.isEmpty ? nil : lastName, username: username.isEmpty ? nil : username, phone: phone.isEmpty ? nil : phone, photo: photo, botInfo: nil, restrictionInfo: nil, flags: []) diff --git a/submodules/LegacyMediaPickerUI/Sources/LegacyMediaPickers.swift b/submodules/LegacyMediaPickerUI/Sources/LegacyMediaPickers.swift index 9e61646b24..8b52458385 100644 --- a/submodules/LegacyMediaPickerUI/Sources/LegacyMediaPickers.swift +++ b/submodules/LegacyMediaPickerUI/Sources/LegacyMediaPickers.swift @@ -238,7 +238,7 @@ public func legacyEnqueueGifMessage(account: Account, data: Data) -> Signal Signal SSignal { let encoder = PostboxEncoder() encoder.encodeRootObject(thumbnail.resource) let dataString = encoder.makeData().base64EncodedString(options: []) - imageInfo.addImage(with: thumbnail.dimensions, url: dataString) + imageInfo.addImage(with: thumbnail.dimensions.cgSize, url: dataString) document.thumbnailInfo = imageInfo } var attributes: [Any] = [] @@ -77,7 +77,7 @@ func legacyComponentsStickers(postbox: Postbox, namespace: Int32) -> SSignal { return TGStickerMaskDescription(n: $0.n, point: CGPoint(x: CGFloat($0.x), y: CGFloat($0.y)), zoom: CGFloat($0.zoom)) })) case let .ImageSize(size): - attributes.append(TGDocumentAttributeImageSize(size: size)) + attributes.append(TGDocumentAttributeImageSize(size: size.cgSize)) default: break } @@ -198,7 +198,7 @@ final class LegacyStickerImageDataSource: TGImageDataSource { var previewRepresentations: [TelegramMediaImageRepresentation] = [] if let legacyThumbnailUri = args["legacyThumbnailUri"] as? String, let data = Data(base64Encoded: legacyThumbnailUri, options: []) { if let resource = PostboxDecoder(buffer: MemoryBuffer(data: data)).decodeRootObject() as? TelegramMediaResource { - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: 140.0, height: 140.0), resource: resource)) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 140, height: 140), resource: resource)) } } diff --git a/submodules/MapResourceToAvatarSizes/Sources/MapResourceToAvatarSizes.swift b/submodules/MapResourceToAvatarSizes/Sources/MapResourceToAvatarSizes.swift index 5e37ba2985..9c4963d8dd 100644 --- a/submodules/MapResourceToAvatarSizes/Sources/MapResourceToAvatarSizes.swift +++ b/submodules/MapResourceToAvatarSizes/Sources/MapResourceToAvatarSizes.swift @@ -4,7 +4,6 @@ import SwiftSignalKit import Postbox import TelegramCore import SyncCore -import SyncCore import Display public func mapResourceToAvatarSizes(postbox: Postbox, resource: MediaResource, representations: [TelegramMediaImageRepresentation]) -> Signal<[Int: Data], NoError> { @@ -16,7 +15,7 @@ public func mapResourceToAvatarSizes(postbox: Postbox, resource: MediaResource, } var result: [Int: Data] = [:] for i in 0 ..< representations.count { - if let scaledImage = generateScaledImage(image: image, size: representations[i].dimensions, scale: 1.0), let scaledData = scaledImage.jpegData(compressionQuality: 0.8) { + if let scaledImage = generateScaledImage(image: image, size: representations[i].dimensions.cgSize, scale: 1.0), let scaledData = scaledImage.jpegData(compressionQuality: 0.8) { result[i] = scaledData } } diff --git a/submodules/MediaPlayer/Sources/MediaPlayerAudioRenderer.swift b/submodules/MediaPlayer/Sources/MediaPlayerAudioRenderer.swift index 0ebf04d0e8..32cea5361d 100644 --- a/submodules/MediaPlayer/Sources/MediaPlayerAudioRenderer.swift +++ b/submodules/MediaPlayer/Sources/MediaPlayerAudioRenderer.swift @@ -335,6 +335,8 @@ private final class AudioPlayerRendererContext { assert(audioPlayerRendererQueue.isCurrent()) if self.audioGraph == nil { + let startTime = CFAbsoluteTimeGetCurrent() + var maybeAudioGraph: AUGraph? guard NewAUGraph(&maybeAudioGraph) == noErr, let audioGraph = maybeAudioGraph else { return @@ -428,6 +430,8 @@ private final class AudioPlayerRendererContext { return } + print("MediaPlayerAudioRenderer initialize audio unit: \((CFAbsoluteTimeGetCurrent() - startTime) * 1000.0) ms") + self.audioGraph = audioGraph self.timePitchAudioUnit = timePitchAudioUnit self.outputAudioUnit = outputAudioUnit @@ -497,10 +501,14 @@ private final class AudioPlayerRendererContext { assert(audioPlayerRendererQueue.isCurrent()) if let audioGraph = self.audioGraph { + let startTime = CFAbsoluteTimeGetCurrent() + guard AUGraphStart(audioGraph) == noErr else { self.closeAudioUnit() return } + + print("MediaPlayerAudioRenderer start audio unit: \((CFAbsoluteTimeGetCurrent() - startTime) * 1000.0) ms") } } diff --git a/submodules/MtProtoKit/MTAes.h b/submodules/MtProtoKit/MTAes.h index 3c5996c6f4..db2a205745 100644 --- a/submodules/MtProtoKit/MTAes.h +++ b/submodules/MtProtoKit/MTAes.h @@ -1,12 +1,7 @@ #import -#if defined(MtProtoKitDynamicFramework) -# import -#elif defined(MtProtoKitMacFramework) -# import -#else -# import -#endif +#import + void MyAesIgeEncrypt(const void *inBytes, int length, void *outBytes, const void *key, int keyLength, void *iv); void MyAesIgeDecrypt(const void *inBytes, int length, void *outBytes, const void *key, int keyLength, void *iv); diff --git a/submodules/MtProtoKit/MTBackupAddressSignals.m b/submodules/MtProtoKit/MTBackupAddressSignals.m index 9ea3c985b2..e2464f9161 100644 --- a/submodules/MtProtoKit/MTBackupAddressSignals.m +++ b/submodules/MtProtoKit/MTBackupAddressSignals.m @@ -1,48 +1,18 @@ #import "MTBackupAddressSignals.h" -#if defined(MtProtoKitDynamicFramework) -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -#elif defined(MtProtoKitMacFramework) -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -#else -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -#endif +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import static NSData *base64_decode(NSString *str) { if ([NSData instancesRespondToSelector:@selector(initWithBase64EncodedString:options:)]) { diff --git a/submodules/MtProtoKit/MTConnectionProbing.m b/submodules/MtProtoKit/MTConnectionProbing.m index 2c146c9345..96f798975e 100644 --- a/submodules/MtProtoKit/MTConnectionProbing.m +++ b/submodules/MtProtoKit/MTConnectionProbing.m @@ -1,54 +1,20 @@ #import "MTConnectionProbing.h" -#if defined(MtProtoKitDynamicFramework) -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -#elif defined(MtProtoKitMacFramework) -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -#else -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -#endif +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import #import "PingFoundation.h" diff --git a/submodules/MtProtoKit/MTDNS.m b/submodules/MtProtoKit/MTDNS.m index 2a3a79a063..3e759df9a8 100644 --- a/submodules/MtProtoKit/MTDNS.m +++ b/submodules/MtProtoKit/MTDNS.m @@ -8,55 +8,21 @@ #import #import -#if defined(MtProtoKitDynamicFramework) -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -#elif defined(MtProtoKitMacFramework) -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -#else -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -# import -#endif +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import #import #import diff --git a/submodules/MtProtoKit/MTNetworkUsageManager.m b/submodules/MtProtoKit/MTNetworkUsageManager.m index 6447b3367d..9c0e81ccd9 100644 --- a/submodules/MtProtoKit/MTNetworkUsageManager.m +++ b/submodules/MtProtoKit/MTNetworkUsageManager.m @@ -3,25 +3,11 @@ #include #import -#if defined(MtProtoKitDynamicFramework) -# import -# import -# import -# import -# import -#elif defined(MtProtoKitMacFramework) -# import -# import -# import -# import -# import -#else -# import -# import -# import -# import -# import -#endif +#import +#import +#import +#import +#import static int offsetForInterface(MTNetworkUsageCalculationInfo *info, MTNetworkUsageManagerInterface interface, bool incoming) { switch (interface) { diff --git a/submodules/MtProtoKit/MTProtoKit/MTContext.h b/submodules/MtProtoKit/MTProtoKit/MTContext.h index 3191296bd2..9a80e6f6f1 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTContext.h +++ b/submodules/MtProtoKit/MTProtoKit/MTContext.h @@ -1,12 +1,6 @@ #import -#if defined(MtProtoKitDynamicFramework) -# import -#elif defined(MtProtoKitMacFramework) -# import -#else -# import -#endif +#import #import diff --git a/submodules/MtProtoKit/MTProtoKit/MTContext.m b/submodules/MtProtoKit/MTProtoKit/MTContext.m index 3a59fe8ae8..28311c25b8 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTContext.m +++ b/submodules/MtProtoKit/MTProtoKit/MTContext.m @@ -29,16 +29,8 @@ #import "MTTransportSchemeStats.h" -#if defined(MtProtoKitDynamicFramework) -# import -# import -#elif defined(MtProtoKitMacFramework) -# import -# import -#else -# import -# import -#endif +#import +#import @implementation MTContextBlockChangeListener diff --git a/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthAction.h b/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthAction.h index 1bee2467ca..ee7cb48685 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthAction.h +++ b/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthAction.h @@ -1,12 +1,7 @@ #import -#if defined(MtProtoKitDynamicFramework) -# import -#elif defined(MtProtoKitMacFramework) -# import -#else -# import -#endif +#import + @class MTContext; @class MTDatacenterAuthAction; diff --git a/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthAction.m b/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthAction.m index 53df9e0e68..39991daff9 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthAction.m +++ b/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthAction.m @@ -10,13 +10,8 @@ #import "MTSerialization.h" #import "MTDatacenterAddressSet.h" -#if defined(MtProtoKitDynamicFramework) -# import -#elif defined(MtProtoKitMacFramework) -# import -#else -# import -#endif +#import + #import "MTDatacenterAuthMessageService.h" #import "MTRequestMessageService.h" diff --git a/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthMessageService.h b/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthMessageService.h index 7689ca6f5b..82a07cfd4d 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthMessageService.h +++ b/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthMessageService.h @@ -1,12 +1,6 @@ -#if defined(MtProtoKitDynamicFramework) -# import -#elif defined(MtProtoKitMacFramework) -# import -#else -# import -#endif +#import @class MTContext; @class MTDatacenterAuthMessageService; diff --git a/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthMessageService.m b/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthMessageService.m index 11ad9cede5..a91d324576 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthMessageService.m +++ b/submodules/MtProtoKit/MTProtoKit/MTDatacenterAuthMessageService.m @@ -402,8 +402,7 @@ typedef enum { arc4random_buf(&random, 1); [dataWithHash appendBytes:&random length:1]; } - - NSData *encryptedData = MTRsaEncrypt([publicKey objectForKey:@"key"], dataWithHash); + NSData *encryptedData = MTRsaEncrypt(_encryptionProvider, [publicKey objectForKey:@"key"], dataWithHash); if (encryptedData.length < 256) { NSMutableData *newEncryptedData = [[NSMutableData alloc] init]; @@ -440,7 +439,7 @@ typedef enum { [dataWithHash appendBytes:&random length:1]; } - NSData *encryptedData = MTRsaEncrypt([publicKey objectForKey:@"key"], dataWithHash); + NSData *encryptedData = MTRsaEncrypt(_encryptionProvider, [publicKey objectForKey:@"key"], dataWithHash); if (encryptedData.length < 256) { NSMutableData *newEncryptedData = [[NSMutableData alloc] init]; diff --git a/submodules/MtProtoKit/MTProtoKit/MTEncryption.h b/submodules/MtProtoKit/MTProtoKit/MTEncryption.h index ab019b88ca..e197db45d1 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTEncryption.h +++ b/submodules/MtProtoKit/MTProtoKit/MTEncryption.h @@ -28,7 +28,7 @@ void MTAesDecryptInplaceAndModifyIv(NSMutableData *data, NSData *key, NSMutableD void MTAesDecryptBytesInplaceAndModifyIv(void *data, NSInteger length, NSData *key, void *iv); NSData *MTAesEncrypt(NSData *data, NSData *key, NSData *iv); NSData *MTAesDecrypt(NSData *data, NSData *key, NSData *iv); -NSData *MTRsaEncrypt(NSString *publicKey, NSData *data); +NSData *MTRsaEncrypt(id provider, NSString *publicKey, NSData *data); NSData *MTExp(id provider, NSData *base, NSData *exp, NSData *modulus); NSData *MTModSub(id provider, NSData *a, NSData *b, NSData *modulus); NSData *MTModMul(id provider, NSData *a, NSData *b, NSData *modulus); diff --git a/submodules/MtProtoKit/MTProtoKit/MTEncryption.m b/submodules/MtProtoKit/MTProtoKit/MTEncryption.m index 9670b2e599..9502616682 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTEncryption.m +++ b/submodules/MtProtoKit/MTProtoKit/MTEncryption.m @@ -291,7 +291,7 @@ NSData *MTAesDecrypt(NSData *data, NSData *key, NSData *iv) return resultData; } -NSData *MTRsaEncrypt(NSString *publicKey, NSData *data) +NSData *MTRsaEncrypt(id provider, NSString *publicKey, NSData *data) { #if TARGET_OS_IOS NSMutableData *updatedData = [[NSMutableData alloc] initWithData:data]; @@ -301,32 +301,7 @@ NSData *MTRsaEncrypt(NSString *publicKey, NSData *data) } return [MTRsa encryptData:updatedData publicKey:publicKey]; #else - BIO *keyBio = BIO_new(BIO_s_mem()); - const char *keyData = [publicKey UTF8String]; - BIO_write(keyBio, keyData, (int)publicKey.length); - RSA *rsaKey = PEM_read_bio_RSAPublicKey(keyBio, NULL, NULL, NULL); - BIO_free(keyBio); - - BN_CTX *ctx = BN_CTX_new(); - BIGNUM *a = BN_bin2bn(data.bytes, (int)data.length, NULL); - BIGNUM *r = BN_new(); - - - - BN_mod_exp(r, a, RSA_get0_e(rsaKey), RSA_get0_n(rsaKey), ctx); - - unsigned char *res = malloc((size_t)BN_num_bytes(r)); - int resLen = BN_bn2bin(r, res); - - BN_CTX_free(ctx); - BN_free(a); - BN_free(r); - - RSA_free(rsaKey); - - NSData *result = [[NSData alloc] initWithBytesNoCopy:res length:(NSUInteger)resLen freeWhenDone:true]; - - return result; + return [provider macosRSAEncrypt:publicKey data:data]; #endif } diff --git a/submodules/MtProtoKit/MTProtoKit/MTFileBasedKeychain.h b/submodules/MtProtoKit/MTProtoKit/MTFileBasedKeychain.h index d2dba51b0b..c392b05fd9 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTFileBasedKeychain.h +++ b/submodules/MtProtoKit/MTProtoKit/MTFileBasedKeychain.h @@ -1,12 +1,7 @@ #import -#if defined(MtProtoKitDynamicFramework) -# import -#elif defined(MtProtoKitMacFramework) -# import -#else -# import -#endif +#import + NS_ASSUME_NONNULL_BEGIN diff --git a/submodules/MtProtoKit/MTProtoKit/MTHttpRequestOperation.m b/submodules/MtProtoKit/MTProtoKit/MTHttpRequestOperation.m index 0e1a47f41b..e09912530a 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTHttpRequestOperation.m +++ b/submodules/MtProtoKit/MTProtoKit/MTHttpRequestOperation.m @@ -1,17 +1,8 @@ #import "MTHttpRequestOperation.h" #import "../thirdparty/AFNetworking/AFHTTPRequestOperation.h" - -#if defined(MtProtoKitDynamicFramework) -# import -# import -#elif defined(MtProtoKitMacFramework) -# import -# import -#else -# import -# import -#endif +#import +#import @implementation MTHttpRequestOperation diff --git a/submodules/MtProtoKit/MTProtoKit/MTProto.m b/submodules/MtProtoKit/MTProtoKit/MTProto.m index b93fc90721..f8372ac755 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTProto.m +++ b/submodules/MtProtoKit/MTProtoKit/MTProto.m @@ -56,16 +56,8 @@ #import "MTTime.h" -#if defined(MtProtoKitDynamicFramework) -# import -# import -#elif defined(MtProtoKitMacFramework) -# import -# import -#else -# import -# import -#endif +#import +#import typedef enum { MTProtoStateAwaitingDatacenterScheme = 1, diff --git a/submodules/MtProtoKit/MTProtoKit/MTRequestMessageService.h b/submodules/MtProtoKit/MTProtoKit/MTRequestMessageService.h index 95fee241a8..0ba4209fc4 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTRequestMessageService.h +++ b/submodules/MtProtoKit/MTProtoKit/MTRequestMessageService.h @@ -1,12 +1,6 @@ -#if defined(MtProtoKitDynamicFramework) -# import -#elif defined(MtProtoKitMacFramework) -# import -#else -# import -#endif +#import @class MTContext; @class MTRequest; diff --git a/submodules/MtProtoKit/MTProtoKit/MTResendMessageService.h b/submodules/MtProtoKit/MTProtoKit/MTResendMessageService.h index a94a3fa7aa..05c28b4555 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTResendMessageService.h +++ b/submodules/MtProtoKit/MTProtoKit/MTResendMessageService.h @@ -1,12 +1,6 @@ -#if defined(MtProtoKitDynamicFramework) -# import -#elif defined(MtProtoKitMacFramework) -# import -#else -# import -#endif +#import @class MTResendMessageService; diff --git a/submodules/MtProtoKit/MTProtoKit/MTSerialization.h b/submodules/MtProtoKit/MTProtoKit/MTSerialization.h index 4c100e6f14..bc197ee876 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTSerialization.h +++ b/submodules/MtProtoKit/MTProtoKit/MTSerialization.h @@ -2,19 +2,9 @@ #import -#if defined(MtProtoKitDynamicFramework) -# import -# import -# import -#elif defined(MtProtoKitMacFramework) -# import -# import -# import -#else -# import -# import -# import -#endif +#import +#import +#import typedef MTExportedAuthorizationData *(^MTExportAuthorizationResponseParser)(NSData *); typedef MTDatacenterAddressListData *(^MTRequestDatacenterAddressListParser)(NSData *); diff --git a/submodules/MtProtoKit/MTProtoKit/MTTcpTransport.h b/submodules/MtProtoKit/MTProtoKit/MTTcpTransport.h index c70d044c6f..c53639149d 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTTcpTransport.h +++ b/submodules/MtProtoKit/MTProtoKit/MTTcpTransport.h @@ -1,12 +1,6 @@ -#if defined(MtProtoKitDynamicFramework) -# import -#elif defined(MtProtoKitMacFramework) -# import -#else -# import -#endif +#import @interface MTTcpTransport : MTTransport diff --git a/submodules/MtProtoKit/MTProtoKit/MTTimeSyncMessageService.h b/submodules/MtProtoKit/MTProtoKit/MTTimeSyncMessageService.h index 0125669bee..287185d6b6 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTTimeSyncMessageService.h +++ b/submodules/MtProtoKit/MTProtoKit/MTTimeSyncMessageService.h @@ -1,12 +1,5 @@ - -#if defined(MtProtoKitDynamicFramework) -# import -#elif defined(MtProtoKitMacFramework) -# import -#else -# import -#endif +#import @class MTTimeSyncMessageService; diff --git a/submodules/MtProtoKit/MTProtoKit/MTTransport.h b/submodules/MtProtoKit/MTProtoKit/MTTransport.h index 5e17ec5a4b..fcc2d4b241 100644 --- a/submodules/MtProtoKit/MTProtoKit/MTTransport.h +++ b/submodules/MtProtoKit/MTProtoKit/MTTransport.h @@ -12,13 +12,8 @@ @class MTNetworkUsageCalculationInfo; @class MTSocksProxySettings; -#if defined(MtProtoKitDynamicFramework) -# import -#elif defined(MtProtoKitMacFramework) -# import -#else -# import -#endif +#import + @protocol MTTransportDelegate diff --git a/submodules/MtProtoKit/MTRsa.h b/submodules/MtProtoKit/MTRsa.h index 123319aa21..e53b171ee5 100644 --- a/submodules/MtProtoKit/MTRsa.h +++ b/submodules/MtProtoKit/MTRsa.h @@ -1,5 +1,5 @@ #import - +#if TARGET_OS_IOS @interface MTRsa : NSObject // return base64 encoded string @@ -19,3 +19,4 @@ + (NSData *)decryptData:(NSData *)data privateKey:(NSString *)privKey; @end +#endif diff --git a/submodules/MtProtoKit/MTRsa.m b/submodules/MtProtoKit/MTRsa.m index eb25dd608a..92edd5bf33 100644 --- a/submodules/MtProtoKit/MTRsa.m +++ b/submodules/MtProtoKit/MTRsa.m @@ -6,7 +6,7 @@ */ #import - +#if TARGET_OS_IOS @implementation MTRsa NSString *MTStringByEncodingInBase64(NSData *data) { @@ -439,3 +439,4 @@ static NSData *base64_decode(NSString *str) { /* END: Encryption & Decryption with RSA public key */ @end +#endif diff --git a/submodules/MtProtoKit/MtProtoKitDynamic/Info.plist b/submodules/MtProtoKit/MtProtoKitDynamic/Info.plist deleted file mode 100644 index d3de8eefb6..0000000000 --- a/submodules/MtProtoKit/MtProtoKitDynamic/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/submodules/MtProtoKit/MtProtoKitDynamic/MtProtoKitDynamic.h b/submodules/MtProtoKit/MtProtoKitDynamic/MtProtoKitDynamic.h deleted file mode 100644 index 80ab27624e..0000000000 --- a/submodules/MtProtoKit/MtProtoKitDynamic/MtProtoKitDynamic.h +++ /dev/null @@ -1,79 +0,0 @@ -// -// MtProtoKitDynamic.h -// MtProtoKitDynamic -// -// Created by Peter on 08/07/15. -// Copyright (c) 2015 Telegram. All rights reserved. -// - -#import - -//! Project version number for MtProtoKitDynamic. -FOUNDATION_EXPORT double MtProtoKitDynamicVersionNumber; - -//! Project version string for MtProtoKitDynamic. -FOUNDATION_EXPORT const unsigned char MtProtoKitDynamicVersionString[]; - -#ifndef MtProtoKitDynamicFramework -# define MtProtoKitDynamicFramework 1 -#endif - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import diff --git a/submodules/MtProtoKit/MtProtoKitDynamicTests/Info.plist b/submodules/MtProtoKit/MtProtoKitDynamicTests/Info.plist deleted file mode 100644 index ba72822e87..0000000000 --- a/submodules/MtProtoKit/MtProtoKitDynamicTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/submodules/MtProtoKit/MtProtoKitDynamicTests/MtProtoKitDynamicTests.m b/submodules/MtProtoKit/MtProtoKitDynamicTests/MtProtoKitDynamicTests.m deleted file mode 100644 index 03419f04d1..0000000000 --- a/submodules/MtProtoKit/MtProtoKitDynamicTests/MtProtoKitDynamicTests.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// MtProtoKitDynamicTests.m -// MtProtoKitDynamicTests -// -// Created by Peter on 08/07/15. -// Copyright (c) 2015 Telegram. All rights reserved. -// - -#import -#import - -@interface MtProtoKitDynamicTests : XCTestCase - -@end - -@implementation MtProtoKitDynamicTests - -- (void)setUp { - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample { - // This is an example of a functional test case. - XCTAssert(YES, @"Pass"); -} - -- (void)testPerformanceExample { - // This is an example of a performance test case. - [self measureBlock:^{ - // Put the code you want to measure the time of here. - }]; -} - -@end diff --git a/submodules/MtProtoKit/MtProtoKitMac/Info.plist b/submodules/MtProtoKit/MtProtoKitMac/Info.plist deleted file mode 100644 index fb8e650960..0000000000 --- a/submodules/MtProtoKit/MtProtoKitMac/Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSHumanReadableCopyright - Copyright © 2015 Telegram. All rights reserved. - NSPrincipalClass - - - diff --git a/submodules/MtProtoKit/MtProtoKitMac/MtProtoKitMac.h b/submodules/MtProtoKit/MtProtoKitMac/MtProtoKitMac.h deleted file mode 100644 index bc5d0d3ba7..0000000000 --- a/submodules/MtProtoKit/MtProtoKitMac/MtProtoKitMac.h +++ /dev/null @@ -1,78 +0,0 @@ -// -// MtProtoKitMac.h -// MtProtoKitMac -// -// Created by Peter on 01/05/15. -// Copyright (c) 2015 Telegram. All rights reserved. -// - -#import - -//! Project version number for MtProtoKitMac. -FOUNDATION_EXPORT double MtProtoKitMacVersionNumber; - -//! Project version string for MtProtoKitMac. -FOUNDATION_EXPORT const unsigned char MtProtoKitMacVersionString[]; - -#ifndef MtProtoKitMacFramework -# define MtProtoKitMacFramework 1 -#endif - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import diff --git a/submodules/MtProtoKit/MtProtoKitMacTests/Info.plist b/submodules/MtProtoKit/MtProtoKitMacTests/Info.plist deleted file mode 100644 index 29dacae6b5..0000000000 --- a/submodules/MtProtoKit/MtProtoKitMacTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - org.telegram.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/submodules/MtProtoKit/MtProtoKitMacTests/MtProtoKitMacTests.m b/submodules/MtProtoKit/MtProtoKitMacTests/MtProtoKitMacTests.m deleted file mode 100644 index 438bf46480..0000000000 --- a/submodules/MtProtoKit/MtProtoKitMacTests/MtProtoKitMacTests.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// MtProtoKitMacTests.m -// MtProtoKitMacTests -// -// Created by Peter on 01/05/15. -// Copyright (c) 2015 Telegram. All rights reserved. -// - -#import -#import - -@interface MtProtoKitMacTests : XCTestCase - -@end - -@implementation MtProtoKitMacTests - -- (void)setUp { - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample { - // This is an example of a functional test case. - XCTAssert(YES, @"Pass"); -} - -- (void)testPerformanceExample { - // This is an example of a performance test case. - [self measureBlock:^{ - // Put the code you want to measure the time of here. - }]; -} - -@end diff --git a/submodules/MtProtoKit/MtProtoKitOSX/MtProtoKitOSX-Info.plist b/submodules/MtProtoKit/MtProtoKitOSX/MtProtoKitOSX-Info.plist deleted file mode 100644 index 6e007e7768..0000000000 --- a/submodules/MtProtoKit/MtProtoKitOSX/MtProtoKitOSX-Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - - CFBundleIdentifier - com.telegram.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSHumanReadableCopyright - Copyright © 2014 Telegram. All rights reserved. - NSPrincipalClass - - - diff --git a/submodules/MtProtoKit/MtProtoKitOSX/MtProtoKitOSX-Prefix.pch b/submodules/MtProtoKit/MtProtoKitOSX/MtProtoKitOSX-Prefix.pch deleted file mode 100644 index 2d9f72e2f7..0000000000 --- a/submodules/MtProtoKit/MtProtoKitOSX/MtProtoKitOSX-Prefix.pch +++ /dev/null @@ -1,10 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#ifdef __OBJC__ - #import -#endif - diff --git a/submodules/MtProtoKit/MtProtoKitOSX/en.lproj/InfoPlist.strings b/submodules/MtProtoKit/MtProtoKitOSX/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28ff8f..0000000000 --- a/submodules/MtProtoKit/MtProtoKitOSX/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/submodules/MtProtoKit/MtProtoKitStabilityTests/Info.plist b/submodules/MtProtoKit/MtProtoKitStabilityTests/Info.plist deleted file mode 100644 index ba72822e87..0000000000 --- a/submodules/MtProtoKit/MtProtoKitStabilityTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/submodules/MtProtoKit/MtProtoKitStabilityTests/MtProtoKitStabilityTests.m b/submodules/MtProtoKit/MtProtoKitStabilityTests/MtProtoKitStabilityTests.m deleted file mode 100644 index ca7e23faa9..0000000000 --- a/submodules/MtProtoKit/MtProtoKitStabilityTests/MtProtoKitStabilityTests.m +++ /dev/null @@ -1,77 +0,0 @@ -#import - -#import -#import -#import - -@interface TestSerialization : NSObject - -@end - -@implementation TestSerialization - -- (NSUInteger)currentLayer { - return 42; -} - -- (id)parseMessage:(NSData *)__unused data { - return nil; -} - -- (MTExportAuthorizationResponseParser)exportAuthorization:(int32_t)datacenterId data:(__autoreleasing NSData **)data { - return nil; -} - -- (NSData *)importAuthorization:(int32_t)authId bytes:(NSData *)bytes { - return nil; -} - -- (MTRequestDatacenterAddressListParser)requestDatacenterAddressList:(int32_t)datacenterId data:(__autoreleasing NSData **)data { - return nil; -} - -@end - -@interface MtProtoKitStabilityTests : XCTestCase { - MTTcpTransport *_transport; -} - -@end - -@implementation MtProtoKitStabilityTests - -- (void)setUp { - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample { - MTApiEnvironment *apiEnvironment = [[MTApiEnvironment alloc] init]; - MTContext *context = [[MTContext alloc] initWithSerialization:[[TestSerialization alloc] init] apiEnvironment:apiEnvironment]; - - //for (int i = 0; i < 100; i++) { - _transport = [[MTTcpTransport alloc] initWithDelegate:self context:context datacenterId:1 address:[[MTDatacenterAddress alloc] initWithIp:@"149.154.175.50" port:443 preferForMedia:false]]; - _transport.delegate = self; - [_transport setDelegateNeedsTransaction]; - //} - sleep(2); -} - -- (void)transportConnectionStateChanged:(MTTransport *)transport isConnected:(bool)isConnected { - if (isConnected) { - _transport = nil; - } -} - -- (void)transportReadyForTransaction:(MTTransport *)transport transportSpecificTransaction:(MTMessageTransaction *)transportSpecificTransaction forceConfirmations:(bool)forceConfirmations transactionReady:(void (^)(NSArray *))transactionReady { - transactionReady(@[[[MTTransportTransaction alloc] initWithPayload:[NSData data] completion:^(bool success, id transactionId) { - - }]]); -} - -@end diff --git a/submodules/MtProtoKit/MtProtoKitTests/Info.plist b/submodules/MtProtoKit/MtProtoKitTests/Info.plist deleted file mode 100644 index 29dacae6b5..0000000000 --- a/submodules/MtProtoKit/MtProtoKitTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - org.telegram.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/submodules/MtProtoKit/MtProtoKitTests/MtProtoKitTests-Info.plist b/submodules/MtProtoKit/MtProtoKitTests/MtProtoKitTests-Info.plist deleted file mode 100644 index 0a5b184797..0000000000 --- a/submodules/MtProtoKit/MtProtoKitTests/MtProtoKitTests-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - com.telegram.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/submodules/MtProtoKit/MtProtoKitTests/MtProtoKitTests.m b/submodules/MtProtoKit/MtProtoKitTests/MtProtoKitTests.m deleted file mode 100644 index a3541d32db..0000000000 --- a/submodules/MtProtoKit/MtProtoKitTests/MtProtoKitTests.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// MtProtoKitTests.m -// MtProtoKitTests -// -// Created by Peter on 13/04/15. -// Copyright (c) 2015 Telegram. All rights reserved. -// - -#import -#import - -@interface MtProtoKitTests : XCTestCase - -@end - -@implementation MtProtoKitTests - -- (void)setUp { - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample { - // This is an example of a functional test case. - XCTAssert(YES, @"Pass"); -} - -- (void)testPerformanceExample { - // This is an example of a performance test case. - [self measureBlock:^{ - // Put the code you want to measure the time of here. - }]; -} - -@end diff --git a/submodules/MtProtoKit/MtProtoKitTests/en.lproj/InfoPlist.strings b/submodules/MtProtoKit/MtProtoKitTests/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28ff8f..0000000000 --- a/submodules/MtProtoKit/MtProtoKitTests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/submodules/MtProtoKit/MtProtoKit_Xcode.xcodeproj/project.pbxproj b/submodules/MtProtoKit/MtProtoKit_Xcode.xcodeproj/project.pbxproj deleted file mode 100644 index 0957229225..0000000000 --- a/submodules/MtProtoKit/MtProtoKit_Xcode.xcodeproj/project.pbxproj +++ /dev/null @@ -1,6411 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - D00083C922DD33E500EC418C /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D00083C822DD33E500EC418C /* libc++.tbd */; }; - D00354681C173BF0006610DA /* MtProtoKitStabilityTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D00354671C173BF0006610DA /* MtProtoKitStabilityTests.m */; }; - D003546A1C173BF0006610DA /* MtProtoKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0CB05F71ADC4483005E298F /* MtProtoKit.framework */; }; - D00354701C173CB9006610DA /* SSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0580ABE1B0F3E7100E8235B /* SSignalKit.framework */; }; - D00354721C173CD0006610DA /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D00354711C173CD0006610DA /* libz.tbd */; }; - D00354741C173CD9006610DA /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D00354731C173CD9006610DA /* SystemConfiguration.framework */; }; - D010DB7D1D70ABEE0012AD96 /* MTRsa.h in Headers */ = {isa = PBXBuildFile; fileRef = D010DB7B1D70ABEE0012AD96 /* MTRsa.h */; }; - D010DB7E1D70ABEE0012AD96 /* MTRsa.m in Sources */ = {isa = PBXBuildFile; fileRef = D010DB7C1D70ABEE0012AD96 /* MTRsa.m */; }; - D010DB811D70B3B90012AD96 /* MTAes.h in Headers */ = {isa = PBXBuildFile; fileRef = D010DB7F1D70B3B90012AD96 /* MTAes.h */; }; - D010DB821D70B3B90012AD96 /* MTAes.m in Sources */ = {isa = PBXBuildFile; fileRef = D010DB801D70B3B90012AD96 /* MTAes.m */; }; - D0119CC120CAD34800895300 /* MTConnectionProbing.h in Headers */ = {isa = PBXBuildFile; fileRef = D0119CBF20CAD34800895300 /* MTConnectionProbing.h */; }; - D0119CC220CAD34800895300 /* MTConnectionProbing.h in Headers */ = {isa = PBXBuildFile; fileRef = D0119CBF20CAD34800895300 /* MTConnectionProbing.h */; }; - D0119CC320CAD34800895300 /* MTConnectionProbing.h in Headers */ = {isa = PBXBuildFile; fileRef = D0119CBF20CAD34800895300 /* MTConnectionProbing.h */; }; - D0119CC420CAD34800895300 /* MTConnectionProbing.m in Sources */ = {isa = PBXBuildFile; fileRef = D0119CC020CAD34800895300 /* MTConnectionProbing.m */; }; - D0119CC520CAD34800895300 /* MTConnectionProbing.m in Sources */ = {isa = PBXBuildFile; fileRef = D0119CC020CAD34800895300 /* MTConnectionProbing.m */; }; - D0119CC620CAD34800895300 /* MTConnectionProbing.m in Sources */ = {isa = PBXBuildFile; fileRef = D0119CC020CAD34800895300 /* MTConnectionProbing.m */; }; - D0119CC920CAD65D00895300 /* PingFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = D0119CC720CAD65D00895300 /* PingFoundation.h */; }; - D0119CCA20CAD65D00895300 /* PingFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = D0119CC720CAD65D00895300 /* PingFoundation.h */; }; - D0119CCB20CAD65D00895300 /* PingFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = D0119CC720CAD65D00895300 /* PingFoundation.h */; }; - D0119CCC20CAD65D00895300 /* PingFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = D0119CC820CAD65D00895300 /* PingFoundation.m */; }; - D0119CCD20CAD65D00895300 /* PingFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = D0119CC820CAD65D00895300 /* PingFoundation.m */; }; - D0119CCE20CAD65D00895300 /* PingFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = D0119CC820CAD65D00895300 /* PingFoundation.m */; }; - D015E018225CD19E00CB9E8A /* MTGzip.h in Headers */ = {isa = PBXBuildFile; fileRef = D015E016225CD19E00CB9E8A /* MTGzip.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D015E019225CD19E00CB9E8A /* MTGzip.h in Headers */ = {isa = PBXBuildFile; fileRef = D015E016225CD19E00CB9E8A /* MTGzip.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D015E01A225CD19E00CB9E8A /* MTGzip.h in Headers */ = {isa = PBXBuildFile; fileRef = D015E016225CD19E00CB9E8A /* MTGzip.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D015E01B225CD19E00CB9E8A /* MTGzip.m in Sources */ = {isa = PBXBuildFile; fileRef = D015E017225CD19E00CB9E8A /* MTGzip.m */; }; - D015E01C225CD19E00CB9E8A /* MTGzip.m in Sources */ = {isa = PBXBuildFile; fileRef = D015E017225CD19E00CB9E8A /* MTGzip.m */; }; - D015E01D225CD19E00CB9E8A /* MTGzip.m in Sources */ = {isa = PBXBuildFile; fileRef = D015E017225CD19E00CB9E8A /* MTGzip.m */; }; - D018559022DDD36C00AC458A /* Client.h in Headers */ = {isa = PBXBuildFile; fileRef = D018558A22DDD36C00AC458A /* Client.h */; }; - D018559122DDD36C00AC458A /* TlObject.h in Headers */ = {isa = PBXBuildFile; fileRef = D018558B22DDD36C00AC458A /* TlObject.h */; }; - D018559222DDD36C00AC458A /* tonlib_api.h in Headers */ = {isa = PBXBuildFile; fileRef = D018558C22DDD36C00AC458A /* tonlib_api.h */; }; - D018559322DDD36C00AC458A /* int_types.h in Headers */ = {isa = PBXBuildFile; fileRef = D018558D22DDD36C00AC458A /* int_types.h */; }; - D018559422DDD36C00AC458A /* TonlibCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = D018558E22DDD36C00AC458A /* TonlibCallback.h */; }; - D018559522DDD36C00AC458A /* platform.h in Headers */ = {isa = PBXBuildFile; fileRef = D018558F22DDD36C00AC458A /* platform.h */; }; - D018559622DDD37300AC458A /* Client.h in Headers */ = {isa = PBXBuildFile; fileRef = D018558A22DDD36C00AC458A /* Client.h */; }; - D018559722DDD37300AC458A /* TlObject.h in Headers */ = {isa = PBXBuildFile; fileRef = D018558B22DDD36C00AC458A /* TlObject.h */; }; - D018559822DDD37300AC458A /* tonlib_api.h in Headers */ = {isa = PBXBuildFile; fileRef = D018558C22DDD36C00AC458A /* tonlib_api.h */; }; - D018559922DDD37300AC458A /* int_types.h in Headers */ = {isa = PBXBuildFile; fileRef = D018558D22DDD36C00AC458A /* int_types.h */; }; - D018559A22DDD37300AC458A /* TonlibCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = D018558E22DDD36C00AC458A /* TonlibCallback.h */; }; - D018559B22DDD37300AC458A /* platform.h in Headers */ = {isa = PBXBuildFile; fileRef = D018558F22DDD36C00AC458A /* platform.h */; }; - D0185E722089D265005E1A6C /* MTProxyConnectivity.h in Headers */ = {isa = PBXBuildFile; fileRef = D0185E702089D265005E1A6C /* MTProxyConnectivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0185E732089D265005E1A6C /* MTProxyConnectivity.h in Headers */ = {isa = PBXBuildFile; fileRef = D0185E702089D265005E1A6C /* MTProxyConnectivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0185E742089D265005E1A6C /* MTProxyConnectivity.h in Headers */ = {isa = PBXBuildFile; fileRef = D0185E702089D265005E1A6C /* MTProxyConnectivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0185E752089D265005E1A6C /* MTProxyConnectivity.m in Sources */ = {isa = PBXBuildFile; fileRef = D0185E712089D265005E1A6C /* MTProxyConnectivity.m */; }; - D0185E762089D265005E1A6C /* MTProxyConnectivity.m in Sources */ = {isa = PBXBuildFile; fileRef = D0185E712089D265005E1A6C /* MTProxyConnectivity.m */; }; - D0185E772089D265005E1A6C /* MTProxyConnectivity.m in Sources */ = {isa = PBXBuildFile; fileRef = D0185E712089D265005E1A6C /* MTProxyConnectivity.m */; }; - D020FAFA1D994E3100F279AA /* MTHttpRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D020FAF81D994E3100F279AA /* MTHttpRequestOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D020FAFB1D994E3100F279AA /* MTHttpRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D020FAF81D994E3100F279AA /* MTHttpRequestOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D020FAFC1D994E3100F279AA /* MTHttpRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D020FAF81D994E3100F279AA /* MTHttpRequestOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D020FAFD1D994E3100F279AA /* MTHttpRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D020FAF91D994E3100F279AA /* MTHttpRequestOperation.m */; }; - D020FAFE1D994E3100F279AA /* MTHttpRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D020FAF91D994E3100F279AA /* MTHttpRequestOperation.m */; }; - D020FAFF1D994E3100F279AA /* MTHttpRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D020FAF91D994E3100F279AA /* MTHttpRequestOperation.m */; }; - D0338739223BC115007A2CE4 /* MTPKCS.h in Headers */ = {isa = PBXBuildFile; fileRef = D0338737223BC115007A2CE4 /* MTPKCS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D033873A223BC115007A2CE4 /* MTPKCS.h in Headers */ = {isa = PBXBuildFile; fileRef = D0338737223BC115007A2CE4 /* MTPKCS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D033873B223BC115007A2CE4 /* MTPKCS.h in Headers */ = {isa = PBXBuildFile; fileRef = D0338737223BC115007A2CE4 /* MTPKCS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D033873C223BC115007A2CE4 /* MTPKCS.m in Sources */ = {isa = PBXBuildFile; fileRef = D0338738223BC115007A2CE4 /* MTPKCS.m */; }; - D033873D223BC115007A2CE4 /* MTPKCS.m in Sources */ = {isa = PBXBuildFile; fileRef = D0338738223BC115007A2CE4 /* MTPKCS.m */; }; - D033873E223BC115007A2CE4 /* MTPKCS.m in Sources */ = {isa = PBXBuildFile; fileRef = D0338738223BC115007A2CE4 /* MTPKCS.m */; }; - D038789E2332500A00DB441C /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D038789D2332500A00DB441C /* libc++.tbd */; }; - D03878A02332503300DB441C /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D038789F2332503300DB441C /* Security.framework */; }; - D03878A22332503E00DB441C /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878A12332503E00DB441C /* SystemConfiguration.framework */; }; - D03878A42332504600DB441C /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878A32332504600DB441C /* CFNetwork.framework */; }; - D03878BC2332506800DB441C /* libton_crypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878A52332506700DB441C /* libton_crypto.a */; }; - D03878BD2332506800DB441C /* libmemprof.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878A62332506700DB441C /* libmemprof.a */; }; - D03878BE2332506800DB441C /* libtonlib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878A72332506700DB441C /* libtonlib.a */; }; - D03878BF2332506800DB441C /* libtonlibjson_private.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878A82332506700DB441C /* libtonlibjson_private.a */; }; - D03878C02332506800DB441C /* libtdtl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878A92332506700DB441C /* libtdtl.a */; }; - D03878C12332506800DB441C /* libkeys.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878AA2332506700DB441C /* libkeys.a */; }; - D03878C22332506800DB441C /* libtdnet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878AB2332506700DB441C /* libtdnet.a */; }; - D03878C32332506800DB441C /* libtonlibjson_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878AC2332506700DB441C /* libtonlibjson_static.a */; }; - D03878C42332506800DB441C /* libfift.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878AD2332506700DB441C /* libfift.a */; }; - D03878C52332506800DB441C /* libtl_tonlib_api_json.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878AE2332506800DB441C /* libtl_tonlib_api_json.a */; }; - D03878C62332506800DB441C /* libtl-utils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878AF2332506800DB441C /* libtl-utils.a */; }; - D03878C72332506800DB441C /* libadnllite.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878B02332506800DB441C /* libadnllite.a */; }; - D03878C82332506800DB441C /* libtl_tonlib_api.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878B12332506800DB441C /* libtl_tonlib_api.a */; }; - D03878C92332506800DB441C /* libtdutils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878B22332506800DB441C /* libtdutils.a */; }; - D03878CA2332506800DB441C /* libterminal.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878B32332506800DB441C /* libterminal.a */; }; - D03878CB2332506800DB441C /* libtl_api.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878B42332506800DB441C /* libtl_api.a */; }; - D03878CC2332506800DB441C /* libcrc32c.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878B52332506800DB441C /* libcrc32c.a */; }; - D03878CD2332506800DB441C /* libtl-lite-utils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878B62332506800DB441C /* libtl-lite-utils.a */; }; - D03878CE2332506800DB441C /* libtddb.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878B72332506800DB441C /* libtddb.a */; }; - D03878CF2332506800DB441C /* libtl_lite_api.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878B82332506800DB441C /* libtl_lite_api.a */; }; - D03878D02332506800DB441C /* libton_block.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878B92332506800DB441C /* libton_block.a */; }; - D03878D12332506800DB441C /* libton_db.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878BA2332506800DB441C /* libton_db.a */; }; - D03878D22332506800DB441C /* libtdactor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D03878BB2332506800DB441C /* libtdactor.a */; }; - D0529D2B21A434BF00D7C3C4 /* MTTransportSchemeStats.h in Headers */ = {isa = PBXBuildFile; fileRef = D0529D2921A434BF00D7C3C4 /* MTTransportSchemeStats.h */; }; - D0529D2C21A434BF00D7C3C4 /* MTTransportSchemeStats.h in Headers */ = {isa = PBXBuildFile; fileRef = D0529D2921A434BF00D7C3C4 /* MTTransportSchemeStats.h */; }; - D0529D2D21A434BF00D7C3C4 /* MTTransportSchemeStats.h in Headers */ = {isa = PBXBuildFile; fileRef = D0529D2921A434BF00D7C3C4 /* MTTransportSchemeStats.h */; }; - D0529D2E21A434BF00D7C3C4 /* MTTransportSchemeStats.m in Sources */ = {isa = PBXBuildFile; fileRef = D0529D2A21A434BF00D7C3C4 /* MTTransportSchemeStats.m */; }; - D0529D2F21A434BF00D7C3C4 /* MTTransportSchemeStats.m in Sources */ = {isa = PBXBuildFile; fileRef = D0529D2A21A434BF00D7C3C4 /* MTTransportSchemeStats.m */; }; - D0529D3021A434BF00D7C3C4 /* MTTransportSchemeStats.m in Sources */ = {isa = PBXBuildFile; fileRef = D0529D2A21A434BF00D7C3C4 /* MTTransportSchemeStats.m */; }; - D0580AC21B0F3E9C00E8235B /* MTDiscoverConnectionSignals.h in Headers */ = {isa = PBXBuildFile; fileRef = D0580AC01B0F3E9C00E8235B /* MTDiscoverConnectionSignals.h */; }; - D0580AC31B0F3E9C00E8235B /* MTDiscoverConnectionSignals.m in Sources */ = {isa = PBXBuildFile; fileRef = D0580AC11B0F3E9C00E8235B /* MTDiscoverConnectionSignals.m */; }; - D073D2D81FB5E493009E1DA2 /* MTBindingTempAuthKeyContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C0EAE51FB5DBEA00DCF07C /* MTBindingTempAuthKeyContext.m */; }; - D073D2D91FB5E494009E1DA2 /* MTBindingTempAuthKeyContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C0EAE51FB5DBEA00DCF07C /* MTBindingTempAuthKeyContext.m */; }; - D079AB9C1AF39B8000076F59 /* MtProtoKitMac.h in Headers */ = {isa = PBXBuildFile; fileRef = D079AB9B1AF39B8000076F59 /* MtProtoKitMac.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D08A159122DD32B40073B508 /* tonlibjson_export.h in Headers */ = {isa = PBXBuildFile; fileRef = D08A158F22DD32B40073B508 /* tonlibjson_export.h */; }; - D08A159222DD32B40073B508 /* tonlib_client_json.h in Headers */ = {isa = PBXBuildFile; fileRef = D08A159022DD32B40073B508 /* tonlib_client_json.h */; }; - D08A159D22DD32F20073B508 /* TON.h in Headers */ = {isa = PBXBuildFile; fileRef = D08A159B22DD32F20073B508 /* TON.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D08A159E22DD32F20073B508 /* TON.mm in Sources */ = {isa = PBXBuildFile; fileRef = D08A159C22DD32F20073B508 /* TON.mm */; }; - D09A59581B582EFF00FC3724 /* MTFileBasedKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = D09A59561B582EFF00FC3724 /* MTFileBasedKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D09A59591B582EFF00FC3724 /* MTFileBasedKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = D09A59571B582EFF00FC3724 /* MTFileBasedKeychain.m */; }; - D0B0DF5D1DD7E75B003BA12D /* MTBag.m in Sources */ = {isa = PBXBuildFile; fileRef = D0B0DF5C1DD7E75B003BA12D /* MTBag.m */; }; - D0B0DF5E1DD7E75B003BA12D /* MTBag.m in Sources */ = {isa = PBXBuildFile; fileRef = D0B0DF5C1DD7E75B003BA12D /* MTBag.m */; }; - D0B0DF5F1DD7E75B003BA12D /* MTBag.m in Sources */ = {isa = PBXBuildFile; fileRef = D0B0DF5C1DD7E75B003BA12D /* MTBag.m */; }; - D0B0DF611DD7E7A2003BA12D /* MTBag.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B0DF601DD7E768003BA12D /* MTBag.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0B0DF621DD7E7A3003BA12D /* MTBag.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B0DF601DD7E768003BA12D /* MTBag.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0B0DF631DD7E7A4003BA12D /* MTBag.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B0DF601DD7E768003BA12D /* MTBag.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0B4187B1D7E04CF004562A4 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D0B4187A1D7E04CF004562A4 /* libz.tbd */; }; - D0B4187D1D7E04EB004562A4 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0B4187C1D7E04EB004562A4 /* libcrypto.a */; }; - D0BFAE6020AB504600793CF2 /* MTDatacenterVerificationData.h in Headers */ = {isa = PBXBuildFile; fileRef = D0BFAE5E20AB504600793CF2 /* MTDatacenterVerificationData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0BFAE6120AB504600793CF2 /* MTDatacenterVerificationData.m in Sources */ = {isa = PBXBuildFile; fileRef = D0BFAE5F20AB504600793CF2 /* MTDatacenterVerificationData.m */; }; - D0BFAE6220AB505400793CF2 /* MTDatacenterVerificationData.h in Headers */ = {isa = PBXBuildFile; fileRef = D0BFAE5E20AB504600793CF2 /* MTDatacenterVerificationData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0BFAE6320AB505400793CF2 /* MTDatacenterVerificationData.h in Headers */ = {isa = PBXBuildFile; fileRef = D0BFAE5E20AB504600793CF2 /* MTDatacenterVerificationData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0BFAE6420AB505700793CF2 /* MTDatacenterVerificationData.m in Sources */ = {isa = PBXBuildFile; fileRef = D0BFAE5F20AB504600793CF2 /* MTDatacenterVerificationData.m */; }; - D0BFAE6520AB505800793CF2 /* MTDatacenterVerificationData.m in Sources */ = {isa = PBXBuildFile; fileRef = D0BFAE5F20AB504600793CF2 /* MTDatacenterVerificationData.m */; }; - D0C0EAE61FB5DBEA00DCF07C /* MTBindingTempAuthKeyContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C0EAE41FB5DBEA00DCF07C /* MTBindingTempAuthKeyContext.h */; }; - D0C0EAE71FB5DBEA00DCF07C /* MTBindingTempAuthKeyContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C0EAE51FB5DBEA00DCF07C /* MTBindingTempAuthKeyContext.m */; }; - D0C932231E095D6A0074F044 /* MTNetworkUsageCalculationInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C932211E095D6A0074F044 /* MTNetworkUsageCalculationInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0C932241E095D6A0074F044 /* MTNetworkUsageCalculationInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C932211E095D6A0074F044 /* MTNetworkUsageCalculationInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0C932251E095D6A0074F044 /* MTNetworkUsageCalculationInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C932211E095D6A0074F044 /* MTNetworkUsageCalculationInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0C932261E095D6A0074F044 /* MTNetworkUsageCalculationInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C932221E095D6A0074F044 /* MTNetworkUsageCalculationInfo.m */; }; - D0C932271E095D6A0074F044 /* MTNetworkUsageCalculationInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C932221E095D6A0074F044 /* MTNetworkUsageCalculationInfo.m */; }; - D0C932281E095D6A0074F044 /* MTNetworkUsageCalculationInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C932221E095D6A0074F044 /* MTNetworkUsageCalculationInfo.m */; }; - D0C9322B1E095E280074F044 /* MTNetworkUsageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C932291E095E280074F044 /* MTNetworkUsageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0C9322C1E095E280074F044 /* MTNetworkUsageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C932291E095E280074F044 /* MTNetworkUsageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0C9322D1E095E280074F044 /* MTNetworkUsageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C932291E095E280074F044 /* MTNetworkUsageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0C9322E1E095E280074F044 /* MTNetworkUsageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C9322A1E095E280074F044 /* MTNetworkUsageManager.m */; }; - D0C9322F1E095E280074F044 /* MTNetworkUsageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C9322A1E095E280074F044 /* MTNetworkUsageManager.m */; }; - D0C932301E095E280074F044 /* MTNetworkUsageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C9322A1E095E280074F044 /* MTNetworkUsageManager.m */; }; - D0CAF2CB1D75E24C0011F558 /* MTSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CAF2C91D75E24C0011F558 /* MTSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CAF2CC1D75E24C0011F558 /* MTSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D0CAF2CA1D75E24C0011F558 /* MTSignal.m */; }; - D0CAF2CD1D75E2570011F558 /* MTSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CAF2C91D75E24C0011F558 /* MTSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CAF2CE1D75E2580011F558 /* MTSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CAF2C91D75E24C0011F558 /* MTSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CAF2CF1D75E25B0011F558 /* MTSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D0CAF2CA1D75E24C0011F558 /* MTSignal.m */; }; - D0CAF2D01D75E25B0011F558 /* MTSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D0CAF2CA1D75E24C0011F558 /* MTSignal.m */; }; - D0CAF2D31D75E26D0011F558 /* MTSubscriber.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CAF2D11D75E26D0011F558 /* MTSubscriber.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CAF2D41D75E26D0011F558 /* MTSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D0CAF2D21D75E26D0011F558 /* MTSubscriber.m */; }; - D0CAF2D71D75E2840011F558 /* MTDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CAF2D51D75E2840011F558 /* MTDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CAF2D81D75E2840011F558 /* MTDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D0CAF2D61D75E2840011F558 /* MTDisposable.m */; }; - D0CAF2D91D75E3160011F558 /* MTSubscriber.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CAF2D11D75E26D0011F558 /* MTSubscriber.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CAF2DA1D75E3160011F558 /* MTSubscriber.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CAF2D11D75E26D0011F558 /* MTSubscriber.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CAF2DB1D75E31A0011F558 /* MTDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CAF2D51D75E2840011F558 /* MTDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CAF2DC1D75E31B0011F558 /* MTDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CAF2D51D75E2840011F558 /* MTDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CAF2DD1D75E31E0011F558 /* MTDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D0CAF2D61D75E2840011F558 /* MTDisposable.m */; }; - D0CAF2DE1D75E31E0011F558 /* MTSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D0CAF2D21D75E26D0011F558 /* MTSubscriber.m */; }; - D0CAF2DF1D75E31F0011F558 /* MTDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D0CAF2D61D75E2840011F558 /* MTDisposable.m */; }; - D0CAF2E01D75E31F0011F558 /* MTSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D0CAF2D21D75E26D0011F558 /* MTSubscriber.m */; }; - D0CAF2E31D75E7F30011F558 /* MTAtomic.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CAF2E11D75E7F30011F558 /* MTAtomic.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CAF2E41D75E7F30011F558 /* MTAtomic.m in Sources */ = {isa = PBXBuildFile; fileRef = D0CAF2E21D75E7F30011F558 /* MTAtomic.m */; }; - D0CAF2E51D75EA790011F558 /* MTAtomic.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CAF2E11D75E7F30011F558 /* MTAtomic.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CAF2E61D75EA7A0011F558 /* MTAtomic.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CAF2E11D75E7F30011F558 /* MTAtomic.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CAF2E71D75EA7E0011F558 /* MTAtomic.m in Sources */ = {isa = PBXBuildFile; fileRef = D0CAF2E21D75E7F30011F558 /* MTAtomic.m */; }; - D0CAF2E81D75EA7E0011F558 /* MTAtomic.m in Sources */ = {isa = PBXBuildFile; fileRef = D0CAF2E21D75E7F30011F558 /* MTAtomic.m */; }; - D0CAF2EC1D75F4520011F558 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0CAF2EB1D75F4520011F558 /* Security.framework */; }; - D0CAF2ED1D75F4570011F558 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D00354731C173CD9006610DA /* SystemConfiguration.framework */; }; - D0CAF2EF1D75F4E20011F558 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0CAF2EE1D75F4E20011F558 /* UIKit.framework */; }; - D0CAF2F11D75F4EA0011F558 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0CAF2F01D75F4EA0011F558 /* CFNetwork.framework */; }; - D0CAF2FD1D7628FD0011F558 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0CD990F1D75C16100F41187 /* libcrypto.a */; }; - D0CB05FC1ADC4483005E298F /* MtProtoKit.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CB05FB1ADC4483005E298F /* MtProtoKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06101ADC44B7005E298F /* MTTime.m in Sources */ = {isa = PBXBuildFile; fileRef = 93DBD23418B2DA1E00631ADC /* MTTime.m */; }; - D0CB06111ADC44B7005E298F /* MTTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84D818AFE81C007F1076 /* MTTimer.m */; }; - D0CB06121ADC44B7005E298F /* MTLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84DB18AFE81D007F1076 /* MTLogging.m */; }; - D0CB06131ADC44B7005E298F /* MTEncryption.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84DC18AFE81D007F1076 /* MTEncryption.m */; }; - D0CB06141ADC44B7005E298F /* MTQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84A018AFCF8E007F1076 /* MTQueue.m */; }; - D0CB06151ADC44B7005E298F /* MTOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = D0503AD918B027F80074C3FE /* MTOutputStream.m */; }; - D0CB06161ADC44B7005E298F /* MTInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = D0503ADD18B029480074C3FE /* MTInputStream.m */; }; - D0CB06171ADC4536005E298F /* MTProtoKit.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A31D18B158AE00C65116 /* MTProtoKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06181ADC4541005E298F /* MTTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DBD23318B2D9AA00631ADC /* MTTime.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06191ADC4541005E298F /* MTTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A84D918AFE81D007F1076 /* MTTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB061A1ADC4541005E298F /* MTLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A84DA18AFE81D007F1076 /* MTLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB061B1ADC4541005E298F /* MTEncryption.h in Headers */ = {isa = PBXBuildFile; fileRef = D0254CC518B10404009452AA /* MTEncryption.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB061C1ADC4541005E298F /* MTInternalId.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83D118AFB75B007F1076 /* MTInternalId.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB061D1ADC4541005E298F /* MTQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A849F18AFCF8E007F1076 /* MTQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB061E1ADC4541005E298F /* MTOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D0503AD818B027F80074C3FE /* MTOutputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB061F1ADC4541005E298F /* MTInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D0503ADC18B029480074C3FE /* MTInputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06201ADC454C005E298F /* MTSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83B518AFB75B007F1076 /* MTSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06211ADC454C005E298F /* MTKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83C018AFB75B007F1076 /* MTKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06221ADC4551005E298F /* MTKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83A318AFB75B007F1076 /* MTKeychain.m */; }; - D0CB06231ADC4558005E298F /* MTContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A839E18AFB75B007F1076 /* MTContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06241ADC455C005E298F /* MTContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A839C18AFB75B007F1076 /* MTContext.m */; }; - D0CB06251ADC4562005E298F /* MTTransportScheme.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A33418B161B600C65116 /* MTTransportScheme.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06281ADC456A005E298F /* MTDiscoverDatacenterAddressAction.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83D518AFB75B007F1076 /* MTDiscoverDatacenterAddressAction.h */; }; - D0CB06291ADC456E005E298F /* MTDiscoverDatacenterAddressAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83D418AFB75B007F1076 /* MTDiscoverDatacenterAddressAction.m */; }; - D0CB062A1ADC4575005E298F /* MTDatacenterTransferAuthAction.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A839F18AFB75B007F1076 /* MTDatacenterTransferAuthAction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB062B1ADC4575005E298F /* MTDatacenterAuthAction.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83A018AFB75B007F1076 /* MTDatacenterAuthAction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB062C1ADC4575005E298F /* MTDatacenterAuthMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83D918AFB75B007F1076 /* MTDatacenterAuthMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB062D1ADC457B005E298F /* MTDatacenterTransferAuthAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A839D18AFB75B007F1076 /* MTDatacenterTransferAuthAction.m */; }; - D0CB062E1ADC457B005E298F /* MTDatacenterAuthAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83CE18AFB75B007F1076 /* MTDatacenterAuthAction.m */; }; - D0CB062F1ADC457B005E298F /* MTDatacenterAuthMessageService.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83B018AFB75B007F1076 /* MTDatacenterAuthMessageService.m */; }; - D0CB06301ADC4583005E298F /* MTDatacenterAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83CB18AFB75B007F1076 /* MTDatacenterAddress.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06311ADC4583005E298F /* MTDatacenterAddressSet.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83CD18AFB75B007F1076 /* MTDatacenterAddressSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06321ADC4583005E298F /* MTDatacenterAuthInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83C918AFB75B007F1076 /* MTDatacenterAuthInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06331ADC4583005E298F /* MTDatacenterSaltInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83C718AFB75B007F1076 /* MTDatacenterSaltInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06341ADC4588005E298F /* MTDatacenterAddress.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83CA18AFB75B007F1076 /* MTDatacenterAddress.m */; }; - D0CB06351ADC4588005E298F /* MTDatacenterAddressSet.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83CC18AFB75B007F1076 /* MTDatacenterAddressSet.m */; }; - D0CB06361ADC4588005E298F /* MTDatacenterAuthInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83C818AFB75B007F1076 /* MTDatacenterAuthInfo.m */; }; - D0CB06371ADC4588005E298F /* MTDatacenterSaltInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83C618AFB75B007F1076 /* MTDatacenterSaltInfo.m */; }; - D0CB06381ADC4591005E298F /* MTProto.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32418B1618D00C65116 /* MTProto.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06391ADC4591005E298F /* MTSessionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32618B1618D00C65116 /* MTSessionInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB063A1ADC4591005E298F /* MTTimeFixContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32818B1618D00C65116 /* MTTimeFixContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB063B1ADC4591005E298F /* MTPreparedMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32218B1618D00C65116 /* MTPreparedMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB063C1ADC4591005E298F /* MTOutgoingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32018B1618D00C65116 /* MTOutgoingMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB063D1ADC4591005E298F /* MTIncomingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A33618B161B600C65116 /* MTIncomingMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB063E1ADC4591005E298F /* MTMessageEncryptionKey.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A33818B161B600C65116 /* MTMessageEncryptionKey.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB063F1ADC4599005E298F /* MTProto.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32518B1618D00C65116 /* MTProto.m */; }; - D0CB06401ADC4599005E298F /* MTSessionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32718B1618D00C65116 /* MTSessionInfo.m */; }; - D0CB06411ADC4599005E298F /* MTTimeFixContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32918B1618D00C65116 /* MTTimeFixContext.m */; }; - D0CB06421ADC4599005E298F /* MTPreparedMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32318B1618D00C65116 /* MTPreparedMessage.m */; }; - D0CB06431ADC4599005E298F /* MTOutgoingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32118B1618D00C65116 /* MTOutgoingMessage.m */; }; - D0CB06441ADC4599005E298F /* MTIncomingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A33718B161B600C65116 /* MTIncomingMessage.m */; }; - D0CB06451ADC4599005E298F /* MTMessageEncryptionKey.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A33918B161B600C65116 /* MTMessageEncryptionKey.m */; }; - D0CB06461ADC45A2005E298F /* MTMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A35018B1631900C65116 /* MTMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06471ADC45A2005E298F /* MTMessageTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A35118B1631900C65116 /* MTMessageTransaction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06481ADC45A6005E298F /* MTMessageTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A35218B1631900C65116 /* MTMessageTransaction.m */; }; - D0CB06491ADC45B1005E298F /* MTTimeSyncMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A35918B164BA00C65116 /* MTTimeSyncMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB064A1ADC45B1005E298F /* MTRequestMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A36718B164D600C65116 /* MTRequestMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB064B1ADC45B1005E298F /* MTRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A36318B164D600C65116 /* MTRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB064C1ADC45B1005E298F /* MTRequestContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A36518B164D600C65116 /* MTRequestContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB064D1ADC45B1005E298F /* MTRequestErrorContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DBD22F18B2D72800631ADC /* MTRequestErrorContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB064E1ADC45B1005E298F /* MTDropResponseContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A36118B164D600C65116 /* MTDropResponseContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB064F1ADC45B1005E298F /* MTApiEnvironment.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A35F18B164D600C65116 /* MTApiEnvironment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06501ADC45BA005E298F /* MTTimeSyncMessageService.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A35A18B164BA00C65116 /* MTTimeSyncMessageService.m */; }; - D0CB06511ADC45BA005E298F /* MTRequestMessageService.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36818B164D600C65116 /* MTRequestMessageService.m */; }; - D0CB06521ADC45BA005E298F /* MTRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36418B164D600C65116 /* MTRequest.m */; }; - D0CB06531ADC45BA005E298F /* MTRequestContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36618B164D600C65116 /* MTRequestContext.m */; }; - D0CB06541ADC45BA005E298F /* MTRequestErrorContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 93DBD23018B2D72800631ADC /* MTRequestErrorContext.m */; }; - D0CB06551ADC45BA005E298F /* MTDropResponseContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36218B164D600C65116 /* MTDropResponseContext.m */; }; - D0CB06561ADC45BA005E298F /* MTApiEnvironment.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36018B164D600C65116 /* MTApiEnvironment.m */; }; - D0CB06571ADC45BA005E298F /* MTResendMessageService.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A37E18B164E600C65116 /* MTResendMessageService.m */; }; - D0CB06581ADC45CE005E298F /* MTNetworkAvailability.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A38318B164F800C65116 /* MTNetworkAvailability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB06591ADC45CE005E298F /* MTTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A38518B164F800C65116 /* MTTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB065A1ADC45CE005E298F /* MTTransportTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A38718B164F800C65116 /* MTTransportTransaction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB065B1ADC45CE005E298F /* MTTcpTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A39918B1650400C65116 /* MTTcpTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB065C1ADC45CE005E298F /* MTTcpConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A39518B1650400C65116 /* MTTcpConnection.h */; }; - D0CB065D1ADC45CE005E298F /* MTTcpConnectionBehaviour.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A39718B1650400C65116 /* MTTcpConnectionBehaviour.h */; }; - D0CB06611ADC45DA005E298F /* MTNetworkAvailability.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A38418B164F800C65116 /* MTNetworkAvailability.m */; }; - D0CB06621ADC45DA005E298F /* MTTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A38618B164F800C65116 /* MTTransport.m */; }; - D0CB06631ADC45DA005E298F /* MTTransportTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A38818B164F800C65116 /* MTTransportTransaction.m */; }; - D0CB06641ADC45DA005E298F /* MTTcpTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A39A18B1650400C65116 /* MTTcpTransport.m */; }; - D0CB06651ADC45DA005E298F /* MTTcpConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A39618B1650400C65116 /* MTTcpConnection.m */; }; - D0CB06661ADC45DA005E298F /* MTTcpConnectionBehaviour.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A39818B1650400C65116 /* MTTcpConnectionBehaviour.m */; }; - D0CB066A1ADC4846005E298F /* MTResendMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A37D18B164E600C65116 /* MTResendMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CB066C1ADC49FA005E298F /* GCDAsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84F818AFF259007F1076 /* GCDAsyncSocket.m */; }; - D0CB066F1ADC49FF005E298F /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84EC18AFF259007F1076 /* AFHTTPRequestOperation.m */; }; - D0CB06701ADC49FF005E298F /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84F518AFF259007F1076 /* AFURLConnectionOperation.m */; }; - D0CB06711ADC4A50005E298F /* MTTransportScheme.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A33518B161B600C65116 /* MTTransportScheme.m */; }; - D0CD97D21D74B91400F41187 /* MTTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DBD23318B2D9AA00631ADC /* MTTime.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97D31D74B91700F41187 /* MTTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DBD23318B2D9AA00631ADC /* MTTime.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97D41D74B91B00F41187 /* MTTime.m in Sources */ = {isa = PBXBuildFile; fileRef = 93DBD23418B2DA1E00631ADC /* MTTime.m */; }; - D0CD97D51D74B91C00F41187 /* MTTime.m in Sources */ = {isa = PBXBuildFile; fileRef = 93DBD23418B2DA1E00631ADC /* MTTime.m */; }; - D0CD97D61D74B91E00F41187 /* MTTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A84D918AFE81D007F1076 /* MTTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97D71D74B92000F41187 /* MTTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A84D918AFE81D007F1076 /* MTTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97D81D74B93100F41187 /* MTTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84D818AFE81C007F1076 /* MTTimer.m */; }; - D0CD97D91D74B93100F41187 /* MTLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84DB18AFE81D007F1076 /* MTLogging.m */; }; - D0CD97DA1D74B93100F41187 /* MTEncryption.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84DC18AFE81D007F1076 /* MTEncryption.m */; }; - D0CD97DB1D74B93100F41187 /* MTQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84A018AFCF8E007F1076 /* MTQueue.m */; }; - D0CD97DC1D74B93100F41187 /* MTOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = D0503AD918B027F80074C3FE /* MTOutputStream.m */; }; - D0CD97DD1D74B93100F41187 /* MTInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = D0503ADD18B029480074C3FE /* MTInputStream.m */; }; - D0CD97DE1D74B93100F41187 /* MTRsa.m in Sources */ = {isa = PBXBuildFile; fileRef = D010DB7C1D70ABEE0012AD96 /* MTRsa.m */; }; - D0CD97DF1D74B93100F41187 /* MTAes.m in Sources */ = {isa = PBXBuildFile; fileRef = D010DB801D70B3B90012AD96 /* MTAes.m */; }; - D0CD97E01D74B93300F41187 /* MTTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84D818AFE81C007F1076 /* MTTimer.m */; }; - D0CD97E11D74B93300F41187 /* MTLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84DB18AFE81D007F1076 /* MTLogging.m */; }; - D0CD97E21D74B93300F41187 /* MTEncryption.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84DC18AFE81D007F1076 /* MTEncryption.m */; }; - D0CD97E31D74B93300F41187 /* MTQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84A018AFCF8E007F1076 /* MTQueue.m */; }; - D0CD97E41D74B93300F41187 /* MTOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = D0503AD918B027F80074C3FE /* MTOutputStream.m */; }; - D0CD97E51D74B93300F41187 /* MTInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = D0503ADD18B029480074C3FE /* MTInputStream.m */; }; - D0CD97E61D74B93300F41187 /* MTRsa.m in Sources */ = {isa = PBXBuildFile; fileRef = D010DB7C1D70ABEE0012AD96 /* MTRsa.m */; }; - D0CD97E71D74B93300F41187 /* MTAes.m in Sources */ = {isa = PBXBuildFile; fileRef = D010DB801D70B3B90012AD96 /* MTAes.m */; }; - D0CD97E81D74B94300F41187 /* MTLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A84DA18AFE81D007F1076 /* MTLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97E91D74B94300F41187 /* MTEncryption.h in Headers */ = {isa = PBXBuildFile; fileRef = D0254CC518B10404009452AA /* MTEncryption.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97EA1D74B94300F41187 /* MTInternalId.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83D118AFB75B007F1076 /* MTInternalId.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97EB1D74B94300F41187 /* MTQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A849F18AFCF8E007F1076 /* MTQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97EC1D74B94300F41187 /* MTOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D0503AD818B027F80074C3FE /* MTOutputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97ED1D74B94300F41187 /* MTInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D0503ADC18B029480074C3FE /* MTInputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97EE1D74B94300F41187 /* MTLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A84DA18AFE81D007F1076 /* MTLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97EF1D74B94300F41187 /* MTEncryption.h in Headers */ = {isa = PBXBuildFile; fileRef = D0254CC518B10404009452AA /* MTEncryption.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97F01D74B94300F41187 /* MTInternalId.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83D118AFB75B007F1076 /* MTInternalId.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97F11D74B94300F41187 /* MTQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A849F18AFCF8E007F1076 /* MTQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97F21D74B94300F41187 /* MTOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D0503AD818B027F80074C3FE /* MTOutputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97F31D74B94300F41187 /* MTInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D0503ADC18B029480074C3FE /* MTInputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97F61D74B94B00F41187 /* MTRsa.h in Headers */ = {isa = PBXBuildFile; fileRef = D010DB7B1D70ABEE0012AD96 /* MTRsa.h */; }; - D0CD97F71D74B94B00F41187 /* MTAes.h in Headers */ = {isa = PBXBuildFile; fileRef = D010DB7F1D70B3B90012AD96 /* MTAes.h */; }; - D0CD97F81D74B94B00F41187 /* MTRsa.h in Headers */ = {isa = PBXBuildFile; fileRef = D010DB7B1D70ABEE0012AD96 /* MTRsa.h */; }; - D0CD97F91D74B94B00F41187 /* MTAes.h in Headers */ = {isa = PBXBuildFile; fileRef = D010DB7F1D70B3B90012AD96 /* MTAes.h */; }; - D0CD97FA1D74B95000F41187 /* MTSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83B518AFB75B007F1076 /* MTSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97FB1D74B95100F41187 /* MTSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83B518AFB75B007F1076 /* MTSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD97FC1D74B96300F41187 /* MTBadMsgNotificationMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0041ADD983C007D9ED6 /* MTBadMsgNotificationMessage.h */; }; - D0CD97FD1D74B96300F41187 /* MTBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0061ADD983C007D9ED6 /* MTBuffer.h */; }; - D0CD97FE1D74B96300F41187 /* MTBufferReader.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0081ADD983C007D9ED6 /* MTBufferReader.h */; }; - D0CD97FF1D74B96300F41187 /* MTDestroySessionResponseMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A00A1ADD983C007D9ED6 /* MTDestroySessionResponseMessage.h */; }; - D0CD98001D74B96300F41187 /* MTDropRpcResultMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A00C1ADD983C007D9ED6 /* MTDropRpcResultMessage.h */; }; - D0CD98011D74B96400F41187 /* MTBadMsgNotificationMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0041ADD983C007D9ED6 /* MTBadMsgNotificationMessage.h */; }; - D0CD98021D74B96400F41187 /* MTBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0061ADD983C007D9ED6 /* MTBuffer.h */; }; - D0CD98031D74B96400F41187 /* MTBufferReader.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0081ADD983C007D9ED6 /* MTBufferReader.h */; }; - D0CD98041D74B96400F41187 /* MTDestroySessionResponseMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A00A1ADD983C007D9ED6 /* MTDestroySessionResponseMessage.h */; }; - D0CD98051D74B96400F41187 /* MTDropRpcResultMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A00C1ADD983C007D9ED6 /* MTDropRpcResultMessage.h */; }; - D0CD98061D74B96C00F41187 /* MTBadMsgNotificationMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0051ADD983C007D9ED6 /* MTBadMsgNotificationMessage.m */; }; - D0CD98071D74B96C00F41187 /* MTBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0071ADD983C007D9ED6 /* MTBuffer.m */; }; - D0CD98081D74B96C00F41187 /* MTBufferReader.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0091ADD983C007D9ED6 /* MTBufferReader.m */; }; - D0CD98091D74B96C00F41187 /* MTDestroySessionResponseMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A00B1ADD983C007D9ED6 /* MTDestroySessionResponseMessage.m */; }; - D0CD980A1D74B96C00F41187 /* MTDropRpcResultMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A00D1ADD983C007D9ED6 /* MTDropRpcResultMessage.m */; }; - D0CD980B1D74B96C00F41187 /* MTBadMsgNotificationMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0051ADD983C007D9ED6 /* MTBadMsgNotificationMessage.m */; }; - D0CD980C1D74B96C00F41187 /* MTBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0071ADD983C007D9ED6 /* MTBuffer.m */; }; - D0CD980D1D74B96C00F41187 /* MTBufferReader.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0091ADD983C007D9ED6 /* MTBufferReader.m */; }; - D0CD980E1D74B96C00F41187 /* MTDestroySessionResponseMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A00B1ADD983C007D9ED6 /* MTDestroySessionResponseMessage.m */; }; - D0CD980F1D74B96C00F41187 /* MTDropRpcResultMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A00D1ADD983C007D9ED6 /* MTDropRpcResultMessage.m */; }; - D0CD98101D74B96F00F41187 /* MTExportedAuthorizationData.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A00E1ADD983C007D9ED6 /* MTExportedAuthorizationData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98111D74B97000F41187 /* MTExportedAuthorizationData.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A00E1ADD983C007D9ED6 /* MTExportedAuthorizationData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98121D74B99400F41187 /* MTFutureSaltsMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0101ADD983C007D9ED6 /* MTFutureSaltsMessage.h */; }; - D0CD98131D74B99400F41187 /* MTInternalMessageParser.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0121ADD983C007D9ED6 /* MTInternalMessageParser.h */; }; - D0CD98141D74B99400F41187 /* MTMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0141ADD983C007D9ED6 /* MTMessage.h */; }; - D0CD98151D74B99400F41187 /* MTMsgAllInfoMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0161ADD983C007D9ED6 /* MTMsgAllInfoMessage.h */; }; - D0CD98161D74B99400F41187 /* MTMsgContainerMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0181ADD983C007D9ED6 /* MTMsgContainerMessage.h */; }; - D0CD98171D74B99400F41187 /* MTMsgDetailedInfoMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A01A1ADD983C007D9ED6 /* MTMsgDetailedInfoMessage.h */; }; - D0CD98181D74B99400F41187 /* MTMsgResendReqMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A01C1ADD983C007D9ED6 /* MTMsgResendReqMessage.h */; }; - D0CD98191D74B99400F41187 /* MTMsgsAckMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A01E1ADD983C007D9ED6 /* MTMsgsAckMessage.h */; }; - D0CD981A1D74B99400F41187 /* MTMsgsStateInfoMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0201ADD983C007D9ED6 /* MTMsgsStateInfoMessage.h */; }; - D0CD981B1D74B99400F41187 /* MTMsgsStateReqMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0221ADD983C007D9ED6 /* MTMsgsStateReqMessage.h */; }; - D0CD981C1D74B99400F41187 /* MTNewSessionCreatedMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0241ADD983C007D9ED6 /* MTNewSessionCreatedMessage.h */; }; - D0CD981D1D74B99400F41187 /* MTPingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0261ADD983C007D9ED6 /* MTPingMessage.h */; }; - D0CD981E1D74B99400F41187 /* MTPongMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0281ADD983C007D9ED6 /* MTPongMessage.h */; }; - D0CD981F1D74B99400F41187 /* MTResPqMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A02A1ADD983C007D9ED6 /* MTResPqMessage.h */; }; - D0CD98201D74B99500F41187 /* MTFutureSaltsMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0101ADD983C007D9ED6 /* MTFutureSaltsMessage.h */; }; - D0CD98211D74B99500F41187 /* MTInternalMessageParser.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0121ADD983C007D9ED6 /* MTInternalMessageParser.h */; }; - D0CD98221D74B99500F41187 /* MTMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0141ADD983C007D9ED6 /* MTMessage.h */; }; - D0CD98231D74B99500F41187 /* MTMsgAllInfoMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0161ADD983C007D9ED6 /* MTMsgAllInfoMessage.h */; }; - D0CD98241D74B99500F41187 /* MTMsgContainerMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0181ADD983C007D9ED6 /* MTMsgContainerMessage.h */; }; - D0CD98251D74B99500F41187 /* MTMsgDetailedInfoMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A01A1ADD983C007D9ED6 /* MTMsgDetailedInfoMessage.h */; }; - D0CD98261D74B99500F41187 /* MTMsgResendReqMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A01C1ADD983C007D9ED6 /* MTMsgResendReqMessage.h */; }; - D0CD98271D74B99500F41187 /* MTMsgsAckMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A01E1ADD983C007D9ED6 /* MTMsgsAckMessage.h */; }; - D0CD98281D74B99500F41187 /* MTMsgsStateInfoMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0201ADD983C007D9ED6 /* MTMsgsStateInfoMessage.h */; }; - D0CD98291D74B99500F41187 /* MTMsgsStateReqMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0221ADD983C007D9ED6 /* MTMsgsStateReqMessage.h */; }; - D0CD982A1D74B99500F41187 /* MTNewSessionCreatedMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0241ADD983C007D9ED6 /* MTNewSessionCreatedMessage.h */; }; - D0CD982B1D74B99500F41187 /* MTPingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0261ADD983C007D9ED6 /* MTPingMessage.h */; }; - D0CD982C1D74B99500F41187 /* MTPongMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0281ADD983C007D9ED6 /* MTPongMessage.h */; }; - D0CD982D1D74B99500F41187 /* MTResPqMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A02A1ADD983C007D9ED6 /* MTResPqMessage.h */; }; - D0CD982E1D74B9AA00F41187 /* MTExportedAuthorizationData.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A00F1ADD983C007D9ED6 /* MTExportedAuthorizationData.m */; }; - D0CD982F1D74B9AA00F41187 /* MTFutureSaltsMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0111ADD983C007D9ED6 /* MTFutureSaltsMessage.m */; }; - D0CD98301D74B9AA00F41187 /* MTInternalMessageParser.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0131ADD983C007D9ED6 /* MTInternalMessageParser.m */; }; - D0CD98311D74B9AA00F41187 /* MTMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0151ADD983C007D9ED6 /* MTMessage.m */; }; - D0CD98321D74B9AA00F41187 /* MTMsgAllInfoMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0171ADD983C007D9ED6 /* MTMsgAllInfoMessage.m */; }; - D0CD98331D74B9AA00F41187 /* MTMsgContainerMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0191ADD983C007D9ED6 /* MTMsgContainerMessage.m */; }; - D0CD98341D74B9AA00F41187 /* MTMsgDetailedInfoMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A01B1ADD983C007D9ED6 /* MTMsgDetailedInfoMessage.m */; }; - D0CD98351D74B9AA00F41187 /* MTMsgResendReqMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A01D1ADD983C007D9ED6 /* MTMsgResendReqMessage.m */; }; - D0CD98361D74B9AA00F41187 /* MTMsgsAckMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A01F1ADD983C007D9ED6 /* MTMsgsAckMessage.m */; }; - D0CD98371D74B9AA00F41187 /* MTMsgsStateInfoMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0211ADD983C007D9ED6 /* MTMsgsStateInfoMessage.m */; }; - D0CD98381D74B9AA00F41187 /* MTMsgsStateReqMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0231ADD983C007D9ED6 /* MTMsgsStateReqMessage.m */; }; - D0CD98391D74B9AA00F41187 /* MTNewSessionCreatedMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0251ADD983C007D9ED6 /* MTNewSessionCreatedMessage.m */; }; - D0CD983A1D74B9AA00F41187 /* MTPingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0271ADD983C007D9ED6 /* MTPingMessage.m */; }; - D0CD983B1D74B9AA00F41187 /* MTPongMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0291ADD983C007D9ED6 /* MTPongMessage.m */; }; - D0CD983C1D74B9AA00F41187 /* MTResPqMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A02B1ADD983C007D9ED6 /* MTResPqMessage.m */; }; - D0CD983D1D74B9AA00F41187 /* MTExportedAuthorizationData.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A00F1ADD983C007D9ED6 /* MTExportedAuthorizationData.m */; }; - D0CD983E1D74B9AA00F41187 /* MTFutureSaltsMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0111ADD983C007D9ED6 /* MTFutureSaltsMessage.m */; }; - D0CD983F1D74B9AA00F41187 /* MTInternalMessageParser.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0131ADD983C007D9ED6 /* MTInternalMessageParser.m */; }; - D0CD98401D74B9AA00F41187 /* MTMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0151ADD983C007D9ED6 /* MTMessage.m */; }; - D0CD98411D74B9AA00F41187 /* MTMsgAllInfoMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0171ADD983C007D9ED6 /* MTMsgAllInfoMessage.m */; }; - D0CD98421D74B9AA00F41187 /* MTMsgContainerMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0191ADD983C007D9ED6 /* MTMsgContainerMessage.m */; }; - D0CD98431D74B9AA00F41187 /* MTMsgDetailedInfoMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A01B1ADD983C007D9ED6 /* MTMsgDetailedInfoMessage.m */; }; - D0CD98441D74B9AA00F41187 /* MTMsgResendReqMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A01D1ADD983C007D9ED6 /* MTMsgResendReqMessage.m */; }; - D0CD98451D74B9AA00F41187 /* MTMsgsAckMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A01F1ADD983C007D9ED6 /* MTMsgsAckMessage.m */; }; - D0CD98461D74B9AA00F41187 /* MTMsgsStateInfoMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0211ADD983C007D9ED6 /* MTMsgsStateInfoMessage.m */; }; - D0CD98471D74B9AA00F41187 /* MTMsgsStateReqMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0231ADD983C007D9ED6 /* MTMsgsStateReqMessage.m */; }; - D0CD98481D74B9AA00F41187 /* MTNewSessionCreatedMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0251ADD983C007D9ED6 /* MTNewSessionCreatedMessage.m */; }; - D0CD98491D74B9AA00F41187 /* MTPingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0271ADD983C007D9ED6 /* MTPingMessage.m */; }; - D0CD984A1D74B9AA00F41187 /* MTPongMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0291ADD983C007D9ED6 /* MTPongMessage.m */; }; - D0CD984B1D74B9AA00F41187 /* MTResPqMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A02B1ADD983C007D9ED6 /* MTResPqMessage.m */; }; - D0CD984C1D74B9AD00F41187 /* MTRpcError.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A02C1ADD983C007D9ED6 /* MTRpcError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD984D1D74B9AE00F41187 /* MTRpcError.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A02C1ADD983C007D9ED6 /* MTRpcError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD984E1D74B9B700F41187 /* MTRpcError.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A02D1ADD983C007D9ED6 /* MTRpcError.m */; }; - D0CD984F1D74B9B700F41187 /* MTRpcResultMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A02F1ADD983C007D9ED6 /* MTRpcResultMessage.m */; }; - D0CD98501D74B9B700F41187 /* MTServerDhInnerDataMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0311ADD983C007D9ED6 /* MTServerDhInnerDataMessage.m */; }; - D0CD98511D74B9B700F41187 /* MTServerDhParamsMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0331ADD983C007D9ED6 /* MTServerDhParamsMessage.m */; }; - D0CD98521D74B9B700F41187 /* MTSetClientDhParamsResponseMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0351ADD983C007D9ED6 /* MTSetClientDhParamsResponseMessage.m */; }; - D0CD98531D74B9B700F41187 /* MTRpcError.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A02D1ADD983C007D9ED6 /* MTRpcError.m */; }; - D0CD98541D74B9B700F41187 /* MTRpcResultMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A02F1ADD983C007D9ED6 /* MTRpcResultMessage.m */; }; - D0CD98551D74B9B700F41187 /* MTServerDhInnerDataMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0311ADD983C007D9ED6 /* MTServerDhInnerDataMessage.m */; }; - D0CD98561D74B9B700F41187 /* MTServerDhParamsMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0331ADD983C007D9ED6 /* MTServerDhParamsMessage.m */; }; - D0CD98571D74B9B700F41187 /* MTSetClientDhParamsResponseMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0351ADD983C007D9ED6 /* MTSetClientDhParamsResponseMessage.m */; }; - D0CD98581D74B9BF00F41187 /* MTRpcResultMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A02E1ADD983C007D9ED6 /* MTRpcResultMessage.h */; }; - D0CD98591D74B9BF00F41187 /* MTServerDhInnerDataMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0301ADD983C007D9ED6 /* MTServerDhInnerDataMessage.h */; }; - D0CD985A1D74B9BF00F41187 /* MTServerDhParamsMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0321ADD983C007D9ED6 /* MTServerDhParamsMessage.h */; }; - D0CD985B1D74B9BF00F41187 /* MTSetClientDhParamsResponseMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0341ADD983C007D9ED6 /* MTSetClientDhParamsResponseMessage.h */; }; - D0CD985C1D74B9BF00F41187 /* MTRpcResultMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A02E1ADD983C007D9ED6 /* MTRpcResultMessage.h */; }; - D0CD985D1D74B9BF00F41187 /* MTServerDhInnerDataMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0301ADD983C007D9ED6 /* MTServerDhInnerDataMessage.h */; }; - D0CD985E1D74B9BF00F41187 /* MTServerDhParamsMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0321ADD983C007D9ED6 /* MTServerDhParamsMessage.h */; }; - D0CD985F1D74B9BF00F41187 /* MTSetClientDhParamsResponseMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0341ADD983C007D9ED6 /* MTSetClientDhParamsResponseMessage.h */; }; - D0CD98601D74B9D000F41187 /* MTKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83C018AFB75B007F1076 /* MTKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98611D74B9D000F41187 /* MTKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83C018AFB75B007F1076 /* MTKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98621D74B9D500F41187 /* MTKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83A318AFB75B007F1076 /* MTKeychain.m */; }; - D0CD98631D74B9D500F41187 /* MTKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83A318AFB75B007F1076 /* MTKeychain.m */; }; - D0CD98641D74B9D700F41187 /* MTFileBasedKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = D09A59561B582EFF00FC3724 /* MTFileBasedKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98651D74B9D800F41187 /* MTFileBasedKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = D09A59561B582EFF00FC3724 /* MTFileBasedKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98661D74B9DD00F41187 /* MTFileBasedKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = D09A59571B582EFF00FC3724 /* MTFileBasedKeychain.m */; }; - D0CD98671D74B9DD00F41187 /* MTFileBasedKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = D09A59571B582EFF00FC3724 /* MTFileBasedKeychain.m */; }; - D0CD98681D74B9E200F41187 /* MTContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A839E18AFB75B007F1076 /* MTContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98691D74B9E300F41187 /* MTContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A839E18AFB75B007F1076 /* MTContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD986A1D74B9E900F41187 /* MTContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A839C18AFB75B007F1076 /* MTContext.m */; }; - D0CD986B1D74B9E900F41187 /* MTContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A839C18AFB75B007F1076 /* MTContext.m */; }; - D0CD986C1D74B9EF00F41187 /* MTTransportScheme.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A33418B161B600C65116 /* MTTransportScheme.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD986D1D74B9F000F41187 /* MTTransportScheme.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A33418B161B600C65116 /* MTTransportScheme.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD986E1D74B9F400F41187 /* MTTransportScheme.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A33518B161B600C65116 /* MTTransportScheme.m */; }; - D0CD986F1D74B9F500F41187 /* MTTransportScheme.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A33518B161B600C65116 /* MTTransportScheme.m */; }; - D0CD98701D74B9F700F41187 /* MTDiscoverConnectionSignals.h in Headers */ = {isa = PBXBuildFile; fileRef = D0580AC01B0F3E9C00E8235B /* MTDiscoverConnectionSignals.h */; }; - D0CD98711D74B9F700F41187 /* MTDiscoverConnectionSignals.h in Headers */ = {isa = PBXBuildFile; fileRef = D0580AC01B0F3E9C00E8235B /* MTDiscoverConnectionSignals.h */; }; - D0CD98721D74B9F900F41187 /* MTDiscoverConnectionSignals.m in Sources */ = {isa = PBXBuildFile; fileRef = D0580AC11B0F3E9C00E8235B /* MTDiscoverConnectionSignals.m */; }; - D0CD98731D74B9F900F41187 /* MTDiscoverConnectionSignals.m in Sources */ = {isa = PBXBuildFile; fileRef = D0580AC11B0F3E9C00E8235B /* MTDiscoverConnectionSignals.m */; }; - D0CD98741D74BA0100F41187 /* MTDiscoverDatacenterAddressAction.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83D518AFB75B007F1076 /* MTDiscoverDatacenterAddressAction.h */; }; - D0CD98751D74BA0100F41187 /* MTDiscoverDatacenterAddressAction.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83D518AFB75B007F1076 /* MTDiscoverDatacenterAddressAction.h */; }; - D0CD98761D74BA0700F41187 /* MTDiscoverDatacenterAddressAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83D418AFB75B007F1076 /* MTDiscoverDatacenterAddressAction.m */; }; - D0CD98771D74BA0700F41187 /* MTDiscoverDatacenterAddressAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83D418AFB75B007F1076 /* MTDiscoverDatacenterAddressAction.m */; }; - D0CD98781D74BA4100F41187 /* MTDatacenterTransferAuthAction.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A839F18AFB75B007F1076 /* MTDatacenterTransferAuthAction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98791D74BA4100F41187 /* MTDatacenterAuthAction.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83A018AFB75B007F1076 /* MTDatacenterAuthAction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD987A1D74BA4100F41187 /* MTDatacenterAuthMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83D918AFB75B007F1076 /* MTDatacenterAuthMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD987B1D74BA4100F41187 /* MTDatacenterTransferAuthAction.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A839F18AFB75B007F1076 /* MTDatacenterTransferAuthAction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD987C1D74BA4100F41187 /* MTDatacenterAuthAction.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83A018AFB75B007F1076 /* MTDatacenterAuthAction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD987D1D74BA4100F41187 /* MTDatacenterAuthMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83D918AFB75B007F1076 /* MTDatacenterAuthMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD987E1D74BA4900F41187 /* MTDatacenterTransferAuthAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A839D18AFB75B007F1076 /* MTDatacenterTransferAuthAction.m */; }; - D0CD987F1D74BA4900F41187 /* MTDatacenterAuthAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83CE18AFB75B007F1076 /* MTDatacenterAuthAction.m */; }; - D0CD98801D74BA4900F41187 /* MTDatacenterAuthMessageService.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83B018AFB75B007F1076 /* MTDatacenterAuthMessageService.m */; }; - D0CD98811D74BA4900F41187 /* MTDatacenterTransferAuthAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A839D18AFB75B007F1076 /* MTDatacenterTransferAuthAction.m */; }; - D0CD98821D74BA4900F41187 /* MTDatacenterAuthAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83CE18AFB75B007F1076 /* MTDatacenterAuthAction.m */; }; - D0CD98831D74BA4900F41187 /* MTDatacenterAuthMessageService.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83B018AFB75B007F1076 /* MTDatacenterAuthMessageService.m */; }; - D0CD98841D74BA5100F41187 /* MTDatacenterAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83CB18AFB75B007F1076 /* MTDatacenterAddress.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98851D74BA5100F41187 /* MTDatacenterAddressSet.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83CD18AFB75B007F1076 /* MTDatacenterAddressSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98861D74BA5100F41187 /* MTDatacenterAuthInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83C918AFB75B007F1076 /* MTDatacenterAuthInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98871D74BA5100F41187 /* MTDatacenterSaltInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83C718AFB75B007F1076 /* MTDatacenterSaltInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98881D74BA5100F41187 /* MTDatacenterAddressListData.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0691ADD987A007D9ED6 /* MTDatacenterAddressListData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98891D74BA5200F41187 /* MTDatacenterAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83CB18AFB75B007F1076 /* MTDatacenterAddress.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD988A1D74BA5200F41187 /* MTDatacenterAddressSet.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83CD18AFB75B007F1076 /* MTDatacenterAddressSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD988B1D74BA5200F41187 /* MTDatacenterAuthInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83C918AFB75B007F1076 /* MTDatacenterAuthInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD988C1D74BA5200F41187 /* MTDatacenterSaltInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A83C718AFB75B007F1076 /* MTDatacenterSaltInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD988D1D74BA5200F41187 /* MTDatacenterAddressListData.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0691ADD987A007D9ED6 /* MTDatacenterAddressListData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD988E1D74BA5900F41187 /* MTDatacenterAddress.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83CA18AFB75B007F1076 /* MTDatacenterAddress.m */; }; - D0CD988F1D74BA5900F41187 /* MTDatacenterAddressSet.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83CC18AFB75B007F1076 /* MTDatacenterAddressSet.m */; }; - D0CD98901D74BA5900F41187 /* MTDatacenterAuthInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83C818AFB75B007F1076 /* MTDatacenterAuthInfo.m */; }; - D0CD98911D74BA5900F41187 /* MTDatacenterSaltInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83C618AFB75B007F1076 /* MTDatacenterSaltInfo.m */; }; - D0CD98921D74BA5900F41187 /* MTDatacenterAddressListData.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A06A1ADD987A007D9ED6 /* MTDatacenterAddressListData.m */; }; - D0CD98931D74BA5A00F41187 /* MTDatacenterAddress.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83CA18AFB75B007F1076 /* MTDatacenterAddress.m */; }; - D0CD98941D74BA5A00F41187 /* MTDatacenterAddressSet.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83CC18AFB75B007F1076 /* MTDatacenterAddressSet.m */; }; - D0CD98951D74BA5A00F41187 /* MTDatacenterAuthInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83C818AFB75B007F1076 /* MTDatacenterAuthInfo.m */; }; - D0CD98961D74BA5A00F41187 /* MTDatacenterSaltInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A83C618AFB75B007F1076 /* MTDatacenterSaltInfo.m */; }; - D0CD98971D74BA5A00F41187 /* MTDatacenterAddressListData.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A06A1ADD987A007D9ED6 /* MTDatacenterAddressListData.m */; }; - D0CD98981D74BA6500F41187 /* MTProto.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32418B1618D00C65116 /* MTProto.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98991D74BA6500F41187 /* MTSessionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32618B1618D00C65116 /* MTSessionInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD989A1D74BA6500F41187 /* MTTimeFixContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32818B1618D00C65116 /* MTTimeFixContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD989B1D74BA6500F41187 /* MTPreparedMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32218B1618D00C65116 /* MTPreparedMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD989C1D74BA6500F41187 /* MTOutgoingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32018B1618D00C65116 /* MTOutgoingMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD989D1D74BA6500F41187 /* MTIncomingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A33618B161B600C65116 /* MTIncomingMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD989E1D74BA6500F41187 /* MTMessageEncryptionKey.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A33818B161B600C65116 /* MTMessageEncryptionKey.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD989F1D74BA6500F41187 /* MTProto.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32418B1618D00C65116 /* MTProto.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98A01D74BA6500F41187 /* MTSessionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32618B1618D00C65116 /* MTSessionInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98A11D74BA6500F41187 /* MTTimeFixContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32818B1618D00C65116 /* MTTimeFixContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98A21D74BA6500F41187 /* MTPreparedMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32218B1618D00C65116 /* MTPreparedMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98A31D74BA6500F41187 /* MTOutgoingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A32018B1618D00C65116 /* MTOutgoingMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98A41D74BA6500F41187 /* MTIncomingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A33618B161B600C65116 /* MTIncomingMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98A51D74BA6500F41187 /* MTMessageEncryptionKey.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A33818B161B600C65116 /* MTMessageEncryptionKey.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98A61D74BA6E00F41187 /* MTProto.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32518B1618D00C65116 /* MTProto.m */; }; - D0CD98A71D74BA6E00F41187 /* MTSessionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32718B1618D00C65116 /* MTSessionInfo.m */; }; - D0CD98A81D74BA6E00F41187 /* MTTimeFixContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32918B1618D00C65116 /* MTTimeFixContext.m */; }; - D0CD98A91D74BA6F00F41187 /* MTPreparedMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32318B1618D00C65116 /* MTPreparedMessage.m */; }; - D0CD98AA1D74BA6F00F41187 /* MTOutgoingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32118B1618D00C65116 /* MTOutgoingMessage.m */; }; - D0CD98AB1D74BA6F00F41187 /* MTIncomingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A33718B161B600C65116 /* MTIncomingMessage.m */; }; - D0CD98AC1D74BA6F00F41187 /* MTMessageEncryptionKey.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A33918B161B600C65116 /* MTMessageEncryptionKey.m */; }; - D0CD98AD1D74BA6F00F41187 /* MTProto.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32518B1618D00C65116 /* MTProto.m */; }; - D0CD98AE1D74BA6F00F41187 /* MTSessionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32718B1618D00C65116 /* MTSessionInfo.m */; }; - D0CD98AF1D74BA6F00F41187 /* MTTimeFixContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32918B1618D00C65116 /* MTTimeFixContext.m */; }; - D0CD98B01D74BA6F00F41187 /* MTPreparedMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32318B1618D00C65116 /* MTPreparedMessage.m */; }; - D0CD98B11D74BA6F00F41187 /* MTOutgoingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A32118B1618D00C65116 /* MTOutgoingMessage.m */; }; - D0CD98B21D74BA6F00F41187 /* MTIncomingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A33718B161B600C65116 /* MTIncomingMessage.m */; }; - D0CD98B31D74BA6F00F41187 /* MTMessageEncryptionKey.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A33918B161B600C65116 /* MTMessageEncryptionKey.m */; }; - D0CD98B41D74BA7500F41187 /* MTNetworkAvailability.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A38318B164F800C65116 /* MTNetworkAvailability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98B51D74BA7500F41187 /* MTTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A38518B164F800C65116 /* MTTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98B61D74BA7500F41187 /* MTTransportTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A38718B164F800C65116 /* MTTransportTransaction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98B71D74BA7500F41187 /* MTNetworkAvailability.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A38318B164F800C65116 /* MTNetworkAvailability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98B81D74BA7500F41187 /* MTTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A38518B164F800C65116 /* MTTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98B91D74BA7500F41187 /* MTTransportTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A38718B164F800C65116 /* MTTransportTransaction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98BA1D74BA7C00F41187 /* MTNetworkAvailability.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A38418B164F800C65116 /* MTNetworkAvailability.m */; }; - D0CD98BB1D74BA7C00F41187 /* MTTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A38618B164F800C65116 /* MTTransport.m */; }; - D0CD98BC1D74BA7C00F41187 /* MTTransportTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A38818B164F800C65116 /* MTTransportTransaction.m */; }; - D0CD98BD1D74BA7C00F41187 /* MTNetworkAvailability.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A38418B164F800C65116 /* MTNetworkAvailability.m */; }; - D0CD98BE1D74BA7C00F41187 /* MTTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A38618B164F800C65116 /* MTTransport.m */; }; - D0CD98BF1D74BA7C00F41187 /* MTTransportTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A38818B164F800C65116 /* MTTransportTransaction.m */; }; - D0CD98C01D74BA8200F41187 /* MTTcpTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A39918B1650400C65116 /* MTTcpTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98C11D74BA8300F41187 /* MTTcpTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A39918B1650400C65116 /* MTTcpTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98C31D74BA8A00F41187 /* MTTcpTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A39A18B1650400C65116 /* MTTcpTransport.m */; }; - D0CD98C41D74BA8A00F41187 /* MTTcpTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A39A18B1650400C65116 /* MTTcpTransport.m */; }; - D0CD98C51D74BA8D00F41187 /* MTTcpConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A39518B1650400C65116 /* MTTcpConnection.h */; }; - D0CD98C61D74BA8D00F41187 /* MTTcpConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A39518B1650400C65116 /* MTTcpConnection.h */; }; - D0CD98C71D74BA9000F41187 /* MTTcpConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A39618B1650400C65116 /* MTTcpConnection.m */; }; - D0CD98C81D74BA9100F41187 /* MTTcpConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A39618B1650400C65116 /* MTTcpConnection.m */; }; - D0CD98CA1D74BA9400F41187 /* MTTcpConnectionBehaviour.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A39718B1650400C65116 /* MTTcpConnectionBehaviour.h */; }; - D0CD98CB1D74BA9500F41187 /* MTTcpConnectionBehaviour.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A39718B1650400C65116 /* MTTcpConnectionBehaviour.h */; }; - D0CD98CC1D74BA9700F41187 /* MTTcpConnectionBehaviour.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A39818B1650400C65116 /* MTTcpConnectionBehaviour.m */; }; - D0CD98CD1D74BA9700F41187 /* MTTcpConnectionBehaviour.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A39818B1650400C65116 /* MTTcpConnectionBehaviour.m */; }; - D0CD98DE1D74BAEA00F41187 /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84EC18AFF259007F1076 /* AFHTTPRequestOperation.m */; }; - D0CD98DF1D74BAEA00F41187 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84F518AFF259007F1076 /* AFURLConnectionOperation.m */; }; - D0CD98E21D74BAEB00F41187 /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84EC18AFF259007F1076 /* AFHTTPRequestOperation.m */; }; - D0CD98E31D74BAEB00F41187 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84F518AFF259007F1076 /* AFURLConnectionOperation.m */; }; - D0CD98E41D74BAF400F41187 /* GCDAsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84F818AFF259007F1076 /* GCDAsyncSocket.m */; }; - D0CD98E51D74BAF400F41187 /* GCDAsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = D05A84F818AFF259007F1076 /* GCDAsyncSocket.m */; }; - D0CD98E81D75C0BB00F41187 /* MTMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A35018B1631900C65116 /* MTMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98E91D75C0BB00F41187 /* MTMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A35018B1631900C65116 /* MTMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98EA1D75C0C100F41187 /* MTMessageTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A35118B1631900C65116 /* MTMessageTransaction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98EB1D75C0C100F41187 /* MTMessageTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A35118B1631900C65116 /* MTMessageTransaction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98EC1D75C0C500F41187 /* MTMessageTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A35218B1631900C65116 /* MTMessageTransaction.m */; }; - D0CD98ED1D75C0C500F41187 /* MTMessageTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A35218B1631900C65116 /* MTMessageTransaction.m */; }; - D0CD98EE1D75C0C900F41187 /* MTTimeSyncMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A35918B164BA00C65116 /* MTTimeSyncMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98EF1D75C0CA00F41187 /* MTTimeSyncMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A35918B164BA00C65116 /* MTTimeSyncMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98F01D75C0D200F41187 /* MTTimeSyncMessageService.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A35A18B164BA00C65116 /* MTTimeSyncMessageService.m */; }; - D0CD98F11D75C0D300F41187 /* MTTimeSyncMessageService.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A35A18B164BA00C65116 /* MTTimeSyncMessageService.m */; }; - D0CD98F21D75C0D700F41187 /* MTRequestMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A36718B164D600C65116 /* MTRequestMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98F31D75C0D700F41187 /* MTRequestMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A36718B164D600C65116 /* MTRequestMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98F41D75C0DD00F41187 /* MTRequestMessageService.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36818B164D600C65116 /* MTRequestMessageService.m */; }; - D0CD98F51D75C0DD00F41187 /* MTRequestMessageService.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36818B164D600C65116 /* MTRequestMessageService.m */; }; - D0CD98F61D75C0E400F41187 /* MTRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A36318B164D600C65116 /* MTRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98F71D75C0E400F41187 /* MTRequestContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A36518B164D600C65116 /* MTRequestContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98F81D75C0E400F41187 /* MTRequestErrorContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DBD22F18B2D72800631ADC /* MTRequestErrorContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98F91D75C0E400F41187 /* MTDropResponseContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A36118B164D600C65116 /* MTDropResponseContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98FA1D75C0E400F41187 /* MTApiEnvironment.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A35F18B164D600C65116 /* MTApiEnvironment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98FB1D75C0E500F41187 /* MTRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A36318B164D600C65116 /* MTRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98FC1D75C0E500F41187 /* MTRequestContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A36518B164D600C65116 /* MTRequestContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98FD1D75C0E500F41187 /* MTRequestErrorContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DBD22F18B2D72800631ADC /* MTRequestErrorContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98FE1D75C0E500F41187 /* MTDropResponseContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A36118B164D600C65116 /* MTDropResponseContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD98FF1D75C0E500F41187 /* MTApiEnvironment.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A35F18B164D600C65116 /* MTApiEnvironment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD99001D75C0ED00F41187 /* MTRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36418B164D600C65116 /* MTRequest.m */; }; - D0CD99011D75C0ED00F41187 /* MTRequestContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36618B164D600C65116 /* MTRequestContext.m */; }; - D0CD99021D75C0ED00F41187 /* MTRequestErrorContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 93DBD23018B2D72800631ADC /* MTRequestErrorContext.m */; }; - D0CD99031D75C0ED00F41187 /* MTDropResponseContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36218B164D600C65116 /* MTDropResponseContext.m */; }; - D0CD99041D75C0ED00F41187 /* MTApiEnvironment.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36018B164D600C65116 /* MTApiEnvironment.m */; }; - D0CD99051D75C0ED00F41187 /* MTRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36418B164D600C65116 /* MTRequest.m */; }; - D0CD99061D75C0ED00F41187 /* MTRequestContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36618B164D600C65116 /* MTRequestContext.m */; }; - D0CD99071D75C0ED00F41187 /* MTRequestErrorContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 93DBD23018B2D72800631ADC /* MTRequestErrorContext.m */; }; - D0CD99081D75C0ED00F41187 /* MTDropResponseContext.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36218B164D600C65116 /* MTDropResponseContext.m */; }; - D0CD99091D75C0ED00F41187 /* MTApiEnvironment.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A36018B164D600C65116 /* MTApiEnvironment.m */; }; - D0CD990A1D75C0F300F41187 /* MTResendMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A37D18B164E600C65116 /* MTResendMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD990B1D75C0F400F41187 /* MTResendMessageService.h in Headers */ = {isa = PBXBuildFile; fileRef = D063A37D18B164E600C65116 /* MTResendMessageService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CD990C1D75C0F900F41187 /* MTResendMessageService.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A37E18B164E600C65116 /* MTResendMessageService.m */; }; - D0CD990D1D75C0F900F41187 /* MTResendMessageService.m in Sources */ = {isa = PBXBuildFile; fileRef = D063A37E18B164E600C65116 /* MTResendMessageService.m */; }; - D0CD990E1D75C12C00F41187 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D00354711C173CD0006610DA /* libz.tbd */; }; - D0CFBB871FD7188200B65C0D /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A84F418AFF259007F1076 /* AFURLConnectionOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CFBB881FD7188200B65C0D /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A84F418AFF259007F1076 /* AFURLConnectionOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CFBB891FD7188200B65C0D /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A84F418AFF259007F1076 /* AFURLConnectionOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CFBB8A1FD718C500B65C0D /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A84EB18AFF259007F1076 /* AFHTTPRequestOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CFBB8B1FD718C500B65C0D /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A84EB18AFF259007F1076 /* AFHTTPRequestOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CFBB8C1FD718C600B65C0D /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D05A84EB18AFF259007F1076 /* AFHTTPRequestOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0D1A0361ADD983C007D9ED6 /* MTBadMsgNotificationMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0041ADD983C007D9ED6 /* MTBadMsgNotificationMessage.h */; }; - D0D1A0371ADD983C007D9ED6 /* MTBadMsgNotificationMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0051ADD983C007D9ED6 /* MTBadMsgNotificationMessage.m */; }; - D0D1A0381ADD983C007D9ED6 /* MTBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0061ADD983C007D9ED6 /* MTBuffer.h */; }; - D0D1A0391ADD983C007D9ED6 /* MTBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0071ADD983C007D9ED6 /* MTBuffer.m */; }; - D0D1A03A1ADD983C007D9ED6 /* MTBufferReader.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0081ADD983C007D9ED6 /* MTBufferReader.h */; }; - D0D1A03B1ADD983C007D9ED6 /* MTBufferReader.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0091ADD983C007D9ED6 /* MTBufferReader.m */; }; - D0D1A03C1ADD983C007D9ED6 /* MTDestroySessionResponseMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A00A1ADD983C007D9ED6 /* MTDestroySessionResponseMessage.h */; }; - D0D1A03D1ADD983C007D9ED6 /* MTDestroySessionResponseMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A00B1ADD983C007D9ED6 /* MTDestroySessionResponseMessage.m */; }; - D0D1A03E1ADD983C007D9ED6 /* MTDropRpcResultMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A00C1ADD983C007D9ED6 /* MTDropRpcResultMessage.h */; }; - D0D1A03F1ADD983C007D9ED6 /* MTDropRpcResultMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A00D1ADD983C007D9ED6 /* MTDropRpcResultMessage.m */; }; - D0D1A0401ADD983C007D9ED6 /* MTExportedAuthorizationData.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A00E1ADD983C007D9ED6 /* MTExportedAuthorizationData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0D1A0411ADD983C007D9ED6 /* MTExportedAuthorizationData.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A00F1ADD983C007D9ED6 /* MTExportedAuthorizationData.m */; }; - D0D1A0421ADD983C007D9ED6 /* MTFutureSaltsMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0101ADD983C007D9ED6 /* MTFutureSaltsMessage.h */; }; - D0D1A0431ADD983C007D9ED6 /* MTFutureSaltsMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0111ADD983C007D9ED6 /* MTFutureSaltsMessage.m */; }; - D0D1A0441ADD983C007D9ED6 /* MTInternalMessageParser.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0121ADD983C007D9ED6 /* MTInternalMessageParser.h */; }; - D0D1A0451ADD983C007D9ED6 /* MTInternalMessageParser.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0131ADD983C007D9ED6 /* MTInternalMessageParser.m */; }; - D0D1A0461ADD983C007D9ED6 /* MTMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0141ADD983C007D9ED6 /* MTMessage.h */; }; - D0D1A0471ADD983C007D9ED6 /* MTMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0151ADD983C007D9ED6 /* MTMessage.m */; }; - D0D1A0481ADD983C007D9ED6 /* MTMsgAllInfoMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0161ADD983C007D9ED6 /* MTMsgAllInfoMessage.h */; }; - D0D1A0491ADD983C007D9ED6 /* MTMsgAllInfoMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0171ADD983C007D9ED6 /* MTMsgAllInfoMessage.m */; }; - D0D1A04A1ADD983C007D9ED6 /* MTMsgContainerMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0181ADD983C007D9ED6 /* MTMsgContainerMessage.h */; }; - D0D1A04B1ADD983C007D9ED6 /* MTMsgContainerMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0191ADD983C007D9ED6 /* MTMsgContainerMessage.m */; }; - D0D1A04C1ADD983C007D9ED6 /* MTMsgDetailedInfoMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A01A1ADD983C007D9ED6 /* MTMsgDetailedInfoMessage.h */; }; - D0D1A04D1ADD983C007D9ED6 /* MTMsgDetailedInfoMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A01B1ADD983C007D9ED6 /* MTMsgDetailedInfoMessage.m */; }; - D0D1A04E1ADD983C007D9ED6 /* MTMsgResendReqMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A01C1ADD983C007D9ED6 /* MTMsgResendReqMessage.h */; }; - D0D1A04F1ADD983C007D9ED6 /* MTMsgResendReqMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A01D1ADD983C007D9ED6 /* MTMsgResendReqMessage.m */; }; - D0D1A0501ADD983C007D9ED6 /* MTMsgsAckMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A01E1ADD983C007D9ED6 /* MTMsgsAckMessage.h */; }; - D0D1A0511ADD983C007D9ED6 /* MTMsgsAckMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A01F1ADD983C007D9ED6 /* MTMsgsAckMessage.m */; }; - D0D1A0521ADD983C007D9ED6 /* MTMsgsStateInfoMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0201ADD983C007D9ED6 /* MTMsgsStateInfoMessage.h */; }; - D0D1A0531ADD983C007D9ED6 /* MTMsgsStateInfoMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0211ADD983C007D9ED6 /* MTMsgsStateInfoMessage.m */; }; - D0D1A0541ADD983C007D9ED6 /* MTMsgsStateReqMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0221ADD983C007D9ED6 /* MTMsgsStateReqMessage.h */; }; - D0D1A0551ADD983C007D9ED6 /* MTMsgsStateReqMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0231ADD983C007D9ED6 /* MTMsgsStateReqMessage.m */; }; - D0D1A0561ADD983C007D9ED6 /* MTNewSessionCreatedMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0241ADD983C007D9ED6 /* MTNewSessionCreatedMessage.h */; }; - D0D1A0571ADD983C007D9ED6 /* MTNewSessionCreatedMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0251ADD983C007D9ED6 /* MTNewSessionCreatedMessage.m */; }; - D0D1A0581ADD983C007D9ED6 /* MTPingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0261ADD983C007D9ED6 /* MTPingMessage.h */; }; - D0D1A0591ADD983C007D9ED6 /* MTPingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0271ADD983C007D9ED6 /* MTPingMessage.m */; }; - D0D1A05A1ADD983C007D9ED6 /* MTPongMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0281ADD983C007D9ED6 /* MTPongMessage.h */; }; - D0D1A05B1ADD983C007D9ED6 /* MTPongMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0291ADD983C007D9ED6 /* MTPongMessage.m */; }; - D0D1A05C1ADD983C007D9ED6 /* MTResPqMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A02A1ADD983C007D9ED6 /* MTResPqMessage.h */; }; - D0D1A05D1ADD983C007D9ED6 /* MTResPqMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A02B1ADD983C007D9ED6 /* MTResPqMessage.m */; }; - D0D1A05E1ADD983C007D9ED6 /* MTRpcError.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A02C1ADD983C007D9ED6 /* MTRpcError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0D1A05F1ADD983C007D9ED6 /* MTRpcError.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A02D1ADD983C007D9ED6 /* MTRpcError.m */; }; - D0D1A0601ADD983C007D9ED6 /* MTRpcResultMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A02E1ADD983C007D9ED6 /* MTRpcResultMessage.h */; }; - D0D1A0611ADD983C007D9ED6 /* MTRpcResultMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A02F1ADD983C007D9ED6 /* MTRpcResultMessage.m */; }; - D0D1A0621ADD983C007D9ED6 /* MTServerDhInnerDataMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0301ADD983C007D9ED6 /* MTServerDhInnerDataMessage.h */; }; - D0D1A0631ADD983C007D9ED6 /* MTServerDhInnerDataMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0311ADD983C007D9ED6 /* MTServerDhInnerDataMessage.m */; }; - D0D1A0641ADD983C007D9ED6 /* MTServerDhParamsMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0321ADD983C007D9ED6 /* MTServerDhParamsMessage.h */; }; - D0D1A0651ADD983C007D9ED6 /* MTServerDhParamsMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0331ADD983C007D9ED6 /* MTServerDhParamsMessage.m */; }; - D0D1A0661ADD983C007D9ED6 /* MTSetClientDhParamsResponseMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0341ADD983C007D9ED6 /* MTSetClientDhParamsResponseMessage.h */; }; - D0D1A0671ADD983C007D9ED6 /* MTSetClientDhParamsResponseMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A0351ADD983C007D9ED6 /* MTSetClientDhParamsResponseMessage.m */; }; - D0D1A06B1ADD987A007D9ED6 /* MTDatacenterAddressListData.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D1A0691ADD987A007D9ED6 /* MTDatacenterAddressListData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0D1A06C1ADD987A007D9ED6 /* MTDatacenterAddressListData.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D1A06A1ADD987A007D9ED6 /* MTDatacenterAddressListData.m */; }; - D0D225101B4D817B0085E26D /* MtProtoKitDynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D2250F1B4D817B0085E26D /* MtProtoKitDynamic.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0D225161B4D817B0085E26D /* MtProtoKitDynamic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D2250B1B4D817B0085E26D /* MtProtoKitDynamic.framework */; }; - D0D2251D1B4D817B0085E26D /* MtProtoKitDynamicTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D2251C1B4D817B0085E26D /* MtProtoKitDynamicTests.m */; }; - D0D2689E1D7A055400C422DA /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0CD990F1D75C16100F41187 /* libcrypto.a */; }; - D0D58B282347E5F000CF7782 /* tonlib_api.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D58AF52347E5F000CF7782 /* tonlib_api.h */; }; - D0D58B292347E5F000CF7782 /* TlObject.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D58AF72347E5F000CF7782 /* TlObject.h */; }; - D0D58B2A2347E5F000CF7782 /* tonlib_client_json.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D58AF92347E5F000CF7782 /* tonlib_client_json.h */; }; - D0D58B2B2347E5F000CF7782 /* tonlibjson_export.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D58AFA2347E5F000CF7782 /* tonlibjson_export.h */; }; - D0D58B2C2347E5F000CF7782 /* Client.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D58AFB2347E5F000CF7782 /* Client.h */; }; - D0D58B2D2347E5F000CF7782 /* Slice-decl.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D58AFE2347E5F000CF7782 /* Slice-decl.h */; }; - D0D58B2E2347E5F000CF7782 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D58AFF2347E5F000CF7782 /* config.h */; }; - D0D58B2F2347E5F000CF7782 /* SharedSlice.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D58B002347E5F000CF7782 /* SharedSlice.h */; }; - D0D58B302347E5F000CF7782 /* Slice.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D58B012347E5F000CF7782 /* Slice.h */; }; - D0D58B312347E5F000CF7782 /* int_types.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D58B022347E5F000CF7782 /* int_types.h */; }; - D0D58B322347E5F000CF7782 /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D58B032347E5F000CF7782 /* common.h */; }; - D0D58B332347E5F000CF7782 /* check.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D58B042347E5F000CF7782 /* check.h */; }; - D0D58B342347E5F000CF7782 /* unique_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D58B052347E5F000CF7782 /* unique_ptr.h */; }; - D0D58B352347E5F000CF7782 /* platform.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D58B072347E5F000CF7782 /* platform.h */; }; - D0D58B362347E5F000CF7782 /* libtl-lite-utils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B092347E5F000CF7782 /* libtl-lite-utils.a */; }; - D0D58B372347E5F000CF7782 /* libtdactor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B0A2347E5F000CF7782 /* libtdactor.a */; }; - D0D58B3D2347E5F000CF7782 /* libton_block.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B122347E5F000CF7782 /* libton_block.a */; }; - D0D58B3E2347E5F000CF7782 /* libadnllite.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B132347E5F000CF7782 /* libadnllite.a */; }; - D0D58B402347E5F000CF7782 /* libtddb.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B152347E5F000CF7782 /* libtddb.a */; }; - D0D58B412347E5F000CF7782 /* libkeys.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B162347E5F000CF7782 /* libkeys.a */; }; - D0D58B422347E5F000CF7782 /* libtdnet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B172347E5F000CF7782 /* libtdnet.a */; }; - D0D58B432347E5F000CF7782 /* libtdutils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B182347E5F000CF7782 /* libtdutils.a */; }; - D0D58B442347E5F000CF7782 /* libton_crypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B192347E5F000CF7782 /* libton_crypto.a */; }; - D0D58B4B2347E5F000CF7782 /* libtl-utils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B212347E5F000CF7782 /* libtl-utils.a */; }; - D0D58B4C2347E5F000CF7782 /* libtl_lite_api.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B222347E5F000CF7782 /* libtl_lite_api.a */; }; - D0D58B4D2347E5F000CF7782 /* libcrc32c.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B232347E5F000CF7782 /* libcrc32c.a */; }; - D0D58B4E2347E5F000CF7782 /* libtl_api.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B242347E5F000CF7782 /* libtl_api.a */; }; - D0D58B4F2347E5F000CF7782 /* libtonlib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B252347E5F000CF7782 /* libtonlib.a */; }; - D0D58B502347E5F000CF7782 /* liblite-client-common.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B262347E5F000CF7782 /* liblite-client-common.a */; }; - D0D58B512347E5F000CF7782 /* libtl_tonlib_api.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D58B272347E5F000CF7782 /* libtl_tonlib_api.a */; }; - D0D58B522347E64000CF7782 /* TON.h in Headers */ = {isa = PBXBuildFile; fileRef = D08A159B22DD32F20073B508 /* TON.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0D58B532347E6A100CF7782 /* TON.mm in Sources */ = {isa = PBXBuildFile; fileRef = D08A159C22DD32F20073B508 /* TON.mm */; }; - D0E2E17720866780005737E8 /* MTDNS.h in Headers */ = {isa = PBXBuildFile; fileRef = D0E2E17520866780005737E8 /* MTDNS.h */; }; - D0E2E17820866780005737E8 /* MTDNS.h in Headers */ = {isa = PBXBuildFile; fileRef = D0E2E17520866780005737E8 /* MTDNS.h */; }; - D0E2E17920866780005737E8 /* MTDNS.h in Headers */ = {isa = PBXBuildFile; fileRef = D0E2E17520866780005737E8 /* MTDNS.h */; }; - D0E2E17A20866780005737E8 /* MTDNS.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E2E17620866780005737E8 /* MTDNS.m */; }; - D0E2E17B20866780005737E8 /* MTDNS.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E2E17620866780005737E8 /* MTDNS.m */; }; - D0E2E17C20866780005737E8 /* MTDNS.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E2E17620866780005737E8 /* MTDNS.m */; }; - D0E9B9ED1F0176DA00F079A4 /* MTBackupAddressSignals.h in Headers */ = {isa = PBXBuildFile; fileRef = D0E9B9EB1F0176DA00F079A4 /* MTBackupAddressSignals.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0E9B9EE1F0176DA00F079A4 /* MTBackupAddressSignals.h in Headers */ = {isa = PBXBuildFile; fileRef = D0E9B9EB1F0176DA00F079A4 /* MTBackupAddressSignals.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0E9B9EF1F0176DA00F079A4 /* MTBackupAddressSignals.h in Headers */ = {isa = PBXBuildFile; fileRef = D0E9B9EB1F0176DA00F079A4 /* MTBackupAddressSignals.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0E9B9F01F0176DA00F079A4 /* MTBackupAddressSignals.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E9B9EC1F0176DA00F079A4 /* MTBackupAddressSignals.m */; }; - D0E9B9F11F0176DA00F079A4 /* MTBackupAddressSignals.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E9B9EC1F0176DA00F079A4 /* MTBackupAddressSignals.m */; }; - D0E9B9F21F0176DA00F079A4 /* MTBackupAddressSignals.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E9B9EC1F0176DA00F079A4 /* MTBackupAddressSignals.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - D003546B1C173BF0006610DA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D05A830A18AFB3F9007F1076 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D0CB05F61ADC4483005E298F; - remoteInfo = MtProtoKit; - }; - D0D225171B4D817B0085E26D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D05A830A18AFB3F9007F1076 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D0D2250A1B4D817B0085E26D; - remoteInfo = MtProtoKitDynamic; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 93DBD22F18B2D72800631ADC /* MTRequestErrorContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTRequestErrorContext.h; path = MtProtoKit/MTRequestErrorContext.h; sourceTree = ""; }; - 93DBD23018B2D72800631ADC /* MTRequestErrorContext.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTRequestErrorContext.m; path = MtProtoKit/MTRequestErrorContext.m; sourceTree = ""; }; - 93DBD23318B2D9AA00631ADC /* MTTime.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MTTime.h; path = MtProtoKit/MTTime.h; sourceTree = ""; }; - 93DBD23418B2DA1E00631ADC /* MTTime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTTime.m; path = MtProtoKit/MTTime.m; sourceTree = ""; }; - D00083C822DD33E500EC418C /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; - D00083CA22DD42F600EC418C /* libtonlibjson.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtonlibjson.dylib; path = TON/libtonlibjson.dylib; sourceTree = ""; }; - D00083D722DD467100EC418C /* libtdjson.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtdjson.dylib; path = TON/libtdjson.dylib; sourceTree = ""; }; - D00354651C173BF0006610DA /* MtProtoKitStabilityTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MtProtoKitStabilityTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - D00354671C173BF0006610DA /* MtProtoKitStabilityTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MtProtoKitStabilityTests.m; sourceTree = ""; }; - D00354691C173BF0006610DA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D00354711C173CD0006610DA /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - D00354731C173CD9006610DA /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; - D010DB7B1D70ABEE0012AD96 /* MTRsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRsa.h; sourceTree = ""; }; - D010DB7C1D70ABEE0012AD96 /* MTRsa.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTRsa.m; sourceTree = ""; }; - D010DB7F1D70B3B90012AD96 /* MTAes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTAes.h; sourceTree = ""; }; - D010DB801D70B3B90012AD96 /* MTAes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTAes.m; sourceTree = ""; }; - D0119CBF20CAD34800895300 /* MTConnectionProbing.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTConnectionProbing.h; sourceTree = ""; }; - D0119CC020CAD34800895300 /* MTConnectionProbing.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTConnectionProbing.m; sourceTree = ""; }; - D0119CC720CAD65D00895300 /* PingFoundation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PingFoundation.h; sourceTree = ""; }; - D0119CC820CAD65D00895300 /* PingFoundation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PingFoundation.m; sourceTree = ""; }; - D015E016225CD19E00CB9E8A /* MTGzip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTGzip.h; sourceTree = ""; }; - D015E017225CD19E00CB9E8A /* MTGzip.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTGzip.m; sourceTree = ""; }; - D018558A22DDD36C00AC458A /* Client.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Client.h; sourceTree = ""; }; - D018558B22DDD36C00AC458A /* TlObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TlObject.h; sourceTree = ""; }; - D018558C22DDD36C00AC458A /* tonlib_api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tonlib_api.h; sourceTree = ""; }; - D018558D22DDD36C00AC458A /* int_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = int_types.h; sourceTree = ""; }; - D018558E22DDD36C00AC458A /* TonlibCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TonlibCallback.h; sourceTree = ""; }; - D018558F22DDD36C00AC458A /* platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = platform.h; sourceTree = ""; }; - D018559F22DDD38B00AC458A /* libtl_lite_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtl_lite_api.a; path = TON/libtl_lite_api.a; sourceTree = ""; }; - D01855A022DDD38C00AC458A /* libadnllite.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libadnllite.a; path = TON/libadnllite.a; sourceTree = ""; }; - D01855A122DDD38C00AC458A /* libfift.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfift.a; path = TON/libfift.a; sourceTree = ""; }; - D01855A222DDD38C00AC458A /* libkeys.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libkeys.a; path = TON/libkeys.a; sourceTree = ""; }; - D01855A322DDD38C00AC458A /* libtl-lite-utils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libtl-lite-utils.a"; path = "TON/libtl-lite-utils.a"; sourceTree = ""; }; - D01855A422DDD38C00AC458A /* libtl-utils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libtl-utils.a"; path = "TON/libtl-utils.a"; sourceTree = ""; }; - D01855A522DDD38C00AC458A /* libton_db.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libton_db.a; path = TON/libton_db.a; sourceTree = ""; }; - D01855A622DDD38C00AC458A /* libtonlib.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtonlib.a; path = TON/libtonlib.a; sourceTree = ""; }; - D01855A722DDD38C00AC458A /* libterminal.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libterminal.a; path = TON/libterminal.a; sourceTree = ""; }; - D01855A822DDD38C00AC458A /* libtonlibjson_private.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtonlibjson_private.a; path = TON/libtonlibjson_private.a; sourceTree = ""; }; - D01855A922DDD38C00AC458A /* libton_crypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libton_crypto.a; path = TON/libton_crypto.a; sourceTree = ""; }; - D01855AA22DDD38C00AC458A /* libtl_tonlib_api_json.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtl_tonlib_api_json.a; path = TON/libtl_tonlib_api_json.a; sourceTree = ""; }; - D01855AB22DDD38C00AC458A /* libtdnet.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtdnet.a; path = TON/libtdnet.a; sourceTree = ""; }; - D01855AC22DDD38C00AC458A /* libtl_tonlib_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtl_tonlib_api.a; path = TON/libtl_tonlib_api.a; sourceTree = ""; }; - D01855AD22DDD38C00AC458A /* libtonlibjson_static.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtonlibjson_static.a; path = TON/libtonlibjson_static.a; sourceTree = ""; }; - D01855AE22DDD38D00AC458A /* libton_block.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libton_block.a; path = TON/libton_block.a; sourceTree = ""; }; - D01855AF22DDD38D00AC458A /* libtl_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtl_api.a; path = TON/libtl_api.a; sourceTree = ""; }; - D01855B022DDD38D00AC458A /* libcrc32c.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrc32c.a; path = TON/libcrc32c.a; sourceTree = ""; }; - D01855B122DDD38D00AC458A /* libtdtl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtdtl.a; path = TON/libtdtl.a; sourceTree = ""; }; - D01855B222DDD38D00AC458A /* libmemprof.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmemprof.a; path = TON/libmemprof.a; sourceTree = ""; }; - D0185E702089D265005E1A6C /* MTProxyConnectivity.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTProxyConnectivity.h; sourceTree = ""; }; - D0185E712089D265005E1A6C /* MTProxyConnectivity.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTProxyConnectivity.m; sourceTree = ""; }; - D01B262623324B8F00A6448B /* libtdnet.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtdnet.a; path = TON/lib/macos/libtdnet.a; sourceTree = ""; }; - D01B262723324B9000A6448B /* libtl_tonlib_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtl_tonlib_api.a; path = TON/lib/macos/libtl_tonlib_api.a; sourceTree = ""; }; - D01B262823324B9000A6448B /* libtdutils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtdutils.a; path = TON/lib/macos/libtdutils.a; sourceTree = ""; }; - D01B262923324B9000A6448B /* libtl_lite_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtl_lite_api.a; path = TON/lib/macos/libtl_lite_api.a; sourceTree = ""; }; - D01B262A23324B9000A6448B /* libtl-utils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libtl-utils.a"; path = "TON/lib/macos/libtl-utils.a"; sourceTree = ""; }; - D01B262B23324B9000A6448B /* libton_block.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libton_block.a; path = TON/lib/macos/libton_block.a; sourceTree = ""; }; - D01B262C23324B9000A6448B /* libtonlib.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtonlib.a; path = TON/lib/macos/libtonlib.a; sourceTree = ""; }; - D01B262D23324B9000A6448B /* liblite-client-common.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "liblite-client-common.a"; path = "TON/lib/macos/liblite-client-common.a"; sourceTree = ""; }; - D01B262E23324B9000A6448B /* libtddb.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtddb.a; path = TON/lib/macos/libtddb.a; sourceTree = ""; }; - D01B262F23324B9000A6448B /* libadnllite.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libadnllite.a; path = TON/lib/macos/libadnllite.a; sourceTree = ""; }; - D01B263023324B9000A6448B /* libton_crypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libton_crypto.a; path = TON/lib/macos/libton_crypto.a; sourceTree = ""; }; - D01B263123324B9000A6448B /* libtdactor.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtdactor.a; path = TON/lib/macos/libtdactor.a; sourceTree = ""; }; - D01B263223324B9000A6448B /* libtl-lite-utils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libtl-lite-utils.a"; path = "TON/lib/macos/libtl-lite-utils.a"; sourceTree = ""; }; - D01B263323324B9000A6448B /* libkeys.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libkeys.a; path = TON/lib/macos/libkeys.a; sourceTree = ""; }; - D01B263423324B9000A6448B /* libtl_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtl_api.a; path = TON/lib/macos/libtl_api.a; sourceTree = ""; }; - D01B263523324B9000A6448B /* libcrc32c.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrc32c.a; path = TON/lib/macos/libcrc32c.a; sourceTree = ""; }; - D020FAF81D994E3100F279AA /* MTHttpRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTHttpRequestOperation.h; path = MTProtoKit/MTHttpRequestOperation.h; sourceTree = ""; }; - D020FAF91D994E3100F279AA /* MTHttpRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTHttpRequestOperation.m; path = MTProtoKit/MTHttpRequestOperation.m; sourceTree = ""; }; - D0254CC518B10404009452AA /* MTEncryption.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTEncryption.h; path = MTProtoKit/MTEncryption.h; sourceTree = ""; }; - D0338737223BC115007A2CE4 /* MTPKCS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTPKCS.h; sourceTree = ""; }; - D0338738223BC115007A2CE4 /* MTPKCS.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTPKCS.m; sourceTree = ""; }; - D038789D2332500A00DB441C /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/lib/libc++.tbd"; sourceTree = DEVELOPER_DIR; }; - D038789F2332503300DB441C /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - D03878A12332503E00DB441C /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - D03878A32332504600DB441C /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - D03878A52332506700DB441C /* libton_crypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libton_crypto.a; path = TON/lib/ios/libton_crypto.a; sourceTree = ""; }; - D03878A62332506700DB441C /* libmemprof.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmemprof.a; path = TON/lib/ios/libmemprof.a; sourceTree = ""; }; - D03878A72332506700DB441C /* libtonlib.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtonlib.a; path = TON/lib/ios/libtonlib.a; sourceTree = ""; }; - D03878A82332506700DB441C /* libtonlibjson_private.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtonlibjson_private.a; path = TON/lib/ios/libtonlibjson_private.a; sourceTree = ""; }; - D03878A92332506700DB441C /* libtdtl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtdtl.a; path = TON/lib/ios/libtdtl.a; sourceTree = ""; }; - D03878AA2332506700DB441C /* libkeys.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libkeys.a; path = TON/lib/ios/libkeys.a; sourceTree = ""; }; - D03878AB2332506700DB441C /* libtdnet.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtdnet.a; path = TON/lib/ios/libtdnet.a; sourceTree = ""; }; - D03878AC2332506700DB441C /* libtonlibjson_static.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtonlibjson_static.a; path = TON/lib/ios/libtonlibjson_static.a; sourceTree = ""; }; - D03878AD2332506700DB441C /* libfift.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfift.a; path = TON/lib/ios/libfift.a; sourceTree = ""; }; - D03878AE2332506800DB441C /* libtl_tonlib_api_json.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtl_tonlib_api_json.a; path = TON/lib/ios/libtl_tonlib_api_json.a; sourceTree = ""; }; - D03878AF2332506800DB441C /* libtl-utils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libtl-utils.a"; path = "TON/lib/ios/libtl-utils.a"; sourceTree = ""; }; - D03878B02332506800DB441C /* libadnllite.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libadnllite.a; path = TON/lib/ios/libadnllite.a; sourceTree = ""; }; - D03878B12332506800DB441C /* libtl_tonlib_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtl_tonlib_api.a; path = TON/lib/ios/libtl_tonlib_api.a; sourceTree = ""; }; - D03878B22332506800DB441C /* libtdutils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtdutils.a; path = TON/lib/ios/libtdutils.a; sourceTree = ""; }; - D03878B32332506800DB441C /* libterminal.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libterminal.a; path = TON/lib/ios/libterminal.a; sourceTree = ""; }; - D03878B42332506800DB441C /* libtl_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtl_api.a; path = TON/lib/ios/libtl_api.a; sourceTree = ""; }; - D03878B52332506800DB441C /* libcrc32c.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrc32c.a; path = TON/lib/ios/libcrc32c.a; sourceTree = ""; }; - D03878B62332506800DB441C /* libtl-lite-utils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libtl-lite-utils.a"; path = "TON/lib/ios/libtl-lite-utils.a"; sourceTree = ""; }; - D03878B72332506800DB441C /* libtddb.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtddb.a; path = TON/lib/ios/libtddb.a; sourceTree = ""; }; - D03878B82332506800DB441C /* libtl_lite_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtl_lite_api.a; path = TON/lib/ios/libtl_lite_api.a; sourceTree = ""; }; - D03878B92332506800DB441C /* libton_block.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libton_block.a; path = TON/lib/ios/libton_block.a; sourceTree = ""; }; - D03878BA2332506800DB441C /* libton_db.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libton_db.a; path = TON/lib/ios/libton_db.a; sourceTree = ""; }; - D03878BB2332506800DB441C /* libtdactor.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtdactor.a; path = TON/lib/ios/libtdactor.a; sourceTree = ""; }; - D03878D3233250CF00DB441C /* libtonlibjson.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtonlibjson.dylib; path = TON/lib/macos/libtonlibjson.dylib; sourceTree = ""; }; - D03878D4233250CF00DB441C /* libtonlibjson.0.5.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtonlibjson.0.5.dylib; path = TON/lib/macos/libtonlibjson.0.5.dylib; sourceTree = ""; }; - D0503AD818B027F80074C3FE /* MTOutputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTOutputStream.h; path = MTProtoKit/MTOutputStream.h; sourceTree = ""; }; - D0503AD918B027F80074C3FE /* MTOutputStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTOutputStream.m; path = MTProtoKit/MTOutputStream.m; sourceTree = ""; }; - D0503ADC18B029480074C3FE /* MTInputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTInputStream.h; path = MTProtoKit/MTInputStream.h; sourceTree = ""; }; - D0503ADD18B029480074C3FE /* MTInputStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTInputStream.m; path = MTProtoKit/MTInputStream.m; sourceTree = ""; }; - D0529D2921A434BF00D7C3C4 /* MTTransportSchemeStats.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTTransportSchemeStats.h; sourceTree = ""; }; - D0529D2A21A434BF00D7C3C4 /* MTTransportSchemeStats.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTTransportSchemeStats.m; sourceTree = ""; }; - D0580ABE1B0F3E7100E8235B /* SSignalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SSignalKit.framework; path = "../../../../Library/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos/SSignalKit.framework"; sourceTree = ""; }; - D0580AC01B0F3E9C00E8235B /* MTDiscoverConnectionSignals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTDiscoverConnectionSignals.h; sourceTree = ""; }; - D0580AC11B0F3E9C00E8235B /* MTDiscoverConnectionSignals.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTDiscoverConnectionSignals.m; sourceTree = ""; }; - D05A831718AFB3F9007F1076 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - D05A832818AFB3F9007F1076 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - D05A832B18AFB3F9007F1076 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - D05A833418AFB3F9007F1076 /* MtProtoKitTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "MtProtoKitTests-Info.plist"; sourceTree = ""; }; - D05A833618AFB3F9007F1076 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - D05A833818AFB3F9007F1076 /* MtProtoKitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MtProtoKitTests.m; sourceTree = ""; }; - D05A834818AFB40C007F1076 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; - D05A834B18AFB40C007F1076 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - D05A834C18AFB40C007F1076 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; - D05A834D18AFB40C007F1076 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; - D05A835018AFB40C007F1076 /* MtProtoKitOSX-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "MtProtoKitOSX-Info.plist"; sourceTree = ""; }; - D05A835218AFB40C007F1076 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - D05A835418AFB40C007F1076 /* MtProtoKitOSX-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MtProtoKitOSX-Prefix.pch"; sourceTree = ""; }; - D05A839C18AFB75B007F1076 /* MTContext.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTContext.m; path = MTProtoKit/MTContext.m; sourceTree = ""; }; - D05A839D18AFB75B007F1076 /* MTDatacenterTransferAuthAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTDatacenterTransferAuthAction.m; path = MTProtoKit/MTDatacenterTransferAuthAction.m; sourceTree = ""; }; - D05A839E18AFB75B007F1076 /* MTContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTContext.h; path = MTProtoKit/MTContext.h; sourceTree = ""; }; - D05A839F18AFB75B007F1076 /* MTDatacenterTransferAuthAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTDatacenterTransferAuthAction.h; path = MTProtoKit/MTDatacenterTransferAuthAction.h; sourceTree = ""; }; - D05A83A018AFB75B007F1076 /* MTDatacenterAuthAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTDatacenterAuthAction.h; path = MTProtoKit/MTDatacenterAuthAction.h; sourceTree = ""; }; - D05A83A318AFB75B007F1076 /* MTKeychain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTKeychain.m; path = MTProtoKit/MTKeychain.m; sourceTree = ""; }; - D05A83B018AFB75B007F1076 /* MTDatacenterAuthMessageService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTDatacenterAuthMessageService.m; path = MTProtoKit/MTDatacenterAuthMessageService.m; sourceTree = ""; }; - D05A83B518AFB75B007F1076 /* MTSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTSerialization.h; path = MTProtoKit/MTSerialization.h; sourceTree = ""; }; - D05A83C018AFB75B007F1076 /* MTKeychain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTKeychain.h; path = MTProtoKit/MTKeychain.h; sourceTree = ""; }; - D05A83C618AFB75B007F1076 /* MTDatacenterSaltInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTDatacenterSaltInfo.m; path = MTProtoKit/MTDatacenterSaltInfo.m; sourceTree = ""; }; - D05A83C718AFB75B007F1076 /* MTDatacenterSaltInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTDatacenterSaltInfo.h; path = MTProtoKit/MTDatacenterSaltInfo.h; sourceTree = ""; }; - D05A83C818AFB75B007F1076 /* MTDatacenterAuthInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTDatacenterAuthInfo.m; path = MTProtoKit/MTDatacenterAuthInfo.m; sourceTree = ""; }; - D05A83C918AFB75B007F1076 /* MTDatacenterAuthInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTDatacenterAuthInfo.h; path = MTProtoKit/MTDatacenterAuthInfo.h; sourceTree = ""; }; - D05A83CA18AFB75B007F1076 /* MTDatacenterAddress.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTDatacenterAddress.m; path = MTProtoKit/MTDatacenterAddress.m; sourceTree = ""; }; - D05A83CB18AFB75B007F1076 /* MTDatacenterAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTDatacenterAddress.h; path = MTProtoKit/MTDatacenterAddress.h; sourceTree = ""; }; - D05A83CC18AFB75B007F1076 /* MTDatacenterAddressSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTDatacenterAddressSet.m; path = MTProtoKit/MTDatacenterAddressSet.m; sourceTree = ""; }; - D05A83CD18AFB75B007F1076 /* MTDatacenterAddressSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTDatacenterAddressSet.h; path = MTProtoKit/MTDatacenterAddressSet.h; sourceTree = ""; }; - D05A83CE18AFB75B007F1076 /* MTDatacenterAuthAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTDatacenterAuthAction.m; path = MTProtoKit/MTDatacenterAuthAction.m; sourceTree = ""; }; - D05A83D118AFB75B007F1076 /* MTInternalId.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTInternalId.h; path = MTProtoKit/MTInternalId.h; sourceTree = ""; }; - D05A83D418AFB75B007F1076 /* MTDiscoverDatacenterAddressAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTDiscoverDatacenterAddressAction.m; path = MTProtoKit/MTDiscoverDatacenterAddressAction.m; sourceTree = ""; }; - D05A83D518AFB75B007F1076 /* MTDiscoverDatacenterAddressAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTDiscoverDatacenterAddressAction.h; path = MTProtoKit/MTDiscoverDatacenterAddressAction.h; sourceTree = ""; }; - D05A83D918AFB75B007F1076 /* MTDatacenterAuthMessageService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTDatacenterAuthMessageService.h; path = MTProtoKit/MTDatacenterAuthMessageService.h; sourceTree = ""; }; - D05A849F18AFCF8E007F1076 /* MTQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTQueue.h; path = MTProtoKit/MTQueue.h; sourceTree = ""; }; - D05A84A018AFCF8E007F1076 /* MTQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTQueue.m; path = MTProtoKit/MTQueue.m; sourceTree = ""; }; - D05A84D818AFE81C007F1076 /* MTTimer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTTimer.m; path = MTProtoKit/MTTimer.m; sourceTree = ""; }; - D05A84D918AFE81D007F1076 /* MTTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTTimer.h; path = MTProtoKit/MTTimer.h; sourceTree = ""; }; - D05A84DA18AFE81D007F1076 /* MTLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTLogging.h; path = MTProtoKit/MTLogging.h; sourceTree = ""; }; - D05A84DB18AFE81D007F1076 /* MTLogging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTLogging.m; path = MTProtoKit/MTLogging.m; sourceTree = ""; }; - D05A84DC18AFE81D007F1076 /* MTEncryption.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTEncryption.m; path = MTProtoKit/MTEncryption.m; sourceTree = ""; }; - D05A84EB18AFF259007F1076 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPRequestOperation.h; sourceTree = ""; }; - D05A84EC18AFF259007F1076 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPRequestOperation.m; sourceTree = ""; }; - D05A84F418AFF259007F1076 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLConnectionOperation.h; sourceTree = ""; }; - D05A84F518AFF259007F1076 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLConnectionOperation.m; sourceTree = ""; }; - D05A84F718AFF259007F1076 /* GCDAsyncSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDAsyncSocket.h; sourceTree = ""; }; - D05A84F818AFF259007F1076 /* GCDAsyncSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDAsyncSocket.m; sourceTree = ""; }; - D063A2F918B14AB500C65116 /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/lib/libcrypto.dylib; sourceTree = DEVELOPER_DIR; }; - D063A31518B157F700C65116 /* MtProtoKit-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "MtProtoKit-Prefix.pch"; path = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; sourceTree = SOURCE_ROOT; }; - D063A31818B157F700C65116 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = ""; }; - D063A31918B157F700C65116 /* MtProtoKit-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "MtProtoKit-Info.plist"; path = "MtProtoKitiOS/MtProtoKit-Info.plist"; sourceTree = SOURCE_ROOT; }; - D063A31D18B158AE00C65116 /* MTProtoKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTProtoKit.h; path = MTProtoKit/MTProtoKit.h; sourceTree = ""; }; - D063A32018B1618D00C65116 /* MTOutgoingMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTOutgoingMessage.h; path = MTProtoKit/MTOutgoingMessage.h; sourceTree = ""; }; - D063A32118B1618D00C65116 /* MTOutgoingMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTOutgoingMessage.m; path = MTProtoKit/MTOutgoingMessage.m; sourceTree = ""; }; - D063A32218B1618D00C65116 /* MTPreparedMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTPreparedMessage.h; path = MTProtoKit/MTPreparedMessage.h; sourceTree = ""; }; - D063A32318B1618D00C65116 /* MTPreparedMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTPreparedMessage.m; path = MTProtoKit/MTPreparedMessage.m; sourceTree = ""; }; - D063A32418B1618D00C65116 /* MTProto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTProto.h; path = MTProtoKit/MTProto.h; sourceTree = ""; }; - D063A32518B1618D00C65116 /* MTProto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTProto.m; path = MTProtoKit/MTProto.m; sourceTree = ""; }; - D063A32618B1618D00C65116 /* MTSessionInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTSessionInfo.h; path = MTProtoKit/MTSessionInfo.h; sourceTree = ""; }; - D063A32718B1618D00C65116 /* MTSessionInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTSessionInfo.m; path = MTProtoKit/MTSessionInfo.m; sourceTree = ""; }; - D063A32818B1618D00C65116 /* MTTimeFixContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTTimeFixContext.h; path = MTProtoKit/MTTimeFixContext.h; sourceTree = ""; }; - D063A32918B1618D00C65116 /* MTTimeFixContext.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTTimeFixContext.m; path = MTProtoKit/MTTimeFixContext.m; sourceTree = ""; }; - D063A33418B161B600C65116 /* MTTransportScheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTTransportScheme.h; path = MTProtoKit/MTTransportScheme.h; sourceTree = ""; }; - D063A33518B161B600C65116 /* MTTransportScheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTTransportScheme.m; path = MTProtoKit/MTTransportScheme.m; sourceTree = ""; }; - D063A33618B161B600C65116 /* MTIncomingMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTIncomingMessage.h; path = MTProtoKit/MTIncomingMessage.h; sourceTree = ""; }; - D063A33718B161B600C65116 /* MTIncomingMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTIncomingMessage.m; path = MTProtoKit/MTIncomingMessage.m; sourceTree = ""; }; - D063A33818B161B600C65116 /* MTMessageEncryptionKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTMessageEncryptionKey.h; path = MTProtoKit/MTMessageEncryptionKey.h; sourceTree = ""; }; - D063A33918B161B600C65116 /* MTMessageEncryptionKey.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTMessageEncryptionKey.m; path = MTProtoKit/MTMessageEncryptionKey.m; sourceTree = ""; }; - D063A35018B1631900C65116 /* MTMessageService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTMessageService.h; path = MTProtoKit/MTMessageService.h; sourceTree = ""; }; - D063A35118B1631900C65116 /* MTMessageTransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTMessageTransaction.h; path = MTProtoKit/MTMessageTransaction.h; sourceTree = ""; }; - D063A35218B1631900C65116 /* MTMessageTransaction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTMessageTransaction.m; path = MTProtoKit/MTMessageTransaction.m; sourceTree = ""; }; - D063A35918B164BA00C65116 /* MTTimeSyncMessageService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTTimeSyncMessageService.h; path = MTProtoKit/MTTimeSyncMessageService.h; sourceTree = ""; }; - D063A35A18B164BA00C65116 /* MTTimeSyncMessageService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTTimeSyncMessageService.m; path = MTProtoKit/MTTimeSyncMessageService.m; sourceTree = ""; }; - D063A35F18B164D600C65116 /* MTApiEnvironment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTApiEnvironment.h; path = MTProtoKit/MTApiEnvironment.h; sourceTree = ""; }; - D063A36018B164D600C65116 /* MTApiEnvironment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTApiEnvironment.m; path = MTProtoKit/MTApiEnvironment.m; sourceTree = ""; }; - D063A36118B164D600C65116 /* MTDropResponseContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTDropResponseContext.h; path = MTProtoKit/MTDropResponseContext.h; sourceTree = ""; }; - D063A36218B164D600C65116 /* MTDropResponseContext.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTDropResponseContext.m; path = MTProtoKit/MTDropResponseContext.m; sourceTree = ""; }; - D063A36318B164D600C65116 /* MTRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTRequest.h; path = MTProtoKit/MTRequest.h; sourceTree = ""; }; - D063A36418B164D600C65116 /* MTRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTRequest.m; path = MTProtoKit/MTRequest.m; sourceTree = ""; }; - D063A36518B164D600C65116 /* MTRequestContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTRequestContext.h; path = MTProtoKit/MTRequestContext.h; sourceTree = ""; }; - D063A36618B164D600C65116 /* MTRequestContext.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTRequestContext.m; path = MTProtoKit/MTRequestContext.m; sourceTree = ""; }; - D063A36718B164D600C65116 /* MTRequestMessageService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTRequestMessageService.h; path = MTProtoKit/MTRequestMessageService.h; sourceTree = ""; }; - D063A36818B164D600C65116 /* MTRequestMessageService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTRequestMessageService.m; path = MTProtoKit/MTRequestMessageService.m; sourceTree = ""; }; - D063A37D18B164E600C65116 /* MTResendMessageService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTResendMessageService.h; path = MTProtoKit/MTResendMessageService.h; sourceTree = ""; }; - D063A37E18B164E600C65116 /* MTResendMessageService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTResendMessageService.m; path = MTProtoKit/MTResendMessageService.m; sourceTree = ""; }; - D063A38318B164F800C65116 /* MTNetworkAvailability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTNetworkAvailability.h; path = MTProtoKit/MTNetworkAvailability.h; sourceTree = ""; }; - D063A38418B164F800C65116 /* MTNetworkAvailability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTNetworkAvailability.m; path = MTProtoKit/MTNetworkAvailability.m; sourceTree = ""; }; - D063A38518B164F800C65116 /* MTTransport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTTransport.h; path = MTProtoKit/MTTransport.h; sourceTree = ""; }; - D063A38618B164F800C65116 /* MTTransport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTTransport.m; path = MTProtoKit/MTTransport.m; sourceTree = ""; }; - D063A38718B164F800C65116 /* MTTransportTransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTTransportTransaction.h; path = MTProtoKit/MTTransportTransaction.h; sourceTree = ""; }; - D063A38818B164F800C65116 /* MTTransportTransaction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTTransportTransaction.m; path = MTProtoKit/MTTransportTransaction.m; sourceTree = ""; }; - D063A39518B1650400C65116 /* MTTcpConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTTcpConnection.h; path = MTProtoKit/MTTcpConnection.h; sourceTree = ""; }; - D063A39618B1650400C65116 /* MTTcpConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTTcpConnection.m; path = MTProtoKit/MTTcpConnection.m; sourceTree = ""; }; - D063A39718B1650400C65116 /* MTTcpConnectionBehaviour.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTTcpConnectionBehaviour.h; path = MTProtoKit/MTTcpConnectionBehaviour.h; sourceTree = ""; }; - D063A39818B1650400C65116 /* MTTcpConnectionBehaviour.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTTcpConnectionBehaviour.m; path = MTProtoKit/MTTcpConnectionBehaviour.m; sourceTree = ""; }; - D063A39918B1650400C65116 /* MTTcpTransport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTTcpTransport.h; path = MTProtoKit/MTTcpTransport.h; sourceTree = ""; }; - D063A39A18B1650400C65116 /* MTTcpTransport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTTcpTransport.m; path = MTProtoKit/MTTcpTransport.m; sourceTree = ""; }; - D079AB971AF39B8000076F59 /* MtProtoKitMac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MtProtoKitMac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D079AB9A1AF39B8000076F59 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D079AB9B1AF39B8000076F59 /* MtProtoKitMac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MtProtoKitMac.h; sourceTree = ""; }; - D079ABA71AF39B8000076F59 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D079ABA81AF39B8000076F59 /* MtProtoKitMacTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MtProtoKitMacTests.m; sourceTree = ""; }; - D08A158F22DD32B40073B508 /* tonlibjson_export.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tonlibjson_export.h; sourceTree = ""; }; - D08A159022DD32B40073B508 /* tonlib_client_json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tonlib_client_json.h; sourceTree = ""; }; - D08A159322DD32CF0073B508 /* libtdutils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtdutils.a; path = TON/libtdutils.a; sourceTree = ""; }; - D08A159422DD32CF0073B508 /* libtdactor.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtdactor.a; path = TON/libtdactor.a; sourceTree = ""; }; - D08A159522DD32CF0073B508 /* libtddb.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtddb.a; path = TON/libtddb.a; sourceTree = ""; }; - D08A159622DD32CF0073B508 /* libtonlibjson.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtonlibjson.a; path = TON/libtonlibjson.a; sourceTree = ""; }; - D08A159B22DD32F20073B508 /* TON.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TON.h; sourceTree = ""; }; - D08A159C22DD32F20073B508 /* TON.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = TON.mm; sourceTree = ""; }; - D09A59561B582EFF00FC3724 /* MTFileBasedKeychain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTFileBasedKeychain.h; path = MTProtoKit/MTFileBasedKeychain.h; sourceTree = ""; }; - D09A59571B582EFF00FC3724 /* MTFileBasedKeychain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTFileBasedKeychain.m; path = MTProtoKit/MTFileBasedKeychain.m; sourceTree = ""; }; - D0B0DF5C1DD7E75B003BA12D /* MTBag.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTBag.m; sourceTree = ""; }; - D0B0DF601DD7E768003BA12D /* MTBag.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTBag.h; sourceTree = ""; }; - D0B418741D7E04B7004562A4 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - D0B418761D7E04C3004562A4 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - D0B418781D7E04CB004562A4 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - D0B4187A1D7E04CF004562A4 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/lib/libz.tbd; sourceTree = DEVELOPER_DIR; }; - D0B4187C1D7E04EB004562A4 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = openssl/OSX/libcrypto.a; sourceTree = ""; }; - D0BFAE5E20AB504600793CF2 /* MTDatacenterVerificationData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTDatacenterVerificationData.h; sourceTree = ""; }; - D0BFAE5F20AB504600793CF2 /* MTDatacenterVerificationData.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTDatacenterVerificationData.m; sourceTree = ""; }; - D0C0EAE41FB5DBEA00DCF07C /* MTBindingTempAuthKeyContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTBindingTempAuthKeyContext.h; sourceTree = ""; }; - D0C0EAE51FB5DBEA00DCF07C /* MTBindingTempAuthKeyContext.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTBindingTempAuthKeyContext.m; sourceTree = ""; }; - D0C932211E095D6A0074F044 /* MTNetworkUsageCalculationInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTNetworkUsageCalculationInfo.h; sourceTree = ""; }; - D0C932221E095D6A0074F044 /* MTNetworkUsageCalculationInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTNetworkUsageCalculationInfo.m; sourceTree = ""; }; - D0C932291E095E280074F044 /* MTNetworkUsageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTNetworkUsageManager.h; sourceTree = ""; }; - D0C9322A1E095E280074F044 /* MTNetworkUsageManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTNetworkUsageManager.m; sourceTree = ""; }; - D0CAF2C91D75E24C0011F558 /* MTSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTSignal.h; sourceTree = ""; }; - D0CAF2CA1D75E24C0011F558 /* MTSignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTSignal.m; sourceTree = ""; }; - D0CAF2D11D75E26D0011F558 /* MTSubscriber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTSubscriber.h; sourceTree = ""; }; - D0CAF2D21D75E26D0011F558 /* MTSubscriber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTSubscriber.m; sourceTree = ""; }; - D0CAF2D51D75E2840011F558 /* MTDisposable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTDisposable.h; sourceTree = ""; }; - D0CAF2D61D75E2840011F558 /* MTDisposable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTDisposable.m; sourceTree = ""; }; - D0CAF2E11D75E7F30011F558 /* MTAtomic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTAtomic.h; sourceTree = ""; }; - D0CAF2E21D75E7F30011F558 /* MTAtomic.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTAtomic.m; sourceTree = ""; }; - D0CAF2EB1D75F4520011F558 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; - D0CAF2EE1D75F4E20011F558 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - D0CAF2F01D75F4EA0011F558 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; - D0CB05F71ADC4483005E298F /* MtProtoKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MtProtoKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0CB05FA1ADC4483005E298F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0CB05FB1ADC4483005E298F /* MtProtoKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MtProtoKit.h; sourceTree = ""; }; - D0CB06071ADC4483005E298F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0CB06081ADC4483005E298F /* MtProtoKitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MtProtoKitTests.m; sourceTree = ""; }; - D0CD98E61D75BFAE00F41187 /* SSignalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SSignalKit.framework; path = "../SSignalKit/build/Debug-iphoneos/SSignalKit.framework"; sourceTree = ""; }; - D0CD990F1D75C16100F41187 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = openssl/iOS/libcrypto.a; sourceTree = ""; }; - D0D1A0041ADD983C007D9ED6 /* MTBadMsgNotificationMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTBadMsgNotificationMessage.h; path = MTProtoKit/MTBadMsgNotificationMessage.h; sourceTree = ""; }; - D0D1A0051ADD983C007D9ED6 /* MTBadMsgNotificationMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTBadMsgNotificationMessage.m; path = MTProtoKit/MTBadMsgNotificationMessage.m; sourceTree = ""; }; - D0D1A0061ADD983C007D9ED6 /* MTBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTBuffer.h; path = MTProtoKit/MTBuffer.h; sourceTree = ""; }; - D0D1A0071ADD983C007D9ED6 /* MTBuffer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTBuffer.m; path = MTProtoKit/MTBuffer.m; sourceTree = ""; }; - D0D1A0081ADD983C007D9ED6 /* MTBufferReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTBufferReader.h; path = MTProtoKit/MTBufferReader.h; sourceTree = ""; }; - D0D1A0091ADD983C007D9ED6 /* MTBufferReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTBufferReader.m; path = MTProtoKit/MTBufferReader.m; sourceTree = ""; }; - D0D1A00A1ADD983C007D9ED6 /* MTDestroySessionResponseMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTDestroySessionResponseMessage.h; path = MTProtoKit/MTDestroySessionResponseMessage.h; sourceTree = ""; }; - D0D1A00B1ADD983C007D9ED6 /* MTDestroySessionResponseMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTDestroySessionResponseMessage.m; path = MTProtoKit/MTDestroySessionResponseMessage.m; sourceTree = ""; }; - D0D1A00C1ADD983C007D9ED6 /* MTDropRpcResultMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTDropRpcResultMessage.h; path = MTProtoKit/MTDropRpcResultMessage.h; sourceTree = ""; }; - D0D1A00D1ADD983C007D9ED6 /* MTDropRpcResultMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTDropRpcResultMessage.m; path = MTProtoKit/MTDropRpcResultMessage.m; sourceTree = ""; }; - D0D1A00E1ADD983C007D9ED6 /* MTExportedAuthorizationData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTExportedAuthorizationData.h; path = MTProtoKit/MTExportedAuthorizationData.h; sourceTree = ""; }; - D0D1A00F1ADD983C007D9ED6 /* MTExportedAuthorizationData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTExportedAuthorizationData.m; path = MTProtoKit/MTExportedAuthorizationData.m; sourceTree = ""; }; - D0D1A0101ADD983C007D9ED6 /* MTFutureSaltsMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTFutureSaltsMessage.h; path = MTProtoKit/MTFutureSaltsMessage.h; sourceTree = ""; }; - D0D1A0111ADD983C007D9ED6 /* MTFutureSaltsMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTFutureSaltsMessage.m; path = MTProtoKit/MTFutureSaltsMessage.m; sourceTree = ""; }; - D0D1A0121ADD983C007D9ED6 /* MTInternalMessageParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTInternalMessageParser.h; path = MTProtoKit/MTInternalMessageParser.h; sourceTree = ""; }; - D0D1A0131ADD983C007D9ED6 /* MTInternalMessageParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTInternalMessageParser.m; path = MTProtoKit/MTInternalMessageParser.m; sourceTree = ""; }; - D0D1A0141ADD983C007D9ED6 /* MTMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTMessage.h; path = MTProtoKit/MTMessage.h; sourceTree = ""; }; - D0D1A0151ADD983C007D9ED6 /* MTMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTMessage.m; path = MTProtoKit/MTMessage.m; sourceTree = ""; }; - D0D1A0161ADD983C007D9ED6 /* MTMsgAllInfoMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTMsgAllInfoMessage.h; path = MTProtoKit/MTMsgAllInfoMessage.h; sourceTree = ""; }; - D0D1A0171ADD983C007D9ED6 /* MTMsgAllInfoMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTMsgAllInfoMessage.m; path = MTProtoKit/MTMsgAllInfoMessage.m; sourceTree = ""; }; - D0D1A0181ADD983C007D9ED6 /* MTMsgContainerMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTMsgContainerMessage.h; path = MTProtoKit/MTMsgContainerMessage.h; sourceTree = ""; }; - D0D1A0191ADD983C007D9ED6 /* MTMsgContainerMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTMsgContainerMessage.m; path = MTProtoKit/MTMsgContainerMessage.m; sourceTree = ""; }; - D0D1A01A1ADD983C007D9ED6 /* MTMsgDetailedInfoMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTMsgDetailedInfoMessage.h; path = MTProtoKit/MTMsgDetailedInfoMessage.h; sourceTree = ""; }; - D0D1A01B1ADD983C007D9ED6 /* MTMsgDetailedInfoMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTMsgDetailedInfoMessage.m; path = MTProtoKit/MTMsgDetailedInfoMessage.m; sourceTree = ""; }; - D0D1A01C1ADD983C007D9ED6 /* MTMsgResendReqMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTMsgResendReqMessage.h; path = MTProtoKit/MTMsgResendReqMessage.h; sourceTree = ""; }; - D0D1A01D1ADD983C007D9ED6 /* MTMsgResendReqMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTMsgResendReqMessage.m; path = MTProtoKit/MTMsgResendReqMessage.m; sourceTree = ""; }; - D0D1A01E1ADD983C007D9ED6 /* MTMsgsAckMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTMsgsAckMessage.h; path = MTProtoKit/MTMsgsAckMessage.h; sourceTree = ""; }; - D0D1A01F1ADD983C007D9ED6 /* MTMsgsAckMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTMsgsAckMessage.m; path = MTProtoKit/MTMsgsAckMessage.m; sourceTree = ""; }; - D0D1A0201ADD983C007D9ED6 /* MTMsgsStateInfoMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTMsgsStateInfoMessage.h; path = MTProtoKit/MTMsgsStateInfoMessage.h; sourceTree = ""; }; - D0D1A0211ADD983C007D9ED6 /* MTMsgsStateInfoMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTMsgsStateInfoMessage.m; path = MTProtoKit/MTMsgsStateInfoMessage.m; sourceTree = ""; }; - D0D1A0221ADD983C007D9ED6 /* MTMsgsStateReqMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTMsgsStateReqMessage.h; path = MTProtoKit/MTMsgsStateReqMessage.h; sourceTree = ""; }; - D0D1A0231ADD983C007D9ED6 /* MTMsgsStateReqMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTMsgsStateReqMessage.m; path = MTProtoKit/MTMsgsStateReqMessage.m; sourceTree = ""; }; - D0D1A0241ADD983C007D9ED6 /* MTNewSessionCreatedMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTNewSessionCreatedMessage.h; path = MTProtoKit/MTNewSessionCreatedMessage.h; sourceTree = ""; }; - D0D1A0251ADD983C007D9ED6 /* MTNewSessionCreatedMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTNewSessionCreatedMessage.m; path = MTProtoKit/MTNewSessionCreatedMessage.m; sourceTree = ""; }; - D0D1A0261ADD983C007D9ED6 /* MTPingMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTPingMessage.h; path = MTProtoKit/MTPingMessage.h; sourceTree = ""; }; - D0D1A0271ADD983C007D9ED6 /* MTPingMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTPingMessage.m; path = MTProtoKit/MTPingMessage.m; sourceTree = ""; }; - D0D1A0281ADD983C007D9ED6 /* MTPongMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTPongMessage.h; path = MTProtoKit/MTPongMessage.h; sourceTree = ""; }; - D0D1A0291ADD983C007D9ED6 /* MTPongMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTPongMessage.m; path = MTProtoKit/MTPongMessage.m; sourceTree = ""; }; - D0D1A02A1ADD983C007D9ED6 /* MTResPqMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTResPqMessage.h; path = MTProtoKit/MTResPqMessage.h; sourceTree = ""; }; - D0D1A02B1ADD983C007D9ED6 /* MTResPqMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTResPqMessage.m; path = MTProtoKit/MTResPqMessage.m; sourceTree = ""; }; - D0D1A02C1ADD983C007D9ED6 /* MTRpcError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTRpcError.h; path = MTProtoKit/MTRpcError.h; sourceTree = ""; }; - D0D1A02D1ADD983C007D9ED6 /* MTRpcError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTRpcError.m; path = MTProtoKit/MTRpcError.m; sourceTree = ""; }; - D0D1A02E1ADD983C007D9ED6 /* MTRpcResultMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTRpcResultMessage.h; path = MTProtoKit/MTRpcResultMessage.h; sourceTree = ""; }; - D0D1A02F1ADD983C007D9ED6 /* MTRpcResultMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTRpcResultMessage.m; path = MTProtoKit/MTRpcResultMessage.m; sourceTree = ""; }; - D0D1A0301ADD983C007D9ED6 /* MTServerDhInnerDataMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTServerDhInnerDataMessage.h; path = MTProtoKit/MTServerDhInnerDataMessage.h; sourceTree = ""; }; - D0D1A0311ADD983C007D9ED6 /* MTServerDhInnerDataMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTServerDhInnerDataMessage.m; path = MTProtoKit/MTServerDhInnerDataMessage.m; sourceTree = ""; }; - D0D1A0321ADD983C007D9ED6 /* MTServerDhParamsMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTServerDhParamsMessage.h; path = MTProtoKit/MTServerDhParamsMessage.h; sourceTree = ""; }; - D0D1A0331ADD983C007D9ED6 /* MTServerDhParamsMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTServerDhParamsMessage.m; path = MTProtoKit/MTServerDhParamsMessage.m; sourceTree = ""; }; - D0D1A0341ADD983C007D9ED6 /* MTSetClientDhParamsResponseMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTSetClientDhParamsResponseMessage.h; path = MTProtoKit/MTSetClientDhParamsResponseMessage.h; sourceTree = ""; }; - D0D1A0351ADD983C007D9ED6 /* MTSetClientDhParamsResponseMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTSetClientDhParamsResponseMessage.m; path = MTProtoKit/MTSetClientDhParamsResponseMessage.m; sourceTree = ""; }; - D0D1A0691ADD987A007D9ED6 /* MTDatacenterAddressListData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTDatacenterAddressListData.h; path = MTProtoKit/MTDatacenterAddressListData.h; sourceTree = ""; }; - D0D1A06A1ADD987A007D9ED6 /* MTDatacenterAddressListData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTDatacenterAddressListData.m; path = MTProtoKit/MTDatacenterAddressListData.m; sourceTree = ""; }; - D0D1A0711ADDE2FC007D9ED6 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; - D0D2250B1B4D817B0085E26D /* MtProtoKitDynamic.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MtProtoKitDynamic.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0D2250E1B4D817B0085E26D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0D2250F1B4D817B0085E26D /* MtProtoKitDynamic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MtProtoKitDynamic.h; sourceTree = ""; }; - D0D225151B4D817B0085E26D /* MtProtoKitDynamicTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MtProtoKitDynamicTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - D0D2251B1B4D817B0085E26D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0D2251C1B4D817B0085E26D /* MtProtoKitDynamicTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MtProtoKitDynamicTests.m; sourceTree = ""; }; - D0D58AF52347E5F000CF7782 /* tonlib_api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tonlib_api.h; sourceTree = ""; }; - D0D58AF72347E5F000CF7782 /* TlObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TlObject.h; sourceTree = ""; }; - D0D58AF92347E5F000CF7782 /* tonlib_client_json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tonlib_client_json.h; sourceTree = ""; }; - D0D58AFA2347E5F000CF7782 /* tonlibjson_export.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tonlibjson_export.h; sourceTree = ""; }; - D0D58AFB2347E5F000CF7782 /* Client.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Client.h; sourceTree = ""; }; - D0D58AFE2347E5F000CF7782 /* Slice-decl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Slice-decl.h"; sourceTree = ""; }; - D0D58AFF2347E5F000CF7782 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; - D0D58B002347E5F000CF7782 /* SharedSlice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedSlice.h; sourceTree = ""; }; - D0D58B012347E5F000CF7782 /* Slice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Slice.h; sourceTree = ""; }; - D0D58B022347E5F000CF7782 /* int_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = int_types.h; sourceTree = ""; }; - D0D58B032347E5F000CF7782 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; - D0D58B042347E5F000CF7782 /* check.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = check.h; sourceTree = ""; }; - D0D58B052347E5F000CF7782 /* unique_ptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unique_ptr.h; sourceTree = ""; }; - D0D58B072347E5F000CF7782 /* platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = platform.h; sourceTree = ""; }; - D0D58B092347E5F000CF7782 /* libtl-lite-utils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libtl-lite-utils.a"; sourceTree = ""; }; - D0D58B0A2347E5F000CF7782 /* libtdactor.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libtdactor.a; sourceTree = ""; }; - D0D58B0B2347E5F000CF7782 /* libtonlibjson.0.5.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libtonlibjson.0.5.dylib; sourceTree = ""; }; - D0D58B0E2347E5F000CF7782 /* TonlibConfigVersion.cmake */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TonlibConfigVersion.cmake; sourceTree = ""; }; - D0D58B0F2347E5F000CF7782 /* TonlibConfig.cmake */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TonlibConfig.cmake; sourceTree = ""; }; - D0D58B102347E5F000CF7782 /* TonlibTargets-release.cmake */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "TonlibTargets-release.cmake"; sourceTree = ""; }; - D0D58B112347E5F000CF7782 /* TonlibTargets.cmake */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TonlibTargets.cmake; sourceTree = ""; }; - D0D58B122347E5F000CF7782 /* libton_block.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libton_block.a; sourceTree = ""; }; - D0D58B132347E5F000CF7782 /* libadnllite.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libadnllite.a; sourceTree = ""; }; - D0D58B142347E5F000CF7782 /* libtonlibjson.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libtonlibjson.dylib; sourceTree = ""; }; - D0D58B152347E5F000CF7782 /* libtddb.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libtddb.a; sourceTree = ""; }; - D0D58B162347E5F000CF7782 /* libkeys.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libkeys.a; sourceTree = ""; }; - D0D58B172347E5F000CF7782 /* libtdnet.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libtdnet.a; sourceTree = ""; }; - D0D58B182347E5F000CF7782 /* libtdutils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libtdutils.a; sourceTree = ""; }; - D0D58B192347E5F000CF7782 /* libton_crypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libton_crypto.a; sourceTree = ""; }; - D0D58B1B2347E5F000CF7782 /* Lisp.fif */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Lisp.fif; sourceTree = ""; }; - D0D58B1C2347E5F000CF7782 /* Asm.fif */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Asm.fif; sourceTree = ""; }; - D0D58B1D2347E5F000CF7782 /* TonUtil.fif */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TonUtil.fif; sourceTree = ""; }; - D0D58B1E2347E5F000CF7782 /* Fift.fif */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Fift.fif; sourceTree = ""; }; - D0D58B1F2347E5F000CF7782 /* Lists.fif */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Lists.fif; sourceTree = ""; }; - D0D58B202347E5F000CF7782 /* Stack.fif */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Stack.fif; sourceTree = ""; }; - D0D58B212347E5F000CF7782 /* libtl-utils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libtl-utils.a"; sourceTree = ""; }; - D0D58B222347E5F000CF7782 /* libtl_lite_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libtl_lite_api.a; sourceTree = ""; }; - D0D58B232347E5F000CF7782 /* libcrc32c.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libcrc32c.a; sourceTree = ""; }; - D0D58B242347E5F000CF7782 /* libtl_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libtl_api.a; sourceTree = ""; }; - D0D58B252347E5F000CF7782 /* libtonlib.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libtonlib.a; sourceTree = ""; }; - D0D58B262347E5F000CF7782 /* liblite-client-common.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "liblite-client-common.a"; sourceTree = ""; }; - D0D58B272347E5F000CF7782 /* libtl_tonlib_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libtl_tonlib_api.a; sourceTree = ""; }; - D0E1D6731CBC20BA00B04029 /* SSignalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SSignalKit.framework; path = "../../../../Library/Developer/Xcode/DerivedData/Telegram-iOS-diblohvjozhgaifjcniwdlixlilx/Build/Products/Debug-iphonesimulator/SSignalKit.framework"; sourceTree = ""; }; - D0E2E17520866780005737E8 /* MTDNS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTDNS.h; sourceTree = ""; }; - D0E2E17620866780005737E8 /* MTDNS.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTDNS.m; sourceTree = ""; }; - D0E9B9EB1F0176DA00F079A4 /* MTBackupAddressSignals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTBackupAddressSignals.h; sourceTree = ""; }; - D0E9B9EC1F0176DA00F079A4 /* MTBackupAddressSignals.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTBackupAddressSignals.m; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - D00354621C173BF0006610DA /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D00354741C173CD9006610DA /* SystemConfiguration.framework in Frameworks */, - D00354721C173CD0006610DA /* libz.tbd in Frameworks */, - D00354701C173CB9006610DA /* SSignalKit.framework in Frameworks */, - D003546A1C173BF0006610DA /* MtProtoKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D079AB931AF39B8000076F59 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D0D58B512347E5F000CF7782 /* libtl_tonlib_api.a in Frameworks */, - D03878A42332504600DB441C /* CFNetwork.framework in Frameworks */, - D0D58B412347E5F000CF7782 /* libkeys.a in Frameworks */, - D0D58B442347E5F000CF7782 /* libton_crypto.a in Frameworks */, - D0D58B362347E5F000CF7782 /* libtl-lite-utils.a in Frameworks */, - D03878A22332503E00DB441C /* SystemConfiguration.framework in Frameworks */, - D0D58B4E2347E5F000CF7782 /* libtl_api.a in Frameworks */, - D0D58B4F2347E5F000CF7782 /* libtonlib.a in Frameworks */, - D0D58B502347E5F000CF7782 /* liblite-client-common.a in Frameworks */, - D0D58B402347E5F000CF7782 /* libtddb.a in Frameworks */, - D0D58B3E2347E5F000CF7782 /* libadnllite.a in Frameworks */, - D0D58B372347E5F000CF7782 /* libtdactor.a in Frameworks */, - D03878A02332503300DB441C /* Security.framework in Frameworks */, - D0D58B4B2347E5F000CF7782 /* libtl-utils.a in Frameworks */, - D0B4187D1D7E04EB004562A4 /* libcrypto.a in Frameworks */, - D0D58B432347E5F000CF7782 /* libtdutils.a in Frameworks */, - D0D58B422347E5F000CF7782 /* libtdnet.a in Frameworks */, - D0D58B4C2347E5F000CF7782 /* libtl_lite_api.a in Frameworks */, - D0D58B3D2347E5F000CF7782 /* libton_block.a in Frameworks */, - D0D58B4D2347E5F000CF7782 /* libcrc32c.a in Frameworks */, - D038789E2332500A00DB441C /* libc++.tbd in Frameworks */, - D0B4187B1D7E04CF004562A4 /* libz.tbd in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0CB05F31ADC4483005E298F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D0D2689E1D7A055400C422DA /* libcrypto.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0D225071B4D817B0085E26D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D03878BC2332506800DB441C /* libton_crypto.a in Frameworks */, - D03878BD2332506800DB441C /* libmemprof.a in Frameworks */, - D03878BE2332506800DB441C /* libtonlib.a in Frameworks */, - D03878BF2332506800DB441C /* libtonlibjson_private.a in Frameworks */, - D03878C02332506800DB441C /* libtdtl.a in Frameworks */, - D03878C12332506800DB441C /* libkeys.a in Frameworks */, - D03878C22332506800DB441C /* libtdnet.a in Frameworks */, - D03878C32332506800DB441C /* libtonlibjson_static.a in Frameworks */, - D03878C42332506800DB441C /* libfift.a in Frameworks */, - D03878C52332506800DB441C /* libtl_tonlib_api_json.a in Frameworks */, - D03878C62332506800DB441C /* libtl-utils.a in Frameworks */, - D03878C72332506800DB441C /* libadnllite.a in Frameworks */, - D03878C82332506800DB441C /* libtl_tonlib_api.a in Frameworks */, - D03878C92332506800DB441C /* libtdutils.a in Frameworks */, - D03878CA2332506800DB441C /* libterminal.a in Frameworks */, - D03878CB2332506800DB441C /* libtl_api.a in Frameworks */, - D03878CC2332506800DB441C /* libcrc32c.a in Frameworks */, - D03878CD2332506800DB441C /* libtl-lite-utils.a in Frameworks */, - D03878CE2332506800DB441C /* libtddb.a in Frameworks */, - D03878CF2332506800DB441C /* libtl_lite_api.a in Frameworks */, - D03878D02332506800DB441C /* libton_block.a in Frameworks */, - D03878D12332506800DB441C /* libton_db.a in Frameworks */, - D03878D22332506800DB441C /* libtdactor.a in Frameworks */, - D00083C922DD33E500EC418C /* libc++.tbd in Frameworks */, - D0CAF2FD1D7628FD0011F558 /* libcrypto.a in Frameworks */, - D0CAF2F11D75F4EA0011F558 /* CFNetwork.framework in Frameworks */, - D0CAF2EF1D75F4E20011F558 /* UIKit.framework in Frameworks */, - D0CAF2ED1D75F4570011F558 /* SystemConfiguration.framework in Frameworks */, - D0CAF2EC1D75F4520011F558 /* Security.framework in Frameworks */, - D0CD990E1D75C12C00F41187 /* libz.tbd in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0D225121B4D817B0085E26D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D0D225161B4D817B0085E26D /* MtProtoKitDynamic.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 9389BC4F18DA1EDB00F9C1A6 /* Transport Scheme */ = { - isa = PBXGroup; - children = ( - D063A33418B161B600C65116 /* MTTransportScheme.h */, - D063A33518B161B600C65116 /* MTTransportScheme.m */, - D0580AC01B0F3E9C00E8235B /* MTDiscoverConnectionSignals.h */, - D0580AC11B0F3E9C00E8235B /* MTDiscoverConnectionSignals.m */, - ); - name = "Transport Scheme"; - sourceTree = ""; - }; - D00354661C173BF0006610DA /* MtProtoKitStabilityTests */ = { - isa = PBXGroup; - children = ( - D00354671C173BF0006610DA /* MtProtoKitStabilityTests.m */, - D00354691C173BF0006610DA /* Info.plist */, - ); - path = MtProtoKitStabilityTests; - sourceTree = ""; - }; - D018558922DDD36C00AC458A /* include */ = { - isa = PBXGroup; - children = ( - D018558A22DDD36C00AC458A /* Client.h */, - D018558B22DDD36C00AC458A /* TlObject.h */, - D018558C22DDD36C00AC458A /* tonlib_api.h */, - D018558D22DDD36C00AC458A /* int_types.h */, - D018558E22DDD36C00AC458A /* TonlibCallback.h */, - D018558F22DDD36C00AC458A /* platform.h */, - ); - path = include; - sourceTree = ""; - }; - D05A830918AFB3F9007F1076 = { - isa = PBXGroup; - children = ( - D08A158E22DD32740073B508 /* TON */, - D05A84E718AFF0EE007F1076 /* Third Party */, - D05A849B18AFCA3D007F1076 /* MTProtoKit */, - D05A831918AFB3F9007F1076 /* MtProtoKit iOS */, - D05A834E18AFB40C007F1076 /* MtProtoKitOSX */, - D05A833218AFB3F9007F1076 /* MtProtoKit Tests */, - D0CB05F81ADC4483005E298F /* MtProtoKit */, - D0CB06051ADC4483005E298F /* MtProtoKitTests */, - D079AB981AF39B8000076F59 /* MtProtoKitMac */, - D079ABA51AF39B8000076F59 /* MtProtoKitMacTests */, - D0D2250C1B4D817B0085E26D /* MtProtoKitDynamic */, - D0D225191B4D817B0085E26D /* MtProtoKitDynamicTests */, - D00354661C173BF0006610DA /* MtProtoKitStabilityTests */, - D05A831618AFB3F9007F1076 /* Frameworks */, - D05A831518AFB3F9007F1076 /* Products */, - ); - sourceTree = ""; - }; - D05A831518AFB3F9007F1076 /* Products */ = { - isa = PBXGroup; - children = ( - D0CB05F71ADC4483005E298F /* MtProtoKit.framework */, - D079AB971AF39B8000076F59 /* MtProtoKitMac.framework */, - D0D2250B1B4D817B0085E26D /* MtProtoKitDynamic.framework */, - D0D225151B4D817B0085E26D /* MtProtoKitDynamicTests.xctest */, - D00354651C173BF0006610DA /* MtProtoKitStabilityTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - D05A831618AFB3F9007F1076 /* Frameworks */ = { - isa = PBXGroup; - children = ( - D03878D4233250CF00DB441C /* libtonlibjson.0.5.dylib */, - D03878D3233250CF00DB441C /* libtonlibjson.dylib */, - D03878B02332506800DB441C /* libadnllite.a */, - D03878B52332506800DB441C /* libcrc32c.a */, - D03878AD2332506700DB441C /* libfift.a */, - D03878AA2332506700DB441C /* libkeys.a */, - D03878A62332506700DB441C /* libmemprof.a */, - D03878BB2332506800DB441C /* libtdactor.a */, - D03878B72332506800DB441C /* libtddb.a */, - D03878AB2332506700DB441C /* libtdnet.a */, - D03878A92332506700DB441C /* libtdtl.a */, - D03878B22332506800DB441C /* libtdutils.a */, - D03878B32332506800DB441C /* libterminal.a */, - D03878B42332506800DB441C /* libtl_api.a */, - D03878B82332506800DB441C /* libtl_lite_api.a */, - D03878AE2332506800DB441C /* libtl_tonlib_api_json.a */, - D03878B12332506800DB441C /* libtl_tonlib_api.a */, - D03878B62332506800DB441C /* libtl-lite-utils.a */, - D03878AF2332506800DB441C /* libtl-utils.a */, - D03878B92332506800DB441C /* libton_block.a */, - D03878A52332506700DB441C /* libton_crypto.a */, - D03878BA2332506800DB441C /* libton_db.a */, - D03878A72332506700DB441C /* libtonlib.a */, - D03878A82332506700DB441C /* libtonlibjson_private.a */, - D03878AC2332506700DB441C /* libtonlibjson_static.a */, - D03878A32332504600DB441C /* CFNetwork.framework */, - D03878A12332503E00DB441C /* SystemConfiguration.framework */, - D038789F2332503300DB441C /* Security.framework */, - D038789D2332500A00DB441C /* libc++.tbd */, - D01855A022DDD38C00AC458A /* libadnllite.a */, - D01855B022DDD38D00AC458A /* libcrc32c.a */, - D01B262F23324B9000A6448B /* libadnllite.a */, - D01B263523324B9000A6448B /* libcrc32c.a */, - D01B263323324B9000A6448B /* libkeys.a */, - D01B262D23324B9000A6448B /* liblite-client-common.a */, - D01B263123324B9000A6448B /* libtdactor.a */, - D01B262E23324B9000A6448B /* libtddb.a */, - D01B262623324B8F00A6448B /* libtdnet.a */, - D01B262823324B9000A6448B /* libtdutils.a */, - D01B263423324B9000A6448B /* libtl_api.a */, - D01B262923324B9000A6448B /* libtl_lite_api.a */, - D01B262723324B9000A6448B /* libtl_tonlib_api.a */, - D01B263223324B9000A6448B /* libtl-lite-utils.a */, - D01B262A23324B9000A6448B /* libtl-utils.a */, - D01B262B23324B9000A6448B /* libton_block.a */, - D01B263023324B9000A6448B /* libton_crypto.a */, - D01B262C23324B9000A6448B /* libtonlib.a */, - D01855A122DDD38C00AC458A /* libfift.a */, - D01855A222DDD38C00AC458A /* libkeys.a */, - D01855B222DDD38D00AC458A /* libmemprof.a */, - D01855AB22DDD38C00AC458A /* libtdnet.a */, - D01855B122DDD38D00AC458A /* libtdtl.a */, - D01855A722DDD38C00AC458A /* libterminal.a */, - D01855AF22DDD38D00AC458A /* libtl_api.a */, - D018559F22DDD38B00AC458A /* libtl_lite_api.a */, - D01855AA22DDD38C00AC458A /* libtl_tonlib_api_json.a */, - D01855AC22DDD38C00AC458A /* libtl_tonlib_api.a */, - D01855A322DDD38C00AC458A /* libtl-lite-utils.a */, - D01855A422DDD38C00AC458A /* libtl-utils.a */, - D01855AE22DDD38D00AC458A /* libton_block.a */, - D01855A922DDD38C00AC458A /* libton_crypto.a */, - D01855A522DDD38C00AC458A /* libton_db.a */, - D01855A622DDD38C00AC458A /* libtonlib.a */, - D01855A822DDD38C00AC458A /* libtonlibjson_private.a */, - D01855AD22DDD38C00AC458A /* libtonlibjson_static.a */, - D00083D722DD467100EC418C /* libtdjson.dylib */, - D00083CA22DD42F600EC418C /* libtonlibjson.dylib */, - D00083C822DD33E500EC418C /* libc++.tbd */, - D08A159422DD32CF0073B508 /* libtdactor.a */, - D08A159522DD32CF0073B508 /* libtddb.a */, - D08A159322DD32CF0073B508 /* libtdutils.a */, - D08A159622DD32CF0073B508 /* libtonlibjson.a */, - D0B4187C1D7E04EB004562A4 /* libcrypto.a */, - D0B4187A1D7E04CF004562A4 /* libz.tbd */, - D0B418781D7E04CB004562A4 /* Security.framework */, - D0B418761D7E04C3004562A4 /* SystemConfiguration.framework */, - D0B418741D7E04B7004562A4 /* CFNetwork.framework */, - D0CAF2F01D75F4EA0011F558 /* CFNetwork.framework */, - D0CAF2EE1D75F4E20011F558 /* UIKit.framework */, - D0CAF2EB1D75F4520011F558 /* Security.framework */, - D0CD990F1D75C16100F41187 /* libcrypto.a */, - D0CD98E61D75BFAE00F41187 /* SSignalKit.framework */, - D0E1D6731CBC20BA00B04029 /* SSignalKit.framework */, - D00354731C173CD9006610DA /* SystemConfiguration.framework */, - D00354711C173CD0006610DA /* libz.tbd */, - D0580ABE1B0F3E7100E8235B /* SSignalKit.framework */, - D0D1A0711ADDE2FC007D9ED6 /* libz.dylib */, - D063A2F918B14AB500C65116 /* libcrypto.dylib */, - D05A831718AFB3F9007F1076 /* Foundation.framework */, - D05A832818AFB3F9007F1076 /* XCTest.framework */, - D05A832B18AFB3F9007F1076 /* UIKit.framework */, - D05A834818AFB40C007F1076 /* Cocoa.framework */, - D05A834A18AFB40C007F1076 /* Other Frameworks */, - ); - name = Frameworks; - sourceTree = ""; - }; - D05A831918AFB3F9007F1076 /* MtProtoKit iOS */ = { - isa = PBXGroup; - children = ( - D05A831A18AFB3F9007F1076 /* Supporting Files */, - ); - name = "MtProtoKit iOS"; - path = MtProtoKit; - sourceTree = ""; - }; - D05A831A18AFB3F9007F1076 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D063A31518B157F700C65116 /* MtProtoKit-Prefix.pch */, - D063A31618B157F700C65116 /* en.lproj */, - D063A31918B157F700C65116 /* MtProtoKit-Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D05A833218AFB3F9007F1076 /* MtProtoKit Tests */ = { - isa = PBXGroup; - children = ( - D05A833818AFB3F9007F1076 /* MtProtoKitTests.m */, - D05A833318AFB3F9007F1076 /* Supporting Files */, - ); - name = "MtProtoKit Tests"; - path = MtProtoKitTests; - sourceTree = ""; - }; - D05A833318AFB3F9007F1076 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D05A833418AFB3F9007F1076 /* MtProtoKitTests-Info.plist */, - D05A833518AFB3F9007F1076 /* InfoPlist.strings */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D05A834A18AFB40C007F1076 /* Other Frameworks */ = { - isa = PBXGroup; - children = ( - D05A834B18AFB40C007F1076 /* Foundation.framework */, - D05A834C18AFB40C007F1076 /* CoreData.framework */, - D05A834D18AFB40C007F1076 /* AppKit.framework */, - ); - name = "Other Frameworks"; - sourceTree = ""; - }; - D05A834E18AFB40C007F1076 /* MtProtoKitOSX */ = { - isa = PBXGroup; - children = ( - D05A834F18AFB40C007F1076 /* Supporting Files */, - ); - path = MtProtoKitOSX; - sourceTree = ""; - }; - D05A834F18AFB40C007F1076 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D05A835018AFB40C007F1076 /* MtProtoKitOSX-Info.plist */, - D05A835118AFB40C007F1076 /* InfoPlist.strings */, - D05A835418AFB40C007F1076 /* MtProtoKitOSX-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D05A842B18AFB770007F1076 /* Utils */ = { - isa = PBXGroup; - children = ( - D0CD99111D75C5D100F41187 /* Signals */, - 93DBD23318B2D9AA00631ADC /* MTTime.h */, - 93DBD23418B2DA1E00631ADC /* MTTime.m */, - D05A84D918AFE81D007F1076 /* MTTimer.h */, - D05A84D818AFE81C007F1076 /* MTTimer.m */, - D05A84DA18AFE81D007F1076 /* MTLogging.h */, - D05A84DB18AFE81D007F1076 /* MTLogging.m */, - D0254CC518B10404009452AA /* MTEncryption.h */, - D05A84DC18AFE81D007F1076 /* MTEncryption.m */, - D05A83D118AFB75B007F1076 /* MTInternalId.h */, - D05A849F18AFCF8E007F1076 /* MTQueue.h */, - D05A84A018AFCF8E007F1076 /* MTQueue.m */, - D0503AD818B027F80074C3FE /* MTOutputStream.h */, - D0503AD918B027F80074C3FE /* MTOutputStream.m */, - D0503ADC18B029480074C3FE /* MTInputStream.h */, - D0503ADD18B029480074C3FE /* MTInputStream.m */, - D010DB7B1D70ABEE0012AD96 /* MTRsa.h */, - D010DB7C1D70ABEE0012AD96 /* MTRsa.m */, - D010DB7F1D70B3B90012AD96 /* MTAes.h */, - D010DB801D70B3B90012AD96 /* MTAes.m */, - D020FAF81D994E3100F279AA /* MTHttpRequestOperation.h */, - D020FAF91D994E3100F279AA /* MTHttpRequestOperation.m */, - D0C932211E095D6A0074F044 /* MTNetworkUsageCalculationInfo.h */, - D0C932221E095D6A0074F044 /* MTNetworkUsageCalculationInfo.m */, - D0C932291E095E280074F044 /* MTNetworkUsageManager.h */, - D0C9322A1E095E280074F044 /* MTNetworkUsageManager.m */, - D0E9B9EB1F0176DA00F079A4 /* MTBackupAddressSignals.h */, - D0E9B9EC1F0176DA00F079A4 /* MTBackupAddressSignals.m */, - D0E2E17520866780005737E8 /* MTDNS.h */, - D0E2E17620866780005737E8 /* MTDNS.m */, - D0185E702089D265005E1A6C /* MTProxyConnectivity.h */, - D0185E712089D265005E1A6C /* MTProxyConnectivity.m */, - D0119CBF20CAD34800895300 /* MTConnectionProbing.h */, - D0119CC020CAD34800895300 /* MTConnectionProbing.m */, - D0119CC720CAD65D00895300 /* PingFoundation.h */, - D0119CC820CAD65D00895300 /* PingFoundation.m */, - D0338737223BC115007A2CE4 /* MTPKCS.h */, - D0338738223BC115007A2CE4 /* MTPKCS.m */, - D015E016225CD19E00CB9E8A /* MTGzip.h */, - D015E017225CD19E00CB9E8A /* MTGzip.m */, - ); - name = Utils; - sourceTree = ""; - }; - D05A842C18AFB783007F1076 /* Serialization */ = { - isa = PBXGroup; - children = ( - D05A83B518AFB75B007F1076 /* MTSerialization.h */, - D0D1A0681ADD9844007D9ED6 /* Messages */, - ); - name = Serialization; - sourceTree = ""; - }; - D05A842D18AFB79D007F1076 /* Keychain */ = { - isa = PBXGroup; - children = ( - D05A83C018AFB75B007F1076 /* MTKeychain.h */, - D05A83A318AFB75B007F1076 /* MTKeychain.m */, - D09A59561B582EFF00FC3724 /* MTFileBasedKeychain.h */, - D09A59571B582EFF00FC3724 /* MTFileBasedKeychain.m */, - ); - name = Keychain; - sourceTree = ""; - }; - D05A842E18AFB7B7007F1076 /* MTProto */ = { - isa = PBXGroup; - children = ( - D063A32418B1618D00C65116 /* MTProto.h */, - D063A32518B1618D00C65116 /* MTProto.m */, - D063A32618B1618D00C65116 /* MTSessionInfo.h */, - D063A32718B1618D00C65116 /* MTSessionInfo.m */, - D063A32818B1618D00C65116 /* MTTimeFixContext.h */, - D063A32918B1618D00C65116 /* MTTimeFixContext.m */, - D0C0EAE41FB5DBEA00DCF07C /* MTBindingTempAuthKeyContext.h */, - D0C0EAE51FB5DBEA00DCF07C /* MTBindingTempAuthKeyContext.m */, - D063A32218B1618D00C65116 /* MTPreparedMessage.h */, - D063A32318B1618D00C65116 /* MTPreparedMessage.m */, - D063A32018B1618D00C65116 /* MTOutgoingMessage.h */, - D063A32118B1618D00C65116 /* MTOutgoingMessage.m */, - D063A33618B161B600C65116 /* MTIncomingMessage.h */, - D063A33718B161B600C65116 /* MTIncomingMessage.m */, - D063A33818B161B600C65116 /* MTMessageEncryptionKey.h */, - D063A33918B161B600C65116 /* MTMessageEncryptionKey.m */, - D05A843018AFB875007F1076 /* Service */, - ); - name = MTProto; - sourceTree = ""; - }; - D05A843018AFB875007F1076 /* Service */ = { - isa = PBXGroup; - children = ( - D063A35018B1631900C65116 /* MTMessageService.h */, - D063A35118B1631900C65116 /* MTMessageTransaction.h */, - D063A35218B1631900C65116 /* MTMessageTransaction.m */, - D05A843118AFB897007F1076 /* Time Synchronization */, - D05A843218AFB8A9007F1076 /* RPC */, - D05A843318AFB8B3007F1076 /* Message Resending */, - ); - name = Service; - sourceTree = ""; - }; - D05A843118AFB897007F1076 /* Time Synchronization */ = { - isa = PBXGroup; - children = ( - D063A35918B164BA00C65116 /* MTTimeSyncMessageService.h */, - D063A35A18B164BA00C65116 /* MTTimeSyncMessageService.m */, - ); - name = "Time Synchronization"; - sourceTree = ""; - }; - D05A843218AFB8A9007F1076 /* RPC */ = { - isa = PBXGroup; - children = ( - D063A36718B164D600C65116 /* MTRequestMessageService.h */, - D063A36818B164D600C65116 /* MTRequestMessageService.m */, - D063A36318B164D600C65116 /* MTRequest.h */, - D063A36418B164D600C65116 /* MTRequest.m */, - D063A36518B164D600C65116 /* MTRequestContext.h */, - D063A36618B164D600C65116 /* MTRequestContext.m */, - 93DBD22F18B2D72800631ADC /* MTRequestErrorContext.h */, - 93DBD23018B2D72800631ADC /* MTRequestErrorContext.m */, - D063A36118B164D600C65116 /* MTDropResponseContext.h */, - D063A36218B164D600C65116 /* MTDropResponseContext.m */, - D063A35F18B164D600C65116 /* MTApiEnvironment.h */, - D063A36018B164D600C65116 /* MTApiEnvironment.m */, - ); - name = RPC; - sourceTree = ""; - }; - D05A843318AFB8B3007F1076 /* Message Resending */ = { - isa = PBXGroup; - children = ( - D063A37D18B164E600C65116 /* MTResendMessageService.h */, - D063A37E18B164E600C65116 /* MTResendMessageService.m */, - ); - name = "Message Resending"; - sourceTree = ""; - }; - D05A843418AFB925007F1076 /* Context */ = { - isa = PBXGroup; - children = ( - D05A839E18AFB75B007F1076 /* MTContext.h */, - D05A839C18AFB75B007F1076 /* MTContext.m */, - D0529D2921A434BF00D7C3C4 /* MTTransportSchemeStats.h */, - D0529D2A21A434BF00D7C3C4 /* MTTransportSchemeStats.m */, - 9389BC4F18DA1EDB00F9C1A6 /* Transport Scheme */, - D05A843518AFB941007F1076 /* Discover Address */, - D05A843618AFB955007F1076 /* Authorization */, - ); - name = Context; - sourceTree = ""; - }; - D05A843518AFB941007F1076 /* Discover Address */ = { - isa = PBXGroup; - children = ( - D05A83D518AFB75B007F1076 /* MTDiscoverDatacenterAddressAction.h */, - D05A83D418AFB75B007F1076 /* MTDiscoverDatacenterAddressAction.m */, - ); - name = "Discover Address"; - sourceTree = ""; - }; - D05A843618AFB955007F1076 /* Authorization */ = { - isa = PBXGroup; - children = ( - D05A839F18AFB75B007F1076 /* MTDatacenterTransferAuthAction.h */, - D05A839D18AFB75B007F1076 /* MTDatacenterTransferAuthAction.m */, - D05A83A018AFB75B007F1076 /* MTDatacenterAuthAction.h */, - D05A83CE18AFB75B007F1076 /* MTDatacenterAuthAction.m */, - D05A83D918AFB75B007F1076 /* MTDatacenterAuthMessageService.h */, - D05A83B018AFB75B007F1076 /* MTDatacenterAuthMessageService.m */, - ); - name = Authorization; - sourceTree = ""; - }; - D05A843718AFB985007F1076 /* Datacenter */ = { - isa = PBXGroup; - children = ( - D05A83CB18AFB75B007F1076 /* MTDatacenterAddress.h */, - D05A83CA18AFB75B007F1076 /* MTDatacenterAddress.m */, - D05A83CD18AFB75B007F1076 /* MTDatacenterAddressSet.h */, - D05A83CC18AFB75B007F1076 /* MTDatacenterAddressSet.m */, - D05A83C918AFB75B007F1076 /* MTDatacenterAuthInfo.h */, - D05A83C818AFB75B007F1076 /* MTDatacenterAuthInfo.m */, - D05A83C718AFB75B007F1076 /* MTDatacenterSaltInfo.h */, - D05A83C618AFB75B007F1076 /* MTDatacenterSaltInfo.m */, - D0D1A0691ADD987A007D9ED6 /* MTDatacenterAddressListData.h */, - D0D1A06A1ADD987A007D9ED6 /* MTDatacenterAddressListData.m */, - ); - name = Datacenter; - sourceTree = ""; - }; - D05A843818AFB9C4007F1076 /* Transport */ = { - isa = PBXGroup; - children = ( - D063A38318B164F800C65116 /* MTNetworkAvailability.h */, - D063A38418B164F800C65116 /* MTNetworkAvailability.m */, - D063A38518B164F800C65116 /* MTTransport.h */, - D063A38618B164F800C65116 /* MTTransport.m */, - D063A38718B164F800C65116 /* MTTransportTransaction.h */, - D063A38818B164F800C65116 /* MTTransportTransaction.m */, - D05A843918AFB9DA007F1076 /* TCP */, - ); - name = Transport; - sourceTree = ""; - }; - D05A843918AFB9DA007F1076 /* TCP */ = { - isa = PBXGroup; - children = ( - D063A39918B1650400C65116 /* MTTcpTransport.h */, - D063A39A18B1650400C65116 /* MTTcpTransport.m */, - D063A39518B1650400C65116 /* MTTcpConnection.h */, - D063A39618B1650400C65116 /* MTTcpConnection.m */, - D063A39718B1650400C65116 /* MTTcpConnectionBehaviour.h */, - D063A39818B1650400C65116 /* MTTcpConnectionBehaviour.m */, - ); - name = TCP; - sourceTree = ""; - }; - D05A849B18AFCA3D007F1076 /* MTProtoKit */ = { - isa = PBXGroup; - children = ( - D063A31D18B158AE00C65116 /* MTProtoKit.h */, - D05A842B18AFB770007F1076 /* Utils */, - D05A842C18AFB783007F1076 /* Serialization */, - D05A842D18AFB79D007F1076 /* Keychain */, - D05A843418AFB925007F1076 /* Context */, - D05A843718AFB985007F1076 /* Datacenter */, - D05A842E18AFB7B7007F1076 /* MTProto */, - D05A843818AFB9C4007F1076 /* Transport */, - ); - name = MTProtoKit; - sourceTree = ""; - }; - D05A84E718AFF0EE007F1076 /* Third Party */ = { - isa = PBXGroup; - children = ( - D05A84E818AFF259007F1076 /* AFNetworking */, - D05A84F618AFF259007F1076 /* AsyncSocket */, - ); - name = "Third Party"; - sourceTree = ""; - }; - D05A84E818AFF259007F1076 /* AFNetworking */ = { - isa = PBXGroup; - children = ( - D05A84EB18AFF259007F1076 /* AFHTTPRequestOperation.h */, - D05A84EC18AFF259007F1076 /* AFHTTPRequestOperation.m */, - D05A84F418AFF259007F1076 /* AFURLConnectionOperation.h */, - D05A84F518AFF259007F1076 /* AFURLConnectionOperation.m */, - ); - name = AFNetworking; - path = thirdparty/AFNetworking; - sourceTree = ""; - }; - D05A84F618AFF259007F1076 /* AsyncSocket */ = { - isa = PBXGroup; - children = ( - D05A84F718AFF259007F1076 /* GCDAsyncSocket.h */, - D05A84F818AFF259007F1076 /* GCDAsyncSocket.m */, - ); - name = AsyncSocket; - path = thirdparty/AsyncSocket; - sourceTree = ""; - }; - D063A31618B157F700C65116 /* en.lproj */ = { - isa = PBXGroup; - children = ( - D063A31718B157F700C65116 /* InfoPlist.strings */, - ); - name = en.lproj; - path = MtProtoKitiOS/en.lproj; - sourceTree = SOURCE_ROOT; - }; - D079AB981AF39B8000076F59 /* MtProtoKitMac */ = { - isa = PBXGroup; - children = ( - D079AB9B1AF39B8000076F59 /* MtProtoKitMac.h */, - D079AB991AF39B8000076F59 /* Supporting Files */, - ); - path = MtProtoKitMac; - sourceTree = ""; - }; - D079AB991AF39B8000076F59 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D079AB9A1AF39B8000076F59 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D079ABA51AF39B8000076F59 /* MtProtoKitMacTests */ = { - isa = PBXGroup; - children = ( - D079ABA81AF39B8000076F59 /* MtProtoKitMacTests.m */, - D079ABA61AF39B8000076F59 /* Supporting Files */, - ); - path = MtProtoKitMacTests; - sourceTree = ""; - }; - D079ABA61AF39B8000076F59 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D079ABA71AF39B8000076F59 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D08A158E22DD32740073B508 /* TON */ = { - isa = PBXGroup; - children = ( - D0D58AF12347E5F000CF7782 /* macOS */, - D018558922DDD36C00AC458A /* include */, - D08A159022DD32B40073B508 /* tonlib_client_json.h */, - D08A158F22DD32B40073B508 /* tonlibjson_export.h */, - D08A159B22DD32F20073B508 /* TON.h */, - D08A159C22DD32F20073B508 /* TON.mm */, - ); - path = TON; - sourceTree = ""; - }; - D0CB05F81ADC4483005E298F /* MtProtoKit */ = { - isa = PBXGroup; - children = ( - D0CB05FB1ADC4483005E298F /* MtProtoKit.h */, - D0CB05F91ADC4483005E298F /* Supporting Files */, - ); - path = MtProtoKit; - sourceTree = ""; - }; - D0CB05F91ADC4483005E298F /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D0CB05FA1ADC4483005E298F /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D0CB06051ADC4483005E298F /* MtProtoKitTests */ = { - isa = PBXGroup; - children = ( - D0CB06081ADC4483005E298F /* MtProtoKitTests.m */, - D0CB06061ADC4483005E298F /* Supporting Files */, - ); - path = MtProtoKitTests; - sourceTree = ""; - }; - D0CB06061ADC4483005E298F /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D0CB06071ADC4483005E298F /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D0CD99111D75C5D100F41187 /* Signals */ = { - isa = PBXGroup; - children = ( - D0B0DF601DD7E768003BA12D /* MTBag.h */, - D0B0DF5C1DD7E75B003BA12D /* MTBag.m */, - D0CAF2E11D75E7F30011F558 /* MTAtomic.h */, - D0CAF2E21D75E7F30011F558 /* MTAtomic.m */, - D0CAF2D51D75E2840011F558 /* MTDisposable.h */, - D0CAF2D61D75E2840011F558 /* MTDisposable.m */, - D0CAF2D11D75E26D0011F558 /* MTSubscriber.h */, - D0CAF2D21D75E26D0011F558 /* MTSubscriber.m */, - D0CAF2C91D75E24C0011F558 /* MTSignal.h */, - D0CAF2CA1D75E24C0011F558 /* MTSignal.m */, - ); - name = Signals; - sourceTree = ""; - }; - D0D1A0681ADD9844007D9ED6 /* Messages */ = { - isa = PBXGroup; - children = ( - D0D1A0041ADD983C007D9ED6 /* MTBadMsgNotificationMessage.h */, - D0D1A0051ADD983C007D9ED6 /* MTBadMsgNotificationMessage.m */, - D0D1A0061ADD983C007D9ED6 /* MTBuffer.h */, - D0D1A0071ADD983C007D9ED6 /* MTBuffer.m */, - D0D1A0081ADD983C007D9ED6 /* MTBufferReader.h */, - D0D1A0091ADD983C007D9ED6 /* MTBufferReader.m */, - D0D1A00A1ADD983C007D9ED6 /* MTDestroySessionResponseMessage.h */, - D0D1A00B1ADD983C007D9ED6 /* MTDestroySessionResponseMessage.m */, - D0D1A00C1ADD983C007D9ED6 /* MTDropRpcResultMessage.h */, - D0D1A00D1ADD983C007D9ED6 /* MTDropRpcResultMessage.m */, - D0D1A00E1ADD983C007D9ED6 /* MTExportedAuthorizationData.h */, - D0D1A00F1ADD983C007D9ED6 /* MTExportedAuthorizationData.m */, - D0BFAE5E20AB504600793CF2 /* MTDatacenterVerificationData.h */, - D0BFAE5F20AB504600793CF2 /* MTDatacenterVerificationData.m */, - D0D1A0101ADD983C007D9ED6 /* MTFutureSaltsMessage.h */, - D0D1A0111ADD983C007D9ED6 /* MTFutureSaltsMessage.m */, - D0D1A0121ADD983C007D9ED6 /* MTInternalMessageParser.h */, - D0D1A0131ADD983C007D9ED6 /* MTInternalMessageParser.m */, - D0D1A0141ADD983C007D9ED6 /* MTMessage.h */, - D0D1A0151ADD983C007D9ED6 /* MTMessage.m */, - D0D1A0161ADD983C007D9ED6 /* MTMsgAllInfoMessage.h */, - D0D1A0171ADD983C007D9ED6 /* MTMsgAllInfoMessage.m */, - D0D1A0181ADD983C007D9ED6 /* MTMsgContainerMessage.h */, - D0D1A0191ADD983C007D9ED6 /* MTMsgContainerMessage.m */, - D0D1A01A1ADD983C007D9ED6 /* MTMsgDetailedInfoMessage.h */, - D0D1A01B1ADD983C007D9ED6 /* MTMsgDetailedInfoMessage.m */, - D0D1A01C1ADD983C007D9ED6 /* MTMsgResendReqMessage.h */, - D0D1A01D1ADD983C007D9ED6 /* MTMsgResendReqMessage.m */, - D0D1A01E1ADD983C007D9ED6 /* MTMsgsAckMessage.h */, - D0D1A01F1ADD983C007D9ED6 /* MTMsgsAckMessage.m */, - D0D1A0201ADD983C007D9ED6 /* MTMsgsStateInfoMessage.h */, - D0D1A0211ADD983C007D9ED6 /* MTMsgsStateInfoMessage.m */, - D0D1A0221ADD983C007D9ED6 /* MTMsgsStateReqMessage.h */, - D0D1A0231ADD983C007D9ED6 /* MTMsgsStateReqMessage.m */, - D0D1A0241ADD983C007D9ED6 /* MTNewSessionCreatedMessage.h */, - D0D1A0251ADD983C007D9ED6 /* MTNewSessionCreatedMessage.m */, - D0D1A0261ADD983C007D9ED6 /* MTPingMessage.h */, - D0D1A0271ADD983C007D9ED6 /* MTPingMessage.m */, - D0D1A0281ADD983C007D9ED6 /* MTPongMessage.h */, - D0D1A0291ADD983C007D9ED6 /* MTPongMessage.m */, - D0D1A02A1ADD983C007D9ED6 /* MTResPqMessage.h */, - D0D1A02B1ADD983C007D9ED6 /* MTResPqMessage.m */, - D0D1A02C1ADD983C007D9ED6 /* MTRpcError.h */, - D0D1A02D1ADD983C007D9ED6 /* MTRpcError.m */, - D0D1A02E1ADD983C007D9ED6 /* MTRpcResultMessage.h */, - D0D1A02F1ADD983C007D9ED6 /* MTRpcResultMessage.m */, - D0D1A0301ADD983C007D9ED6 /* MTServerDhInnerDataMessage.h */, - D0D1A0311ADD983C007D9ED6 /* MTServerDhInnerDataMessage.m */, - D0D1A0321ADD983C007D9ED6 /* MTServerDhParamsMessage.h */, - D0D1A0331ADD983C007D9ED6 /* MTServerDhParamsMessage.m */, - D0D1A0341ADD983C007D9ED6 /* MTSetClientDhParamsResponseMessage.h */, - D0D1A0351ADD983C007D9ED6 /* MTSetClientDhParamsResponseMessage.m */, - ); - name = Messages; - sourceTree = ""; - }; - D0D2250C1B4D817B0085E26D /* MtProtoKitDynamic */ = { - isa = PBXGroup; - children = ( - D0D2250F1B4D817B0085E26D /* MtProtoKitDynamic.h */, - D0D2250D1B4D817B0085E26D /* Supporting Files */, - ); - path = MtProtoKitDynamic; - sourceTree = ""; - }; - D0D2250D1B4D817B0085E26D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D0D2250E1B4D817B0085E26D /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D0D225191B4D817B0085E26D /* MtProtoKitDynamicTests */ = { - isa = PBXGroup; - children = ( - D0D2251C1B4D817B0085E26D /* MtProtoKitDynamicTests.m */, - D0D2251A1B4D817B0085E26D /* Supporting Files */, - ); - path = MtProtoKitDynamicTests; - sourceTree = ""; - }; - D0D2251A1B4D817B0085E26D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D0D2251B1B4D817B0085E26D /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D0D58AF12347E5F000CF7782 /* macOS */ = { - isa = PBXGroup; - children = ( - D0D58AF22347E5F000CF7782 /* include */, - D0D58B082347E5F000CF7782 /* lib */, - ); - path = macOS; - sourceTree = ""; - }; - D0D58AF22347E5F000CF7782 /* include */ = { - isa = PBXGroup; - children = ( - D0D58AF32347E5F000CF7782 /* auto */, - D0D58AF62347E5F000CF7782 /* tl */, - D0D58AF82347E5F000CF7782 /* tonlib */, - D0D58AFC2347E5F000CF7782 /* td */, - ); - path = include; - sourceTree = ""; - }; - D0D58AF32347E5F000CF7782 /* auto */ = { - isa = PBXGroup; - children = ( - D0D58AF42347E5F000CF7782 /* tl */, - ); - path = auto; - sourceTree = ""; - }; - D0D58AF42347E5F000CF7782 /* tl */ = { - isa = PBXGroup; - children = ( - D0D58AF52347E5F000CF7782 /* tonlib_api.h */, - ); - path = tl; - sourceTree = ""; - }; - D0D58AF62347E5F000CF7782 /* tl */ = { - isa = PBXGroup; - children = ( - D0D58AF72347E5F000CF7782 /* TlObject.h */, - ); - path = tl; - sourceTree = ""; - }; - D0D58AF82347E5F000CF7782 /* tonlib */ = { - isa = PBXGroup; - children = ( - D0D58AF92347E5F000CF7782 /* tonlib_client_json.h */, - D0D58AFA2347E5F000CF7782 /* tonlibjson_export.h */, - D0D58AFB2347E5F000CF7782 /* Client.h */, - ); - path = tonlib; - sourceTree = ""; - }; - D0D58AFC2347E5F000CF7782 /* td */ = { - isa = PBXGroup; - children = ( - D0D58AFD2347E5F000CF7782 /* utils */, - ); - path = td; - sourceTree = ""; - }; - D0D58AFD2347E5F000CF7782 /* utils */ = { - isa = PBXGroup; - children = ( - D0D58AFE2347E5F000CF7782 /* Slice-decl.h */, - D0D58AFF2347E5F000CF7782 /* config.h */, - D0D58B002347E5F000CF7782 /* SharedSlice.h */, - D0D58B012347E5F000CF7782 /* Slice.h */, - D0D58B022347E5F000CF7782 /* int_types.h */, - D0D58B032347E5F000CF7782 /* common.h */, - D0D58B042347E5F000CF7782 /* check.h */, - D0D58B052347E5F000CF7782 /* unique_ptr.h */, - D0D58B062347E5F000CF7782 /* port */, - ); - path = utils; - sourceTree = ""; - }; - D0D58B062347E5F000CF7782 /* port */ = { - isa = PBXGroup; - children = ( - D0D58B072347E5F000CF7782 /* platform.h */, - ); - path = port; - sourceTree = ""; - }; - D0D58B082347E5F000CF7782 /* lib */ = { - isa = PBXGroup; - children = ( - D0D58B092347E5F000CF7782 /* libtl-lite-utils.a */, - D0D58B0A2347E5F000CF7782 /* libtdactor.a */, - D0D58B0B2347E5F000CF7782 /* libtonlibjson.0.5.dylib */, - D0D58B0C2347E5F000CF7782 /* cmake */, - D0D58B122347E5F000CF7782 /* libton_block.a */, - D0D58B132347E5F000CF7782 /* libadnllite.a */, - D0D58B142347E5F000CF7782 /* libtonlibjson.dylib */, - D0D58B152347E5F000CF7782 /* libtddb.a */, - D0D58B162347E5F000CF7782 /* libkeys.a */, - D0D58B172347E5F000CF7782 /* libtdnet.a */, - D0D58B182347E5F000CF7782 /* libtdutils.a */, - D0D58B192347E5F000CF7782 /* libton_crypto.a */, - D0D58B1A2347E5F000CF7782 /* fift */, - D0D58B212347E5F000CF7782 /* libtl-utils.a */, - D0D58B222347E5F000CF7782 /* libtl_lite_api.a */, - D0D58B232347E5F000CF7782 /* libcrc32c.a */, - D0D58B242347E5F000CF7782 /* libtl_api.a */, - D0D58B252347E5F000CF7782 /* libtonlib.a */, - D0D58B262347E5F000CF7782 /* liblite-client-common.a */, - D0D58B272347E5F000CF7782 /* libtl_tonlib_api.a */, - ); - path = lib; - sourceTree = ""; - }; - D0D58B0C2347E5F000CF7782 /* cmake */ = { - isa = PBXGroup; - children = ( - D0D58B0D2347E5F000CF7782 /* Tonlib */, - ); - path = cmake; - sourceTree = ""; - }; - D0D58B0D2347E5F000CF7782 /* Tonlib */ = { - isa = PBXGroup; - children = ( - D0D58B0E2347E5F000CF7782 /* TonlibConfigVersion.cmake */, - D0D58B0F2347E5F000CF7782 /* TonlibConfig.cmake */, - D0D58B102347E5F000CF7782 /* TonlibTargets-release.cmake */, - D0D58B112347E5F000CF7782 /* TonlibTargets.cmake */, - ); - path = Tonlib; - sourceTree = ""; - }; - D0D58B1A2347E5F000CF7782 /* fift */ = { - isa = PBXGroup; - children = ( - D0D58B1B2347E5F000CF7782 /* Lisp.fif */, - D0D58B1C2347E5F000CF7782 /* Asm.fif */, - D0D58B1D2347E5F000CF7782 /* TonUtil.fif */, - D0D58B1E2347E5F000CF7782 /* Fift.fif */, - D0D58B1F2347E5F000CF7782 /* Lists.fif */, - D0D58B202347E5F000CF7782 /* Stack.fif */, - ); - path = fift; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - D079AB941AF39B8000076F59 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D0D58B522347E64000CF7782 /* TON.h in Headers */, - D0CD97FD1D74B96300F41187 /* MTBuffer.h in Headers */, - D0D58B352347E5F000CF7782 /* platform.h in Headers */, - D0CD98131D74B99400F41187 /* MTInternalMessageParser.h in Headers */, - D0CD98EE1D75C0C900F41187 /* MTTimeSyncMessageService.h in Headers */, - D0CD989F1D74BA6500F41187 /* MTProto.h in Headers */, - D0CD98F21D75C0D700F41187 /* MTRequestMessageService.h in Headers */, - D0CFBB881FD7188200B65C0D /* AFURLConnectionOperation.h in Headers */, - D0CD97D21D74B91400F41187 /* MTTime.h in Headers */, - D0CD98151D74B99400F41187 /* MTMsgAllInfoMessage.h in Headers */, - D0CD98A31D74BA6500F41187 /* MTOutgoingMessage.h in Headers */, - D0CD97F81D74B94B00F41187 /* MTRsa.h in Headers */, - D0CD98C01D74BA8200F41187 /* MTTcpTransport.h in Headers */, - D0CD98CA1D74BA9400F41187 /* MTTcpConnectionBehaviour.h in Headers */, - D0CD981F1D74B99400F41187 /* MTResPqMessage.h in Headers */, - D0CD98E81D75C0BB00F41187 /* MTMessageService.h in Headers */, - D0B0DF621DD7E7A3003BA12D /* MTBag.h in Headers */, - D015E019225CD19E00CB9E8A /* MTGzip.h in Headers */, - D0CD98681D74B9E200F41187 /* MTContext.h in Headers */, - D0CD985B1D74B9BF00F41187 /* MTSetClientDhParamsResponseMessage.h in Headers */, - D0CD98741D74BA0100F41187 /* MTDiscoverDatacenterAddressAction.h in Headers */, - D0185E732089D265005E1A6C /* MTProxyConnectivity.h in Headers */, - D0CD98EA1D75C0C100F41187 /* MTMessageTransaction.h in Headers */, - D0CD98B41D74BA7500F41187 /* MTNetworkAvailability.h in Headers */, - D0E9B9EE1F0176DA00F079A4 /* MTBackupAddressSignals.h in Headers */, - D0CD98A21D74BA6500F41187 /* MTPreparedMessage.h in Headers */, - D0CD98F91D75C0E400F41187 /* MTDropResponseContext.h in Headers */, - D0CD986C1D74B9EF00F41187 /* MTTransportScheme.h in Headers */, - D0CD984D1D74B9AE00F41187 /* MTRpcError.h in Headers */, - D0CD98171D74B99400F41187 /* MTMsgDetailedInfoMessage.h in Headers */, - D0CD98A41D74BA6500F41187 /* MTIncomingMessage.h in Headers */, - D0CD97FC1D74B96300F41187 /* MTBadMsgNotificationMessage.h in Headers */, - D0CD98121D74B99400F41187 /* MTFutureSaltsMessage.h in Headers */, - D0D58B322347E5F000CF7782 /* common.h in Headers */, - D0D58B2D2347E5F000CF7782 /* Slice-decl.h in Headers */, - D0CD985A1D74B9BF00F41187 /* MTServerDhParamsMessage.h in Headers */, - D0CAF2E51D75EA790011F558 /* MTAtomic.h in Headers */, - D0CD98A11D74BA6500F41187 /* MTTimeFixContext.h in Headers */, - D0CD97FE1D74B96300F41187 /* MTBufferReader.h in Headers */, - D0CD97FF1D74B96300F41187 /* MTDestroySessionResponseMessage.h in Headers */, - D0CD97FA1D74B95000F41187 /* MTSerialization.h in Headers */, - D0CD98641D74B9D700F41187 /* MTFileBasedKeychain.h in Headers */, - D0CD98A01D74BA6500F41187 /* MTSessionInfo.h in Headers */, - D0CD97D61D74B91E00F41187 /* MTTimer.h in Headers */, - D0529D2C21A434BF00D7C3C4 /* MTTransportSchemeStats.h in Headers */, - D0CD98F81D75C0E400F41187 /* MTRequestErrorContext.h in Headers */, - D0D58B342347E5F000CF7782 /* unique_ptr.h in Headers */, - D0CD98A51D74BA6500F41187 /* MTMessageEncryptionKey.h in Headers */, - D0CD981D1D74B99400F41187 /* MTPingMessage.h in Headers */, - D0CD97F91D74B94B00F41187 /* MTAes.h in Headers */, - D033873A223BC115007A2CE4 /* MTPKCS.h in Headers */, - D0CD98581D74B9BF00F41187 /* MTRpcResultMessage.h in Headers */, - D079AB9C1AF39B8000076F59 /* MtProtoKitMac.h in Headers */, - D0CD98161D74B99400F41187 /* MTMsgContainerMessage.h in Headers */, - D0CD981A1D74B99400F41187 /* MTMsgsStateInfoMessage.h in Headers */, - D0CD98191D74B99400F41187 /* MTMsgsAckMessage.h in Headers */, - D0119CC220CAD34800895300 /* MTConnectionProbing.h in Headers */, - D0CD98FA1D75C0E400F41187 /* MTApiEnvironment.h in Headers */, - D0CD98881D74BA5100F41187 /* MTDatacenterAddressListData.h in Headers */, - D0CD98591D74B9BF00F41187 /* MTServerDhInnerDataMessage.h in Headers */, - D0CD98601D74B9D000F41187 /* MTKeychain.h in Headers */, - D0CD98181D74B99400F41187 /* MTMsgResendReqMessage.h in Headers */, - D0CD97E81D74B94300F41187 /* MTLogging.h in Headers */, - D0CD98F61D75C0E400F41187 /* MTRequest.h in Headers */, - D0CAF2D91D75E3160011F558 /* MTSubscriber.h in Headers */, - D0CD981B1D74B99400F41187 /* MTMsgsStateReqMessage.h in Headers */, - D0C9322C1E095E280074F044 /* MTNetworkUsageManager.h in Headers */, - D0CD98101D74B96F00F41187 /* MTExportedAuthorizationData.h in Headers */, - D0D58B2E2347E5F000CF7782 /* config.h in Headers */, - D0CD98F71D75C0E400F41187 /* MTRequestContext.h in Headers */, - D0E2E17820866780005737E8 /* MTDNS.h in Headers */, - D0CD98871D74BA5100F41187 /* MTDatacenterSaltInfo.h in Headers */, - D0D58B332347E5F000CF7782 /* check.h in Headers */, - D0CD97ED1D74B94300F41187 /* MTInputStream.h in Headers */, - D0D58B312347E5F000CF7782 /* int_types.h in Headers */, - D0CD98141D74B99400F41187 /* MTMessage.h in Headers */, - D0CD987A1D74BA4100F41187 /* MTDatacenterAuthMessageService.h in Headers */, - D0CD98861D74BA5100F41187 /* MTDatacenterAuthInfo.h in Headers */, - D0CD98B51D74BA7500F41187 /* MTTransport.h in Headers */, - D0CD97EC1D74B94300F41187 /* MTOutputStream.h in Headers */, - D0CD98701D74B9F700F41187 /* MTDiscoverConnectionSignals.h in Headers */, - D0D58B2A2347E5F000CF7782 /* tonlib_client_json.h in Headers */, - D0CD97E91D74B94300F41187 /* MTEncryption.h in Headers */, - D0D58B292347E5F000CF7782 /* TlObject.h in Headers */, - D0D58B2B2347E5F000CF7782 /* tonlibjson_export.h in Headers */, - D0C932241E095D6A0074F044 /* MTNetworkUsageCalculationInfo.h in Headers */, - D0CD97EB1D74B94300F41187 /* MTQueue.h in Headers */, - D0CD98001D74B96300F41187 /* MTDropRpcResultMessage.h in Headers */, - D0CD98791D74BA4100F41187 /* MTDatacenterAuthAction.h in Headers */, - D0CD981C1D74B99400F41187 /* MTNewSessionCreatedMessage.h in Headers */, - D0D58B2F2347E5F000CF7782 /* SharedSlice.h in Headers */, - D0CD98781D74BA4100F41187 /* MTDatacenterTransferAuthAction.h in Headers */, - D0CD990A1D75C0F300F41187 /* MTResendMessageService.h in Headers */, - D020FAFB1D994E3100F279AA /* MTHttpRequestOperation.h in Headers */, - D0BFAE6220AB505400793CF2 /* MTDatacenterVerificationData.h in Headers */, - D0CFBB8B1FD718C500B65C0D /* AFHTTPRequestOperation.h in Headers */, - D0CD98841D74BA5100F41187 /* MTDatacenterAddress.h in Headers */, - D0CD97EA1D74B94300F41187 /* MTInternalId.h in Headers */, - D0119CCA20CAD65D00895300 /* PingFoundation.h in Headers */, - D0CAF2DB1D75E31A0011F558 /* MTDisposable.h in Headers */, - D0CD98851D74BA5100F41187 /* MTDatacenterAddressSet.h in Headers */, - D0CD98B61D74BA7500F41187 /* MTTransportTransaction.h in Headers */, - D0D58B2C2347E5F000CF7782 /* Client.h in Headers */, - D0CD981E1D74B99400F41187 /* MTPongMessage.h in Headers */, - D0D58B282347E5F000CF7782 /* tonlib_api.h in Headers */, - D0D58B302347E5F000CF7782 /* Slice.h in Headers */, - D0CD98C51D74BA8D00F41187 /* MTTcpConnection.h in Headers */, - D0CAF2CD1D75E2570011F558 /* MTSignal.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0CB05F41ADC4483005E298F /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D0D1A0381ADD983C007D9ED6 /* MTBuffer.h in Headers */, - D0CB06181ADC4541005E298F /* MTTime.h in Headers */, - D0CAF2E31D75E7F30011F558 /* MTAtomic.h in Headers */, - D0D1A0581ADD983C007D9ED6 /* MTPingMessage.h in Headers */, - D0CB064E1ADC45B1005E298F /* MTDropResponseContext.h in Headers */, - D0D1A06B1ADD987A007D9ED6 /* MTDatacenterAddressListData.h in Headers */, - D0CB06231ADC4558005E298F /* MTContext.h in Headers */, - D0D1A03A1ADD983C007D9ED6 /* MTBufferReader.h in Headers */, - D0CB065C1ADC45CE005E298F /* MTTcpConnection.h in Headers */, - D0D1A0501ADD983C007D9ED6 /* MTMsgsAckMessage.h in Headers */, - D018559322DDD36C00AC458A /* int_types.h in Headers */, - D0CAF2CB1D75E24C0011F558 /* MTSignal.h in Headers */, - D0CB06461ADC45A2005E298F /* MTMessageService.h in Headers */, - D0B0DF611DD7E7A2003BA12D /* MTBag.h in Headers */, - D0D1A0601ADD983C007D9ED6 /* MTRpcResultMessage.h in Headers */, - D0D1A0461ADD983C007D9ED6 /* MTMessage.h in Headers */, - D0D1A0441ADD983C007D9ED6 /* MTInternalMessageParser.h in Headers */, - D0D1A05A1ADD983C007D9ED6 /* MTPongMessage.h in Headers */, - D0CFBB8A1FD718C500B65C0D /* AFHTTPRequestOperation.h in Headers */, - D018559422DDD36C00AC458A /* TonlibCallback.h in Headers */, - D0D1A0481ADD983C007D9ED6 /* MTMsgAllInfoMessage.h in Headers */, - D0CFBB871FD7188200B65C0D /* AFURLConnectionOperation.h in Headers */, - D0CAF2D71D75E2840011F558 /* MTDisposable.h in Headers */, - D0CB062A1ADC4575005E298F /* MTDatacenterTransferAuthAction.h in Headers */, - D0CB064F1ADC45B1005E298F /* MTApiEnvironment.h in Headers */, - D0CB06191ADC4541005E298F /* MTTimer.h in Headers */, - D018559122DDD36C00AC458A /* TlObject.h in Headers */, - D0CB06381ADC4591005E298F /* MTProto.h in Headers */, - D0CB06321ADC4583005E298F /* MTDatacenterAuthInfo.h in Headers */, - D0D1A0541ADD983C007D9ED6 /* MTMsgsStateReqMessage.h in Headers */, - D0CB06201ADC454C005E298F /* MTSerialization.h in Headers */, - D0119CC920CAD65D00895300 /* PingFoundation.h in Headers */, - D0D1A0401ADD983C007D9ED6 /* MTExportedAuthorizationData.h in Headers */, - D0CB063C1ADC4591005E298F /* MTOutgoingMessage.h in Headers */, - D0D1A0361ADD983C007D9ED6 /* MTBadMsgNotificationMessage.h in Headers */, - D0529D2B21A434BF00D7C3C4 /* MTTransportSchemeStats.h in Headers */, - D0CB06581ADC45CE005E298F /* MTNetworkAvailability.h in Headers */, - D018559522DDD36C00AC458A /* platform.h in Headers */, - D0CB06211ADC454C005E298F /* MTKeychain.h in Headers */, - D0580AC21B0F3E9C00E8235B /* MTDiscoverConnectionSignals.h in Headers */, - D0C932231E095D6A0074F044 /* MTNetworkUsageCalculationInfo.h in Headers */, - D0CB063B1ADC4591005E298F /* MTPreparedMessage.h in Headers */, - D0D1A04A1ADD983C007D9ED6 /* MTMsgContainerMessage.h in Headers */, - D0CB06491ADC45B1005E298F /* MTTimeSyncMessageService.h in Headers */, - D0CB05FC1ADC4483005E298F /* MtProtoKit.h in Headers */, - D0CB063E1ADC4591005E298F /* MTMessageEncryptionKey.h in Headers */, - D0D1A04C1ADD983C007D9ED6 /* MTMsgDetailedInfoMessage.h in Headers */, - D0CB064A1ADC45B1005E298F /* MTRequestMessageService.h in Headers */, - D0D1A0561ADD983C007D9ED6 /* MTNewSessionCreatedMessage.h in Headers */, - D0CB061A1ADC4541005E298F /* MTLogging.h in Headers */, - D0CAF2D31D75E26D0011F558 /* MTSubscriber.h in Headers */, - D0CB065A1ADC45CE005E298F /* MTTransportTransaction.h in Headers */, - D0CB06281ADC456A005E298F /* MTDiscoverDatacenterAddressAction.h in Headers */, - D0CB06591ADC45CE005E298F /* MTTransport.h in Headers */, - D0CB061F1ADC4541005E298F /* MTInputStream.h in Headers */, - D0CB063D1ADC4591005E298F /* MTIncomingMessage.h in Headers */, - D010DB7D1D70ABEE0012AD96 /* MTRsa.h in Headers */, - D0CB06251ADC4562005E298F /* MTTransportScheme.h in Headers */, - D0D1A05C1ADD983C007D9ED6 /* MTResPqMessage.h in Headers */, - D0D1A03E1ADD983C007D9ED6 /* MTDropRpcResultMessage.h in Headers */, - D0119CC120CAD34800895300 /* MTConnectionProbing.h in Headers */, - D0185E722089D265005E1A6C /* MTProxyConnectivity.h in Headers */, - D0D1A05E1ADD983C007D9ED6 /* MTRpcError.h in Headers */, - D0E2E17720866780005737E8 /* MTDNS.h in Headers */, - D0C9322B1E095E280074F044 /* MTNetworkUsageManager.h in Headers */, - D018559022DDD36C00AC458A /* Client.h in Headers */, - D0CB063A1ADC4591005E298F /* MTTimeFixContext.h in Headers */, - D0CB065D1ADC45CE005E298F /* MTTcpConnectionBehaviour.h in Headers */, - D09A59581B582EFF00FC3724 /* MTFileBasedKeychain.h in Headers */, - D0E9B9ED1F0176DA00F079A4 /* MTBackupAddressSignals.h in Headers */, - D0C0EAE61FB5DBEA00DCF07C /* MTBindingTempAuthKeyContext.h in Headers */, - D0CB06311ADC4583005E298F /* MTDatacenterAddressSet.h in Headers */, - D0D1A03C1ADD983C007D9ED6 /* MTDestroySessionResponseMessage.h in Headers */, - D0CB061E1ADC4541005E298F /* MTOutputStream.h in Headers */, - D0CB06301ADC4583005E298F /* MTDatacenterAddress.h in Headers */, - D020FAFA1D994E3100F279AA /* MTHttpRequestOperation.h in Headers */, - D0CB065B1ADC45CE005E298F /* MTTcpTransport.h in Headers */, - D0CB061B1ADC4541005E298F /* MTEncryption.h in Headers */, - D0D1A0661ADD983C007D9ED6 /* MTSetClientDhParamsResponseMessage.h in Headers */, - D0CB06471ADC45A2005E298F /* MTMessageTransaction.h in Headers */, - D0BFAE6020AB504600793CF2 /* MTDatacenterVerificationData.h in Headers */, - D0D1A0641ADD983C007D9ED6 /* MTServerDhParamsMessage.h in Headers */, - D0D1A0621ADD983C007D9ED6 /* MTServerDhInnerDataMessage.h in Headers */, - D0338739223BC115007A2CE4 /* MTPKCS.h in Headers */, - D0D1A04E1ADD983C007D9ED6 /* MTMsgResendReqMessage.h in Headers */, - D0CB064D1ADC45B1005E298F /* MTRequestErrorContext.h in Headers */, - D0CB064C1ADC45B1005E298F /* MTRequestContext.h in Headers */, - D0CB066A1ADC4846005E298F /* MTResendMessageService.h in Headers */, - D0CB061D1ADC4541005E298F /* MTQueue.h in Headers */, - D0CB06171ADC4536005E298F /* MTProtoKit.h in Headers */, - D018559222DDD36C00AC458A /* tonlib_api.h in Headers */, - D0CB06391ADC4591005E298F /* MTSessionInfo.h in Headers */, - D0CB06331ADC4583005E298F /* MTDatacenterSaltInfo.h in Headers */, - D0CB062B1ADC4575005E298F /* MTDatacenterAuthAction.h in Headers */, - D0D1A0521ADD983C007D9ED6 /* MTMsgsStateInfoMessage.h in Headers */, - D0D1A0421ADD983C007D9ED6 /* MTFutureSaltsMessage.h in Headers */, - D0CB064B1ADC45B1005E298F /* MTRequest.h in Headers */, - D010DB811D70B3B90012AD96 /* MTAes.h in Headers */, - D015E018225CD19E00CB9E8A /* MTGzip.h in Headers */, - D0CB062C1ADC4575005E298F /* MTDatacenterAuthMessageService.h in Headers */, - D0CB061C1ADC4541005E298F /* MTInternalId.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0D225081B4D817B0085E26D /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D0CD98021D74B96400F41187 /* MTBuffer.h in Headers */, - D0CD98211D74B99500F41187 /* MTInternalMessageParser.h in Headers */, - D0CD98EF1D75C0CA00F41187 /* MTTimeSyncMessageService.h in Headers */, - D0CD98981D74BA6500F41187 /* MTProto.h in Headers */, - D0CD98F31D75C0D700F41187 /* MTRequestMessageService.h in Headers */, - D0CFBB891FD7188200B65C0D /* AFURLConnectionOperation.h in Headers */, - D0CD97D31D74B91700F41187 /* MTTime.h in Headers */, - D0CD98231D74B99500F41187 /* MTMsgAllInfoMessage.h in Headers */, - D0CD989C1D74BA6500F41187 /* MTOutgoingMessage.h in Headers */, - D0CD97F61D74B94B00F41187 /* MTRsa.h in Headers */, - D0CD98C11D74BA8300F41187 /* MTTcpTransport.h in Headers */, - D0CD98CB1D74BA9500F41187 /* MTTcpConnectionBehaviour.h in Headers */, - D08A159D22DD32F20073B508 /* TON.h in Headers */, - D0CD982D1D74B99500F41187 /* MTResPqMessage.h in Headers */, - D0CD98E91D75C0BB00F41187 /* MTMessageService.h in Headers */, - D0B0DF631DD7E7A4003BA12D /* MTBag.h in Headers */, - D015E01A225CD19E00CB9E8A /* MTGzip.h in Headers */, - D0CD98691D74B9E300F41187 /* MTContext.h in Headers */, - D0CD985F1D74B9BF00F41187 /* MTSetClientDhParamsResponseMessage.h in Headers */, - D0CD98751D74BA0100F41187 /* MTDiscoverDatacenterAddressAction.h in Headers */, - D0185E742089D265005E1A6C /* MTProxyConnectivity.h in Headers */, - D0CD98EB1D75C0C100F41187 /* MTMessageTransaction.h in Headers */, - D0CD98B71D74BA7500F41187 /* MTNetworkAvailability.h in Headers */, - D0E9B9EF1F0176DA00F079A4 /* MTBackupAddressSignals.h in Headers */, - D0CD989B1D74BA6500F41187 /* MTPreparedMessage.h in Headers */, - D0CD98FE1D75C0E500F41187 /* MTDropResponseContext.h in Headers */, - D0CD986D1D74B9F000F41187 /* MTTransportScheme.h in Headers */, - D0CD984C1D74B9AD00F41187 /* MTRpcError.h in Headers */, - D0CD98251D74B99500F41187 /* MTMsgDetailedInfoMessage.h in Headers */, - D0CD989D1D74BA6500F41187 /* MTIncomingMessage.h in Headers */, - D08A159222DD32B40073B508 /* tonlib_client_json.h in Headers */, - D018559722DDD37300AC458A /* TlObject.h in Headers */, - D0CD98011D74B96400F41187 /* MTBadMsgNotificationMessage.h in Headers */, - D0CD98201D74B99500F41187 /* MTFutureSaltsMessage.h in Headers */, - D0CD985E1D74B9BF00F41187 /* MTServerDhParamsMessage.h in Headers */, - D0CAF2E61D75EA7A0011F558 /* MTAtomic.h in Headers */, - D0CD989A1D74BA6500F41187 /* MTTimeFixContext.h in Headers */, - D0CD98031D74B96400F41187 /* MTBufferReader.h in Headers */, - D0CD98041D74B96400F41187 /* MTDestroySessionResponseMessage.h in Headers */, - D0CD97FB1D74B95100F41187 /* MTSerialization.h in Headers */, - D0CD98651D74B9D800F41187 /* MTFileBasedKeychain.h in Headers */, - D018559622DDD37300AC458A /* Client.h in Headers */, - D0CD98991D74BA6500F41187 /* MTSessionInfo.h in Headers */, - D0CD97D71D74B92000F41187 /* MTTimer.h in Headers */, - D0529D2D21A434BF00D7C3C4 /* MTTransportSchemeStats.h in Headers */, - D0CD98FD1D75C0E500F41187 /* MTRequestErrorContext.h in Headers */, - D0CD989E1D74BA6500F41187 /* MTMessageEncryptionKey.h in Headers */, - D0CD982B1D74B99500F41187 /* MTPingMessage.h in Headers */, - D0CD97F71D74B94B00F41187 /* MTAes.h in Headers */, - D033873B223BC115007A2CE4 /* MTPKCS.h in Headers */, - D0CD985C1D74B9BF00F41187 /* MTRpcResultMessage.h in Headers */, - D0D225101B4D817B0085E26D /* MtProtoKitDynamic.h in Headers */, - D018559922DDD37300AC458A /* int_types.h in Headers */, - D0CD98241D74B99500F41187 /* MTMsgContainerMessage.h in Headers */, - D0CD98281D74B99500F41187 /* MTMsgsStateInfoMessage.h in Headers */, - D0CD98271D74B99500F41187 /* MTMsgsAckMessage.h in Headers */, - D0119CC320CAD34800895300 /* MTConnectionProbing.h in Headers */, - D0CD98FF1D75C0E500F41187 /* MTApiEnvironment.h in Headers */, - D0CD988D1D74BA5200F41187 /* MTDatacenterAddressListData.h in Headers */, - D0CD985D1D74B9BF00F41187 /* MTServerDhInnerDataMessage.h in Headers */, - D0CD98611D74B9D000F41187 /* MTKeychain.h in Headers */, - D018559822DDD37300AC458A /* tonlib_api.h in Headers */, - D0CD98261D74B99500F41187 /* MTMsgResendReqMessage.h in Headers */, - D018559B22DDD37300AC458A /* platform.h in Headers */, - D0CD97EE1D74B94300F41187 /* MTLogging.h in Headers */, - D0CD98FB1D75C0E500F41187 /* MTRequest.h in Headers */, - D0CAF2DA1D75E3160011F558 /* MTSubscriber.h in Headers */, - D0CD98291D74B99500F41187 /* MTMsgsStateReqMessage.h in Headers */, - D0C9322D1E095E280074F044 /* MTNetworkUsageManager.h in Headers */, - D0CD98111D74B97000F41187 /* MTExportedAuthorizationData.h in Headers */, - D0CD98FC1D75C0E500F41187 /* MTRequestContext.h in Headers */, - D0E2E17920866780005737E8 /* MTDNS.h in Headers */, - D0CD988C1D74BA5200F41187 /* MTDatacenterSaltInfo.h in Headers */, - D0CD97F31D74B94300F41187 /* MTInputStream.h in Headers */, - D0CD98221D74B99500F41187 /* MTMessage.h in Headers */, - D0CD987D1D74BA4100F41187 /* MTDatacenterAuthMessageService.h in Headers */, - D0CD988B1D74BA5200F41187 /* MTDatacenterAuthInfo.h in Headers */, - D0CD98B81D74BA7500F41187 /* MTTransport.h in Headers */, - D0CD97F21D74B94300F41187 /* MTOutputStream.h in Headers */, - D0CD98711D74B9F700F41187 /* MTDiscoverConnectionSignals.h in Headers */, - D0CD97EF1D74B94300F41187 /* MTEncryption.h in Headers */, - D0C932251E095D6A0074F044 /* MTNetworkUsageCalculationInfo.h in Headers */, - D0CD97F11D74B94300F41187 /* MTQueue.h in Headers */, - D0CD98051D74B96400F41187 /* MTDropRpcResultMessage.h in Headers */, - D0CD987C1D74BA4100F41187 /* MTDatacenterAuthAction.h in Headers */, - D018559A22DDD37300AC458A /* TonlibCallback.h in Headers */, - D08A159122DD32B40073B508 /* tonlibjson_export.h in Headers */, - D0CD982A1D74B99500F41187 /* MTNewSessionCreatedMessage.h in Headers */, - D0CD987B1D74BA4100F41187 /* MTDatacenterTransferAuthAction.h in Headers */, - D0CD990B1D75C0F400F41187 /* MTResendMessageService.h in Headers */, - D020FAFC1D994E3100F279AA /* MTHttpRequestOperation.h in Headers */, - D0BFAE6320AB505400793CF2 /* MTDatacenterVerificationData.h in Headers */, - D0CFBB8C1FD718C600B65C0D /* AFHTTPRequestOperation.h in Headers */, - D0CD98891D74BA5200F41187 /* MTDatacenterAddress.h in Headers */, - D0CD97F01D74B94300F41187 /* MTInternalId.h in Headers */, - D0119CCB20CAD65D00895300 /* PingFoundation.h in Headers */, - D0CAF2DC1D75E31B0011F558 /* MTDisposable.h in Headers */, - D0CD988A1D74BA5200F41187 /* MTDatacenterAddressSet.h in Headers */, - D0CD98B91D74BA7500F41187 /* MTTransportTransaction.h in Headers */, - D0CD982C1D74B99500F41187 /* MTPongMessage.h in Headers */, - D0CD98C61D74BA8D00F41187 /* MTTcpConnection.h in Headers */, - D0CAF2CE1D75E2580011F558 /* MTSignal.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - D00354641C173BF0006610DA /* MtProtoKitStabilityTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = D003546F1C173BF0006610DA /* Build configuration list for PBXNativeTarget "MtProtoKitStabilityTests" */; - buildPhases = ( - D00354611C173BF0006610DA /* Sources */, - D00354621C173BF0006610DA /* Frameworks */, - D00354631C173BF0006610DA /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - D003546C1C173BF0006610DA /* PBXTargetDependency */, - ); - name = MtProtoKitStabilityTests; - productName = MtProtoKitStabilityTests; - productReference = D00354651C173BF0006610DA /* MtProtoKitStabilityTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - D079AB961AF39B8000076F59 /* MtProtoKitMac */ = { - isa = PBXNativeTarget; - buildConfigurationList = D079ABAE1AF39B8000076F59 /* Build configuration list for PBXNativeTarget "MtProtoKitMac" */; - buildPhases = ( - D079AB921AF39B8000076F59 /* Sources */, - D079AB931AF39B8000076F59 /* Frameworks */, - D079AB941AF39B8000076F59 /* Headers */, - D079AB951AF39B8000076F59 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = MtProtoKitMac; - productName = MtProtoKitMac; - productReference = D079AB971AF39B8000076F59 /* MtProtoKitMac.framework */; - productType = "com.apple.product-type.framework"; - }; - D0CB05F61ADC4483005E298F /* MtProtoKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0CB060E1ADC4483005E298F /* Build configuration list for PBXNativeTarget "MtProtoKit" */; - buildPhases = ( - D0CB05F21ADC4483005E298F /* Sources */, - D0CB05F31ADC4483005E298F /* Frameworks */, - D0CB05F41ADC4483005E298F /* Headers */, - D0CB05F51ADC4483005E298F /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = MtProtoKit; - productName = MtProtoKit; - productReference = D0CB05F71ADC4483005E298F /* MtProtoKit.framework */; - productType = "com.apple.product-type.framework"; - }; - D0D2250A1B4D817B0085E26D /* MtProtoKitDynamic */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0D225221B4D817B0085E26D /* Build configuration list for PBXNativeTarget "MtProtoKitDynamic" */; - buildPhases = ( - D0D225061B4D817B0085E26D /* Sources */, - D0D225071B4D817B0085E26D /* Frameworks */, - D0D225081B4D817B0085E26D /* Headers */, - D0D225091B4D817B0085E26D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = MtProtoKitDynamic; - productName = MtProtoKitDynamic; - productReference = D0D2250B1B4D817B0085E26D /* MtProtoKitDynamic.framework */; - productType = "com.apple.product-type.framework"; - }; - D0D225141B4D817B0085E26D /* MtProtoKitDynamicTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0D225231B4D817B0085E26D /* Build configuration list for PBXNativeTarget "MtProtoKitDynamicTests" */; - buildPhases = ( - D0D225111B4D817B0085E26D /* Sources */, - D0D225121B4D817B0085E26D /* Frameworks */, - D0D225131B4D817B0085E26D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - D0D225181B4D817B0085E26D /* PBXTargetDependency */, - ); - name = MtProtoKitDynamicTests; - productName = MtProtoKitDynamicTests; - productReference = D0D225151B4D817B0085E26D /* MtProtoKitDynamicTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D05A830A18AFB3F9007F1076 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0800; - ORGANIZATIONNAME = Telegram; - TargetAttributes = { - D00354641C173BF0006610DA = { - CreatedOnToolsVersion = 7.2; - }; - D079AB961AF39B8000076F59 = { - CreatedOnToolsVersion = 6.3.1; - LastSwiftMigration = 1010; - }; - D0CB05F61ADC4483005E298F = { - CreatedOnToolsVersion = 6.3; - LastSwiftMigration = 1010; - ProvisioningStyle = Manual; - }; - D0D2250A1B4D817B0085E26D = { - CreatedOnToolsVersion = 6.4; - LastSwiftMigration = 1010; - ProvisioningStyle = Manual; - }; - D0D225141B4D817B0085E26D = { - CreatedOnToolsVersion = 6.4; - }; - }; - }; - buildConfigurationList = D05A830D18AFB3F9007F1076 /* Build configuration list for PBXProject "MtProtoKit_Xcode" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - en, - ); - mainGroup = D05A830918AFB3F9007F1076; - productRefGroup = D05A831518AFB3F9007F1076 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - D0CB05F61ADC4483005E298F /* MtProtoKit */, - D079AB961AF39B8000076F59 /* MtProtoKitMac */, - D0D2250A1B4D817B0085E26D /* MtProtoKitDynamic */, - D0D225141B4D817B0085E26D /* MtProtoKitDynamicTests */, - D00354641C173BF0006610DA /* MtProtoKitStabilityTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - D00354631C173BF0006610DA /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D079AB951AF39B8000076F59 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0CB05F51ADC4483005E298F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0D225091B4D817B0085E26D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0D225131B4D817B0085E26D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - D00354611C173BF0006610DA /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D00354681C173BF0006610DA /* MtProtoKitStabilityTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D079AB921AF39B8000076F59 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D0D58B532347E6A100CF7782 /* TON.mm in Sources */, - D0CD99021D75C0ED00F41187 /* MTRequestErrorContext.m in Sources */, - D0CD98371D74B9AA00F41187 /* MTMsgsStateInfoMessage.m in Sources */, - D0CD99011D75C0ED00F41187 /* MTRequestContext.m in Sources */, - D0CAF2DE1D75E31E0011F558 /* MTSubscriber.m in Sources */, - D0CD984E1D74B9B700F41187 /* MTRpcError.m in Sources */, - D0CD98361D74B9AA00F41187 /* MTMsgsAckMessage.m in Sources */, - D0CD97E71D74B93300F41187 /* MTAes.m in Sources */, - D0CD98EC1D75C0C500F41187 /* MTMessageTransaction.m in Sources */, - D0CD98C71D74BA9000F41187 /* MTTcpConnection.m in Sources */, - D0CD98621D74B9D500F41187 /* MTKeychain.m in Sources */, - D0CD987F1D74BA4900F41187 /* MTDatacenterAuthAction.m in Sources */, - D0CD98911D74BA5900F41187 /* MTDatacenterSaltInfo.m in Sources */, - D0CD98761D74BA0700F41187 /* MTDiscoverDatacenterAddressAction.m in Sources */, - D0CD98CC1D74BA9700F41187 /* MTTcpConnectionBehaviour.m in Sources */, - D0CD983A1D74B9AA00F41187 /* MTPingMessage.m in Sources */, - D0CD97E31D74B93300F41187 /* MTQueue.m in Sources */, - D0CAF2DD1D75E31E0011F558 /* MTDisposable.m in Sources */, - D0CD987E1D74BA4900F41187 /* MTDatacenterTransferAuthAction.m in Sources */, - D0CD988F1D74BA5900F41187 /* MTDatacenterAddressSet.m in Sources */, - D0CD98091D74B96C00F41187 /* MTDestroySessionResponseMessage.m in Sources */, - D0119CC520CAD34800895300 /* MTConnectionProbing.m in Sources */, - D0CD982E1D74B9AA00F41187 /* MTExportedAuthorizationData.m in Sources */, - D0CD986E1D74B9F400F41187 /* MTTransportScheme.m in Sources */, - D0CD98A71D74BA6E00F41187 /* MTSessionInfo.m in Sources */, - D0CD98BA1D74BA7C00F41187 /* MTNetworkAvailability.m in Sources */, - D0CD990C1D75C0F900F41187 /* MTResendMessageService.m in Sources */, - D0CD97E61D74B93300F41187 /* MTRsa.m in Sources */, - D0CD98921D74BA5900F41187 /* MTDatacenterAddressListData.m in Sources */, - D0CD98071D74B96C00F41187 /* MTBuffer.m in Sources */, - D0CD97E01D74B93300F41187 /* MTTimer.m in Sources */, - D0CD98671D74B9DD00F41187 /* MTFileBasedKeychain.m in Sources */, - D0CD986A1D74B9E900F41187 /* MTContext.m in Sources */, - D0CD98DE1D74BAEA00F41187 /* AFHTTPRequestOperation.m in Sources */, - D0CD98081D74B96C00F41187 /* MTBufferReader.m in Sources */, - D0CD98341D74B9AA00F41187 /* MTMsgDetailedInfoMessage.m in Sources */, - D0CD984F1D74B9B700F41187 /* MTRpcResultMessage.m in Sources */, - D0119CCD20CAD65D00895300 /* PingFoundation.m in Sources */, - D020FAFE1D994E3100F279AA /* MTHttpRequestOperation.m in Sources */, - D0CD98391D74B9AA00F41187 /* MTNewSessionCreatedMessage.m in Sources */, - D0CD98381D74B9AA00F41187 /* MTMsgsStateReqMessage.m in Sources */, - D033873D223BC115007A2CE4 /* MTPKCS.m in Sources */, - D0C9322F1E095E280074F044 /* MTNetworkUsageManager.m in Sources */, - D0BFAE6420AB505700793CF2 /* MTDatacenterVerificationData.m in Sources */, - D0CD98801D74BA4900F41187 /* MTDatacenterAuthMessageService.m in Sources */, - D0CD98AA1D74BA6F00F41187 /* MTOutgoingMessage.m in Sources */, - D0CD98E41D74BAF400F41187 /* GCDAsyncSocket.m in Sources */, - D0CAF2E81D75EA7E0011F558 /* MTAtomic.m in Sources */, - D0CD98901D74BA5900F41187 /* MTDatacenterAuthInfo.m in Sources */, - D0CD97E51D74B93300F41187 /* MTInputStream.m in Sources */, - D0CD98BB1D74BA7C00F41187 /* MTTransport.m in Sources */, - D0E9B9F11F0176DA00F079A4 /* MTBackupAddressSignals.m in Sources */, - D0CD982F1D74B9AA00F41187 /* MTFutureSaltsMessage.m in Sources */, - D0CD98A61D74BA6E00F41187 /* MTProto.m in Sources */, - D0529D2F21A434BF00D7C3C4 /* MTTransportSchemeStats.m in Sources */, - D0CD98331D74B9AA00F41187 /* MTMsgContainerMessage.m in Sources */, - D0CD980A1D74B96C00F41187 /* MTDropRpcResultMessage.m in Sources */, - D0CD98511D74B9B700F41187 /* MTServerDhParamsMessage.m in Sources */, - D0CD97E21D74B93300F41187 /* MTEncryption.m in Sources */, - D0CD97E11D74B93300F41187 /* MTLogging.m in Sources */, - D0CD98AB1D74BA6F00F41187 /* MTIncomingMessage.m in Sources */, - D0CD98501D74B9B700F41187 /* MTServerDhInnerDataMessage.m in Sources */, - D0CD99031D75C0ED00F41187 /* MTDropResponseContext.m in Sources */, - D0CD983B1D74B9AA00F41187 /* MTPongMessage.m in Sources */, - D0CD98BC1D74BA7C00F41187 /* MTTransportTransaction.m in Sources */, - D0CD98F41D75C0DD00F41187 /* MTRequestMessageService.m in Sources */, - D0CD98A81D74BA6E00F41187 /* MTTimeFixContext.m in Sources */, - D0185E762089D265005E1A6C /* MTProxyConnectivity.m in Sources */, - D0CD98721D74B9F900F41187 /* MTDiscoverConnectionSignals.m in Sources */, - D0CD98061D74B96C00F41187 /* MTBadMsgNotificationMessage.m in Sources */, - D0CD98311D74B9AA00F41187 /* MTMessage.m in Sources */, - D0CD99001D75C0ED00F41187 /* MTRequest.m in Sources */, - D0CD98F01D75C0D200F41187 /* MTTimeSyncMessageService.m in Sources */, - D0CD98A91D74BA6F00F41187 /* MTPreparedMessage.m in Sources */, - D0B0DF5E1DD7E75B003BA12D /* MTBag.m in Sources */, - D0CD99041D75C0ED00F41187 /* MTApiEnvironment.m in Sources */, - D0CD983C1D74B9AA00F41187 /* MTResPqMessage.m in Sources */, - D073D2D81FB5E493009E1DA2 /* MTBindingTempAuthKeyContext.m in Sources */, - D0CD98C41D74BA8A00F41187 /* MTTcpTransport.m in Sources */, - D0CD98AC1D74BA6F00F41187 /* MTMessageEncryptionKey.m in Sources */, - D0CD98301D74B9AA00F41187 /* MTInternalMessageParser.m in Sources */, - D0CD98DF1D74BAEA00F41187 /* AFURLConnectionOperation.m in Sources */, - D0CD98321D74B9AA00F41187 /* MTMsgAllInfoMessage.m in Sources */, - D0CD97D51D74B91C00F41187 /* MTTime.m in Sources */, - D0CD98351D74B9AA00F41187 /* MTMsgResendReqMessage.m in Sources */, - D0CD97E41D74B93300F41187 /* MTOutputStream.m in Sources */, - D0E2E17B20866780005737E8 /* MTDNS.m in Sources */, - D0CD988E1D74BA5900F41187 /* MTDatacenterAddress.m in Sources */, - D0CD98521D74B9B700F41187 /* MTSetClientDhParamsResponseMessage.m in Sources */, - D0C932271E095D6A0074F044 /* MTNetworkUsageCalculationInfo.m in Sources */, - D015E01C225CD19E00CB9E8A /* MTGzip.m in Sources */, - D0CAF2CF1D75E25B0011F558 /* MTSignal.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0CB05F21ADC4483005E298F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D0D1A0531ADD983C007D9ED6 /* MTMsgsStateInfoMessage.m in Sources */, - D0CB062F1ADC457B005E298F /* MTDatacenterAuthMessageService.m in Sources */, - D0CB06351ADC4588005E298F /* MTDatacenterAddressSet.m in Sources */, - D0CB06621ADC45DA005E298F /* MTTransport.m in Sources */, - D0CB06631ADC45DA005E298F /* MTTransportTransaction.m in Sources */, - D0CB06421ADC4599005E298F /* MTPreparedMessage.m in Sources */, - D0CB06641ADC45DA005E298F /* MTTcpTransport.m in Sources */, - D0D1A04D1ADD983C007D9ED6 /* MTMsgDetailedInfoMessage.m in Sources */, - D0CB06141ADC44B7005E298F /* MTQueue.m in Sources */, - D0CB06711ADC4A50005E298F /* MTTransportScheme.m in Sources */, - D0D1A04B1ADD983C007D9ED6 /* MTMsgContainerMessage.m in Sources */, - D0580AC31B0F3E9C00E8235B /* MTDiscoverConnectionSignals.m in Sources */, - D0CB06341ADC4588005E298F /* MTDatacenterAddress.m in Sources */, - D0CB06111ADC44B7005E298F /* MTTimer.m in Sources */, - D0CB062E1ADC457B005E298F /* MTDatacenterAuthAction.m in Sources */, - D0CB06441ADC4599005E298F /* MTIncomingMessage.m in Sources */, - D0D1A0511ADD983C007D9ED6 /* MTMsgsAckMessage.m in Sources */, - D010DB821D70B3B90012AD96 /* MTAes.m in Sources */, - D0CB066F1ADC49FF005E298F /* AFHTTPRequestOperation.m in Sources */, - D0D1A06C1ADD987A007D9ED6 /* MTDatacenterAddressListData.m in Sources */, - D09A59591B582EFF00FC3724 /* MTFileBasedKeychain.m in Sources */, - D0119CC420CAD34800895300 /* MTConnectionProbing.m in Sources */, - D0CB06561ADC45BA005E298F /* MTApiEnvironment.m in Sources */, - D0D1A05F1ADD983C007D9ED6 /* MTRpcError.m in Sources */, - D0CB06701ADC49FF005E298F /* AFURLConnectionOperation.m in Sources */, - D0CB06371ADC4588005E298F /* MTDatacenterSaltInfo.m in Sources */, - D0CB06501ADC45BA005E298F /* MTTimeSyncMessageService.m in Sources */, - D0CB06161ADC44B7005E298F /* MTInputStream.m in Sources */, - D0CB06651ADC45DA005E298F /* MTTcpConnection.m in Sources */, - D0CB06511ADC45BA005E298F /* MTRequestMessageService.m in Sources */, - D0CB06661ADC45DA005E298F /* MTTcpConnectionBehaviour.m in Sources */, - D0CB066C1ADC49FA005E298F /* GCDAsyncSocket.m in Sources */, - D0D1A0451ADD983C007D9ED6 /* MTInternalMessageParser.m in Sources */, - D0D1A0431ADD983C007D9ED6 /* MTFutureSaltsMessage.m in Sources */, - D0D1A0391ADD983C007D9ED6 /* MTBuffer.m in Sources */, - D0D1A0591ADD983C007D9ED6 /* MTPingMessage.m in Sources */, - D0CB06361ADC4588005E298F /* MTDatacenterAuthInfo.m in Sources */, - D0119CCC20CAD65D00895300 /* PingFoundation.m in Sources */, - D020FAFD1D994E3100F279AA /* MTHttpRequestOperation.m in Sources */, - D0CB062D1ADC457B005E298F /* MTDatacenterTransferAuthAction.m in Sources */, - D033873C223BC115007A2CE4 /* MTPKCS.m in Sources */, - D0D1A04F1ADD983C007D9ED6 /* MTMsgResendReqMessage.m in Sources */, - D0C9322E1E095E280074F044 /* MTNetworkUsageManager.m in Sources */, - D0BFAE6120AB504600793CF2 /* MTDatacenterVerificationData.m in Sources */, - D0D1A0371ADD983C007D9ED6 /* MTBadMsgNotificationMessage.m in Sources */, - D0CAF2E41D75E7F30011F558 /* MTAtomic.m in Sources */, - D0CB06611ADC45DA005E298F /* MTNetworkAvailability.m in Sources */, - D0D1A0611ADD983C007D9ED6 /* MTRpcResultMessage.m in Sources */, - D0CB06131ADC44B7005E298F /* MTEncryption.m in Sources */, - D0E9B9F01F0176DA00F079A4 /* MTBackupAddressSignals.m in Sources */, - D0CAF2D41D75E26D0011F558 /* MTSubscriber.m in Sources */, - D0CB06531ADC45BA005E298F /* MTRequestContext.m in Sources */, - D0529D2E21A434BF00D7C3C4 /* MTTransportSchemeStats.m in Sources */, - D0D1A03F1ADD983C007D9ED6 /* MTDropRpcResultMessage.m in Sources */, - D0D1A0651ADD983C007D9ED6 /* MTServerDhParamsMessage.m in Sources */, - D0CAF2D81D75E2840011F558 /* MTDisposable.m in Sources */, - D0CB06541ADC45BA005E298F /* MTRequestErrorContext.m in Sources */, - D0D1A05B1ADD983C007D9ED6 /* MTPongMessage.m in Sources */, - D0CB06241ADC455C005E298F /* MTContext.m in Sources */, - D0D1A03B1ADD983C007D9ED6 /* MTBufferReader.m in Sources */, - D0D1A05D1ADD983C007D9ED6 /* MTResPqMessage.m in Sources */, - D0CB06521ADC45BA005E298F /* MTRequest.m in Sources */, - D0CB06481ADC45A6005E298F /* MTMessageTransaction.m in Sources */, - D0CB06221ADC4551005E298F /* MTKeychain.m in Sources */, - D0185E752089D265005E1A6C /* MTProxyConnectivity.m in Sources */, - D0D1A0471ADD983C007D9ED6 /* MTMessage.m in Sources */, - D0CB06121ADC44B7005E298F /* MTLogging.m in Sources */, - D0CB063F1ADC4599005E298F /* MTProto.m in Sources */, - D0CB06101ADC44B7005E298F /* MTTime.m in Sources */, - D0CB06401ADC4599005E298F /* MTSessionInfo.m in Sources */, - D0CB06411ADC4599005E298F /* MTTimeFixContext.m in Sources */, - D0CB06291ADC456E005E298F /* MTDiscoverDatacenterAddressAction.m in Sources */, - D0B0DF5D1DD7E75B003BA12D /* MTBag.m in Sources */, - D0D1A0551ADD983C007D9ED6 /* MTMsgsStateReqMessage.m in Sources */, - D0D1A0411ADD983C007D9ED6 /* MTExportedAuthorizationData.m in Sources */, - D0C0EAE71FB5DBEA00DCF07C /* MTBindingTempAuthKeyContext.m in Sources */, - D0CB06571ADC45BA005E298F /* MTResendMessageService.m in Sources */, - D0CB06551ADC45BA005E298F /* MTDropResponseContext.m in Sources */, - D0CB06451ADC4599005E298F /* MTMessageEncryptionKey.m in Sources */, - D0D1A0671ADD983C007D9ED6 /* MTSetClientDhParamsResponseMessage.m in Sources */, - D0CB06431ADC4599005E298F /* MTOutgoingMessage.m in Sources */, - D0D1A03D1ADD983C007D9ED6 /* MTDestroySessionResponseMessage.m in Sources */, - D0CB06151ADC44B7005E298F /* MTOutputStream.m in Sources */, - D0D1A0491ADD983C007D9ED6 /* MTMsgAllInfoMessage.m in Sources */, - D0E2E17A20866780005737E8 /* MTDNS.m in Sources */, - D010DB7E1D70ABEE0012AD96 /* MTRsa.m in Sources */, - D0D1A0631ADD983C007D9ED6 /* MTServerDhInnerDataMessage.m in Sources */, - D0D1A0571ADD983C007D9ED6 /* MTNewSessionCreatedMessage.m in Sources */, - D0C932261E095D6A0074F044 /* MTNetworkUsageCalculationInfo.m in Sources */, - D015E01B225CD19E00CB9E8A /* MTGzip.m in Sources */, - D0CAF2CC1D75E24C0011F558 /* MTSignal.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0D225061B4D817B0085E26D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D0CD99071D75C0ED00F41187 /* MTRequestErrorContext.m in Sources */, - D0CD98461D74B9AA00F41187 /* MTMsgsStateInfoMessage.m in Sources */, - D0CD99061D75C0ED00F41187 /* MTRequestContext.m in Sources */, - D0CAF2E01D75E31F0011F558 /* MTSubscriber.m in Sources */, - D0CD98531D74B9B700F41187 /* MTRpcError.m in Sources */, - D0CD98451D74B9AA00F41187 /* MTMsgsAckMessage.m in Sources */, - D0CD97DF1D74B93100F41187 /* MTAes.m in Sources */, - D0CD98ED1D75C0C500F41187 /* MTMessageTransaction.m in Sources */, - D0CD98C81D74BA9100F41187 /* MTTcpConnection.m in Sources */, - D0CD98631D74B9D500F41187 /* MTKeychain.m in Sources */, - D0CD98821D74BA4900F41187 /* MTDatacenterAuthAction.m in Sources */, - D0CD98961D74BA5A00F41187 /* MTDatacenterSaltInfo.m in Sources */, - D0CD98771D74BA0700F41187 /* MTDiscoverDatacenterAddressAction.m in Sources */, - D08A159E22DD32F20073B508 /* TON.mm in Sources */, - D0CD98CD1D74BA9700F41187 /* MTTcpConnectionBehaviour.m in Sources */, - D0CD98491D74B9AA00F41187 /* MTPingMessage.m in Sources */, - D0CD97DB1D74B93100F41187 /* MTQueue.m in Sources */, - D0CAF2DF1D75E31F0011F558 /* MTDisposable.m in Sources */, - D0CD98811D74BA4900F41187 /* MTDatacenterTransferAuthAction.m in Sources */, - D0CD98941D74BA5A00F41187 /* MTDatacenterAddressSet.m in Sources */, - D0CD980E1D74B96C00F41187 /* MTDestroySessionResponseMessage.m in Sources */, - D0119CC620CAD34800895300 /* MTConnectionProbing.m in Sources */, - D0CD983D1D74B9AA00F41187 /* MTExportedAuthorizationData.m in Sources */, - D0CD986F1D74B9F500F41187 /* MTTransportScheme.m in Sources */, - D0CD98AE1D74BA6F00F41187 /* MTSessionInfo.m in Sources */, - D0CD98BD1D74BA7C00F41187 /* MTNetworkAvailability.m in Sources */, - D0CD990D1D75C0F900F41187 /* MTResendMessageService.m in Sources */, - D0CD97DE1D74B93100F41187 /* MTRsa.m in Sources */, - D0CD98971D74BA5A00F41187 /* MTDatacenterAddressListData.m in Sources */, - D0CD980C1D74B96C00F41187 /* MTBuffer.m in Sources */, - D0CD97D81D74B93100F41187 /* MTTimer.m in Sources */, - D0CD98661D74B9DD00F41187 /* MTFileBasedKeychain.m in Sources */, - D0CD986B1D74B9E900F41187 /* MTContext.m in Sources */, - D0CD98E21D74BAEB00F41187 /* AFHTTPRequestOperation.m in Sources */, - D0CD980D1D74B96C00F41187 /* MTBufferReader.m in Sources */, - D0CD98431D74B9AA00F41187 /* MTMsgDetailedInfoMessage.m in Sources */, - D0CD98541D74B9B700F41187 /* MTRpcResultMessage.m in Sources */, - D0119CCE20CAD65D00895300 /* PingFoundation.m in Sources */, - D020FAFF1D994E3100F279AA /* MTHttpRequestOperation.m in Sources */, - D0CD98481D74B9AA00F41187 /* MTNewSessionCreatedMessage.m in Sources */, - D0CD98471D74B9AA00F41187 /* MTMsgsStateReqMessage.m in Sources */, - D033873E223BC115007A2CE4 /* MTPKCS.m in Sources */, - D0C932301E095E280074F044 /* MTNetworkUsageManager.m in Sources */, - D0BFAE6520AB505800793CF2 /* MTDatacenterVerificationData.m in Sources */, - D0CD98831D74BA4900F41187 /* MTDatacenterAuthMessageService.m in Sources */, - D0CD98B11D74BA6F00F41187 /* MTOutgoingMessage.m in Sources */, - D0CD98E51D74BAF400F41187 /* GCDAsyncSocket.m in Sources */, - D0CAF2E71D75EA7E0011F558 /* MTAtomic.m in Sources */, - D0CD98951D74BA5A00F41187 /* MTDatacenterAuthInfo.m in Sources */, - D0CD97DD1D74B93100F41187 /* MTInputStream.m in Sources */, - D0CD98BE1D74BA7C00F41187 /* MTTransport.m in Sources */, - D0E9B9F21F0176DA00F079A4 /* MTBackupAddressSignals.m in Sources */, - D0CD983E1D74B9AA00F41187 /* MTFutureSaltsMessage.m in Sources */, - D0CD98AD1D74BA6F00F41187 /* MTProto.m in Sources */, - D0529D3021A434BF00D7C3C4 /* MTTransportSchemeStats.m in Sources */, - D0CD98421D74B9AA00F41187 /* MTMsgContainerMessage.m in Sources */, - D0CD980F1D74B96C00F41187 /* MTDropRpcResultMessage.m in Sources */, - D0CD98561D74B9B700F41187 /* MTServerDhParamsMessage.m in Sources */, - D0CD97DA1D74B93100F41187 /* MTEncryption.m in Sources */, - D0CD97D91D74B93100F41187 /* MTLogging.m in Sources */, - D0CD98B21D74BA6F00F41187 /* MTIncomingMessage.m in Sources */, - D0CD98551D74B9B700F41187 /* MTServerDhInnerDataMessage.m in Sources */, - D0CD99081D75C0ED00F41187 /* MTDropResponseContext.m in Sources */, - D0CD984A1D74B9AA00F41187 /* MTPongMessage.m in Sources */, - D0CD98BF1D74BA7C00F41187 /* MTTransportTransaction.m in Sources */, - D0CD98F51D75C0DD00F41187 /* MTRequestMessageService.m in Sources */, - D0CD98AF1D74BA6F00F41187 /* MTTimeFixContext.m in Sources */, - D0185E772089D265005E1A6C /* MTProxyConnectivity.m in Sources */, - D0CD98731D74B9F900F41187 /* MTDiscoverConnectionSignals.m in Sources */, - D0CD980B1D74B96C00F41187 /* MTBadMsgNotificationMessage.m in Sources */, - D0CD98401D74B9AA00F41187 /* MTMessage.m in Sources */, - D0CD99051D75C0ED00F41187 /* MTRequest.m in Sources */, - D0CD98F11D75C0D300F41187 /* MTTimeSyncMessageService.m in Sources */, - D0CD98B01D74BA6F00F41187 /* MTPreparedMessage.m in Sources */, - D0B0DF5F1DD7E75B003BA12D /* MTBag.m in Sources */, - D0CD99091D75C0ED00F41187 /* MTApiEnvironment.m in Sources */, - D0CD984B1D74B9AA00F41187 /* MTResPqMessage.m in Sources */, - D073D2D91FB5E494009E1DA2 /* MTBindingTempAuthKeyContext.m in Sources */, - D0CD98C31D74BA8A00F41187 /* MTTcpTransport.m in Sources */, - D0CD98B31D74BA6F00F41187 /* MTMessageEncryptionKey.m in Sources */, - D0CD983F1D74B9AA00F41187 /* MTInternalMessageParser.m in Sources */, - D0CD98E31D74BAEB00F41187 /* AFURLConnectionOperation.m in Sources */, - D0CD98411D74B9AA00F41187 /* MTMsgAllInfoMessage.m in Sources */, - D0CD97D41D74B91B00F41187 /* MTTime.m in Sources */, - D0CD98441D74B9AA00F41187 /* MTMsgResendReqMessage.m in Sources */, - D0CD97DC1D74B93100F41187 /* MTOutputStream.m in Sources */, - D0E2E17C20866780005737E8 /* MTDNS.m in Sources */, - D0CD98931D74BA5A00F41187 /* MTDatacenterAddress.m in Sources */, - D0CD98571D74B9B700F41187 /* MTSetClientDhParamsResponseMessage.m in Sources */, - D0C932281E095D6A0074F044 /* MTNetworkUsageCalculationInfo.m in Sources */, - D015E01D225CD19E00CB9E8A /* MTGzip.m in Sources */, - D0CAF2D01D75E25B0011F558 /* MTSignal.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0D225111B4D817B0085E26D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D0D2251D1B4D817B0085E26D /* MtProtoKitDynamicTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - D003546C1C173BF0006610DA /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D0CB05F61ADC4483005E298F /* MtProtoKit */; - targetProxy = D003546B1C173BF0006610DA /* PBXContainerItemProxy */; - }; - D0D225181B4D817B0085E26D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D0D2250A1B4D817B0085E26D /* MtProtoKitDynamic */; - targetProxy = D0D225171B4D817B0085E26D /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - D05A833518AFB3F9007F1076 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - D05A833618AFB3F9007F1076 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - D05A835118AFB40C007F1076 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - D05A835218AFB40C007F1076 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - D063A31718B157F700C65116 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - D063A31818B157F700C65116 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - C22069C21E8EB4B300E82730 /* AppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = AppStore; - }; - C22069C31E8EB4B300E82730 /* AppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(PROJECT_DIR)/openssl", - ); - INFOPLIST_FILE = MtProtoKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - ); - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = NO; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-lz"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = MtProtoKit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = AppStore; - }; - C22069C41E8EB4B300E82730 /* AppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/openssl", - "$(PROJECT_DIR)/TON/macOS/include", - ); - INFOPLIST_FILE = MtProtoKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/OSX", - "$(PROJECT_DIR)/TON/lib/macos", - "$(PROJECT_DIR)/TON/macOS/lib", - ); - MACH_O_TYPE = mh_dylib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitMacFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = AppStore; - }; - C22069C51E8EB4B300E82730 /* AppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = NO; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/thirdparty", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/openssl"; - INFOPLIST_FILE = MtProtoKitDynamic/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - "$(PROJECT_DIR)/TON/lib/ios", - "$(PROJECT_DIR)/TON/lib/macos", - ); - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "-DMtProtoKitDynamicFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SEPARATE_STRIP = NO; - SKIP_INSTALL = YES; - STRIPFLAGS = ""; - STRIP_STYLE = debugging; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = AppStore; - }; - C22069C61E8EB4B300E82730 /* AppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitDynamicTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = AppStore; - }; - C22069C71E8EB4B300E82730 /* AppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitStabilityTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.MtProtoKitStabilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = AppStore; - }; - D003546D1C173BF0006610DA /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitStabilityTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.MtProtoKitStabilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - D003546E1C173BF0006610DA /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitStabilityTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.MtProtoKitStabilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - D013CAD5209C3BE2009A0B6F /* DebugForkAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - }; - name = DebugForkAppStore; - }; - D013CAD6209C3BE2009A0B6F /* DebugForkAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(PROJECT_DIR)/openssl", - ); - INFOPLIST_FILE = MtProtoKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - ); - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-lz"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = MtProtoKit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugForkAppStore; - }; - D013CAD7209C3BE2009A0B6F /* DebugForkAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/openssl", - "$(PROJECT_DIR)/TON/macOS/include", - ); - INFOPLIST_FILE = MtProtoKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/OSX", - "$(PROJECT_DIR)/TON/lib/macos", - "$(PROJECT_DIR)/TON/macOS/lib", - ); - MACH_O_TYPE = mh_dylib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitMacFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugForkAppStore; - }; - D013CAD8209C3BE2009A0B6F /* DebugForkAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = NO; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/thirdparty", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/openssl"; - INFOPLIST_FILE = MtProtoKitDynamic/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - "$(PROJECT_DIR)/TON/lib/ios", - "$(PROJECT_DIR)/TON/lib/macos", - ); - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitDynamicFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SEPARATE_STRIP = NO; - SKIP_INSTALL = YES; - STRIPFLAGS = ""; - STRIP_STYLE = debugging; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugForkAppStore; - }; - D013CAD9209C3BE2009A0B6F /* DebugForkAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = MtProtoKitDynamicTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugForkAppStore; - }; - D013CADA209C3BE2009A0B6F /* DebugForkAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitStabilityTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.MtProtoKitStabilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugForkAppStore; - }; - D021D4FC219CB1CD0064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - }; - name = DebugFork; - }; - D021D4FD219CB1CD0064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(PROJECT_DIR)/openssl", - ); - INFOPLIST_FILE = MtProtoKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - ); - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-lz"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = MtProtoKit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugFork; - }; - D021D4FE219CB1CD0064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - "BETA=1", - ); - HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/openssl", - "$(PROJECT_DIR)/TON/macOS/include", - ); - INFOPLIST_FILE = MtProtoKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/OSX", - "$(PROJECT_DIR)/TON/lib/macos", - "$(PROJECT_DIR)/TON/macOS/lib", - ); - MACH_O_TYPE = mh_dylib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitMacFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugFork; - }; - D021D4FF219CB1CD0064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = NO; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/thirdparty", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/openssl"; - INFOPLIST_FILE = MtProtoKitDynamic/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - "$(PROJECT_DIR)/TON/lib/ios", - "$(PROJECT_DIR)/TON/lib/macos", - ); - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitDynamicFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SEPARATE_STRIP = NO; - SKIP_INSTALL = YES; - STRIPFLAGS = ""; - STRIP_STYLE = debugging; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugFork; - }; - D021D500219CB1CD0064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = MtProtoKitDynamicTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugFork; - }; - D021D501219CB1CD0064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitStabilityTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.MtProtoKitStabilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugFork; - }; - D0364D4722B3E35B002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - }; - name = HockeyappMacAlpha; - }; - D0364D4822B3E35B002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(PROJECT_DIR)/openssl", - ); - INFOPLIST_FILE = MtProtoKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - ); - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-lz"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = MtProtoKit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = HockeyappMacAlpha; - }; - D0364D4922B3E35B002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - "BETA=1", - ); - HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/openssl", - "$(PROJECT_DIR)/TON/macOS/include", - ); - INFOPLIST_FILE = MtProtoKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/OSX", - "$(PROJECT_DIR)/TON/lib/macos", - "$(PROJECT_DIR)/TON/macOS/lib", - ); - MACH_O_TYPE = mh_dylib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitMacFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = HockeyappMacAlpha; - }; - D0364D4A22B3E35B002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = NO; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/thirdparty", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/openssl"; - INFOPLIST_FILE = MtProtoKitDynamic/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - "$(PROJECT_DIR)/TON/lib/ios", - "$(PROJECT_DIR)/TON/lib/macos", - ); - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitDynamicFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SEPARATE_STRIP = NO; - SKIP_INSTALL = YES; - STRIPFLAGS = ""; - STRIP_STYLE = debugging; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = HockeyappMacAlpha; - }; - D0364D4B22B3E35B002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = MtProtoKitDynamicTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = HockeyappMacAlpha; - }; - D0364D4C22B3E35B002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitStabilityTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.MtProtoKitStabilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = HockeyappMacAlpha; - }; - D05A833A18AFB3F9007F1076 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - }; - name = Debug; - }; - D05A833B18AFB3F9007F1076 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - D079ABAA1AF39B8000076F59 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ""; - HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/openssl", - "$(PROJECT_DIR)/TON/macOS/include", - ); - INFOPLIST_FILE = MtProtoKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/OSX", - "$(PROJECT_DIR)/TON/lib/macos", - "$(PROJECT_DIR)/TON/macOS/lib", - ); - MACH_O_TYPE = mh_dylib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitMacFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - D079ABAB1AF39B8000076F59 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/openssl", - "$(PROJECT_DIR)/TON/macOS/include", - ); - INFOPLIST_FILE = MtProtoKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/OSX", - "$(PROJECT_DIR)/TON/lib/macos", - "$(PROJECT_DIR)/TON/macOS/lib", - ); - MACH_O_TYPE = mh_dylib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "-DMtProtoKitMacFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - D079FD101F06BE440038FADE /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - }; - name = DebugHockeyapp; - }; - D079FD111F06BE440038FADE /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(PROJECT_DIR)/openssl", - ); - INFOPLIST_FILE = MtProtoKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - ); - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-lz"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = MtProtoKit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugHockeyapp; - }; - D079FD121F06BE440038FADE /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - "BETA=1", - ); - HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/openssl", - "$(PROJECT_DIR)/TON/macOS/include", - ); - INFOPLIST_FILE = MtProtoKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/OSX", - "$(PROJECT_DIR)/TON/lib/macos", - "$(PROJECT_DIR)/TON/macOS/lib", - ); - MACH_O_TYPE = mh_dylib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitMacFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugHockeyapp; - }; - D079FD131F06BE440038FADE /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = NO; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/thirdparty", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/openssl"; - INFOPLIST_FILE = MtProtoKitDynamic/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - "$(PROJECT_DIR)/TON/lib/ios", - "$(PROJECT_DIR)/TON/lib/macos", - ); - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitDynamicFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SEPARATE_STRIP = NO; - SKIP_INSTALL = YES; - STRIPFLAGS = ""; - STRIP_STYLE = debugging; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugHockeyapp; - }; - D079FD141F06BE440038FADE /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = MtProtoKitDynamicTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugHockeyapp; - }; - D079FD151F06BE440038FADE /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitStabilityTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.MtProtoKitStabilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugHockeyapp; - }; - D079FD161F06BE4D0038FADE /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = ReleaseAppStore; - }; - D079FD171F06BE4D0038FADE /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(PROJECT_DIR)/openssl", - ); - INFOPLIST_FILE = MtProtoKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - ); - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = NO; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-lz"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = MtProtoKit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStore; - }; - D079FD181F06BE4D0038FADE /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = APPSTORE; - HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/openssl", - "$(PROJECT_DIR)/TON/macOS/include", - ); - INFOPLIST_FILE = MtProtoKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/OSX", - "$(PROJECT_DIR)/TON/lib/macos", - "$(PROJECT_DIR)/TON/macOS/lib", - ); - MACH_O_TYPE = mh_dylib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "-DMtProtoKitMacFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStore; - }; - D079FD191F06BE4D0038FADE /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = NO; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/thirdparty", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/openssl"; - INFOPLIST_FILE = MtProtoKitDynamic/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - "$(PROJECT_DIR)/TON/lib/ios", - "$(PROJECT_DIR)/TON/lib/macos", - ); - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "-DMtProtoKitDynamicFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SEPARATE_STRIP = NO; - SKIP_INSTALL = YES; - STRIPFLAGS = ""; - STRIP_STYLE = debugging; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStore; - }; - D079FD1A1F06BE4D0038FADE /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitDynamicTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseAppStore; - }; - D079FD1B1F06BE4D0038FADE /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitStabilityTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.MtProtoKitStabilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseAppStore; - }; - D079FD1C1F06BE540038FADE /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = ReleaseHockeyapp; - }; - D079FD1D1F06BE540038FADE /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(PROJECT_DIR)/openssl", - ); - INFOPLIST_FILE = MtProtoKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - ); - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = NO; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-lz"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = MtProtoKit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyapp; - }; - D079FD1E1F06BE540038FADE /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = STABLE; - HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/openssl", - "$(PROJECT_DIR)/TON/macOS/include", - ); - INFOPLIST_FILE = MtProtoKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/OSX", - "$(PROJECT_DIR)/TON/lib/macos", - "$(PROJECT_DIR)/TON/macOS/lib", - ); - MACH_O_TYPE = mh_dylib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "-DMtProtoKitMacFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyapp; - }; - D079FD1F1F06BE540038FADE /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = NO; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/thirdparty", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/openssl"; - INFOPLIST_FILE = MtProtoKitDynamic/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - "$(PROJECT_DIR)/TON/lib/ios", - "$(PROJECT_DIR)/TON/lib/macos", - ); - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "-DMtProtoKitDynamicFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SEPARATE_STRIP = NO; - SKIP_INSTALL = YES; - STRIPFLAGS = ""; - STRIP_STYLE = debugging; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyapp; - }; - D079FD201F06BE540038FADE /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitDynamicTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseHockeyapp; - }; - D079FD211F06BE540038FADE /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitStabilityTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.MtProtoKitStabilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseHockeyapp; - }; - D0924FDC1FE52BFE003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = ReleaseHockeyappInternal; - }; - D0924FDD1FE52BFE003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(PROJECT_DIR)/openssl", - ); - INFOPLIST_FILE = MtProtoKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - ); - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = NO; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-lz"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = MtProtoKit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyappInternal; - }; - D0924FDE1FE52BFE003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/openssl", - "$(PROJECT_DIR)/TON/macOS/include", - ); - INFOPLIST_FILE = MtProtoKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/OSX", - "$(PROJECT_DIR)/TON/lib/macos", - "$(PROJECT_DIR)/TON/macOS/lib", - ); - MACH_O_TYPE = mh_dylib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "-DMtProtoKitMacFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyappInternal; - }; - D0924FDF1FE52BFE003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = NO; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/thirdparty", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/openssl"; - INFOPLIST_FILE = MtProtoKitDynamic/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - "$(PROJECT_DIR)/TON/lib/ios", - "$(PROJECT_DIR)/TON/lib/macos", - ); - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "-DMtProtoKitDynamicFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SEPARATE_STRIP = NO; - SKIP_INSTALL = YES; - STRIPFLAGS = ""; - STRIP_STYLE = debugging; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyappInternal; - }; - D0924FE01FE52BFE003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitDynamicTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseHockeyappInternal; - }; - D0924FE11FE52BFE003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitStabilityTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.MtProtoKitStabilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseHockeyappInternal; - }; - D096C2D21CC3C664006D814E /* Hockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Hockeyapp; - }; - D096C2D31CC3C664006D814E /* Hockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(PROJECT_DIR)/openssl", - ); - INFOPLIST_FILE = MtProtoKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - ); - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = NO; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-lz"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = MtProtoKit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Hockeyapp; - }; - D096C2D41CC3C664006D814E /* Hockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/openssl", - "$(PROJECT_DIR)/TON/macOS/include", - ); - INFOPLIST_FILE = MtProtoKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/OSX", - "$(PROJECT_DIR)/TON/lib/macos", - "$(PROJECT_DIR)/TON/macOS/lib", - ); - MACH_O_TYPE = mh_dylib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "-DMtProtoKitMacFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Hockeyapp; - }; - D096C2D51CC3C664006D814E /* Hockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = NO; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/thirdparty", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/openssl"; - INFOPLIST_FILE = MtProtoKitDynamic/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - "$(PROJECT_DIR)/TON/lib/ios", - "$(PROJECT_DIR)/TON/lib/macos", - ); - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "-DMtProtoKitDynamicFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SEPARATE_STRIP = NO; - SKIP_INSTALL = YES; - STRIPFLAGS = ""; - STRIP_STYLE = debugging; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Hockeyapp; - }; - D096C2D61CC3C664006D814E /* Hockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitDynamicTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Hockeyapp; - }; - D096C2D71CC3C664006D814E /* Hockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitStabilityTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.MtProtoKitStabilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Hockeyapp; - }; - D0ADF928212B3ACC00310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - }; - name = DebugAppStoreLLC; - }; - D0ADF929212B3ACC00310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(PROJECT_DIR)/openssl", - ); - INFOPLIST_FILE = MtProtoKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - ); - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-lz"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = MtProtoKit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStoreLLC; - }; - D0ADF92A212B3ACC00310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - "BETA=1", - ); - HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/openssl", - "$(PROJECT_DIR)/TON/macOS/include", - ); - INFOPLIST_FILE = MtProtoKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/OSX", - "$(PROJECT_DIR)/TON/lib/macos", - "$(PROJECT_DIR)/TON/macOS/lib", - ); - MACH_O_TYPE = mh_dylib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitMacFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStoreLLC; - }; - D0ADF92B212B3ACC00310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = NO; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/thirdparty", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/openssl"; - INFOPLIST_FILE = MtProtoKitDynamic/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - "$(PROJECT_DIR)/TON/lib/ios", - "$(PROJECT_DIR)/TON/lib/macos", - ); - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitDynamicFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SEPARATE_STRIP = NO; - SKIP_INSTALL = YES; - STRIPFLAGS = ""; - STRIP_STYLE = debugging; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStoreLLC; - }; - D0ADF92C212B3ACC00310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = MtProtoKitDynamicTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugAppStoreLLC; - }; - D0ADF92D212B3ACC00310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitStabilityTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.MtProtoKitStabilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugAppStoreLLC; - }; - D0CB060A1ADC4483005E298F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(PROJECT_DIR)/openssl", - ); - INFOPLIST_FILE = MtProtoKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - ); - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-lz"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = MtProtoKit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - D0CB060B1ADC4483005E298F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(PROJECT_DIR)/openssl", - ); - INFOPLIST_FILE = MtProtoKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - ); - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = NO; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-lz"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = MtProtoKit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - D0CE6EE9213DC2F900BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EEA213DC2F900BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(PROJECT_DIR)/openssl", - ); - INFOPLIST_FILE = MtProtoKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - ); - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = NO; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-lz"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = MtProtoKit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EEB213DC2F900BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = APPSTORE; - HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/openssl", - "$(PROJECT_DIR)/TON/macOS/include", - ); - INFOPLIST_FILE = MtProtoKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/OSX", - "$(PROJECT_DIR)/TON/lib/macos", - "$(PROJECT_DIR)/TON/macOS/lib", - ); - MACH_O_TYPE = mh_dylib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "-DMtProtoKitMacFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EEC213DC2F900BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = NO; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/thirdparty", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/openssl"; - INFOPLIST_FILE = MtProtoKitDynamic/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - "$(PROJECT_DIR)/TON/lib/ios", - "$(PROJECT_DIR)/TON/lib/macos", - ); - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "-DMtProtoKitDynamicFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SEPARATE_STRIP = NO; - SKIP_INSTALL = YES; - STRIPFLAGS = ""; - STRIP_STYLE = debugging; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EED213DC2F900BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitDynamicTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EEE213DC2F900BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitStabilityTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.MtProtoKitStabilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseAppStoreLLC; - }; - D0D2251E1B4D817B0085E26D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = NO; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/thirdparty", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/openssl"; - INFOPLIST_FILE = MtProtoKitDynamic/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - "$(PROJECT_DIR)/TON/lib/ios", - "$(PROJECT_DIR)/TON/lib/macos", - ); - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitDynamicFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SEPARATE_STRIP = NO; - SKIP_INSTALL = YES; - STRIPFLAGS = ""; - STRIP_STYLE = debugging; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - D0D2251F1B4D817B0085E26D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = NO; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/thirdparty", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/openssl"; - INFOPLIST_FILE = MtProtoKitDynamic/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - "$(PROJECT_DIR)/TON/lib/ios", - "$(PROJECT_DIR)/TON/lib/macos", - ); - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "-DMtProtoKitDynamicFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SEPARATE_STRIP = NO; - SKIP_INSTALL = YES; - STRIPFLAGS = ""; - STRIP_STYLE = debugging; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - D0D225201B4D817B0085E26D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = MtProtoKitDynamicTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - D0D225211B4D817B0085E26D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitDynamicTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - D0DB57B01E5C4B470071854C /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - }; - name = DebugAppStore; - }; - D0DB57B11E5C4B470071854C /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/Telegraph-dzhgyeoibunjpxfckifwvbawfdmi/Build/Products/Debug-iphoneos", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MtProtoKitiOS/MtProtoKit-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(PROJECT_DIR)/openssl", - ); - INFOPLIST_FILE = MtProtoKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - ); - MACH_O_TYPE = staticlib; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = NO; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = "-lz"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = MtProtoKit; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStore; - }; - D0DB57B21E5C4B470071854C /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - "BETA=1", - ); - HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/openssl", - "$(PROJECT_DIR)/TON/macOS/include", - ); - INFOPLIST_FILE = MtProtoKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/OSX", - "$(PROJECT_DIR)/TON/lib/macos", - "$(PROJECT_DIR)/TON/macOS/lib", - ); - MACH_O_TYPE = mh_dylib; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitMacFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStore; - }; - D0DB57B31E5C4B470071854C /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = NO; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/thirdparty", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/openssl"; - INFOPLIST_FILE = MtProtoKitDynamic/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/openssl/iOS", - "$(PROJECT_DIR)/TON", - "$(PROJECT_DIR)/TON/lib/ios", - "$(PROJECT_DIR)/TON/lib/macos", - ); - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "-DMtProtoKitDynamicFramework=1"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SEPARATE_STRIP = NO; - SKIP_INSTALL = YES; - STRIPFLAGS = ""; - STRIP_STYLE = debugging; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStore; - }; - D0DB57B41E5C4B470071854C /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = MtProtoKitDynamicTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugAppStore; - }; - D0DB57B51E5C4B470071854C /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_UNREACHABLE_CODE = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = MtProtoKitStabilityTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.MtProtoKitStabilityTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugAppStore; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - D003546F1C173BF0006610DA /* Build configuration list for PBXNativeTarget "MtProtoKitStabilityTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D003546D1C173BF0006610DA /* Debug */, - D079FD151F06BE440038FADE /* DebugHockeyapp */, - D0364D4C22B3E35B002A6EF0 /* HockeyappMacAlpha */, - D021D501219CB1CD0064BEBA /* DebugFork */, - D0DB57B51E5C4B470071854C /* DebugAppStore */, - D0ADF92D212B3ACC00310BBC /* DebugAppStoreLLC */, - D013CADA209C3BE2009A0B6F /* DebugForkAppStore */, - D003546E1C173BF0006610DA /* Release */, - C22069C71E8EB4B300E82730 /* AppStore */, - D079FD1B1F06BE4D0038FADE /* ReleaseAppStore */, - D0CE6EEE213DC2F900BCD44B /* ReleaseAppStoreLLC */, - D096C2D71CC3C664006D814E /* Hockeyapp */, - D079FD211F06BE540038FADE /* ReleaseHockeyapp */, - D0924FE11FE52BFE003F693F /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D05A830D18AFB3F9007F1076 /* Build configuration list for PBXProject "MtProtoKit_Xcode" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D05A833A18AFB3F9007F1076 /* Debug */, - D079FD101F06BE440038FADE /* DebugHockeyapp */, - D0364D4722B3E35B002A6EF0 /* HockeyappMacAlpha */, - D021D4FC219CB1CD0064BEBA /* DebugFork */, - D0DB57B01E5C4B470071854C /* DebugAppStore */, - D0ADF928212B3ACC00310BBC /* DebugAppStoreLLC */, - D013CAD5209C3BE2009A0B6F /* DebugForkAppStore */, - D05A833B18AFB3F9007F1076 /* Release */, - C22069C21E8EB4B300E82730 /* AppStore */, - D079FD161F06BE4D0038FADE /* ReleaseAppStore */, - D0CE6EE9213DC2F900BCD44B /* ReleaseAppStoreLLC */, - D096C2D21CC3C664006D814E /* Hockeyapp */, - D079FD1C1F06BE540038FADE /* ReleaseHockeyapp */, - D0924FDC1FE52BFE003F693F /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D079ABAE1AF39B8000076F59 /* Build configuration list for PBXNativeTarget "MtProtoKitMac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D079ABAA1AF39B8000076F59 /* Debug */, - D079FD121F06BE440038FADE /* DebugHockeyapp */, - D0364D4922B3E35B002A6EF0 /* HockeyappMacAlpha */, - D021D4FE219CB1CD0064BEBA /* DebugFork */, - D0DB57B21E5C4B470071854C /* DebugAppStore */, - D0ADF92A212B3ACC00310BBC /* DebugAppStoreLLC */, - D013CAD7209C3BE2009A0B6F /* DebugForkAppStore */, - D079ABAB1AF39B8000076F59 /* Release */, - C22069C41E8EB4B300E82730 /* AppStore */, - D079FD181F06BE4D0038FADE /* ReleaseAppStore */, - D0CE6EEB213DC2F900BCD44B /* ReleaseAppStoreLLC */, - D096C2D41CC3C664006D814E /* Hockeyapp */, - D079FD1E1F06BE540038FADE /* ReleaseHockeyapp */, - D0924FDE1FE52BFE003F693F /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D0CB060E1ADC4483005E298F /* Build configuration list for PBXNativeTarget "MtProtoKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0CB060A1ADC4483005E298F /* Debug */, - D079FD111F06BE440038FADE /* DebugHockeyapp */, - D0364D4822B3E35B002A6EF0 /* HockeyappMacAlpha */, - D021D4FD219CB1CD0064BEBA /* DebugFork */, - D0DB57B11E5C4B470071854C /* DebugAppStore */, - D0ADF929212B3ACC00310BBC /* DebugAppStoreLLC */, - D013CAD6209C3BE2009A0B6F /* DebugForkAppStore */, - D0CB060B1ADC4483005E298F /* Release */, - C22069C31E8EB4B300E82730 /* AppStore */, - D079FD171F06BE4D0038FADE /* ReleaseAppStore */, - D0CE6EEA213DC2F900BCD44B /* ReleaseAppStoreLLC */, - D096C2D31CC3C664006D814E /* Hockeyapp */, - D079FD1D1F06BE540038FADE /* ReleaseHockeyapp */, - D0924FDD1FE52BFE003F693F /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D0D225221B4D817B0085E26D /* Build configuration list for PBXNativeTarget "MtProtoKitDynamic" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0D2251E1B4D817B0085E26D /* Debug */, - D079FD131F06BE440038FADE /* DebugHockeyapp */, - D0364D4A22B3E35B002A6EF0 /* HockeyappMacAlpha */, - D021D4FF219CB1CD0064BEBA /* DebugFork */, - D0DB57B31E5C4B470071854C /* DebugAppStore */, - D0ADF92B212B3ACC00310BBC /* DebugAppStoreLLC */, - D013CAD8209C3BE2009A0B6F /* DebugForkAppStore */, - D0D2251F1B4D817B0085E26D /* Release */, - C22069C51E8EB4B300E82730 /* AppStore */, - D079FD191F06BE4D0038FADE /* ReleaseAppStore */, - D0CE6EEC213DC2F900BCD44B /* ReleaseAppStoreLLC */, - D096C2D51CC3C664006D814E /* Hockeyapp */, - D079FD1F1F06BE540038FADE /* ReleaseHockeyapp */, - D0924FDF1FE52BFE003F693F /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D0D225231B4D817B0085E26D /* Build configuration list for PBXNativeTarget "MtProtoKitDynamicTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0D225201B4D817B0085E26D /* Debug */, - D079FD141F06BE440038FADE /* DebugHockeyapp */, - D0364D4B22B3E35B002A6EF0 /* HockeyappMacAlpha */, - D021D500219CB1CD0064BEBA /* DebugFork */, - D0DB57B41E5C4B470071854C /* DebugAppStore */, - D0ADF92C212B3ACC00310BBC /* DebugAppStoreLLC */, - D013CAD9209C3BE2009A0B6F /* DebugForkAppStore */, - D0D225211B4D817B0085E26D /* Release */, - C22069C61E8EB4B300E82730 /* AppStore */, - D079FD1A1F06BE4D0038FADE /* ReleaseAppStore */, - D0CE6EED213DC2F900BCD44B /* ReleaseAppStoreLLC */, - D096C2D61CC3C664006D814E /* Hockeyapp */, - D079FD201F06BE540038FADE /* ReleaseHockeyapp */, - D0924FE01FE52BFE003F693F /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = D05A830A18AFB3F9007F1076 /* Project object */; -} diff --git a/submodules/MtProtoKit/MtProtoKit_Xcode.xcodeproj/xcshareddata/xcschemes/MtProtoKitMac.xcscheme b/submodules/MtProtoKit/MtProtoKit_Xcode.xcodeproj/xcshareddata/xcschemes/MtProtoKitMac.xcscheme deleted file mode 100644 index 617e7bfff5..0000000000 --- a/submodules/MtProtoKit/MtProtoKit_Xcode.xcodeproj/xcshareddata/xcschemes/MtProtoKitMac.xcscheme +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/MtProtoKit/MtProtoKitiOS/MtProtoKit-Info.plist b/submodules/MtProtoKit/MtProtoKitiOS/MtProtoKit-Info.plist deleted file mode 100644 index 94a585e1e0..0000000000 --- a/submodules/MtProtoKit/MtProtoKitiOS/MtProtoKit-Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - - CFBundleIdentifier - com.telegram.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSPrincipalClass - - - diff --git a/submodules/MtProtoKit/MtProtoKitiOS/MtProtoKit-Prefix.pch b/submodules/MtProtoKit/MtProtoKitiOS/MtProtoKit-Prefix.pch deleted file mode 100644 index 1bcc23b7ad..0000000000 --- a/submodules/MtProtoKit/MtProtoKitiOS/MtProtoKit-Prefix.pch +++ /dev/null @@ -1,10 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#ifdef __OBJC__ - #import -#endif - diff --git a/submodules/MtProtoKit/MtProtoKitiOS/en.lproj/InfoPlist.strings b/submodules/MtProtoKit/MtProtoKitiOS/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28ff8f..0000000000 --- a/submodules/MtProtoKit/MtProtoKitiOS/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/submodules/MtProtoKit/TON/macOS/include/auto/tl/tonlib_api.h b/submodules/MtProtoKit/TON/macOS/include/auto/tl/tonlib_api.h deleted file mode 100644 index a9f5430c73..0000000000 --- a/submodules/MtProtoKit/TON/macOS/include/auto/tl/tonlib_api.h +++ /dev/null @@ -1,1658 +0,0 @@ -#pragma once - -#include "tl/TlObject.h" - -#include "td/utils/int_types.h" - -#include -#include "td/utils/SharedSlice.h" - -#include -#include -#include -#include - -namespace td { -class TlStorerToString; -} // namespace td - -namespace ton { -namespace tonlib_api{ -using BaseObject = ::ton::TlObject; - -template -using object_ptr = ::ton::tl_object_ptr; - -template -object_ptr make_object(Args &&... args) { - return object_ptr(new Type(std::forward(args)...)); -} - -template -object_ptr move_object_as(FromType &&from) { - return object_ptr(static_cast(from.release())); -} - -std::string to_string(const BaseObject &value); - -template -std::string to_string(const object_ptr &value) { - if (value == nullptr) { - return "null"; - } - - return to_string(*value); -} - -class accountAddress; - -class bip39Hints; - -class config; - -class data; - -class error; - -class exportedEncryptedKey; - -class exportedKey; - -class exportedPemKey; - -class inputKey; - -class key; - -class KeyStoreType; - -class LogStream; - -class logTags; - -class logVerbosityLevel; - -class ok; - -class options; - -class sendGramsResult; - -class unpackedAccountAddress; - -class updateSendLiteServerQuery; - -class generic_AccountState; - -class internal_transactionId; - -class raw_accountState; - -class raw_initialAccountState; - -class raw_message; - -class raw_transaction; - -class raw_transactions; - -class testGiver_accountState; - -class testWallet_accountState; - -class testWallet_initialAccountState; - -class uninited_accountState; - -class wallet_accountState; - -class wallet_initialAccountState; - -class Object; - -class Object: public TlObject { - public: -}; - -class Function: public TlObject { - public: -}; - -class accountAddress final : public Object { - public: - std::string account_address_; - - accountAddress(); - - explicit accountAddress(std::string const &account_address_); - - static const std::int32_t ID = 755613099; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class bip39Hints final : public Object { - public: - std::vector words_; - - bip39Hints(); - - explicit bip39Hints(std::vector &&words_); - - static const std::int32_t ID = 1012243456; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class config final : public Object { - public: - std::string config_; - std::string blockchain_name_; - bool use_callbacks_for_network_; - bool ignore_cache_; - - config(); - - config(std::string const &config_, std::string const &blockchain_name_, bool use_callbacks_for_network_, bool ignore_cache_); - - static const std::int32_t ID = -1538391496; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class data final : public Object { - public: - td::SecureString bytes_; - - data(); - - explicit data(td::SecureString &&bytes_); - - static const std::int32_t ID = -414733967; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class error final : public Object { - public: - std::int32_t code_; - std::string message_; - - error(); - - error(std::int32_t code_, std::string const &message_); - - static const std::int32_t ID = -1679978726; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class exportedEncryptedKey final : public Object { - public: - td::SecureString data_; - - exportedEncryptedKey(); - - explicit exportedEncryptedKey(td::SecureString &&data_); - - static const std::int32_t ID = 2024406612; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class exportedKey final : public Object { - public: - std::vector word_list_; - - exportedKey(); - - explicit exportedKey(std::vector &&word_list_); - - static const std::int32_t ID = -1449248297; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class exportedPemKey final : public Object { - public: - td::SecureString pem_; - - exportedPemKey(); - - explicit exportedPemKey(td::SecureString &&pem_); - - static const std::int32_t ID = 1425473725; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class inputKey final : public Object { - public: - object_ptr key_; - td::SecureString local_password_; - - inputKey(); - - inputKey(object_ptr &&key_, td::SecureString &&local_password_); - - static const std::int32_t ID = 869287093; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class key final : public Object { - public: - std::string public_key_; - td::SecureString secret_; - - key(); - - key(std::string const &public_key_, td::SecureString &&secret_); - - static const std::int32_t ID = -1978362923; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class KeyStoreType: public Object { - public: -}; - -class keyStoreTypeDirectory final : public KeyStoreType { - public: - std::string directory_; - - keyStoreTypeDirectory(); - - explicit keyStoreTypeDirectory(std::string const &directory_); - - static const std::int32_t ID = -378990038; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class keyStoreTypeInMemory final : public KeyStoreType { - public: - - keyStoreTypeInMemory(); - - static const std::int32_t ID = -2106848825; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class LogStream: public Object { - public: -}; - -class logStreamDefault final : public LogStream { - public: - - logStreamDefault(); - - static const std::int32_t ID = 1390581436; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class logStreamFile final : public LogStream { - public: - std::string path_; - std::int64_t max_file_size_; - - logStreamFile(); - - logStreamFile(std::string const &path_, std::int64_t max_file_size_); - - static const std::int32_t ID = -1880085930; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class logStreamEmpty final : public LogStream { - public: - - logStreamEmpty(); - - static const std::int32_t ID = -499912244; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class logTags final : public Object { - public: - std::vector tags_; - - logTags(); - - explicit logTags(std::vector &&tags_); - - static const std::int32_t ID = -1604930601; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class logVerbosityLevel final : public Object { - public: - std::int32_t verbosity_level_; - - logVerbosityLevel(); - - explicit logVerbosityLevel(std::int32_t verbosity_level_); - - static const std::int32_t ID = 1734624234; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class ok final : public Object { - public: - - ok(); - - static const std::int32_t ID = -722616727; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class options final : public Object { - public: - object_ptr config_; - object_ptr keystore_type_; - - options(); - - options(object_ptr &&config_, object_ptr &&keystore_type_); - - static const std::int32_t ID = -1924388359; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class sendGramsResult final : public Object { - public: - std::int64_t sent_until_; - std::string body_hash_; - - sendGramsResult(); - - sendGramsResult(std::int64_t sent_until_, std::string const &body_hash_); - - static const std::int32_t ID = 426872238; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class unpackedAccountAddress final : public Object { - public: - std::int32_t workchain_id_; - bool bounceable_; - bool testnet_; - std::string addr_; - - unpackedAccountAddress(); - - unpackedAccountAddress(std::int32_t workchain_id_, bool bounceable_, bool testnet_, std::string const &addr_); - - static const std::int32_t ID = 1892946998; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class updateSendLiteServerQuery final : public Object { - public: - std::int64_t id_; - std::string data_; - - updateSendLiteServerQuery(); - - updateSendLiteServerQuery(std::int64_t id_, std::string const &data_); - - static const std::int32_t ID = -1555130916; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class generic_AccountState: public Object { - public: -}; - -class generic_accountStateRaw final : public generic_AccountState { - public: - object_ptr account_state_; - - generic_accountStateRaw(); - - explicit generic_accountStateRaw(object_ptr &&account_state_); - - static const std::int32_t ID = -1387096685; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class generic_accountStateTestWallet final : public generic_AccountState { - public: - object_ptr account_state_; - - generic_accountStateTestWallet(); - - explicit generic_accountStateTestWallet(object_ptr &&account_state_); - - static const std::int32_t ID = -1041955397; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class generic_accountStateWallet final : public generic_AccountState { - public: - object_ptr account_state_; - - generic_accountStateWallet(); - - explicit generic_accountStateWallet(object_ptr &&account_state_); - - static const std::int32_t ID = 942582925; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class generic_accountStateTestGiver final : public generic_AccountState { - public: - object_ptr account_state_; - - generic_accountStateTestGiver(); - - explicit generic_accountStateTestGiver(object_ptr &&account_state_); - - static const std::int32_t ID = 1134654598; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class generic_accountStateUninited final : public generic_AccountState { - public: - object_ptr account_state_; - - generic_accountStateUninited(); - - explicit generic_accountStateUninited(object_ptr &&account_state_); - - static const std::int32_t ID = -908702008; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class internal_transactionId final : public Object { - public: - std::int64_t lt_; - std::string hash_; - - internal_transactionId(); - - internal_transactionId(std::int64_t lt_, std::string const &hash_); - - static const std::int32_t ID = -989527262; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class raw_accountState final : public Object { - public: - std::int64_t balance_; - std::string code_; - std::string data_; - object_ptr last_transaction_id_; - std::string frozen_hash_; - std::int64_t sync_utime_; - - raw_accountState(); - - raw_accountState(std::int64_t balance_, std::string const &code_, std::string const &data_, object_ptr &&last_transaction_id_, std::string const &frozen_hash_, std::int64_t sync_utime_); - - static const std::int32_t ID = 1205935434; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class raw_initialAccountState final : public Object { - public: - std::string code_; - std::string data_; - - raw_initialAccountState(); - - raw_initialAccountState(std::string const &code_, std::string const &data_); - - static const std::int32_t ID = 777456197; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class raw_message final : public Object { - public: - std::string source_; - std::string destination_; - std::int64_t value_; - std::int64_t fwd_fee_; - std::int64_t ihr_fee_; - std::int64_t created_lt_; - std::string body_hash_; - std::string message_; - - raw_message(); - - raw_message(std::string const &source_, std::string const &destination_, std::int64_t value_, std::int64_t fwd_fee_, std::int64_t ihr_fee_, std::int64_t created_lt_, std::string const &body_hash_, std::string const &message_); - - static const std::int32_t ID = -906281442; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class raw_transaction final : public Object { - public: - std::int64_t utime_; - std::string data_; - object_ptr transaction_id_; - std::int64_t fee_; - std::int64_t storage_fee_; - std::int64_t other_fee_; - object_ptr in_msg_; - std::vector> out_msgs_; - - raw_transaction(); - - raw_transaction(std::int64_t utime_, std::string const &data_, object_ptr &&transaction_id_, std::int64_t fee_, std::int64_t storage_fee_, std::int64_t other_fee_, object_ptr &&in_msg_, std::vector> &&out_msgs_); - - static const std::int32_t ID = 1887601793; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class raw_transactions final : public Object { - public: - std::vector> transactions_; - object_ptr previous_transaction_id_; - - raw_transactions(); - - raw_transactions(std::vector> &&transactions_, object_ptr &&previous_transaction_id_); - - static const std::int32_t ID = -2063931155; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class testGiver_accountState final : public Object { - public: - std::int64_t balance_; - std::int32_t seqno_; - object_ptr last_transaction_id_; - std::int64_t sync_utime_; - - testGiver_accountState(); - - testGiver_accountState(std::int64_t balance_, std::int32_t seqno_, object_ptr &&last_transaction_id_, std::int64_t sync_utime_); - - static const std::int32_t ID = 860930426; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class testWallet_accountState final : public Object { - public: - std::int64_t balance_; - std::int32_t seqno_; - object_ptr last_transaction_id_; - std::int64_t sync_utime_; - - testWallet_accountState(); - - testWallet_accountState(std::int64_t balance_, std::int32_t seqno_, object_ptr &&last_transaction_id_, std::int64_t sync_utime_); - - static const std::int32_t ID = 305698744; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class testWallet_initialAccountState final : public Object { - public: - std::string public_key_; - - testWallet_initialAccountState(); - - explicit testWallet_initialAccountState(std::string const &public_key_); - - static const std::int32_t ID = -1231516227; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class uninited_accountState final : public Object { - public: - std::int64_t balance_; - object_ptr last_transaction_id_; - std::string frozen_hash_; - std::int64_t sync_utime_; - - uninited_accountState(); - - uninited_accountState(std::int64_t balance_, object_ptr &&last_transaction_id_, std::string const &frozen_hash_, std::int64_t sync_utime_); - - static const std::int32_t ID = -918880075; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class wallet_accountState final : public Object { - public: - std::int64_t balance_; - std::int32_t seqno_; - object_ptr last_transaction_id_; - std::int64_t sync_utime_; - - wallet_accountState(); - - wallet_accountState(std::int64_t balance_, std::int32_t seqno_, object_ptr &&last_transaction_id_, std::int64_t sync_utime_); - - static const std::int32_t ID = -1919815977; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class wallet_initialAccountState final : public Object { - public: - std::string public_key_; - - wallet_initialAccountState(); - - explicit wallet_initialAccountState(std::string const &public_key_); - - static const std::int32_t ID = -1079249978; - std::int32_t get_id() const final { - return ID; - } - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class addLogMessage final : public Function { - public: - std::int32_t verbosity_level_; - std::string text_; - - addLogMessage(); - - addLogMessage(std::int32_t verbosity_level_, std::string const &text_); - - static const std::int32_t ID = 1597427692; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class changeLocalPassword final : public Function { - public: - object_ptr input_key_; - td::SecureString new_local_password_; - - changeLocalPassword(); - - changeLocalPassword(object_ptr &&input_key_, td::SecureString &&new_local_password_); - - static const std::int32_t ID = -1685491421; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class close final : public Function { - public: - - close(); - - static const std::int32_t ID = -1187782273; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class createNewKey final : public Function { - public: - td::SecureString local_password_; - td::SecureString mnemonic_password_; - td::SecureString random_extra_seed_; - - createNewKey(); - - createNewKey(td::SecureString &&local_password_, td::SecureString &&mnemonic_password_, td::SecureString &&random_extra_seed_); - - static const std::int32_t ID = -1861385712; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class decrypt final : public Function { - public: - td::SecureString encrypted_data_; - td::SecureString secret_; - - decrypt(); - - decrypt(td::SecureString &&encrypted_data_, td::SecureString &&secret_); - - static const std::int32_t ID = 357991854; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class deleteAllKeys final : public Function { - public: - - deleteAllKeys(); - - static const std::int32_t ID = 1608776483; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class deleteKey final : public Function { - public: - object_ptr key_; - - deleteKey(); - - explicit deleteKey(object_ptr &&key_); - - static const std::int32_t ID = -1579595571; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class encrypt final : public Function { - public: - td::SecureString decrypted_data_; - td::SecureString secret_; - - encrypt(); - - encrypt(td::SecureString &&decrypted_data_, td::SecureString &&secret_); - - static const std::int32_t ID = -1821422820; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class exportEncryptedKey final : public Function { - public: - object_ptr input_key_; - td::SecureString key_password_; - - exportEncryptedKey(); - - exportEncryptedKey(object_ptr &&input_key_, td::SecureString &&key_password_); - - static const std::int32_t ID = 155352861; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class exportKey final : public Function { - public: - object_ptr input_key_; - - exportKey(); - - explicit exportKey(object_ptr &&input_key_); - - static const std::int32_t ID = 399723440; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class exportPemKey final : public Function { - public: - object_ptr input_key_; - td::SecureString key_password_; - - exportPemKey(); - - exportPemKey(object_ptr &&input_key_, td::SecureString &&key_password_); - - static const std::int32_t ID = -2047752448; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class generic_getAccountState final : public Function { - public: - object_ptr account_address_; - - generic_getAccountState(); - - explicit generic_getAccountState(object_ptr &&account_address_); - - static const std::int32_t ID = -657000446; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class generic_sendGrams final : public Function { - public: - object_ptr private_key_; - object_ptr source_; - object_ptr destination_; - std::int64_t amount_; - std::int32_t timeout_; - bool allow_send_to_uninited_; - std::string message_; - - generic_sendGrams(); - - generic_sendGrams(object_ptr &&private_key_, object_ptr &&source_, object_ptr &&destination_, std::int64_t amount_, std::int32_t timeout_, bool allow_send_to_uninited_, std::string const &message_); - - static const std::int32_t ID = -758801136; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class getBip39Hints final : public Function { - public: - std::string prefix_; - - getBip39Hints(); - - explicit getBip39Hints(std::string const &prefix_); - - static const std::int32_t ID = -1889640982; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class getLogStream final : public Function { - public: - - getLogStream(); - - static const std::int32_t ID = 1167608667; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class getLogTagVerbosityLevel final : public Function { - public: - std::string tag_; - - getLogTagVerbosityLevel(); - - explicit getLogTagVerbosityLevel(std::string const &tag_); - - static const std::int32_t ID = 951004547; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class getLogTags final : public Function { - public: - - getLogTags(); - - static const std::int32_t ID = -254449190; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class getLogVerbosityLevel final : public Function { - public: - - getLogVerbosityLevel(); - - static const std::int32_t ID = 594057956; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class importEncryptedKey final : public Function { - public: - td::SecureString local_password_; - td::SecureString key_password_; - object_ptr exported_encrypted_key_; - - importEncryptedKey(); - - importEncryptedKey(td::SecureString &&local_password_, td::SecureString &&key_password_, object_ptr &&exported_encrypted_key_); - - static const std::int32_t ID = 656724958; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class importKey final : public Function { - public: - td::SecureString local_password_; - td::SecureString mnemonic_password_; - object_ptr exported_key_; - - importKey(); - - importKey(td::SecureString &&local_password_, td::SecureString &&mnemonic_password_, object_ptr &&exported_key_); - - static const std::int32_t ID = -1607900903; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class importPemKey final : public Function { - public: - td::SecureString local_password_; - td::SecureString key_password_; - object_ptr exported_key_; - - importPemKey(); - - importPemKey(td::SecureString &&local_password_, td::SecureString &&key_password_, object_ptr &&exported_key_); - - static const std::int32_t ID = 76385617; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class init final : public Function { - public: - object_ptr options_; - - init(); - - explicit init(object_ptr &&options_); - - static const std::int32_t ID = -2014661877; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class kdf final : public Function { - public: - td::SecureString password_; - td::SecureString salt_; - std::int32_t iterations_; - - kdf(); - - kdf(td::SecureString &&password_, td::SecureString &&salt_, std::int32_t iterations_); - - static const std::int32_t ID = -1667861635; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class onLiteServerQueryError final : public Function { - public: - std::int64_t id_; - object_ptr error_; - - onLiteServerQueryError(); - - onLiteServerQueryError(std::int64_t id_, object_ptr &&error_); - - static const std::int32_t ID = -677427533; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class onLiteServerQueryResult final : public Function { - public: - std::int64_t id_; - std::string bytes_; - - onLiteServerQueryResult(); - - onLiteServerQueryResult(std::int64_t id_, std::string const &bytes_); - - static const std::int32_t ID = 2056444510; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class options_setConfig final : public Function { - public: - object_ptr config_; - - options_setConfig(); - - explicit options_setConfig(object_ptr &&config_); - - static const std::int32_t ID = 646497241; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class packAccountAddress final : public Function { - public: - object_ptr account_address_; - - packAccountAddress(); - - explicit packAccountAddress(object_ptr &&account_address_); - - static const std::int32_t ID = -1388561940; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class raw_getAccountAddress final : public Function { - public: - object_ptr initital_account_state_; - - raw_getAccountAddress(); - - explicit raw_getAccountAddress(object_ptr &&initital_account_state_); - - static const std::int32_t ID = -521283849; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class raw_getAccountState final : public Function { - public: - object_ptr account_address_; - - raw_getAccountState(); - - explicit raw_getAccountState(object_ptr &&account_address_); - - static const std::int32_t ID = 663706721; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class raw_getTransactions final : public Function { - public: - object_ptr account_address_; - object_ptr from_transaction_id_; - - raw_getTransactions(); - - raw_getTransactions(object_ptr &&account_address_, object_ptr &&from_transaction_id_); - - static const std::int32_t ID = 935377269; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class raw_sendMessage final : public Function { - public: - object_ptr destination_; - std::string initial_account_state_; - std::string data_; - - raw_sendMessage(); - - raw_sendMessage(object_ptr &&destination_, std::string const &initial_account_state_, std::string const &data_); - - static const std::int32_t ID = 473889461; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class runTests final : public Function { - public: - std::string dir_; - - runTests(); - - explicit runTests(std::string const &dir_); - - static const std::int32_t ID = -2039925427; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class setLogStream final : public Function { - public: - object_ptr log_stream_; - - setLogStream(); - - explicit setLogStream(object_ptr &&log_stream_); - - static const std::int32_t ID = -1364199535; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class setLogTagVerbosityLevel final : public Function { - public: - std::string tag_; - std::int32_t new_verbosity_level_; - - setLogTagVerbosityLevel(); - - setLogTagVerbosityLevel(std::string const &tag_, std::int32_t new_verbosity_level_); - - static const std::int32_t ID = -2095589738; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class setLogVerbosityLevel final : public Function { - public: - std::int32_t new_verbosity_level_; - - setLogVerbosityLevel(); - - explicit setLogVerbosityLevel(std::int32_t new_verbosity_level_); - - static const std::int32_t ID = -303429678; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class testGiver_getAccountAddress final : public Function { - public: - - testGiver_getAccountAddress(); - - static const std::int32_t ID = -540100768; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class testGiver_getAccountState final : public Function { - public: - - testGiver_getAccountState(); - - static const std::int32_t ID = 267738275; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class testGiver_sendGrams final : public Function { - public: - object_ptr destination_; - std::int32_t seqno_; - std::int64_t amount_; - std::string message_; - - testGiver_sendGrams(); - - testGiver_sendGrams(object_ptr &&destination_, std::int32_t seqno_, std::int64_t amount_, std::string const &message_); - - static const std::int32_t ID = -1785750375; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class testWallet_getAccountAddress final : public Function { - public: - object_ptr initital_account_state_; - - testWallet_getAccountAddress(); - - explicit testWallet_getAccountAddress(object_ptr &&initital_account_state_); - - static const std::int32_t ID = -1557748223; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class testWallet_getAccountState final : public Function { - public: - object_ptr account_address_; - - testWallet_getAccountState(); - - explicit testWallet_getAccountState(object_ptr &&account_address_); - - static const std::int32_t ID = 654082364; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class testWallet_init final : public Function { - public: - object_ptr private_key_; - - testWallet_init(); - - explicit testWallet_init(object_ptr &&private_key_); - - static const std::int32_t ID = 419055225; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class testWallet_sendGrams final : public Function { - public: - object_ptr private_key_; - object_ptr destination_; - std::int32_t seqno_; - std::int64_t amount_; - std::string message_; - - testWallet_sendGrams(); - - testWallet_sendGrams(object_ptr &&private_key_, object_ptr &&destination_, std::int32_t seqno_, std::int64_t amount_, std::string const &message_); - - static const std::int32_t ID = 1290131585; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class unpackAccountAddress final : public Function { - public: - std::string account_address_; - - unpackAccountAddress(); - - explicit unpackAccountAddress(std::string const &account_address_); - - static const std::int32_t ID = -682459063; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class wallet_getAccountAddress final : public Function { - public: - object_ptr initital_account_state_; - - wallet_getAccountAddress(); - - explicit wallet_getAccountAddress(object_ptr &&initital_account_state_); - - static const std::int32_t ID = -1004103180; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class wallet_getAccountState final : public Function { - public: - object_ptr account_address_; - - wallet_getAccountState(); - - explicit wallet_getAccountState(object_ptr &&account_address_); - - static const std::int32_t ID = 462294850; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class wallet_init final : public Function { - public: - object_ptr private_key_; - - wallet_init(); - - explicit wallet_init(object_ptr &&private_key_); - - static const std::int32_t ID = 1528056782; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -class wallet_sendGrams final : public Function { - public: - object_ptr private_key_; - object_ptr destination_; - std::int32_t seqno_; - std::int64_t valid_until_; - std::int64_t amount_; - std::string message_; - - wallet_sendGrams(); - - wallet_sendGrams(object_ptr &&private_key_, object_ptr &&destination_, std::int32_t seqno_, std::int64_t valid_until_, std::int64_t amount_, std::string const &message_); - - static const std::int32_t ID = -1837893526; - std::int32_t get_id() const final { - return ID; - } - - using ReturnType = object_ptr; - - void store(td::TlStorerToString &s, const char *field_name) const final; -}; - -} // namespace tonlib_api -} // namespace ton diff --git a/submodules/MtProtoKit/TON/macOS/include/td/utils/SharedSlice.h b/submodules/MtProtoKit/TON/macOS/include/td/utils/SharedSlice.h deleted file mode 100644 index ab941cb588..0000000000 --- a/submodules/MtProtoKit/TON/macOS/include/td/utils/SharedSlice.h +++ /dev/null @@ -1,392 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once - -#include "td/utils/Slice.h" - -#include -#include - -namespace td { - -namespace detail { -struct SharedSliceHeader { - explicit SharedSliceHeader(size_t size) : refcnt_{1}, size_{size} { - } - - void inc() { - refcnt_.fetch_add(1, std::memory_order_relaxed); - } - - bool dec() { - return refcnt_.fetch_sub(1, std::memory_order_acq_rel) == 1; - } - - bool is_unique() const { - // NB: race if std::memory_order_relaxed is used - // reader may see a change by a new writer - return refcnt_.load(std::memory_order_acquire) == 1; - } - - size_t size() const { - return size_; - } - - private: - std::atomic refcnt_; - size_t size_; -}; - -struct UniqueSliceHeader { - explicit UniqueSliceHeader(size_t size) : size_{size} { - } - - void inc() { - } - - bool dec() { - return true; - } - - bool is_unique() const { - return true; - } - - size_t size() const { - return size_; - } - - private: - size_t size_; -}; - -template -class UnsafeSharedSlice { - public: - UnsafeSharedSlice() = default; - UnsafeSharedSlice clone() const { - if (is_null()) { - return UnsafeSharedSlice(); - } - header()->inc(); - return UnsafeSharedSlice(ptr_.get()); - } - - bool is_null() const { - return !ptr_; - } - - bool is_unique() const { - if (is_null()) { - return true; - } - return header()->is_unique(); - } - - MutableSlice as_mutable_slice() { - if (is_null()) { - return MutableSlice(); - } - return MutableSlice(ptr_.get() + sizeof(HeaderT), header()->size()); - } - - Slice as_slice() const { - if (is_null()) { - return Slice(); - } - return Slice(ptr_.get() + sizeof(HeaderT), header()->size()); - } - - size_t size() const { - if (is_null()) { - return 0; - } - return header()->size(); - } - - static UnsafeSharedSlice create(size_t size) { - static_assert(std::is_standard_layout::value, "HeaderT must have statdard layout"); - auto ptr = std::make_unique(size + sizeof(HeaderT)); - auto header_ptr = new (ptr.get()) HeaderT(size); - CHECK(reinterpret_cast(header_ptr) == ptr.get()); - - return UnsafeSharedSlice(std::move(ptr)); - } - - static UnsafeSharedSlice create(Slice slice) { - auto res = create(slice.size()); - res.as_mutable_slice().copy_from(slice); - return res; - } - - void clear() { - ptr_.reset(); - } - - private: - explicit UnsafeSharedSlice(char *ptr) : ptr_(ptr) { - } - explicit UnsafeSharedSlice(std::unique_ptr from) : ptr_(from.release()) { - } - - HeaderT *header() const { - return reinterpret_cast(ptr_.get()); - } - - struct Destructor { - void operator()(char *ptr) { - auto header = reinterpret_cast(ptr); - if (header->dec()) { - if (zero_on_destruct) { - MutableSlice(ptr, sizeof(HeaderT) + header->size()).fill_zero_secure(); - } - std::default_delete()(ptr); - } - } - }; - - std::unique_ptr ptr_; -}; -} // namespace detail - -class BufferSlice; - -class UniqueSharedSlice; - -class SharedSlice { - using Impl = detail::UnsafeSharedSlice; - - public: - SharedSlice() = default; - - explicit SharedSlice(Slice slice) : impl_(Impl::create(slice.size())) { - impl_.as_mutable_slice().copy_from(slice); - } - - explicit SharedSlice(UniqueSharedSlice from); - - SharedSlice(const char *ptr, size_t size) : SharedSlice(Slice(ptr, size)) { - } - - SharedSlice clone() const { - return SharedSlice(impl_.clone()); - } - - Slice as_slice() const { - return impl_.as_slice(); - } - - BufferSlice clone_as_buffer_slice() const; - - operator Slice() const { - return as_slice(); - } - - // like in std::string - const char *data() const { - return as_slice().data(); - } - - char operator[](size_t at) const { - return as_slice()[at]; - } - - bool empty() const { - return size() == 0; - } - - size_t size() const { - return impl_.size(); - } - - // like in std::string - size_t length() const { - return size(); - } - - void clear() { - impl_.clear(); - } - - private: - friend class UniqueSharedSlice; - explicit SharedSlice(Impl impl) : impl_(std::move(impl)) { - } - Impl impl_; -}; - -class UniqueSharedSlice { - using Impl = detail::UnsafeSharedSlice; - - public: - UniqueSharedSlice() = default; - - explicit UniqueSharedSlice(size_t size) : impl_(Impl::create(size)) { - } - explicit UniqueSharedSlice(Slice slice) : impl_(Impl::create(slice)) { - } - - UniqueSharedSlice(const char *ptr, size_t size) : UniqueSharedSlice(Slice(ptr, size)) { - } - explicit UniqueSharedSlice(SharedSlice from) : impl_() { - if (from.impl_.is_unique()) { - impl_ = std::move(from.impl_); - } else { - impl_ = Impl::create(from.as_slice()); - } - } - - UniqueSharedSlice copy() const { - return UniqueSharedSlice(as_slice()); - } - - Slice as_slice() const { - return impl_.as_slice(); - } - - MutableSlice as_mutable_slice() { - return impl_.as_mutable_slice(); - } - - operator Slice() const { - return as_slice(); - } - - // like in std::string - char *data() { - return as_mutable_slice().data(); - } - const char *data() const { - return as_slice().data(); - } - char operator[](size_t at) const { - return as_slice()[at]; - } - - bool empty() const { - return size() == 0; - } - - size_t size() const { - return impl_.size(); - } - - // like in std::string - size_t length() const { - return size(); - } - - void clear() { - impl_.clear(); - } - - private: - friend class SharedSlice; - explicit UniqueSharedSlice(Impl impl) : impl_(std::move(impl)) { - } - Impl impl_; -}; - -inline SharedSlice::SharedSlice(UniqueSharedSlice from) : impl_(std::move(from.impl_)) { -} - -template -class UniqueSliceImpl { - using Impl = detail::UnsafeSharedSlice; - - public: - UniqueSliceImpl() = default; - - explicit UniqueSliceImpl(size_t size) : impl_(Impl::create(size)) { - } - UniqueSliceImpl(size_t size, char c) : impl_(Impl::create(size)) { - std::memset(as_mutable_slice().data(), c, size); - } - explicit UniqueSliceImpl(Slice slice) : impl_(Impl::create(slice)) { - } - - UniqueSliceImpl(const char *ptr, size_t size) : UniqueSliceImpl(Slice(ptr, size)) { - } - - UniqueSliceImpl copy() const { - return UniqueSliceImpl(as_slice()); - } - - Slice as_slice() const { - return impl_.as_slice(); - } - - MutableSlice as_mutable_slice() { - return impl_.as_mutable_slice(); - } - - operator Slice() const { - return as_slice(); - } - - // like in std::string - char *data() { - return as_mutable_slice().data(); - } - const char *data() const { - return as_slice().data(); - } - char operator[](size_t at) const { - return as_slice()[at]; - } - - bool empty() const { - return size() == 0; - } - - size_t size() const { - return impl_.size(); - } - - // like in std::string - size_t length() const { - return size(); - } - - void clear() { - impl_.clear(); - } - - private: - explicit UniqueSliceImpl(Impl impl) : impl_(std::move(impl)) { - } - Impl impl_; -}; - -using UniqueSlice = UniqueSliceImpl; -using SecureString = UniqueSliceImpl; - -inline MutableSlice as_mutable_slice(UniqueSharedSlice &unique_shared_slice) { - return unique_shared_slice.as_mutable_slice(); -} - -inline MutableSlice as_mutable_slice(UniqueSlice &unique_slice) { - return unique_slice.as_mutable_slice(); -} - -inline MutableSlice as_mutable_slice(SecureString &secure_string) { - return secure_string.as_mutable_slice(); -} - -} // namespace td diff --git a/submodules/MtProtoKit/TON/macOS/include/td/utils/Slice-decl.h b/submodules/MtProtoKit/TON/macOS/include/td/utils/Slice-decl.h deleted file mode 100644 index 5f86c33797..0000000000 --- a/submodules/MtProtoKit/TON/macOS/include/td/utils/Slice-decl.h +++ /dev/null @@ -1,224 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once - -#include "td/utils/common.h" - -#include - -namespace td { - -class Slice; - -class MutableSlice { - char *s_; - size_t len_; - - struct private_tag {}; - - public: - MutableSlice(); - MutableSlice(char *s, size_t len); - MutableSlice(unsigned char *s, size_t len); - MutableSlice(string &s); - template - explicit MutableSlice(T s, std::enable_if_t::value, private_tag> = {}); - MutableSlice(char *s, char *t); - MutableSlice(unsigned char *s, unsigned char *t); - template - constexpr MutableSlice(char (&a)[N]) = delete; - - bool empty() const; - size_t size() const; - - MutableSlice &remove_prefix(size_t prefix_len); - MutableSlice &remove_suffix(size_t suffix_len); - MutableSlice &truncate(size_t size); - - MutableSlice copy() const; - - char *data() const; - char *begin() const; - unsigned char *ubegin() const; - char *end() const; - unsigned char *uend() const; - - string str() const; - MutableSlice substr(size_t from) const; - MutableSlice substr(size_t from, size_t size) const; - size_t find(char c) const; - size_t rfind(char c) const; - void fill(char c); - void fill_zero(); - void fill_zero_secure(); - - void copy_from(Slice from); - - char &back(); - char &operator[](size_t i); - - static const size_t npos = string::npos; -}; - -class Slice { - const char *s_; - size_t len_; - - struct private_tag {}; - - public: - Slice(); - Slice(const MutableSlice &other); - Slice(const char *s, size_t len); - Slice(const unsigned char *s, size_t len); - Slice(const string &s); - template - explicit Slice(T s, std::enable_if_t>::value, private_tag> = {}); - template - explicit Slice(T s, std::enable_if_t>::value, private_tag> = {}); - Slice(const char *s, const char *t); - Slice(const unsigned char *s, const unsigned char *t); - - template - constexpr Slice(char (&a)[N]) = delete; - - template - constexpr Slice(const char (&a)[N]) : s_(a), len_(N - 1) { - } - - Slice &operator=(string &&s) = delete; - - template - constexpr Slice &operator=(char (&a)[N]) = delete; - - template - constexpr Slice &operator=(const char (&a)[N]) { - s_ = a; - len_ = N - 1; - return *this; - } - - bool empty() const; - size_t size() const; - - Slice &remove_prefix(size_t prefix_len); - Slice &remove_suffix(size_t suffix_len); - Slice &truncate(size_t size); - - Slice copy() const; - - const char *data() const; - const char *begin() const; - const unsigned char *ubegin() const; - const char *end() const; - const unsigned char *uend() const; - - string str() const; - Slice substr(size_t from) const; - Slice substr(size_t from, size_t size) const; - size_t find(char c) const; - size_t rfind(char c) const; - - char back() const; - char operator[](size_t i) const; - - static const size_t npos = string::npos; -}; - -bool operator==(const Slice &a, const Slice &b); -bool operator!=(const Slice &a, const Slice &b); -bool operator<(const Slice &a, const Slice &b); - -class MutableCSlice : public MutableSlice { - struct private_tag {}; - - MutableSlice &remove_suffix(size_t suffix_len) = delete; - MutableSlice &truncate(size_t size) = delete; - - public: - MutableCSlice() = delete; - MutableCSlice(string &s) : MutableSlice(s) { - } - template - explicit MutableCSlice(T s, std::enable_if_t::value, private_tag> = {}) : MutableSlice(s) { - } - MutableCSlice(char *s, char *t); - - template - constexpr MutableCSlice(char (&a)[N]) = delete; - - const char *c_str() const { - return begin(); - } -}; - -class CSlice : public Slice { - struct private_tag {}; - - Slice &remove_suffix(size_t suffix_len) = delete; - Slice &truncate(size_t size) = delete; - - public: - explicit CSlice(const MutableSlice &other) : Slice(other) { - } - CSlice(const MutableCSlice &other) : Slice(other.begin(), other.size()) { - } - CSlice(const string &s) : Slice(s) { - } - template - explicit CSlice(T s, std::enable_if_t>::value, private_tag> = {}) - : Slice(s) { - } - template - explicit CSlice(T s, std::enable_if_t>::value, private_tag> = {}) - : Slice(s) { - } - CSlice(const char *s, const char *t); - - template - constexpr CSlice(char (&a)[N]) = delete; - - template - constexpr CSlice(const char (&a)[N]) : Slice(a) { - } - - CSlice() : CSlice("") { - } - - CSlice &operator=(string &&s) = delete; - - template - constexpr CSlice &operator=(char (&a)[N]) = delete; - - template - constexpr CSlice &operator=(const char (&a)[N]) { - this->Slice::operator=(a); - return *this; - } - - const char *c_str() const { - return begin(); - } -}; - -struct SliceHash { - std::size_t operator()(Slice slice) const; -}; - -} // namespace td diff --git a/submodules/MtProtoKit/TON/macOS/include/td/utils/Slice.h b/submodules/MtProtoKit/TON/macOS/include/td/utils/Slice.h deleted file mode 100644 index 2bd02c89fe..0000000000 --- a/submodules/MtProtoKit/TON/macOS/include/td/utils/Slice.h +++ /dev/null @@ -1,339 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once - -#include "td/utils/common.h" -#include "td/utils/Slice-decl.h" - -#include -#include - -namespace td { - -inline MutableSlice::MutableSlice() : s_(const_cast("")), len_(0) { -} - -inline MutableSlice::MutableSlice(char *s, size_t len) : s_(s), len_(len) { - CHECK(s_ != nullptr); -} - -inline MutableSlice::MutableSlice(unsigned char *s, size_t len) : s_(reinterpret_cast(s)), len_(len) { - CHECK(s_ != nullptr); -} - -inline MutableSlice::MutableSlice(string &s) : s_(&s[0]), len_(s.size()) { -} - -template -MutableSlice::MutableSlice(T s, std::enable_if_t::value, private_tag>) : s_(s) { - CHECK(s_ != nullptr); - len_ = std::strlen(s_); -} - -inline MutableSlice::MutableSlice(char *s, char *t) : MutableSlice(s, t - s) { -} - -inline MutableSlice::MutableSlice(unsigned char *s, unsigned char *t) : MutableSlice(s, t - s) { -} - -inline size_t MutableSlice::size() const { - return len_; -} - -inline MutableSlice &MutableSlice::remove_prefix(size_t prefix_len) { - CHECK(prefix_len <= len_); - s_ += prefix_len; - len_ -= prefix_len; - return *this; -} -inline MutableSlice &MutableSlice::remove_suffix(size_t suffix_len) { - CHECK(suffix_len <= len_); - len_ -= suffix_len; - return *this; -} - -inline MutableSlice &MutableSlice::truncate(size_t size) { - if (len_ > size) { - len_ = size; - } - return *this; -} - -inline MutableSlice MutableSlice::copy() const { - return *this; -} - -inline bool MutableSlice::empty() const { - return len_ == 0; -} - -inline char *MutableSlice::data() const { - return s_; -} - -inline char *MutableSlice::begin() const { - return s_; -} - -inline unsigned char *MutableSlice::ubegin() const { - return reinterpret_cast(s_); -} - -inline char *MutableSlice::end() const { - return s_ + len_; -} - -inline unsigned char *MutableSlice::uend() const { - return reinterpret_cast(s_) + len_; -} - -inline string MutableSlice::str() const { - return string(begin(), size()); -} - -inline MutableSlice MutableSlice::substr(size_t from) const { - CHECK(from <= len_); - return MutableSlice(s_ + from, len_ - from); -} -inline MutableSlice MutableSlice::substr(size_t from, size_t size) const { - CHECK(from <= len_); - return MutableSlice(s_ + from, min(size, len_ - from)); -} - -inline size_t MutableSlice::find(char c) const { - for (size_t pos = 0; pos < len_; pos++) { - if (s_[pos] == c) { - return pos; - } - } - return npos; -} - -inline size_t MutableSlice::rfind(char c) const { - for (size_t pos = len_; pos-- > 0;) { - if (s_[pos] == c) { - return pos; - } - } - return npos; -} - -inline void MutableSlice::copy_from(Slice from) { - CHECK(size() >= from.size()); - std::memcpy(ubegin(), from.ubegin(), from.size()); -} - -inline char &MutableSlice::back() { - CHECK(1 <= len_); - return s_[len_ - 1]; -} - -inline char &MutableSlice::operator[](size_t i) { - return s_[i]; -} - -inline Slice::Slice() : s_(""), len_(0) { -} - -inline Slice::Slice(const MutableSlice &other) : s_(other.begin()), len_(other.size()) { -} - -inline Slice::Slice(const char *s, size_t len) : s_(s), len_(len) { - CHECK(s_ != nullptr); -} - -inline Slice::Slice(const unsigned char *s, size_t len) : s_(reinterpret_cast(s)), len_(len) { - CHECK(s_ != nullptr); -} - -inline Slice::Slice(const string &s) : s_(s.c_str()), len_(s.size()) { -} - -template -Slice::Slice(T s, std::enable_if_t>::value, private_tag>) : s_(s) { - CHECK(s_ != nullptr); - len_ = std::strlen(s_); -} - -template -Slice::Slice(T s, std::enable_if_t>::value, private_tag>) : s_(s) { - CHECK(s_ != nullptr); - len_ = std::strlen(s_); -} - -inline Slice::Slice(const char *s, const char *t) : s_(s), len_(t - s) { - CHECK(s_ != nullptr); -} - -inline Slice::Slice(const unsigned char *s, const unsigned char *t) - : s_(reinterpret_cast(s)), len_(t - s) { - CHECK(s_ != nullptr); -} - -inline size_t Slice::size() const { - return len_; -} - -inline Slice &Slice::remove_prefix(size_t prefix_len) { - CHECK(prefix_len <= len_); - s_ += prefix_len; - len_ -= prefix_len; - return *this; -} - -inline Slice &Slice::remove_suffix(size_t suffix_len) { - CHECK(suffix_len <= len_); - len_ -= suffix_len; - return *this; -} - -inline Slice &Slice::truncate(size_t size) { - if (len_ > size) { - len_ = size; - } - return *this; -} - -inline Slice Slice::copy() const { - return *this; -} - -inline bool Slice::empty() const { - return len_ == 0; -} - -inline const char *Slice::data() const { - return s_; -} - -inline const char *Slice::begin() const { - return s_; -} - -inline const unsigned char *Slice::ubegin() const { - return reinterpret_cast(s_); -} - -inline const char *Slice::end() const { - return s_ + len_; -} - -inline const unsigned char *Slice::uend() const { - return reinterpret_cast(s_) + len_; -} - -inline string Slice::str() const { - return string(begin(), size()); -} - -inline Slice Slice::substr(size_t from) const { - CHECK(from <= len_); - return Slice(s_ + from, len_ - from); -} -inline Slice Slice::substr(size_t from, size_t size) const { - CHECK(from <= len_); - return Slice(s_ + from, min(size, len_ - from)); -} - -inline size_t Slice::find(char c) const { - for (size_t pos = 0; pos < len_; pos++) { - if (s_[pos] == c) { - return pos; - } - } - return npos; -} - -inline size_t Slice::rfind(char c) const { - for (size_t pos = len_; pos-- > 0;) { - if (s_[pos] == c) { - return pos; - } - } - return npos; -} - -inline char Slice::back() const { - CHECK(1 <= len_); - return s_[len_ - 1]; -} - -inline char Slice::operator[](size_t i) const { - return s_[i]; -} - -inline bool operator==(const Slice &a, const Slice &b) { - return a.size() == b.size() && std::memcmp(a.data(), b.data(), a.size()) == 0; -} - -inline bool operator!=(const Slice &a, const Slice &b) { - return !(a == b); -} - -inline bool operator<(const Slice &a, const Slice &b) { - auto x = std::memcmp(a.data(), b.data(), td::min(a.size(), b.size())); - if (x == 0) { - return a.size() < b.size(); - } - return x < 0; -} - -inline MutableCSlice::MutableCSlice(char *s, char *t) : MutableSlice(s, t) { - CHECK(*t == '\0'); -} - -inline CSlice::CSlice(const char *s, const char *t) : Slice(s, t) { - CHECK(*t == '\0'); -} - -inline std::size_t SliceHash::operator()(Slice slice) const { - // simple string hash - std::size_t result = 0; - constexpr std::size_t MUL = 123456789; - for (auto c : slice) { - result = result * MUL + c; - } - return result; -} - -inline Slice as_slice(Slice slice) { - return slice; -} - -inline MutableSlice as_slice(MutableSlice slice) { - return slice; -} - -inline Slice as_slice(const string &str) { - return str; -} - -inline MutableSlice as_slice(string &str) { - return str; -} - -inline MutableSlice as_mutable_slice(MutableSlice slice) { - return slice; -} - -inline MutableSlice as_mutable_slice(string &str) { - return str; -} - -} // namespace td diff --git a/submodules/MtProtoKit/TON/macOS/include/td/utils/check.h b/submodules/MtProtoKit/TON/macOS/include/td/utils/check.h deleted file mode 100644 index 938323236f..0000000000 --- a/submodules/MtProtoKit/TON/macOS/include/td/utils/check.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once - -#define TD_DUMMY_CHECK(condition) ((void)(condition)) - -#define CHECK(condition) \ - if (!(condition)) { \ - ::td::detail::process_check_error(#condition, __FILE__, __LINE__); \ - } - -// clang-format off -#ifdef NDEBUG - #define DCHECK TD_DUMMY_CHECK -#else - #define DCHECK CHECK -#endif -// clang-format on - -#define UNREACHABLE() ::td::detail::process_check_error("Unreachable", __FILE__, __LINE__) - -namespace td { -namespace detail { - -[[noreturn]] void process_check_error(const char *message, const char *file, int line); - -} // namespace detail -} // namespace td diff --git a/submodules/MtProtoKit/TON/macOS/include/td/utils/common.h b/submodules/MtProtoKit/TON/macOS/include/td/utils/common.h deleted file mode 100644 index dcfb767745..0000000000 --- a/submodules/MtProtoKit/TON/macOS/include/td/utils/common.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once - -#include "td/utils/config.h" -#include "td/utils/port/platform.h" - -// clang-format off -#if TD_WINDOWS - #ifndef NTDDI_VERSION - #define NTDDI_VERSION 0x06020000 - #endif - #ifndef WINVER - #define WINVER 0x0602 - #endif - #ifndef _WIN32_WINNT - #define _WIN32_WINNT 0x0602 - #endif - #ifndef NOMINMAX - #define NOMINMAX - #endif - #ifndef UNICODE - #define UNICODE - #endif - #ifndef _UNICODE - #define _UNICODE - #endif - #ifndef _CRT_SECURE_NO_WARNINGS - #define _CRT_SECURE_NO_WARNINGS - #endif - - #include - #include - - #include - #include - #undef ERROR -#endif -// clang-format on - -#include "td/utils/check.h" -#include "td/utils/int_types.h" -#include "td/utils/unique_ptr.h" - -#include -#include - -#define TD_DEBUG - -#define TD_DEFINE_STR_IMPL(x) #x -#define TD_DEFINE_STR(x) TD_DEFINE_STR_IMPL(x) -#define TD_CONCAT_IMPL(x, y) x##y -#define TD_CONCAT(x, y) TD_CONCAT_IMPL(x, y) - -// clang-format off -#if TD_WINDOWS - #define TD_DIR_SLASH '\\' -#else - #define TD_DIR_SLASH '/' -#endif -// clang-format on - -#if TD_USE_ASAN -#include -#define TD_LSAN_IGNORE(x) __lsan_ignore_object(x) -#else -#define TD_LSAN_IGNORE(x) (void)(x) -#endif - -namespace td { - -inline bool likely(bool x) { -#if TD_CLANG || TD_GCC || TD_INTEL - return __builtin_expect(x, 1); -#else - return x; -#endif -} - -inline bool unlikely(bool x) { -#if TD_CLANG || TD_GCC || TD_INTEL - return __builtin_expect(x, 0); -#else - return x; -#endif -} - -// replace std::max and std::min to not have to include everywhere -// as a side bonus, accept parameters by value, so constexpr variables aren't required to be instantiated -template -T max(T a, T b) { - return a < b ? b : a; -} - -template -T min(T a, T b) { - return a < b ? a : b; -} - -using string = std::string; - -template -using vector = std::vector; - -struct Unit {}; - -struct Auto { - template - operator ToT() const { - return ToT(); - } -}; - -} // namespace td diff --git a/submodules/MtProtoKit/TON/macOS/include/td/utils/config.h b/submodules/MtProtoKit/TON/macOS/include/td/utils/config.h deleted file mode 100644 index bb671cfa26..0000000000 --- a/submodules/MtProtoKit/TON/macOS/include/td/utils/config.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#define TD_HAVE_OPENSSL 1 -#define TD_HAVE_ZLIB 1 -#define TD_HAVE_CRC32C 1 -#define TD_HAVE_COROUTINES 0 -#define TD_HAVE_ABSL 0 -#define TD_HAVE_GETOPT 1 -#define TD_FD_DEBUG 0 diff --git a/submodules/MtProtoKit/TON/macOS/include/td/utils/int_types.h b/submodules/MtProtoKit/TON/macOS/include/td/utils/int_types.h deleted file mode 100644 index b7fb0115cf..0000000000 --- a/submodules/MtProtoKit/TON/macOS/include/td/utils/int_types.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once - -#include "td/utils/port/platform.h" - -#include -#include - -namespace td { - -#if !TD_WINDOWS -using size_t = std::size_t; -#endif - -using int8 = std::int8_t; -using int16 = std::int16_t; -using uint16 = std::uint16_t; -using int32 = std::int32_t; -using uint32 = std::uint32_t; -using int64 = std::int64_t; -using uint64 = std::uint64_t; - -static_assert(sizeof(std::uint8_t) == sizeof(unsigned char), "Unsigned char expected to be 8-bit"); -using uint8 = unsigned char; - -#if TD_MSVC -#pragma warning(push) -#pragma warning(disable : 4309) -#endif - -static_assert(static_cast(128) == -128 || static_cast(128) == 128, - "Unexpected cast to char implementation-defined behaviour"); -static_assert(static_cast(256) == 0, "Unexpected cast to char implementation-defined behaviour"); -static_assert(static_cast(-256) == 0, "Unexpected cast to char implementation-defined behaviour"); - -#if TD_MSVC -#pragma warning(pop) -#endif - -} // namespace td diff --git a/submodules/MtProtoKit/TON/macOS/include/td/utils/port/platform.h b/submodules/MtProtoKit/TON/macOS/include/td/utils/port/platform.h deleted file mode 100644 index 821685e29d..0000000000 --- a/submodules/MtProtoKit/TON/macOS/include/td/utils/port/platform.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once - -// clang-format off - -/*** Platform macros ***/ -#if defined(_WIN32) || defined(_WINDOWS) // _WINDOWS is defined by CMake - #if defined(__cplusplus_winrt) - #define TD_WINRT 1 - #endif - #if defined(__cplusplus_cli) - #define TD_CLI 1 - #endif - #define TD_WINDOWS 1 -#elif defined(__APPLE__) - #include "TargetConditionals.h" - #if TARGET_OS_IPHONE - // iOS/watchOS/tvOS - #if TARGET_OS_IOS - #define TD_DARWIN_IOS 1 - #elif TARGET_OS_TV - #define TD_DARWIN_TV_OS 1 - #elif TARGET_OS_WATCH - #define TD_DARWIN_WATCH_OS 1 - #else - #warning "Probably unsupported Apple iPhone platform. Feel free to try to compile" - #endif - #elif TARGET_OS_MAC - // Other kinds of macOS - #define TD_DARWIN_MAC 1 - #else - #warning "Probably unsupported Apple platform. Feel free to try to compile" - #endif - #define TD_DARWIN 1 -#elif defined(ANDROID) || defined(__ANDROID__) - #define TD_ANDROID 1 -#elif defined(TIZEN_DEPRECATION) - #define TD_TIZEN 1 -#elif defined(__linux__) - #define TD_LINUX 1 -#elif defined(__FreeBSD__) - #define TD_FREEBSD 1 -#elif defined(__OpenBSD__) - #define TD_OPENBSD 1 -#elif defined(__NetBSD__) - #define TD_NETBSD 1 -#elif defined(__CYGWIN__) - #define TD_CYGWIN 1 -#elif defined(__EMSCRIPTEN__) - #define TD_EMSCRIPTEN 1 -#elif defined(__unix__) // all unices not caught above - #warning "Probably unsupported Unix platform. Feel free to try to compile" - #define TD_CYGWIN 1 -#else - #error "Probably unsupported platform. Feel free to remove the error and try to recompile" -#endif - -#if defined(__ICC) || defined(__INTEL_COMPILER) - #define TD_INTEL 1 -#elif defined(__clang__) - #define TD_CLANG 1 -#elif defined(__GNUC__) || defined(__GNUG__) - #define TD_GCC 1 -#elif defined(_MSC_VER) - #define TD_MSVC 1 -#else - #warning "Probably unsupported compiler. Feel free to try to compile" -#endif - -#if TD_GCC || TD_CLANG || TD_INTEL - #define TD_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) - #define TD_ATTRIBUTE_FORMAT_PRINTF(from, to) __attribute__((format(printf, from, to))) -#else - #define TD_WARN_UNUSED_RESULT - #define TD_ATTRIBUTE_FORMAT_PRINTF(from, to) -#endif - -#if TD_MSVC - #define TD_UNUSED __pragma(warning(suppress : 4100)) -#elif TD_CLANG || TD_GCC || TD_INTEL - #define TD_UNUSED __attribute__((unused)) -#else - #define TD_UNUSED -#endif - -#define TD_HAVE_ATOMIC_SHARED_PTR 1 - -// No atomic operations on std::shared_ptr in libstdc++ before 5.0 -// see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57250 -#ifdef __GLIBCXX__ - #undef TD_HAVE_ATOMIC_SHARED_PTR -#endif - -// Also no atomic operations on std::shared_ptr when clang __has_feature(cxx_atomic) is defined and zero -#if defined(__has_feature) - #if !__has_feature(cxx_atomic) - #undef TD_HAVE_ATOMIC_SHARED_PTR - #endif -#endif - -#ifdef TD_HAVE_ATOMIC_SHARED_PTR // unfortunately we can't check for __GLIBCXX__ here, it is not defined yet - #undef TD_HAVE_ATOMIC_SHARED_PTR -#endif - -#define TD_CONCURRENCY_PAD 128 - -#if !TD_WINDOWS && defined(__SIZEOF_INT128__) -#define TD_HAVE_INT128 1 -#endif - -// clang-format on diff --git a/submodules/MtProtoKit/TON/macOS/include/td/utils/unique_ptr.h b/submodules/MtProtoKit/TON/macOS/include/td/utils/unique_ptr.h deleted file mode 100644 index eed4cb65e2..0000000000 --- a/submodules/MtProtoKit/TON/macOS/include/td/utils/unique_ptr.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once - -#include -#include -#include - -namespace td { - -// const-correct and compiler-friendly (g++ RAM and CPU usage 10 times less than for std::unique_ptr) -// replacement for std::unique_ptr -template -class unique_ptr final { - public: - using pointer = T *; - using element_type = T; - - unique_ptr() noexcept = default; - unique_ptr(const unique_ptr &other) = delete; - unique_ptr &operator=(const unique_ptr &other) = delete; - unique_ptr(unique_ptr &&other) noexcept : ptr_(other.release()) { - } - unique_ptr &operator=(unique_ptr &&other) noexcept { - reset(other.release()); - return *this; - } - ~unique_ptr() { - reset(); - } - - unique_ptr(std::nullptr_t) noexcept { - } - explicit unique_ptr(T *ptr) noexcept : ptr_(ptr) { - } - template ::value>> - unique_ptr(unique_ptr &&other) noexcept : ptr_(static_cast(other.release())) { - } - template ::value>> - unique_ptr &operator=(unique_ptr &&other) noexcept { - reset(static_cast(other.release())); - return *this; - } - void reset(T *new_ptr = nullptr) noexcept { - delete ptr_; - ptr_ = new_ptr; - } - T *release() noexcept { - auto res = ptr_; - ptr_ = nullptr; - return res; - } - T *get() noexcept { - return ptr_; - } - const T *get() const noexcept { - return ptr_; - } - T *operator->() noexcept { - return ptr_; - } - const T *operator->() const noexcept { - return ptr_; - } - T &operator*() noexcept { - return *ptr_; - } - const T &operator*() const noexcept { - return *ptr_; - } - explicit operator bool() const noexcept { - return ptr_ != nullptr; - } - - private: - T *ptr_{nullptr}; -}; - -template -bool operator==(std::nullptr_t, const unique_ptr &p) { - return !p; -} -template -bool operator==(const unique_ptr &p, std::nullptr_t) { - return !p; -} -template -bool operator!=(std::nullptr_t, const unique_ptr &p) { - return static_cast(p); -} -template -bool operator!=(const unique_ptr &p, std::nullptr_t) { - return static_cast(p); -} - -template -unique_ptr make_unique(Args &&... args) { - return unique_ptr(new Type(std::forward(args)...)); -} - -} // namespace td diff --git a/submodules/MtProtoKit/TON/macOS/include/tl/TlObject.h b/submodules/MtProtoKit/TON/macOS/include/tl/TlObject.h deleted file mode 100644 index b98996b04f..0000000000 --- a/submodules/MtProtoKit/TON/macOS/include/tl/TlObject.h +++ /dev/null @@ -1,177 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once - -/** - * \file - * Contains declarations of a base class for all TL-objects and some helper methods - */ - -#include -#include -#include -#include - -namespace td { -class TlStorerCalcLength; - -class TlStorerUnsafe; - -class TlStorerToString; -} // namespace td -namespace ton { -/** - * This class is a base class for all TL-objects. - */ -class TlObject { - public: - /** - * Returns identifier uniquely determining TL-type of the object. - */ - virtual std::int32_t get_id() const = 0; - - /** - * Appends object to the storer serializing object to a buffer of fixed length. - * \param[in] s Storer to which object will be appended. - */ - virtual void store(td::TlStorerUnsafe &s) const { - } - - /** - * Appends object to the storer calculating TL-length of the serialized object. - * \param[in] s Storer to which object will be appended. - */ - virtual void store(td::TlStorerCalcLength &s) const { - } - - /** - * Helper function for to_string method. Appends string representation of the object to the storer. - * \param[in] s Storer to which object string representation will be appended. - * \param[in] field_name Object field_name if applicable. - */ - virtual void store(td::TlStorerToString &s, const char *field_name) const = 0; - - /** - * Default constructor. - */ - TlObject() = default; - - /** - * Deleted copy constructor. - */ - TlObject(const TlObject &) = delete; - - /** - * Deleted copy assignment operator. - */ - TlObject &operator=(const TlObject &) = delete; - - /** - * Default move constructor. - */ - TlObject(TlObject &&) = default; - - /** - * Default move assignment operator. - */ - TlObject &operator=(TlObject &&) = default; - - /** - * Virtual desctructor. - */ - virtual ~TlObject() = default; -}; - -/** - * A smart wrapper to store a pointer to a TL-object. - */ -template -using tl_object_ptr = std::unique_ptr; - -/** - * A function to create a dynamically allocated TL-object. Can be treated as an analogue of std::make_unique. - * Examples of usage: - * \code - * auto get_auth_state_request = td::create_tl_object(); - * auto send_message_request = td::create_tl_object(chat_id, 0, false, false, nullptr, - * td::create_tl_object("Hello, world!!!", false, true, {}, nullptr)); - * \endcode - * - * \tparam Type Type of a TL-object to construct. - * \param[in] args Arguments to pass to the object constructor. - * \return Wrapped pointer to the created TL-object. - */ -template -tl_object_ptr create_tl_object(Args &&... args) { - return tl_object_ptr(new Type(std::forward(args)...)); -} - -/** - * A function to downcast a wrapped pointer to TL-object to a pointer to its subclass. - * It is undefined behaviour to cast an object to the wrong type. - * Examples of usage: - * \code - * td::tl_object_ptr auth_state = ...; - * switch (auth_state->get_id()) { - * case td::td_api::authStateWaitPhoneNumber::ID: { - * auto state = td::move_tl_object_as(auth_state); - * // use state - * break; - * } - * case td::td_api::authStateWaitCode::ID: { - * auto state = td::move_tl_object_as(auth_state); - * // use state - * break; - * } - * case td::td_api::authStateWaitPassword::ID: { - * auto state = td::move_tl_object_as(auth_state); - * // use state - * break; - * } - * case td::td_api::authStateOk::ID: { - * auto state = td::move_tl_object_as(auth_state); - * // use state - * break; - * } - * case td::td_api::authStateLoggingOut::ID: { - * auto state = td::move_tl_object_as(auth_state); - * // use state - * break; - * } - * } - * \endcode - * - * \tparam ToT Type of a TL-object to move to. - * \tparam FromT Type of a TL-object to move from, auto-deduced. - * \param[in] from Wrapped pointer to a TL-object. - */ -template -tl_object_ptr move_tl_object_as(tl_object_ptr &from) { - return tl_object_ptr(static_cast(from.release())); -} - -/** - * \overload - */ -template -tl_object_ptr move_tl_object_as(tl_object_ptr &&from) { - return tl_object_ptr(static_cast(from.release())); -} - -} // namespace ton diff --git a/submodules/MtProtoKit/TON/macOS/include/tonlib/Client.h b/submodules/MtProtoKit/TON/macOS/include/tonlib/Client.h deleted file mode 100644 index 42da243ef3..0000000000 --- a/submodules/MtProtoKit/TON/macOS/include/tonlib/Client.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once -#include "auto/tl/tonlib_api.h" - -namespace tonlib_api = ton::tonlib_api; - -namespace tonlib { -class Client final { - public: - Client(); - struct Request { - std::uint64_t id; - tonlib_api::object_ptr function; - }; - - void send(Request&& request); - - struct Response { - std::uint64_t id; - tonlib_api::object_ptr object; - }; - - Response receive(double timeout); - - static Response execute(Request&& request); - - ~Client(); - Client(Client&& other); - Client& operator=(Client&& other); - - private: - class Impl; - std::unique_ptr impl_; -}; -} // namespace tonlib diff --git a/submodules/MtProtoKit/TON/macOS/include/tonlib/tonlib_client_json.h b/submodules/MtProtoKit/TON/macOS/include/tonlib/tonlib_client_json.h deleted file mode 100644 index 0e08d78456..0000000000 --- a/submodules/MtProtoKit/TON/macOS/include/tonlib/tonlib_client_json.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once - -#include "tonlib/tonlibjson_export.h" - -#ifdef __cplusplus -extern "C" { -#endif - -TONLIBJSON_EXPORT void *tonlib_client_json_create(); - -TONLIBJSON_EXPORT void tonlib_client_json_send(void *client, const char *request); - -TONLIBJSON_EXPORT const char *tonlib_client_json_receive(void *client, double timeout); - -TONLIBJSON_EXPORT const char *tonlib_client_json_execute(void *client, const char *request); - -TONLIBJSON_EXPORT void tonlib_client_json_destroy(void *client); - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/submodules/MtProtoKit/TON/macOS/include/tonlib/tonlibjson_export.h b/submodules/MtProtoKit/TON/macOS/include/tonlib/tonlibjson_export.h deleted file mode 100644 index 72cf92e451..0000000000 --- a/submodules/MtProtoKit/TON/macOS/include/tonlib/tonlibjson_export.h +++ /dev/null @@ -1,42 +0,0 @@ - -#ifndef TONLIBJSON_EXPORT_H -#define TONLIBJSON_EXPORT_H - -#ifdef TONLIBJSON_STATIC_DEFINE -# define TONLIBJSON_EXPORT -# define TONLIBJSON_NO_EXPORT -#else -# ifndef TONLIBJSON_EXPORT -# ifdef tonlibjson_EXPORTS - /* We are building this library */ -# define TONLIBJSON_EXPORT __attribute__((visibility("default"))) -# else - /* We are using this library */ -# define TONLIBJSON_EXPORT __attribute__((visibility("default"))) -# endif -# endif - -# ifndef TONLIBJSON_NO_EXPORT -# define TONLIBJSON_NO_EXPORT __attribute__((visibility("hidden"))) -# endif -#endif - -#ifndef TONLIBJSON_DEPRECATED -# define TONLIBJSON_DEPRECATED __attribute__ ((__deprecated__)) -#endif - -#ifndef TONLIBJSON_DEPRECATED_EXPORT -# define TONLIBJSON_DEPRECATED_EXPORT TONLIBJSON_EXPORT TONLIBJSON_DEPRECATED -#endif - -#ifndef TONLIBJSON_DEPRECATED_NO_EXPORT -# define TONLIBJSON_DEPRECATED_NO_EXPORT TONLIBJSON_NO_EXPORT TONLIBJSON_DEPRECATED -#endif - -#if 0 /* DEFINE_NO_DEPRECATED */ -# ifndef TONLIBJSON_NO_DEPRECATED -# define TONLIBJSON_NO_DEPRECATED -# endif -#endif - -#endif /* TONLIBJSON_EXPORT_H */ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libadnllite.a b/submodules/MtProtoKit/TON/macOS/lib/libadnllite.a deleted file mode 100644 index 8d2a194fc2..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libadnllite.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libcrc32c.a b/submodules/MtProtoKit/TON/macOS/lib/libcrc32c.a deleted file mode 100644 index 908d5c0b48..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libcrc32c.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libkeys.a b/submodules/MtProtoKit/TON/macOS/lib/libkeys.a deleted file mode 100644 index 0fa146b076..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libkeys.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/liblite-client-common.a b/submodules/MtProtoKit/TON/macOS/lib/liblite-client-common.a deleted file mode 100644 index 1f0fb6a08d..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/liblite-client-common.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libtdactor.a b/submodules/MtProtoKit/TON/macOS/lib/libtdactor.a deleted file mode 100644 index c691502ab7..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libtdactor.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libtddb.a b/submodules/MtProtoKit/TON/macOS/lib/libtddb.a deleted file mode 100644 index d0c8d1ff15..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libtddb.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libtdnet.a b/submodules/MtProtoKit/TON/macOS/lib/libtdnet.a deleted file mode 100644 index 8f8ab85892..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libtdnet.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libtdutils.a b/submodules/MtProtoKit/TON/macOS/lib/libtdutils.a deleted file mode 100644 index ba4f00c6d0..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libtdutils.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libtl-lite-utils.a b/submodules/MtProtoKit/TON/macOS/lib/libtl-lite-utils.a deleted file mode 100644 index 974b571619..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libtl-lite-utils.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libtl-utils.a b/submodules/MtProtoKit/TON/macOS/lib/libtl-utils.a deleted file mode 100644 index 9558112765..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libtl-utils.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libtl_api.a b/submodules/MtProtoKit/TON/macOS/lib/libtl_api.a deleted file mode 100644 index 511757762a..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libtl_api.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libtl_lite_api.a b/submodules/MtProtoKit/TON/macOS/lib/libtl_lite_api.a deleted file mode 100644 index 5558c33e97..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libtl_lite_api.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libtl_tonlib_api.a b/submodules/MtProtoKit/TON/macOS/lib/libtl_tonlib_api.a deleted file mode 100644 index 2ebce461be..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libtl_tonlib_api.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libton_block.a b/submodules/MtProtoKit/TON/macOS/lib/libton_block.a deleted file mode 100644 index 00ca8f797b..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libton_block.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libton_crypto.a b/submodules/MtProtoKit/TON/macOS/lib/libton_crypto.a deleted file mode 100644 index 0edecb5d7c..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libton_crypto.a and /dev/null differ diff --git a/submodules/MtProtoKit/TON/macOS/lib/libtonlib.a b/submodules/MtProtoKit/TON/macOS/lib/libtonlib.a deleted file mode 100644 index faa94cefc5..0000000000 Binary files a/submodules/MtProtoKit/TON/macOS/lib/libtonlib.a and /dev/null differ diff --git a/submodules/MtProtoKit/openssl/OSX/libcrypto.a b/submodules/MtProtoKit/openssl/OSX/libcrypto.a deleted file mode 100644 index 7343d9795f..0000000000 Binary files a/submodules/MtProtoKit/openssl/OSX/libcrypto.a and /dev/null differ diff --git a/submodules/MtProtoKit/openssl/openssl/aes.h b/submodules/MtProtoKit/openssl/openssl/aes.h deleted file mode 100644 index 245c552abd..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/aes.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_AES_H -# define HEADER_AES_H - -# include - -# include -# ifdef __cplusplus -extern "C" { -# endif - -# define AES_ENCRYPT 1 -# define AES_DECRYPT 0 - -/* - * Because array size can't be a const in C, the following two are macros. - * Both sizes are in bytes. - */ -# define AES_MAXNR 14 -# define AES_BLOCK_SIZE 16 - -/* This should be a hidden type, but EVP requires that the size be known */ -struct aes_key_st { -# ifdef AES_LONG - unsigned long rd_key[4 * (AES_MAXNR + 1)]; -# else - unsigned int rd_key[4 * (AES_MAXNR + 1)]; -# endif - int rounds; -}; -typedef struct aes_key_st AES_KEY; - -const char *AES_options(void); - -int AES_set_encrypt_key(const unsigned char *userKey, const int bits, - AES_KEY *key); -int AES_set_decrypt_key(const unsigned char *userKey, const int bits, - AES_KEY *key); - -void AES_encrypt(const unsigned char *in, unsigned char *out, - const AES_KEY *key); -void AES_decrypt(const unsigned char *in, unsigned char *out, - const AES_KEY *key); - -void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, - const AES_KEY *key, const int enc); -void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, const int enc); -void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num, const int enc); -void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num, const int enc); -void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num, const int enc); -void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num); -/* NB: the IV is _two_ blocks long */ -void AES_ige_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, const int enc); -/* NB: the IV is _four_ blocks long */ -void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - const AES_KEY *key2, const unsigned char *ivec, - const int enc); - -int AES_wrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); -int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); - - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/asn1.h b/submodules/MtProtoKit/openssl/openssl/asn1.h deleted file mode 100644 index 9522eec18f..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/asn1.h +++ /dev/null @@ -1,886 +0,0 @@ -/* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ASN1_H -# define HEADER_ASN1_H - -# include -# include -# include -# include -# include -# include -# include - -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# define V_ASN1_UNIVERSAL 0x00 -# define V_ASN1_APPLICATION 0x40 -# define V_ASN1_CONTEXT_SPECIFIC 0x80 -# define V_ASN1_PRIVATE 0xc0 - -# define V_ASN1_CONSTRUCTED 0x20 -# define V_ASN1_PRIMITIVE_TAG 0x1f -# define V_ASN1_PRIMATIVE_TAG /*compat*/ V_ASN1_PRIMITIVE_TAG - -# define V_ASN1_APP_CHOOSE -2/* let the recipient choose */ -# define V_ASN1_OTHER -3/* used in ASN1_TYPE */ -# define V_ASN1_ANY -4/* used in ASN1 template code */ - -# define V_ASN1_UNDEF -1 -/* ASN.1 tag values */ -# define V_ASN1_EOC 0 -# define V_ASN1_BOOLEAN 1 /**/ -# define V_ASN1_INTEGER 2 -# define V_ASN1_BIT_STRING 3 -# define V_ASN1_OCTET_STRING 4 -# define V_ASN1_NULL 5 -# define V_ASN1_OBJECT 6 -# define V_ASN1_OBJECT_DESCRIPTOR 7 -# define V_ASN1_EXTERNAL 8 -# define V_ASN1_REAL 9 -# define V_ASN1_ENUMERATED 10 -# define V_ASN1_UTF8STRING 12 -# define V_ASN1_SEQUENCE 16 -# define V_ASN1_SET 17 -# define V_ASN1_NUMERICSTRING 18 /**/ -# define V_ASN1_PRINTABLESTRING 19 -# define V_ASN1_T61STRING 20 -# define V_ASN1_TELETEXSTRING 20/* alias */ -# define V_ASN1_VIDEOTEXSTRING 21 /**/ -# define V_ASN1_IA5STRING 22 -# define V_ASN1_UTCTIME 23 -# define V_ASN1_GENERALIZEDTIME 24 /**/ -# define V_ASN1_GRAPHICSTRING 25 /**/ -# define V_ASN1_ISO64STRING 26 /**/ -# define V_ASN1_VISIBLESTRING 26/* alias */ -# define V_ASN1_GENERALSTRING 27 /**/ -# define V_ASN1_UNIVERSALSTRING 28 /**/ -# define V_ASN1_BMPSTRING 30 - -/* - * NB the constants below are used internally by ASN1_INTEGER - * and ASN1_ENUMERATED to indicate the sign. They are *not* on - * the wire tag values. - */ - -# define V_ASN1_NEG 0x100 -# define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) -# define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) - -/* For use with d2i_ASN1_type_bytes() */ -# define B_ASN1_NUMERICSTRING 0x0001 -# define B_ASN1_PRINTABLESTRING 0x0002 -# define B_ASN1_T61STRING 0x0004 -# define B_ASN1_TELETEXSTRING 0x0004 -# define B_ASN1_VIDEOTEXSTRING 0x0008 -# define B_ASN1_IA5STRING 0x0010 -# define B_ASN1_GRAPHICSTRING 0x0020 -# define B_ASN1_ISO64STRING 0x0040 -# define B_ASN1_VISIBLESTRING 0x0040 -# define B_ASN1_GENERALSTRING 0x0080 -# define B_ASN1_UNIVERSALSTRING 0x0100 -# define B_ASN1_OCTET_STRING 0x0200 -# define B_ASN1_BIT_STRING 0x0400 -# define B_ASN1_BMPSTRING 0x0800 -# define B_ASN1_UNKNOWN 0x1000 -# define B_ASN1_UTF8STRING 0x2000 -# define B_ASN1_UTCTIME 0x4000 -# define B_ASN1_GENERALIZEDTIME 0x8000 -# define B_ASN1_SEQUENCE 0x10000 -/* For use with ASN1_mbstring_copy() */ -# define MBSTRING_FLAG 0x1000 -# define MBSTRING_UTF8 (MBSTRING_FLAG) -# define MBSTRING_ASC (MBSTRING_FLAG|1) -# define MBSTRING_BMP (MBSTRING_FLAG|2) -# define MBSTRING_UNIV (MBSTRING_FLAG|4) -# define SMIME_OLDMIME 0x400 -# define SMIME_CRLFEOL 0x800 -# define SMIME_STREAM 0x1000 - struct X509_algor_st; -DEFINE_STACK_OF(X509_ALGOR) - -# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ -/* - * This indicates that the ASN1_STRING is not a real value but just a place - * holder for the location where indefinite length constructed data should be - * inserted in the memory buffer - */ -# define ASN1_STRING_FLAG_NDEF 0x010 - -/* - * This flag is used by the CMS code to indicate that a string is not - * complete and is a place holder for content when it had all been accessed. - * The flag will be reset when content has been written to it. - */ - -# define ASN1_STRING_FLAG_CONT 0x020 -/* - * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING - * type. - */ -# define ASN1_STRING_FLAG_MSTRING 0x040 -/* String is embedded and only content should be freed */ -# define ASN1_STRING_FLAG_EMBED 0x080 -/* String should be parsed in RFC 5280's time format */ -# define ASN1_STRING_FLAG_X509_TIME 0x100 -/* This is the base type that holds just about everything :-) */ -struct asn1_string_st { - int length; - int type; - unsigned char *data; - /* - * The value of the following field depends on the type being held. It - * is mostly being used for BIT_STRING so if the input data has a - * non-zero 'unused bits' value, it will be handled correctly - */ - long flags; -}; - -/* - * ASN1_ENCODING structure: this is used to save the received encoding of an - * ASN1 type. This is useful to get round problems with invalid encodings - * which can break signatures. - */ - -typedef struct ASN1_ENCODING_st { - unsigned char *enc; /* DER encoding */ - long len; /* Length of encoding */ - int modified; /* set to 1 if 'enc' is invalid */ -} ASN1_ENCODING; - -/* Used with ASN1 LONG type: if a long is set to this it is omitted */ -# define ASN1_LONG_UNDEF 0x7fffffffL - -# define STABLE_FLAGS_MALLOC 0x01 -/* - * A zero passed to ASN1_STRING_TABLE_new_add for the flags is interpreted - * as "don't change" and STABLE_FLAGS_MALLOC is always set. By setting - * STABLE_FLAGS_MALLOC only we can clear the existing value. Use the alias - * STABLE_FLAGS_CLEAR to reflect this. - */ -# define STABLE_FLAGS_CLEAR STABLE_FLAGS_MALLOC -# define STABLE_NO_MASK 0x02 -# define DIRSTRING_TYPE \ - (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) -# define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) - -typedef struct asn1_string_table_st { - int nid; - long minsize; - long maxsize; - unsigned long mask; - unsigned long flags; -} ASN1_STRING_TABLE; - -DEFINE_STACK_OF(ASN1_STRING_TABLE) - -/* size limits: this stuff is taken straight from RFC2459 */ - -# define ub_name 32768 -# define ub_common_name 64 -# define ub_locality_name 128 -# define ub_state_name 128 -# define ub_organization_name 64 -# define ub_organization_unit_name 64 -# define ub_title 64 -# define ub_email_address 128 - -/* - * Declarations for template structures: for full definitions see asn1t.h - */ -typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; -typedef struct ASN1_TLC_st ASN1_TLC; -/* This is just an opaque pointer */ -typedef struct ASN1_VALUE_st ASN1_VALUE; - -/* Declare ASN1 functions: the implement macro in in asn1t.h */ - -# define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) - -# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) - -# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) - -# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) - -# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(itname) - -# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(const type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(name) - -# define DECLARE_ASN1_NDEF_FUNCTION(name) \ - int i2d_##name##_NDEF(name *a, unsigned char **out); - -# define DECLARE_ASN1_FUNCTIONS_const(name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) - -# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - type *name##_new(void); \ - void name##_free(type *a); - -# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ - DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) - -# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ - const ASN1_PCTX *pctx); - -# define D2I_OF(type) type *(*)(type **,const unsigned char **,long) -# define I2D_OF(type) int (*)(type *,unsigned char **) -# define I2D_OF_const(type) int (*)(const type *,unsigned char **) - -# define CHECKED_D2I_OF(type, d2i) \ - ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) -# define CHECKED_I2D_OF(type, i2d) \ - ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) -# define CHECKED_NEW_OF(type, xnew) \ - ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) -# define CHECKED_PTR_OF(type, p) \ - ((void*) (1 ? p : (type*)0)) -# define CHECKED_PPTR_OF(type, p) \ - ((void**) (1 ? p : (type**)0)) - -# define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) -# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) -# define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) - -TYPEDEF_D2I2D_OF(void); - -/*- - * The following macros and typedefs allow an ASN1_ITEM - * to be embedded in a structure and referenced. Since - * the ASN1_ITEM pointers need to be globally accessible - * (possibly from shared libraries) they may exist in - * different forms. On platforms that support it the - * ASN1_ITEM structure itself will be globally exported. - * Other platforms will export a function that returns - * an ASN1_ITEM pointer. - * - * To handle both cases transparently the macros below - * should be used instead of hard coding an ASN1_ITEM - * pointer in a structure. - * - * The structure will look like this: - * - * typedef struct SOMETHING_st { - * ... - * ASN1_ITEM_EXP *iptr; - * ... - * } SOMETHING; - * - * It would be initialised as e.g.: - * - * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; - * - * and the actual pointer extracted with: - * - * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); - * - * Finally an ASN1_ITEM pointer can be extracted from an - * appropriate reference with: ASN1_ITEM_rptr(X509). This - * would be used when a function takes an ASN1_ITEM * argument. - * - */ - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* ASN1_ITEM pointer exported type */ -typedef const ASN1_ITEM ASN1_ITEM_EXP; - -/* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr) - -/* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (&(iptr##_it)) - -# define ASN1_ITEM_rptr(ref) (&(ref##_it)) - -# define DECLARE_ASN1_ITEM(name) \ - OPENSSL_EXTERN const ASN1_ITEM name##_it; - -# else - -/* - * Platforms that can't easily handle shared global variables are declared as - * functions returning ASN1_ITEM pointers. - */ - -/* ASN1_ITEM pointer exported type */ -typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); - -/* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr()) - -/* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (iptr##_it) - -# define ASN1_ITEM_rptr(ref) (ref##_it()) - -# define DECLARE_ASN1_ITEM(name) \ - const ASN1_ITEM * name##_it(void); - -# endif - -/* Parameters used by ASN1_STRING_print_ex() */ - -/* - * These determine which characters to escape: RFC2253 special characters, - * control characters and MSB set characters - */ - -# define ASN1_STRFLGS_ESC_2253 1 -# define ASN1_STRFLGS_ESC_CTRL 2 -# define ASN1_STRFLGS_ESC_MSB 4 - -/* - * This flag determines how we do escaping: normally RC2253 backslash only, - * set this to use backslash and quote. - */ - -# define ASN1_STRFLGS_ESC_QUOTE 8 - -/* These three flags are internal use only. */ - -/* Character is a valid PrintableString character */ -# define CHARTYPE_PRINTABLESTRING 0x10 -/* Character needs escaping if it is the first character */ -# define CHARTYPE_FIRST_ESC_2253 0x20 -/* Character needs escaping if it is the last character */ -# define CHARTYPE_LAST_ESC_2253 0x40 - -/* - * NB the internal flags are safely reused below by flags handled at the top - * level. - */ - -/* - * If this is set we convert all character strings to UTF8 first - */ - -# define ASN1_STRFLGS_UTF8_CONVERT 0x10 - -/* - * If this is set we don't attempt to interpret content: just assume all - * strings are 1 byte per character. This will produce some pretty odd - * looking output! - */ - -# define ASN1_STRFLGS_IGNORE_TYPE 0x20 - -/* If this is set we include the string type in the output */ -# define ASN1_STRFLGS_SHOW_TYPE 0x40 - -/* - * This determines which strings to display and which to 'dump' (hex dump of - * content octets or DER encoding). We can only dump non character strings or - * everything. If we don't dump 'unknown' they are interpreted as character - * strings with 1 octet per character and are subject to the usual escaping - * options. - */ - -# define ASN1_STRFLGS_DUMP_ALL 0x80 -# define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 - -/* - * These determine what 'dumping' does, we can dump the content octets or the - * DER encoding: both use the RFC2253 #XXXXX notation. - */ - -# define ASN1_STRFLGS_DUMP_DER 0x200 - -/* - * This flag specifies that RC2254 escaping shall be performed. - */ -#define ASN1_STRFLGS_ESC_2254 0x400 - -/* - * All the string flags consistent with RFC2253, escaping control characters - * isn't essential in RFC2253 but it is advisable anyway. - */ - -# define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ - ASN1_STRFLGS_ESC_CTRL | \ - ASN1_STRFLGS_ESC_MSB | \ - ASN1_STRFLGS_UTF8_CONVERT | \ - ASN1_STRFLGS_DUMP_UNKNOWN | \ - ASN1_STRFLGS_DUMP_DER) - -DEFINE_STACK_OF(ASN1_INTEGER) - -DEFINE_STACK_OF(ASN1_GENERALSTRING) - -DEFINE_STACK_OF(ASN1_UTF8STRING) - -typedef struct asn1_type_st { - int type; - union { - char *ptr; - ASN1_BOOLEAN boolean; - ASN1_STRING *asn1_string; - ASN1_OBJECT *object; - ASN1_INTEGER *integer; - ASN1_ENUMERATED *enumerated; - ASN1_BIT_STRING *bit_string; - ASN1_OCTET_STRING *octet_string; - ASN1_PRINTABLESTRING *printablestring; - ASN1_T61STRING *t61string; - ASN1_IA5STRING *ia5string; - ASN1_GENERALSTRING *generalstring; - ASN1_BMPSTRING *bmpstring; - ASN1_UNIVERSALSTRING *universalstring; - ASN1_UTCTIME *utctime; - ASN1_GENERALIZEDTIME *generalizedtime; - ASN1_VISIBLESTRING *visiblestring; - ASN1_UTF8STRING *utf8string; - /* - * set and sequence are left complete and still contain the set or - * sequence bytes - */ - ASN1_STRING *set; - ASN1_STRING *sequence; - ASN1_VALUE *asn1_value; - } value; -} ASN1_TYPE; - -DEFINE_STACK_OF(ASN1_TYPE) - -typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; - -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) - -/* This is used to contain a list of bit names */ -typedef struct BIT_STRING_BITNAME_st { - int bitnum; - const char *lname; - const char *sname; -} BIT_STRING_BITNAME; - -# define B_ASN1_TIME \ - B_ASN1_UTCTIME | \ - B_ASN1_GENERALIZEDTIME - -# define B_ASN1_PRINTABLE \ - B_ASN1_NUMERICSTRING| \ - B_ASN1_PRINTABLESTRING| \ - B_ASN1_T61STRING| \ - B_ASN1_IA5STRING| \ - B_ASN1_BIT_STRING| \ - B_ASN1_UNIVERSALSTRING|\ - B_ASN1_BMPSTRING|\ - B_ASN1_UTF8STRING|\ - B_ASN1_SEQUENCE|\ - B_ASN1_UNKNOWN - -# define B_ASN1_DIRECTORYSTRING \ - B_ASN1_PRINTABLESTRING| \ - B_ASN1_TELETEXSTRING|\ - B_ASN1_BMPSTRING|\ - B_ASN1_UNIVERSALSTRING|\ - B_ASN1_UTF8STRING - -# define B_ASN1_DISPLAYTEXT \ - B_ASN1_IA5STRING| \ - B_ASN1_VISIBLESTRING| \ - B_ASN1_BMPSTRING|\ - B_ASN1_UTF8STRING - -DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) - -int ASN1_TYPE_get(const ASN1_TYPE *a); -void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); -int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); -int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); - -ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t); -void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); - -ASN1_OBJECT *ASN1_OBJECT_new(void); -void ASN1_OBJECT_free(ASN1_OBJECT *a); -int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp); -ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, - long length); - -DECLARE_ASN1_ITEM(ASN1_OBJECT) - -DEFINE_STACK_OF(ASN1_OBJECT) - -ASN1_STRING *ASN1_STRING_new(void); -void ASN1_STRING_free(ASN1_STRING *a); -void ASN1_STRING_clear_free(ASN1_STRING *a); -int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); -ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); -ASN1_STRING *ASN1_STRING_type_new(int type); -int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); - /* - * Since this is used to store all sorts of things, via macros, for now, - * make its data void * - */ -int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); -void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); -int ASN1_STRING_length(const ASN1_STRING *x); -void ASN1_STRING_length_set(ASN1_STRING *x, int n); -int ASN1_STRING_type(const ASN1_STRING *x); -DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x)) -const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); - -DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) -int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length); -int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); -int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n); -int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a, - const unsigned char *flags, int flags_len); - -int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, - BIT_STRING_BITNAME *tbl, int indent); -int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); -int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, - BIT_STRING_BITNAME *tbl); - -DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) -ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, - long length); -ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x); -int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); - -DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) - -int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); -ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); -ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, - int offset_day, long offset_sec); -int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); -int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); - -int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); -ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, - time_t t); -ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, - time_t t, int offset_day, - long offset_sec); -int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); - -int ASN1_TIME_diff(int *pday, int *psec, - const ASN1_TIME *from, const ASN1_TIME *to); - -DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) -ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); -int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, - const ASN1_OCTET_STRING *b); -int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, - int len); - -DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) -DECLARE_ASN1_FUNCTIONS(ASN1_NULL) -DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) - -int UTF8_getc(const unsigned char *str, int len, unsigned long *val); -int UTF8_putc(unsigned char *str, int len, unsigned long value); - -DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) - -DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) -DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) -DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) -DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) -DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) -DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) -DECLARE_ASN1_FUNCTIONS(ASN1_TIME) - -DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) - -ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); -ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, - int offset_day, long offset_sec); -int ASN1_TIME_check(const ASN1_TIME *t); -ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t, - ASN1_GENERALIZEDTIME **out); -int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); -int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str); -int ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm); -int ASN1_TIME_normalize(ASN1_TIME *s); -int ASN1_TIME_cmp_time_t(const ASN1_TIME *s, time_t t); -int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b); - -int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a); -int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); -int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a); -int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); -int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a); -int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); -int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type); -int i2t_ASN1_OBJECT(char *buf, int buf_len, const ASN1_OBJECT *a); - -int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num); -ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, - const char *sn, const char *ln); - -int ASN1_INTEGER_get_int64(int64_t *pr, const ASN1_INTEGER *a); -int ASN1_INTEGER_set_int64(ASN1_INTEGER *a, int64_t r); -int ASN1_INTEGER_get_uint64(uint64_t *pr, const ASN1_INTEGER *a); -int ASN1_INTEGER_set_uint64(ASN1_INTEGER *a, uint64_t r); - -int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); -long ASN1_INTEGER_get(const ASN1_INTEGER *a); -ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); -BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn); - -int ASN1_ENUMERATED_get_int64(int64_t *pr, const ASN1_ENUMERATED *a); -int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *a, int64_t r); - - -int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); -long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a); -ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai); -BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai, BIGNUM *bn); - -/* General */ -/* given a string, return the correct type, max is the maximum length */ -int ASN1_PRINTABLE_type(const unsigned char *s, int max); - -unsigned long ASN1_tag2bit(int tag); - -/* SPECIALS */ -int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, - int *pclass, long omax); -int ASN1_check_infinite_end(unsigned char **p, long len); -int ASN1_const_check_infinite_end(const unsigned char **p, long len); -void ASN1_put_object(unsigned char **pp, int constructed, int length, - int tag, int xclass); -int ASN1_put_eoc(unsigned char **pp); -int ASN1_object_size(int constructed, int length, int tag); - -/* Used to implement other functions */ -void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); - -# define ASN1_dup_of(type,i2d,d2i,x) \ - ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ - CHECKED_D2I_OF(type, d2i), \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_dup_of_const(type,i2d,d2i,x) \ - ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ - CHECKED_D2I_OF(type, d2i), \ - CHECKED_PTR_OF(const type, x))) - -void *ASN1_item_dup(const ASN1_ITEM *it, void *x); - -/* ASN1 alloc/free macros for when a type is only used internally */ - -# define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) -# define M_ASN1_free_of(x, type) \ - ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) - -# ifndef OPENSSL_NO_STDIO -void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); - -# define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ - ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ - CHECKED_D2I_OF(type, d2i), \ - in, \ - CHECKED_PPTR_OF(type, x))) - -void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); -int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); - -# define ASN1_i2d_fp_of(type,i2d,out,x) \ - (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_fp_of_const(type,i2d,out,x) \ - (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ - out, \ - CHECKED_PTR_OF(const type, x))) - -int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); -int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags); -# endif - -int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in); - -void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); - -# define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ - ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ - CHECKED_D2I_OF(type, d2i), \ - in, \ - CHECKED_PPTR_OF(type, x))) - -void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); -int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); - -# define ASN1_i2d_bio_of(type,i2d,out,x) \ - (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_bio_of_const(type,i2d,out,x) \ - (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ - out, \ - CHECKED_PTR_OF(const type, x))) - -int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); -int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); -int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); -int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); -int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); -int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); -int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off); -int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, - unsigned char *buf, int off); -int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); -int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, - int dump); -const char *ASN1_tag2str(int tag); - -/* Used to load and write Netscape format cert */ - -int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); - -int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len); -int ASN1_TYPE_get_octetstring(const ASN1_TYPE *a, unsigned char *data, int max_len); -int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, - unsigned char *data, int len); -int ASN1_TYPE_get_int_octetstring(const ASN1_TYPE *a, long *num, - unsigned char *data, int max_len); - -void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it); - -ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, - ASN1_OCTET_STRING **oct); - -void ASN1_STRING_set_default_mask(unsigned long mask); -int ASN1_STRING_set_default_mask_asc(const char *p); -unsigned long ASN1_STRING_get_default_mask(void); -int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, - int inform, unsigned long mask); -int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, - int inform, unsigned long mask, - long minsize, long maxsize); - -ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, - const unsigned char *in, int inlen, - int inform, int nid); -ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); -int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); -void ASN1_STRING_TABLE_cleanup(void); - -/* ASN1 template functions */ - -/* Old API compatible functions */ -ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); -void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); -ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, - long len, const ASN1_ITEM *it); -int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); -int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, - const ASN1_ITEM *it); - -void ASN1_add_oid_module(void); -void ASN1_add_stable_module(void); - -ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf); -ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf); -int ASN1_str2mask(const char *str, unsigned long *pmask); - -/* ASN1 Print flags */ - -/* Indicate missing OPTIONAL fields */ -# define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 -/* Mark start and end of SEQUENCE */ -# define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 -/* Mark start and end of SEQUENCE/SET OF */ -# define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 -/* Show the ASN1 type of primitives */ -# define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 -/* Don't show ASN1 type of ANY */ -# define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 -/* Don't show ASN1 type of MSTRINGs */ -# define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 -/* Don't show field names in SEQUENCE */ -# define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 -/* Show structure names of each SEQUENCE field */ -# define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 -/* Don't show structure name even at top level */ -# define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 - -int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, - const ASN1_ITEM *it, const ASN1_PCTX *pctx); -ASN1_PCTX *ASN1_PCTX_new(void); -void ASN1_PCTX_free(ASN1_PCTX *p); -unsigned long ASN1_PCTX_get_flags(const ASN1_PCTX *p); -void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_nm_flags(const ASN1_PCTX *p); -void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_cert_flags(const ASN1_PCTX *p); -void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_oid_flags(const ASN1_PCTX *p); -void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_str_flags(const ASN1_PCTX *p); -void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); - -ASN1_SCTX *ASN1_SCTX_new(int (*scan_cb) (ASN1_SCTX *ctx)); -void ASN1_SCTX_free(ASN1_SCTX *p); -const ASN1_ITEM *ASN1_SCTX_get_item(ASN1_SCTX *p); -const ASN1_TEMPLATE *ASN1_SCTX_get_template(ASN1_SCTX *p); -unsigned long ASN1_SCTX_get_flags(ASN1_SCTX *p); -void ASN1_SCTX_set_app_data(ASN1_SCTX *p, void *data); -void *ASN1_SCTX_get_app_data(ASN1_SCTX *p); - -const BIO_METHOD *BIO_f_asn1(void); - -BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); - -int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, - const ASN1_ITEM *it); -int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, - const char *hdr, const ASN1_ITEM *it); -int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, - int ctype_nid, int econt_nid, - STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); -ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); -int SMIME_crlf_copy(BIO *in, BIO *out, int flags); -int SMIME_text(BIO *in, BIO *out); - -const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); -const ASN1_ITEM *ASN1_ITEM_get(size_t i); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/asn1_mac.h b/submodules/MtProtoKit/openssl/openssl/asn1_mac.h deleted file mode 100644 index 7ac1782a3f..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/asn1_mac.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#error "This file is obsolete; please update your software." diff --git a/submodules/MtProtoKit/openssl/openssl/asn1err.h b/submodules/MtProtoKit/openssl/openssl/asn1err.h deleted file mode 100644 index faed5a5518..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/asn1err.h +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ASN1ERR_H -# define HEADER_ASN1ERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ASN1_strings(void); - -/* - * ASN1 function codes. - */ -# define ASN1_F_A2D_ASN1_OBJECT 100 -# define ASN1_F_A2I_ASN1_INTEGER 102 -# define ASN1_F_A2I_ASN1_STRING 103 -# define ASN1_F_APPEND_EXP 176 -# define ASN1_F_ASN1_BIO_INIT 113 -# define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 -# define ASN1_F_ASN1_CB 177 -# define ASN1_F_ASN1_CHECK_TLEN 104 -# define ASN1_F_ASN1_COLLECT 106 -# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 -# define ASN1_F_ASN1_D2I_FP 109 -# define ASN1_F_ASN1_D2I_READ_BIO 107 -# define ASN1_F_ASN1_DIGEST 184 -# define ASN1_F_ASN1_DO_ADB 110 -# define ASN1_F_ASN1_DO_LOCK 233 -# define ASN1_F_ASN1_DUP 111 -# define ASN1_F_ASN1_ENC_SAVE 115 -# define ASN1_F_ASN1_EX_C2I 204 -# define ASN1_F_ASN1_FIND_END 190 -# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 -# define ASN1_F_ASN1_GENERATE_V3 178 -# define ASN1_F_ASN1_GET_INT64 224 -# define ASN1_F_ASN1_GET_OBJECT 114 -# define ASN1_F_ASN1_GET_UINT64 225 -# define ASN1_F_ASN1_I2D_BIO 116 -# define ASN1_F_ASN1_I2D_FP 117 -# define ASN1_F_ASN1_ITEM_D2I_FP 206 -# define ASN1_F_ASN1_ITEM_DUP 191 -# define ASN1_F_ASN1_ITEM_EMBED_D2I 120 -# define ASN1_F_ASN1_ITEM_EMBED_NEW 121 -# define ASN1_F_ASN1_ITEM_FLAGS_I2D 118 -# define ASN1_F_ASN1_ITEM_I2D_BIO 192 -# define ASN1_F_ASN1_ITEM_I2D_FP 193 -# define ASN1_F_ASN1_ITEM_PACK 198 -# define ASN1_F_ASN1_ITEM_SIGN 195 -# define ASN1_F_ASN1_ITEM_SIGN_CTX 220 -# define ASN1_F_ASN1_ITEM_UNPACK 199 -# define ASN1_F_ASN1_ITEM_VERIFY 197 -# define ASN1_F_ASN1_MBSTRING_NCOPY 122 -# define ASN1_F_ASN1_OBJECT_NEW 123 -# define ASN1_F_ASN1_OUTPUT_DATA 214 -# define ASN1_F_ASN1_PCTX_NEW 205 -# define ASN1_F_ASN1_PRIMITIVE_NEW 119 -# define ASN1_F_ASN1_SCTX_NEW 221 -# define ASN1_F_ASN1_SIGN 128 -# define ASN1_F_ASN1_STR2TYPE 179 -# define ASN1_F_ASN1_STRING_GET_INT64 227 -# define ASN1_F_ASN1_STRING_GET_UINT64 230 -# define ASN1_F_ASN1_STRING_SET 186 -# define ASN1_F_ASN1_STRING_TABLE_ADD 129 -# define ASN1_F_ASN1_STRING_TO_BN 228 -# define ASN1_F_ASN1_STRING_TYPE_NEW 130 -# define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 -# define ASN1_F_ASN1_TEMPLATE_NEW 133 -# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 -# define ASN1_F_ASN1_TIME_ADJ 217 -# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 -# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 -# define ASN1_F_ASN1_UTCTIME_ADJ 218 -# define ASN1_F_ASN1_VERIFY 137 -# define ASN1_F_B64_READ_ASN1 209 -# define ASN1_F_B64_WRITE_ASN1 210 -# define ASN1_F_BIO_NEW_NDEF 208 -# define ASN1_F_BITSTR_CB 180 -# define ASN1_F_BN_TO_ASN1_STRING 229 -# define ASN1_F_C2I_ASN1_BIT_STRING 189 -# define ASN1_F_C2I_ASN1_INTEGER 194 -# define ASN1_F_C2I_ASN1_OBJECT 196 -# define ASN1_F_C2I_IBUF 226 -# define ASN1_F_C2I_UINT64_INT 101 -# define ASN1_F_COLLECT_DATA 140 -# define ASN1_F_D2I_ASN1_OBJECT 147 -# define ASN1_F_D2I_ASN1_UINTEGER 150 -# define ASN1_F_D2I_AUTOPRIVATEKEY 207 -# define ASN1_F_D2I_PRIVATEKEY 154 -# define ASN1_F_D2I_PUBLICKEY 155 -# define ASN1_F_DO_BUF 142 -# define ASN1_F_DO_CREATE 124 -# define ASN1_F_DO_DUMP 125 -# define ASN1_F_DO_TCREATE 222 -# define ASN1_F_I2A_ASN1_OBJECT 126 -# define ASN1_F_I2D_ASN1_BIO_STREAM 211 -# define ASN1_F_I2D_ASN1_OBJECT 143 -# define ASN1_F_I2D_DSA_PUBKEY 161 -# define ASN1_F_I2D_EC_PUBKEY 181 -# define ASN1_F_I2D_PRIVATEKEY 163 -# define ASN1_F_I2D_PUBLICKEY 164 -# define ASN1_F_I2D_RSA_PUBKEY 165 -# define ASN1_F_LONG_C2I 166 -# define ASN1_F_NDEF_PREFIX 127 -# define ASN1_F_NDEF_SUFFIX 136 -# define ASN1_F_OID_MODULE_INIT 174 -# define ASN1_F_PARSE_TAGGING 182 -# define ASN1_F_PKCS5_PBE2_SET_IV 167 -# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 231 -# define ASN1_F_PKCS5_PBE_SET 202 -# define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 -# define ASN1_F_PKCS5_PBKDF2_SET 219 -# define ASN1_F_PKCS5_SCRYPT_SET 232 -# define ASN1_F_SMIME_READ_ASN1 212 -# define ASN1_F_SMIME_TEXT 213 -# define ASN1_F_STABLE_GET 138 -# define ASN1_F_STBL_MODULE_INIT 223 -# define ASN1_F_UINT32_C2I 105 -# define ASN1_F_UINT32_NEW 139 -# define ASN1_F_UINT64_C2I 112 -# define ASN1_F_UINT64_NEW 141 -# define ASN1_F_X509_CRL_ADD0_REVOKED 169 -# define ASN1_F_X509_INFO_NEW 170 -# define ASN1_F_X509_NAME_ENCODE 203 -# define ASN1_F_X509_NAME_EX_D2I 158 -# define ASN1_F_X509_NAME_EX_NEW 171 -# define ASN1_F_X509_PKEY_NEW 173 - -/* - * ASN1 reason codes. - */ -# define ASN1_R_ADDING_OBJECT 171 -# define ASN1_R_ASN1_PARSE_ERROR 203 -# define ASN1_R_ASN1_SIG_PARSE_ERROR 204 -# define ASN1_R_AUX_ERROR 100 -# define ASN1_R_BAD_OBJECT_HEADER 102 -# define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214 -# define ASN1_R_BN_LIB 105 -# define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 -# define ASN1_R_BUFFER_TOO_SMALL 107 -# define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108 -# define ASN1_R_CONTEXT_NOT_INITIALISED 217 -# define ASN1_R_DATA_IS_WRONG 109 -# define ASN1_R_DECODE_ERROR 110 -# define ASN1_R_DEPTH_EXCEEDED 174 -# define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198 -# define ASN1_R_ENCODE_ERROR 112 -# define ASN1_R_ERROR_GETTING_TIME 173 -# define ASN1_R_ERROR_LOADING_SECTION 172 -# define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114 -# define ASN1_R_EXPECTING_AN_INTEGER 115 -# define ASN1_R_EXPECTING_AN_OBJECT 116 -# define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119 -# define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120 -# define ASN1_R_FIELD_MISSING 121 -# define ASN1_R_FIRST_NUM_TOO_LARGE 122 -# define ASN1_R_HEADER_TOO_LONG 123 -# define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175 -# define ASN1_R_ILLEGAL_BOOLEAN 176 -# define ASN1_R_ILLEGAL_CHARACTERS 124 -# define ASN1_R_ILLEGAL_FORMAT 177 -# define ASN1_R_ILLEGAL_HEX 178 -# define ASN1_R_ILLEGAL_IMPLICIT_TAG 179 -# define ASN1_R_ILLEGAL_INTEGER 180 -# define ASN1_R_ILLEGAL_NEGATIVE_VALUE 226 -# define ASN1_R_ILLEGAL_NESTED_TAGGING 181 -# define ASN1_R_ILLEGAL_NULL 125 -# define ASN1_R_ILLEGAL_NULL_VALUE 182 -# define ASN1_R_ILLEGAL_OBJECT 183 -# define ASN1_R_ILLEGAL_OPTIONAL_ANY 126 -# define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170 -# define ASN1_R_ILLEGAL_PADDING 221 -# define ASN1_R_ILLEGAL_TAGGED_ANY 127 -# define ASN1_R_ILLEGAL_TIME_VALUE 184 -# define ASN1_R_ILLEGAL_ZERO_CONTENT 222 -# define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 -# define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 -# define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220 -# define ASN1_R_INVALID_BMPSTRING_LENGTH 129 -# define ASN1_R_INVALID_DIGIT 130 -# define ASN1_R_INVALID_MIME_TYPE 205 -# define ASN1_R_INVALID_MODIFIER 186 -# define ASN1_R_INVALID_NUMBER 187 -# define ASN1_R_INVALID_OBJECT_ENCODING 216 -# define ASN1_R_INVALID_SCRYPT_PARAMETERS 227 -# define ASN1_R_INVALID_SEPARATOR 131 -# define ASN1_R_INVALID_STRING_TABLE_VALUE 218 -# define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 -# define ASN1_R_INVALID_UTF8STRING 134 -# define ASN1_R_INVALID_VALUE 219 -# define ASN1_R_LIST_ERROR 188 -# define ASN1_R_MIME_NO_CONTENT_TYPE 206 -# define ASN1_R_MIME_PARSE_ERROR 207 -# define ASN1_R_MIME_SIG_PARSE_ERROR 208 -# define ASN1_R_MISSING_EOC 137 -# define ASN1_R_MISSING_SECOND_NUMBER 138 -# define ASN1_R_MISSING_VALUE 189 -# define ASN1_R_MSTRING_NOT_UNIVERSAL 139 -# define ASN1_R_MSTRING_WRONG_TAG 140 -# define ASN1_R_NESTED_ASN1_STRING 197 -# define ASN1_R_NESTED_TOO_DEEP 201 -# define ASN1_R_NON_HEX_CHARACTERS 141 -# define ASN1_R_NOT_ASCII_FORMAT 190 -# define ASN1_R_NOT_ENOUGH_DATA 142 -# define ASN1_R_NO_CONTENT_TYPE 209 -# define ASN1_R_NO_MATCHING_CHOICE_TYPE 143 -# define ASN1_R_NO_MULTIPART_BODY_FAILURE 210 -# define ASN1_R_NO_MULTIPART_BOUNDARY 211 -# define ASN1_R_NO_SIG_CONTENT_TYPE 212 -# define ASN1_R_NULL_IS_WRONG_LENGTH 144 -# define ASN1_R_OBJECT_NOT_ASCII_FORMAT 191 -# define ASN1_R_ODD_NUMBER_OF_CHARS 145 -# define ASN1_R_SECOND_NUMBER_TOO_LARGE 147 -# define ASN1_R_SEQUENCE_LENGTH_MISMATCH 148 -# define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 149 -# define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 192 -# define ASN1_R_SHORT_LINE 150 -# define ASN1_R_SIG_INVALID_MIME_TYPE 213 -# define ASN1_R_STREAMING_NOT_SUPPORTED 202 -# define ASN1_R_STRING_TOO_LONG 151 -# define ASN1_R_STRING_TOO_SHORT 152 -# define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 -# define ASN1_R_TIME_NOT_ASCII_FORMAT 193 -# define ASN1_R_TOO_LARGE 223 -# define ASN1_R_TOO_LONG 155 -# define ASN1_R_TOO_SMALL 224 -# define ASN1_R_TYPE_NOT_CONSTRUCTED 156 -# define ASN1_R_TYPE_NOT_PRIMITIVE 195 -# define ASN1_R_UNEXPECTED_EOC 159 -# define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 -# define ASN1_R_UNKNOWN_FORMAT 160 -# define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 -# define ASN1_R_UNKNOWN_OBJECT_TYPE 162 -# define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 163 -# define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 199 -# define ASN1_R_UNKNOWN_TAG 194 -# define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 -# define ASN1_R_UNSUPPORTED_CIPHER 228 -# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 -# define ASN1_R_UNSUPPORTED_TYPE 196 -# define ASN1_R_WRONG_INTEGER_TYPE 225 -# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 -# define ASN1_R_WRONG_TAG 168 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/asn1t.h b/submodules/MtProtoKit/openssl/openssl/asn1t.h deleted file mode 100644 index a450ba0d9d..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/asn1t.h +++ /dev/null @@ -1,945 +0,0 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ASN1T_H -# define HEADER_ASN1T_H - -# include -# include -# include - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -/* ASN1 template defines, structures and functions */ - -#ifdef __cplusplus -extern "C" { -#endif - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) - -/* Macros for start and end of ASN1_ITEM definition */ - -# define ASN1_ITEM_start(itname) \ - const ASN1_ITEM itname##_it = { - -# define static_ASN1_ITEM_start(itname) \ - static const ASN1_ITEM itname##_it = { - -# define ASN1_ITEM_end(itname) \ - }; - -# else - -/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) - -/* Macros for start and end of ASN1_ITEM definition */ - -# define ASN1_ITEM_start(itname) \ - const ASN1_ITEM * itname##_it(void) \ - { \ - static const ASN1_ITEM local_it = { - -# define static_ASN1_ITEM_start(itname) \ - static ASN1_ITEM_start(itname) - -# define ASN1_ITEM_end(itname) \ - }; \ - return &local_it; \ - } - -# endif - -/* Macros to aid ASN1 template writing */ - -# define ASN1_ITEM_TEMPLATE(tname) \ - static const ASN1_TEMPLATE tname##_item_tt - -# define ASN1_ITEM_TEMPLATE_END(tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_PRIMITIVE,\ - -1,\ - &tname##_item_tt,\ - 0,\ - NULL,\ - 0,\ - #tname \ - ASN1_ITEM_end(tname) -# define static_ASN1_ITEM_TEMPLATE_END(tname) \ - ;\ - static_ASN1_ITEM_start(tname) \ - ASN1_ITYPE_PRIMITIVE,\ - -1,\ - &tname##_item_tt,\ - 0,\ - NULL,\ - 0,\ - #tname \ - ASN1_ITEM_end(tname) - -/* This is a ASN1 type which just embeds a template */ - -/*- - * This pair helps declare a SEQUENCE. We can do: - * - * ASN1_SEQUENCE(stname) = { - * ... SEQUENCE components ... - * } ASN1_SEQUENCE_END(stname) - * - * This will produce an ASN1_ITEM called stname_it - * for a structure called stname. - * - * If you want the same structure but a different - * name then use: - * - * ASN1_SEQUENCE(itname) = { - * ... SEQUENCE components ... - * } ASN1_SEQUENCE_END_name(stname, itname) - * - * This will create an item called itname_it using - * a structure called stname. - */ - -# define ASN1_SEQUENCE(tname) \ - static const ASN1_TEMPLATE tname##_seq_tt[] - -# define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname) - -# define static_ASN1_SEQUENCE_END(stname) static_ASN1_SEQUENCE_END_name(stname, stname) - -# define ASN1_SEQUENCE_END_name(stname, tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(stname),\ - #tname \ - ASN1_ITEM_end(tname) - -# define static_ASN1_SEQUENCE_END_name(stname, tname) \ - ;\ - static_ASN1_ITEM_start(tname) \ - ASN1_ITYPE_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -# define ASN1_NDEF_SEQUENCE(tname) \ - ASN1_SEQUENCE(tname) - -# define ASN1_NDEF_SEQUENCE_cb(tname, cb) \ - ASN1_SEQUENCE_cb(tname, cb) - -# define ASN1_SEQUENCE_cb(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_BROKEN_SEQUENCE(tname) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_SEQUENCE_ref(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_SEQUENCE_enc(tname, enc, cb) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_NDEF_SEQUENCE_END(tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_NDEF_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(tname),\ - #tname \ - ASN1_ITEM_end(tname) -# define static_ASN1_NDEF_SEQUENCE_END(tname) \ - ;\ - static_ASN1_ITEM_start(tname) \ - ASN1_ITYPE_NDEF_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(tname),\ - #tname \ - ASN1_ITEM_end(tname) - -# define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname) -# define static_ASN1_BROKEN_SEQUENCE_END(stname) \ - static_ASN1_SEQUENCE_END_ref(stname, stname) - -# define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) - -# define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) -# define static_ASN1_SEQUENCE_END_cb(stname, tname) static_ASN1_SEQUENCE_END_ref(stname, tname) - -# define ASN1_SEQUENCE_END_ref(stname, tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - &tname##_aux,\ - sizeof(stname),\ - #tname \ - ASN1_ITEM_end(tname) -# define static_ASN1_SEQUENCE_END_ref(stname, tname) \ - ;\ - static_ASN1_ITEM_start(tname) \ - ASN1_ITYPE_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - &tname##_aux,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -# define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_NDEF_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - &tname##_aux,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -/*- - * This pair helps declare a CHOICE type. We can do: - * - * ASN1_CHOICE(chname) = { - * ... CHOICE options ... - * ASN1_CHOICE_END(chname) - * - * This will produce an ASN1_ITEM called chname_it - * for a structure called chname. The structure - * definition must look like this: - * typedef struct { - * int type; - * union { - * ASN1_SOMETHING *opt1; - * ASN1_SOMEOTHER *opt2; - * } value; - * } chname; - * - * the name of the selector must be 'type'. - * to use an alternative selector name use the - * ASN1_CHOICE_END_selector() version. - */ - -# define ASN1_CHOICE(tname) \ - static const ASN1_TEMPLATE tname##_ch_tt[] - -# define ASN1_CHOICE_cb(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ - ASN1_CHOICE(tname) - -# define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) - -# define static_ASN1_CHOICE_END(stname) static_ASN1_CHOICE_END_name(stname, stname) - -# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) - -# define static_ASN1_CHOICE_END_name(stname, tname) static_ASN1_CHOICE_END_selector(stname, tname, type) - -# define ASN1_CHOICE_END_selector(stname, tname, selname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_CHOICE,\ - offsetof(stname,selname) ,\ - tname##_ch_tt,\ - sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -# define static_ASN1_CHOICE_END_selector(stname, tname, selname) \ - ;\ - static_ASN1_ITEM_start(tname) \ - ASN1_ITYPE_CHOICE,\ - offsetof(stname,selname) ,\ - tname##_ch_tt,\ - sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -# define ASN1_CHOICE_END_cb(stname, tname, selname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_CHOICE,\ - offsetof(stname,selname) ,\ - tname##_ch_tt,\ - sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ - &tname##_aux,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -/* This helps with the template wrapper form of ASN1_ITEM */ - -# define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \ - (flags), (tag), 0,\ - #name, ASN1_ITEM_ref(type) } - -/* These help with SEQUENCE or CHOICE components */ - -/* used to declare other types */ - -# define ASN1_EX_TYPE(flags, tag, stname, field, type) { \ - (flags), (tag), offsetof(stname, field),\ - #field, ASN1_ITEM_ref(type) } - -/* implicit and explicit helper macros */ - -# define ASN1_IMP_EX(stname, field, type, tag, ex) \ - ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | (ex), tag, stname, field, type) - -# define ASN1_EXP_EX(stname, field, type, tag, ex) \ - ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | (ex), tag, stname, field, type) - -/* Any defined by macros: the field used is in the table itself */ - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# else -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } -# endif -/* Plain simple type */ -# define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) -/* Embedded simple type */ -# define ASN1_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_EMBED,0, stname, field, type) - -/* OPTIONAL simple type */ -# define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type) -# define ASN1_OPT_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED, 0, stname, field, type) - -/* IMPLICIT tagged simple type */ -# define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0) -# define ASN1_IMP_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) - -/* IMPLICIT tagged OPTIONAL simple type */ -# define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) -# define ASN1_IMP_OPT_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) - -/* Same as above but EXPLICIT */ - -# define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0) -# define ASN1_EXP_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) -# define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) -# define ASN1_EXP_OPT_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) - -/* SEQUENCE OF type */ -# define ASN1_SEQUENCE_OF(stname, field, type) \ - ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type) - -/* OPTIONAL SEQUENCE OF */ -# define ASN1_SEQUENCE_OF_OPT(stname, field, type) \ - ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) - -/* Same as above but for SET OF */ - -# define ASN1_SET_OF(stname, field, type) \ - ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type) - -# define ASN1_SET_OF_OPT(stname, field, type) \ - ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) - -/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */ - -# define ASN1_IMP_SET_OF(stname, field, type, tag) \ - ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) - -# define ASN1_EXP_SET_OF(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) - -# define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \ - ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) - -# define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) - -# define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \ - ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) - -# define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \ - ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) - -# define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) - -# define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) - -/* EXPLICIT using indefinite length constructed form */ -# define ASN1_NDEF_EXP(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF) - -/* EXPLICIT OPTIONAL using indefinite length constructed form */ -# define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \ - ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF) - -/* Macros for the ASN1_ADB structure */ - -# define ASN1_ADB(name) \ - static const ASN1_ADB_TABLE name##_adbtbl[] - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ - ;\ - static const ASN1_ADB name##_adb = {\ - flags,\ - offsetof(name, field),\ - adb_cb,\ - name##_adbtbl,\ - sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ - def,\ - none\ - } - -# else - -# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ - ;\ - static const ASN1_ITEM *name##_adb(void) \ - { \ - static const ASN1_ADB internal_adb = \ - {\ - flags,\ - offsetof(name, field),\ - adb_cb,\ - name##_adbtbl,\ - sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ - def,\ - none\ - }; \ - return (const ASN1_ITEM *) &internal_adb; \ - } \ - void dummy_function(void) - -# endif - -# define ADB_ENTRY(val, template) {val, template} - -# define ASN1_ADB_TEMPLATE(name) \ - static const ASN1_TEMPLATE name##_tt - -/* - * This is the ASN1 template structure that defines a wrapper round the - * actual type. It determines the actual position of the field in the value - * structure, various flags such as OPTIONAL and the field name. - */ - -struct ASN1_TEMPLATE_st { - unsigned long flags; /* Various flags */ - long tag; /* tag, not used if no tagging */ - unsigned long offset; /* Offset of this field in structure */ - const char *field_name; /* Field name */ - ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */ -}; - -/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */ - -# define ASN1_TEMPLATE_item(t) (t->item_ptr) -# define ASN1_TEMPLATE_adb(t) (t->item_ptr) - -typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE; -typedef struct ASN1_ADB_st ASN1_ADB; - -struct ASN1_ADB_st { - unsigned long flags; /* Various flags */ - unsigned long offset; /* Offset of selector field */ - int (*adb_cb)(long *psel); /* Application callback */ - const ASN1_ADB_TABLE *tbl; /* Table of possible types */ - long tblcount; /* Number of entries in tbl */ - const ASN1_TEMPLATE *default_tt; /* Type to use if no match */ - const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */ -}; - -struct ASN1_ADB_TABLE_st { - long value; /* NID for an object or value for an int */ - const ASN1_TEMPLATE tt; /* item for this value */ -}; - -/* template flags */ - -/* Field is optional */ -# define ASN1_TFLG_OPTIONAL (0x1) - -/* Field is a SET OF */ -# define ASN1_TFLG_SET_OF (0x1 << 1) - -/* Field is a SEQUENCE OF */ -# define ASN1_TFLG_SEQUENCE_OF (0x2 << 1) - -/* - * Special case: this refers to a SET OF that will be sorted into DER order - * when encoded *and* the corresponding STACK will be modified to match the - * new order. - */ -# define ASN1_TFLG_SET_ORDER (0x3 << 1) - -/* Mask for SET OF or SEQUENCE OF */ -# define ASN1_TFLG_SK_MASK (0x3 << 1) - -/* - * These flags mean the tag should be taken from the tag field. If EXPLICIT - * then the underlying type is used for the inner tag. - */ - -/* IMPLICIT tagging */ -# define ASN1_TFLG_IMPTAG (0x1 << 3) - -/* EXPLICIT tagging, inner tag from underlying type */ -# define ASN1_TFLG_EXPTAG (0x2 << 3) - -# define ASN1_TFLG_TAG_MASK (0x3 << 3) - -/* context specific IMPLICIT */ -# define ASN1_TFLG_IMPLICIT (ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT) - -/* context specific EXPLICIT */ -# define ASN1_TFLG_EXPLICIT (ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT) - -/* - * If tagging is in force these determine the type of tag to use. Otherwise - * the tag is determined by the underlying type. These values reflect the - * actual octet format. - */ - -/* Universal tag */ -# define ASN1_TFLG_UNIVERSAL (0x0<<6) -/* Application tag */ -# define ASN1_TFLG_APPLICATION (0x1<<6) -/* Context specific tag */ -# define ASN1_TFLG_CONTEXT (0x2<<6) -/* Private tag */ -# define ASN1_TFLG_PRIVATE (0x3<<6) - -# define ASN1_TFLG_TAG_CLASS (0x3<<6) - -/* - * These are for ANY DEFINED BY type. In this case the 'item' field points to - * an ASN1_ADB structure which contains a table of values to decode the - * relevant type - */ - -# define ASN1_TFLG_ADB_MASK (0x3<<8) - -# define ASN1_TFLG_ADB_OID (0x1<<8) - -# define ASN1_TFLG_ADB_INT (0x1<<9) - -/* - * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes - * indefinite length constructed encoding to be used if required. - */ - -# define ASN1_TFLG_NDEF (0x1<<11) - -/* Field is embedded and not a pointer */ -# define ASN1_TFLG_EMBED (0x1 << 12) - -/* This is the actual ASN1 item itself */ - -struct ASN1_ITEM_st { - char itype; /* The item type, primitive, SEQUENCE, CHOICE - * or extern */ - long utype; /* underlying type */ - const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains - * the contents */ - long tcount; /* Number of templates if SEQUENCE or CHOICE */ - const void *funcs; /* functions that handle this type */ - long size; /* Structure size (usually) */ - const char *sname; /* Structure name */ -}; - -/*- - * These are values for the itype field and - * determine how the type is interpreted. - * - * For PRIMITIVE types the underlying type - * determines the behaviour if items is NULL. - * - * Otherwise templates must contain a single - * template and the type is treated in the - * same way as the type specified in the template. - * - * For SEQUENCE types the templates field points - * to the members, the size field is the - * structure size. - * - * For CHOICE types the templates field points - * to each possible member (typically a union) - * and the 'size' field is the offset of the - * selector. - * - * The 'funcs' field is used for application - * specific functions. - * - * The EXTERN type uses a new style d2i/i2d. - * The new style should be used where possible - * because it avoids things like the d2i IMPLICIT - * hack. - * - * MSTRING is a multiple string type, it is used - * for a CHOICE of character strings where the - * actual strings all occupy an ASN1_STRING - * structure. In this case the 'utype' field - * has a special meaning, it is used as a mask - * of acceptable types using the B_ASN1 constants. - * - * NDEF_SEQUENCE is the same as SEQUENCE except - * that it will use indefinite length constructed - * encoding if requested. - * - */ - -# define ASN1_ITYPE_PRIMITIVE 0x0 - -# define ASN1_ITYPE_SEQUENCE 0x1 - -# define ASN1_ITYPE_CHOICE 0x2 - -# define ASN1_ITYPE_EXTERN 0x4 - -# define ASN1_ITYPE_MSTRING 0x5 - -# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 - -/* - * Cache for ASN1 tag and length, so we don't keep re-reading it for things - * like CHOICE - */ - -struct ASN1_TLC_st { - char valid; /* Values below are valid */ - int ret; /* return value */ - long plen; /* length */ - int ptag; /* class value */ - int pclass; /* class value */ - int hdrlen; /* header length */ -}; - -/* Typedefs for ASN1 function pointers */ -typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, - const ASN1_ITEM *it, int tag, int aclass, char opt, - ASN1_TLC *ctx); - -typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, - const ASN1_ITEM *it, int tag, int aclass); -typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); -typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); - -typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, - int indent, const char *fname, - const ASN1_PCTX *pctx); - -typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, - int *putype, const ASN1_ITEM *it); -typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, - int len, int utype, char *free_cont, - const ASN1_ITEM *it); -typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, - const ASN1_ITEM *it, int indent, - const ASN1_PCTX *pctx); - -typedef struct ASN1_EXTERN_FUNCS_st { - void *app_data; - ASN1_ex_new_func *asn1_ex_new; - ASN1_ex_free_func *asn1_ex_free; - ASN1_ex_free_func *asn1_ex_clear; - ASN1_ex_d2i *asn1_ex_d2i; - ASN1_ex_i2d *asn1_ex_i2d; - ASN1_ex_print_func *asn1_ex_print; -} ASN1_EXTERN_FUNCS; - -typedef struct ASN1_PRIMITIVE_FUNCS_st { - void *app_data; - unsigned long flags; - ASN1_ex_new_func *prim_new; - ASN1_ex_free_func *prim_free; - ASN1_ex_free_func *prim_clear; - ASN1_primitive_c2i *prim_c2i; - ASN1_primitive_i2c *prim_i2c; - ASN1_primitive_print *prim_print; -} ASN1_PRIMITIVE_FUNCS; - -/* - * This is the ASN1_AUX structure: it handles various miscellaneous - * requirements. For example the use of reference counts and an informational - * callback. The "informational callback" is called at various points during - * the ASN1 encoding and decoding. It can be used to provide minor - * customisation of the structures used. This is most useful where the - * supplied routines *almost* do the right thing but need some extra help at - * a few points. If the callback returns zero then it is assumed a fatal - * error has occurred and the main operation should be abandoned. If major - * changes in the default behaviour are required then an external type is - * more appropriate. - */ - -typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, - void *exarg); - -typedef struct ASN1_AUX_st { - void *app_data; - int flags; - int ref_offset; /* Offset of reference value */ - int ref_lock; /* Lock type to use */ - ASN1_aux_cb *asn1_cb; - int enc_offset; /* Offset of ASN1_ENCODING structure */ -} ASN1_AUX; - -/* For print related callbacks exarg points to this structure */ -typedef struct ASN1_PRINT_ARG_st { - BIO *out; - int indent; - const ASN1_PCTX *pctx; -} ASN1_PRINT_ARG; - -/* For streaming related callbacks exarg points to this structure */ -typedef struct ASN1_STREAM_ARG_st { - /* BIO to stream through */ - BIO *out; - /* BIO with filters appended */ - BIO *ndef_bio; - /* Streaming I/O boundary */ - unsigned char **boundary; -} ASN1_STREAM_ARG; - -/* Flags in ASN1_AUX */ - -/* Use a reference count */ -# define ASN1_AFLG_REFCOUNT 1 -/* Save the encoding of structure (useful for signatures) */ -# define ASN1_AFLG_ENCODING 2 -/* The Sequence length is invalid */ -# define ASN1_AFLG_BROKEN 4 - -/* operation values for asn1_cb */ - -# define ASN1_OP_NEW_PRE 0 -# define ASN1_OP_NEW_POST 1 -# define ASN1_OP_FREE_PRE 2 -# define ASN1_OP_FREE_POST 3 -# define ASN1_OP_D2I_PRE 4 -# define ASN1_OP_D2I_POST 5 -# define ASN1_OP_I2D_PRE 6 -# define ASN1_OP_I2D_POST 7 -# define ASN1_OP_PRINT_PRE 8 -# define ASN1_OP_PRINT_POST 9 -# define ASN1_OP_STREAM_PRE 10 -# define ASN1_OP_STREAM_POST 11 -# define ASN1_OP_DETACHED_PRE 12 -# define ASN1_OP_DETACHED_POST 13 - -/* Macro to implement a primitive type */ -# define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) -# define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \ - ASN1_ITEM_start(itname) \ - ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \ - ASN1_ITEM_end(itname) - -/* Macro to implement a multi string type */ -# define IMPLEMENT_ASN1_MSTRING(itname, mask) \ - ASN1_ITEM_start(itname) \ - ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \ - ASN1_ITEM_end(itname) - -# define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \ - ASN1_ITEM_start(sname) \ - ASN1_ITYPE_EXTERN, \ - tag, \ - NULL, \ - 0, \ - &fptrs, \ - 0, \ - #sname \ - ASN1_ITEM_end(sname) - -/* Macro to implement standard functions in terms of ASN1_ITEM structures */ - -# define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname) - -# define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname) - -# define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ - IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) - -# define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) - -# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) - -# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ - pre stname *fname##_new(void) \ - { \ - return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ - } \ - pre void fname##_free(stname *a) \ - { \ - ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ - } - -# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ - stname *fname##_new(void) \ - { \ - return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ - } \ - void fname##_free(stname *a) \ - { \ - ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ - } - -# define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) - -# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ - stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ - { \ - return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ - } \ - int i2d_##fname(stname *a, unsigned char **out) \ - { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ - } - -# define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ - int i2d_##stname##_NDEF(stname *a, unsigned char **out) \ - { \ - return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ - } - -# define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \ - static stname *d2i_##stname(stname **a, \ - const unsigned char **in, long len) \ - { \ - return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \ - ASN1_ITEM_rptr(stname)); \ - } \ - static int i2d_##stname(stname *a, unsigned char **out) \ - { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, \ - ASN1_ITEM_rptr(stname)); \ - } - -/* - * This includes evil casts to remove const: they will go away when full ASN1 - * constification is done. - */ -# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ - { \ - return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ - } \ - int i2d_##fname(const stname *a, unsigned char **out) \ - { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ - } - -# define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ - stname * stname##_dup(stname *x) \ - { \ - return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ - } - -# define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ - IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) - -# define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ - const ASN1_PCTX *pctx) \ - { \ - return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ - ASN1_ITEM_rptr(itname), pctx); \ - } - -# define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ - IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) - -# define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) - -/* external definitions for primitive types */ - -DECLARE_ASN1_ITEM(ASN1_BOOLEAN) -DECLARE_ASN1_ITEM(ASN1_TBOOLEAN) -DECLARE_ASN1_ITEM(ASN1_FBOOLEAN) -DECLARE_ASN1_ITEM(ASN1_SEQUENCE) -DECLARE_ASN1_ITEM(CBIGNUM) -DECLARE_ASN1_ITEM(BIGNUM) -DECLARE_ASN1_ITEM(INT32) -DECLARE_ASN1_ITEM(ZINT32) -DECLARE_ASN1_ITEM(UINT32) -DECLARE_ASN1_ITEM(ZUINT32) -DECLARE_ASN1_ITEM(INT64) -DECLARE_ASN1_ITEM(ZINT64) -DECLARE_ASN1_ITEM(UINT64) -DECLARE_ASN1_ITEM(ZUINT64) - -# if OPENSSL_API_COMPAT < 0x10200000L -/* - * LONG and ZLONG are strongly discouraged for use as stored data, as the - * underlying C type (long) differs in size depending on the architecture. - * They are designed with 32-bit longs in mind. - */ -DECLARE_ASN1_ITEM(LONG) -DECLARE_ASN1_ITEM(ZLONG) -# endif - -DEFINE_STACK_OF(ASN1_VALUE) - -/* Functions used internally by the ASN1 code */ - -int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it); -void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it); - -int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, - const ASN1_ITEM *it, int tag, int aclass, char opt, - ASN1_TLC *ctx); - -int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, - const ASN1_ITEM *it, int tag, int aclass); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/async.h b/submodules/MtProtoKit/openssl/openssl/async.h deleted file mode 100644 index 7052b89052..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/async.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include - -#ifndef HEADER_ASYNC_H -# define HEADER_ASYNC_H - -#if defined(_WIN32) -# if defined(BASETYPES) || defined(_WINDEF_H) -/* application has to include to use this */ -#define OSSL_ASYNC_FD HANDLE -#define OSSL_BAD_ASYNC_FD INVALID_HANDLE_VALUE -# endif -#else -#define OSSL_ASYNC_FD int -#define OSSL_BAD_ASYNC_FD -1 -#endif -# include - - -# ifdef __cplusplus -extern "C" { -# endif - -typedef struct async_job_st ASYNC_JOB; -typedef struct async_wait_ctx_st ASYNC_WAIT_CTX; - -#define ASYNC_ERR 0 -#define ASYNC_NO_JOBS 1 -#define ASYNC_PAUSE 2 -#define ASYNC_FINISH 3 - -int ASYNC_init_thread(size_t max_size, size_t init_size); -void ASYNC_cleanup_thread(void); - -#ifdef OSSL_ASYNC_FD -ASYNC_WAIT_CTX *ASYNC_WAIT_CTX_new(void); -void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx); -int ASYNC_WAIT_CTX_set_wait_fd(ASYNC_WAIT_CTX *ctx, const void *key, - OSSL_ASYNC_FD fd, - void *custom_data, - void (*cleanup)(ASYNC_WAIT_CTX *, const void *, - OSSL_ASYNC_FD, void *)); -int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX *ctx, const void *key, - OSSL_ASYNC_FD *fd, void **custom_data); -int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *fd, - size_t *numfds); -int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd, - size_t *numaddfds, OSSL_ASYNC_FD *delfd, - size_t *numdelfds); -int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key); -#endif - -int ASYNC_is_capable(void); - -int ASYNC_start_job(ASYNC_JOB **job, ASYNC_WAIT_CTX *ctx, int *ret, - int (*func)(void *), void *args, size_t size); -int ASYNC_pause_job(void); - -ASYNC_JOB *ASYNC_get_current_job(void); -ASYNC_WAIT_CTX *ASYNC_get_wait_ctx(ASYNC_JOB *job); -void ASYNC_block_pause(void); -void ASYNC_unblock_pause(void); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/asyncerr.h b/submodules/MtProtoKit/openssl/openssl/asyncerr.h deleted file mode 100644 index 91afbbb2f5..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/asyncerr.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ASYNCERR_H -# define HEADER_ASYNCERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ASYNC_strings(void); - -/* - * ASYNC function codes. - */ -# define ASYNC_F_ASYNC_CTX_NEW 100 -# define ASYNC_F_ASYNC_INIT_THREAD 101 -# define ASYNC_F_ASYNC_JOB_NEW 102 -# define ASYNC_F_ASYNC_PAUSE_JOB 103 -# define ASYNC_F_ASYNC_START_FUNC 104 -# define ASYNC_F_ASYNC_START_JOB 105 -# define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 106 - -/* - * ASYNC reason codes. - */ -# define ASYNC_R_FAILED_TO_SET_POOL 101 -# define ASYNC_R_FAILED_TO_SWAP_CONTEXT 102 -# define ASYNC_R_INIT_FAILED 105 -# define ASYNC_R_INVALID_POOL_SIZE 103 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/bio.h b/submodules/MtProtoKit/openssl/openssl/bio.h deleted file mode 100644 index e1fddfb796..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/bio.h +++ /dev/null @@ -1,800 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_BIO_H -# define HEADER_BIO_H - -# include - -# ifndef OPENSSL_NO_STDIO -# include -# endif -# include - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* There are the classes of BIOs */ -# define BIO_TYPE_DESCRIPTOR 0x0100 /* socket, fd, connect or accept */ -# define BIO_TYPE_FILTER 0x0200 -# define BIO_TYPE_SOURCE_SINK 0x0400 - -/* These are the 'types' of BIOs */ -# define BIO_TYPE_NONE 0 -# define BIO_TYPE_MEM ( 1|BIO_TYPE_SOURCE_SINK) -# define BIO_TYPE_FILE ( 2|BIO_TYPE_SOURCE_SINK) - -# define BIO_TYPE_FD ( 4|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) -# define BIO_TYPE_SOCKET ( 5|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) -# define BIO_TYPE_NULL ( 6|BIO_TYPE_SOURCE_SINK) -# define BIO_TYPE_SSL ( 7|BIO_TYPE_FILTER) -# define BIO_TYPE_MD ( 8|BIO_TYPE_FILTER) -# define BIO_TYPE_BUFFER ( 9|BIO_TYPE_FILTER) -# define BIO_TYPE_CIPHER (10|BIO_TYPE_FILTER) -# define BIO_TYPE_BASE64 (11|BIO_TYPE_FILTER) -# define BIO_TYPE_CONNECT (12|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) -# define BIO_TYPE_ACCEPT (13|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) - -# define BIO_TYPE_NBIO_TEST (16|BIO_TYPE_FILTER)/* server proxy BIO */ -# define BIO_TYPE_NULL_FILTER (17|BIO_TYPE_FILTER) -# define BIO_TYPE_BIO (19|BIO_TYPE_SOURCE_SINK)/* half a BIO pair */ -# define BIO_TYPE_LINEBUFFER (20|BIO_TYPE_FILTER) -# define BIO_TYPE_DGRAM (21|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) -# define BIO_TYPE_ASN1 (22|BIO_TYPE_FILTER) -# define BIO_TYPE_COMP (23|BIO_TYPE_FILTER) -# ifndef OPENSSL_NO_SCTP -# define BIO_TYPE_DGRAM_SCTP (24|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) -# endif - -#define BIO_TYPE_START 128 - -/* - * BIO_FILENAME_READ|BIO_CLOSE to open or close on free. - * BIO_set_fp(in,stdin,BIO_NOCLOSE); - */ -# define BIO_NOCLOSE 0x00 -# define BIO_CLOSE 0x01 - -/* - * These are used in the following macros and are passed to BIO_ctrl() - */ -# define BIO_CTRL_RESET 1/* opt - rewind/zero etc */ -# define BIO_CTRL_EOF 2/* opt - are we at the eof */ -# define BIO_CTRL_INFO 3/* opt - extra tit-bits */ -# define BIO_CTRL_SET 4/* man - set the 'IO' type */ -# define BIO_CTRL_GET 5/* man - get the 'IO' type */ -# define BIO_CTRL_PUSH 6/* opt - internal, used to signify change */ -# define BIO_CTRL_POP 7/* opt - internal, used to signify change */ -# define BIO_CTRL_GET_CLOSE 8/* man - set the 'close' on free */ -# define BIO_CTRL_SET_CLOSE 9/* man - set the 'close' on free */ -# define BIO_CTRL_PENDING 10/* opt - is their more data buffered */ -# define BIO_CTRL_FLUSH 11/* opt - 'flush' buffered output */ -# define BIO_CTRL_DUP 12/* man - extra stuff for 'duped' BIO */ -# define BIO_CTRL_WPENDING 13/* opt - number of bytes still to write */ -# define BIO_CTRL_SET_CALLBACK 14/* opt - set callback function */ -# define BIO_CTRL_GET_CALLBACK 15/* opt - set callback function */ - -# define BIO_CTRL_PEEK 29/* BIO_f_buffer special */ -# define BIO_CTRL_SET_FILENAME 30/* BIO_s_file special */ - -/* dgram BIO stuff */ -# define BIO_CTRL_DGRAM_CONNECT 31/* BIO dgram special */ -# define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected - * socket to be passed in */ -# define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */ -# define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */ -# define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */ -# define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ - -# define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ -# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation tiemd out */ - -/* #ifdef IP_MTU_DISCOVER */ -# define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ -/* #endif */ - -# define BIO_CTRL_DGRAM_QUERY_MTU 40/* as kernel for current MTU */ -# define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47 -# define BIO_CTRL_DGRAM_GET_MTU 41/* get cached value for MTU */ -# define BIO_CTRL_DGRAM_SET_MTU 42/* set cached value for MTU. - * want to use this if asking - * the kernel fails */ - -# define BIO_CTRL_DGRAM_MTU_EXCEEDED 43/* check whether the MTU was - * exceed in the previous write - * operation */ - -# define BIO_CTRL_DGRAM_GET_PEER 46 -# define BIO_CTRL_DGRAM_SET_PEER 44/* Destination for the data */ - -# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45/* Next DTLS handshake timeout - * to adjust socket timeouts */ -# define BIO_CTRL_DGRAM_SET_DONT_FRAG 48 - -# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD 49 - -/* Deliberately outside of OPENSSL_NO_SCTP - used in bss_dgram.c */ -# define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE 50 -# ifndef OPENSSL_NO_SCTP -/* SCTP stuff */ -# define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY 51 -# define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY 52 -# define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD 53 -# define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO 60 -# define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO 61 -# define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO 62 -# define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO 63 -# define BIO_CTRL_DGRAM_SCTP_GET_PRINFO 64 -# define BIO_CTRL_DGRAM_SCTP_SET_PRINFO 65 -# define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN 70 -# endif - -# define BIO_CTRL_DGRAM_SET_PEEK_MODE 71 - -/* modifiers */ -# define BIO_FP_READ 0x02 -# define BIO_FP_WRITE 0x04 -# define BIO_FP_APPEND 0x08 -# define BIO_FP_TEXT 0x10 - -# define BIO_FLAGS_READ 0x01 -# define BIO_FLAGS_WRITE 0x02 -# define BIO_FLAGS_IO_SPECIAL 0x04 -# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) -# define BIO_FLAGS_SHOULD_RETRY 0x08 -# ifndef BIO_FLAGS_UPLINK -/* - * "UPLINK" flag denotes file descriptors provided by application. It - * defaults to 0, as most platforms don't require UPLINK interface. - */ -# define BIO_FLAGS_UPLINK 0 -# endif - -# define BIO_FLAGS_BASE64_NO_NL 0x100 - -/* - * This is used with memory BIOs: - * BIO_FLAGS_MEM_RDONLY means we shouldn't free up or change the data in any way; - * BIO_FLAGS_NONCLEAR_RST means we shouldn't clear data on reset. - */ -# define BIO_FLAGS_MEM_RDONLY 0x200 -# define BIO_FLAGS_NONCLEAR_RST 0x400 - -typedef union bio_addr_st BIO_ADDR; -typedef struct bio_addrinfo_st BIO_ADDRINFO; - -int BIO_get_new_index(void); -void BIO_set_flags(BIO *b, int flags); -int BIO_test_flags(const BIO *b, int flags); -void BIO_clear_flags(BIO *b, int flags); - -# define BIO_get_flags(b) BIO_test_flags(b, ~(0x0)) -# define BIO_set_retry_special(b) \ - BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY)) -# define BIO_set_retry_read(b) \ - BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY)) -# define BIO_set_retry_write(b) \ - BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY)) - -/* These are normally used internally in BIOs */ -# define BIO_clear_retry_flags(b) \ - BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) -# define BIO_get_retry_flags(b) \ - BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) - -/* These should be used by the application to tell why we should retry */ -# define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ) -# define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE) -# define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL) -# define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS) -# define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY) - -/* - * The next three are used in conjunction with the BIO_should_io_special() - * condition. After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int - * *reason); will walk the BIO stack and return the 'reason' for the special - * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return - * the code. - */ -/* - * Returned from the SSL bio when the certificate retrieval code had an error - */ -# define BIO_RR_SSL_X509_LOOKUP 0x01 -/* Returned from the connect BIO when a connect would have blocked */ -# define BIO_RR_CONNECT 0x02 -/* Returned from the accept BIO when an accept would have blocked */ -# define BIO_RR_ACCEPT 0x03 - -/* These are passed by the BIO callback */ -# define BIO_CB_FREE 0x01 -# define BIO_CB_READ 0x02 -# define BIO_CB_WRITE 0x03 -# define BIO_CB_PUTS 0x04 -# define BIO_CB_GETS 0x05 -# define BIO_CB_CTRL 0x06 - -/* - * The callback is called before and after the underling operation, The - * BIO_CB_RETURN flag indicates if it is after the call - */ -# define BIO_CB_RETURN 0x80 -# define BIO_CB_return(a) ((a)|BIO_CB_RETURN) -# define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) -# define BIO_cb_post(a) ((a)&BIO_CB_RETURN) - -typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, - long argl, long ret); -typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, - size_t len, int argi, - long argl, int ret, size_t *processed); -BIO_callback_fn BIO_get_callback(const BIO *b); -void BIO_set_callback(BIO *b, BIO_callback_fn callback); - -BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); -void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); - -char *BIO_get_callback_arg(const BIO *b); -void BIO_set_callback_arg(BIO *b, char *arg); - -typedef struct bio_method_st BIO_METHOD; - -const char *BIO_method_name(const BIO *b); -int BIO_method_type(const BIO *b); - -typedef int BIO_info_cb(BIO *, int, int); -typedef BIO_info_cb bio_info_cb; /* backward compatibility */ - -DEFINE_STACK_OF(BIO) - -/* Prefix and suffix callback in ASN1 BIO */ -typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, - void *parg); - -# ifndef OPENSSL_NO_SCTP -/* SCTP parameter structs */ -struct bio_dgram_sctp_sndinfo { - uint16_t snd_sid; - uint16_t snd_flags; - uint32_t snd_ppid; - uint32_t snd_context; -}; - -struct bio_dgram_sctp_rcvinfo { - uint16_t rcv_sid; - uint16_t rcv_ssn; - uint16_t rcv_flags; - uint32_t rcv_ppid; - uint32_t rcv_tsn; - uint32_t rcv_cumtsn; - uint32_t rcv_context; -}; - -struct bio_dgram_sctp_prinfo { - uint16_t pr_policy; - uint32_t pr_value; -}; -# endif - -/* - * #define BIO_CONN_get_param_hostname BIO_ctrl - */ - -# define BIO_C_SET_CONNECT 100 -# define BIO_C_DO_STATE_MACHINE 101 -# define BIO_C_SET_NBIO 102 -/* # define BIO_C_SET_PROXY_PARAM 103 */ -# define BIO_C_SET_FD 104 -# define BIO_C_GET_FD 105 -# define BIO_C_SET_FILE_PTR 106 -# define BIO_C_GET_FILE_PTR 107 -# define BIO_C_SET_FILENAME 108 -# define BIO_C_SET_SSL 109 -# define BIO_C_GET_SSL 110 -# define BIO_C_SET_MD 111 -# define BIO_C_GET_MD 112 -# define BIO_C_GET_CIPHER_STATUS 113 -# define BIO_C_SET_BUF_MEM 114 -# define BIO_C_GET_BUF_MEM_PTR 115 -# define BIO_C_GET_BUFF_NUM_LINES 116 -# define BIO_C_SET_BUFF_SIZE 117 -# define BIO_C_SET_ACCEPT 118 -# define BIO_C_SSL_MODE 119 -# define BIO_C_GET_MD_CTX 120 -/* # define BIO_C_GET_PROXY_PARAM 121 */ -# define BIO_C_SET_BUFF_READ_DATA 122/* data to read first */ -# define BIO_C_GET_CONNECT 123 -# define BIO_C_GET_ACCEPT 124 -# define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 -# define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 -# define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 -# define BIO_C_FILE_SEEK 128 -# define BIO_C_GET_CIPHER_CTX 129 -# define BIO_C_SET_BUF_MEM_EOF_RETURN 130/* return end of input - * value */ -# define BIO_C_SET_BIND_MODE 131 -# define BIO_C_GET_BIND_MODE 132 -# define BIO_C_FILE_TELL 133 -# define BIO_C_GET_SOCKS 134 -# define BIO_C_SET_SOCKS 135 - -# define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */ -# define BIO_C_GET_WRITE_BUF_SIZE 137 -# define BIO_C_MAKE_BIO_PAIR 138 -# define BIO_C_DESTROY_BIO_PAIR 139 -# define BIO_C_GET_WRITE_GUARANTEE 140 -# define BIO_C_GET_READ_REQUEST 141 -# define BIO_C_SHUTDOWN_WR 142 -# define BIO_C_NREAD0 143 -# define BIO_C_NREAD 144 -# define BIO_C_NWRITE0 145 -# define BIO_C_NWRITE 146 -# define BIO_C_RESET_READ_REQUEST 147 -# define BIO_C_SET_MD_CTX 148 - -# define BIO_C_SET_PREFIX 149 -# define BIO_C_GET_PREFIX 150 -# define BIO_C_SET_SUFFIX 151 -# define BIO_C_GET_SUFFIX 152 - -# define BIO_C_SET_EX_ARG 153 -# define BIO_C_GET_EX_ARG 154 - -# define BIO_C_SET_CONNECT_MODE 155 - -# define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) -# define BIO_get_app_data(s) BIO_get_ex_data(s,0) - -# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) - -# ifndef OPENSSL_NO_SOCK -/* IP families we support, for BIO_s_connect() and BIO_s_accept() */ -/* Note: the underlying operating system may not support some of them */ -# define BIO_FAMILY_IPV4 4 -# define BIO_FAMILY_IPV6 6 -# define BIO_FAMILY_IPANY 256 - -/* BIO_s_connect() */ -# define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0, \ - (char *)(name)) -# define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1, \ - (char *)(port)) -# define BIO_set_conn_address(b,addr) BIO_ctrl(b,BIO_C_SET_CONNECT,2, \ - (char *)(addr)) -# define BIO_set_conn_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_CONNECT,3,f) -# define BIO_get_conn_hostname(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)) -# define BIO_get_conn_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)) -# define BIO_get_conn_address(b) ((const BIO_ADDR *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)) -# define BIO_get_conn_ip_family(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL) -# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) - -/* BIO_s_accept() */ -# define BIO_set_accept_name(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0, \ - (char *)(name)) -# define BIO_set_accept_port(b,port) BIO_ctrl(b,BIO_C_SET_ACCEPT,1, \ - (char *)(port)) -# define BIO_get_accept_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)) -# define BIO_get_accept_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,1)) -# define BIO_get_peer_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,2)) -# define BIO_get_peer_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,3)) -/* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */ -# define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(n)?(void *)"a":NULL) -# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,3, \ - (char *)(bio)) -# define BIO_set_accept_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_ACCEPT,4,f) -# define BIO_get_accept_ip_family(b) BIO_ctrl(b,BIO_C_GET_ACCEPT,4,NULL) - -/* Aliases kept for backward compatibility */ -# define BIO_BIND_NORMAL 0 -# define BIO_BIND_REUSEADDR BIO_SOCK_REUSEADDR -# define BIO_BIND_REUSEADDR_IF_UNUSED BIO_SOCK_REUSEADDR -# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) -# define BIO_get_bind_mode(b) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) - -/* BIO_s_accept() and BIO_s_connect() */ -# define BIO_do_connect(b) BIO_do_handshake(b) -# define BIO_do_accept(b) BIO_do_handshake(b) -# endif /* OPENSSL_NO_SOCK */ - -# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) - -/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ -# define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) -# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)(c)) - -/* BIO_s_file() */ -# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)(fp)) -# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)(fpp)) - -/* BIO_s_fd() and BIO_s_file() */ -# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) -# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) - -/* - * name is cast to lose const, but might be better to route through a - * function so we can do it safely - */ -# ifdef CONST_STRICT -/* - * If you are wondering why this isn't defined, its because CONST_STRICT is - * purely a compile-time kludge to allow const to be checked. - */ -int BIO_read_filename(BIO *b, const char *name); -# else -# define BIO_read_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_READ,(char *)(name)) -# endif -# define BIO_write_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_WRITE,name) -# define BIO_append_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_APPEND,name) -# define BIO_rw_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name) - -/* - * WARNING WARNING, this ups the reference count on the read bio of the SSL - * structure. This is because the ssl read BIO is now pointed to by the - * next_bio field in the bio. So when you free the BIO, make sure you are - * doing a BIO_free_all() to catch the underlying BIO. - */ -# define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)(ssl)) -# define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)(sslp)) -# define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) -# define BIO_set_ssl_renegotiate_bytes(b,num) \ - BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL) -# define BIO_get_num_renegotiates(b) \ - BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL) -# define BIO_set_ssl_renegotiate_timeout(b,seconds) \ - BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL) - -/* defined in evp.h */ -/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)(md)) */ - -# define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)(pp)) -# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)(bm)) -# define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0, \ - (char *)(pp)) -# define BIO_set_mem_eof_return(b,v) \ - BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL) - -/* For the BIO_f_buffer() type */ -# define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL) -# define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL) -# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0) -# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1) -# define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf) - -/* Don't use the next one unless you know what you are doing :-) */ -# define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret)) - -# define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL) -# define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL) -# define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL) -# define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL) -# define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) -# define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL) -/* ...pending macros have inappropriate return type */ -size_t BIO_ctrl_pending(BIO *b); -size_t BIO_ctrl_wpending(BIO *b); -# define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL) -# define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \ - cbp) -# define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb) - -/* For the BIO_f_buffer() type */ -# define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) -# define BIO_buffer_peek(b,s,l) BIO_ctrl(b,BIO_CTRL_PEEK,(l),(s)) - -/* For BIO_s_bio() */ -# define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL) -# define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL) -# define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2) -# define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL) -# define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL) -/* macros with inappropriate type -- but ...pending macros use int too: */ -# define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL) -# define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL) -size_t BIO_ctrl_get_write_guarantee(BIO *b); -size_t BIO_ctrl_get_read_request(BIO *b); -int BIO_ctrl_reset_read_request(BIO *b); - -/* ctrl macros for dgram */ -# define BIO_ctrl_dgram_connect(b,peer) \ - (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)(peer)) -# define BIO_ctrl_set_connected(b,peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, 0, (char *)(peer)) -# define BIO_dgram_recv_timedout(b) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL) -# define BIO_dgram_send_timedout(b) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL) -# define BIO_dgram_get_peer(b,peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)(peer)) -# define BIO_dgram_set_peer(b,peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)(peer)) -# define BIO_dgram_get_mtu_overhead(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) - -#define BIO_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef) -int BIO_set_ex_data(BIO *bio, int idx, void *data); -void *BIO_get_ex_data(BIO *bio, int idx); -uint64_t BIO_number_read(BIO *bio); -uint64_t BIO_number_written(BIO *bio); - -/* For BIO_f_asn1() */ -int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, - asn1_ps_func *prefix_free); -int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, - asn1_ps_func **pprefix_free); -int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, - asn1_ps_func *suffix_free); -int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, - asn1_ps_func **psuffix_free); - -const BIO_METHOD *BIO_s_file(void); -BIO *BIO_new_file(const char *filename, const char *mode); -# ifndef OPENSSL_NO_STDIO -BIO *BIO_new_fp(FILE *stream, int close_flag); -# endif -BIO *BIO_new(const BIO_METHOD *type); -int BIO_free(BIO *a); -void BIO_set_data(BIO *a, void *ptr); -void *BIO_get_data(BIO *a); -void BIO_set_init(BIO *a, int init); -int BIO_get_init(BIO *a); -void BIO_set_shutdown(BIO *a, int shut); -int BIO_get_shutdown(BIO *a); -void BIO_vfree(BIO *a); -int BIO_up_ref(BIO *a); -int BIO_read(BIO *b, void *data, int dlen); -int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); -int BIO_gets(BIO *bp, char *buf, int size); -int BIO_write(BIO *b, const void *data, int dlen); -int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); -int BIO_puts(BIO *bp, const char *buf); -int BIO_indent(BIO *b, int indent, int max); -long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); -long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp); -void *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); -long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); -BIO *BIO_push(BIO *b, BIO *append); -BIO *BIO_pop(BIO *b); -void BIO_free_all(BIO *a); -BIO *BIO_find_type(BIO *b, int bio_type); -BIO *BIO_next(BIO *b); -void BIO_set_next(BIO *b, BIO *next); -BIO *BIO_get_retry_BIO(BIO *bio, int *reason); -int BIO_get_retry_reason(BIO *bio); -void BIO_set_retry_reason(BIO *bio, int reason); -BIO *BIO_dup_chain(BIO *in); - -int BIO_nread0(BIO *bio, char **buf); -int BIO_nread(BIO *bio, char **buf, int num); -int BIO_nwrite0(BIO *bio, char **buf); -int BIO_nwrite(BIO *bio, char **buf, int num); - -long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, - long argl, long ret); - -const BIO_METHOD *BIO_s_mem(void); -const BIO_METHOD *BIO_s_secmem(void); -BIO *BIO_new_mem_buf(const void *buf, int len); -# ifndef OPENSSL_NO_SOCK -const BIO_METHOD *BIO_s_socket(void); -const BIO_METHOD *BIO_s_connect(void); -const BIO_METHOD *BIO_s_accept(void); -# endif -const BIO_METHOD *BIO_s_fd(void); -const BIO_METHOD *BIO_s_log(void); -const BIO_METHOD *BIO_s_bio(void); -const BIO_METHOD *BIO_s_null(void); -const BIO_METHOD *BIO_f_null(void); -const BIO_METHOD *BIO_f_buffer(void); -const BIO_METHOD *BIO_f_linebuffer(void); -const BIO_METHOD *BIO_f_nbio_test(void); -# ifndef OPENSSL_NO_DGRAM -const BIO_METHOD *BIO_s_datagram(void); -int BIO_dgram_non_fatal_error(int error); -BIO *BIO_new_dgram(int fd, int close_flag); -# ifndef OPENSSL_NO_SCTP -const BIO_METHOD *BIO_s_datagram_sctp(void); -BIO *BIO_new_dgram_sctp(int fd, int close_flag); -int BIO_dgram_is_sctp(BIO *bio); -int BIO_dgram_sctp_notification_cb(BIO *b, - void (*handle_notifications) (BIO *bio, - void *context, - void *buf), - void *context); -int BIO_dgram_sctp_wait_for_dry(BIO *b); -int BIO_dgram_sctp_msg_waiting(BIO *b); -# endif -# endif - -# ifndef OPENSSL_NO_SOCK -int BIO_sock_should_retry(int i); -int BIO_sock_non_fatal_error(int error); -# endif - -int BIO_fd_should_retry(int i); -int BIO_fd_non_fatal_error(int error); -int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len); -int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len, int indent); -int BIO_dump(BIO *b, const char *bytes, int len); -int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent); -# ifndef OPENSSL_NO_STDIO -int BIO_dump_fp(FILE *fp, const char *s, int len); -int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent); -# endif -int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data, - int datalen); - -# ifndef OPENSSL_NO_SOCK -BIO_ADDR *BIO_ADDR_new(void); -int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, - const void *where, size_t wherelen, unsigned short port); -void BIO_ADDR_free(BIO_ADDR *); -void BIO_ADDR_clear(BIO_ADDR *ap); -int BIO_ADDR_family(const BIO_ADDR *ap); -int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l); -unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap); -char *BIO_ADDR_hostname_string(const BIO_ADDR *ap, int numeric); -char *BIO_ADDR_service_string(const BIO_ADDR *ap, int numeric); -char *BIO_ADDR_path_string(const BIO_ADDR *ap); - -const BIO_ADDRINFO *BIO_ADDRINFO_next(const BIO_ADDRINFO *bai); -int BIO_ADDRINFO_family(const BIO_ADDRINFO *bai); -int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai); -int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai); -const BIO_ADDR *BIO_ADDRINFO_address(const BIO_ADDRINFO *bai); -void BIO_ADDRINFO_free(BIO_ADDRINFO *bai); - -enum BIO_hostserv_priorities { - BIO_PARSE_PRIO_HOST, BIO_PARSE_PRIO_SERV -}; -int BIO_parse_hostserv(const char *hostserv, char **host, char **service, - enum BIO_hostserv_priorities hostserv_prio); -enum BIO_lookup_type { - BIO_LOOKUP_CLIENT, BIO_LOOKUP_SERVER -}; -int BIO_lookup(const char *host, const char *service, - enum BIO_lookup_type lookup_type, - int family, int socktype, BIO_ADDRINFO **res); -int BIO_lookup_ex(const char *host, const char *service, - int lookup_type, int family, int socktype, int protocol, - BIO_ADDRINFO **res); -int BIO_sock_error(int sock); -int BIO_socket_ioctl(int fd, long type, void *arg); -int BIO_socket_nbio(int fd, int mode); -int BIO_sock_init(void); -# if OPENSSL_API_COMPAT < 0x10100000L -# define BIO_sock_cleanup() while(0) continue -# endif -int BIO_set_tcp_ndelay(int sock, int turn_on); - -DEPRECATEDIN_1_1_0(struct hostent *BIO_gethostbyname(const char *name)) -DEPRECATEDIN_1_1_0(int BIO_get_port(const char *str, unsigned short *port_ptr)) -DEPRECATEDIN_1_1_0(int BIO_get_host_ip(const char *str, unsigned char *ip)) -DEPRECATEDIN_1_1_0(int BIO_get_accept_socket(char *host_port, int mode)) -DEPRECATEDIN_1_1_0(int BIO_accept(int sock, char **ip_port)) - -union BIO_sock_info_u { - BIO_ADDR *addr; -}; -enum BIO_sock_info_type { - BIO_SOCK_INFO_ADDRESS -}; -int BIO_sock_info(int sock, - enum BIO_sock_info_type type, union BIO_sock_info_u *info); - -# define BIO_SOCK_REUSEADDR 0x01 -# define BIO_SOCK_V6_ONLY 0x02 -# define BIO_SOCK_KEEPALIVE 0x04 -# define BIO_SOCK_NONBLOCK 0x08 -# define BIO_SOCK_NODELAY 0x10 - -int BIO_socket(int domain, int socktype, int protocol, int options); -int BIO_connect(int sock, const BIO_ADDR *addr, int options); -int BIO_bind(int sock, const BIO_ADDR *addr, int options); -int BIO_listen(int sock, const BIO_ADDR *addr, int options); -int BIO_accept_ex(int accept_sock, BIO_ADDR *addr, int options); -int BIO_closesocket(int sock); - -BIO *BIO_new_socket(int sock, int close_flag); -BIO *BIO_new_connect(const char *host_port); -BIO *BIO_new_accept(const char *host_port); -# endif /* OPENSSL_NO_SOCK*/ - -BIO *BIO_new_fd(int fd, int close_flag); - -int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, - BIO **bio2, size_t writebuf2); -/* - * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints. - * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default - * value. - */ - -void BIO_copy_next_retry(BIO *b); - -/* - * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg); - */ - -# define ossl_bio__attr__(x) -# if defined(__GNUC__) && defined(__STDC_VERSION__) \ - && !defined(__APPLE__) - /* - * Because we support the 'z' modifier, which made its appearance in C99, - * we can't use __attribute__ with pre C99 dialects. - */ -# if __STDC_VERSION__ >= 199901L -# undef ossl_bio__attr__ -# define ossl_bio__attr__ __attribute__ -# if __GNUC__*10 + __GNUC_MINOR__ >= 44 -# define ossl_bio__printf__ __gnu_printf__ -# else -# define ossl_bio__printf__ __printf__ -# endif -# endif -# endif -int BIO_printf(BIO *bio, const char *format, ...) -ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 3))); -int BIO_vprintf(BIO *bio, const char *format, va_list args) -ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 0))); -int BIO_snprintf(char *buf, size_t n, const char *format, ...) -ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 4))); -int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) -ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 0))); -# undef ossl_bio__attr__ -# undef ossl_bio__printf__ - - -BIO_METHOD *BIO_meth_new(int type, const char *name); -void BIO_meth_free(BIO_METHOD *biom); -int (*BIO_meth_get_write(const BIO_METHOD *biom)) (BIO *, const char *, int); -int (*BIO_meth_get_write_ex(const BIO_METHOD *biom)) (BIO *, const char *, size_t, - size_t *); -int BIO_meth_set_write(BIO_METHOD *biom, - int (*write) (BIO *, const char *, int)); -int BIO_meth_set_write_ex(BIO_METHOD *biom, - int (*bwrite) (BIO *, const char *, size_t, size_t *)); -int (*BIO_meth_get_read(const BIO_METHOD *biom)) (BIO *, char *, int); -int (*BIO_meth_get_read_ex(const BIO_METHOD *biom)) (BIO *, char *, size_t, size_t *); -int BIO_meth_set_read(BIO_METHOD *biom, - int (*read) (BIO *, char *, int)); -int BIO_meth_set_read_ex(BIO_METHOD *biom, - int (*bread) (BIO *, char *, size_t, size_t *)); -int (*BIO_meth_get_puts(const BIO_METHOD *biom)) (BIO *, const char *); -int BIO_meth_set_puts(BIO_METHOD *biom, - int (*puts) (BIO *, const char *)); -int (*BIO_meth_get_gets(const BIO_METHOD *biom)) (BIO *, char *, int); -int BIO_meth_set_gets(BIO_METHOD *biom, - int (*gets) (BIO *, char *, int)); -long (*BIO_meth_get_ctrl(const BIO_METHOD *biom)) (BIO *, int, long, void *); -int BIO_meth_set_ctrl(BIO_METHOD *biom, - long (*ctrl) (BIO *, int, long, void *)); -int (*BIO_meth_get_create(const BIO_METHOD *bion)) (BIO *); -int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *)); -int (*BIO_meth_get_destroy(const BIO_METHOD *biom)) (BIO *); -int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *)); -long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom)) - (BIO *, int, BIO_info_cb *); -int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, - long (*callback_ctrl) (BIO *, int, - BIO_info_cb *)); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/bioerr.h b/submodules/MtProtoKit/openssl/openssl/bioerr.h deleted file mode 100644 index 46e2c96ee3..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/bioerr.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_BIOERR_H -# define HEADER_BIOERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BIO_strings(void); - -/* - * BIO function codes. - */ -# define BIO_F_ACPT_STATE 100 -# define BIO_F_ADDRINFO_WRAP 148 -# define BIO_F_ADDR_STRINGS 134 -# define BIO_F_BIO_ACCEPT 101 -# define BIO_F_BIO_ACCEPT_EX 137 -# define BIO_F_BIO_ACCEPT_NEW 152 -# define BIO_F_BIO_ADDR_NEW 144 -# define BIO_F_BIO_BIND 147 -# define BIO_F_BIO_CALLBACK_CTRL 131 -# define BIO_F_BIO_CONNECT 138 -# define BIO_F_BIO_CONNECT_NEW 153 -# define BIO_F_BIO_CTRL 103 -# define BIO_F_BIO_GETS 104 -# define BIO_F_BIO_GET_HOST_IP 106 -# define BIO_F_BIO_GET_NEW_INDEX 102 -# define BIO_F_BIO_GET_PORT 107 -# define BIO_F_BIO_LISTEN 139 -# define BIO_F_BIO_LOOKUP 135 -# define BIO_F_BIO_LOOKUP_EX 143 -# define BIO_F_BIO_MAKE_PAIR 121 -# define BIO_F_BIO_METH_NEW 146 -# define BIO_F_BIO_NEW 108 -# define BIO_F_BIO_NEW_DGRAM_SCTP 145 -# define BIO_F_BIO_NEW_FILE 109 -# define BIO_F_BIO_NEW_MEM_BUF 126 -# define BIO_F_BIO_NREAD 123 -# define BIO_F_BIO_NREAD0 124 -# define BIO_F_BIO_NWRITE 125 -# define BIO_F_BIO_NWRITE0 122 -# define BIO_F_BIO_PARSE_HOSTSERV 136 -# define BIO_F_BIO_PUTS 110 -# define BIO_F_BIO_READ 111 -# define BIO_F_BIO_READ_EX 105 -# define BIO_F_BIO_READ_INTERN 120 -# define BIO_F_BIO_SOCKET 140 -# define BIO_F_BIO_SOCKET_NBIO 142 -# define BIO_F_BIO_SOCK_INFO 141 -# define BIO_F_BIO_SOCK_INIT 112 -# define BIO_F_BIO_WRITE 113 -# define BIO_F_BIO_WRITE_EX 119 -# define BIO_F_BIO_WRITE_INTERN 128 -# define BIO_F_BUFFER_CTRL 114 -# define BIO_F_CONN_CTRL 127 -# define BIO_F_CONN_STATE 115 -# define BIO_F_DGRAM_SCTP_NEW 149 -# define BIO_F_DGRAM_SCTP_READ 132 -# define BIO_F_DGRAM_SCTP_WRITE 133 -# define BIO_F_DOAPR_OUTCH 150 -# define BIO_F_FILE_CTRL 116 -# define BIO_F_FILE_READ 130 -# define BIO_F_LINEBUFFER_CTRL 129 -# define BIO_F_LINEBUFFER_NEW 151 -# define BIO_F_MEM_WRITE 117 -# define BIO_F_NBIOF_NEW 154 -# define BIO_F_SLG_WRITE 155 -# define BIO_F_SSL_NEW 118 - -/* - * BIO reason codes. - */ -# define BIO_R_ACCEPT_ERROR 100 -# define BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET 141 -# define BIO_R_AMBIGUOUS_HOST_OR_SERVICE 129 -# define BIO_R_BAD_FOPEN_MODE 101 -# define BIO_R_BROKEN_PIPE 124 -# define BIO_R_CONNECT_ERROR 103 -# define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 -# define BIO_R_GETSOCKNAME_ERROR 132 -# define BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS 133 -# define BIO_R_GETTING_SOCKTYPE 134 -# define BIO_R_INVALID_ARGUMENT 125 -# define BIO_R_INVALID_SOCKET 135 -# define BIO_R_IN_USE 123 -# define BIO_R_LENGTH_TOO_LONG 102 -# define BIO_R_LISTEN_V6_ONLY 136 -# define BIO_R_LOOKUP_RETURNED_NOTHING 142 -# define BIO_R_MALFORMED_HOST_OR_SERVICE 130 -# define BIO_R_NBIO_CONNECT_ERROR 110 -# define BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED 143 -# define BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED 144 -# define BIO_R_NO_PORT_DEFINED 113 -# define BIO_R_NO_SUCH_FILE 128 -# define BIO_R_NULL_PARAMETER 115 -# define BIO_R_UNABLE_TO_BIND_SOCKET 117 -# define BIO_R_UNABLE_TO_CREATE_SOCKET 118 -# define BIO_R_UNABLE_TO_KEEPALIVE 137 -# define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 -# define BIO_R_UNABLE_TO_NODELAY 138 -# define BIO_R_UNABLE_TO_REUSEADDR 139 -# define BIO_R_UNAVAILABLE_IP_FAMILY 145 -# define BIO_R_UNINITIALIZED 120 -# define BIO_R_UNKNOWN_INFO_TYPE 140 -# define BIO_R_UNSUPPORTED_IP_FAMILY 146 -# define BIO_R_UNSUPPORTED_METHOD 121 -# define BIO_R_UNSUPPORTED_PROTOCOL_FAMILY 131 -# define BIO_R_WRITE_TO_READ_ONLY_BIO 126 -# define BIO_R_WSASTARTUP 122 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/blowfish.h b/submodules/MtProtoKit/openssl/openssl/blowfish.h deleted file mode 100644 index cd3e460e98..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/blowfish.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_BLOWFISH_H -# define HEADER_BLOWFISH_H - -# include - -# ifndef OPENSSL_NO_BF -# include -# ifdef __cplusplus -extern "C" { -# endif - -# define BF_ENCRYPT 1 -# define BF_DECRYPT 0 - -/*- - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! BF_LONG has to be at least 32 bits wide. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ -# define BF_LONG unsigned int - -# define BF_ROUNDS 16 -# define BF_BLOCK 8 - -typedef struct bf_key_st { - BF_LONG P[BF_ROUNDS + 2]; - BF_LONG S[4 * 256]; -} BF_KEY; - -void BF_set_key(BF_KEY *key, int len, const unsigned char *data); - -void BF_encrypt(BF_LONG *data, const BF_KEY *key); -void BF_decrypt(BF_LONG *data, const BF_KEY *key); - -void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, - const BF_KEY *key, int enc); -void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - const BF_KEY *schedule, unsigned char *ivec, int enc); -void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num); -const char *BF_options(void); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/bn.h b/submodules/MtProtoKit/openssl/openssl/bn.h deleted file mode 100644 index 8af05d00e5..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/bn.h +++ /dev/null @@ -1,539 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_BN_H -# define HEADER_BN_H - -# include -# ifndef OPENSSL_NO_STDIO -# include -# endif -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * 64-bit processor with LP64 ABI - */ -# ifdef SIXTY_FOUR_BIT_LONG -# define BN_ULONG unsigned long -# define BN_BYTES 8 -# endif - -/* - * 64-bit processor other than LP64 ABI - */ -# ifdef SIXTY_FOUR_BIT -# define BN_ULONG unsigned long long -# define BN_BYTES 8 -# endif - -# ifdef THIRTY_TWO_BIT -# define BN_ULONG unsigned int -# define BN_BYTES 4 -# endif - -# define BN_BITS2 (BN_BYTES * 8) -# define BN_BITS (BN_BITS2 * 2) -# define BN_TBIT ((BN_ULONG)1 << (BN_BITS2 - 1)) - -# define BN_FLG_MALLOCED 0x01 -# define BN_FLG_STATIC_DATA 0x02 - -/* - * avoid leaking exponent information through timing, - * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime, - * BN_div() will call BN_div_no_branch, - * BN_mod_inverse() will call BN_mod_inverse_no_branch. - */ -# define BN_FLG_CONSTTIME 0x04 -# define BN_FLG_SECURE 0x08 - -# if OPENSSL_API_COMPAT < 0x00908000L -/* deprecated name for the flag */ -# define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME -# define BN_FLG_FREE 0x8000 /* used for debugging */ -# endif - -void BN_set_flags(BIGNUM *b, int n); -int BN_get_flags(const BIGNUM *b, int n); - -/* Values for |top| in BN_rand() */ -#define BN_RAND_TOP_ANY -1 -#define BN_RAND_TOP_ONE 0 -#define BN_RAND_TOP_TWO 1 - -/* Values for |bottom| in BN_rand() */ -#define BN_RAND_BOTTOM_ANY 0 -#define BN_RAND_BOTTOM_ODD 1 - -/* - * get a clone of a BIGNUM with changed flags, for *temporary* use only (the - * two BIGNUMs cannot be used in parallel!). Also only for *read only* use. The - * value |dest| should be a newly allocated BIGNUM obtained via BN_new() that - * has not been otherwise initialised or used. - */ -void BN_with_flags(BIGNUM *dest, const BIGNUM *b, int flags); - -/* Wrapper function to make using BN_GENCB easier */ -int BN_GENCB_call(BN_GENCB *cb, int a, int b); - -BN_GENCB *BN_GENCB_new(void); -void BN_GENCB_free(BN_GENCB *cb); - -/* Populate a BN_GENCB structure with an "old"-style callback */ -void BN_GENCB_set_old(BN_GENCB *gencb, void (*callback) (int, int, void *), - void *cb_arg); - -/* Populate a BN_GENCB structure with a "new"-style callback */ -void BN_GENCB_set(BN_GENCB *gencb, int (*callback) (int, int, BN_GENCB *), - void *cb_arg); - -void *BN_GENCB_get_arg(BN_GENCB *cb); - -# define BN_prime_checks 0 /* default: select number of iterations based - * on the size of the number */ - -/* - * BN_prime_checks_for_size() returns the number of Miller-Rabin iterations - * that will be done for checking that a random number is probably prime. The - * error rate for accepting a composite number as prime depends on the size of - * the prime |b|. The error rates used are for calculating an RSA key with 2 primes, - * and so the level is what you would expect for a key of double the size of the - * prime. - * - * This table is generated using the algorithm of FIPS PUB 186-4 - * Digital Signature Standard (DSS), section F.1, page 117. - * (https://dx.doi.org/10.6028/NIST.FIPS.186-4) - * - * The following magma script was used to generate the output: - * securitybits:=125; - * k:=1024; - * for t:=1 to 65 do - * for M:=3 to Floor(2*Sqrt(k-1)-1) do - * S:=0; - * // Sum over m - * for m:=3 to M do - * s:=0; - * // Sum over j - * for j:=2 to m do - * s+:=(RealField(32)!2)^-(j+(k-1)/j); - * end for; - * S+:=2^(m-(m-1)*t)*s; - * end for; - * A:=2^(k-2-M*t); - * B:=8*(Pi(RealField(32))^2-6)/3*2^(k-2)*S; - * pkt:=2.00743*Log(2)*k*2^-k*(A+B); - * seclevel:=Floor(-Log(2,pkt)); - * if seclevel ge securitybits then - * printf "k: %5o, security: %o bits (t: %o, M: %o)\n",k,seclevel,t,M; - * break; - * end if; - * end for; - * if seclevel ge securitybits then break; end if; - * end for; - * - * It can be run online at: - * http://magma.maths.usyd.edu.au/calc - * - * And will output: - * k: 1024, security: 129 bits (t: 6, M: 23) - * - * k is the number of bits of the prime, securitybits is the level we want to - * reach. - * - * prime length | RSA key size | # MR tests | security level - * -------------+--------------|------------+--------------- - * (b) >= 6394 | >= 12788 | 3 | 256 bit - * (b) >= 3747 | >= 7494 | 3 | 192 bit - * (b) >= 1345 | >= 2690 | 4 | 128 bit - * (b) >= 1080 | >= 2160 | 5 | 128 bit - * (b) >= 852 | >= 1704 | 5 | 112 bit - * (b) >= 476 | >= 952 | 5 | 80 bit - * (b) >= 400 | >= 800 | 6 | 80 bit - * (b) >= 347 | >= 694 | 7 | 80 bit - * (b) >= 308 | >= 616 | 8 | 80 bit - * (b) >= 55 | >= 110 | 27 | 64 bit - * (b) >= 6 | >= 12 | 34 | 64 bit - */ - -# define BN_prime_checks_for_size(b) ((b) >= 3747 ? 3 : \ - (b) >= 1345 ? 4 : \ - (b) >= 476 ? 5 : \ - (b) >= 400 ? 6 : \ - (b) >= 347 ? 7 : \ - (b) >= 308 ? 8 : \ - (b) >= 55 ? 27 : \ - /* b >= 6 */ 34) - -# define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) - -int BN_abs_is_word(const BIGNUM *a, const BN_ULONG w); -int BN_is_zero(const BIGNUM *a); -int BN_is_one(const BIGNUM *a); -int BN_is_word(const BIGNUM *a, const BN_ULONG w); -int BN_is_odd(const BIGNUM *a); - -# define BN_one(a) (BN_set_word((a),1)) - -void BN_zero_ex(BIGNUM *a); - -# if OPENSSL_API_COMPAT >= 0x00908000L -# define BN_zero(a) BN_zero_ex(a) -# else -# define BN_zero(a) (BN_set_word((a),0)) -# endif - -const BIGNUM *BN_value_one(void); -char *BN_options(void); -BN_CTX *BN_CTX_new(void); -BN_CTX *BN_CTX_secure_new(void); -void BN_CTX_free(BN_CTX *c); -void BN_CTX_start(BN_CTX *ctx); -BIGNUM *BN_CTX_get(BN_CTX *ctx); -void BN_CTX_end(BN_CTX *ctx); -int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); -int BN_priv_rand(BIGNUM *rnd, int bits, int top, int bottom); -int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); -int BN_priv_rand_range(BIGNUM *rnd, const BIGNUM *range); -int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); -int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); -int BN_num_bits(const BIGNUM *a); -int BN_num_bits_word(BN_ULONG l); -int BN_security_bits(int L, int N); -BIGNUM *BN_new(void); -BIGNUM *BN_secure_new(void); -void BN_clear_free(BIGNUM *a); -BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b); -void BN_swap(BIGNUM *a, BIGNUM *b); -BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2bin(const BIGNUM *a, unsigned char *to); -int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); -BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen); -BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2mpi(const BIGNUM *a, unsigned char *to); -int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); -/** BN_set_negative sets sign of a BIGNUM - * \param b pointer to the BIGNUM object - * \param n 0 if the BIGNUM b should be positive and a value != 0 otherwise - */ -void BN_set_negative(BIGNUM *b, int n); -/** BN_is_negative returns 1 if the BIGNUM is negative - * \param b pointer to the BIGNUM object - * \return 1 if a < 0 and 0 otherwise - */ -int BN_is_negative(const BIGNUM *b); - -int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, - BN_CTX *ctx); -# define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx)) -int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); -int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *m); -int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *m); -int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); -int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); -int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m); -int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m); - -BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w); -BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w); -int BN_mul_word(BIGNUM *a, BN_ULONG w); -int BN_add_word(BIGNUM *a, BN_ULONG w); -int BN_sub_word(BIGNUM *a, BN_ULONG w); -int BN_set_word(BIGNUM *a, BN_ULONG w); -BN_ULONG BN_get_word(const BIGNUM *a); - -int BN_cmp(const BIGNUM *a, const BIGNUM *b); -void BN_free(BIGNUM *a); -int BN_is_bit_set(const BIGNUM *a, int n); -int BN_lshift(BIGNUM *r, const BIGNUM *a, int n); -int BN_lshift1(BIGNUM *r, const BIGNUM *a); -int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); - -int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx); -int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, - BN_MONT_CTX *in_mont); -int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, - const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m, - BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx); - -int BN_mask_bits(BIGNUM *a, int n); -# ifndef OPENSSL_NO_STDIO -int BN_print_fp(FILE *fp, const BIGNUM *a); -# endif -int BN_print(BIO *bio, const BIGNUM *a); -int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx); -int BN_rshift(BIGNUM *r, const BIGNUM *a, int n); -int BN_rshift1(BIGNUM *r, const BIGNUM *a); -void BN_clear(BIGNUM *a); -BIGNUM *BN_dup(const BIGNUM *a); -int BN_ucmp(const BIGNUM *a, const BIGNUM *b); -int BN_set_bit(BIGNUM *a, int n); -int BN_clear_bit(BIGNUM *a, int n); -char *BN_bn2hex(const BIGNUM *a); -char *BN_bn2dec(const BIGNUM *a); -int BN_hex2bn(BIGNUM **a, const char *str); -int BN_dec2bn(BIGNUM **a, const char *str); -int BN_asc2bn(BIGNUM **a, const char *str); -int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns - * -2 for - * error */ -BIGNUM *BN_mod_inverse(BIGNUM *ret, - const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); -BIGNUM *BN_mod_sqrt(BIGNUM *ret, - const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); - -void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); - -/* Deprecated versions */ -DEPRECATEDIN_0_9_8(BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, - const BIGNUM *add, - const BIGNUM *rem, - void (*callback) (int, int, - void *), - void *cb_arg)) -DEPRECATEDIN_0_9_8(int - BN_is_prime(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), - BN_CTX *ctx, void *cb_arg)) -DEPRECATEDIN_0_9_8(int - BN_is_prime_fasttest(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), - BN_CTX *ctx, void *cb_arg, - int do_trial_division)) - -/* Newer versions */ -int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, - const BIGNUM *rem, BN_GENCB *cb); -int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); -int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, - int do_trial_division, BN_GENCB *cb); - -int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx); - -int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, - const BIGNUM *Xp, const BIGNUM *Xp1, - const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx, - BN_GENCB *cb); -int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1, - BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e, - BN_CTX *ctx, BN_GENCB *cb); - -BN_MONT_CTX *BN_MONT_CTX_new(void); -int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - BN_MONT_CTX *mont, BN_CTX *ctx); -int BN_to_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, - BN_CTX *ctx); -int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, - BN_CTX *ctx); -void BN_MONT_CTX_free(BN_MONT_CTX *mont); -int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx); -BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from); -BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_RWLOCK *lock, - const BIGNUM *mod, BN_CTX *ctx); - -/* BN_BLINDING flags */ -# define BN_BLINDING_NO_UPDATE 0x00000001 -# define BN_BLINDING_NO_RECREATE 0x00000002 - -BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod); -void BN_BLINDING_free(BN_BLINDING *b); -int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *); -int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, - BN_CTX *); - -int BN_BLINDING_is_current_thread(BN_BLINDING *b); -void BN_BLINDING_set_current_thread(BN_BLINDING *b); -int BN_BLINDING_lock(BN_BLINDING *b); -int BN_BLINDING_unlock(BN_BLINDING *b); - -unsigned long BN_BLINDING_get_flags(const BN_BLINDING *); -void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long); -BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, - const BIGNUM *e, BIGNUM *m, BN_CTX *ctx, - int (*bn_mod_exp) (BIGNUM *r, - const BIGNUM *a, - const BIGNUM *p, - const BIGNUM *m, - BN_CTX *ctx, - BN_MONT_CTX *m_ctx), - BN_MONT_CTX *m_ctx); - -DEPRECATEDIN_0_9_8(void BN_set_params(int mul, int high, int low, int mont)) -DEPRECATEDIN_0_9_8(int BN_get_params(int which)) /* 0, mul, 1 high, 2 low, 3 - * mont */ - -BN_RECP_CTX *BN_RECP_CTX_new(void); -void BN_RECP_CTX_free(BN_RECP_CTX *recp); -int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx); -int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, - BN_RECP_CTX *recp, BN_CTX *ctx); -int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx); -int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, - BN_RECP_CTX *recp, BN_CTX *ctx); - -# ifndef OPENSSL_NO_EC2M - -/* - * Functions for arithmetic over binary polynomials represented by BIGNUMs. - * The BIGNUM::neg property of BIGNUMs representing binary polynomials is - * ignored. Note that input arguments are not const so that their bit arrays - * can be expanded to the appropriate size if needed. - */ - -/* - * r = a + b - */ -int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -# define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b) -/* - * r=a mod p - */ -int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p); -/* r = (a * b) mod p */ -int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = (a * a) mod p */ -int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -/* r = (1 / b) mod p */ -int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx); -/* r = (a / b) mod p */ -int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = (a ^ b) mod p */ -int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = sqrt(a) mod p */ -int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - BN_CTX *ctx); -/* r^2 + r = a mod p */ -int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - BN_CTX *ctx); -# define BN_GF2m_cmp(a, b) BN_ucmp((a), (b)) -/*- - * Some functions allow for representation of the irreducible polynomials - * as an unsigned int[], say p. The irreducible f(t) is then of the form: - * t^p[0] + t^p[1] + ... + t^p[k] - * where m = p[0] > p[1] > ... > p[k] = 0. - */ -/* r = a mod p */ -int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]); -/* r = (a * b) mod p */ -int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = (a * a) mod p */ -int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[], - BN_CTX *ctx); -/* r = (1 / b) mod p */ -int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[], - BN_CTX *ctx); -/* r = (a / b) mod p */ -int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = (a ^ b) mod p */ -int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = sqrt(a) mod p */ -int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a, - const int p[], BN_CTX *ctx); -/* r^2 + r = a mod p */ -int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a, - const int p[], BN_CTX *ctx); -int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max); -int BN_GF2m_arr2poly(const int p[], BIGNUM *a); - -# endif - -/* - * faster mod functions for the 'NIST primes' 0 <= a < p^2 - */ -int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); - -const BIGNUM *BN_get0_nist_prime_192(void); -const BIGNUM *BN_get0_nist_prime_224(void); -const BIGNUM *BN_get0_nist_prime_256(void); -const BIGNUM *BN_get0_nist_prime_384(void); -const BIGNUM *BN_get0_nist_prime_521(void); - -int (*BN_nist_mod_func(const BIGNUM *p)) (BIGNUM *r, const BIGNUM *a, - const BIGNUM *field, BN_CTX *ctx); - -int BN_generate_dsa_nonce(BIGNUM *out, const BIGNUM *range, - const BIGNUM *priv, const unsigned char *message, - size_t message_len, BN_CTX *ctx); - -/* Primes from RFC 2409 */ -BIGNUM *BN_get_rfc2409_prime_768(BIGNUM *bn); -BIGNUM *BN_get_rfc2409_prime_1024(BIGNUM *bn); - -/* Primes from RFC 3526 */ -BIGNUM *BN_get_rfc3526_prime_1536(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_2048(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_3072(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define get_rfc2409_prime_768 BN_get_rfc2409_prime_768 -# define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024 -# define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536 -# define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048 -# define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072 -# define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096 -# define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144 -# define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192 -# endif - -int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/bnerr.h b/submodules/MtProtoKit/openssl/openssl/bnerr.h deleted file mode 100644 index 9f3c7cfaab..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/bnerr.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_BNERR_H -# define HEADER_BNERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BN_strings(void); - -/* - * BN function codes. - */ -# define BN_F_BNRAND 127 -# define BN_F_BNRAND_RANGE 138 -# define BN_F_BN_BLINDING_CONVERT_EX 100 -# define BN_F_BN_BLINDING_CREATE_PARAM 128 -# define BN_F_BN_BLINDING_INVERT_EX 101 -# define BN_F_BN_BLINDING_NEW 102 -# define BN_F_BN_BLINDING_UPDATE 103 -# define BN_F_BN_BN2DEC 104 -# define BN_F_BN_BN2HEX 105 -# define BN_F_BN_COMPUTE_WNAF 142 -# define BN_F_BN_CTX_GET 116 -# define BN_F_BN_CTX_NEW 106 -# define BN_F_BN_CTX_START 129 -# define BN_F_BN_DIV 107 -# define BN_F_BN_DIV_RECP 130 -# define BN_F_BN_EXP 123 -# define BN_F_BN_EXPAND_INTERNAL 120 -# define BN_F_BN_GENCB_NEW 143 -# define BN_F_BN_GENERATE_DSA_NONCE 140 -# define BN_F_BN_GENERATE_PRIME_EX 141 -# define BN_F_BN_GF2M_MOD 131 -# define BN_F_BN_GF2M_MOD_EXP 132 -# define BN_F_BN_GF2M_MOD_MUL 133 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 -# define BN_F_BN_GF2M_MOD_SQR 136 -# define BN_F_BN_GF2M_MOD_SQRT 137 -# define BN_F_BN_LSHIFT 145 -# define BN_F_BN_MOD_EXP2_MONT 118 -# define BN_F_BN_MOD_EXP_MONT 109 -# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 -# define BN_F_BN_MOD_EXP_MONT_WORD 117 -# define BN_F_BN_MOD_EXP_RECP 125 -# define BN_F_BN_MOD_EXP_SIMPLE 126 -# define BN_F_BN_MOD_INVERSE 110 -# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 -# define BN_F_BN_MOD_LSHIFT_QUICK 119 -# define BN_F_BN_MOD_SQRT 121 -# define BN_F_BN_MONT_CTX_NEW 149 -# define BN_F_BN_MPI2BN 112 -# define BN_F_BN_NEW 113 -# define BN_F_BN_POOL_GET 147 -# define BN_F_BN_RAND 114 -# define BN_F_BN_RAND_RANGE 122 -# define BN_F_BN_RECP_CTX_NEW 150 -# define BN_F_BN_RSHIFT 146 -# define BN_F_BN_SET_WORDS 144 -# define BN_F_BN_STACK_PUSH 148 -# define BN_F_BN_USUB 115 - -/* - * BN reason codes. - */ -# define BN_R_ARG2_LT_ARG3 100 -# define BN_R_BAD_RECIPROCAL 101 -# define BN_R_BIGNUM_TOO_LONG 114 -# define BN_R_BITS_TOO_SMALL 118 -# define BN_R_CALLED_WITH_EVEN_MODULUS 102 -# define BN_R_DIV_BY_ZERO 103 -# define BN_R_ENCODING_ERROR 104 -# define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 -# define BN_R_INPUT_NOT_REDUCED 110 -# define BN_R_INVALID_LENGTH 106 -# define BN_R_INVALID_RANGE 115 -# define BN_R_INVALID_SHIFT 119 -# define BN_R_NOT_A_SQUARE 111 -# define BN_R_NOT_INITIALIZED 107 -# define BN_R_NO_INVERSE 108 -# define BN_R_NO_SOLUTION 116 -# define BN_R_PRIVATE_KEY_TOO_LARGE 117 -# define BN_R_P_IS_NOT_PRIME 112 -# define BN_R_TOO_MANY_ITERATIONS 113 -# define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/buffer.h b/submodules/MtProtoKit/openssl/openssl/buffer.h deleted file mode 100644 index d2765766b7..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/buffer.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_BUFFER_H -# define HEADER_BUFFER_H - -# include -# ifndef HEADER_CRYPTO_H -# include -# endif -# include - - -#ifdef __cplusplus -extern "C" { -#endif - -# include -# include - -/* - * These names are outdated as of OpenSSL 1.1; a future release - * will move them to be deprecated. - */ -# define BUF_strdup(s) OPENSSL_strdup(s) -# define BUF_strndup(s, size) OPENSSL_strndup(s, size) -# define BUF_memdup(data, size) OPENSSL_memdup(data, size) -# define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) -# define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) -# define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) - -struct buf_mem_st { - size_t length; /* current number of bytes */ - char *data; - size_t max; /* size of buffer */ - unsigned long flags; -}; - -# define BUF_MEM_FLAG_SECURE 0x01 - -BUF_MEM *BUF_MEM_new(void); -BUF_MEM *BUF_MEM_new_ex(unsigned long flags); -void BUF_MEM_free(BUF_MEM *a); -size_t BUF_MEM_grow(BUF_MEM *str, size_t len); -size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len); -void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/buffererr.h b/submodules/MtProtoKit/openssl/openssl/buffererr.h deleted file mode 100644 index 04f6ff7a83..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/buffererr.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_BUFERR_H -# define HEADER_BUFERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BUF_strings(void); - -/* - * BUF function codes. - */ -# define BUF_F_BUF_MEM_GROW 100 -# define BUF_F_BUF_MEM_GROW_CLEAN 105 -# define BUF_F_BUF_MEM_NEW 101 - -/* - * BUF reason codes. - */ - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/camellia.h b/submodules/MtProtoKit/openssl/openssl/camellia.h deleted file mode 100644 index 151f3c1349..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/camellia.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CAMELLIA_H -# define HEADER_CAMELLIA_H - -# include - -# ifndef OPENSSL_NO_CAMELLIA -# include -#ifdef __cplusplus -extern "C" { -#endif - -# define CAMELLIA_ENCRYPT 1 -# define CAMELLIA_DECRYPT 0 - -/* - * Because array size can't be a const in C, the following two are macros. - * Both sizes are in bytes. - */ - -/* This should be a hidden type, but EVP requires that the size be known */ - -# define CAMELLIA_BLOCK_SIZE 16 -# define CAMELLIA_TABLE_BYTE_LEN 272 -# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) - -typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match - * with WORD */ - -struct camellia_key_st { - union { - double d; /* ensures 64-bit align */ - KEY_TABLE_TYPE rd_key; - } u; - int grand_rounds; -}; -typedef struct camellia_key_st CAMELLIA_KEY; - -int Camellia_set_key(const unsigned char *userKey, const int bits, - CAMELLIA_KEY *key); - -void Camellia_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); -void Camellia_decrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); - -void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key, const int enc); -void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, const int enc); -void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num); -void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char ivec[CAMELLIA_BLOCK_SIZE], - unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE], - unsigned int *num); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/cast.h b/submodules/MtProtoKit/openssl/openssl/cast.h deleted file mode 100644 index 2cc89ae013..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/cast.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CAST_H -# define HEADER_CAST_H - -# include - -# ifndef OPENSSL_NO_CAST -# ifdef __cplusplus -extern "C" { -# endif - -# define CAST_ENCRYPT 1 -# define CAST_DECRYPT 0 - -# define CAST_LONG unsigned int - -# define CAST_BLOCK 8 -# define CAST_KEY_LENGTH 16 - -typedef struct cast_key_st { - CAST_LONG data[32]; - int short_key; /* Use reduced rounds for short key */ -} CAST_KEY; - -void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); -void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, - const CAST_KEY *key, int enc); -void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); -void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); -void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, const CAST_KEY *ks, unsigned char *iv, - int enc); -void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const CAST_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const CAST_KEY *schedule, - unsigned char *ivec, int *num); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/cmac.h b/submodules/MtProtoKit/openssl/openssl/cmac.h deleted file mode 100644 index 3535a9abf7..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/cmac.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CMAC_H -# define HEADER_CMAC_H - -# ifndef OPENSSL_NO_CMAC - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -/* Opaque */ -typedef struct CMAC_CTX_st CMAC_CTX; - -CMAC_CTX *CMAC_CTX_new(void); -void CMAC_CTX_cleanup(CMAC_CTX *ctx); -void CMAC_CTX_free(CMAC_CTX *ctx); -EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); -int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); - -int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, - const EVP_CIPHER *cipher, ENGINE *impl); -int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); -int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); -int CMAC_resume(CMAC_CTX *ctx); - -#ifdef __cplusplus -} -#endif - -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/cms.h b/submodules/MtProtoKit/openssl/openssl/cms.h deleted file mode 100644 index c7627968c7..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/cms.h +++ /dev/null @@ -1,339 +0,0 @@ -/* - * Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CMS_H -# define HEADER_CMS_H - -# include - -# ifndef OPENSSL_NO_CMS -# include -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -typedef struct CMS_ContentInfo_st CMS_ContentInfo; -typedef struct CMS_SignerInfo_st CMS_SignerInfo; -typedef struct CMS_CertificateChoices CMS_CertificateChoices; -typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice; -typedef struct CMS_RecipientInfo_st CMS_RecipientInfo; -typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest; -typedef struct CMS_Receipt_st CMS_Receipt; -typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; -typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; - -DEFINE_STACK_OF(CMS_SignerInfo) -DEFINE_STACK_OF(CMS_RecipientEncryptedKey) -DEFINE_STACK_OF(CMS_RecipientInfo) -DEFINE_STACK_OF(CMS_RevocationInfoChoice) -DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) -DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) -DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) - -# define CMS_SIGNERINFO_ISSUER_SERIAL 0 -# define CMS_SIGNERINFO_KEYIDENTIFIER 1 - -# define CMS_RECIPINFO_NONE -1 -# define CMS_RECIPINFO_TRANS 0 -# define CMS_RECIPINFO_AGREE 1 -# define CMS_RECIPINFO_KEK 2 -# define CMS_RECIPINFO_PASS 3 -# define CMS_RECIPINFO_OTHER 4 - -/* S/MIME related flags */ - -# define CMS_TEXT 0x1 -# define CMS_NOCERTS 0x2 -# define CMS_NO_CONTENT_VERIFY 0x4 -# define CMS_NO_ATTR_VERIFY 0x8 -# define CMS_NOSIGS \ - (CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY) -# define CMS_NOINTERN 0x10 -# define CMS_NO_SIGNER_CERT_VERIFY 0x20 -# define CMS_NOVERIFY 0x20 -# define CMS_DETACHED 0x40 -# define CMS_BINARY 0x80 -# define CMS_NOATTR 0x100 -# define CMS_NOSMIMECAP 0x200 -# define CMS_NOOLDMIMETYPE 0x400 -# define CMS_CRLFEOL 0x800 -# define CMS_STREAM 0x1000 -# define CMS_NOCRL 0x2000 -# define CMS_PARTIAL 0x4000 -# define CMS_REUSE_DIGEST 0x8000 -# define CMS_USE_KEYID 0x10000 -# define CMS_DEBUG_DECRYPT 0x20000 -# define CMS_KEY_PARAM 0x40000 -# define CMS_ASCIICRLF 0x80000 - -const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms); - -BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont); -int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio); - -ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); -int CMS_is_detached(CMS_ContentInfo *cms); -int CMS_set_detached(CMS_ContentInfo *cms, int detached); - -# ifdef HEADER_PEM_H -DECLARE_PEM_rw_const(CMS, CMS_ContentInfo) -# endif -int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); -CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); -int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms); - -BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); -int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); -int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, - int flags); -CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); -int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); - -int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, - unsigned int flags); - -CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, - STACK_OF(X509) *certs, BIO *data, - unsigned int flags); - -CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, - X509 *signcert, EVP_PKEY *pkey, - STACK_OF(X509) *certs, unsigned int flags); - -int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); -CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); - -int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, - unsigned int flags); -CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, - unsigned int flags); - -int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, - const unsigned char *key, size_t keylen, - BIO *dcont, BIO *out, unsigned int flags); - -CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, - const unsigned char *key, - size_t keylen, unsigned int flags); - -int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, - const unsigned char *key, size_t keylen); - -int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, - X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags); - -int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, - STACK_OF(X509) *certs, - X509_STORE *store, unsigned int flags); - -STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); - -CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, - const EVP_CIPHER *cipher, unsigned int flags); - -int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, - BIO *dcont, BIO *out, unsigned int flags); - -int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); -int CMS_decrypt_set1_key(CMS_ContentInfo *cms, - unsigned char *key, size_t keylen, - const unsigned char *id, size_t idlen); -int CMS_decrypt_set1_password(CMS_ContentInfo *cms, - unsigned char *pass, ossl_ssize_t passlen); - -STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); -int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); -EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); -CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); -CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, - X509 *recip, unsigned int flags); -int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); -int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); -int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, - EVP_PKEY **pk, X509 **recip, - X509_ALGOR **palg); -int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, - ASN1_OCTET_STRING **keyid, - X509_NAME **issuer, - ASN1_INTEGER **sno); - -CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, - unsigned char *key, size_t keylen, - unsigned char *id, size_t idlen, - ASN1_GENERALIZEDTIME *date, - ASN1_OBJECT *otherTypeId, - ASN1_TYPE *otherType); - -int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, - X509_ALGOR **palg, - ASN1_OCTET_STRING **pid, - ASN1_GENERALIZEDTIME **pdate, - ASN1_OBJECT **potherid, - ASN1_TYPE **pothertype); - -int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, - unsigned char *key, size_t keylen); - -int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, - const unsigned char *id, size_t idlen); - -int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri, - unsigned char *pass, - ossl_ssize_t passlen); - -CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, - int iter, int wrap_nid, - int pbe_nid, - unsigned char *pass, - ossl_ssize_t passlen, - const EVP_CIPHER *kekciph); - -int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); -int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); - -int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, - unsigned int flags); -CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags); - -int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid); -const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms); - -CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms); -int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert); -int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert); -STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms); - -CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms); -int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl); -int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl); -STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms); - -int CMS_SignedData_init(CMS_ContentInfo *cms); -CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, - X509 *signer, EVP_PKEY *pk, const EVP_MD *md, - unsigned int flags); -EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si); -EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si); -STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms); - -void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer); -int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, - ASN1_OCTET_STRING **keyid, - X509_NAME **issuer, ASN1_INTEGER **sno); -int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); -int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs, - unsigned int flags); -void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, - X509 **signer, X509_ALGOR **pdig, - X509_ALGOR **psig); -ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); -int CMS_SignerInfo_sign(CMS_SignerInfo *si); -int CMS_SignerInfo_verify(CMS_SignerInfo *si); -int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain); - -int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs); -int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs, - int algnid, int keysize); -int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap); - -int CMS_signed_get_attr_count(const CMS_SignerInfo *si); -int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid, - int lastpos); -int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, const ASN1_OBJECT *obj, - int lastpos); -X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc); -X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc); -int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); -int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si, - const ASN1_OBJECT *obj, int type, - const void *bytes, int len); -int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, - int nid, int type, - const void *bytes, int len); -int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, - const char *attrname, int type, - const void *bytes, int len); -void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, const ASN1_OBJECT *oid, - int lastpos, int type); - -int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); -int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid, - int lastpos); -int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, - const ASN1_OBJECT *obj, int lastpos); -X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc); -X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc); -int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); -int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si, - const ASN1_OBJECT *obj, int type, - const void *bytes, int len); -int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si, - int nid, int type, - const void *bytes, int len); -int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si, - const char *attrname, int type, - const void *bytes, int len); -void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, - int lastpos, int type); - -int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); -CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, - int allorfirst, - STACK_OF(GENERAL_NAMES) - *receiptList, STACK_OF(GENERAL_NAMES) - *receiptsTo); -int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); -void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, - ASN1_STRING **pcid, - int *pallorfirst, - STACK_OF(GENERAL_NAMES) **plist, - STACK_OF(GENERAL_NAMES) **prto); -int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri, - X509_ALGOR **palg, - ASN1_OCTET_STRING **pukm); -STACK_OF(CMS_RecipientEncryptedKey) -*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri); - -int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri, - X509_ALGOR **pubalg, - ASN1_BIT_STRING **pubkey, - ASN1_OCTET_STRING **keyid, - X509_NAME **issuer, - ASN1_INTEGER **sno); - -int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert); - -int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, - ASN1_OCTET_STRING **keyid, - ASN1_GENERALIZEDTIME **tm, - CMS_OtherKeyAttribute **other, - X509_NAME **issuer, ASN1_INTEGER **sno); -int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, - X509 *cert); -int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); -EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); -int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, - CMS_RecipientInfo *ri, - CMS_RecipientEncryptedKey *rek); - -int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg, - ASN1_OCTET_STRING *ukm, int keylen); - -/* Backward compatibility for spelling errors. */ -# define CMS_R_UNKNOWN_DIGEST_ALGORITM CMS_R_UNKNOWN_DIGEST_ALGORITHM -# define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE \ - CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/cmserr.h b/submodules/MtProtoKit/openssl/openssl/cmserr.h deleted file mode 100644 index 7dbc13dc93..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/cmserr.h +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CMSERR_H -# define HEADER_CMSERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_CMS - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CMS_strings(void); - -/* - * CMS function codes. - */ -# define CMS_F_CHECK_CONTENT 99 -# define CMS_F_CMS_ADD0_CERT 164 -# define CMS_F_CMS_ADD0_RECIPIENT_KEY 100 -# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165 -# define CMS_F_CMS_ADD1_RECEIPTREQUEST 158 -# define CMS_F_CMS_ADD1_RECIPIENT_CERT 101 -# define CMS_F_CMS_ADD1_SIGNER 102 -# define CMS_F_CMS_ADD1_SIGNINGTIME 103 -# define CMS_F_CMS_COMPRESS 104 -# define CMS_F_CMS_COMPRESSEDDATA_CREATE 105 -# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106 -# define CMS_F_CMS_COPY_CONTENT 107 -# define CMS_F_CMS_COPY_MESSAGEDIGEST 108 -# define CMS_F_CMS_DATA 109 -# define CMS_F_CMS_DATAFINAL 110 -# define CMS_F_CMS_DATAINIT 111 -# define CMS_F_CMS_DECRYPT 112 -# define CMS_F_CMS_DECRYPT_SET1_KEY 113 -# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166 -# define CMS_F_CMS_DECRYPT_SET1_PKEY 114 -# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115 -# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116 -# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117 -# define CMS_F_CMS_DIGEST_VERIFY 118 -# define CMS_F_CMS_ENCODE_RECEIPT 161 -# define CMS_F_CMS_ENCRYPT 119 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT 179 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120 -# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121 -# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122 -# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123 -# define CMS_F_CMS_ENVELOPEDDATA_CREATE 124 -# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125 -# define CMS_F_CMS_ENVELOPED_DATA_INIT 126 -# define CMS_F_CMS_ENV_ASN1_CTRL 171 -# define CMS_F_CMS_FINAL 127 -# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128 -# define CMS_F_CMS_GET0_CONTENT 129 -# define CMS_F_CMS_GET0_ECONTENT_TYPE 130 -# define CMS_F_CMS_GET0_ENVELOPED 131 -# define CMS_F_CMS_GET0_REVOCATION_CHOICES 132 -# define CMS_F_CMS_GET0_SIGNED 133 -# define CMS_F_CMS_MSGSIGDIGEST_ADD1 162 -# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159 -# define CMS_F_CMS_RECEIPT_VERIFY 160 -# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134 -# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143 -# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167 -# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145 -# define CMS_F_CMS_SD_ASN1_CTRL 170 -# define CMS_F_CMS_SET1_IAS 176 -# define CMS_F_CMS_SET1_KEYID 177 -# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146 -# define CMS_F_CMS_SET_DETACHED 147 -# define CMS_F_CMS_SIGN 148 -# define CMS_F_CMS_SIGNED_DATA_INIT 149 -# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150 -# define CMS_F_CMS_SIGNERINFO_SIGN 151 -# define CMS_F_CMS_SIGNERINFO_VERIFY 152 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154 -# define CMS_F_CMS_SIGN_RECEIPT 163 -# define CMS_F_CMS_SI_CHECK_ATTRIBUTES 183 -# define CMS_F_CMS_STREAM 155 -# define CMS_F_CMS_UNCOMPRESS 156 -# define CMS_F_CMS_VERIFY 157 -# define CMS_F_KEK_UNWRAP_KEY 180 - -/* - * CMS reason codes. - */ -# define CMS_R_ADD_SIGNER_ERROR 99 -# define CMS_R_ATTRIBUTE_ERROR 161 -# define CMS_R_CERTIFICATE_ALREADY_PRESENT 175 -# define CMS_R_CERTIFICATE_HAS_NO_KEYID 160 -# define CMS_R_CERTIFICATE_VERIFY_ERROR 100 -# define CMS_R_CIPHER_INITIALISATION_ERROR 101 -# define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102 -# define CMS_R_CMS_DATAFINAL_ERROR 103 -# define CMS_R_CMS_LIB 104 -# define CMS_R_CONTENTIDENTIFIER_MISMATCH 170 -# define CMS_R_CONTENT_NOT_FOUND 105 -# define CMS_R_CONTENT_TYPE_MISMATCH 171 -# define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA 106 -# define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA 107 -# define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA 108 -# define CMS_R_CONTENT_VERIFY_ERROR 109 -# define CMS_R_CTRL_ERROR 110 -# define CMS_R_CTRL_FAILURE 111 -# define CMS_R_DECRYPT_ERROR 112 -# define CMS_R_ERROR_GETTING_PUBLIC_KEY 113 -# define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114 -# define CMS_R_ERROR_SETTING_KEY 115 -# define CMS_R_ERROR_SETTING_RECIPIENTINFO 116 -# define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117 -# define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176 -# define CMS_R_INVALID_KEY_LENGTH 118 -# define CMS_R_MD_BIO_INIT_ERROR 119 -# define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120 -# define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121 -# define CMS_R_MSGSIGDIGEST_ERROR 172 -# define CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE 162 -# define CMS_R_MSGSIGDIGEST_WRONG_LENGTH 163 -# define CMS_R_NEED_ONE_SIGNER 164 -# define CMS_R_NOT_A_SIGNED_RECEIPT 165 -# define CMS_R_NOT_ENCRYPTED_DATA 122 -# define CMS_R_NOT_KEK 123 -# define CMS_R_NOT_KEY_AGREEMENT 181 -# define CMS_R_NOT_KEY_TRANSPORT 124 -# define CMS_R_NOT_PWRI 177 -# define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 125 -# define CMS_R_NO_CIPHER 126 -# define CMS_R_NO_CONTENT 127 -# define CMS_R_NO_CONTENT_TYPE 173 -# define CMS_R_NO_DEFAULT_DIGEST 128 -# define CMS_R_NO_DIGEST_SET 129 -# define CMS_R_NO_KEY 130 -# define CMS_R_NO_KEY_OR_CERT 174 -# define CMS_R_NO_MATCHING_DIGEST 131 -# define CMS_R_NO_MATCHING_RECIPIENT 132 -# define CMS_R_NO_MATCHING_SIGNATURE 166 -# define CMS_R_NO_MSGSIGDIGEST 167 -# define CMS_R_NO_PASSWORD 178 -# define CMS_R_NO_PRIVATE_KEY 133 -# define CMS_R_NO_PUBLIC_KEY 134 -# define CMS_R_NO_RECEIPT_REQUEST 168 -# define CMS_R_NO_SIGNERS 135 -# define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136 -# define CMS_R_RECEIPT_DECODE_ERROR 169 -# define CMS_R_RECIPIENT_ERROR 137 -# define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138 -# define CMS_R_SIGNFINAL_ERROR 139 -# define CMS_R_SMIME_TEXT_ERROR 140 -# define CMS_R_STORE_INIT_ERROR 141 -# define CMS_R_TYPE_NOT_COMPRESSED_DATA 142 -# define CMS_R_TYPE_NOT_DATA 143 -# define CMS_R_TYPE_NOT_DIGESTED_DATA 144 -# define CMS_R_TYPE_NOT_ENCRYPTED_DATA 145 -# define CMS_R_TYPE_NOT_ENVELOPED_DATA 146 -# define CMS_R_UNABLE_TO_FINALIZE_CONTEXT 147 -# define CMS_R_UNKNOWN_CIPHER 148 -# define CMS_R_UNKNOWN_DIGEST_ALGORITHM 149 -# define CMS_R_UNKNOWN_ID 150 -# define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 -# define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 -# define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 -# define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 -# define CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE 155 -# define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 -# define CMS_R_UNSUPPORTED_TYPE 156 -# define CMS_R_UNWRAP_ERROR 157 -# define CMS_R_UNWRAP_FAILURE 180 -# define CMS_R_VERIFICATION_FAILURE 158 -# define CMS_R_WRAP_ERROR 159 - -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/comp.h b/submodules/MtProtoKit/openssl/openssl/comp.h deleted file mode 100644 index d814d3cf25..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/comp.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_COMP_H -# define HEADER_COMP_H - -# include - -# ifndef OPENSSL_NO_COMP -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - - - -COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); -const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx); -int COMP_CTX_get_type(const COMP_CTX* comp); -int COMP_get_type(const COMP_METHOD *meth); -const char *COMP_get_name(const COMP_METHOD *meth); -void COMP_CTX_free(COMP_CTX *ctx); - -int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, - unsigned char *in, int ilen); -int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, - unsigned char *in, int ilen); - -COMP_METHOD *COMP_zlib(void); - -#if OPENSSL_API_COMPAT < 0x10100000L -#define COMP_zlib_cleanup() while(0) continue -#endif - -# ifdef HEADER_BIO_H -# ifdef ZLIB -const BIO_METHOD *BIO_f_zlib(void); -# endif -# endif - - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/comperr.h b/submodules/MtProtoKit/openssl/openssl/comperr.h deleted file mode 100644 index 90231e9aa3..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/comperr.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_COMPERR_H -# define HEADER_COMPERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_COMP - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_COMP_strings(void); - -/* - * COMP function codes. - */ -# define COMP_F_BIO_ZLIB_FLUSH 99 -# define COMP_F_BIO_ZLIB_NEW 100 -# define COMP_F_BIO_ZLIB_READ 101 -# define COMP_F_BIO_ZLIB_WRITE 102 -# define COMP_F_COMP_CTX_NEW 103 - -/* - * COMP reason codes. - */ -# define COMP_R_ZLIB_DEFLATE_ERROR 99 -# define COMP_R_ZLIB_INFLATE_ERROR 100 -# define COMP_R_ZLIB_NOT_SUPPORTED 101 - -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/conf.h b/submodules/MtProtoKit/openssl/openssl/conf.h deleted file mode 100644 index 7336cd2f1d..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/conf.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CONF_H -# define HEADER_CONF_H - -# include -# include -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - char *section; - char *name; - char *value; -} CONF_VALUE; - -DEFINE_STACK_OF(CONF_VALUE) -DEFINE_LHASH_OF(CONF_VALUE); - -struct conf_st; -struct conf_method_st; -typedef struct conf_method_st CONF_METHOD; - -struct conf_method_st { - const char *name; - CONF *(*create) (CONF_METHOD *meth); - int (*init) (CONF *conf); - int (*destroy) (CONF *conf); - int (*destroy_data) (CONF *conf); - int (*load_bio) (CONF *conf, BIO *bp, long *eline); - int (*dump) (const CONF *conf, BIO *bp); - int (*is_number) (const CONF *conf, char c); - int (*to_int) (const CONF *conf, char c); - int (*load) (CONF *conf, const char *name, long *eline); -}; - -/* Module definitions */ - -typedef struct conf_imodule_st CONF_IMODULE; -typedef struct conf_module_st CONF_MODULE; - -DEFINE_STACK_OF(CONF_MODULE) -DEFINE_STACK_OF(CONF_IMODULE) - -/* DSO module function typedefs */ -typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); -typedef void conf_finish_func (CONF_IMODULE *md); - -# define CONF_MFLAGS_IGNORE_ERRORS 0x1 -# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 -# define CONF_MFLAGS_SILENT 0x4 -# define CONF_MFLAGS_NO_DSO 0x8 -# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 -# define CONF_MFLAGS_DEFAULT_SECTION 0x20 - -int CONF_set_default_method(CONF_METHOD *meth); -void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash); -LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file, - long *eline); -# ifndef OPENSSL_NO_STDIO -LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, - long *eline); -# endif -LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp, - long *eline); -STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, - const char *section); -char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group, - const char *name); -long CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group, - const char *name); -void CONF_free(LHASH_OF(CONF_VALUE) *conf); -#ifndef OPENSSL_NO_STDIO -int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); -#endif -int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); - -DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name)) - -#if OPENSSL_API_COMPAT < 0x10100000L -# define OPENSSL_no_config() \ - OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL) -#endif - -/* - * New conf code. The semantics are different from the functions above. If - * that wasn't the case, the above functions would have been replaced - */ - -struct conf_st { - CONF_METHOD *meth; - void *meth_data; - LHASH_OF(CONF_VALUE) *data; -}; - -CONF *NCONF_new(CONF_METHOD *meth); -CONF_METHOD *NCONF_default(void); -CONF_METHOD *NCONF_WIN32(void); -void NCONF_free(CONF *conf); -void NCONF_free_data(CONF *conf); - -int NCONF_load(CONF *conf, const char *file, long *eline); -# ifndef OPENSSL_NO_STDIO -int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); -# endif -int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); -STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, - const char *section); -char *NCONF_get_string(const CONF *conf, const char *group, const char *name); -int NCONF_get_number_e(const CONF *conf, const char *group, const char *name, - long *result); -#ifndef OPENSSL_NO_STDIO -int NCONF_dump_fp(const CONF *conf, FILE *out); -#endif -int NCONF_dump_bio(const CONF *conf, BIO *out); - -#define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) - -/* Module functions */ - -int CONF_modules_load(const CONF *cnf, const char *appname, - unsigned long flags); -int CONF_modules_load_file(const char *filename, const char *appname, - unsigned long flags); -void CONF_modules_unload(int all); -void CONF_modules_finish(void); -#if OPENSSL_API_COMPAT < 0x10100000L -# define CONF_modules_free() while(0) continue -#endif -int CONF_module_add(const char *name, conf_init_func *ifunc, - conf_finish_func *ffunc); - -const char *CONF_imodule_get_name(const CONF_IMODULE *md); -const char *CONF_imodule_get_value(const CONF_IMODULE *md); -void *CONF_imodule_get_usr_data(const CONF_IMODULE *md); -void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); -CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); -unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); -void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); -void *CONF_module_get_usr_data(CONF_MODULE *pmod); -void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); - -char *CONF_get1_default_config_file(void); - -int CONF_parse_list(const char *list, int sep, int nospc, - int (*list_cb) (const char *elem, int len, void *usr), - void *arg); - -void OPENSSL_load_builtin_modules(void); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/conf_api.h b/submodules/MtProtoKit/openssl/openssl/conf_api.h deleted file mode 100644 index a0275ad79b..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/conf_api.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CONF_API_H -# define HEADER_CONF_API_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Up until OpenSSL 0.9.5a, this was new_section */ -CONF_VALUE *_CONF_new_section(CONF *conf, const char *section); -/* Up until OpenSSL 0.9.5a, this was get_section */ -CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section); -/* Up until OpenSSL 0.9.5a, this was CONF_get_section */ -STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf, - const char *section); - -int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value); -char *_CONF_get_string(const CONF *conf, const char *section, - const char *name); -long _CONF_get_number(const CONF *conf, const char *section, - const char *name); - -int _CONF_new_data(CONF *conf); -void _CONF_free_data(CONF *conf); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/conferr.h b/submodules/MtProtoKit/openssl/openssl/conferr.h deleted file mode 100644 index 32b9229185..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/conferr.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CONFERR_H -# define HEADER_CONFERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CONF_strings(void); - -/* - * CONF function codes. - */ -# define CONF_F_CONF_DUMP_FP 104 -# define CONF_F_CONF_LOAD 100 -# define CONF_F_CONF_LOAD_FP 103 -# define CONF_F_CONF_PARSE_LIST 119 -# define CONF_F_DEF_LOAD 120 -# define CONF_F_DEF_LOAD_BIO 121 -# define CONF_F_GET_NEXT_FILE 107 -# define CONF_F_MODULE_ADD 122 -# define CONF_F_MODULE_INIT 115 -# define CONF_F_MODULE_LOAD_DSO 117 -# define CONF_F_MODULE_RUN 118 -# define CONF_F_NCONF_DUMP_BIO 105 -# define CONF_F_NCONF_DUMP_FP 106 -# define CONF_F_NCONF_GET_NUMBER_E 112 -# define CONF_F_NCONF_GET_SECTION 108 -# define CONF_F_NCONF_GET_STRING 109 -# define CONF_F_NCONF_LOAD 113 -# define CONF_F_NCONF_LOAD_BIO 110 -# define CONF_F_NCONF_LOAD_FP 114 -# define CONF_F_NCONF_NEW 111 -# define CONF_F_PROCESS_INCLUDE 116 -# define CONF_F_SSL_MODULE_INIT 123 -# define CONF_F_STR_COPY 101 - -/* - * CONF reason codes. - */ -# define CONF_R_ERROR_LOADING_DSO 110 -# define CONF_R_LIST_CANNOT_BE_NULL 115 -# define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 -# define CONF_R_MISSING_EQUAL_SIGN 101 -# define CONF_R_MISSING_INIT_FUNCTION 112 -# define CONF_R_MODULE_INITIALIZATION_ERROR 109 -# define CONF_R_NO_CLOSE_BRACE 102 -# define CONF_R_NO_CONF 105 -# define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 -# define CONF_R_NO_SECTION 107 -# define CONF_R_NO_SUCH_FILE 114 -# define CONF_R_NO_VALUE 108 -# define CONF_R_NUMBER_TOO_LARGE 121 -# define CONF_R_RECURSIVE_DIRECTORY_INCLUDE 111 -# define CONF_R_SSL_COMMAND_SECTION_EMPTY 117 -# define CONF_R_SSL_COMMAND_SECTION_NOT_FOUND 118 -# define CONF_R_SSL_SECTION_EMPTY 119 -# define CONF_R_SSL_SECTION_NOT_FOUND 120 -# define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 -# define CONF_R_UNKNOWN_MODULE_NAME 113 -# define CONF_R_VARIABLE_EXPANSION_TOO_LONG 116 -# define CONF_R_VARIABLE_HAS_NO_VALUE 104 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/crypto.h b/submodules/MtProtoKit/openssl/openssl/crypto.h deleted file mode 100644 index 7d0b526236..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/crypto.h +++ /dev/null @@ -1,445 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CRYPTO_H -# define HEADER_CRYPTO_H - -# include -# include - -# include - -# ifndef OPENSSL_NO_STDIO -# include -# endif - -# include -# include -# include -# include -# include - -# ifdef CHARSET_EBCDIC -# include -# endif - -/* - * Resolve problems on some operating systems with symbol names that clash - * one way or another - */ -# include - -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSLeay OpenSSL_version_num -# define SSLeay_version OpenSSL_version -# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER -# define SSLEAY_VERSION OPENSSL_VERSION -# define SSLEAY_CFLAGS OPENSSL_CFLAGS -# define SSLEAY_BUILT_ON OPENSSL_BUILT_ON -# define SSLEAY_PLATFORM OPENSSL_PLATFORM -# define SSLEAY_DIR OPENSSL_DIR - -/* - * Old type for allocating dynamic locks. No longer used. Use the new thread - * API instead. - */ -typedef struct { - int dummy; -} CRYPTO_dynlock; - -# endif /* OPENSSL_API_COMPAT */ - -typedef void CRYPTO_RWLOCK; - -CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); -int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); -int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); -int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); -void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); - -int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); - -/* - * The following can be used to detect memory leaks in the library. If - * used, it turns on malloc checking - */ -# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ -# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ -# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ -# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ - -struct crypto_ex_data_st { - STACK_OF(void) *sk; -}; -DEFINE_STACK_OF(void) - -/* - * Per class, we have a STACK of function pointers. - */ -# define CRYPTO_EX_INDEX_SSL 0 -# define CRYPTO_EX_INDEX_SSL_CTX 1 -# define CRYPTO_EX_INDEX_SSL_SESSION 2 -# define CRYPTO_EX_INDEX_X509 3 -# define CRYPTO_EX_INDEX_X509_STORE 4 -# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 -# define CRYPTO_EX_INDEX_DH 6 -# define CRYPTO_EX_INDEX_DSA 7 -# define CRYPTO_EX_INDEX_EC_KEY 8 -# define CRYPTO_EX_INDEX_RSA 9 -# define CRYPTO_EX_INDEX_ENGINE 10 -# define CRYPTO_EX_INDEX_UI 11 -# define CRYPTO_EX_INDEX_BIO 12 -# define CRYPTO_EX_INDEX_APP 13 -# define CRYPTO_EX_INDEX_UI_METHOD 14 -# define CRYPTO_EX_INDEX_DRBG 15 -# define CRYPTO_EX_INDEX__COUNT 16 - -/* No longer needed, so this is a no-op */ -#define OPENSSL_malloc_init() while(0) continue - -int CRYPTO_mem_ctrl(int mode); - -# define OPENSSL_malloc(num) \ - CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_zalloc(num) \ - CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_realloc(addr, num) \ - CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_clear_realloc(addr, old_num, num) \ - CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_clear_free(addr, num) \ - CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_free(addr) \ - CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_memdup(str, s) \ - CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_strdup(str) \ - CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_strndup(str, n) \ - CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_secure_malloc(num) \ - CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_secure_zalloc(num) \ - CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_secure_free(addr) \ - CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_secure_clear_free(addr, num) \ - CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_secure_actual_size(ptr) \ - CRYPTO_secure_actual_size(ptr) - -size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz); -size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz); -size_t OPENSSL_strnlen(const char *str, size_t maxlen); -char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len); -unsigned char *OPENSSL_hexstr2buf(const char *str, long *len); -int OPENSSL_hexchar2int(unsigned char c); - -# define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) - -unsigned long OpenSSL_version_num(void); -const char *OpenSSL_version(int type); -# define OPENSSL_VERSION 0 -# define OPENSSL_CFLAGS 1 -# define OPENSSL_BUILT_ON 2 -# define OPENSSL_PLATFORM 3 -# define OPENSSL_DIR 4 -# define OPENSSL_ENGINES_DIR 5 - -int OPENSSL_issetugid(void); - -typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, - int idx, long argl, void *argp); -typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, - int idx, long argl, void *argp); -typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, - void *from_d, int idx, long argl, void *argp); -__owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, - CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); -/* No longer use an index. */ -int CRYPTO_free_ex_index(int class_index, int idx); - -/* - * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a - * given class (invokes whatever per-class callbacks are applicable) - */ -int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); -int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, - const CRYPTO_EX_DATA *from); - -void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); - -/* - * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular - * index (relative to the class type involved) - */ -int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); -void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); - -# if OPENSSL_API_COMPAT < 0x10100000L -/* - * This function cleans up all "ex_data" state. It mustn't be called under - * potential race-conditions. - */ -# define CRYPTO_cleanup_all_ex_data() while(0) continue - -/* - * The old locking functions have been removed completely without compatibility - * macros. This is because the old functions either could not properly report - * errors, or the returned error values were not clearly documented. - * Replacing the locking functions with no-ops would cause race condition - * issues in the affected applications. It is far better for them to fail at - * compile time. - * On the other hand, the locking callbacks are no longer used. Consequently, - * the callback management functions can be safely replaced with no-op macros. - */ -# define CRYPTO_num_locks() (1) -# define CRYPTO_set_locking_callback(func) -# define CRYPTO_get_locking_callback() (NULL) -# define CRYPTO_set_add_lock_callback(func) -# define CRYPTO_get_add_lock_callback() (NULL) - -/* - * These defines where used in combination with the old locking callbacks, - * they are not called anymore, but old code that's not called might still - * use them. - */ -# define CRYPTO_LOCK 1 -# define CRYPTO_UNLOCK 2 -# define CRYPTO_READ 4 -# define CRYPTO_WRITE 8 - -/* This structure is no longer used */ -typedef struct crypto_threadid_st { - int dummy; -} CRYPTO_THREADID; -/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ -# define CRYPTO_THREADID_set_numeric(id, val) -# define CRYPTO_THREADID_set_pointer(id, ptr) -# define CRYPTO_THREADID_set_callback(threadid_func) (0) -# define CRYPTO_THREADID_get_callback() (NULL) -# define CRYPTO_THREADID_current(id) -# define CRYPTO_THREADID_cmp(a, b) (-1) -# define CRYPTO_THREADID_cpy(dest, src) -# define CRYPTO_THREADID_hash(id) (0UL) - -# if OPENSSL_API_COMPAT < 0x10000000L -# define CRYPTO_set_id_callback(func) -# define CRYPTO_get_id_callback() (NULL) -# define CRYPTO_thread_id() (0UL) -# endif /* OPENSSL_API_COMPAT < 0x10000000L */ - -# define CRYPTO_set_dynlock_create_callback(dyn_create_function) -# define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) -# define CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function) -# define CRYPTO_get_dynlock_create_callback() (NULL) -# define CRYPTO_get_dynlock_lock_callback() (NULL) -# define CRYPTO_get_dynlock_destroy_callback() (NULL) -# endif /* OPENSSL_API_COMPAT < 0x10100000L */ - -int CRYPTO_set_mem_functions( - void *(*m) (size_t, const char *, int), - void *(*r) (void *, size_t, const char *, int), - void (*f) (void *, const char *, int)); -int CRYPTO_set_mem_debug(int flag); -void CRYPTO_get_mem_functions( - void *(**m) (size_t, const char *, int), - void *(**r) (void *, size_t, const char *, int), - void (**f) (void *, const char *, int)); - -void *CRYPTO_malloc(size_t num, const char *file, int line); -void *CRYPTO_zalloc(size_t num, const char *file, int line); -void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); -char *CRYPTO_strdup(const char *str, const char *file, int line); -char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); -void CRYPTO_free(void *ptr, const char *file, int line); -void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); -void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); -void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, - const char *file, int line); - -int CRYPTO_secure_malloc_init(size_t sz, int minsize); -int CRYPTO_secure_malloc_done(void); -void *CRYPTO_secure_malloc(size_t num, const char *file, int line); -void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); -void CRYPTO_secure_free(void *ptr, const char *file, int line); -void CRYPTO_secure_clear_free(void *ptr, size_t num, - const char *file, int line); -int CRYPTO_secure_allocated(const void *ptr); -int CRYPTO_secure_malloc_initialized(void); -size_t CRYPTO_secure_actual_size(void *ptr); -size_t CRYPTO_secure_used(void); - -void OPENSSL_cleanse(void *ptr, size_t len); - -# ifndef OPENSSL_NO_CRYPTO_MDEBUG -# define OPENSSL_mem_debug_push(info) \ - CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_mem_debug_pop() \ - CRYPTO_mem_debug_pop() -int CRYPTO_mem_debug_push(const char *info, const char *file, int line); -int CRYPTO_mem_debug_pop(void); -void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); - -/*- - * Debugging functions (enabled by CRYPTO_set_mem_debug(1)) - * The flag argument has the following significance: - * 0: called before the actual memory allocation has taken place - * 1: called after the actual memory allocation has taken place - */ -void CRYPTO_mem_debug_malloc(void *addr, size_t num, int flag, - const char *file, int line); -void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, int flag, - const char *file, int line); -void CRYPTO_mem_debug_free(void *addr, int flag, - const char *file, int line); - -int CRYPTO_mem_leaks_cb(int (*cb) (const char *str, size_t len, void *u), - void *u); -# ifndef OPENSSL_NO_STDIO -int CRYPTO_mem_leaks_fp(FILE *); -# endif -int CRYPTO_mem_leaks(BIO *bio); -# endif - -/* die if we have to */ -ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); -# if OPENSSL_API_COMPAT < 0x10100000L -# define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l)) -# endif -# define OPENSSL_assert(e) \ - (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1)) - -int OPENSSL_isservice(void); - -int FIPS_mode(void); -int FIPS_mode_set(int r); - -void OPENSSL_init(void); -# ifdef OPENSSL_SYS_UNIX -void OPENSSL_fork_prepare(void); -void OPENSSL_fork_parent(void); -void OPENSSL_fork_child(void); -# endif - -struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); -int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, long offset_sec); -int OPENSSL_gmtime_diff(int *pday, int *psec, - const struct tm *from, const struct tm *to); - -/* - * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. - * It takes an amount of time dependent on |len|, but independent of the - * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements - * into a defined order as the return value when a != b is undefined, other - * than to be non-zero. - */ -int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); - -/* Standard initialisation options */ -# define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L -# define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L -# define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L -# define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L -# define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010L -# define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020L -# define OPENSSL_INIT_LOAD_CONFIG 0x00000040L -# define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L -# define OPENSSL_INIT_ASYNC 0x00000100L -# define OPENSSL_INIT_ENGINE_RDRAND 0x00000200L -# define OPENSSL_INIT_ENGINE_DYNAMIC 0x00000400L -# define OPENSSL_INIT_ENGINE_OPENSSL 0x00000800L -# define OPENSSL_INIT_ENGINE_CRYPTODEV 0x00001000L -# define OPENSSL_INIT_ENGINE_CAPI 0x00002000L -# define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L -# define OPENSSL_INIT_ENGINE_AFALG 0x00008000L -/* OPENSSL_INIT_ZLIB 0x00010000L */ -# define OPENSSL_INIT_ATFORK 0x00020000L -/* OPENSSL_INIT_BASE_ONLY 0x00040000L */ -# define OPENSSL_INIT_NO_ATEXIT 0x00080000L -/* OPENSSL_INIT flag range 0xfff00000 reserved for OPENSSL_init_ssl() */ -/* Max OPENSSL_INIT flag value is 0x80000000 */ - -/* openssl and dasync not counted as builtin */ -# define OPENSSL_INIT_ENGINE_ALL_BUILTIN \ - (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \ - | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \ - OPENSSL_INIT_ENGINE_PADLOCK) - - -/* Library initialisation functions */ -void OPENSSL_cleanup(void); -int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); -int OPENSSL_atexit(void (*handler)(void)); -void OPENSSL_thread_stop(void); - -/* Low-level control of initialization */ -OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); -# ifndef OPENSSL_NO_STDIO -int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings, - const char *config_filename); -void OPENSSL_INIT_set_config_file_flags(OPENSSL_INIT_SETTINGS *settings, - unsigned long flags); -int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *settings, - const char *config_appname); -# endif -void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *settings); - -# if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) -# if defined(_WIN32) -# if defined(BASETYPES) || defined(_WINDEF_H) -/* application has to include in order to use this */ -typedef DWORD CRYPTO_THREAD_LOCAL; -typedef DWORD CRYPTO_THREAD_ID; - -typedef LONG CRYPTO_ONCE; -# define CRYPTO_ONCE_STATIC_INIT 0 -# endif -# else -# include -typedef pthread_once_t CRYPTO_ONCE; -typedef pthread_key_t CRYPTO_THREAD_LOCAL; -typedef pthread_t CRYPTO_THREAD_ID; - -# define CRYPTO_ONCE_STATIC_INIT PTHREAD_ONCE_INIT -# endif -# endif - -# if !defined(CRYPTO_ONCE_STATIC_INIT) -typedef unsigned int CRYPTO_ONCE; -typedef unsigned int CRYPTO_THREAD_LOCAL; -typedef unsigned int CRYPTO_THREAD_ID; -# define CRYPTO_ONCE_STATIC_INIT 0 -# endif - -int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)); - -int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *)); -void *CRYPTO_THREAD_get_local(CRYPTO_THREAD_LOCAL *key); -int CRYPTO_THREAD_set_local(CRYPTO_THREAD_LOCAL *key, void *val); -int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); - -CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); -int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/cryptoerr.h b/submodules/MtProtoKit/openssl/openssl/cryptoerr.h deleted file mode 100644 index 3db5a4ee99..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/cryptoerr.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CRYPTOERR_H -# define HEADER_CRYPTOERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CRYPTO_strings(void); - -/* - * CRYPTO function codes. - */ -# define CRYPTO_F_CMAC_CTX_NEW 120 -# define CRYPTO_F_CRYPTO_DUP_EX_DATA 110 -# define CRYPTO_F_CRYPTO_FREE_EX_DATA 111 -# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 -# define CRYPTO_F_CRYPTO_MEMDUP 115 -# define CRYPTO_F_CRYPTO_NEW_EX_DATA 112 -# define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 121 -# define CRYPTO_F_CRYPTO_OCB128_INIT 122 -# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 -# define CRYPTO_F_FIPS_MODE_SET 109 -# define CRYPTO_F_GET_AND_LOCK 113 -# define CRYPTO_F_OPENSSL_ATEXIT 114 -# define CRYPTO_F_OPENSSL_BUF2HEXSTR 117 -# define CRYPTO_F_OPENSSL_FOPEN 119 -# define CRYPTO_F_OPENSSL_HEXSTR2BUF 118 -# define CRYPTO_F_OPENSSL_INIT_CRYPTO 116 -# define CRYPTO_F_OPENSSL_LH_NEW 126 -# define CRYPTO_F_OPENSSL_SK_DEEP_COPY 127 -# define CRYPTO_F_OPENSSL_SK_DUP 128 -# define CRYPTO_F_PKEY_HMAC_INIT 123 -# define CRYPTO_F_PKEY_POLY1305_INIT 124 -# define CRYPTO_F_PKEY_SIPHASH_INIT 125 -# define CRYPTO_F_SK_RESERVE 129 - -/* - * CRYPTO reason codes. - */ -# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 -# define CRYPTO_R_ILLEGAL_HEX_DIGIT 102 -# define CRYPTO_R_ODD_NUMBER_OF_DIGITS 103 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/ct.h b/submodules/MtProtoKit/openssl/openssl/ct.h deleted file mode 100644 index d4262fa048..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ct.h +++ /dev/null @@ -1,476 +0,0 @@ -/* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CT_H -# define HEADER_CT_H - -# include - -# ifndef OPENSSL_NO_CT -# include -# include -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - - -/* Minimum RSA key size, from RFC6962 */ -# define SCT_MIN_RSA_BITS 2048 - -/* All hashes are SHA256 in v1 of Certificate Transparency */ -# define CT_V1_HASHLEN SHA256_DIGEST_LENGTH - -typedef enum { - CT_LOG_ENTRY_TYPE_NOT_SET = -1, - CT_LOG_ENTRY_TYPE_X509 = 0, - CT_LOG_ENTRY_TYPE_PRECERT = 1 -} ct_log_entry_type_t; - -typedef enum { - SCT_VERSION_NOT_SET = -1, - SCT_VERSION_V1 = 0 -} sct_version_t; - -typedef enum { - SCT_SOURCE_UNKNOWN, - SCT_SOURCE_TLS_EXTENSION, - SCT_SOURCE_X509V3_EXTENSION, - SCT_SOURCE_OCSP_STAPLED_RESPONSE -} sct_source_t; - -typedef enum { - SCT_VALIDATION_STATUS_NOT_SET, - SCT_VALIDATION_STATUS_UNKNOWN_LOG, - SCT_VALIDATION_STATUS_VALID, - SCT_VALIDATION_STATUS_INVALID, - SCT_VALIDATION_STATUS_UNVERIFIED, - SCT_VALIDATION_STATUS_UNKNOWN_VERSION -} sct_validation_status_t; - -DEFINE_STACK_OF(SCT) -DEFINE_STACK_OF(CTLOG) - -/****************************************** - * CT policy evaluation context functions * - ******************************************/ - -/* - * Creates a new, empty policy evaluation context. - * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished - * with the CT_POLICY_EVAL_CTX. - */ -CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); - -/* Deletes a policy evaluation context and anything it owns. */ -void CT_POLICY_EVAL_CTX_free(CT_POLICY_EVAL_CTX *ctx); - -/* Gets the peer certificate that the SCTs are for */ -X509* CT_POLICY_EVAL_CTX_get0_cert(const CT_POLICY_EVAL_CTX *ctx); - -/* - * Sets the certificate associated with the received SCTs. - * Increments the reference count of cert. - * Returns 1 on success, 0 otherwise. - */ -int CT_POLICY_EVAL_CTX_set1_cert(CT_POLICY_EVAL_CTX *ctx, X509 *cert); - -/* Gets the issuer of the aforementioned certificate */ -X509* CT_POLICY_EVAL_CTX_get0_issuer(const CT_POLICY_EVAL_CTX *ctx); - -/* - * Sets the issuer of the certificate associated with the received SCTs. - * Increments the reference count of issuer. - * Returns 1 on success, 0 otherwise. - */ -int CT_POLICY_EVAL_CTX_set1_issuer(CT_POLICY_EVAL_CTX *ctx, X509 *issuer); - -/* Gets the CT logs that are trusted sources of SCTs */ -const CTLOG_STORE *CT_POLICY_EVAL_CTX_get0_log_store(const CT_POLICY_EVAL_CTX *ctx); - -/* Sets the log store that is in use. It must outlive the CT_POLICY_EVAL_CTX. */ -void CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(CT_POLICY_EVAL_CTX *ctx, - CTLOG_STORE *log_store); - -/* - * Gets the time, in milliseconds since the Unix epoch, that will be used as the - * current time when checking whether an SCT was issued in the future. - * Such SCTs will fail validation, as required by RFC6962. - */ -uint64_t CT_POLICY_EVAL_CTX_get_time(const CT_POLICY_EVAL_CTX *ctx); - -/* - * Sets the time to evaluate SCTs against, in milliseconds since the Unix epoch. - * If an SCT's timestamp is after this time, it will be interpreted as having - * been issued in the future. RFC6962 states that "TLS clients MUST reject SCTs - * whose timestamp is in the future", so an SCT will not validate in this case. - */ -void CT_POLICY_EVAL_CTX_set_time(CT_POLICY_EVAL_CTX *ctx, uint64_t time_in_ms); - -/***************** - * SCT functions * - *****************/ - -/* - * Creates a new, blank SCT. - * The caller is responsible for calling SCT_free when finished with the SCT. - */ -SCT *SCT_new(void); - -/* - * Creates a new SCT from some base64-encoded strings. - * The caller is responsible for calling SCT_free when finished with the SCT. - */ -SCT *SCT_new_from_base64(unsigned char version, - const char *logid_base64, - ct_log_entry_type_t entry_type, - uint64_t timestamp, - const char *extensions_base64, - const char *signature_base64); - -/* - * Frees the SCT and the underlying data structures. - */ -void SCT_free(SCT *sct); - -/* - * Free a stack of SCTs, and the underlying SCTs themselves. - * Intended to be compatible with X509V3_EXT_FREE. - */ -void SCT_LIST_free(STACK_OF(SCT) *a); - -/* - * Returns the version of the SCT. - */ -sct_version_t SCT_get_version(const SCT *sct); - -/* - * Set the version of an SCT. - * Returns 1 on success, 0 if the version is unrecognized. - */ -__owur int SCT_set_version(SCT *sct, sct_version_t version); - -/* - * Returns the log entry type of the SCT. - */ -ct_log_entry_type_t SCT_get_log_entry_type(const SCT *sct); - -/* - * Set the log entry type of an SCT. - * Returns 1 on success, 0 otherwise. - */ -__owur int SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type); - -/* - * Gets the ID of the log that an SCT came from. - * Ownership of the log ID remains with the SCT. - * Returns the length of the log ID. - */ -size_t SCT_get0_log_id(const SCT *sct, unsigned char **log_id); - -/* - * Set the log ID of an SCT to point directly to the *log_id specified. - * The SCT takes ownership of the specified pointer. - * Returns 1 on success, 0 otherwise. - */ -__owur int SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len); - -/* - * Set the log ID of an SCT. - * This makes a copy of the log_id. - * Returns 1 on success, 0 otherwise. - */ -__owur int SCT_set1_log_id(SCT *sct, const unsigned char *log_id, - size_t log_id_len); - -/* - * Returns the timestamp for the SCT (epoch time in milliseconds). - */ -uint64_t SCT_get_timestamp(const SCT *sct); - -/* - * Set the timestamp of an SCT (epoch time in milliseconds). - */ -void SCT_set_timestamp(SCT *sct, uint64_t timestamp); - -/* - * Return the NID for the signature used by the SCT. - * For CT v1, this will be either NID_sha256WithRSAEncryption or - * NID_ecdsa_with_SHA256 (or NID_undef if incorrect/unset). - */ -int SCT_get_signature_nid(const SCT *sct); - -/* - * Set the signature type of an SCT - * For CT v1, this should be either NID_sha256WithRSAEncryption or - * NID_ecdsa_with_SHA256. - * Returns 1 on success, 0 otherwise. - */ -__owur int SCT_set_signature_nid(SCT *sct, int nid); - -/* - * Set *ext to point to the extension data for the SCT. ext must not be NULL. - * The SCT retains ownership of this pointer. - * Returns length of the data pointed to. - */ -size_t SCT_get0_extensions(const SCT *sct, unsigned char **ext); - -/* - * Set the extensions of an SCT to point directly to the *ext specified. - * The SCT takes ownership of the specified pointer. - */ -void SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len); - -/* - * Set the extensions of an SCT. - * This takes a copy of the ext. - * Returns 1 on success, 0 otherwise. - */ -__owur int SCT_set1_extensions(SCT *sct, const unsigned char *ext, - size_t ext_len); - -/* - * Set *sig to point to the signature for the SCT. sig must not be NULL. - * The SCT retains ownership of this pointer. - * Returns length of the data pointed to. - */ -size_t SCT_get0_signature(const SCT *sct, unsigned char **sig); - -/* - * Set the signature of an SCT to point directly to the *sig specified. - * The SCT takes ownership of the specified pointer. - */ -void SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len); - -/* - * Set the signature of an SCT to be a copy of the *sig specified. - * Returns 1 on success, 0 otherwise. - */ -__owur int SCT_set1_signature(SCT *sct, const unsigned char *sig, - size_t sig_len); - -/* - * The origin of this SCT, e.g. TLS extension, OCSP response, etc. - */ -sct_source_t SCT_get_source(const SCT *sct); - -/* - * Set the origin of this SCT, e.g. TLS extension, OCSP response, etc. - * Returns 1 on success, 0 otherwise. - */ -__owur int SCT_set_source(SCT *sct, sct_source_t source); - -/* - * Returns a text string describing the validation status of |sct|. - */ -const char *SCT_validation_status_string(const SCT *sct); - -/* - * Pretty-prints an |sct| to |out|. - * It will be indented by the number of spaces specified by |indent|. - * If |logs| is not NULL, it will be used to lookup the CT log that the SCT came - * from, so that the log name can be printed. - */ -void SCT_print(const SCT *sct, BIO *out, int indent, const CTLOG_STORE *logs); - -/* - * Pretty-prints an |sct_list| to |out|. - * It will be indented by the number of spaces specified by |indent|. - * SCTs will be delimited by |separator|. - * If |logs| is not NULL, it will be used to lookup the CT log that each SCT - * came from, so that the log names can be printed. - */ -void SCT_LIST_print(const STACK_OF(SCT) *sct_list, BIO *out, int indent, - const char *separator, const CTLOG_STORE *logs); - -/* - * Gets the last result of validating this SCT. - * If it has not been validated yet, returns SCT_VALIDATION_STATUS_NOT_SET. - */ -sct_validation_status_t SCT_get_validation_status(const SCT *sct); - -/* - * Validates the given SCT with the provided context. - * Sets the "validation_status" field of the SCT. - * Returns 1 if the SCT is valid and the signature verifies. - * Returns 0 if the SCT is invalid or could not be verified. - * Returns -1 if an error occurs. - */ -__owur int SCT_validate(SCT *sct, const CT_POLICY_EVAL_CTX *ctx); - -/* - * Validates the given list of SCTs with the provided context. - * Sets the "validation_status" field of each SCT. - * Returns 1 if there are no invalid SCTs and all signatures verify. - * Returns 0 if at least one SCT is invalid or could not be verified. - * Returns a negative integer if an error occurs. - */ -__owur int SCT_LIST_validate(const STACK_OF(SCT) *scts, - CT_POLICY_EVAL_CTX *ctx); - - -/********************************* - * SCT parsing and serialisation * - *********************************/ - -/* - * Serialize (to TLS format) a stack of SCTs and return the length. - * "a" must not be NULL. - * If "pp" is NULL, just return the length of what would have been serialized. - * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer - * for data that caller is responsible for freeing (only if function returns - * successfully). - * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring - * that "*pp" is large enough to accept all of the serialized data. - * Returns < 0 on error, >= 0 indicating bytes written (or would have been) - * on success. - */ -__owur int i2o_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); - -/* - * Convert TLS format SCT list to a stack of SCTs. - * If "a" or "*a" is NULL, a new stack will be created that the caller is - * responsible for freeing (by calling SCT_LIST_free). - * "**pp" and "*pp" must not be NULL. - * Upon success, "*pp" will point to after the last bytes read, and a stack - * will be returned. - * Upon failure, a NULL pointer will be returned, and the position of "*pp" is - * not defined. - */ -STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, - size_t len); - -/* - * Serialize (to DER format) a stack of SCTs and return the length. - * "a" must not be NULL. - * If "pp" is NULL, just returns the length of what would have been serialized. - * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer - * for data that caller is responsible for freeing (only if function returns - * successfully). - * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring - * that "*pp" is large enough to accept all of the serialized data. - * Returns < 0 on error, >= 0 indicating bytes written (or would have been) - * on success. - */ -__owur int i2d_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); - -/* - * Parses an SCT list in DER format and returns it. - * If "a" or "*a" is NULL, a new stack will be created that the caller is - * responsible for freeing (by calling SCT_LIST_free). - * "**pp" and "*pp" must not be NULL. - * Upon success, "*pp" will point to after the last bytes read, and a stack - * will be returned. - * Upon failure, a NULL pointer will be returned, and the position of "*pp" is - * not defined. - */ -STACK_OF(SCT) *d2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, - long len); - -/* - * Serialize (to TLS format) an |sct| and write it to |out|. - * If |out| is null, no SCT will be output but the length will still be returned. - * If |out| points to a null pointer, a string will be allocated to hold the - * TLS-format SCT. It is the responsibility of the caller to free it. - * If |out| points to an allocated string, the TLS-format SCT will be written - * to it. - * The length of the SCT in TLS format will be returned. - */ -__owur int i2o_SCT(const SCT *sct, unsigned char **out); - -/* - * Parses an SCT in TLS format and returns it. - * If |psct| is not null, it will end up pointing to the parsed SCT. If it - * already points to a non-null pointer, the pointer will be free'd. - * |in| should be a pointer to a string containing the TLS-format SCT. - * |in| will be advanced to the end of the SCT if parsing succeeds. - * |len| should be the length of the SCT in |in|. - * Returns NULL if an error occurs. - * If the SCT is an unsupported version, only the SCT's 'sct' and 'sct_len' - * fields will be populated (with |in| and |len| respectively). - */ -SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); - -/******************** - * CT log functions * - ********************/ - -/* - * Creates a new CT log instance with the given |public_key| and |name|. - * Takes ownership of |public_key| but copies |name|. - * Returns NULL if malloc fails or if |public_key| cannot be converted to DER. - * Should be deleted by the caller using CTLOG_free when no longer needed. - */ -CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); - -/* - * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER - * in |pkey_base64|. The |name| is a string to help users identify this log. - * Returns 1 on success, 0 on failure. - * Should be deleted by the caller using CTLOG_free when no longer needed. - */ -int CTLOG_new_from_base64(CTLOG ** ct_log, - const char *pkey_base64, const char *name); - -/* - * Deletes a CT log instance and its fields. - */ -void CTLOG_free(CTLOG *log); - -/* Gets the name of the CT log */ -const char *CTLOG_get0_name(const CTLOG *log); -/* Gets the ID of the CT log */ -void CTLOG_get0_log_id(const CTLOG *log, const uint8_t **log_id, - size_t *log_id_len); -/* Gets the public key of the CT log */ -EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); - -/************************** - * CT log store functions * - **************************/ - -/* - * Creates a new CT log store. - * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. - */ -CTLOG_STORE *CTLOG_STORE_new(void); - -/* - * Deletes a CT log store and all of the CT log instances held within. - */ -void CTLOG_STORE_free(CTLOG_STORE *store); - -/* - * Finds a CT log in the store based on its log ID. - * Returns the CT log, or NULL if no match is found. - */ -const CTLOG *CTLOG_STORE_get0_log_by_id(const CTLOG_STORE *store, - const uint8_t *log_id, - size_t log_id_len); - -/* - * Loads a CT log list into a |store| from a |file|. - * Returns 1 if loading is successful, or 0 otherwise. - */ -__owur int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file); - -/* - * Loads the default CT log list into a |store|. - * See internal/cryptlib.h for the environment variable and file path that are - * consulted to find the default file. - * Returns 1 if loading is successful, or 0 otherwise. - */ -__owur int CTLOG_STORE_load_default_file(CTLOG_STORE *store); - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/cterr.h b/submodules/MtProtoKit/openssl/openssl/cterr.h deleted file mode 100644 index feb7bc5663..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/cterr.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CTERR_H -# define HEADER_CTERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_CT - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CT_strings(void); - -/* - * CT function codes. - */ -# define CT_F_CTLOG_NEW 117 -# define CT_F_CTLOG_NEW_FROM_BASE64 118 -# define CT_F_CTLOG_NEW_FROM_CONF 119 -# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 122 -# define CT_F_CTLOG_STORE_LOAD_FILE 123 -# define CT_F_CTLOG_STORE_LOAD_LOG 130 -# define CT_F_CTLOG_STORE_NEW 131 -# define CT_F_CT_BASE64_DECODE 124 -# define CT_F_CT_POLICY_EVAL_CTX_NEW 133 -# define CT_F_CT_V1_LOG_ID_FROM_PKEY 125 -# define CT_F_I2O_SCT 107 -# define CT_F_I2O_SCT_LIST 108 -# define CT_F_I2O_SCT_SIGNATURE 109 -# define CT_F_O2I_SCT 110 -# define CT_F_O2I_SCT_LIST 111 -# define CT_F_O2I_SCT_SIGNATURE 112 -# define CT_F_SCT_CTX_NEW 126 -# define CT_F_SCT_CTX_VERIFY 128 -# define CT_F_SCT_NEW 100 -# define CT_F_SCT_NEW_FROM_BASE64 127 -# define CT_F_SCT_SET0_LOG_ID 101 -# define CT_F_SCT_SET1_EXTENSIONS 114 -# define CT_F_SCT_SET1_LOG_ID 115 -# define CT_F_SCT_SET1_SIGNATURE 116 -# define CT_F_SCT_SET_LOG_ENTRY_TYPE 102 -# define CT_F_SCT_SET_SIGNATURE_NID 103 -# define CT_F_SCT_SET_VERSION 104 - -/* - * CT reason codes. - */ -# define CT_R_BASE64_DECODE_ERROR 108 -# define CT_R_INVALID_LOG_ID_LENGTH 100 -# define CT_R_LOG_CONF_INVALID 109 -# define CT_R_LOG_CONF_INVALID_KEY 110 -# define CT_R_LOG_CONF_MISSING_DESCRIPTION 111 -# define CT_R_LOG_CONF_MISSING_KEY 112 -# define CT_R_LOG_KEY_INVALID 113 -# define CT_R_SCT_FUTURE_TIMESTAMP 116 -# define CT_R_SCT_INVALID 104 -# define CT_R_SCT_INVALID_SIGNATURE 107 -# define CT_R_SCT_LIST_INVALID 105 -# define CT_R_SCT_LOG_ID_MISMATCH 114 -# define CT_R_SCT_NOT_SET 106 -# define CT_R_SCT_UNSUPPORTED_VERSION 115 -# define CT_R_UNRECOGNIZED_SIGNATURE_NID 101 -# define CT_R_UNSUPPORTED_ENTRY_TYPE 102 -# define CT_R_UNSUPPORTED_VERSION 103 - -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/des.h b/submodules/MtProtoKit/openssl/openssl/des.h deleted file mode 100644 index be4abbdfd0..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/des.h +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DES_H -# define HEADER_DES_H - -# include - -# ifndef OPENSSL_NO_DES -# ifdef __cplusplus -extern "C" { -# endif -# include - -typedef unsigned int DES_LONG; - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -typedef unsigned char DES_cblock[8]; -typedef /* const */ unsigned char const_DES_cblock[8]; -/* - * With "const", gcc 2.8.1 on Solaris thinks that DES_cblock * and - * const_DES_cblock * are incompatible pointer types. - */ - -typedef struct DES_ks { - union { - DES_cblock cblock; - /* - * make sure things are correct size on machines with 8 byte longs - */ - DES_LONG deslong[2]; - } ks[16]; -} DES_key_schedule; - -# define DES_KEY_SZ (sizeof(DES_cblock)) -# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) - -# define DES_ENCRYPT 1 -# define DES_DECRYPT 0 - -# define DES_CBC_MODE 0 -# define DES_PCBC_MODE 1 - -# define DES_ecb2_encrypt(i,o,k1,k2,e) \ - DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) - -# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ - DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) - -# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ - DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) - -# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ - DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) - -OPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */ -# define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key) - -const char *DES_options(void); -void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, - DES_key_schedule *ks1, DES_key_schedule *ks2, - DES_key_schedule *ks3, int enc); -DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, - long length, DES_key_schedule *schedule, - const_DES_cblock *ivec); -/* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ -void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, const_DES_cblock *inw, - const_DES_cblock *outw, int enc); -void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, - DES_key_schedule *ks, int enc); - -/* - * This is the DES encryption function that gets called by just about every - * other DES routine in the library. You should not use this function except - * to implement 'modes' of DES. I say this because the functions that call - * this routine do the conversion from 'char *' to long, and this needs to be - * done to make sure 'non-aligned' memory access do not occur. The - * characters are loaded 'little endian'. Data is a pointer to 2 unsigned - * long's and ks is the DES_key_schedule to use. enc, is non zero specifies - * encryption, zero if decryption. - */ -void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); - -/* - * This functions is the same as DES_encrypt1() except that the DES initial - * permutation (IP) and final permutation (FP) have been left out. As for - * DES_encrypt1(), you should not use this function. It is used by the - * routines in the library that implement triple DES. IP() DES_encrypt2() - * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1() - * DES_encrypt1() DES_encrypt1() except faster :-). - */ -void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); - -void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); -void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); -void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, - DES_key_schedule *ks1, DES_key_schedule *ks2, - DES_key_schedule *ks3, DES_cblock *ivec, int enc); -void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3, - DES_cblock *ivec, int *num, int enc); -void DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out, - int numbits, long length, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3, - DES_cblock *ivec, int enc); -void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3, - DES_cblock *ivec, int *num); -char *DES_fcrypt(const char *buf, const char *salt, char *ret); -char *DES_crypt(const char *buf, const char *salt); -void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec); -void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], - long length, int out_count, DES_cblock *seed); -int DES_random_key(DES_cblock *ret); -void DES_set_odd_parity(DES_cblock *key); -int DES_check_key_parity(const_DES_cblock *key); -int DES_is_weak_key(const_DES_cblock *key); -/* - * DES_set_key (= set_key = DES_key_sched = key_sched) calls - * DES_set_key_checked if global variable DES_check_key is set, - * DES_set_key_unchecked otherwise. - */ -int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); -int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); -int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); -void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); -void DES_string_to_key(const char *str, DES_cblock *key); -void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); -void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int *num, int enc); -void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int *num); - -# define DES_fixup_key_parity DES_set_odd_parity - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/des_old.h b/submodules/MtProtoKit/openssl/openssl/des_old.h deleted file mode 100644 index ee7607a241..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/des_old.h +++ /dev/null @@ -1,497 +0,0 @@ -/* crypto/des/des_old.h */ - -/*- - * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING - * - * The function names in here are deprecated and are only present to - * provide an interface compatible with openssl 0.9.6 and older as - * well as libdes. OpenSSL now provides functions where "des_" has - * been replaced with "DES_" in the names, to make it possible to - * make incompatible changes that are needed for C type security and - * other stuff. - * - * This include files has two compatibility modes: - * - * - If OPENSSL_DES_LIBDES_COMPATIBILITY is defined, you get an API - * that is compatible with libdes and SSLeay. - * - If OPENSSL_DES_LIBDES_COMPATIBILITY isn't defined, you get an - * API that is compatible with OpenSSL 0.9.5x to 0.9.6x. - * - * Note that these modes break earlier snapshots of OpenSSL, where - * libdes compatibility was the only available mode or (later on) the - * prefered compatibility mode. However, after much consideration - * (and more or less violent discussions with external parties), it - * was concluded that OpenSSL should be compatible with earlier versions - * of itself before anything else. Also, in all honesty, libdes is - * an old beast that shouldn't really be used any more. - * - * Please consider starting to use the DES_ functions rather than the - * des_ ones. The des_ functions will disappear completely before - * OpenSSL 1.0! - * - * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING - */ - -/* - * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project - * 2001. - */ -/* ==================================================================== - * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_DES_H -# define HEADER_DES_H - -# include /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG */ - -# ifdef OPENSSL_NO_DES -# error DES is disabled. -# endif - -# ifndef HEADER_NEW_DES_H -# error You must include des.h, not des_old.h directly. -# endif - -# ifdef _KERBEROS_DES_H -# error replaces . -# endif - -# include - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# ifdef _ -# undef _ -# endif - -typedef unsigned char _ossl_old_des_cblock[8]; -typedef struct _ossl_old_des_ks_struct { - union { - _ossl_old_des_cblock _; - /* - * make sure things are correct size on machines with 8 byte longs - */ - DES_LONG pad[2]; - } ks; -} _ossl_old_des_key_schedule[16]; - -# ifndef OPENSSL_DES_LIBDES_COMPATIBILITY -# define des_cblock DES_cblock -# define const_des_cblock const_DES_cblock -# define des_key_schedule DES_key_schedule -# define des_ecb3_encrypt(i,o,k1,k2,k3,e)\ - DES_ecb3_encrypt((i),(o),&(k1),&(k2),&(k3),(e)) -# define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\ - DES_ede3_cbc_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(e)) -# define des_ede3_cbcm_encrypt(i,o,l,k1,k2,k3,iv1,iv2,e)\ - DES_ede3_cbcm_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv1),(iv2),(e)) -# define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\ - DES_ede3_cfb64_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(n),(e)) -# define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\ - DES_ede3_ofb64_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(n)) -# define des_options()\ - DES_options() -# define des_cbc_cksum(i,o,l,k,iv)\ - DES_cbc_cksum((i),(o),(l),&(k),(iv)) -# define des_cbc_encrypt(i,o,l,k,iv,e)\ - DES_cbc_encrypt((i),(o),(l),&(k),(iv),(e)) -# define des_ncbc_encrypt(i,o,l,k,iv,e)\ - DES_ncbc_encrypt((i),(o),(l),&(k),(iv),(e)) -# define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\ - DES_xcbc_encrypt((i),(o),(l),&(k),(iv),(inw),(outw),(e)) -# define des_cfb_encrypt(i,o,n,l,k,iv,e)\ - DES_cfb_encrypt((i),(o),(n),(l),&(k),(iv),(e)) -# define des_ecb_encrypt(i,o,k,e)\ - DES_ecb_encrypt((i),(o),&(k),(e)) -# define des_encrypt1(d,k,e)\ - DES_encrypt1((d),&(k),(e)) -# define des_encrypt2(d,k,e)\ - DES_encrypt2((d),&(k),(e)) -# define des_encrypt3(d,k1,k2,k3)\ - DES_encrypt3((d),&(k1),&(k2),&(k3)) -# define des_decrypt3(d,k1,k2,k3)\ - DES_decrypt3((d),&(k1),&(k2),&(k3)) -# define des_xwhite_in2out(k,i,o)\ - DES_xwhite_in2out((k),(i),(o)) -# define des_enc_read(f,b,l,k,iv)\ - DES_enc_read((f),(b),(l),&(k),(iv)) -# define des_enc_write(f,b,l,k,iv)\ - DES_enc_write((f),(b),(l),&(k),(iv)) -# define des_fcrypt(b,s,r)\ - DES_fcrypt((b),(s),(r)) -# if 0 -# define des_crypt(b,s)\ - DES_crypt((b),(s)) -# if !defined(PERL5) && !defined(__FreeBSD__) && !defined(NeXT) && !defined(__OpenBSD__) -# define crypt(b,s)\ - DES_crypt((b),(s)) -# endif -# endif -# define des_ofb_encrypt(i,o,n,l,k,iv)\ - DES_ofb_encrypt((i),(o),(n),(l),&(k),(iv)) -# define des_pcbc_encrypt(i,o,l,k,iv,e)\ - DES_pcbc_encrypt((i),(o),(l),&(k),(iv),(e)) -# define des_quad_cksum(i,o,l,c,s)\ - DES_quad_cksum((i),(o),(l),(c),(s)) -# define des_random_seed(k)\ - _ossl_096_des_random_seed((k)) -# define des_random_key(r)\ - DES_random_key((r)) -# define des_read_password(k,p,v) \ - DES_read_password((k),(p),(v)) -# define des_read_2passwords(k1,k2,p,v) \ - DES_read_2passwords((k1),(k2),(p),(v)) -# define des_set_odd_parity(k)\ - DES_set_odd_parity((k)) -# define des_check_key_parity(k)\ - DES_check_key_parity((k)) -# define des_is_weak_key(k)\ - DES_is_weak_key((k)) -# define des_set_key(k,ks)\ - DES_set_key((k),&(ks)) -# define des_key_sched(k,ks)\ - DES_key_sched((k),&(ks)) -# define des_set_key_checked(k,ks)\ - DES_set_key_checked((k),&(ks)) -# define des_set_key_unchecked(k,ks)\ - DES_set_key_unchecked((k),&(ks)) -# define des_string_to_key(s,k)\ - DES_string_to_key((s),(k)) -# define des_string_to_2keys(s,k1,k2)\ - DES_string_to_2keys((s),(k1),(k2)) -# define des_cfb64_encrypt(i,o,l,ks,iv,n,e)\ - DES_cfb64_encrypt((i),(o),(l),&(ks),(iv),(n),(e)) -# define des_ofb64_encrypt(i,o,l,ks,iv,n)\ - DES_ofb64_encrypt((i),(o),(l),&(ks),(iv),(n)) - -# define des_ecb2_encrypt(i,o,k1,k2,e) \ - des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) - -# define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ - des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) - -# define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ - des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) - -# define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ - des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) - -# define des_check_key DES_check_key -# define des_rw_mode DES_rw_mode -# else /* libdes compatibility */ -/* - * Map all symbol names to _ossl_old_des_* form, so we avoid all clashes with - * libdes - */ -# define des_cblock _ossl_old_des_cblock -# define des_key_schedule _ossl_old_des_key_schedule -# define des_ecb3_encrypt(i,o,k1,k2,k3,e)\ - _ossl_old_des_ecb3_encrypt((i),(o),(k1),(k2),(k3),(e)) -# define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\ - _ossl_old_des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(e)) -# define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\ - _ossl_old_des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n),(e)) -# define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\ - _ossl_old_des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n)) -# define des_options()\ - _ossl_old_des_options() -# define des_cbc_cksum(i,o,l,k,iv)\ - _ossl_old_des_cbc_cksum((i),(o),(l),(k),(iv)) -# define des_cbc_encrypt(i,o,l,k,iv,e)\ - _ossl_old_des_cbc_encrypt((i),(o),(l),(k),(iv),(e)) -# define des_ncbc_encrypt(i,o,l,k,iv,e)\ - _ossl_old_des_ncbc_encrypt((i),(o),(l),(k),(iv),(e)) -# define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\ - _ossl_old_des_xcbc_encrypt((i),(o),(l),(k),(iv),(inw),(outw),(e)) -# define des_cfb_encrypt(i,o,n,l,k,iv,e)\ - _ossl_old_des_cfb_encrypt((i),(o),(n),(l),(k),(iv),(e)) -# define des_ecb_encrypt(i,o,k,e)\ - _ossl_old_des_ecb_encrypt((i),(o),(k),(e)) -# define des_encrypt(d,k,e)\ - _ossl_old_des_encrypt((d),(k),(e)) -# define des_encrypt2(d,k,e)\ - _ossl_old_des_encrypt2((d),(k),(e)) -# define des_encrypt3(d,k1,k2,k3)\ - _ossl_old_des_encrypt3((d),(k1),(k2),(k3)) -# define des_decrypt3(d,k1,k2,k3)\ - _ossl_old_des_decrypt3((d),(k1),(k2),(k3)) -# define des_xwhite_in2out(k,i,o)\ - _ossl_old_des_xwhite_in2out((k),(i),(o)) -# define des_enc_read(f,b,l,k,iv)\ - _ossl_old_des_enc_read((f),(b),(l),(k),(iv)) -# define des_enc_write(f,b,l,k,iv)\ - _ossl_old_des_enc_write((f),(b),(l),(k),(iv)) -# define des_fcrypt(b,s,r)\ - _ossl_old_des_fcrypt((b),(s),(r)) -# define des_crypt(b,s)\ - _ossl_old_des_crypt((b),(s)) -# if 0 -# define crypt(b,s)\ - _ossl_old_crypt((b),(s)) -# endif -# define des_ofb_encrypt(i,o,n,l,k,iv)\ - _ossl_old_des_ofb_encrypt((i),(o),(n),(l),(k),(iv)) -# define des_pcbc_encrypt(i,o,l,k,iv,e)\ - _ossl_old_des_pcbc_encrypt((i),(o),(l),(k),(iv),(e)) -# define des_quad_cksum(i,o,l,c,s)\ - _ossl_old_des_quad_cksum((i),(o),(l),(c),(s)) -# define des_random_seed(k)\ - _ossl_old_des_random_seed((k)) -# define des_random_key(r)\ - _ossl_old_des_random_key((r)) -# define des_read_password(k,p,v) \ - _ossl_old_des_read_password((k),(p),(v)) -# define des_read_2passwords(k1,k2,p,v) \ - _ossl_old_des_read_2passwords((k1),(k2),(p),(v)) -# define des_set_odd_parity(k)\ - _ossl_old_des_set_odd_parity((k)) -# define des_is_weak_key(k)\ - _ossl_old_des_is_weak_key((k)) -# define des_set_key(k,ks)\ - _ossl_old_des_set_key((k),(ks)) -# define des_key_sched(k,ks)\ - _ossl_old_des_key_sched((k),(ks)) -# define des_string_to_key(s,k)\ - _ossl_old_des_string_to_key((s),(k)) -# define des_string_to_2keys(s,k1,k2)\ - _ossl_old_des_string_to_2keys((s),(k1),(k2)) -# define des_cfb64_encrypt(i,o,l,ks,iv,n,e)\ - _ossl_old_des_cfb64_encrypt((i),(o),(l),(ks),(iv),(n),(e)) -# define des_ofb64_encrypt(i,o,l,ks,iv,n)\ - _ossl_old_des_ofb64_encrypt((i),(o),(l),(ks),(iv),(n)) - -# define des_ecb2_encrypt(i,o,k1,k2,e) \ - des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) - -# define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ - des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) - -# define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ - des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) - -# define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ - des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) - -# define des_check_key DES_check_key -# define des_rw_mode DES_rw_mode -# endif - -const char *_ossl_old_des_options(void); -void _ossl_old_des_ecb3_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, - _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3, int enc); -DES_LONG _ossl_old_des_cbc_cksum(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec); -void _ossl_old_des_cbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int enc); -void _ossl_old_des_ncbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int enc); -void _ossl_old_des_xcbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, - _ossl_old_des_cblock *inw, - _ossl_old_des_cblock *outw, int enc); -void _ossl_old_des_cfb_encrypt(unsigned char *in, unsigned char *out, - int numbits, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int enc); -void _ossl_old_des_ecb_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, - _ossl_old_des_key_schedule ks, int enc); -void _ossl_old_des_encrypt(DES_LONG *data, _ossl_old_des_key_schedule ks, - int enc); -void _ossl_old_des_encrypt2(DES_LONG *data, _ossl_old_des_key_schedule ks, - int enc); -void _ossl_old_des_encrypt3(DES_LONG *data, _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3); -void _ossl_old_des_decrypt3(DES_LONG *data, _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3); -void _ossl_old_des_ede3_cbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3, - _ossl_old_des_cblock *ivec, int enc); -void _ossl_old_des_ede3_cfb64_encrypt(unsigned char *in, unsigned char *out, - long length, - _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3, - _ossl_old_des_cblock *ivec, int *num, - int enc); -void _ossl_old_des_ede3_ofb64_encrypt(unsigned char *in, unsigned char *out, - long length, - _ossl_old_des_key_schedule ks1, - _ossl_old_des_key_schedule ks2, - _ossl_old_des_key_schedule ks3, - _ossl_old_des_cblock *ivec, int *num); -# if 0 -void _ossl_old_des_xwhite_in2out(_ossl_old_des_cblock (*des_key), - _ossl_old_des_cblock (*in_white), - _ossl_old_des_cblock (*out_white)); -# endif - -int _ossl_old_des_enc_read(int fd, char *buf, int len, - _ossl_old_des_key_schedule sched, - _ossl_old_des_cblock *iv); -int _ossl_old_des_enc_write(int fd, char *buf, int len, - _ossl_old_des_key_schedule sched, - _ossl_old_des_cblock *iv); -char *_ossl_old_des_fcrypt(const char *buf, const char *salt, char *ret); -char *_ossl_old_des_crypt(const char *buf, const char *salt); -# if !defined(PERL5) && !defined(NeXT) -char *_ossl_old_crypt(const char *buf, const char *salt); -# endif -void _ossl_old_des_ofb_encrypt(unsigned char *in, unsigned char *out, - int numbits, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec); -void _ossl_old_des_pcbc_encrypt(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int enc); -DES_LONG _ossl_old_des_quad_cksum(_ossl_old_des_cblock *input, - _ossl_old_des_cblock *output, long length, - int out_count, _ossl_old_des_cblock *seed); -void _ossl_old_des_random_seed(_ossl_old_des_cblock key); -void _ossl_old_des_random_key(_ossl_old_des_cblock ret); -int _ossl_old_des_read_password(_ossl_old_des_cblock *key, const char *prompt, - int verify); -int _ossl_old_des_read_2passwords(_ossl_old_des_cblock *key1, - _ossl_old_des_cblock *key2, - const char *prompt, int verify); -void _ossl_old_des_set_odd_parity(_ossl_old_des_cblock *key); -int _ossl_old_des_is_weak_key(_ossl_old_des_cblock *key); -int _ossl_old_des_set_key(_ossl_old_des_cblock *key, - _ossl_old_des_key_schedule schedule); -int _ossl_old_des_key_sched(_ossl_old_des_cblock *key, - _ossl_old_des_key_schedule schedule); -void _ossl_old_des_string_to_key(char *str, _ossl_old_des_cblock *key); -void _ossl_old_des_string_to_2keys(char *str, _ossl_old_des_cblock *key1, - _ossl_old_des_cblock *key2); -void _ossl_old_des_cfb64_encrypt(unsigned char *in, unsigned char *out, - long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int *num, - int enc); -void _ossl_old_des_ofb64_encrypt(unsigned char *in, unsigned char *out, - long length, - _ossl_old_des_key_schedule schedule, - _ossl_old_des_cblock *ivec, int *num); - -void _ossl_096_des_random_seed(des_cblock *key); - -/* - * The following definitions provide compatibility with the MIT Kerberos - * library. The _ossl_old_des_key_schedule structure is not binary - * compatible. - */ - -# define _KERBEROS_DES_H - -# define KRBDES_ENCRYPT DES_ENCRYPT -# define KRBDES_DECRYPT DES_DECRYPT - -# ifdef KERBEROS -# define ENCRYPT DES_ENCRYPT -# define DECRYPT DES_DECRYPT -# endif - -# ifndef NCOMPAT -# define C_Block des_cblock -# define Key_schedule des_key_schedule -# define KEY_SZ DES_KEY_SZ -# define string_to_key des_string_to_key -# define read_pw_string des_read_pw_string -# define random_key des_random_key -# define pcbc_encrypt des_pcbc_encrypt -# define set_key des_set_key -# define key_sched des_key_sched -# define ecb_encrypt des_ecb_encrypt -# define cbc_encrypt des_cbc_encrypt -# define ncbc_encrypt des_ncbc_encrypt -# define xcbc_encrypt des_xcbc_encrypt -# define cbc_cksum des_cbc_cksum -# define quad_cksum des_quad_cksum -# define check_parity des_check_key_parity -# endif - -# define des_fixup_key_parity DES_fixup_key_parity - -#ifdef __cplusplus -} -#endif - -/* for DES_read_pw_string et al */ -# include - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/dh.h b/submodules/MtProtoKit/openssl/openssl/dh.h deleted file mode 100644 index 3527540cdd..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/dh.h +++ /dev/null @@ -1,340 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DH_H -# define HEADER_DH_H - -# include - -# ifndef OPENSSL_NO_DH -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include - -# ifdef __cplusplus -extern "C" { -# endif - -# ifndef OPENSSL_DH_MAX_MODULUS_BITS -# define OPENSSL_DH_MAX_MODULUS_BITS 10000 -# endif - -# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 - -# define DH_FLAG_CACHE_MONT_P 0x01 - -# if OPENSSL_API_COMPAT < 0x10100000L -/* - * Does nothing. Previously this switched off constant time behaviour. - */ -# define DH_FLAG_NO_EXP_CONSTTIME 0x00 -# endif - -/* - * If this flag is set the DH method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its responsibility to ensure the - * result is compliant. - */ - -# define DH_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define DH_FLAG_NON_FIPS_ALLOW 0x0400 - -/* Already defined in ossl_typ.h */ -/* typedef struct dh_st DH; */ -/* typedef struct dh_method DH_METHOD; */ - -DECLARE_ASN1_ITEM(DHparams) - -# define DH_GENERATOR_2 2 -/* #define DH_GENERATOR_3 3 */ -# define DH_GENERATOR_5 5 - -/* DH_check error codes */ -# define DH_CHECK_P_NOT_PRIME 0x01 -# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 -# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 -# define DH_NOT_SUITABLE_GENERATOR 0x08 -# define DH_CHECK_Q_NOT_PRIME 0x10 -# define DH_CHECK_INVALID_Q_VALUE 0x20 -# define DH_CHECK_INVALID_J_VALUE 0x40 - -/* DH_check_pub_key error codes */ -# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 -# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 -# define DH_CHECK_PUBKEY_INVALID 0x04 - -/* - * primes p where (p-1)/2 is prime too are called "safe"; we define this for - * backward compatibility: - */ -# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME - -# define d2i_DHparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHparams,(fp), (unsigned char *)(x)) -# define d2i_DHparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, x) -# define i2d_DHparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) - -# define d2i_DHxparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHxparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHxparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHxparams,(fp), (unsigned char *)(x)) -# define d2i_DHxparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHxparams, bp, x) -# define i2d_DHxparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH, i2d_DHxparams, bp, x) - -DH *DHparams_dup(DH *); - -const DH_METHOD *DH_OpenSSL(void); - -void DH_set_default_method(const DH_METHOD *meth); -const DH_METHOD *DH_get_default_method(void); -int DH_set_method(DH *dh, const DH_METHOD *meth); -DH *DH_new_method(ENGINE *engine); - -DH *DH_new(void); -void DH_free(DH *dh); -int DH_up_ref(DH *dh); -int DH_bits(const DH *dh); -int DH_size(const DH *dh); -int DH_security_bits(const DH *dh); -#define DH_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, l, p, newf, dupf, freef) -int DH_set_ex_data(DH *d, int idx, void *arg); -void *DH_get_ex_data(DH *d, int idx); - -/* Deprecated version */ -DEPRECATEDIN_0_9_8(DH *DH_generate_parameters(int prime_len, int generator, - void (*callback) (int, int, - void *), - void *cb_arg)) - -/* New version */ -int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, - BN_GENCB *cb); - -int DH_check_params_ex(const DH *dh); -int DH_check_ex(const DH *dh); -int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); -int DH_check_params(const DH *dh, int *ret); -int DH_check(const DH *dh, int *codes); -int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes); -int DH_generate_key(DH *dh); -int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); -int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh); -DH *d2i_DHparams(DH **a, const unsigned char **pp, long length); -int i2d_DHparams(const DH *a, unsigned char **pp); -DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length); -int i2d_DHxparams(const DH *a, unsigned char **pp); -# ifndef OPENSSL_NO_STDIO -int DHparams_print_fp(FILE *fp, const DH *x); -# endif -int DHparams_print(BIO *bp, const DH *x); - -/* RFC 5114 parameters */ -DH *DH_get_1024_160(void); -DH *DH_get_2048_224(void); -DH *DH_get_2048_256(void); - -/* Named parameters, currently RFC7919 */ -DH *DH_new_by_nid(int nid); -int DH_get_nid(const DH *dh); - -# ifndef OPENSSL_NO_CMS -/* RFC2631 KDF */ -int DH_KDF_X9_42(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - ASN1_OBJECT *key_oid, - const unsigned char *ukm, size_t ukmlen, const EVP_MD *md); -# endif - -void DH_get0_pqg(const DH *dh, - const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); -int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); -void DH_get0_key(const DH *dh, - const BIGNUM **pub_key, const BIGNUM **priv_key); -int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); -const BIGNUM *DH_get0_p(const DH *dh); -const BIGNUM *DH_get0_q(const DH *dh); -const BIGNUM *DH_get0_g(const DH *dh); -const BIGNUM *DH_get0_priv_key(const DH *dh); -const BIGNUM *DH_get0_pub_key(const DH *dh); -void DH_clear_flags(DH *dh, int flags); -int DH_test_flags(const DH *dh, int flags); -void DH_set_flags(DH *dh, int flags); -ENGINE *DH_get0_engine(DH *d); -long DH_get_length(const DH *dh); -int DH_set_length(DH *dh, long length); - -DH_METHOD *DH_meth_new(const char *name, int flags); -void DH_meth_free(DH_METHOD *dhm); -DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); -const char *DH_meth_get0_name(const DH_METHOD *dhm); -int DH_meth_set1_name(DH_METHOD *dhm, const char *name); -int DH_meth_get_flags(const DH_METHOD *dhm); -int DH_meth_set_flags(DH_METHOD *dhm, int flags); -void *DH_meth_get0_app_data(const DH_METHOD *dhm); -int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); -int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); -int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key) (DH *)); -int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) - (unsigned char *key, const BIGNUM *pub_key, DH *dh); -int DH_meth_set_compute_key(DH_METHOD *dhm, - int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh)); -int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) - (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, - BN_CTX *, BN_MONT_CTX *); -int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, - int (*bn_mod_exp) (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, - const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); -int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); -int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); -int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); -int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) - (DH *, int, int, BN_GENCB *); -int DH_meth_set_generate_params(DH_METHOD *dhm, - int (*generate_params) (DH *, int, int, BN_GENCB *)); - - -# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_nid(ctx, nid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, \ - EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_DH_NID, nid, NULL) - -# define EVP_PKEY_CTX_set_dh_pad(ctx, pad) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_PAD, pad, NULL) - -# define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)(oid)) - -# define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)(poid)) - -# define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)(plen)) - -# define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)(p)) - -# define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)(p)) - -# define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_DH_RFC5114 (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_DH_PARAMGEN_TYPE (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_DH_KDF_TYPE (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 10) -# define EVP_PKEY_CTRL_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 12) -# define EVP_PKEY_CTRL_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 13) -# define EVP_PKEY_CTRL_GET_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 14) -# define EVP_PKEY_CTRL_DH_NID (EVP_PKEY_ALG_CTRL + 15) -# define EVP_PKEY_CTRL_DH_PAD (EVP_PKEY_ALG_CTRL + 16) - -/* KDF types */ -# define EVP_PKEY_DH_KDF_NONE 1 -# ifndef OPENSSL_NO_CMS -# define EVP_PKEY_DH_KDF_X9_42 2 -# endif - - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/dherr.h b/submodules/MtProtoKit/openssl/openssl/dherr.h deleted file mode 100644 index 916b3bed0b..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/dherr.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DHERR_H -# define HEADER_DHERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_DH - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_DH_strings(void); - -/* - * DH function codes. - */ -# define DH_F_COMPUTE_KEY 102 -# define DH_F_DHPARAMS_PRINT_FP 101 -# define DH_F_DH_BUILTIN_GENPARAMS 106 -# define DH_F_DH_CHECK_EX 121 -# define DH_F_DH_CHECK_PARAMS_EX 122 -# define DH_F_DH_CHECK_PUB_KEY_EX 123 -# define DH_F_DH_CMS_DECRYPT 114 -# define DH_F_DH_CMS_SET_PEERKEY 115 -# define DH_F_DH_CMS_SET_SHARED_INFO 116 -# define DH_F_DH_METH_DUP 117 -# define DH_F_DH_METH_NEW 118 -# define DH_F_DH_METH_SET1_NAME 119 -# define DH_F_DH_NEW_BY_NID 104 -# define DH_F_DH_NEW_METHOD 105 -# define DH_F_DH_PARAM_DECODE 107 -# define DH_F_DH_PKEY_PUBLIC_CHECK 124 -# define DH_F_DH_PRIV_DECODE 110 -# define DH_F_DH_PRIV_ENCODE 111 -# define DH_F_DH_PUB_DECODE 108 -# define DH_F_DH_PUB_ENCODE 109 -# define DH_F_DO_DH_PRINT 100 -# define DH_F_GENERATE_KEY 103 -# define DH_F_PKEY_DH_CTRL_STR 120 -# define DH_F_PKEY_DH_DERIVE 112 -# define DH_F_PKEY_DH_INIT 125 -# define DH_F_PKEY_DH_KEYGEN 113 - -/* - * DH reason codes. - */ -# define DH_R_BAD_GENERATOR 101 -# define DH_R_BN_DECODE_ERROR 109 -# define DH_R_BN_ERROR 106 -# define DH_R_CHECK_INVALID_J_VALUE 115 -# define DH_R_CHECK_INVALID_Q_VALUE 116 -# define DH_R_CHECK_PUBKEY_INVALID 122 -# define DH_R_CHECK_PUBKEY_TOO_LARGE 123 -# define DH_R_CHECK_PUBKEY_TOO_SMALL 124 -# define DH_R_CHECK_P_NOT_PRIME 117 -# define DH_R_CHECK_P_NOT_SAFE_PRIME 118 -# define DH_R_CHECK_Q_NOT_PRIME 119 -# define DH_R_DECODE_ERROR 104 -# define DH_R_INVALID_PARAMETER_NAME 110 -# define DH_R_INVALID_PARAMETER_NID 114 -# define DH_R_INVALID_PUBKEY 102 -# define DH_R_KDF_PARAMETER_ERROR 112 -# define DH_R_KEYS_NOT_SET 108 -# define DH_R_MISSING_PUBKEY 125 -# define DH_R_MODULUS_TOO_LARGE 103 -# define DH_R_NOT_SUITABLE_GENERATOR 120 -# define DH_R_NO_PARAMETERS_SET 107 -# define DH_R_NO_PRIVATE_VALUE 100 -# define DH_R_PARAMETER_ENCODING_ERROR 105 -# define DH_R_PEER_KEY_ERROR 111 -# define DH_R_SHARED_INFO_ERROR 113 -# define DH_R_UNABLE_TO_CHECK_GENERATOR 121 - -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/dsa.h b/submodules/MtProtoKit/openssl/openssl/dsa.h deleted file mode 100644 index 822eff347a..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/dsa.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DSA_H -# define HEADER_DSA_H - -# include - -# ifndef OPENSSL_NO_DSA -# ifdef __cplusplus -extern "C" { -# endif -# include -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include - -# ifndef OPENSSL_DSA_MAX_MODULUS_BITS -# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 -# endif - -# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 - -# define DSA_FLAG_CACHE_MONT_P 0x01 -# if OPENSSL_API_COMPAT < 0x10100000L -/* - * Does nothing. Previously this switched off constant time behaviour. - */ -# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 -# endif - -/* - * If this flag is set the DSA method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its responsibility to ensure the - * result is compliant. - */ - -# define DSA_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 -# define DSA_FLAG_FIPS_CHECKED 0x0800 - -/* Already defined in ossl_typ.h */ -/* typedef struct dsa_st DSA; */ -/* typedef struct dsa_method DSA_METHOD; */ - -typedef struct DSA_SIG_st DSA_SIG; - -# define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ - (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) -# define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ - (unsigned char *)(x)) -# define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) -# define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x) - -DSA *DSAparams_dup(DSA *x); -DSA_SIG *DSA_SIG_new(void); -void DSA_SIG_free(DSA_SIG *a); -int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); -DSA_SIG *d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length); -void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); -int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); - -DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); -int DSA_do_verify(const unsigned char *dgst, int dgst_len, - DSA_SIG *sig, DSA *dsa); - -const DSA_METHOD *DSA_OpenSSL(void); - -void DSA_set_default_method(const DSA_METHOD *); -const DSA_METHOD *DSA_get_default_method(void); -int DSA_set_method(DSA *dsa, const DSA_METHOD *); -const DSA_METHOD *DSA_get_method(DSA *d); - -DSA *DSA_new(void); -DSA *DSA_new_method(ENGINE *engine); -void DSA_free(DSA *r); -/* "up" the DSA object's reference count */ -int DSA_up_ref(DSA *r); -int DSA_size(const DSA *); -int DSA_bits(const DSA *d); -int DSA_security_bits(const DSA *d); - /* next 4 return -1 on error */ -DEPRECATEDIN_1_2_0(int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)) -int DSA_sign(int type, const unsigned char *dgst, int dlen, - unsigned char *sig, unsigned int *siglen, DSA *dsa); -int DSA_verify(int type, const unsigned char *dgst, int dgst_len, - const unsigned char *sigbuf, int siglen, DSA *dsa); -#define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) -int DSA_set_ex_data(DSA *d, int idx, void *arg); -void *DSA_get_ex_data(DSA *d, int idx); - -DSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length); - -/* Deprecated version */ -DEPRECATEDIN_0_9_8(DSA *DSA_generate_parameters(int bits, - unsigned char *seed, - int seed_len, - int *counter_ret, - unsigned long *h_ret, void - (*callback) (int, int, - void *), - void *cb_arg)) - -/* New version */ -int DSA_generate_parameters_ex(DSA *dsa, int bits, - const unsigned char *seed, int seed_len, - int *counter_ret, unsigned long *h_ret, - BN_GENCB *cb); - -int DSA_generate_key(DSA *a); -int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); -int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); -int i2d_DSAparams(const DSA *a, unsigned char **pp); - -int DSAparams_print(BIO *bp, const DSA *x); -int DSA_print(BIO *bp, const DSA *x, int off); -# ifndef OPENSSL_NO_STDIO -int DSAparams_print_fp(FILE *fp, const DSA *x); -int DSA_print_fp(FILE *bp, const DSA *x, int off); -# endif - -# define DSS_prime_checks 64 -/* - * Primality test according to FIPS PUB 186-4, Appendix C.3. Since we only - * have one value here we set the number of checks to 64 which is the 128 bit - * security level that is the highest level and valid for creating a 3072 bit - * DSA key. - */ -# define DSA_is_prime(n, callback, cb_arg) \ - BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) - -# ifndef OPENSSL_NO_DH -/* - * Convert DSA structure (key or just parameters) into DH structure (be - * careful to avoid small subgroup attacks when using this!) - */ -DH *DSA_dup_DH(const DSA *r); -# endif - -# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) - -# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) - -void DSA_get0_pqg(const DSA *d, - const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); -int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); -void DSA_get0_key(const DSA *d, - const BIGNUM **pub_key, const BIGNUM **priv_key); -int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); -const BIGNUM *DSA_get0_p(const DSA *d); -const BIGNUM *DSA_get0_q(const DSA *d); -const BIGNUM *DSA_get0_g(const DSA *d); -const BIGNUM *DSA_get0_pub_key(const DSA *d); -const BIGNUM *DSA_get0_priv_key(const DSA *d); -void DSA_clear_flags(DSA *d, int flags); -int DSA_test_flags(const DSA *d, int flags); -void DSA_set_flags(DSA *d, int flags); -ENGINE *DSA_get0_engine(DSA *d); - -DSA_METHOD *DSA_meth_new(const char *name, int flags); -void DSA_meth_free(DSA_METHOD *dsam); -DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); -const char *DSA_meth_get0_name(const DSA_METHOD *dsam); -int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name); -int DSA_meth_get_flags(const DSA_METHOD *dsam); -int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); -void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); -int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data); -DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) - (const unsigned char *, int, DSA *); -int DSA_meth_set_sign(DSA_METHOD *dsam, - DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); -int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) - (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); -int DSA_meth_set_sign_setup(DSA_METHOD *dsam, - int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); -int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) - (const unsigned char *, int, DSA_SIG *, DSA *); -int DSA_meth_set_verify(DSA_METHOD *dsam, - int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); -int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) - (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, - const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); -int DSA_meth_set_mod_exp(DSA_METHOD *dsam, - int (*mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, - const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, - BN_MONT_CTX *)); -int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) - (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, - BN_CTX *, BN_MONT_CTX *); -int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, - int (*bn_mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, - const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); -int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *)); -int (*DSA_meth_get_finish(const DSA_METHOD *dsam)) (DSA *); -int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish) (DSA *)); -int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) - (DSA *, int, const unsigned char *, int, int *, unsigned long *, - BN_GENCB *); -int DSA_meth_set_paramgen(DSA_METHOD *dsam, - int (*paramgen) (DSA *, int, const unsigned char *, int, int *, - unsigned long *, BN_GENCB *)); -int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *); -int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *)); - - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/dsaerr.h b/submodules/MtProtoKit/openssl/openssl/dsaerr.h deleted file mode 100644 index 495a1ac89d..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/dsaerr.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DSAERR_H -# define HEADER_DSAERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_DSA - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_DSA_strings(void); - -/* - * DSA function codes. - */ -# define DSA_F_DSAPARAMS_PRINT 100 -# define DSA_F_DSAPARAMS_PRINT_FP 101 -# define DSA_F_DSA_BUILTIN_PARAMGEN 125 -# define DSA_F_DSA_BUILTIN_PARAMGEN2 126 -# define DSA_F_DSA_DO_SIGN 112 -# define DSA_F_DSA_DO_VERIFY 113 -# define DSA_F_DSA_METH_DUP 127 -# define DSA_F_DSA_METH_NEW 128 -# define DSA_F_DSA_METH_SET1_NAME 129 -# define DSA_F_DSA_NEW_METHOD 103 -# define DSA_F_DSA_PARAM_DECODE 119 -# define DSA_F_DSA_PRINT_FP 105 -# define DSA_F_DSA_PRIV_DECODE 115 -# define DSA_F_DSA_PRIV_ENCODE 116 -# define DSA_F_DSA_PUB_DECODE 117 -# define DSA_F_DSA_PUB_ENCODE 118 -# define DSA_F_DSA_SIGN 106 -# define DSA_F_DSA_SIGN_SETUP 107 -# define DSA_F_DSA_SIG_NEW 102 -# define DSA_F_OLD_DSA_PRIV_DECODE 122 -# define DSA_F_PKEY_DSA_CTRL 120 -# define DSA_F_PKEY_DSA_CTRL_STR 104 -# define DSA_F_PKEY_DSA_KEYGEN 121 - -/* - * DSA reason codes. - */ -# define DSA_R_BAD_Q_VALUE 102 -# define DSA_R_BN_DECODE_ERROR 108 -# define DSA_R_BN_ERROR 109 -# define DSA_R_DECODE_ERROR 104 -# define DSA_R_INVALID_DIGEST_TYPE 106 -# define DSA_R_INVALID_PARAMETERS 112 -# define DSA_R_MISSING_PARAMETERS 101 -# define DSA_R_MISSING_PRIVATE_KEY 111 -# define DSA_R_MODULUS_TOO_LARGE 103 -# define DSA_R_NO_PARAMETERS_SET 107 -# define DSA_R_PARAMETER_ENCODING_ERROR 105 -# define DSA_R_Q_NOT_PRIME 113 -# define DSA_R_SEED_LEN_SMALL 110 - -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/dso.h b/submodules/MtProtoKit/openssl/openssl/dso.h deleted file mode 100644 index c9013f5cea..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/dso.h +++ /dev/null @@ -1,451 +0,0 @@ -/* dso.h */ -/* - * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project - * 2000. - */ -/* ==================================================================== - * Copyright (c) 2000 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_DSO_H -# define HEADER_DSO_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* These values are used as commands to DSO_ctrl() */ -# define DSO_CTRL_GET_FLAGS 1 -# define DSO_CTRL_SET_FLAGS 2 -# define DSO_CTRL_OR_FLAGS 3 - -/* - * By default, DSO_load() will translate the provided filename into a form - * typical for the platform (more specifically the DSO_METHOD) using the - * dso_name_converter function of the method. Eg. win32 will transform "blah" - * into "blah.dll", and dlfcn will transform it into "libblah.so". The - * behaviour can be overriden by setting the name_converter callback in the - * DSO object (using DSO_set_name_converter()). This callback could even - * utilise the DSO_METHOD's converter too if it only wants to override - * behaviour for one or two possible DSO methods. However, the following flag - * can be set in a DSO to prevent *any* native name-translation at all - eg. - * if the caller has prompted the user for a path to a driver library so the - * filename should be interpreted as-is. - */ -# define DSO_FLAG_NO_NAME_TRANSLATION 0x01 -/* - * An extra flag to give if only the extension should be added as - * translation. This is obviously only of importance on Unix and other - * operating systems where the translation also may prefix the name with - * something, like 'lib', and ignored everywhere else. This flag is also - * ignored if DSO_FLAG_NO_NAME_TRANSLATION is used at the same time. - */ -# define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02 - -/* - * The following flag controls the translation of symbol names to upper case. - * This is currently only being implemented for OpenVMS. - */ -# define DSO_FLAG_UPCASE_SYMBOL 0x10 - -/* - * This flag loads the library with public symbols. Meaning: The exported - * symbols of this library are public to all libraries loaded after this - * library. At the moment only implemented in unix. - */ -# define DSO_FLAG_GLOBAL_SYMBOLS 0x20 - -typedef void (*DSO_FUNC_TYPE) (void); - -typedef struct dso_st DSO; - -/* - * The function prototype used for method functions (or caller-provided - * callbacks) that transform filenames. They are passed a DSO structure - * pointer (or NULL if they are to be used independantly of a DSO object) and - * a filename to transform. They should either return NULL (if there is an - * error condition) or a newly allocated string containing the transformed - * form that the caller will need to free with OPENSSL_free() when done. - */ -typedef char *(*DSO_NAME_CONVERTER_FUNC)(DSO *, const char *); -/* - * The function prototype used for method functions (or caller-provided - * callbacks) that merge two file specifications. They are passed a DSO - * structure pointer (or NULL if they are to be used independantly of a DSO - * object) and two file specifications to merge. They should either return - * NULL (if there is an error condition) or a newly allocated string - * containing the result of merging that the caller will need to free with - * OPENSSL_free() when done. Here, merging means that bits and pieces are - * taken from each of the file specifications and added together in whatever - * fashion that is sensible for the DSO method in question. The only rule - * that really applies is that if the two specification contain pieces of the - * same type, the copy from the first string takes priority. One could see - * it as the first specification is the one given by the user and the second - * being a bunch of defaults to add on if they're missing in the first. - */ -typedef char *(*DSO_MERGER_FUNC)(DSO *, const char *, const char *); - -typedef struct dso_meth_st { - const char *name; - /* - * Loads a shared library, NB: new DSO_METHODs must ensure that a - * successful load populates the loaded_filename field, and likewise a - * successful unload OPENSSL_frees and NULLs it out. - */ - int (*dso_load) (DSO *dso); - /* Unloads a shared library */ - int (*dso_unload) (DSO *dso); - /* Binds a variable */ - void *(*dso_bind_var) (DSO *dso, const char *symname); - /* - * Binds a function - assumes a return type of DSO_FUNC_TYPE. This should - * be cast to the real function prototype by the caller. Platforms that - * don't have compatible representations for different prototypes (this - * is possible within ANSI C) are highly unlikely to have shared - * libraries at all, let alone a DSO_METHOD implemented for them. - */ - DSO_FUNC_TYPE (*dso_bind_func) (DSO *dso, const char *symname); -/* I don't think this would actually be used in any circumstances. */ -# if 0 - /* Unbinds a variable */ - int (*dso_unbind_var) (DSO *dso, char *symname, void *symptr); - /* Unbinds a function */ - int (*dso_unbind_func) (DSO *dso, char *symname, DSO_FUNC_TYPE symptr); -# endif - /* - * The generic (yuck) "ctrl()" function. NB: Negative return values - * (rather than zero) indicate errors. - */ - long (*dso_ctrl) (DSO *dso, int cmd, long larg, void *parg); - /* - * The default DSO_METHOD-specific function for converting filenames to a - * canonical native form. - */ - DSO_NAME_CONVERTER_FUNC dso_name_converter; - /* - * The default DSO_METHOD-specific function for converting filenames to a - * canonical native form. - */ - DSO_MERGER_FUNC dso_merger; - /* [De]Initialisation handlers. */ - int (*init) (DSO *dso); - int (*finish) (DSO *dso); - /* Return pathname of the module containing location */ - int (*pathbyaddr) (void *addr, char *path, int sz); - /* Perform global symbol lookup, i.e. among *all* modules */ - void *(*globallookup) (const char *symname); -} DSO_METHOD; - -/**********************************************************************/ -/* The low-level handle type used to refer to a loaded shared library */ - -struct dso_st { - DSO_METHOD *meth; - /* - * Standard dlopen uses a (void *). Win32 uses a HANDLE. VMS doesn't use - * anything but will need to cache the filename for use in the dso_bind - * handler. All in all, let each method control its own destiny. - * "Handles" and such go in a STACK. - */ - STACK_OF(void) *meth_data; - int references; - int flags; - /* - * For use by applications etc ... use this for your bits'n'pieces, don't - * touch meth_data! - */ - CRYPTO_EX_DATA ex_data; - /* - * If this callback function pointer is set to non-NULL, then it will be - * used in DSO_load() in place of meth->dso_name_converter. NB: This - * should normally set using DSO_set_name_converter(). - */ - DSO_NAME_CONVERTER_FUNC name_converter; - /* - * If this callback function pointer is set to non-NULL, then it will be - * used in DSO_load() in place of meth->dso_merger. NB: This should - * normally set using DSO_set_merger(). - */ - DSO_MERGER_FUNC merger; - /* - * This is populated with (a copy of) the platform-independant filename - * used for this DSO. - */ - char *filename; - /* - * This is populated with (a copy of) the translated filename by which - * the DSO was actually loaded. It is NULL iff the DSO is not currently - * loaded. NB: This is here because the filename translation process may - * involve a callback being invoked more than once not only to convert to - * a platform-specific form, but also to try different filenames in the - * process of trying to perform a load. As such, this variable can be - * used to indicate (a) whether this DSO structure corresponds to a - * loaded library or not, and (b) the filename with which it was actually - * loaded. - */ - char *loaded_filename; -}; - -DSO *DSO_new(void); -DSO *DSO_new_method(DSO_METHOD *method); -int DSO_free(DSO *dso); -int DSO_flags(DSO *dso); -int DSO_up_ref(DSO *dso); -long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg); - -/* - * This function sets the DSO's name_converter callback. If it is non-NULL, - * then it will be used instead of the associated DSO_METHOD's function. If - * oldcb is non-NULL then it is set to the function pointer value being - * replaced. Return value is non-zero for success. - */ -int DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb, - DSO_NAME_CONVERTER_FUNC *oldcb); -/* - * These functions can be used to get/set the platform-independant filename - * used for a DSO. NB: set will fail if the DSO is already loaded. - */ -const char *DSO_get_filename(DSO *dso); -int DSO_set_filename(DSO *dso, const char *filename); -/* - * This function will invoke the DSO's name_converter callback to translate a - * filename, or if the callback isn't set it will instead use the DSO_METHOD's - * converter. If "filename" is NULL, the "filename" in the DSO itself will be - * used. If the DSO_FLAG_NO_NAME_TRANSLATION flag is set, then the filename is - * simply duplicated. NB: This function is usually called from within a - * DSO_METHOD during the processing of a DSO_load() call, and is exposed so - * that caller-created DSO_METHODs can do the same thing. A non-NULL return - * value will need to be OPENSSL_free()'d. - */ -char *DSO_convert_filename(DSO *dso, const char *filename); -/* - * This function will invoke the DSO's merger callback to merge two file - * specifications, or if the callback isn't set it will instead use the - * DSO_METHOD's merger. A non-NULL return value will need to be - * OPENSSL_free()'d. - */ -char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2); -/* - * If the DSO is currently loaded, this returns the filename that it was - * loaded under, otherwise it returns NULL. So it is also useful as a test as - * to whether the DSO is currently loaded. NB: This will not necessarily - * return the same value as DSO_convert_filename(dso, dso->filename), because - * the DSO_METHOD's load function may have tried a variety of filenames (with - * and/or without the aid of the converters) before settling on the one it - * actually loaded. - */ -const char *DSO_get_loaded_filename(DSO *dso); - -void DSO_set_default_method(DSO_METHOD *meth); -DSO_METHOD *DSO_get_default_method(void); -DSO_METHOD *DSO_get_method(DSO *dso); -DSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth); - -/* - * The all-singing all-dancing load function, you normally pass NULL for the - * first and third parameters. Use DSO_up and DSO_free for subsequent - * reference count handling. Any flags passed in will be set in the - * constructed DSO after its init() function but before the load operation. - * If 'dso' is non-NULL, 'flags' is ignored. - */ -DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags); - -/* This function binds to a variable inside a shared library. */ -void *DSO_bind_var(DSO *dso, const char *symname); - -/* This function binds to a function inside a shared library. */ -DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname); - -/* - * This method is the default, but will beg, borrow, or steal whatever method - * should be the default on any particular platform (including - * DSO_METH_null() if necessary). - */ -DSO_METHOD *DSO_METHOD_openssl(void); - -/* - * This method is defined for all platforms - if a platform has no DSO - * support then this will be the only method! - */ -DSO_METHOD *DSO_METHOD_null(void); - -/* - * If DSO_DLFCN is defined, the standard dlfcn.h-style functions (dlopen, - * dlclose, dlsym, etc) will be used and incorporated into this method. If - * not, this method will return NULL. - */ -DSO_METHOD *DSO_METHOD_dlfcn(void); - -/* - * If DSO_DL is defined, the standard dl.h-style functions (shl_load, - * shl_unload, shl_findsym, etc) will be used and incorporated into this - * method. If not, this method will return NULL. - */ -DSO_METHOD *DSO_METHOD_dl(void); - -/* If WIN32 is defined, use DLLs. If not, return NULL. */ -DSO_METHOD *DSO_METHOD_win32(void); - -/* If VMS is defined, use shared images. If not, return NULL. */ -DSO_METHOD *DSO_METHOD_vms(void); - -/* - * This function writes null-terminated pathname of DSO module containing - * 'addr' into 'sz' large caller-provided 'path' and returns the number of - * characters [including trailing zero] written to it. If 'sz' is 0 or - * negative, 'path' is ignored and required amount of charachers [including - * trailing zero] to accomodate pathname is returned. If 'addr' is NULL, then - * pathname of cryptolib itself is returned. Negative or zero return value - * denotes error. - */ -int DSO_pathbyaddr(void *addr, char *path, int sz); - -/* - * This function should be used with caution! It looks up symbols in *all* - * loaded modules and if module gets unloaded by somebody else attempt to - * dereference the pointer is doomed to have fatal consequences. Primary - * usage for this function is to probe *core* system functionality, e.g. - * check if getnameinfo(3) is available at run-time without bothering about - * OS-specific details such as libc.so.versioning or where does it actually - * reside: in libc itself or libsocket. - */ -void *DSO_global_lookup(const char *name); - -/* If BeOS is defined, use shared images. If not, return NULL. */ -DSO_METHOD *DSO_METHOD_beos(void); - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ -void ERR_load_DSO_strings(void); - -/* Error codes for the DSO functions. */ - -/* Function codes. */ -# define DSO_F_BEOS_BIND_FUNC 144 -# define DSO_F_BEOS_BIND_VAR 145 -# define DSO_F_BEOS_LOAD 146 -# define DSO_F_BEOS_NAME_CONVERTER 147 -# define DSO_F_BEOS_UNLOAD 148 -# define DSO_F_DLFCN_BIND_FUNC 100 -# define DSO_F_DLFCN_BIND_VAR 101 -# define DSO_F_DLFCN_LOAD 102 -# define DSO_F_DLFCN_MERGER 130 -# define DSO_F_DLFCN_NAME_CONVERTER 123 -# define DSO_F_DLFCN_UNLOAD 103 -# define DSO_F_DL_BIND_FUNC 104 -# define DSO_F_DL_BIND_VAR 105 -# define DSO_F_DL_LOAD 106 -# define DSO_F_DL_MERGER 131 -# define DSO_F_DL_NAME_CONVERTER 124 -# define DSO_F_DL_UNLOAD 107 -# define DSO_F_DSO_BIND_FUNC 108 -# define DSO_F_DSO_BIND_VAR 109 -# define DSO_F_DSO_CONVERT_FILENAME 126 -# define DSO_F_DSO_CTRL 110 -# define DSO_F_DSO_FREE 111 -# define DSO_F_DSO_GET_FILENAME 127 -# define DSO_F_DSO_GET_LOADED_FILENAME 128 -# define DSO_F_DSO_GLOBAL_LOOKUP 139 -# define DSO_F_DSO_LOAD 112 -# define DSO_F_DSO_MERGE 132 -# define DSO_F_DSO_NEW_METHOD 113 -# define DSO_F_DSO_PATHBYADDR 140 -# define DSO_F_DSO_SET_FILENAME 129 -# define DSO_F_DSO_SET_NAME_CONVERTER 122 -# define DSO_F_DSO_UP_REF 114 -# define DSO_F_GLOBAL_LOOKUP_FUNC 138 -# define DSO_F_PATHBYADDR 137 -# define DSO_F_VMS_BIND_SYM 115 -# define DSO_F_VMS_LOAD 116 -# define DSO_F_VMS_MERGER 133 -# define DSO_F_VMS_UNLOAD 117 -# define DSO_F_WIN32_BIND_FUNC 118 -# define DSO_F_WIN32_BIND_VAR 119 -# define DSO_F_WIN32_GLOBALLOOKUP 142 -# define DSO_F_WIN32_GLOBALLOOKUP_FUNC 143 -# define DSO_F_WIN32_JOINER 135 -# define DSO_F_WIN32_LOAD 120 -# define DSO_F_WIN32_MERGER 134 -# define DSO_F_WIN32_NAME_CONVERTER 125 -# define DSO_F_WIN32_PATHBYADDR 141 -# define DSO_F_WIN32_SPLITTER 136 -# define DSO_F_WIN32_UNLOAD 121 - -/* Reason codes. */ -# define DSO_R_CTRL_FAILED 100 -# define DSO_R_DSO_ALREADY_LOADED 110 -# define DSO_R_EMPTY_FILE_STRUCTURE 113 -# define DSO_R_FAILURE 114 -# define DSO_R_FILENAME_TOO_BIG 101 -# define DSO_R_FINISH_FAILED 102 -# define DSO_R_INCORRECT_FILE_SYNTAX 115 -# define DSO_R_LOAD_FAILED 103 -# define DSO_R_NAME_TRANSLATION_FAILED 109 -# define DSO_R_NO_FILENAME 111 -# define DSO_R_NO_FILE_SPECIFICATION 116 -# define DSO_R_NULL_HANDLE 104 -# define DSO_R_SET_FILENAME_FAILED 112 -# define DSO_R_STACK_ERROR 105 -# define DSO_R_SYM_FAILURE 106 -# define DSO_R_UNLOAD_FAILED 107 -# define DSO_R_UNSUPPORTED 108 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/dtls1.h b/submodules/MtProtoKit/openssl/openssl/dtls1.h deleted file mode 100644 index a312e386cf..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/dtls1.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DTLS1_H -# define HEADER_DTLS1_H - -#ifdef __cplusplus -extern "C" { -#endif - -# define DTLS1_VERSION 0xFEFF -# define DTLS1_2_VERSION 0xFEFD -# define DTLS_MIN_VERSION DTLS1_VERSION -# define DTLS_MAX_VERSION DTLS1_2_VERSION -# define DTLS1_VERSION_MAJOR 0xFE - -# define DTLS1_BAD_VER 0x0100 - -/* Special value for method supporting multiple versions */ -# define DTLS_ANY_VERSION 0x1FFFF - -/* lengths of messages */ -/* - * Actually the max cookie length in DTLS is 255. But we can't change this now - * due to compatibility concerns. - */ -# define DTLS1_COOKIE_LENGTH 256 - -# define DTLS1_RT_HEADER_LENGTH 13 - -# define DTLS1_HM_HEADER_LENGTH 12 - -# define DTLS1_HM_BAD_FRAGMENT -2 -# define DTLS1_HM_FRAGMENT_RETRY -3 - -# define DTLS1_CCS_HEADER_LENGTH 1 - -# define DTLS1_AL_HEADER_LENGTH 2 - -/* Timeout multipliers (timeout slice is defined in apps/timeouts.h */ -# define DTLS1_TMO_READ_COUNT 2 -# define DTLS1_TMO_WRITE_COUNT 2 - -# define DTLS1_TMO_ALERT_COUNT 12 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/e_os2.h b/submodules/MtProtoKit/openssl/openssl/e_os2.h deleted file mode 100644 index 97a776cdac..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/e_os2.h +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_E_OS2_H -# define HEADER_E_OS2_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************************** - * Detect operating systems. This probably needs completing. - * The result is that at least one OPENSSL_SYS_os macro should be defined. - * However, if none is defined, Unix is assumed. - **/ - -# define OPENSSL_SYS_UNIX - -/* --------------------- Microsoft operating systems ---------------------- */ - -/* - * Note that MSDOS actually denotes 32-bit environments running on top of - * MS-DOS, such as DJGPP one. - */ -# if defined(OPENSSL_SYS_MSDOS) -# undef OPENSSL_SYS_UNIX -# endif - -/* - * For 32 bit environment, there seems to be the CygWin environment and then - * all the others that try to do the same thing Microsoft does... - */ -/* - * UEFI lives here because it might be built with a Microsoft toolchain and - * we need to avoid the false positive match on Windows. - */ -# if defined(OPENSSL_SYS_UEFI) -# undef OPENSSL_SYS_UNIX -# elif defined(OPENSSL_SYS_UWIN) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WIN32_UWIN -# else -# if defined(__CYGWIN__) || defined(OPENSSL_SYS_CYGWIN) -# define OPENSSL_SYS_WIN32_CYGWIN -# else -# if defined(_WIN32) || defined(OPENSSL_SYS_WIN32) -# undef OPENSSL_SYS_UNIX -# if !defined(OPENSSL_SYS_WIN32) -# define OPENSSL_SYS_WIN32 -# endif -# endif -# if defined(_WIN64) || defined(OPENSSL_SYS_WIN64) -# undef OPENSSL_SYS_UNIX -# if !defined(OPENSSL_SYS_WIN64) -# define OPENSSL_SYS_WIN64 -# endif -# endif -# if defined(OPENSSL_SYS_WINNT) -# undef OPENSSL_SYS_UNIX -# endif -# if defined(OPENSSL_SYS_WINCE) -# undef OPENSSL_SYS_UNIX -# endif -# endif -# endif - -/* Anything that tries to look like Microsoft is "Windows" */ -# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WINDOWS -# ifndef OPENSSL_SYS_MSDOS -# define OPENSSL_SYS_MSDOS -# endif -# endif - -/* - * DLL settings. This part is a bit tough, because it's up to the - * application implementor how he or she will link the application, so it - * requires some macro to be used. - */ -# ifdef OPENSSL_SYS_WINDOWS -# ifndef OPENSSL_OPT_WINDLL -# if defined(_WINDLL) /* This is used when building OpenSSL to - * indicate that DLL linkage should be used */ -# define OPENSSL_OPT_WINDLL -# endif -# endif -# endif - -/* ------------------------------- OpenVMS -------------------------------- */ -# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYS_VMS) -# if !defined(OPENSSL_SYS_VMS) -# undef OPENSSL_SYS_UNIX -# endif -# define OPENSSL_SYS_VMS -# if defined(__DECC) -# define OPENSSL_SYS_VMS_DECC -# elif defined(__DECCXX) -# define OPENSSL_SYS_VMS_DECC -# define OPENSSL_SYS_VMS_DECCXX -# else -# define OPENSSL_SYS_VMS_NODECC -# endif -# endif - -/* -------------------------------- Unix ---------------------------------- */ -# ifdef OPENSSL_SYS_UNIX -# if defined(linux) || defined(__linux__) && !defined(OPENSSL_SYS_LINUX) -# define OPENSSL_SYS_LINUX -# endif -# if defined(_AIX) && !defined(OPENSSL_SYS_AIX) -# define OPENSSL_SYS_AIX -# endif -# endif - -/* -------------------------------- VOS ----------------------------------- */ -# if defined(__VOS__) && !defined(OPENSSL_SYS_VOS) -# define OPENSSL_SYS_VOS -# ifdef __HPPA__ -# define OPENSSL_SYS_VOS_HPPA -# endif -# ifdef __IA32__ -# define OPENSSL_SYS_VOS_IA32 -# endif -# endif - -/** - * That's it for OS-specific stuff - *****************************************************************************/ - -/* Specials for I/O an exit */ -# ifdef OPENSSL_SYS_MSDOS -# define OPENSSL_UNISTD_IO -# define OPENSSL_DECLARE_EXIT extern void exit(int); -# else -# define OPENSSL_UNISTD_IO OPENSSL_UNISTD -# define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ -# endif - -/*- - * OPENSSL_EXTERN is normally used to declare a symbol with possible extra - * attributes to handle its presence in a shared library. - * OPENSSL_EXPORT is used to define a symbol with extra possible attributes - * to make it visible in a shared library. - * Care needs to be taken when a header file is used both to declare and - * define symbols. Basically, for any library that exports some global - * variables, the following code must be present in the header file that - * declares them, before OPENSSL_EXTERN is used: - * - * #ifdef SOME_BUILD_FLAG_MACRO - * # undef OPENSSL_EXTERN - * # define OPENSSL_EXTERN OPENSSL_EXPORT - * #endif - * - * The default is to have OPENSSL_EXPORT and OPENSSL_EXTERN - * have some generally sensible values. - */ - -# if defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) -# define OPENSSL_EXPORT extern __declspec(dllexport) -# define OPENSSL_EXTERN extern __declspec(dllimport) -# else -# define OPENSSL_EXPORT extern -# define OPENSSL_EXTERN extern -# endif - -/*- - * Macros to allow global variables to be reached through function calls when - * required (if a shared library version requires it, for example. - * The way it's done allows definitions like this: - * - * // in foobar.c - * OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) - * // in foobar.h - * OPENSSL_DECLARE_GLOBAL(int,foobar); - * #define foobar OPENSSL_GLOBAL_REF(foobar) - */ -# ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ - type *_shadow_##name(void) \ - { static type _hide_##name=value; return &_hide_##name; } -# define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) -# define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) -# else -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) type _shadow_##name=value; -# define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name -# define OPENSSL_GLOBAL_REF(name) _shadow_##name -# endif - -# ifdef _WIN32 -# ifdef _WIN64 -# define ossl_ssize_t __int64 -# define OSSL_SSIZE_MAX _I64_MAX -# else -# define ossl_ssize_t int -# define OSSL_SSIZE_MAX INT_MAX -# endif -# endif - -# if defined(OPENSSL_SYS_UEFI) && !defined(ossl_ssize_t) -# define ossl_ssize_t INTN -# define OSSL_SSIZE_MAX MAX_INTN -# endif - -# ifndef ossl_ssize_t -# define ossl_ssize_t ssize_t -# if defined(SSIZE_MAX) -# define OSSL_SSIZE_MAX SSIZE_MAX -# elif defined(_POSIX_SSIZE_MAX) -# define OSSL_SSIZE_MAX _POSIX_SSIZE_MAX -# else -# define OSSL_SSIZE_MAX ((ssize_t)(SIZE_MAX>>1)) -# endif -# endif - -# ifdef DEBUG_UNUSED -# define __owur __attribute__((__warn_unused_result__)) -# else -# define __owur -# endif - -/* Standard integer types */ -# if defined(OPENSSL_SYS_UEFI) -typedef INT8 int8_t; -typedef UINT8 uint8_t; -typedef INT16 int16_t; -typedef UINT16 uint16_t; -typedef INT32 int32_t; -typedef UINT32 uint32_t; -typedef INT64 int64_t; -typedef UINT64 uint64_t; -# elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ - defined(__osf__) || defined(__sgi) || defined(__hpux) || \ - defined(OPENSSL_SYS_VMS) || defined (__OpenBSD__) -# include -# elif defined(_MSC_VER) && _MSC_VER<=1500 -/* - * minimally required typdefs for systems not supporting inttypes.h or - * stdint.h: currently just older VC++ - */ -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef short int16_t; -typedef unsigned short uint16_t; -typedef int int32_t; -typedef unsigned int uint32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -# else -# include -# endif - -/* ossl_inline: portable inline definition usable in public headers */ -# if !defined(inline) && !defined(__cplusplus) -# if defined(__STDC_VERSION__) && __STDC_VERSION__>=199901L - /* just use inline */ -# define ossl_inline inline -# elif defined(__GNUC__) && __GNUC__>=2 -# define ossl_inline __inline__ -# elif defined(_MSC_VER) - /* - * Visual Studio: inline is available in C++ only, however - * __inline is available for C, see - * http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx - */ -# define ossl_inline __inline -# else -# define ossl_inline -# endif -# else -# define ossl_inline inline -# endif - -# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L -# define ossl_noreturn _Noreturn -# elif defined(__GNUC__) && __GNUC__ >= 2 -# define ossl_noreturn __attribute__((noreturn)) -# else -# define ossl_noreturn -# endif - -/* ossl_unused: portable unused attribute for use in public headers */ -# if defined(__GNUC__) -# define ossl_unused __attribute__((unused)) -# else -# define ossl_unused -# endif - -#ifdef __cplusplus -} -#endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/ebcdic.h b/submodules/MtProtoKit/openssl/openssl/ebcdic.h deleted file mode 100644 index aa01285599..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ebcdic.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_EBCDIC_H -# define HEADER_EBCDIC_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Avoid name clashes with other applications */ -# define os_toascii _openssl_os_toascii -# define os_toebcdic _openssl_os_toebcdic -# define ebcdic2ascii _openssl_ebcdic2ascii -# define ascii2ebcdic _openssl_ascii2ebcdic - -extern const unsigned char os_toascii[256]; -extern const unsigned char os_toebcdic[256]; -void *ebcdic2ascii(void *dest, const void *srce, size_t count); -void *ascii2ebcdic(void *dest, const void *srce, size_t count); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/ec.h b/submodules/MtProtoKit/openssl/openssl/ec.h deleted file mode 100644 index 5af9ebdc7f..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ec.h +++ /dev/null @@ -1,1479 +0,0 @@ -/* - * Copyright 2002-2019 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_EC_H -# define HEADER_EC_H - -# include - -# ifndef OPENSSL_NO_EC -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include -# ifdef __cplusplus -extern "C" { -# endif - -# ifndef OPENSSL_ECC_MAX_FIELD_BITS -# define OPENSSL_ECC_MAX_FIELD_BITS 661 -# endif - -/** Enum for the point conversion form as defined in X9.62 (ECDSA) - * for the encoding of a elliptic curve point (x,y) */ -typedef enum { - /** the point is encoded as z||x, where the octet z specifies - * which solution of the quadratic equation y is */ - POINT_CONVERSION_COMPRESSED = 2, - /** the point is encoded as z||x||y, where z is the octet 0x04 */ - POINT_CONVERSION_UNCOMPRESSED = 4, - /** the point is encoded as z||x||y, where the octet z specifies - * which solution of the quadratic equation y is */ - POINT_CONVERSION_HYBRID = 6 -} point_conversion_form_t; - -typedef struct ec_method_st EC_METHOD; -typedef struct ec_group_st EC_GROUP; -typedef struct ec_point_st EC_POINT; -typedef struct ecpk_parameters_st ECPKPARAMETERS; -typedef struct ec_parameters_st ECPARAMETERS; - -/********************************************************************/ -/* EC_METHODs for curves over GF(p) */ -/********************************************************************/ - -/** Returns the basic GFp ec methods which provides the basis for the - * optimized methods. - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_simple_method(void); - -/** Returns GFp methods using montgomery multiplication. - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_mont_method(void); - -/** Returns GFp methods using optimized methods for NIST recommended curves - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nist_method(void); - -# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 -/** Returns 64-bit optimized methods for nistp224 - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nistp224_method(void); - -/** Returns 64-bit optimized methods for nistp256 - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nistp256_method(void); - -/** Returns 64-bit optimized methods for nistp521 - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nistp521_method(void); -# endif - -# ifndef OPENSSL_NO_EC2M -/********************************************************************/ -/* EC_METHOD for curves over GF(2^m) */ -/********************************************************************/ - -/** Returns the basic GF2m ec method - * \return EC_METHOD object - */ -const EC_METHOD *EC_GF2m_simple_method(void); - -# endif - -/********************************************************************/ -/* EC_GROUP functions */ -/********************************************************************/ - -/** Creates a new EC_GROUP object - * \param meth EC_METHOD to use - * \return newly created EC_GROUP object or NULL in case of an error. - */ -EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); - -/** Frees a EC_GROUP object - * \param group EC_GROUP object to be freed. - */ -void EC_GROUP_free(EC_GROUP *group); - -/** Clears and frees a EC_GROUP object - * \param group EC_GROUP object to be cleared and freed. - */ -void EC_GROUP_clear_free(EC_GROUP *group); - -/** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. - * \param dst destination EC_GROUP object - * \param src source EC_GROUP object - * \return 1 on success and 0 if an error occurred. - */ -int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); - -/** Creates a new EC_GROUP object and copies the copies the content - * form src to the newly created EC_KEY object - * \param src source EC_GROUP object - * \return newly created EC_GROUP object or NULL in case of an error. - */ -EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); - -/** Returns the EC_METHOD of the EC_GROUP object. - * \param group EC_GROUP object - * \return EC_METHOD used in this EC_GROUP object. - */ -const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); - -/** Returns the field type of the EC_METHOD. - * \param meth EC_METHOD object - * \return NID of the underlying field type OID. - */ -int EC_METHOD_get_field_type(const EC_METHOD *meth); - -/** Sets the generator and its order/cofactor of a EC_GROUP object. - * \param group EC_GROUP object - * \param generator EC_POINT object with the generator. - * \param order the order of the group generated by the generator. - * \param cofactor the index of the sub-group generated by the generator - * in the group of all points on the elliptic curve. - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, - const BIGNUM *order, const BIGNUM *cofactor); - -/** Returns the generator of a EC_GROUP object. - * \param group EC_GROUP object - * \return the currently used generator (possibly NULL). - */ -const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group); - -/** Returns the montgomery data for order(Generator) - * \param group EC_GROUP object - * \return the currently used montgomery data (possibly NULL). -*/ -BN_MONT_CTX *EC_GROUP_get_mont_data(const EC_GROUP *group); - -/** Gets the order of a EC_GROUP - * \param group EC_GROUP object - * \param order BIGNUM to which the order is copied - * \param ctx unused - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); - -/** Gets the order of an EC_GROUP - * \param group EC_GROUP object - * \return the group order - */ -const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group); - -/** Gets the number of bits of the order of an EC_GROUP - * \param group EC_GROUP object - * \return number of bits of group order. - */ -int EC_GROUP_order_bits(const EC_GROUP *group); - -/** Gets the cofactor of a EC_GROUP - * \param group EC_GROUP object - * \param cofactor BIGNUM to which the cofactor is copied - * \param ctx unused - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, - BN_CTX *ctx); - -/** Gets the cofactor of an EC_GROUP - * \param group EC_GROUP object - * \return the group cofactor - */ -const BIGNUM *EC_GROUP_get0_cofactor(const EC_GROUP *group); - -/** Sets the name of a EC_GROUP object - * \param group EC_GROUP object - * \param nid NID of the curve name OID - */ -void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); - -/** Returns the curve name of a EC_GROUP object - * \param group EC_GROUP object - * \return NID of the curve name OID or 0 if not set. - */ -int EC_GROUP_get_curve_name(const EC_GROUP *group); - -void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); -int EC_GROUP_get_asn1_flag(const EC_GROUP *group); - -void EC_GROUP_set_point_conversion_form(EC_GROUP *group, - point_conversion_form_t form); -point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); - -unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x); -size_t EC_GROUP_get_seed_len(const EC_GROUP *); -size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); - -/** Sets the parameters of a ec curve defined by y^2 = x^3 + a*x + b (for GFp) - * or y^2 + x*y = x^3 + a*x^2 + b (for GF2m) - * \param group EC_GROUP object - * \param p BIGNUM with the prime number (GFp) or the polynomial - * defining the underlying field (GF2m) - * \param a BIGNUM with parameter a of the equation - * \param b BIGNUM with parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); - -/** Gets the parameters of the ec curve defined by y^2 = x^3 + a*x + b (for GFp) - * or y^2 + x*y = x^3 + a*x^2 + b (for GF2m) - * \param group EC_GROUP object - * \param p BIGNUM with the prime number (GFp) or the polynomial - * defining the underlying field (GF2m) - * \param a BIGNUM for parameter a of the equation - * \param b BIGNUM for parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, - BN_CTX *ctx); - -/** Sets the parameters of an ec curve. Synonym for EC_GROUP_set_curve - * \param group EC_GROUP object - * \param p BIGNUM with the prime number (GFp) or the polynomial - * defining the underlying field (GF2m) - * \param a BIGNUM with parameter a of the equation - * \param b BIGNUM with parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, - const BIGNUM *a, const BIGNUM *b, - BN_CTX *ctx)) - -/** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve - * \param group EC_GROUP object - * \param p BIGNUM with the prime number (GFp) or the polynomial - * defining the underlying field (GF2m) - * \param a BIGNUM for parameter a of the equation - * \param b BIGNUM for parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, - BIGNUM *a, BIGNUM *b, - BN_CTX *ctx)) - -# ifndef OPENSSL_NO_EC2M -/** Sets the parameter of an ec curve. Synonym for EC_GROUP_set_curve - * \param group EC_GROUP object - * \param p BIGNUM with the prime number (GFp) or the polynomial - * defining the underlying field (GF2m) - * \param a BIGNUM with parameter a of the equation - * \param b BIGNUM with parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, - const BIGNUM *a, const BIGNUM *b, - BN_CTX *ctx)) - -/** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve - * \param group EC_GROUP object - * \param p BIGNUM with the prime number (GFp) or the polynomial - * defining the underlying field (GF2m) - * \param a BIGNUM for parameter a of the equation - * \param b BIGNUM for parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, - BIGNUM *a, BIGNUM *b, - BN_CTX *ctx)) -# endif -/** Returns the number of bits needed to represent a field element - * \param group EC_GROUP object - * \return number of bits needed to represent a field element - */ -int EC_GROUP_get_degree(const EC_GROUP *group); - -/** Checks whether the parameter in the EC_GROUP define a valid ec group - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 if group is a valid ec group and 0 otherwise - */ -int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); - -/** Checks whether the discriminant of the elliptic curve is zero or not - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 if the discriminant is not zero and 0 otherwise - */ -int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx); - -/** Compares two EC_GROUP objects - * \param a first EC_GROUP object - * \param b second EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 0 if the groups are equal, 1 if not, or -1 on error - */ -int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); - -/* - * EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() after - * choosing an appropriate EC_METHOD - */ - -/** Creates a new EC_GROUP object with the specified parameters defined - * over GFp (defined by the equation y^2 = x^3 + a*x + b) - * \param p BIGNUM with the prime number - * \param a BIGNUM with the parameter a of the equation - * \param b BIGNUM with the parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return newly created EC_GROUP object with the specified parameters - */ -EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); -# ifndef OPENSSL_NO_EC2M -/** Creates a new EC_GROUP object with the specified parameters defined - * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) - * \param p BIGNUM with the polynomial defining the underlying field - * \param a BIGNUM with the parameter a of the equation - * \param b BIGNUM with the parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return newly created EC_GROUP object with the specified parameters - */ -EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); -# endif - -/** Creates a EC_GROUP object with a curve specified by a NID - * \param nid NID of the OID of the curve name - * \return newly created EC_GROUP object with specified curve or NULL - * if an error occurred - */ -EC_GROUP *EC_GROUP_new_by_curve_name(int nid); - -/** Creates a new EC_GROUP object from an ECPARAMETERS object - * \param params pointer to the ECPARAMETERS object - * \return newly created EC_GROUP object with specified curve or NULL - * if an error occurred - */ -EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params); - -/** Creates an ECPARAMETERS object for the given EC_GROUP object. - * \param group pointer to the EC_GROUP object - * \param params pointer to an existing ECPARAMETERS object or NULL - * \return pointer to the new ECPARAMETERS object or NULL - * if an error occurred. - */ -ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group, - ECPARAMETERS *params); - -/** Creates a new EC_GROUP object from an ECPKPARAMETERS object - * \param params pointer to an existing ECPKPARAMETERS object, or NULL - * \return newly created EC_GROUP object with specified curve, or NULL - * if an error occurred - */ -EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params); - -/** Creates an ECPKPARAMETERS object for the given EC_GROUP object. - * \param group pointer to the EC_GROUP object - * \param params pointer to an existing ECPKPARAMETERS object or NULL - * \return pointer to the new ECPKPARAMETERS object or NULL - * if an error occurred. - */ -ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group, - ECPKPARAMETERS *params); - -/********************************************************************/ -/* handling of internal curves */ -/********************************************************************/ - -typedef struct { - int nid; - const char *comment; -} EC_builtin_curve; - -/* - * EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number of all - * available curves or zero if a error occurred. In case r is not zero, - * nitems EC_builtin_curve structures are filled with the data of the first - * nitems internal groups - */ -size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); - -const char *EC_curve_nid2nist(int nid); -int EC_curve_nist2nid(const char *name); - -/********************************************************************/ -/* EC_POINT functions */ -/********************************************************************/ - -/** Creates a new EC_POINT object for the specified EC_GROUP - * \param group EC_GROUP the underlying EC_GROUP object - * \return newly created EC_POINT object or NULL if an error occurred - */ -EC_POINT *EC_POINT_new(const EC_GROUP *group); - -/** Frees a EC_POINT object - * \param point EC_POINT object to be freed - */ -void EC_POINT_free(EC_POINT *point); - -/** Clears and frees a EC_POINT object - * \param point EC_POINT object to be cleared and freed - */ -void EC_POINT_clear_free(EC_POINT *point); - -/** Copies EC_POINT object - * \param dst destination EC_POINT object - * \param src source EC_POINT object - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); - -/** Creates a new EC_POINT object and copies the content of the supplied - * EC_POINT - * \param src source EC_POINT object - * \param group underlying the EC_GROUP object - * \return newly created EC_POINT object or NULL if an error occurred - */ -EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); - -/** Returns the EC_METHOD used in EC_POINT object - * \param point EC_POINT object - * \return the EC_METHOD used - */ -const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); - -/** Sets a point to infinity (neutral element) - * \param group underlying EC_GROUP object - * \param point EC_POINT to set to infinity - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); - -/** Sets the jacobian projective coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param z BIGNUM with the z-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, const BIGNUM *x, - const BIGNUM *y, const BIGNUM *z, - BN_CTX *ctx); - -/** Gets the jacobian projective coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param z BIGNUM for the z-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, - BIGNUM *y, BIGNUM *z, - BN_CTX *ctx); - -/** Sets the affine coordinates of an EC_POINT - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_set_affine_coordinates(const EC_GROUP *group, EC_POINT *p, - const BIGNUM *x, const BIGNUM *y, - BN_CTX *ctx); - -/** Gets the affine coordinates of an EC_POINT. - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p, - BIGNUM *x, BIGNUM *y, BN_CTX *ctx); - -/** Sets the affine coordinates of an EC_POINT. A synonym of - * EC_POINT_set_affine_coordinates - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - const BIGNUM *y, - BN_CTX *ctx)) - -/** Gets the affine coordinates of an EC_POINT. A synonym of - * EC_POINT_get_affine_coordinates - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, - BIGNUM *x, - BIGNUM *y, - BN_CTX *ctx)) - -/** Sets the x9.62 compressed coordinates of a EC_POINT - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with x-coordinate - * \param y_bit integer with the y-Bit (either 0 or 1) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p, - const BIGNUM *x, int y_bit, - BN_CTX *ctx); - -/** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of - * EC_POINT_set_compressed_coordinates - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with x-coordinate - * \param y_bit integer with the y-Bit (either 0 or 1) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - int y_bit, - BN_CTX *ctx)) -# ifndef OPENSSL_NO_EC2M -/** Sets the affine coordinates of an EC_POINT. A synonym of - * EC_POINT_set_affine_coordinates - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - const BIGNUM *y, - BN_CTX *ctx)) - -/** Gets the affine coordinates of an EC_POINT. A synonym of - * EC_POINT_get_affine_coordinates - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, - const EC_POINT *p, - BIGNUM *x, - BIGNUM *y, - BN_CTX *ctx)) - -/** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of - * EC_POINT_set_compressed_coordinates - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with x-coordinate - * \param y_bit integer with the y-Bit (either 0 or 1) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - int y_bit, - BN_CTX *ctx)) -# endif -/** Encodes a EC_POINT object to a octet string - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param form point conversion form - * \param buf memory buffer for the result. If NULL the function returns - * required buffer size. - * \param len length of the memory buffer - * \param ctx BN_CTX object (optional) - * \return the length of the encoded octet string or 0 if an error occurred - */ -size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p, - point_conversion_form_t form, - unsigned char *buf, size_t len, BN_CTX *ctx); - -/** Decodes a EC_POINT from a octet string - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param buf memory buffer with the encoded ec point - * \param len length of the encoded ec point - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, - const unsigned char *buf, size_t len, BN_CTX *ctx); - -/** Encodes an EC_POINT object to an allocated octet string - * \param group underlying EC_GROUP object - * \param point EC_POINT object - * \param form point conversion form - * \param pbuf returns pointer to allocated buffer - * \param ctx BN_CTX object (optional) - * \return the length of the encoded octet string or 0 if an error occurred - */ -size_t EC_POINT_point2buf(const EC_GROUP *group, const EC_POINT *point, - point_conversion_form_t form, - unsigned char **pbuf, BN_CTX *ctx); - -/* other interfaces to point2oct/oct2point: */ -BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, - point_conversion_form_t form, BIGNUM *, BN_CTX *); -EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, - EC_POINT *, BN_CTX *); -char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, - point_conversion_form_t form, BN_CTX *); -EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, - EC_POINT *, BN_CTX *); - -/********************************************************************/ -/* functions for doing EC_POINT arithmetic */ -/********************************************************************/ - -/** Computes the sum of two EC_POINT - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result (r = a + b) - * \param a EC_POINT object with the first summand - * \param b EC_POINT object with the second summand - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, - const EC_POINT *b, BN_CTX *ctx); - -/** Computes the double of a EC_POINT - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result (r = 2 * a) - * \param a EC_POINT object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, - BN_CTX *ctx); - -/** Computes the inverse of a EC_POINT - * \param group underlying EC_GROUP object - * \param a EC_POINT object to be inverted (it's used for the result as well) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx); - -/** Checks whether the point is the neutral element of the group - * \param group the underlying EC_GROUP object - * \param p EC_POINT object - * \return 1 if the point is the neutral element and 0 otherwise - */ -int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p); - -/** Checks whether the point is on the curve - * \param group underlying EC_GROUP object - * \param point EC_POINT object to check - * \param ctx BN_CTX object (optional) - * \return 1 if the point is on the curve, 0 if not, or -1 on error - */ -int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, - BN_CTX *ctx); - -/** Compares two EC_POINTs - * \param group underlying EC_GROUP object - * \param a first EC_POINT object - * \param b second EC_POINT object - * \param ctx BN_CTX object (optional) - * \return 1 if the points are not equal, 0 if they are, or -1 on error - */ -int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, - BN_CTX *ctx); - -int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx); -int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, - EC_POINT *points[], BN_CTX *ctx); - -/** Computes r = generator * n + sum_{i=0}^{num-1} p[i] * m[i] - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result - * \param n BIGNUM with the multiplier for the group generator (optional) - * \param num number further summands - * \param p array of size num of EC_POINT objects - * \param m array of size num of BIGNUM objects - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, - size_t num, const EC_POINT *p[], const BIGNUM *m[], - BN_CTX *ctx); - -/** Computes r = generator * n + q * m - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result - * \param n BIGNUM with the multiplier for the group generator (optional) - * \param q EC_POINT object with the first factor of the second summand - * \param m BIGNUM with the second factor of the second summand - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, - const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); - -/** Stores multiples of generator for faster point multiplication - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); - -/** Reports whether a precomputation has been done - * \param group EC_GROUP object - * \return 1 if a pre-computation has been done and 0 otherwise - */ -int EC_GROUP_have_precompute_mult(const EC_GROUP *group); - -/********************************************************************/ -/* ASN1 stuff */ -/********************************************************************/ - -DECLARE_ASN1_ITEM(ECPKPARAMETERS) -DECLARE_ASN1_ALLOC_FUNCTIONS(ECPKPARAMETERS) -DECLARE_ASN1_ITEM(ECPARAMETERS) -DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) - -/* - * EC_GROUP_get_basis_type() returns the NID of the basis type used to - * represent the field elements - */ -int EC_GROUP_get_basis_type(const EC_GROUP *); -# ifndef OPENSSL_NO_EC2M -int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); -int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, - unsigned int *k2, unsigned int *k3); -# endif - -# define OPENSSL_EC_EXPLICIT_CURVE 0x000 -# define OPENSSL_EC_NAMED_CURVE 0x001 - -EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); -int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); - -# define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x) -# define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x) -# define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \ - (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x)) -# define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \ - (unsigned char *)(x)) - -int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); -# ifndef OPENSSL_NO_STDIO -int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); -# endif - -/********************************************************************/ -/* EC_KEY functions */ -/********************************************************************/ - -/* some values for the encoding_flag */ -# define EC_PKEY_NO_PARAMETERS 0x001 -# define EC_PKEY_NO_PUBKEY 0x002 - -/* some values for the flags field */ -# define EC_FLAG_NON_FIPS_ALLOW 0x1 -# define EC_FLAG_FIPS_CHECKED 0x2 -# define EC_FLAG_COFACTOR_ECDH 0x1000 - -/** Creates a new EC_KEY object. - * \return EC_KEY object or NULL if an error occurred. - */ -EC_KEY *EC_KEY_new(void); - -int EC_KEY_get_flags(const EC_KEY *key); - -void EC_KEY_set_flags(EC_KEY *key, int flags); - -void EC_KEY_clear_flags(EC_KEY *key, int flags); - -/** Creates a new EC_KEY object using a named curve as underlying - * EC_GROUP object. - * \param nid NID of the named curve. - * \return EC_KEY object or NULL if an error occurred. - */ -EC_KEY *EC_KEY_new_by_curve_name(int nid); - -/** Frees a EC_KEY object. - * \param key EC_KEY object to be freed. - */ -void EC_KEY_free(EC_KEY *key); - -/** Copies a EC_KEY object. - * \param dst destination EC_KEY object - * \param src src EC_KEY object - * \return dst or NULL if an error occurred. - */ -EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); - -/** Creates a new EC_KEY object and copies the content from src to it. - * \param src the source EC_KEY object - * \return newly created EC_KEY object or NULL if an error occurred. - */ -EC_KEY *EC_KEY_dup(const EC_KEY *src); - -/** Increases the internal reference count of a EC_KEY object. - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_up_ref(EC_KEY *key); - -/** Returns the ENGINE object of a EC_KEY object - * \param eckey EC_KEY object - * \return the ENGINE object (possibly NULL). - */ -ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey); - -/** Returns the EC_GROUP object of a EC_KEY object - * \param key EC_KEY object - * \return the EC_GROUP object (possibly NULL). - */ -const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); - -/** Sets the EC_GROUP of a EC_KEY object. - * \param key EC_KEY object - * \param group EC_GROUP to use in the EC_KEY object (note: the EC_KEY - * object will use an own copy of the EC_GROUP). - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); - -/** Returns the private key of a EC_KEY object. - * \param key EC_KEY object - * \return a BIGNUM with the private key (possibly NULL). - */ -const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); - -/** Sets the private key of a EC_KEY object. - * \param key EC_KEY object - * \param prv BIGNUM with the private key (note: the EC_KEY object - * will use an own copy of the BIGNUM). - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); - -/** Returns the public key of a EC_KEY object. - * \param key the EC_KEY object - * \return a EC_POINT object with the public key (possibly NULL) - */ -const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); - -/** Sets the public key of a EC_KEY object. - * \param key EC_KEY object - * \param pub EC_POINT object with the public key (note: the EC_KEY object - * will use an own copy of the EC_POINT object). - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); - -unsigned EC_KEY_get_enc_flags(const EC_KEY *key); -void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); -point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); -void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform); - -#define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EC_KEY, l, p, newf, dupf, freef) -int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); -void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); - -/* wrapper functions for the underlying EC_GROUP object */ -void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); - -/** Creates a table of pre-computed multiples of the generator to - * accelerate further EC_KEY operations. - * \param key EC_KEY object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); - -/** Creates a new ec private (and optional a new public) key. - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_generate_key(EC_KEY *key); - -/** Verifies that a private and/or public key is valid. - * \param key the EC_KEY object - * \return 1 on success and 0 otherwise. - */ -int EC_KEY_check_key(const EC_KEY *key); - -/** Indicates if an EC_KEY can be used for signing. - * \param eckey the EC_KEY object - * \return 1 if can can sign and 0 otherwise. - */ -int EC_KEY_can_sign(const EC_KEY *eckey); - -/** Sets a public key from affine coordinates performing - * necessary NIST PKV tests. - * \param key the EC_KEY object - * \param x public key x coordinate - * \param y public key y coordinate - * \return 1 on success and 0 otherwise. - */ -int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, - BIGNUM *y); - -/** Encodes an EC_KEY public key to an allocated octet string - * \param key key to encode - * \param form point conversion form - * \param pbuf returns pointer to allocated buffer - * \param ctx BN_CTX object (optional) - * \return the length of the encoded octet string or 0 if an error occurred - */ -size_t EC_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, - unsigned char **pbuf, BN_CTX *ctx); - -/** Decodes a EC_KEY public key from a octet string - * \param key key to decode - * \param buf memory buffer with the encoded ec point - * \param len length of the encoded ec point - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ - -int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len, - BN_CTX *ctx); - -/** Decodes an EC_KEY private key from an octet string - * \param key key to decode - * \param buf memory buffer with the encoded private key - * \param len length of the encoded key - * \return 1 on success and 0 if an error occurred - */ - -int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, size_t len); - -/** Encodes a EC_KEY private key to an octet string - * \param key key to encode - * \param buf memory buffer for the result. If NULL the function returns - * required buffer size. - * \param len length of the memory buffer - * \return the length of the encoded octet string or 0 if an error occurred - */ - -size_t EC_KEY_priv2oct(const EC_KEY *key, unsigned char *buf, size_t len); - -/** Encodes an EC_KEY private key to an allocated octet string - * \param eckey key to encode - * \param pbuf returns pointer to allocated buffer - * \return the length of the encoded octet string or 0 if an error occurred - */ -size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); - -/********************************************************************/ -/* de- and encoding functions for SEC1 ECPrivateKey */ -/********************************************************************/ - -/** Decodes a private key from a memory buffer. - * \param key a pointer to a EC_KEY object which should be used (or NULL) - * \param in pointer to memory with the DER encoded private key - * \param len length of the DER encoded private key - * \return the decoded private key or NULL if an error occurred. - */ -EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); - -/** Encodes a private key object and stores the result in a buffer. - * \param key the EC_KEY object to encode - * \param out the buffer for the result (if NULL the function returns number - * of bytes needed). - * \return 1 on success and 0 if an error occurred. - */ -int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); - -/********************************************************************/ -/* de- and encoding functions for EC parameters */ -/********************************************************************/ - -/** Decodes ec parameter from a memory buffer. - * \param key a pointer to a EC_KEY object which should be used (or NULL) - * \param in pointer to memory with the DER encoded ec parameters - * \param len length of the DER encoded ec parameters - * \return a EC_KEY object with the decoded parameters or NULL if an error - * occurred. - */ -EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); - -/** Encodes ec parameter and stores the result in a buffer. - * \param key the EC_KEY object with ec parameters to encode - * \param out the buffer for the result (if NULL the function returns number - * of bytes needed). - * \return 1 on success and 0 if an error occurred. - */ -int i2d_ECParameters(EC_KEY *key, unsigned char **out); - -/********************************************************************/ -/* de- and encoding functions for EC public key */ -/* (octet string, not DER -- hence 'o2i' and 'i2o') */ -/********************************************************************/ - -/** Decodes a ec public key from a octet string. - * \param key a pointer to a EC_KEY object which should be used - * \param in memory buffer with the encoded public key - * \param len length of the encoded public key - * \return EC_KEY object with decoded public key or NULL if an error - * occurred. - */ -EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); - -/** Encodes a ec public key in an octet string. - * \param key the EC_KEY object with the public key - * \param out the buffer for the result (if NULL the function returns number - * of bytes needed). - * \return 1 on success and 0 if an error occurred - */ -int i2o_ECPublicKey(const EC_KEY *key, unsigned char **out); - -/** Prints out the ec parameters on human readable form. - * \param bp BIO object to which the information is printed - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred - */ -int ECParameters_print(BIO *bp, const EC_KEY *key); - -/** Prints out the contents of a EC_KEY object - * \param bp BIO object to which the information is printed - * \param key EC_KEY object - * \param off line offset - * \return 1 on success and 0 if an error occurred - */ -int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); - -# ifndef OPENSSL_NO_STDIO -/** Prints out the ec parameters on human readable form. - * \param fp file descriptor to which the information is printed - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred - */ -int ECParameters_print_fp(FILE *fp, const EC_KEY *key); - -/** Prints out the contents of a EC_KEY object - * \param fp file descriptor to which the information is printed - * \param key EC_KEY object - * \param off line offset - * \return 1 on success and 0 if an error occurred - */ -int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); - -# endif - -const EC_KEY_METHOD *EC_KEY_OpenSSL(void); -const EC_KEY_METHOD *EC_KEY_get_default_method(void); -void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); -const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); -int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); -EC_KEY *EC_KEY_new_method(ENGINE *engine); - -/** The old name for ecdh_KDF_X9_63 - * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, - * it is actually specified in ANSI X9.63. - * This identifier is retained for backwards compatibility - */ -int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - const unsigned char *sinfo, size_t sinfolen, - const EVP_MD *md); - -int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, - const EC_KEY *ecdh, - void *(*KDF) (const void *in, size_t inlen, - void *out, size_t *outlen)); - -typedef struct ECDSA_SIG_st ECDSA_SIG; - -/** Allocates and initialize a ECDSA_SIG structure - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -ECDSA_SIG *ECDSA_SIG_new(void); - -/** frees a ECDSA_SIG structure - * \param sig pointer to the ECDSA_SIG structure - */ -void ECDSA_SIG_free(ECDSA_SIG *sig); - -/** DER encode content of ECDSA_SIG object (note: this function modifies *pp - * (*pp += length of the DER encoded signature)). - * \param sig pointer to the ECDSA_SIG object - * \param pp pointer to a unsigned char pointer for the output or NULL - * \return the length of the DER encoded ECDSA_SIG object or a negative value - * on error - */ -int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); - -/** Decodes a DER encoded ECDSA signature (note: this function changes *pp - * (*pp += len)). - * \param sig pointer to ECDSA_SIG pointer (may be NULL) - * \param pp memory buffer with the DER encoded signature - * \param len length of the buffer - * \return pointer to the decoded ECDSA_SIG structure (or NULL) - */ -ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); - -/** Accessor for r and s fields of ECDSA_SIG - * \param sig pointer to ECDSA_SIG structure - * \param pr pointer to BIGNUM pointer for r (may be NULL) - * \param ps pointer to BIGNUM pointer for s (may be NULL) - */ -void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); - -/** Accessor for r field of ECDSA_SIG - * \param sig pointer to ECDSA_SIG structure - */ -const BIGNUM *ECDSA_SIG_get0_r(const ECDSA_SIG *sig); - -/** Accessor for s field of ECDSA_SIG - * \param sig pointer to ECDSA_SIG structure - */ -const BIGNUM *ECDSA_SIG_get0_s(const ECDSA_SIG *sig); - -/** Setter for r and s fields of ECDSA_SIG - * \param sig pointer to ECDSA_SIG structure - * \param r pointer to BIGNUM for r (may be NULL) - * \param s pointer to BIGNUM for s (may be NULL) - */ -int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); - -/** Computes the ECDSA signature of the given hash value using - * the supplied private key and returns the created signature. - * \param dgst pointer to the hash value - * \param dgst_len length of the hash value - * \param eckey EC_KEY object containing a private EC key - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, - EC_KEY *eckey); - -/** Computes ECDSA signature of a given hash value using the supplied - * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param kinv BIGNUM with a pre-computed inverse k (optional) - * \param rp BIGNUM with a pre-computed rp value (optional), - * see ECDSA_sign_setup - * \param eckey EC_KEY object containing a private EC key - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, - const BIGNUM *kinv, const BIGNUM *rp, - EC_KEY *eckey); - -/** Verifies that the supplied signature is a valid ECDSA - * signature of the supplied hash value using the supplied public key. - * \param dgst pointer to the hash value - * \param dgst_len length of the hash value - * \param sig ECDSA_SIG structure - * \param eckey EC_KEY object containing a public EC key - * \return 1 if the signature is valid, 0 if the signature is invalid - * and -1 on error - */ -int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, - const ECDSA_SIG *sig, EC_KEY *eckey); - -/** Precompute parts of the signing operation - * \param eckey EC_KEY object containing a private EC key - * \param ctx BN_CTX object (optional) - * \param kinv BIGNUM pointer for the inverse of k - * \param rp BIGNUM pointer for x coordinate of k * generator - * \return 1 on success and 0 otherwise - */ -int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); - -/** Computes ECDSA signature of a given hash value using the supplied - * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). - * \param type this parameter is ignored - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param sig memory for the DER encoded created signature - * \param siglen pointer to the length of the returned signature - * \param eckey EC_KEY object containing a private EC key - * \return 1 on success and 0 otherwise - */ -int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); - -/** Computes ECDSA signature of a given hash value using the supplied - * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). - * \param type this parameter is ignored - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param sig buffer to hold the DER encoded signature - * \param siglen pointer to the length of the returned signature - * \param kinv BIGNUM with a pre-computed inverse k (optional) - * \param rp BIGNUM with a pre-computed rp value (optional), - * see ECDSA_sign_setup - * \param eckey EC_KEY object containing a private EC key - * \return 1 on success and 0 otherwise - */ -int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); - -/** Verifies that the given signature is valid ECDSA signature - * of the supplied hash value using the specified public key. - * \param type this parameter is ignored - * \param dgst pointer to the hash value - * \param dgstlen length of the hash value - * \param sig pointer to the DER encoded signature - * \param siglen length of the DER encoded signature - * \param eckey EC_KEY object containing a public EC key - * \return 1 if the signature is valid, 0 if the signature is invalid - * and -1 on error - */ -int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, EC_KEY *eckey); - -/** Returns the maximum length of the DER encoded signature - * \param eckey EC_KEY object - * \return numbers of bytes required for the DER encoded signature - */ -int ECDSA_size(const EC_KEY *eckey); - -/********************************************************************/ -/* EC_KEY_METHOD constructors, destructors, writers and accessors */ -/********************************************************************/ - -EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); -void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); -void EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth, - int (*init)(EC_KEY *key), - void (*finish)(EC_KEY *key), - int (*copy)(EC_KEY *dest, const EC_KEY *src), - int (*set_group)(EC_KEY *key, const EC_GROUP *grp), - int (*set_private)(EC_KEY *key, - const BIGNUM *priv_key), - int (*set_public)(EC_KEY *key, - const EC_POINT *pub_key)); - -void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, - int (*keygen)(EC_KEY *key)); - -void EC_KEY_METHOD_set_compute_key(EC_KEY_METHOD *meth, - int (*ckey)(unsigned char **psec, - size_t *pseclen, - const EC_POINT *pub_key, - const EC_KEY *ecdh)); - -void EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth, - int (*sign)(int type, const unsigned char *dgst, - int dlen, unsigned char *sig, - unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *r, - EC_KEY *eckey), - int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, - BIGNUM **kinvp, BIGNUM **rp), - ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, - int dgst_len, - const BIGNUM *in_kinv, - const BIGNUM *in_r, - EC_KEY *eckey)); - -void EC_KEY_METHOD_set_verify(EC_KEY_METHOD *meth, - int (*verify)(int type, const unsigned - char *dgst, int dgst_len, - const unsigned char *sigbuf, - int sig_len, EC_KEY *eckey), - int (*verify_sig)(const unsigned char *dgst, - int dgst_len, - const ECDSA_SIG *sig, - EC_KEY *eckey)); - -void EC_KEY_METHOD_get_init(const EC_KEY_METHOD *meth, - int (**pinit)(EC_KEY *key), - void (**pfinish)(EC_KEY *key), - int (**pcopy)(EC_KEY *dest, const EC_KEY *src), - int (**pset_group)(EC_KEY *key, - const EC_GROUP *grp), - int (**pset_private)(EC_KEY *key, - const BIGNUM *priv_key), - int (**pset_public)(EC_KEY *key, - const EC_POINT *pub_key)); - -void EC_KEY_METHOD_get_keygen(const EC_KEY_METHOD *meth, - int (**pkeygen)(EC_KEY *key)); - -void EC_KEY_METHOD_get_compute_key(const EC_KEY_METHOD *meth, - int (**pck)(unsigned char **psec, - size_t *pseclen, - const EC_POINT *pub_key, - const EC_KEY *ecdh)); - -void EC_KEY_METHOD_get_sign(const EC_KEY_METHOD *meth, - int (**psign)(int type, const unsigned char *dgst, - int dlen, unsigned char *sig, - unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *r, - EC_KEY *eckey), - int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, - BIGNUM **kinvp, BIGNUM **rp), - ECDSA_SIG *(**psign_sig)(const unsigned char *dgst, - int dgst_len, - const BIGNUM *in_kinv, - const BIGNUM *in_r, - EC_KEY *eckey)); - -void EC_KEY_METHOD_get_verify(const EC_KEY_METHOD *meth, - int (**pverify)(int type, const unsigned - char *dgst, int dgst_len, - const unsigned char *sigbuf, - int sig_len, EC_KEY *eckey), - int (**pverify_sig)(const unsigned char *dgst, - int dgst_len, - const ECDSA_SIG *sig, - EC_KEY *eckey)); - -# define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x) - -# ifndef __cplusplus -# if defined(__SUNPRO_C) -# if __SUNPRO_C >= 0x520 -# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) -# endif -# endif -# endif - -# define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) - -# define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL) - -# define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL) - -# define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, \ - (void *)(plen)) - -# define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)(p)) - -# define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)(p)) - -/* SM2 will skip the operation check so no need to pass operation here */ -# define EVP_PKEY_CTX_set1_id(ctx, id, id_len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_SET1_ID, (int)id_len, (void*)(id)) - -# define EVP_PKEY_CTX_get1_id(ctx, id) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_GET1_ID, 0, (void*)(id)) - -# define EVP_PKEY_CTX_get1_id_len(ctx, id_len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_GET1_ID_LEN, 0, (void*)(id_len)) - -# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) -# define EVP_PKEY_CTRL_SET1_ID (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET1_ID (EVP_PKEY_ALG_CTRL + 12) -# define EVP_PKEY_CTRL_GET1_ID_LEN (EVP_PKEY_ALG_CTRL + 13) -/* KDF types */ -# define EVP_PKEY_ECDH_KDF_NONE 1 -# define EVP_PKEY_ECDH_KDF_X9_63 2 -/** The old name for EVP_PKEY_ECDH_KDF_X9_63 - * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, - * it is actually specified in ANSI X9.63. - * This identifier is retained for backwards compatibility - */ -# define EVP_PKEY_ECDH_KDF_X9_62 EVP_PKEY_ECDH_KDF_X9_63 - - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/ecdh.h b/submodules/MtProtoKit/openssl/openssl/ecdh.h deleted file mode 100644 index 681f3d5e55..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ecdh.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include diff --git a/submodules/MtProtoKit/openssl/openssl/ecdsa.h b/submodules/MtProtoKit/openssl/openssl/ecdsa.h deleted file mode 100644 index 681f3d5e55..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ecdsa.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include diff --git a/submodules/MtProtoKit/openssl/openssl/ecerr.h b/submodules/MtProtoKit/openssl/openssl/ecerr.h deleted file mode 100644 index f7b9183456..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ecerr.h +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ECERR_H -# define HEADER_ECERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_EC - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_EC_strings(void); - -/* - * EC function codes. - */ -# define EC_F_BN_TO_FELEM 224 -# define EC_F_D2I_ECPARAMETERS 144 -# define EC_F_D2I_ECPKPARAMETERS 145 -# define EC_F_D2I_ECPRIVATEKEY 146 -# define EC_F_DO_EC_KEY_PRINT 221 -# define EC_F_ECDH_CMS_DECRYPT 238 -# define EC_F_ECDH_CMS_SET_SHARED_INFO 239 -# define EC_F_ECDH_COMPUTE_KEY 246 -# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 257 -# define EC_F_ECDSA_DO_SIGN_EX 251 -# define EC_F_ECDSA_DO_VERIFY 252 -# define EC_F_ECDSA_SIGN_EX 254 -# define EC_F_ECDSA_SIGN_SETUP 248 -# define EC_F_ECDSA_SIG_NEW 265 -# define EC_F_ECDSA_VERIFY 253 -# define EC_F_ECD_ITEM_VERIFY 270 -# define EC_F_ECKEY_PARAM2TYPE 223 -# define EC_F_ECKEY_PARAM_DECODE 212 -# define EC_F_ECKEY_PRIV_DECODE 213 -# define EC_F_ECKEY_PRIV_ENCODE 214 -# define EC_F_ECKEY_PUB_DECODE 215 -# define EC_F_ECKEY_PUB_ENCODE 216 -# define EC_F_ECKEY_TYPE2PARAM 220 -# define EC_F_ECPARAMETERS_PRINT 147 -# define EC_F_ECPARAMETERS_PRINT_FP 148 -# define EC_F_ECPKPARAMETERS_PRINT 149 -# define EC_F_ECPKPARAMETERS_PRINT_FP 150 -# define EC_F_ECP_NISTZ256_GET_AFFINE 240 -# define EC_F_ECP_NISTZ256_INV_MOD_ORD 275 -# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 -# define EC_F_ECP_NISTZ256_POINTS_MUL 241 -# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 -# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 -# define EC_F_ECX_KEY_OP 266 -# define EC_F_ECX_PRIV_ENCODE 267 -# define EC_F_ECX_PUB_ENCODE 268 -# define EC_F_EC_ASN1_GROUP2CURVE 153 -# define EC_F_EC_ASN1_GROUP2FIELDID 154 -# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 -# define EC_F_EC_GF2M_SIMPLE_FIELD_INV 296 -# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 -# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 -# define EC_F_EC_GF2M_SIMPLE_LADDER_POST 285 -# define EC_F_EC_GF2M_SIMPLE_LADDER_PRE 288 -# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 -# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 -# define EC_F_EC_GF2M_SIMPLE_POINTS_MUL 289 -# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 -# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 -# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 -# define EC_F_EC_GFP_MONT_FIELD_DECODE 133 -# define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 -# define EC_F_EC_GFP_MONT_FIELD_INV 297 -# define EC_F_EC_GFP_MONT_FIELD_MUL 131 -# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 -# define EC_F_EC_GFP_MONT_FIELD_SQR 132 -# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 -# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225 -# define EC_F_EC_GFP_NISTP224_POINTS_MUL 228 -# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226 -# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230 -# define EC_F_EC_GFP_NISTP256_POINTS_MUL 231 -# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232 -# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233 -# define EC_F_EC_GFP_NISTP521_POINTS_MUL 234 -# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235 -# define EC_F_EC_GFP_NIST_FIELD_MUL 200 -# define EC_F_EC_GFP_NIST_FIELD_SQR 201 -# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 -# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 287 -# define EC_F_EC_GFP_SIMPLE_FIELD_INV 298 -# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 -# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 -# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 -# define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 -# define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 -# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 -# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 -# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 -# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 -# define EC_F_EC_GROUP_CHECK 170 -# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 -# define EC_F_EC_GROUP_COPY 106 -# define EC_F_EC_GROUP_GET_CURVE 291 -# define EC_F_EC_GROUP_GET_CURVE_GF2M 172 -# define EC_F_EC_GROUP_GET_CURVE_GFP 130 -# define EC_F_EC_GROUP_GET_DEGREE 173 -# define EC_F_EC_GROUP_GET_ECPARAMETERS 261 -# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 262 -# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 -# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 -# define EC_F_EC_GROUP_NEW 108 -# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 -# define EC_F_EC_GROUP_NEW_FROM_DATA 175 -# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 263 -# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 264 -# define EC_F_EC_GROUP_SET_CURVE 292 -# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 -# define EC_F_EC_GROUP_SET_CURVE_GFP 109 -# define EC_F_EC_GROUP_SET_GENERATOR 111 -# define EC_F_EC_GROUP_SET_SEED 286 -# define EC_F_EC_KEY_CHECK_KEY 177 -# define EC_F_EC_KEY_COPY 178 -# define EC_F_EC_KEY_GENERATE_KEY 179 -# define EC_F_EC_KEY_NEW 182 -# define EC_F_EC_KEY_NEW_METHOD 245 -# define EC_F_EC_KEY_OCT2PRIV 255 -# define EC_F_EC_KEY_PRINT 180 -# define EC_F_EC_KEY_PRINT_FP 181 -# define EC_F_EC_KEY_PRIV2BUF 279 -# define EC_F_EC_KEY_PRIV2OCT 256 -# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 -# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 258 -# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 259 -# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 260 -# define EC_F_EC_PKEY_CHECK 273 -# define EC_F_EC_PKEY_PARAM_CHECK 274 -# define EC_F_EC_POINTS_MAKE_AFFINE 136 -# define EC_F_EC_POINTS_MUL 290 -# define EC_F_EC_POINT_ADD 112 -# define EC_F_EC_POINT_BN2POINT 280 -# define EC_F_EC_POINT_CMP 113 -# define EC_F_EC_POINT_COPY 114 -# define EC_F_EC_POINT_DBL 115 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES 293 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 -# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 -# define EC_F_EC_POINT_INVERT 210 -# define EC_F_EC_POINT_IS_AT_INFINITY 118 -# define EC_F_EC_POINT_IS_ON_CURVE 119 -# define EC_F_EC_POINT_MAKE_AFFINE 120 -# define EC_F_EC_POINT_NEW 121 -# define EC_F_EC_POINT_OCT2POINT 122 -# define EC_F_EC_POINT_POINT2BUF 281 -# define EC_F_EC_POINT_POINT2OCT 123 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES 294 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES 295 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 -# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 -# define EC_F_EC_POINT_SET_TO_INFINITY 127 -# define EC_F_EC_PRE_COMP_NEW 196 -# define EC_F_EC_SCALAR_MUL_LADDER 284 -# define EC_F_EC_WNAF_MUL 187 -# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 -# define EC_F_I2D_ECPARAMETERS 190 -# define EC_F_I2D_ECPKPARAMETERS 191 -# define EC_F_I2D_ECPRIVATEKEY 192 -# define EC_F_I2O_ECPUBLICKEY 151 -# define EC_F_NISTP224_PRE_COMP_NEW 227 -# define EC_F_NISTP256_PRE_COMP_NEW 236 -# define EC_F_NISTP521_PRE_COMP_NEW 237 -# define EC_F_O2I_ECPUBLICKEY 152 -# define EC_F_OLD_EC_PRIV_DECODE 222 -# define EC_F_OSSL_ECDH_COMPUTE_KEY 247 -# define EC_F_OSSL_ECDSA_SIGN_SIG 249 -# define EC_F_OSSL_ECDSA_VERIFY_SIG 250 -# define EC_F_PKEY_ECD_CTRL 271 -# define EC_F_PKEY_ECD_DIGESTSIGN 272 -# define EC_F_PKEY_ECD_DIGESTSIGN25519 276 -# define EC_F_PKEY_ECD_DIGESTSIGN448 277 -# define EC_F_PKEY_ECX_DERIVE 269 -# define EC_F_PKEY_EC_CTRL 197 -# define EC_F_PKEY_EC_CTRL_STR 198 -# define EC_F_PKEY_EC_DERIVE 217 -# define EC_F_PKEY_EC_INIT 282 -# define EC_F_PKEY_EC_KDF_DERIVE 283 -# define EC_F_PKEY_EC_KEYGEN 199 -# define EC_F_PKEY_EC_PARAMGEN 219 -# define EC_F_PKEY_EC_SIGN 218 -# define EC_F_VALIDATE_ECX_DERIVE 278 - -/* - * EC reason codes. - */ -# define EC_R_ASN1_ERROR 115 -# define EC_R_BAD_SIGNATURE 156 -# define EC_R_BIGNUM_OUT_OF_RANGE 144 -# define EC_R_BUFFER_TOO_SMALL 100 -# define EC_R_CANNOT_INVERT 165 -# define EC_R_COORDINATES_OUT_OF_RANGE 146 -# define EC_R_CURVE_DOES_NOT_SUPPORT_ECDH 160 -# define EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING 159 -# define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 -# define EC_R_DECODE_ERROR 142 -# define EC_R_DISCRIMINANT_IS_ZERO 118 -# define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 -# define EC_R_FIELD_TOO_LARGE 143 -# define EC_R_GF2M_NOT_SUPPORTED 147 -# define EC_R_GROUP2PKPARAMETERS_FAILURE 120 -# define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 -# define EC_R_INCOMPATIBLE_OBJECTS 101 -# define EC_R_INVALID_ARGUMENT 112 -# define EC_R_INVALID_COMPRESSED_POINT 110 -# define EC_R_INVALID_COMPRESSION_BIT 109 -# define EC_R_INVALID_CURVE 141 -# define EC_R_INVALID_DIGEST 151 -# define EC_R_INVALID_DIGEST_TYPE 138 -# define EC_R_INVALID_ENCODING 102 -# define EC_R_INVALID_FIELD 103 -# define EC_R_INVALID_FORM 104 -# define EC_R_INVALID_GROUP_ORDER 122 -# define EC_R_INVALID_KEY 116 -# define EC_R_INVALID_OUTPUT_LENGTH 161 -# define EC_R_INVALID_PEER_KEY 133 -# define EC_R_INVALID_PENTANOMIAL_BASIS 132 -# define EC_R_INVALID_PRIVATE_KEY 123 -# define EC_R_INVALID_TRINOMIAL_BASIS 137 -# define EC_R_KDF_PARAMETER_ERROR 148 -# define EC_R_KEYS_NOT_SET 140 -# define EC_R_LADDER_POST_FAILURE 136 -# define EC_R_LADDER_PRE_FAILURE 153 -# define EC_R_LADDER_STEP_FAILURE 162 -# define EC_R_MISSING_PARAMETERS 124 -# define EC_R_MISSING_PRIVATE_KEY 125 -# define EC_R_NEED_NEW_SETUP_VALUES 157 -# define EC_R_NOT_A_NIST_PRIME 135 -# define EC_R_NOT_IMPLEMENTED 126 -# define EC_R_NOT_INITIALIZED 111 -# define EC_R_NO_PARAMETERS_SET 139 -# define EC_R_NO_PRIVATE_VALUE 154 -# define EC_R_OPERATION_NOT_SUPPORTED 152 -# define EC_R_PASSED_NULL_PARAMETER 134 -# define EC_R_PEER_KEY_ERROR 149 -# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 -# define EC_R_POINT_ARITHMETIC_FAILURE 155 -# define EC_R_POINT_AT_INFINITY 106 -# define EC_R_POINT_COORDINATES_BLIND_FAILURE 163 -# define EC_R_POINT_IS_NOT_ON_CURVE 107 -# define EC_R_RANDOM_NUMBER_GENERATION_FAILED 158 -# define EC_R_SHARED_INFO_ERROR 150 -# define EC_R_SLOT_FULL 108 -# define EC_R_UNDEFINED_GENERATOR 113 -# define EC_R_UNDEFINED_ORDER 128 -# define EC_R_UNKNOWN_COFACTOR 164 -# define EC_R_UNKNOWN_GROUP 129 -# define EC_R_UNKNOWN_ORDER 114 -# define EC_R_UNSUPPORTED_FIELD 131 -# define EC_R_WRONG_CURVE_PARAMETERS 145 -# define EC_R_WRONG_ORDER 130 - -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/engine.h b/submodules/MtProtoKit/openssl/openssl/engine.h deleted file mode 100644 index 0780f0fb5f..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/engine.h +++ /dev/null @@ -1,751 +0,0 @@ -/* - * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ENGINE_H -# define HEADER_ENGINE_H - -# include - -# ifndef OPENSSL_NO_ENGINE -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# include -# include -# include -# include -# include -# include -# include -# endif -# include -# include -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -/* - * These flags are used to control combinations of algorithm (methods) by - * bitwise "OR"ing. - */ -# define ENGINE_METHOD_RSA (unsigned int)0x0001 -# define ENGINE_METHOD_DSA (unsigned int)0x0002 -# define ENGINE_METHOD_DH (unsigned int)0x0004 -# define ENGINE_METHOD_RAND (unsigned int)0x0008 -# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 -# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 -# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 -# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 -# define ENGINE_METHOD_EC (unsigned int)0x0800 -/* Obvious all-or-nothing cases. */ -# define ENGINE_METHOD_ALL (unsigned int)0xFFFF -# define ENGINE_METHOD_NONE (unsigned int)0x0000 - -/* - * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used - * internally to control registration of ENGINE implementations, and can be - * set by ENGINE_set_table_flags(). The "NOINIT" flag prevents attempts to - * initialise registered ENGINEs if they are not already initialised. - */ -# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 - -/* ENGINE flags that can be set by ENGINE_set_flags(). */ -/* Not used */ -/* #define ENGINE_FLAGS_MALLOCED 0x0001 */ - -/* - * This flag is for ENGINEs that wish to handle the various 'CMD'-related - * control commands on their own. Without this flag, ENGINE_ctrl() handles - * these control commands on behalf of the ENGINE using their "cmd_defns" - * data. - */ -# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 - -/* - * This flag is for ENGINEs who return new duplicate structures when found - * via "ENGINE_by_id()". When an ENGINE must store state (eg. if - * ENGINE_ctrl() commands are called in sequence as part of some stateful - * process like key-generation setup and execution), it can set this flag - - * then each attempt to obtain the ENGINE will result in it being copied into - * a new structure. Normally, ENGINEs don't declare this flag so - * ENGINE_by_id() just increments the existing ENGINE's structural reference - * count. - */ -# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 - -/* - * This flag if for an ENGINE that does not want its methods registered as - * part of ENGINE_register_all_complete() for example if the methods are not - * usable as default methods. - */ - -# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 - -/* - * ENGINEs can support their own command types, and these flags are used in - * ENGINE_CTRL_GET_CMD_FLAGS to indicate to the caller what kind of input - * each command expects. Currently only numeric and string input is - * supported. If a control command supports none of the _NUMERIC, _STRING, or - * _NO_INPUT options, then it is regarded as an "internal" control command - - * and not for use in config setting situations. As such, they're not - * available to the ENGINE_ctrl_cmd_string() function, only raw ENGINE_ctrl() - * access. Changes to this list of 'command types' should be reflected - * carefully in ENGINE_cmd_is_executable() and ENGINE_ctrl_cmd_string(). - */ - -/* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ -# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 -/* - * accepts string input (cast from 'void*' to 'const char *', 4th parameter - * to ENGINE_ctrl) - */ -# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 -/* - * Indicates that the control command takes *no* input. Ie. the control - * command is unparameterised. - */ -# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 -/* - * Indicates that the control command is internal. This control command won't - * be shown in any output, and is only usable through the ENGINE_ctrl_cmd() - * function. - */ -# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 - -/* - * NB: These 3 control commands are deprecated and should not be used. - * ENGINEs relying on these commands should compile conditional support for - * compatibility (eg. if these symbols are defined) but should also migrate - * the same functionality to their own ENGINE-specific control functions that - * can be "discovered" by calling applications. The fact these control - * commands wouldn't be "executable" (ie. usable by text-based config) - * doesn't change the fact that application code can find and use them - * without requiring per-ENGINE hacking. - */ - -/* - * These flags are used to tell the ctrl function what should be done. All - * command numbers are shared between all engines, even if some don't make - * sense to some engines. In such a case, they do nothing but return the - * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. - */ -# define ENGINE_CTRL_SET_LOGSTREAM 1 -# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 -# define ENGINE_CTRL_HUP 3/* Close and reinitialise - * any handles/connections - * etc. */ -# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ -# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used - * when calling the password - * callback and the user - * interface */ -# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, - * given a string that - * represents a file name - * or so */ -# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given - * section in the already - * loaded configuration */ - -/* - * These control commands allow an application to deal with an arbitrary - * engine in a dynamic way. Warn: Negative return values indicate errors FOR - * THESE COMMANDS because zero is used to indicate 'end-of-list'. Other - * commands, including ENGINE-specific command types, return zero for an - * error. An ENGINE can choose to implement these ctrl functions, and can - * internally manage things however it chooses - it does so by setting the - * ENGINE_FLAGS_MANUAL_CMD_CTRL flag (using ENGINE_set_flags()). Otherwise - * the ENGINE_ctrl() code handles this on the ENGINE's behalf using the - * cmd_defns data (set using ENGINE_set_cmd_defns()). This means an ENGINE's - * ctrl() handler need only implement its own commands - the above "meta" - * commands will be taken care of. - */ - -/* - * Returns non-zero if the supplied ENGINE has a ctrl() handler. If "not", - * then all the remaining control commands will return failure, so it is - * worth checking this first if the caller is trying to "discover" the - * engine's capabilities and doesn't want errors generated unnecessarily. - */ -# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 -/* - * Returns a positive command number for the first command supported by the - * engine. Returns zero if no ctrl commands are supported. - */ -# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 -/* - * The 'long' argument specifies a command implemented by the engine, and the - * return value is the next command supported, or zero if there are no more. - */ -# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 -/* - * The 'void*' argument is a command name (cast from 'const char *'), and the - * return value is the command that corresponds to it. - */ -# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 -/* - * The next two allow a command to be converted into its corresponding string - * form. In each case, the 'long' argument supplies the command. In the - * NAME_LEN case, the return value is the length of the command name (not - * counting a trailing EOL). In the NAME case, the 'void*' argument must be a - * string buffer large enough, and it will be populated with the name of the - * command (WITH a trailing EOL). - */ -# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 -# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 -/* The next two are similar but give a "short description" of a command. */ -# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 -# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 -/* - * With this command, the return value is the OR'd combination of - * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given - * engine-specific ctrl command expects. - */ -# define ENGINE_CTRL_GET_CMD_FLAGS 18 - -/* - * ENGINE implementations should start the numbering of their own control - * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc). - */ -# define ENGINE_CMD_BASE 200 - -/* - * NB: These 2 nCipher "chil" control commands are deprecated, and their - * functionality is now available through ENGINE-specific control commands - * (exposed through the above-mentioned 'CMD'-handling). Code using these 2 - * commands should be migrated to the more general command handling before - * these are removed. - */ - -/* Flags specific to the nCipher "chil" engine */ -# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 - /* - * Depending on the value of the (long)i argument, this sets or - * unsets the SimpleForkCheck flag in the CHIL API to enable or - * disable checking and workarounds for applications that fork(). - */ -# define ENGINE_CTRL_CHIL_NO_LOCKING 101 - /* - * This prevents the initialisation function from providing mutex - * callbacks to the nCipher library. - */ - -/* - * If an ENGINE supports its own specific control commands and wishes the - * framework to handle the above 'ENGINE_CMD_***'-manipulation commands on - * its behalf, it should supply a null-terminated array of ENGINE_CMD_DEFN - * entries to ENGINE_set_cmd_defns(). It should also implement a ctrl() - * handler that supports the stated commands (ie. the "cmd_num" entries as - * described by the array). NB: The array must be ordered in increasing order - * of cmd_num. "null-terminated" means that the last ENGINE_CMD_DEFN element - * has cmd_num set to zero and/or cmd_name set to NULL. - */ -typedef struct ENGINE_CMD_DEFN_st { - unsigned int cmd_num; /* The command number */ - const char *cmd_name; /* The command name itself */ - const char *cmd_desc; /* A short description of the command */ - unsigned int cmd_flags; /* The input the command expects */ -} ENGINE_CMD_DEFN; - -/* Generic function pointer */ -typedef int (*ENGINE_GEN_FUNC_PTR) (void); -/* Generic function pointer taking no arguments */ -typedef int (*ENGINE_GEN_INT_FUNC_PTR) (ENGINE *); -/* Specific control function pointer */ -typedef int (*ENGINE_CTRL_FUNC_PTR) (ENGINE *, int, long, void *, - void (*f) (void)); -/* Generic load_key function pointer */ -typedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *, - UI_METHOD *ui_method, - void *callback_data); -typedef int (*ENGINE_SSL_CLIENT_CERT_PTR) (ENGINE *, SSL *ssl, - STACK_OF(X509_NAME) *ca_dn, - X509 **pcert, EVP_PKEY **pkey, - STACK_OF(X509) **pother, - UI_METHOD *ui_method, - void *callback_data); -/*- - * These callback types are for an ENGINE's handler for cipher and digest logic. - * These handlers have these prototypes; - * int foo(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid); - * int foo(ENGINE *e, const EVP_MD **digest, const int **nids, int nid); - * Looking at how to implement these handlers in the case of cipher support, if - * the framework wants the EVP_CIPHER for 'nid', it will call; - * foo(e, &p_evp_cipher, NULL, nid); (return zero for failure) - * If the framework wants a list of supported 'nid's, it will call; - * foo(e, NULL, &p_nids, 0); (returns number of 'nids' or -1 for error) - */ -/* - * Returns to a pointer to the array of supported cipher 'nid's. If the - * second parameter is non-NULL it is set to the size of the returned array. - */ -typedef int (*ENGINE_CIPHERS_PTR) (ENGINE *, const EVP_CIPHER **, - const int **, int); -typedef int (*ENGINE_DIGESTS_PTR) (ENGINE *, const EVP_MD **, const int **, - int); -typedef int (*ENGINE_PKEY_METHS_PTR) (ENGINE *, EVP_PKEY_METHOD **, - const int **, int); -typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, - const int **, int); -/* - * STRUCTURE functions ... all of these functions deal with pointers to - * ENGINE structures where the pointers have a "structural reference". This - * means that their reference is to allowed access to the structure but it - * does not imply that the structure is functional. To simply increment or - * decrement the structural reference count, use ENGINE_by_id and - * ENGINE_free. NB: This is not required when iterating using ENGINE_get_next - * as it will automatically decrement the structural reference count of the - * "current" ENGINE and increment the structural reference count of the - * ENGINE it returns (unless it is NULL). - */ - -/* Get the first/last "ENGINE" type available. */ -ENGINE *ENGINE_get_first(void); -ENGINE *ENGINE_get_last(void); -/* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */ -ENGINE *ENGINE_get_next(ENGINE *e); -ENGINE *ENGINE_get_prev(ENGINE *e); -/* Add another "ENGINE" type into the array. */ -int ENGINE_add(ENGINE *e); -/* Remove an existing "ENGINE" type from the array. */ -int ENGINE_remove(ENGINE *e); -/* Retrieve an engine from the list by its unique "id" value. */ -ENGINE *ENGINE_by_id(const char *id); - -#if OPENSSL_API_COMPAT < 0x10100000L -# define ENGINE_load_openssl() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) -# define ENGINE_load_dynamic() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) -# ifndef OPENSSL_NO_STATIC_ENGINE -# define ENGINE_load_padlock() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) -# define ENGINE_load_capi() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) -# define ENGINE_load_afalg() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) -# endif -# define ENGINE_load_cryptodev() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) -# define ENGINE_load_rdrand() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) -#endif -void ENGINE_load_builtin_engines(void); - -/* - * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation - * "registry" handling. - */ -unsigned int ENGINE_get_table_flags(void); -void ENGINE_set_table_flags(unsigned int flags); - -/*- Manage registration of ENGINEs per "table". For each type, there are 3 - * functions; - * ENGINE_register_***(e) - registers the implementation from 'e' (if it has one) - * ENGINE_unregister_***(e) - unregister the implementation from 'e' - * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list - * Cleanup is automatically registered from each table when required. - */ - -int ENGINE_register_RSA(ENGINE *e); -void ENGINE_unregister_RSA(ENGINE *e); -void ENGINE_register_all_RSA(void); - -int ENGINE_register_DSA(ENGINE *e); -void ENGINE_unregister_DSA(ENGINE *e); -void ENGINE_register_all_DSA(void); - -int ENGINE_register_EC(ENGINE *e); -void ENGINE_unregister_EC(ENGINE *e); -void ENGINE_register_all_EC(void); - -int ENGINE_register_DH(ENGINE *e); -void ENGINE_unregister_DH(ENGINE *e); -void ENGINE_register_all_DH(void); - -int ENGINE_register_RAND(ENGINE *e); -void ENGINE_unregister_RAND(ENGINE *e); -void ENGINE_register_all_RAND(void); - -int ENGINE_register_ciphers(ENGINE *e); -void ENGINE_unregister_ciphers(ENGINE *e); -void ENGINE_register_all_ciphers(void); - -int ENGINE_register_digests(ENGINE *e); -void ENGINE_unregister_digests(ENGINE *e); -void ENGINE_register_all_digests(void); - -int ENGINE_register_pkey_meths(ENGINE *e); -void ENGINE_unregister_pkey_meths(ENGINE *e); -void ENGINE_register_all_pkey_meths(void); - -int ENGINE_register_pkey_asn1_meths(ENGINE *e); -void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); -void ENGINE_register_all_pkey_asn1_meths(void); - -/* - * These functions register all support from the above categories. Note, use - * of these functions can result in static linkage of code your application - * may not need. If you only need a subset of functionality, consider using - * more selective initialisation. - */ -int ENGINE_register_complete(ENGINE *e); -int ENGINE_register_all_complete(void); - -/* - * Send parameterised control commands to the engine. The possibilities to - * send down an integer, a pointer to data or a function pointer are - * provided. Any of the parameters may or may not be NULL, depending on the - * command number. In actuality, this function only requires a structural - * (rather than functional) reference to an engine, but many control commands - * may require the engine be functional. The caller should be aware of trying - * commands that require an operational ENGINE, and only use functional - * references in such situations. - */ -int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); - -/* - * This function tests if an ENGINE-specific command is usable as a - * "setting". Eg. in an application's config file that gets processed through - * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to - * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). - */ -int ENGINE_cmd_is_executable(ENGINE *e, int cmd); - -/* - * This function works like ENGINE_ctrl() with the exception of taking a - * command name instead of a command number, and can handle optional - * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation - * on how to use the cmd_name and cmd_optional. - */ -int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, - long i, void *p, void (*f) (void), int cmd_optional); - -/* - * This function passes a command-name and argument to an ENGINE. The - * cmd_name is converted to a command number and the control command is - * called using 'arg' as an argument (unless the ENGINE doesn't support such - * a command, in which case no control command is called). The command is - * checked for input flags, and if necessary the argument will be converted - * to a numeric value. If cmd_optional is non-zero, then if the ENGINE - * doesn't support the given cmd_name the return value will be success - * anyway. This function is intended for applications to use so that users - * (or config files) can supply engine-specific config data to the ENGINE at - * run-time to control behaviour of specific engines. As such, it shouldn't - * be used for calling ENGINE_ctrl() functions that return data, deal with - * binary data, or that are otherwise supposed to be used directly through - * ENGINE_ctrl() in application code. Any "return" data from an ENGINE_ctrl() - * operation in this function will be lost - the return value is interpreted - * as failure if the return value is zero, success otherwise, and this - * function returns a boolean value as a result. In other words, vendors of - * 'ENGINE'-enabled devices should write ENGINE implementations with - * parameterisations that work in this scheme, so that compliant ENGINE-based - * applications can work consistently with the same configuration for the - * same ENGINE-enabled devices, across applications. - */ -int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, - int cmd_optional); - -/* - * These functions are useful for manufacturing new ENGINE structures. They - * don't address reference counting at all - one uses them to populate an - * ENGINE structure with personalised implementations of things prior to - * using it directly or adding it to the builtin ENGINE list in OpenSSL. - * These are also here so that the ENGINE structure doesn't have to be - * exposed and break binary compatibility! - */ -ENGINE *ENGINE_new(void); -int ENGINE_free(ENGINE *e); -int ENGINE_up_ref(ENGINE *e); -int ENGINE_set_id(ENGINE *e, const char *id); -int ENGINE_set_name(ENGINE *e, const char *name); -int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); -int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); -int ENGINE_set_EC(ENGINE *e, const EC_KEY_METHOD *ecdsa_meth); -int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); -int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); -int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); -int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); -int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); -int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); -int ENGINE_set_load_privkey_function(ENGINE *e, - ENGINE_LOAD_KEY_PTR loadpriv_f); -int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); -int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, - ENGINE_SSL_CLIENT_CERT_PTR - loadssl_f); -int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); -int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); -int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); -int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); -int ENGINE_set_flags(ENGINE *e, int flags); -int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); -/* These functions allow control over any per-structure ENGINE data. */ -#define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE, l, p, newf, dupf, freef) -int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); -void *ENGINE_get_ex_data(const ENGINE *e, int idx); - -#if OPENSSL_API_COMPAT < 0x10100000L -/* - * This function previously cleaned up anything that needs it. Auto-deinit will - * now take care of it so it is no longer required to call this function. - */ -# define ENGINE_cleanup() while(0) continue -#endif - -/* - * These return values from within the ENGINE structure. These can be useful - * with functional references as well as structural references - it depends - * which you obtained. Using the result for functional purposes if you only - * obtained a structural reference may be problematic! - */ -const char *ENGINE_get_id(const ENGINE *e); -const char *ENGINE_get_name(const ENGINE *e); -const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); -const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); -const EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); -const DH_METHOD *ENGINE_get_DH(const ENGINE *e); -const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); -ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); -ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); -ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); -ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); -ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); -ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); -ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE - *e); -ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); -ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); -ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); -ENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e); -const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); -const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); -const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); -const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); -const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, - const char *str, - int len); -const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, - const char *str, - int len); -const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); -int ENGINE_get_flags(const ENGINE *e); - -/* - * FUNCTIONAL functions. These functions deal with ENGINE structures that - * have (or will) be initialised for use. Broadly speaking, the structural - * functions are useful for iterating the list of available engine types, - * creating new engine types, and other "list" operations. These functions - * actually deal with ENGINEs that are to be used. As such these functions - * can fail (if applicable) when particular engines are unavailable - eg. if - * a hardware accelerator is not attached or not functioning correctly. Each - * ENGINE has 2 reference counts; structural and functional. Every time a - * functional reference is obtained or released, a corresponding structural - * reference is automatically obtained or released too. - */ - -/* - * Initialise a engine type for use (or up its reference count if it's - * already in use). This will fail if the engine is not currently operational - * and cannot initialise. - */ -int ENGINE_init(ENGINE *e); -/* - * Free a functional reference to a engine type. This does not require a - * corresponding call to ENGINE_free as it also releases a structural - * reference. - */ -int ENGINE_finish(ENGINE *e); - -/* - * The following functions handle keys that are stored in some secondary - * location, handled by the engine. The storage may be on a card or - * whatever. - */ -EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, - UI_METHOD *ui_method, void *callback_data); -EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, - UI_METHOD *ui_method, void *callback_data); -int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, - STACK_OF(X509_NAME) *ca_dn, X509 **pcert, - EVP_PKEY **ppkey, STACK_OF(X509) **pother, - UI_METHOD *ui_method, void *callback_data); - -/* - * This returns a pointer for the current ENGINE structure that is (by - * default) performing any RSA operations. The value returned is an - * incremented reference, so it should be free'd (ENGINE_finish) before it is - * discarded. - */ -ENGINE *ENGINE_get_default_RSA(void); -/* Same for the other "methods" */ -ENGINE *ENGINE_get_default_DSA(void); -ENGINE *ENGINE_get_default_EC(void); -ENGINE *ENGINE_get_default_DH(void); -ENGINE *ENGINE_get_default_RAND(void); -/* - * These functions can be used to get a functional reference to perform - * ciphering or digesting corresponding to "nid". - */ -ENGINE *ENGINE_get_cipher_engine(int nid); -ENGINE *ENGINE_get_digest_engine(int nid); -ENGINE *ENGINE_get_pkey_meth_engine(int nid); -ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); - -/* - * This sets a new default ENGINE structure for performing RSA operations. If - * the result is non-zero (success) then the ENGINE structure will have had - * its reference count up'd so the caller should still free their own - * reference 'e'. - */ -int ENGINE_set_default_RSA(ENGINE *e); -int ENGINE_set_default_string(ENGINE *e, const char *def_list); -/* Same for the other "methods" */ -int ENGINE_set_default_DSA(ENGINE *e); -int ENGINE_set_default_EC(ENGINE *e); -int ENGINE_set_default_DH(ENGINE *e); -int ENGINE_set_default_RAND(ENGINE *e); -int ENGINE_set_default_ciphers(ENGINE *e); -int ENGINE_set_default_digests(ENGINE *e); -int ENGINE_set_default_pkey_meths(ENGINE *e); -int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); - -/* - * The combination "set" - the flags are bitwise "OR"d from the - * ENGINE_METHOD_*** defines above. As with the "ENGINE_register_complete()" - * function, this function can result in unnecessary static linkage. If your - * application requires only specific functionality, consider using more - * selective functions. - */ -int ENGINE_set_default(ENGINE *e, unsigned int flags); - -void ENGINE_add_conf_module(void); - -/* Deprecated functions ... */ -/* int ENGINE_clear_defaults(void); */ - -/**************************/ -/* DYNAMIC ENGINE SUPPORT */ -/**************************/ - -/* Binary/behaviour compatibility levels */ -# define OSSL_DYNAMIC_VERSION (unsigned long)0x00030000 -/* - * Binary versions older than this are too old for us (whether we're a loader - * or a loadee) - */ -# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 - -/* - * When compiling an ENGINE entirely as an external shared library, loadable - * by the "dynamic" ENGINE, these types are needed. The 'dynamic_fns' - * structure type provides the calling application's (or library's) error - * functionality and memory management function pointers to the loaded - * library. These should be used/set in the loaded library code so that the - * loading application's 'state' will be used/changed in all operations. The - * 'static_state' pointer allows the loaded library to know if it shares the - * same static data as the calling application (or library), and thus whether - * these callbacks need to be set or not. - */ -typedef void *(*dyn_MEM_malloc_fn) (size_t, const char *, int); -typedef void *(*dyn_MEM_realloc_fn) (void *, size_t, const char *, int); -typedef void (*dyn_MEM_free_fn) (void *, const char *, int); -typedef struct st_dynamic_MEM_fns { - dyn_MEM_malloc_fn malloc_fn; - dyn_MEM_realloc_fn realloc_fn; - dyn_MEM_free_fn free_fn; -} dynamic_MEM_fns; -/* - * FIXME: Perhaps the memory and locking code (crypto.h) should declare and - * use these types so we (and any other dependent code) can simplify a bit?? - */ -/* The top-level structure */ -typedef struct st_dynamic_fns { - void *static_state; - dynamic_MEM_fns mem_fns; -} dynamic_fns; - -/* - * The version checking function should be of this prototype. NB: The - * ossl_version value passed in is the OSSL_DYNAMIC_VERSION of the loading - * code. If this function returns zero, it indicates a (potential) version - * incompatibility and the loaded library doesn't believe it can proceed. - * Otherwise, the returned value is the (latest) version supported by the - * loading library. The loader may still decide that the loaded code's - * version is unsatisfactory and could veto the load. The function is - * expected to be implemented with the symbol name "v_check", and a default - * implementation can be fully instantiated with - * IMPLEMENT_DYNAMIC_CHECK_FN(). - */ -typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); -# define IMPLEMENT_DYNAMIC_CHECK_FN() \ - OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ - OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \ - if (v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \ - return 0; } - -/* - * This function is passed the ENGINE structure to initialise with its own - * function and command settings. It should not adjust the structural or - * functional reference counts. If this function returns zero, (a) the load - * will be aborted, (b) the previous ENGINE state will be memcpy'd back onto - * the structure, and (c) the shared library will be unloaded. So - * implementations should do their own internal cleanup in failure - * circumstances otherwise they could leak. The 'id' parameter, if non-NULL, - * represents the ENGINE id that the loader is looking for. If this is NULL, - * the shared library can choose to return failure or to initialise a - * 'default' ENGINE. If non-NULL, the shared library must initialise only an - * ENGINE matching the passed 'id'. The function is expected to be - * implemented with the symbol name "bind_engine". A standard implementation - * can be instantiated with IMPLEMENT_DYNAMIC_BIND_FN(fn) where the parameter - * 'fn' is a callback function that populates the ENGINE structure and - * returns an int value (zero for failure). 'fn' should have prototype; - * [static] int fn(ENGINE *e, const char *id); - */ -typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, - const dynamic_fns *fns); -# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ - OPENSSL_EXPORT \ - int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ - OPENSSL_EXPORT \ - int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \ - if (ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \ - CRYPTO_set_mem_functions(fns->mem_fns.malloc_fn, \ - fns->mem_fns.realloc_fn, \ - fns->mem_fns.free_fn); \ - skip_cbs: \ - if (!fn(e, id)) return 0; \ - return 1; } - -/* - * If the loading application (or library) and the loaded ENGINE library - * share the same static data (eg. they're both dynamically linked to the - * same libcrypto.so) we need a way to avoid trying to set system callbacks - - * this would fail, and for the same reason that it's unnecessary to try. If - * the loaded ENGINE has (or gets from through the loader) its own copy of - * the libcrypto static data, we will need to set the callbacks. The easiest - * way to detect this is to have a function that returns a pointer to some - * static data and let the loading application and loaded ENGINE compare - * their respective values. - */ -void *ENGINE_get_static_state(void); - -# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) -DEPRECATEDIN_1_1_0(void ENGINE_setup_bsd_cryptodev(void)) -# endif - - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/engineerr.h b/submodules/MtProtoKit/openssl/openssl/engineerr.h deleted file mode 100644 index 05e84bd2a2..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/engineerr.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ENGINEERR_H -# define HEADER_ENGINEERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_ENGINE - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ENGINE_strings(void); - -/* - * ENGINE function codes. - */ -# define ENGINE_F_DIGEST_UPDATE 198 -# define ENGINE_F_DYNAMIC_CTRL 180 -# define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 -# define ENGINE_F_DYNAMIC_LOAD 182 -# define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 -# define ENGINE_F_ENGINE_ADD 105 -# define ENGINE_F_ENGINE_BY_ID 106 -# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 -# define ENGINE_F_ENGINE_CTRL 142 -# define ENGINE_F_ENGINE_CTRL_CMD 178 -# define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 -# define ENGINE_F_ENGINE_FINISH 107 -# define ENGINE_F_ENGINE_GET_CIPHER 185 -# define ENGINE_F_ENGINE_GET_DIGEST 186 -# define ENGINE_F_ENGINE_GET_FIRST 195 -# define ENGINE_F_ENGINE_GET_LAST 196 -# define ENGINE_F_ENGINE_GET_NEXT 115 -# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 -# define ENGINE_F_ENGINE_GET_PKEY_METH 192 -# define ENGINE_F_ENGINE_GET_PREV 116 -# define ENGINE_F_ENGINE_INIT 119 -# define ENGINE_F_ENGINE_LIST_ADD 120 -# define ENGINE_F_ENGINE_LIST_REMOVE 121 -# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 -# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 -# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 -# define ENGINE_F_ENGINE_NEW 122 -# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 197 -# define ENGINE_F_ENGINE_REMOVE 123 -# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 -# define ENGINE_F_ENGINE_SET_ID 129 -# define ENGINE_F_ENGINE_SET_NAME 130 -# define ENGINE_F_ENGINE_TABLE_REGISTER 184 -# define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 -# define ENGINE_F_ENGINE_UP_REF 190 -# define ENGINE_F_INT_CLEANUP_ITEM 199 -# define ENGINE_F_INT_CTRL_HELPER 172 -# define ENGINE_F_INT_ENGINE_CONFIGURE 188 -# define ENGINE_F_INT_ENGINE_MODULE_INIT 187 -# define ENGINE_F_OSSL_HMAC_INIT 200 - -/* - * ENGINE reason codes. - */ -# define ENGINE_R_ALREADY_LOADED 100 -# define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER 133 -# define ENGINE_R_CMD_NOT_EXECUTABLE 134 -# define ENGINE_R_COMMAND_TAKES_INPUT 135 -# define ENGINE_R_COMMAND_TAKES_NO_INPUT 136 -# define ENGINE_R_CONFLICTING_ENGINE_ID 103 -# define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 119 -# define ENGINE_R_DSO_FAILURE 104 -# define ENGINE_R_DSO_NOT_FOUND 132 -# define ENGINE_R_ENGINES_SECTION_ERROR 148 -# define ENGINE_R_ENGINE_CONFIGURATION_ERROR 102 -# define ENGINE_R_ENGINE_IS_NOT_IN_LIST 105 -# define ENGINE_R_ENGINE_SECTION_ERROR 149 -# define ENGINE_R_FAILED_LOADING_PRIVATE_KEY 128 -# define ENGINE_R_FAILED_LOADING_PUBLIC_KEY 129 -# define ENGINE_R_FINISH_FAILED 106 -# define ENGINE_R_ID_OR_NAME_MISSING 108 -# define ENGINE_R_INIT_FAILED 109 -# define ENGINE_R_INTERNAL_LIST_ERROR 110 -# define ENGINE_R_INVALID_ARGUMENT 143 -# define ENGINE_R_INVALID_CMD_NAME 137 -# define ENGINE_R_INVALID_CMD_NUMBER 138 -# define ENGINE_R_INVALID_INIT_VALUE 151 -# define ENGINE_R_INVALID_STRING 150 -# define ENGINE_R_NOT_INITIALISED 117 -# define ENGINE_R_NOT_LOADED 112 -# define ENGINE_R_NO_CONTROL_FUNCTION 120 -# define ENGINE_R_NO_INDEX 144 -# define ENGINE_R_NO_LOAD_FUNCTION 125 -# define ENGINE_R_NO_REFERENCE 130 -# define ENGINE_R_NO_SUCH_ENGINE 116 -# define ENGINE_R_UNIMPLEMENTED_CIPHER 146 -# define ENGINE_R_UNIMPLEMENTED_DIGEST 147 -# define ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD 101 -# define ENGINE_R_VERSION_INCOMPATIBILITY 145 - -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/err.h b/submodules/MtProtoKit/openssl/openssl/err.h deleted file mode 100644 index b49f88129e..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/err.h +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ERR_H -# define HEADER_ERR_H - -# include - -# ifndef OPENSSL_NO_STDIO -# include -# include -# endif - -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifndef OPENSSL_NO_ERR -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) -# else -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) -# endif - -# include - -# define ERR_TXT_MALLOCED 0x01 -# define ERR_TXT_STRING 0x02 - -# define ERR_FLAG_MARK 0x01 -# define ERR_FLAG_CLEAR 0x02 - -# define ERR_NUM_ERRORS 16 -typedef struct err_state_st { - int err_flags[ERR_NUM_ERRORS]; - unsigned long err_buffer[ERR_NUM_ERRORS]; - char *err_data[ERR_NUM_ERRORS]; - int err_data_flags[ERR_NUM_ERRORS]; - const char *err_file[ERR_NUM_ERRORS]; - int err_line[ERR_NUM_ERRORS]; - int top, bottom; -} ERR_STATE; - -/* library */ -# define ERR_LIB_NONE 1 -# define ERR_LIB_SYS 2 -# define ERR_LIB_BN 3 -# define ERR_LIB_RSA 4 -# define ERR_LIB_DH 5 -# define ERR_LIB_EVP 6 -# define ERR_LIB_BUF 7 -# define ERR_LIB_OBJ 8 -# define ERR_LIB_PEM 9 -# define ERR_LIB_DSA 10 -# define ERR_LIB_X509 11 -/* #define ERR_LIB_METH 12 */ -# define ERR_LIB_ASN1 13 -# define ERR_LIB_CONF 14 -# define ERR_LIB_CRYPTO 15 -# define ERR_LIB_EC 16 -# define ERR_LIB_SSL 20 -/* #define ERR_LIB_SSL23 21 */ -/* #define ERR_LIB_SSL2 22 */ -/* #define ERR_LIB_SSL3 23 */ -/* #define ERR_LIB_RSAREF 30 */ -/* #define ERR_LIB_PROXY 31 */ -# define ERR_LIB_BIO 32 -# define ERR_LIB_PKCS7 33 -# define ERR_LIB_X509V3 34 -# define ERR_LIB_PKCS12 35 -# define ERR_LIB_RAND 36 -# define ERR_LIB_DSO 37 -# define ERR_LIB_ENGINE 38 -# define ERR_LIB_OCSP 39 -# define ERR_LIB_UI 40 -# define ERR_LIB_COMP 41 -# define ERR_LIB_ECDSA 42 -# define ERR_LIB_ECDH 43 -# define ERR_LIB_OSSL_STORE 44 -# define ERR_LIB_FIPS 45 -# define ERR_LIB_CMS 46 -# define ERR_LIB_TS 47 -# define ERR_LIB_HMAC 48 -/* # define ERR_LIB_JPAKE 49 */ -# define ERR_LIB_CT 50 -# define ERR_LIB_ASYNC 51 -# define ERR_LIB_KDF 52 -# define ERR_LIB_SM2 53 - -# define ERR_LIB_USER 128 - -# define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OSSL_STOREerr(f,r) ERR_PUT_error(ERR_LIB_OSSL_STORE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CTerr(f,r) ERR_PUT_error(ERR_LIB_CT,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ASYNCerr(f,r) ERR_PUT_error(ERR_LIB_ASYNC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define KDFerr(f,r) ERR_PUT_error(ERR_LIB_KDF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define SM2err(f,r) ERR_PUT_error(ERR_LIB_SM2,(f),(r),OPENSSL_FILE,OPENSSL_LINE) - -# define ERR_PACK(l,f,r) ( \ - (((unsigned int)(l) & 0x0FF) << 24L) | \ - (((unsigned int)(f) & 0xFFF) << 12L) | \ - (((unsigned int)(r) & 0xFFF) ) ) -# define ERR_GET_LIB(l) (int)(((l) >> 24L) & 0x0FFL) -# define ERR_GET_FUNC(l) (int)(((l) >> 12L) & 0xFFFL) -# define ERR_GET_REASON(l) (int)( (l) & 0xFFFL) -# define ERR_FATAL_ERROR(l) (int)( (l) & ERR_R_FATAL) - -/* OS functions */ -# define SYS_F_FOPEN 1 -# define SYS_F_CONNECT 2 -# define SYS_F_GETSERVBYNAME 3 -# define SYS_F_SOCKET 4 -# define SYS_F_IOCTLSOCKET 5 -# define SYS_F_BIND 6 -# define SYS_F_LISTEN 7 -# define SYS_F_ACCEPT 8 -# define SYS_F_WSASTARTUP 9/* Winsock stuff */ -# define SYS_F_OPENDIR 10 -# define SYS_F_FREAD 11 -# define SYS_F_GETADDRINFO 12 -# define SYS_F_GETNAMEINFO 13 -# define SYS_F_SETSOCKOPT 14 -# define SYS_F_GETSOCKOPT 15 -# define SYS_F_GETSOCKNAME 16 -# define SYS_F_GETHOSTBYNAME 17 -# define SYS_F_FFLUSH 18 -# define SYS_F_OPEN 19 -# define SYS_F_CLOSE 20 -# define SYS_F_IOCTL 21 -# define SYS_F_STAT 22 -# define SYS_F_FCNTL 23 -# define SYS_F_FSTAT 24 - -/* reasons */ -# define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */ -# define ERR_R_BN_LIB ERR_LIB_BN/* 3 */ -# define ERR_R_RSA_LIB ERR_LIB_RSA/* 4 */ -# define ERR_R_DH_LIB ERR_LIB_DH/* 5 */ -# define ERR_R_EVP_LIB ERR_LIB_EVP/* 6 */ -# define ERR_R_BUF_LIB ERR_LIB_BUF/* 7 */ -# define ERR_R_OBJ_LIB ERR_LIB_OBJ/* 8 */ -# define ERR_R_PEM_LIB ERR_LIB_PEM/* 9 */ -# define ERR_R_DSA_LIB ERR_LIB_DSA/* 10 */ -# define ERR_R_X509_LIB ERR_LIB_X509/* 11 */ -# define ERR_R_ASN1_LIB ERR_LIB_ASN1/* 13 */ -# define ERR_R_EC_LIB ERR_LIB_EC/* 16 */ -# define ERR_R_BIO_LIB ERR_LIB_BIO/* 32 */ -# define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */ -# define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */ -# define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ -# define ERR_R_UI_LIB ERR_LIB_UI/* 40 */ -# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ -# define ERR_R_OSSL_STORE_LIB ERR_LIB_OSSL_STORE/* 44 */ - -# define ERR_R_NESTED_ASN1_ERROR 58 -# define ERR_R_MISSING_ASN1_EOS 63 - -/* fatal error */ -# define ERR_R_FATAL 64 -# define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) -# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) -# define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) -# define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) -# define ERR_R_DISABLED (5|ERR_R_FATAL) -# define ERR_R_INIT_FAIL (6|ERR_R_FATAL) -# define ERR_R_PASSED_INVALID_ARGUMENT (7) -# define ERR_R_OPERATION_FAIL (8|ERR_R_FATAL) - -/* - * 99 is the maximum possible ERR_R_... code, higher values are reserved for - * the individual libraries - */ - -typedef struct ERR_string_data_st { - unsigned long error; - const char *string; -} ERR_STRING_DATA; - -DEFINE_LHASH_OF(ERR_STRING_DATA); - -void ERR_put_error(int lib, int func, int reason, const char *file, int line); -void ERR_set_error_data(char *data, int flags); - -unsigned long ERR_get_error(void); -unsigned long ERR_get_error_line(const char **file, int *line); -unsigned long ERR_get_error_line_data(const char **file, int *line, - const char **data, int *flags); -unsigned long ERR_peek_error(void); -unsigned long ERR_peek_error_line(const char **file, int *line); -unsigned long ERR_peek_error_line_data(const char **file, int *line, - const char **data, int *flags); -unsigned long ERR_peek_last_error(void); -unsigned long ERR_peek_last_error_line(const char **file, int *line); -unsigned long ERR_peek_last_error_line_data(const char **file, int *line, - const char **data, int *flags); -void ERR_clear_error(void); -char *ERR_error_string(unsigned long e, char *buf); -void ERR_error_string_n(unsigned long e, char *buf, size_t len); -const char *ERR_lib_error_string(unsigned long e); -const char *ERR_func_error_string(unsigned long e); -const char *ERR_reason_error_string(unsigned long e); -void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), - void *u); -# ifndef OPENSSL_NO_STDIO -void ERR_print_errors_fp(FILE *fp); -# endif -void ERR_print_errors(BIO *bp); -void ERR_add_error_data(int num, ...); -void ERR_add_error_vdata(int num, va_list args); -int ERR_load_strings(int lib, ERR_STRING_DATA *str); -int ERR_load_strings_const(const ERR_STRING_DATA *str); -int ERR_unload_strings(int lib, ERR_STRING_DATA *str); -int ERR_load_ERR_strings(void); - -#if OPENSSL_API_COMPAT < 0x10100000L -# define ERR_load_crypto_strings() \ - OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) -# define ERR_free_strings() while(0) continue -#endif - -DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) -DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid)) -ERR_STATE *ERR_get_state(void); - -int ERR_get_next_error_library(void); - -int ERR_set_mark(void); -int ERR_pop_to_mark(void); -int ERR_clear_last_mark(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/evp.h b/submodules/MtProtoKit/openssl/openssl/evp.h deleted file mode 100644 index 545654a98b..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/evp.h +++ /dev/null @@ -1,1638 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ENVELOPE_H -# define HEADER_ENVELOPE_H - -# include -# include -# include -# include -# include - -# define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ -# define EVP_MAX_KEY_LENGTH 64 -# define EVP_MAX_IV_LENGTH 16 -# define EVP_MAX_BLOCK_LENGTH 32 - -# define PKCS5_SALT_LEN 8 -/* Default PKCS#5 iteration count */ -# define PKCS5_DEFAULT_ITER 2048 - -# include - -# define EVP_PK_RSA 0x0001 -# define EVP_PK_DSA 0x0002 -# define EVP_PK_DH 0x0004 -# define EVP_PK_EC 0x0008 -# define EVP_PKT_SIGN 0x0010 -# define EVP_PKT_ENC 0x0020 -# define EVP_PKT_EXCH 0x0040 -# define EVP_PKS_RSA 0x0100 -# define EVP_PKS_DSA 0x0200 -# define EVP_PKS_EC 0x0400 - -# define EVP_PKEY_NONE NID_undef -# define EVP_PKEY_RSA NID_rsaEncryption -# define EVP_PKEY_RSA2 NID_rsa -# define EVP_PKEY_RSA_PSS NID_rsassaPss -# define EVP_PKEY_DSA NID_dsa -# define EVP_PKEY_DSA1 NID_dsa_2 -# define EVP_PKEY_DSA2 NID_dsaWithSHA -# define EVP_PKEY_DSA3 NID_dsaWithSHA1 -# define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 -# define EVP_PKEY_DH NID_dhKeyAgreement -# define EVP_PKEY_DHX NID_dhpublicnumber -# define EVP_PKEY_EC NID_X9_62_id_ecPublicKey -# define EVP_PKEY_SM2 NID_sm2 -# define EVP_PKEY_HMAC NID_hmac -# define EVP_PKEY_CMAC NID_cmac -# define EVP_PKEY_SCRYPT NID_id_scrypt -# define EVP_PKEY_TLS1_PRF NID_tls1_prf -# define EVP_PKEY_HKDF NID_hkdf -# define EVP_PKEY_POLY1305 NID_poly1305 -# define EVP_PKEY_SIPHASH NID_siphash -# define EVP_PKEY_X25519 NID_X25519 -# define EVP_PKEY_ED25519 NID_ED25519 -# define EVP_PKEY_X448 NID_X448 -# define EVP_PKEY_ED448 NID_ED448 - -#ifdef __cplusplus -extern "C" { -#endif - -# define EVP_PKEY_MO_SIGN 0x0001 -# define EVP_PKEY_MO_VERIFY 0x0002 -# define EVP_PKEY_MO_ENCRYPT 0x0004 -# define EVP_PKEY_MO_DECRYPT 0x0008 - -# ifndef EVP_MD -EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); -EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); -void EVP_MD_meth_free(EVP_MD *md); - -int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize); -int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize); -int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize); -int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags); -int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx)); -int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx, - const void *data, - size_t count)); -int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx, - unsigned char *md)); -int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to, - const EVP_MD_CTX *from)); -int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx)); -int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd, - int p1, void *p2)); - -int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); -int EVP_MD_meth_get_result_size(const EVP_MD *md); -int EVP_MD_meth_get_app_datasize(const EVP_MD *md); -unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); -int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx); -int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx, - const void *data, - size_t count); -int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx, - unsigned char *md); -int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to, - const EVP_MD_CTX *from); -int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx); -int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, - int p1, void *p2); - -/* digest can only handle a single block */ -# define EVP_MD_FLAG_ONESHOT 0x0001 - -/* digest is extensible-output function, XOF */ -# define EVP_MD_FLAG_XOF 0x0002 - -/* DigestAlgorithmIdentifier flags... */ - -# define EVP_MD_FLAG_DIGALGID_MASK 0x0018 - -/* NULL or absent parameter accepted. Use NULL */ - -# define EVP_MD_FLAG_DIGALGID_NULL 0x0000 - -/* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */ - -# define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008 - -/* Custom handling via ctrl */ - -# define EVP_MD_FLAG_DIGALGID_CUSTOM 0x0018 - -/* Note if suitable for use in FIPS mode */ -# define EVP_MD_FLAG_FIPS 0x0400 - -/* Digest ctrls */ - -# define EVP_MD_CTRL_DIGALGID 0x1 -# define EVP_MD_CTRL_MICALG 0x2 -# define EVP_MD_CTRL_XOF_LEN 0x3 - -/* Minimum Algorithm specific ctrl value */ - -# define EVP_MD_CTRL_ALG_CTRL 0x1000 - -# endif /* !EVP_MD */ - -/* values for EVP_MD_CTX flags */ - -# define EVP_MD_CTX_FLAG_ONESHOT 0x0001/* digest update will be - * called once only */ -# define EVP_MD_CTX_FLAG_CLEANED 0x0002/* context has already been - * cleaned */ -# define EVP_MD_CTX_FLAG_REUSE 0x0004/* Don't free up ctx->md_data - * in EVP_MD_CTX_reset */ -/* - * FIPS and pad options are ignored in 1.0.0, definitions are here so we - * don't accidentally reuse the values for other purposes. - */ - -# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008/* Allow use of non FIPS - * digest in FIPS mode */ - -/* - * The following PAD options are also currently ignored in 1.0.0, digest - * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*() - * instead. - */ -# define EVP_MD_CTX_FLAG_PAD_MASK 0xF0/* RSA mode to use */ -# define EVP_MD_CTX_FLAG_PAD_PKCS1 0x00/* PKCS#1 v1.5 mode */ -# define EVP_MD_CTX_FLAG_PAD_X931 0x10/* X9.31 mode */ -# define EVP_MD_CTX_FLAG_PAD_PSS 0x20/* PSS mode */ - -# define EVP_MD_CTX_FLAG_NO_INIT 0x0100/* Don't initialize md_data */ -/* - * Some functions such as EVP_DigestSign only finalise copies of internal - * contexts so additional data can be included after the finalisation call. - * This is inefficient if this functionality is not required: it is disabled - * if the following flag is set. - */ -# define EVP_MD_CTX_FLAG_FINALISE 0x0200 -/* NOTE: 0x0400 is reserved for internal usage in evp_int.h */ - -EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len); -EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher); -void EVP_CIPHER_meth_free(EVP_CIPHER *cipher); - -int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len); -int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags); -int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size); -int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher, - int (*init) (EVP_CIPHER_CTX *ctx, - const unsigned char *key, - const unsigned char *iv, - int enc)); -int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher, - int (*do_cipher) (EVP_CIPHER_CTX *ctx, - unsigned char *out, - const unsigned char *in, - size_t inl)); -int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher, - int (*cleanup) (EVP_CIPHER_CTX *)); -int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher, - int (*set_asn1_parameters) (EVP_CIPHER_CTX *, - ASN1_TYPE *)); -int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher, - int (*get_asn1_parameters) (EVP_CIPHER_CTX *, - ASN1_TYPE *)); -int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher, - int (*ctrl) (EVP_CIPHER_CTX *, int type, - int arg, void *ptr)); - -int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, - const unsigned char *key, - const unsigned char *iv, - int enc); -int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, - unsigned char *out, - const unsigned char *in, - size_t inl); -int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); -int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - ASN1_TYPE *); -int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - ASN1_TYPE *); -int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - int type, int arg, - void *ptr); - -/* Values for cipher flags */ - -/* Modes for ciphers */ - -# define EVP_CIPH_STREAM_CIPHER 0x0 -# define EVP_CIPH_ECB_MODE 0x1 -# define EVP_CIPH_CBC_MODE 0x2 -# define EVP_CIPH_CFB_MODE 0x3 -# define EVP_CIPH_OFB_MODE 0x4 -# define EVP_CIPH_CTR_MODE 0x5 -# define EVP_CIPH_GCM_MODE 0x6 -# define EVP_CIPH_CCM_MODE 0x7 -# define EVP_CIPH_XTS_MODE 0x10001 -# define EVP_CIPH_WRAP_MODE 0x10002 -# define EVP_CIPH_OCB_MODE 0x10003 -# define EVP_CIPH_MODE 0xF0007 -/* Set if variable length cipher */ -# define EVP_CIPH_VARIABLE_LENGTH 0x8 -/* Set if the iv handling should be done by the cipher itself */ -# define EVP_CIPH_CUSTOM_IV 0x10 -/* Set if the cipher's init() function should be called if key is NULL */ -# define EVP_CIPH_ALWAYS_CALL_INIT 0x20 -/* Call ctrl() to init cipher parameters */ -# define EVP_CIPH_CTRL_INIT 0x40 -/* Don't use standard key length function */ -# define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 -/* Don't use standard block padding */ -# define EVP_CIPH_NO_PADDING 0x100 -/* cipher handles random key generation */ -# define EVP_CIPH_RAND_KEY 0x200 -/* cipher has its own additional copying logic */ -# define EVP_CIPH_CUSTOM_COPY 0x400 -/* Don't use standard iv length function */ -# define EVP_CIPH_CUSTOM_IV_LENGTH 0x800 -/* Allow use default ASN1 get/set iv */ -# define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000 -/* Buffer length in bits not bytes: CFB1 mode only */ -# define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 -/* Note if suitable for use in FIPS mode */ -# define EVP_CIPH_FLAG_FIPS 0x4000 -/* Allow non FIPS cipher in FIPS mode */ -# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000 -/* - * Cipher handles any and all padding logic as well as finalisation. - */ -# define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000 -# define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000 -# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000 -/* Cipher can handle pipeline operations */ -# define EVP_CIPH_FLAG_PIPELINE 0X800000 - -/* - * Cipher context flag to indicate we can handle wrap mode: if allowed in - * older applications it could overflow buffers. - */ - -# define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1 - -/* ctrl() values */ - -# define EVP_CTRL_INIT 0x0 -# define EVP_CTRL_SET_KEY_LENGTH 0x1 -# define EVP_CTRL_GET_RC2_KEY_BITS 0x2 -# define EVP_CTRL_SET_RC2_KEY_BITS 0x3 -# define EVP_CTRL_GET_RC5_ROUNDS 0x4 -# define EVP_CTRL_SET_RC5_ROUNDS 0x5 -# define EVP_CTRL_RAND_KEY 0x6 -# define EVP_CTRL_PBE_PRF_NID 0x7 -# define EVP_CTRL_COPY 0x8 -# define EVP_CTRL_AEAD_SET_IVLEN 0x9 -# define EVP_CTRL_AEAD_GET_TAG 0x10 -# define EVP_CTRL_AEAD_SET_TAG 0x11 -# define EVP_CTRL_AEAD_SET_IV_FIXED 0x12 -# define EVP_CTRL_GCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN -# define EVP_CTRL_GCM_GET_TAG EVP_CTRL_AEAD_GET_TAG -# define EVP_CTRL_GCM_SET_TAG EVP_CTRL_AEAD_SET_TAG -# define EVP_CTRL_GCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED -# define EVP_CTRL_GCM_IV_GEN 0x13 -# define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN -# define EVP_CTRL_CCM_GET_TAG EVP_CTRL_AEAD_GET_TAG -# define EVP_CTRL_CCM_SET_TAG EVP_CTRL_AEAD_SET_TAG -# define EVP_CTRL_CCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED -# define EVP_CTRL_CCM_SET_L 0x14 -# define EVP_CTRL_CCM_SET_MSGLEN 0x15 -/* - * AEAD cipher deduces payload length and returns number of bytes required to - * store MAC and eventual padding. Subsequent call to EVP_Cipher even - * appends/verifies MAC. - */ -# define EVP_CTRL_AEAD_TLS1_AAD 0x16 -/* Used by composite AEAD ciphers, no-op in GCM, CCM... */ -# define EVP_CTRL_AEAD_SET_MAC_KEY 0x17 -/* Set the GCM invocation field, decrypt only */ -# define EVP_CTRL_GCM_SET_IV_INV 0x18 - -# define EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 0x19 -# define EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 0x1a -# define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b -# define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c - -# define EVP_CTRL_SSL3_MASTER_SECRET 0x1d - -/* EVP_CTRL_SET_SBOX takes the char * specifying S-boxes */ -# define EVP_CTRL_SET_SBOX 0x1e -/* - * EVP_CTRL_SBOX_USED takes a 'size_t' and 'char *', pointing at a - * pre-allocated buffer with specified size - */ -# define EVP_CTRL_SBOX_USED 0x1f -/* EVP_CTRL_KEY_MESH takes 'size_t' number of bytes to mesh the key after, - * 0 switches meshing off - */ -# define EVP_CTRL_KEY_MESH 0x20 -/* EVP_CTRL_BLOCK_PADDING_MODE takes the padding mode */ -# define EVP_CTRL_BLOCK_PADDING_MODE 0x21 - -/* Set the output buffers to use for a pipelined operation */ -# define EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS 0x22 -/* Set the input buffers to use for a pipelined operation */ -# define EVP_CTRL_SET_PIPELINE_INPUT_BUFS 0x23 -/* Set the input buffer lengths to use for a pipelined operation */ -# define EVP_CTRL_SET_PIPELINE_INPUT_LENS 0x24 - -# define EVP_CTRL_GET_IVLEN 0x25 - -/* Padding modes */ -#define EVP_PADDING_PKCS7 1 -#define EVP_PADDING_ISO7816_4 2 -#define EVP_PADDING_ANSI923 3 -#define EVP_PADDING_ISO10126 4 -#define EVP_PADDING_ZERO 5 - -/* RFC 5246 defines additional data to be 13 bytes in length */ -# define EVP_AEAD_TLS1_AAD_LEN 13 - -typedef struct { - unsigned char *out; - const unsigned char *inp; - size_t len; - unsigned int interleave; -} EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM; - -/* GCM TLS constants */ -/* Length of fixed part of IV derived from PRF */ -# define EVP_GCM_TLS_FIXED_IV_LEN 4 -/* Length of explicit part of IV part of TLS records */ -# define EVP_GCM_TLS_EXPLICIT_IV_LEN 8 -/* Length of tag for TLS */ -# define EVP_GCM_TLS_TAG_LEN 16 - -/* CCM TLS constants */ -/* Length of fixed part of IV derived from PRF */ -# define EVP_CCM_TLS_FIXED_IV_LEN 4 -/* Length of explicit part of IV part of TLS records */ -# define EVP_CCM_TLS_EXPLICIT_IV_LEN 8 -/* Total length of CCM IV length for TLS */ -# define EVP_CCM_TLS_IV_LEN 12 -/* Length of tag for TLS */ -# define EVP_CCM_TLS_TAG_LEN 16 -/* Length of CCM8 tag for TLS */ -# define EVP_CCM8_TLS_TAG_LEN 8 - -/* Length of tag for TLS */ -# define EVP_CHACHAPOLY_TLS_TAG_LEN 16 - -typedef struct evp_cipher_info_st { - const EVP_CIPHER *cipher; - unsigned char iv[EVP_MAX_IV_LENGTH]; -} EVP_CIPHER_INFO; - - -/* Password based encryption function */ -typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, - int passlen, ASN1_TYPE *param, - const EVP_CIPHER *cipher, const EVP_MD *md, - int en_de); - -# ifndef OPENSSL_NO_RSA -# define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ - (char *)(rsa)) -# endif - -# ifndef OPENSSL_NO_DSA -# define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ - (char *)(dsa)) -# endif - -# ifndef OPENSSL_NO_DH -# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ - (char *)(dh)) -# endif - -# ifndef OPENSSL_NO_EC -# define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ - (char *)(eckey)) -# endif -# ifndef OPENSSL_NO_SIPHASH -# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),EVP_PKEY_SIPHASH,\ - (char *)(shkey)) -# endif - -# ifndef OPENSSL_NO_POLY1305 -# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),EVP_PKEY_POLY1305,\ - (char *)(polykey)) -# endif - -/* Add some extra combinations */ -# define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) -# define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a)) -# define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) -# define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) - -int EVP_MD_type(const EVP_MD *md); -# define EVP_MD_nid(e) EVP_MD_type(e) -# define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) -int EVP_MD_pkey_type(const EVP_MD *md); -int EVP_MD_size(const EVP_MD *md); -int EVP_MD_block_size(const EVP_MD *md); -unsigned long EVP_MD_flags(const EVP_MD *md); - -const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); -int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, - const void *data, size_t count); -void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, - int (*update) (EVP_MD_CTX *ctx, - const void *data, size_t count)); -# define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) -EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx); -void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); -void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx); - -int EVP_CIPHER_nid(const EVP_CIPHER *cipher); -# define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) -int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); -int EVP_CIPHER_impl_ctx_size(const EVP_CIPHER *cipher); -int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); -int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); -unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); -# define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) - -const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); -const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); -const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); -unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); -unsigned char *EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_num(const EVP_CIPHER_CTX *ctx); -void EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); -int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); -void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); -void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); -void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx); -void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); -# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) -# if OPENSSL_API_COMPAT < 0x10100000L -# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(c)) -# endif -# define EVP_CIPHER_CTX_mode(c) EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c)) - -# define EVP_ENCODE_LENGTH(l) ((((l)+2)/3*4)+((l)/48+1)*2+80) -# define EVP_DECODE_LENGTH(l) (((l)+3)/4*3+80) - -# define EVP_SignInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) -# define EVP_SignInit(a,b) EVP_DigestInit(a,b) -# define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) -# define EVP_VerifyInit(a,b) EVP_DigestInit(a,b) -# define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) -# define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) -# define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) - -# ifdef CONST_STRICT -void BIO_set_md(BIO *, const EVP_MD *md); -# else -# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)(md)) -# endif -# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)(mdp)) -# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0, \ - (char *)(mdcp)) -# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0, \ - (char *)(mdcp)) -# define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) -# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0, \ - (char *)(c_pp)) - -/*__owur*/ int EVP_Cipher(EVP_CIPHER_CTX *c, - unsigned char *out, - const unsigned char *in, unsigned int inl); - -# define EVP_add_cipher_alias(n,alias) \ - OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n)) -# define EVP_add_digest_alias(n,alias) \ - OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n)) -# define EVP_delete_cipher_alias(alias) \ - OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS); -# define EVP_delete_digest_alias(alias) \ - OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); - -int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); -EVP_MD_CTX *EVP_MD_CTX_new(void); -int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); -void EVP_MD_CTX_free(EVP_MD_CTX *ctx); -# define EVP_MD_CTX_create() EVP_MD_CTX_new() -# define EVP_MD_CTX_init(ctx) EVP_MD_CTX_reset((ctx)) -# define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx)) -__owur int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); -void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); -void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); -int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); -__owur int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, - ENGINE *impl); -__owur int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, - size_t cnt); -__owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, - unsigned int *s); -__owur int EVP_Digest(const void *data, size_t count, - unsigned char *md, unsigned int *size, - const EVP_MD *type, ENGINE *impl); - -__owur int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); -__owur int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); -__owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, - unsigned int *s); -__owur int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, - size_t len); - -int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify); -int EVP_read_pw_string_min(char *buf, int minlen, int maxlen, - const char *prompt, int verify); -void EVP_set_pw_prompt(const char *prompt); -char *EVP_get_pw_prompt(void); - -__owur int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, - const unsigned char *salt, - const unsigned char *data, int datal, int count, - unsigned char *key, unsigned char *iv); - -void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags); -void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags); -int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags); - -__owur int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv); -/*__owur*/ int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, - const EVP_CIPHER *cipher, ENGINE *impl, - const unsigned char *key, - const unsigned char *iv); -/*__owur*/ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, - int *outl, const unsigned char *in, int inl); -/*__owur*/ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, - int *outl); -/*__owur*/ int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, - int *outl); - -__owur int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv); -/*__owur*/ int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, - const EVP_CIPHER *cipher, ENGINE *impl, - const unsigned char *key, - const unsigned char *iv); -/*__owur*/ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, - int *outl, const unsigned char *in, int inl); -__owur int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, - int *outl); -/*__owur*/ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, - int *outl); - -__owur int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv, - int enc); -/*__owur*/ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, - const EVP_CIPHER *cipher, ENGINE *impl, - const unsigned char *key, - const unsigned char *iv, int enc); -__owur int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, - int *outl, const unsigned char *in, int inl); -__owur int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, - int *outl); -__owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, - int *outl); - -__owur int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, - EVP_PKEY *pkey); - -__owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, - size_t *siglen, const unsigned char *tbs, - size_t tbslen); - -__owur int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, - unsigned int siglen, EVP_PKEY *pkey); - -__owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, - size_t siglen, const unsigned char *tbs, - size_t tbslen); - -/*__owur*/ int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, - const EVP_MD *type, ENGINE *e, - EVP_PKEY *pkey); -__owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, - size_t *siglen); - -__owur int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, - const EVP_MD *type, ENGINE *e, - EVP_PKEY *pkey); -__owur int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, - size_t siglen); - -# ifndef OPENSSL_NO_RSA -__owur int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, - const unsigned char *ek, int ekl, - const unsigned char *iv, EVP_PKEY *priv); -__owur int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); - -__owur int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, - unsigned char **ek, int *ekl, unsigned char *iv, - EVP_PKEY **pubk, int npubk); -__owur int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); -# endif - -EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void); -void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx); -int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx); -int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx); -void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); -int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); -int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n); - -void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); -int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned - char *out, int *outl); -int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define EVP_CIPHER_CTX_init(c) EVP_CIPHER_CTX_reset(c) -# define EVP_CIPHER_CTX_cleanup(c) EVP_CIPHER_CTX_reset(c) -# endif -EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); -int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c); -void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *c); -int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); -int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); -int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); -int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); - -const BIO_METHOD *BIO_f_md(void); -const BIO_METHOD *BIO_f_base64(void); -const BIO_METHOD *BIO_f_cipher(void); -const BIO_METHOD *BIO_f_reliable(void); -__owur int BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k, - const unsigned char *i, int enc); - -const EVP_MD *EVP_md_null(void); -# ifndef OPENSSL_NO_MD2 -const EVP_MD *EVP_md2(void); -# endif -# ifndef OPENSSL_NO_MD4 -const EVP_MD *EVP_md4(void); -# endif -# ifndef OPENSSL_NO_MD5 -const EVP_MD *EVP_md5(void); -const EVP_MD *EVP_md5_sha1(void); -# endif -# ifndef OPENSSL_NO_BLAKE2 -const EVP_MD *EVP_blake2b512(void); -const EVP_MD *EVP_blake2s256(void); -# endif -const EVP_MD *EVP_sha1(void); -const EVP_MD *EVP_sha224(void); -const EVP_MD *EVP_sha256(void); -const EVP_MD *EVP_sha384(void); -const EVP_MD *EVP_sha512(void); -const EVP_MD *EVP_sha512_224(void); -const EVP_MD *EVP_sha512_256(void); -const EVP_MD *EVP_sha3_224(void); -const EVP_MD *EVP_sha3_256(void); -const EVP_MD *EVP_sha3_384(void); -const EVP_MD *EVP_sha3_512(void); -const EVP_MD *EVP_shake128(void); -const EVP_MD *EVP_shake256(void); -# ifndef OPENSSL_NO_MDC2 -const EVP_MD *EVP_mdc2(void); -# endif -# ifndef OPENSSL_NO_RMD160 -const EVP_MD *EVP_ripemd160(void); -# endif -# ifndef OPENSSL_NO_WHIRLPOOL -const EVP_MD *EVP_whirlpool(void); -# endif -# ifndef OPENSSL_NO_SM3 -const EVP_MD *EVP_sm3(void); -# endif -const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */ -# ifndef OPENSSL_NO_DES -const EVP_CIPHER *EVP_des_ecb(void); -const EVP_CIPHER *EVP_des_ede(void); -const EVP_CIPHER *EVP_des_ede3(void); -const EVP_CIPHER *EVP_des_ede_ecb(void); -const EVP_CIPHER *EVP_des_ede3_ecb(void); -const EVP_CIPHER *EVP_des_cfb64(void); -# define EVP_des_cfb EVP_des_cfb64 -const EVP_CIPHER *EVP_des_cfb1(void); -const EVP_CIPHER *EVP_des_cfb8(void); -const EVP_CIPHER *EVP_des_ede_cfb64(void); -# define EVP_des_ede_cfb EVP_des_ede_cfb64 -const EVP_CIPHER *EVP_des_ede3_cfb64(void); -# define EVP_des_ede3_cfb EVP_des_ede3_cfb64 -const EVP_CIPHER *EVP_des_ede3_cfb1(void); -const EVP_CIPHER *EVP_des_ede3_cfb8(void); -const EVP_CIPHER *EVP_des_ofb(void); -const EVP_CIPHER *EVP_des_ede_ofb(void); -const EVP_CIPHER *EVP_des_ede3_ofb(void); -const EVP_CIPHER *EVP_des_cbc(void); -const EVP_CIPHER *EVP_des_ede_cbc(void); -const EVP_CIPHER *EVP_des_ede3_cbc(void); -const EVP_CIPHER *EVP_desx_cbc(void); -const EVP_CIPHER *EVP_des_ede3_wrap(void); -/* - * This should now be supported through the dev_crypto ENGINE. But also, why - * are rc4 and md5 declarations made here inside a "NO_DES" precompiler - * branch? - */ -# endif -# ifndef OPENSSL_NO_RC4 -const EVP_CIPHER *EVP_rc4(void); -const EVP_CIPHER *EVP_rc4_40(void); -# ifndef OPENSSL_NO_MD5 -const EVP_CIPHER *EVP_rc4_hmac_md5(void); -# endif -# endif -# ifndef OPENSSL_NO_IDEA -const EVP_CIPHER *EVP_idea_ecb(void); -const EVP_CIPHER *EVP_idea_cfb64(void); -# define EVP_idea_cfb EVP_idea_cfb64 -const EVP_CIPHER *EVP_idea_ofb(void); -const EVP_CIPHER *EVP_idea_cbc(void); -# endif -# ifndef OPENSSL_NO_RC2 -const EVP_CIPHER *EVP_rc2_ecb(void); -const EVP_CIPHER *EVP_rc2_cbc(void); -const EVP_CIPHER *EVP_rc2_40_cbc(void); -const EVP_CIPHER *EVP_rc2_64_cbc(void); -const EVP_CIPHER *EVP_rc2_cfb64(void); -# define EVP_rc2_cfb EVP_rc2_cfb64 -const EVP_CIPHER *EVP_rc2_ofb(void); -# endif -# ifndef OPENSSL_NO_BF -const EVP_CIPHER *EVP_bf_ecb(void); -const EVP_CIPHER *EVP_bf_cbc(void); -const EVP_CIPHER *EVP_bf_cfb64(void); -# define EVP_bf_cfb EVP_bf_cfb64 -const EVP_CIPHER *EVP_bf_ofb(void); -# endif -# ifndef OPENSSL_NO_CAST -const EVP_CIPHER *EVP_cast5_ecb(void); -const EVP_CIPHER *EVP_cast5_cbc(void); -const EVP_CIPHER *EVP_cast5_cfb64(void); -# define EVP_cast5_cfb EVP_cast5_cfb64 -const EVP_CIPHER *EVP_cast5_ofb(void); -# endif -# ifndef OPENSSL_NO_RC5 -const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void); -const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void); -const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void); -# define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64 -const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); -# endif -const EVP_CIPHER *EVP_aes_128_ecb(void); -const EVP_CIPHER *EVP_aes_128_cbc(void); -const EVP_CIPHER *EVP_aes_128_cfb1(void); -const EVP_CIPHER *EVP_aes_128_cfb8(void); -const EVP_CIPHER *EVP_aes_128_cfb128(void); -# define EVP_aes_128_cfb EVP_aes_128_cfb128 -const EVP_CIPHER *EVP_aes_128_ofb(void); -const EVP_CIPHER *EVP_aes_128_ctr(void); -const EVP_CIPHER *EVP_aes_128_ccm(void); -const EVP_CIPHER *EVP_aes_128_gcm(void); -const EVP_CIPHER *EVP_aes_128_xts(void); -const EVP_CIPHER *EVP_aes_128_wrap(void); -const EVP_CIPHER *EVP_aes_128_wrap_pad(void); -# ifndef OPENSSL_NO_OCB -const EVP_CIPHER *EVP_aes_128_ocb(void); -# endif -const EVP_CIPHER *EVP_aes_192_ecb(void); -const EVP_CIPHER *EVP_aes_192_cbc(void); -const EVP_CIPHER *EVP_aes_192_cfb1(void); -const EVP_CIPHER *EVP_aes_192_cfb8(void); -const EVP_CIPHER *EVP_aes_192_cfb128(void); -# define EVP_aes_192_cfb EVP_aes_192_cfb128 -const EVP_CIPHER *EVP_aes_192_ofb(void); -const EVP_CIPHER *EVP_aes_192_ctr(void); -const EVP_CIPHER *EVP_aes_192_ccm(void); -const EVP_CIPHER *EVP_aes_192_gcm(void); -const EVP_CIPHER *EVP_aes_192_wrap(void); -const EVP_CIPHER *EVP_aes_192_wrap_pad(void); -# ifndef OPENSSL_NO_OCB -const EVP_CIPHER *EVP_aes_192_ocb(void); -# endif -const EVP_CIPHER *EVP_aes_256_ecb(void); -const EVP_CIPHER *EVP_aes_256_cbc(void); -const EVP_CIPHER *EVP_aes_256_cfb1(void); -const EVP_CIPHER *EVP_aes_256_cfb8(void); -const EVP_CIPHER *EVP_aes_256_cfb128(void); -# define EVP_aes_256_cfb EVP_aes_256_cfb128 -const EVP_CIPHER *EVP_aes_256_ofb(void); -const EVP_CIPHER *EVP_aes_256_ctr(void); -const EVP_CIPHER *EVP_aes_256_ccm(void); -const EVP_CIPHER *EVP_aes_256_gcm(void); -const EVP_CIPHER *EVP_aes_256_xts(void); -const EVP_CIPHER *EVP_aes_256_wrap(void); -const EVP_CIPHER *EVP_aes_256_wrap_pad(void); -# ifndef OPENSSL_NO_OCB -const EVP_CIPHER *EVP_aes_256_ocb(void); -# endif -const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); -const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void); -const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void); -const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void); -# ifndef OPENSSL_NO_ARIA -const EVP_CIPHER *EVP_aria_128_ecb(void); -const EVP_CIPHER *EVP_aria_128_cbc(void); -const EVP_CIPHER *EVP_aria_128_cfb1(void); -const EVP_CIPHER *EVP_aria_128_cfb8(void); -const EVP_CIPHER *EVP_aria_128_cfb128(void); -# define EVP_aria_128_cfb EVP_aria_128_cfb128 -const EVP_CIPHER *EVP_aria_128_ctr(void); -const EVP_CIPHER *EVP_aria_128_ofb(void); -const EVP_CIPHER *EVP_aria_128_gcm(void); -const EVP_CIPHER *EVP_aria_128_ccm(void); -const EVP_CIPHER *EVP_aria_192_ecb(void); -const EVP_CIPHER *EVP_aria_192_cbc(void); -const EVP_CIPHER *EVP_aria_192_cfb1(void); -const EVP_CIPHER *EVP_aria_192_cfb8(void); -const EVP_CIPHER *EVP_aria_192_cfb128(void); -# define EVP_aria_192_cfb EVP_aria_192_cfb128 -const EVP_CIPHER *EVP_aria_192_ctr(void); -const EVP_CIPHER *EVP_aria_192_ofb(void); -const EVP_CIPHER *EVP_aria_192_gcm(void); -const EVP_CIPHER *EVP_aria_192_ccm(void); -const EVP_CIPHER *EVP_aria_256_ecb(void); -const EVP_CIPHER *EVP_aria_256_cbc(void); -const EVP_CIPHER *EVP_aria_256_cfb1(void); -const EVP_CIPHER *EVP_aria_256_cfb8(void); -const EVP_CIPHER *EVP_aria_256_cfb128(void); -# define EVP_aria_256_cfb EVP_aria_256_cfb128 -const EVP_CIPHER *EVP_aria_256_ctr(void); -const EVP_CIPHER *EVP_aria_256_ofb(void); -const EVP_CIPHER *EVP_aria_256_gcm(void); -const EVP_CIPHER *EVP_aria_256_ccm(void); -# endif -# ifndef OPENSSL_NO_CAMELLIA -const EVP_CIPHER *EVP_camellia_128_ecb(void); -const EVP_CIPHER *EVP_camellia_128_cbc(void); -const EVP_CIPHER *EVP_camellia_128_cfb1(void); -const EVP_CIPHER *EVP_camellia_128_cfb8(void); -const EVP_CIPHER *EVP_camellia_128_cfb128(void); -# define EVP_camellia_128_cfb EVP_camellia_128_cfb128 -const EVP_CIPHER *EVP_camellia_128_ofb(void); -const EVP_CIPHER *EVP_camellia_128_ctr(void); -const EVP_CIPHER *EVP_camellia_192_ecb(void); -const EVP_CIPHER *EVP_camellia_192_cbc(void); -const EVP_CIPHER *EVP_camellia_192_cfb1(void); -const EVP_CIPHER *EVP_camellia_192_cfb8(void); -const EVP_CIPHER *EVP_camellia_192_cfb128(void); -# define EVP_camellia_192_cfb EVP_camellia_192_cfb128 -const EVP_CIPHER *EVP_camellia_192_ofb(void); -const EVP_CIPHER *EVP_camellia_192_ctr(void); -const EVP_CIPHER *EVP_camellia_256_ecb(void); -const EVP_CIPHER *EVP_camellia_256_cbc(void); -const EVP_CIPHER *EVP_camellia_256_cfb1(void); -const EVP_CIPHER *EVP_camellia_256_cfb8(void); -const EVP_CIPHER *EVP_camellia_256_cfb128(void); -# define EVP_camellia_256_cfb EVP_camellia_256_cfb128 -const EVP_CIPHER *EVP_camellia_256_ofb(void); -const EVP_CIPHER *EVP_camellia_256_ctr(void); -# endif -# ifndef OPENSSL_NO_CHACHA -const EVP_CIPHER *EVP_chacha20(void); -# ifndef OPENSSL_NO_POLY1305 -const EVP_CIPHER *EVP_chacha20_poly1305(void); -# endif -# endif - -# ifndef OPENSSL_NO_SEED -const EVP_CIPHER *EVP_seed_ecb(void); -const EVP_CIPHER *EVP_seed_cbc(void); -const EVP_CIPHER *EVP_seed_cfb128(void); -# define EVP_seed_cfb EVP_seed_cfb128 -const EVP_CIPHER *EVP_seed_ofb(void); -# endif - -# ifndef OPENSSL_NO_SM4 -const EVP_CIPHER *EVP_sm4_ecb(void); -const EVP_CIPHER *EVP_sm4_cbc(void); -const EVP_CIPHER *EVP_sm4_cfb128(void); -# define EVP_sm4_cfb EVP_sm4_cfb128 -const EVP_CIPHER *EVP_sm4_ofb(void); -const EVP_CIPHER *EVP_sm4_ctr(void); -# endif - -# if OPENSSL_API_COMPAT < 0x10100000L -# define OPENSSL_add_all_algorithms_conf() \ - OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ - | OPENSSL_INIT_ADD_ALL_DIGESTS \ - | OPENSSL_INIT_LOAD_CONFIG, NULL) -# define OPENSSL_add_all_algorithms_noconf() \ - OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ - | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) - -# ifdef OPENSSL_LOAD_CONF -# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_conf() -# else -# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_noconf() -# endif - -# define OpenSSL_add_all_ciphers() \ - OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL) -# define OpenSSL_add_all_digests() \ - OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) - -# define EVP_cleanup() while(0) continue -# endif - -int EVP_add_cipher(const EVP_CIPHER *cipher); -int EVP_add_digest(const EVP_MD *digest); - -const EVP_CIPHER *EVP_get_cipherbyname(const char *name); -const EVP_MD *EVP_get_digestbyname(const char *name); - -void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph, - const char *from, const char *to, void *x), - void *arg); -void EVP_CIPHER_do_all_sorted(void (*fn) - (const EVP_CIPHER *ciph, const char *from, - const char *to, void *x), void *arg); - -void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, - const char *from, const char *to, void *x), - void *arg); -void EVP_MD_do_all_sorted(void (*fn) - (const EVP_MD *ciph, const char *from, - const char *to, void *x), void *arg); - -int EVP_PKEY_decrypt_old(unsigned char *dec_key, - const unsigned char *enc_key, int enc_key_len, - EVP_PKEY *private_key); -int EVP_PKEY_encrypt_old(unsigned char *enc_key, - const unsigned char *key, int key_len, - EVP_PKEY *pub_key); -int EVP_PKEY_type(int type); -int EVP_PKEY_id(const EVP_PKEY *pkey); -int EVP_PKEY_base_id(const EVP_PKEY *pkey); -int EVP_PKEY_bits(const EVP_PKEY *pkey); -int EVP_PKEY_security_bits(const EVP_PKEY *pkey); -int EVP_PKEY_size(const EVP_PKEY *pkey); -int EVP_PKEY_set_type(EVP_PKEY *pkey, int type); -int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len); -int EVP_PKEY_set_alias_type(EVP_PKEY *pkey, int type); -# ifndef OPENSSL_NO_ENGINE -int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *e); -ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey); -# endif -int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); -void *EVP_PKEY_get0(const EVP_PKEY *pkey); -const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len); -# ifndef OPENSSL_NO_POLY1305 -const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len); -# endif -# ifndef OPENSSL_NO_SIPHASH -const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len); -# endif - -# ifndef OPENSSL_NO_RSA -struct rsa_st; -int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); -struct rsa_st *EVP_PKEY_get0_RSA(EVP_PKEY *pkey); -struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DSA -struct dsa_st; -int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); -struct dsa_st *EVP_PKEY_get0_DSA(EVP_PKEY *pkey); -struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DH -struct dh_st; -int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); -struct dh_st *EVP_PKEY_get0_DH(EVP_PKEY *pkey); -struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_EC -struct ec_key_st; -int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key); -struct ec_key_st *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey); -struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); -# endif - -EVP_PKEY *EVP_PKEY_new(void); -int EVP_PKEY_up_ref(EVP_PKEY *pkey); -void EVP_PKEY_free(EVP_PKEY *pkey); - -EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, - long length); -int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); - -EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, - long length); -EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, - long length); -int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); - -int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); -int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); -int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode); -int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); - -int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); - -int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); -int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); -int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); - -int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); - -int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey, - const unsigned char *pt, size_t ptlen); -size_t EVP_PKEY_get1_tls_encodedpoint(EVP_PKEY *pkey, unsigned char **ppt); - -int EVP_CIPHER_type(const EVP_CIPHER *ctx); - -/* calls methods */ -int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); -int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); - -/* These are used by EVP_CIPHER methods */ -int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); -int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); - -/* PKCS5 password based encryption */ -int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, - ASN1_TYPE *param, const EVP_CIPHER *cipher, - const EVP_MD *md, int en_de); -int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, - const unsigned char *salt, int saltlen, int iter, - int keylen, unsigned char *out); -int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, - const unsigned char *salt, int saltlen, int iter, - const EVP_MD *digest, int keylen, unsigned char *out); -int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, - ASN1_TYPE *param, const EVP_CIPHER *cipher, - const EVP_MD *md, int en_de); - -#ifndef OPENSSL_NO_SCRYPT -int EVP_PBE_scrypt(const char *pass, size_t passlen, - const unsigned char *salt, size_t saltlen, - uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem, - unsigned char *key, size_t keylen); - -int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, - int passlen, ASN1_TYPE *param, - const EVP_CIPHER *c, const EVP_MD *md, int en_de); -#endif - -void PKCS5_PBE_add(void); - -int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, - ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de); - -/* PBE type */ - -/* Can appear as the outermost AlgorithmIdentifier */ -# define EVP_PBE_TYPE_OUTER 0x0 -/* Is an PRF type OID */ -# define EVP_PBE_TYPE_PRF 0x1 -/* Is a PKCS#5 v2.0 KDF */ -# define EVP_PBE_TYPE_KDF 0x2 - -int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, - int md_nid, EVP_PBE_KEYGEN *keygen); -int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, - EVP_PBE_KEYGEN *keygen); -int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid, - EVP_PBE_KEYGEN **pkeygen); -void EVP_PBE_cleanup(void); -int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num); - -# define ASN1_PKEY_ALIAS 0x1 -# define ASN1_PKEY_DYNAMIC 0x2 -# define ASN1_PKEY_SIGPARAM_NULL 0x4 - -# define ASN1_PKEY_CTRL_PKCS7_SIGN 0x1 -# define ASN1_PKEY_CTRL_PKCS7_ENCRYPT 0x2 -# define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3 -# define ASN1_PKEY_CTRL_CMS_SIGN 0x5 -# define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7 -# define ASN1_PKEY_CTRL_CMS_RI_TYPE 0x8 - -# define ASN1_PKEY_CTRL_SET1_TLS_ENCPT 0x9 -# define ASN1_PKEY_CTRL_GET1_TLS_ENCPT 0xa - -int EVP_PKEY_asn1_get_count(void); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe, - const char *str, int len); -int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth); -int EVP_PKEY_asn1_add_alias(int to, int from); -int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, - int *ppkey_flags, const char **pinfo, - const char **ppem_str, - const EVP_PKEY_ASN1_METHOD *ameth); - -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(const EVP_PKEY *pkey); -EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags, - const char *pem_str, - const char *info); -void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, - const EVP_PKEY_ASN1_METHOD *src); -void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); -void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, - int (*pub_decode) (EVP_PKEY *pk, - X509_PUBKEY *pub), - int (*pub_encode) (X509_PUBKEY *pub, - const EVP_PKEY *pk), - int (*pub_cmp) (const EVP_PKEY *a, - const EVP_PKEY *b), - int (*pub_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx), - int (*pkey_size) (const EVP_PKEY *pk), - int (*pkey_bits) (const EVP_PKEY *pk)); -void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth, - int (*priv_decode) (EVP_PKEY *pk, - const PKCS8_PRIV_KEY_INFO - *p8inf), - int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, - const EVP_PKEY *pk), - int (*priv_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, - ASN1_PCTX *pctx)); -void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, - int (*param_decode) (EVP_PKEY *pkey, - const unsigned char **pder, - int derlen), - int (*param_encode) (const EVP_PKEY *pkey, - unsigned char **pder), - int (*param_missing) (const EVP_PKEY *pk), - int (*param_copy) (EVP_PKEY *to, - const EVP_PKEY *from), - int (*param_cmp) (const EVP_PKEY *a, - const EVP_PKEY *b), - int (*param_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, - ASN1_PCTX *pctx)); - -void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, - void (*pkey_free) (EVP_PKEY *pkey)); -void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_ctrl) (EVP_PKEY *pkey, int op, - long arg1, void *arg2)); -void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, - int (*item_verify) (EVP_MD_CTX *ctx, - const ASN1_ITEM *it, - void *asn, - X509_ALGOR *a, - ASN1_BIT_STRING *sig, - EVP_PKEY *pkey), - int (*item_sign) (EVP_MD_CTX *ctx, - const ASN1_ITEM *it, - void *asn, - X509_ALGOR *alg1, - X509_ALGOR *alg2, - ASN1_BIT_STRING *sig)); - -void EVP_PKEY_asn1_set_siginf(EVP_PKEY_ASN1_METHOD *ameth, - int (*siginf_set) (X509_SIG_INFO *siginf, - const X509_ALGOR *alg, - const ASN1_STRING *sig)); - -void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_check) (const EVP_PKEY *pk)); - -void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_pub_check) (const EVP_PKEY *pk)); - -void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_param_check) (const EVP_PKEY *pk)); - -void EVP_PKEY_asn1_set_set_priv_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*set_priv_key) (EVP_PKEY *pk, - const unsigned char - *priv, - size_t len)); -void EVP_PKEY_asn1_set_set_pub_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*set_pub_key) (EVP_PKEY *pk, - const unsigned char *pub, - size_t len)); -void EVP_PKEY_asn1_set_get_priv_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*get_priv_key) (const EVP_PKEY *pk, - unsigned char *priv, - size_t *len)); -void EVP_PKEY_asn1_set_get_pub_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*get_pub_key) (const EVP_PKEY *pk, - unsigned char *pub, - size_t *len)); - -void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_security_bits) (const EVP_PKEY - *pk)); - -# define EVP_PKEY_OP_UNDEFINED 0 -# define EVP_PKEY_OP_PARAMGEN (1<<1) -# define EVP_PKEY_OP_KEYGEN (1<<2) -# define EVP_PKEY_OP_SIGN (1<<3) -# define EVP_PKEY_OP_VERIFY (1<<4) -# define EVP_PKEY_OP_VERIFYRECOVER (1<<5) -# define EVP_PKEY_OP_SIGNCTX (1<<6) -# define EVP_PKEY_OP_VERIFYCTX (1<<7) -# define EVP_PKEY_OP_ENCRYPT (1<<8) -# define EVP_PKEY_OP_DECRYPT (1<<9) -# define EVP_PKEY_OP_DERIVE (1<<10) - -# define EVP_PKEY_OP_TYPE_SIG \ - (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \ - | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX) - -# define EVP_PKEY_OP_TYPE_CRYPT \ - (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT) - -# define EVP_PKEY_OP_TYPE_NOGEN \ - (EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT | EVP_PKEY_OP_DERIVE) - -# define EVP_PKEY_OP_TYPE_GEN \ - (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) - -# define EVP_PKEY_CTX_set_signature_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_GET_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_mac_key(ctx, key, len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_SET_MAC_KEY, len, (void *)(key)) - -# define EVP_PKEY_CTRL_MD 1 -# define EVP_PKEY_CTRL_PEER_KEY 2 - -# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 -# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 - -# define EVP_PKEY_CTRL_PKCS7_SIGN 5 - -# define EVP_PKEY_CTRL_SET_MAC_KEY 6 - -# define EVP_PKEY_CTRL_DIGESTINIT 7 - -/* Used by GOST key encryption in TLS */ -# define EVP_PKEY_CTRL_SET_IV 8 - -# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 -# define EVP_PKEY_CTRL_CMS_DECRYPT 10 -# define EVP_PKEY_CTRL_CMS_SIGN 11 - -# define EVP_PKEY_CTRL_CIPHER 12 - -# define EVP_PKEY_CTRL_GET_MD 13 - -# define EVP_PKEY_CTRL_SET_DIGEST_SIZE 14 - -# define EVP_PKEY_ALG_CTRL 0x1000 - -# define EVP_PKEY_FLAG_AUTOARGLEN 2 -/* - * Method handles all operations: don't assume any digest related defaults. - */ -# define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 - -const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); -EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); -void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, - const EVP_PKEY_METHOD *meth); -void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src); -void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); -int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); -int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); -size_t EVP_PKEY_meth_get_count(void); -const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); - -EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); -EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); -EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); -void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); - -int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, - int cmd, int p1, void *p2); -int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, - const char *value); -int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype, - int cmd, uint64_t value); - -int EVP_PKEY_CTX_str2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *str); -int EVP_PKEY_CTX_hex2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *hex); - -int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md); - -int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx); -void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen); - -EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, - const unsigned char *key, int keylen); -EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *e, - const unsigned char *priv, - size_t len); -EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *e, - const unsigned char *pub, - size_t len); -int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv, - size_t *len); -int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub, - size_t *len); - -EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv, - size_t len, const EVP_CIPHER *cipher); - -void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); -void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); -EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); - -EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); - -void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); -void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); - -int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, size_t tbslen); -int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, - const unsigned char *sig, size_t siglen, - const unsigned char *tbs, size_t tbslen); -int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, - unsigned char *rout, size_t *routlen, - const unsigned char *sig, size_t siglen); -int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, - unsigned char *out, size_t *outlen, - const unsigned char *in, size_t inlen); -int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, - unsigned char *out, size_t *outlen, - const unsigned char *in, size_t inlen); - -int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); -int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); - -typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx); - -int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); -int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); -int EVP_PKEY_check(EVP_PKEY_CTX *ctx); -int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx); -int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); - -void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); -EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); - -int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); - -void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, - int (*init) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, - int (*copy) (EVP_PKEY_CTX *dst, - EVP_PKEY_CTX *src)); - -void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, - void (*cleanup) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, - int (*paramgen_init) (EVP_PKEY_CTX *ctx), - int (*paramgen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, - int (*keygen_init) (EVP_PKEY_CTX *ctx), - int (*keygen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, - int (*sign_init) (EVP_PKEY_CTX *ctx), - int (*sign) (EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, - int (*verify_init) (EVP_PKEY_CTX *ctx), - int (*verify) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, - int (*verify_recover_init) (EVP_PKEY_CTX - *ctx), - int (*verify_recover) (EVP_PKEY_CTX - *ctx, - unsigned char - *sig, - size_t *siglen, - const unsigned - char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, - int (*signctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (*signctx) (EVP_PKEY_CTX *ctx, - unsigned char *sig, - size_t *siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, - int (*verifyctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (*verifyctx) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - int siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, - int (*encrypt_init) (EVP_PKEY_CTX *ctx), - int (*encryptfn) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, - int (*decrypt_init) (EVP_PKEY_CTX *ctx), - int (*decrypt) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, - int (*derive_init) (EVP_PKEY_CTX *ctx), - int (*derive) (EVP_PKEY_CTX *ctx, - unsigned char *key, - size_t *keylen)); - -void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, - int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, - void *p2), - int (*ctrl_str) (EVP_PKEY_CTX *ctx, - const char *type, - const char *value)); - -void EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_digest_custom(EVP_PKEY_METHOD *pmeth, - int (*digest_custom) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_init(const EVP_PKEY_METHOD *pmeth, - int (**pinit) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_get_copy(const EVP_PKEY_METHOD *pmeth, - int (**pcopy) (EVP_PKEY_CTX *dst, - EVP_PKEY_CTX *src)); - -void EVP_PKEY_meth_get_cleanup(const EVP_PKEY_METHOD *pmeth, - void (**pcleanup) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_get_paramgen(const EVP_PKEY_METHOD *pmeth, - int (**pparamgen_init) (EVP_PKEY_CTX *ctx), - int (**pparamgen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_keygen(const EVP_PKEY_METHOD *pmeth, - int (**pkeygen_init) (EVP_PKEY_CTX *ctx), - int (**pkeygen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_sign(const EVP_PKEY_METHOD *pmeth, - int (**psign_init) (EVP_PKEY_CTX *ctx), - int (**psign) (EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_verify(const EVP_PKEY_METHOD *pmeth, - int (**pverify_init) (EVP_PKEY_CTX *ctx), - int (**pverify) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_verify_recover(const EVP_PKEY_METHOD *pmeth, - int (**pverify_recover_init) (EVP_PKEY_CTX - *ctx), - int (**pverify_recover) (EVP_PKEY_CTX - *ctx, - unsigned char - *sig, - size_t *siglen, - const unsigned - char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_signctx(const EVP_PKEY_METHOD *pmeth, - int (**psignctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (**psignctx) (EVP_PKEY_CTX *ctx, - unsigned char *sig, - size_t *siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_verifyctx(const EVP_PKEY_METHOD *pmeth, - int (**pverifyctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (**pverifyctx) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - int siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_encrypt(const EVP_PKEY_METHOD *pmeth, - int (**pencrypt_init) (EVP_PKEY_CTX *ctx), - int (**pencryptfn) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_get_decrypt(const EVP_PKEY_METHOD *pmeth, - int (**pdecrypt_init) (EVP_PKEY_CTX *ctx), - int (**pdecrypt) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_get_derive(const EVP_PKEY_METHOD *pmeth, - int (**pderive_init) (EVP_PKEY_CTX *ctx), - int (**pderive) (EVP_PKEY_CTX *ctx, - unsigned char *key, - size_t *keylen)); - -void EVP_PKEY_meth_get_ctrl(const EVP_PKEY_METHOD *pmeth, - int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1, - void *p2), - int (**pctrl_str) (EVP_PKEY_CTX *ctx, - const char *type, - const char *value)); - -void EVP_PKEY_meth_get_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_public_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_param_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_digest_custom(EVP_PKEY_METHOD *pmeth, - int (**pdigest_custom) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx)); -void EVP_add_alg_module(void); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/evperr.h b/submodules/MtProtoKit/openssl/openssl/evperr.h deleted file mode 100644 index 6a651f5563..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/evperr.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_EVPERR_H -# define HEADER_EVPERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_EVP_strings(void); - -/* - * EVP function codes. - */ -# define EVP_F_AESNI_INIT_KEY 165 -# define EVP_F_AESNI_XTS_INIT_KEY 207 -# define EVP_F_AES_GCM_CTRL 196 -# define EVP_F_AES_INIT_KEY 133 -# define EVP_F_AES_OCB_CIPHER 169 -# define EVP_F_AES_T4_INIT_KEY 178 -# define EVP_F_AES_T4_XTS_INIT_KEY 208 -# define EVP_F_AES_WRAP_CIPHER 170 -# define EVP_F_AES_XTS_INIT_KEY 209 -# define EVP_F_ALG_MODULE_INIT 177 -# define EVP_F_ARIA_CCM_INIT_KEY 175 -# define EVP_F_ARIA_GCM_CTRL 197 -# define EVP_F_ARIA_GCM_INIT_KEY 176 -# define EVP_F_ARIA_INIT_KEY 185 -# define EVP_F_B64_NEW 198 -# define EVP_F_CAMELLIA_INIT_KEY 159 -# define EVP_F_CHACHA20_POLY1305_CTRL 182 -# define EVP_F_CMLL_T4_INIT_KEY 179 -# define EVP_F_DES_EDE3_WRAP_CIPHER 171 -# define EVP_F_DO_SIGVER_INIT 161 -# define EVP_F_ENC_NEW 199 -# define EVP_F_EVP_CIPHERINIT_EX 123 -# define EVP_F_EVP_CIPHER_ASN1_TO_PARAM 204 -# define EVP_F_EVP_CIPHER_CTX_COPY 163 -# define EVP_F_EVP_CIPHER_CTX_CTRL 124 -# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 -# define EVP_F_EVP_CIPHER_PARAM_TO_ASN1 205 -# define EVP_F_EVP_DECRYPTFINAL_EX 101 -# define EVP_F_EVP_DECRYPTUPDATE 166 -# define EVP_F_EVP_DIGESTFINALXOF 174 -# define EVP_F_EVP_DIGESTINIT_EX 128 -# define EVP_F_EVP_ENCRYPTDECRYPTUPDATE 219 -# define EVP_F_EVP_ENCRYPTFINAL_EX 127 -# define EVP_F_EVP_ENCRYPTUPDATE 167 -# define EVP_F_EVP_MD_CTX_COPY_EX 110 -# define EVP_F_EVP_MD_SIZE 162 -# define EVP_F_EVP_OPENINIT 102 -# define EVP_F_EVP_PBE_ALG_ADD 115 -# define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 -# define EVP_F_EVP_PBE_CIPHERINIT 116 -# define EVP_F_EVP_PBE_SCRYPT 181 -# define EVP_F_EVP_PKCS82PKEY 111 -# define EVP_F_EVP_PKEY2PKCS8 113 -# define EVP_F_EVP_PKEY_ASN1_ADD0 188 -# define EVP_F_EVP_PKEY_CHECK 186 -# define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 -# define EVP_F_EVP_PKEY_CTX_CTRL 137 -# define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 -# define EVP_F_EVP_PKEY_CTX_DUP 156 -# define EVP_F_EVP_PKEY_CTX_MD 168 -# define EVP_F_EVP_PKEY_DECRYPT 104 -# define EVP_F_EVP_PKEY_DECRYPT_INIT 138 -# define EVP_F_EVP_PKEY_DECRYPT_OLD 151 -# define EVP_F_EVP_PKEY_DERIVE 153 -# define EVP_F_EVP_PKEY_DERIVE_INIT 154 -# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 -# define EVP_F_EVP_PKEY_ENCRYPT 105 -# define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 -# define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 -# define EVP_F_EVP_PKEY_GET0_DH 119 -# define EVP_F_EVP_PKEY_GET0_DSA 120 -# define EVP_F_EVP_PKEY_GET0_EC_KEY 131 -# define EVP_F_EVP_PKEY_GET0_HMAC 183 -# define EVP_F_EVP_PKEY_GET0_POLY1305 184 -# define EVP_F_EVP_PKEY_GET0_RSA 121 -# define EVP_F_EVP_PKEY_GET0_SIPHASH 172 -# define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY 202 -# define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY 203 -# define EVP_F_EVP_PKEY_KEYGEN 146 -# define EVP_F_EVP_PKEY_KEYGEN_INIT 147 -# define EVP_F_EVP_PKEY_METH_ADD0 194 -# define EVP_F_EVP_PKEY_METH_NEW 195 -# define EVP_F_EVP_PKEY_NEW 106 -# define EVP_F_EVP_PKEY_NEW_CMAC_KEY 193 -# define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY 191 -# define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY 192 -# define EVP_F_EVP_PKEY_PARAMGEN 148 -# define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 -# define EVP_F_EVP_PKEY_PARAM_CHECK 189 -# define EVP_F_EVP_PKEY_PUBLIC_CHECK 190 -# define EVP_F_EVP_PKEY_SET1_ENGINE 187 -# define EVP_F_EVP_PKEY_SET_ALIAS_TYPE 206 -# define EVP_F_EVP_PKEY_SIGN 140 -# define EVP_F_EVP_PKEY_SIGN_INIT 141 -# define EVP_F_EVP_PKEY_VERIFY 142 -# define EVP_F_EVP_PKEY_VERIFY_INIT 143 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 -# define EVP_F_EVP_SIGNFINAL 107 -# define EVP_F_EVP_VERIFYFINAL 108 -# define EVP_F_INT_CTX_NEW 157 -# define EVP_F_OK_NEW 200 -# define EVP_F_PKCS5_PBE_KEYIVGEN 117 -# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 -# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164 -# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 180 -# define EVP_F_PKEY_SET_TYPE 158 -# define EVP_F_RC2_MAGIC_TO_METH 109 -# define EVP_F_RC5_CTRL 125 -# define EVP_F_R_32_12_16_INIT_KEY 242 -# define EVP_F_S390X_AES_GCM_CTRL 201 -# define EVP_F_UPDATE 173 - -/* - * EVP reason codes. - */ -# define EVP_R_AES_KEY_SETUP_FAILED 143 -# define EVP_R_ARIA_KEY_SETUP_FAILED 176 -# define EVP_R_BAD_DECRYPT 100 -# define EVP_R_BAD_KEY_LENGTH 195 -# define EVP_R_BUFFER_TOO_SMALL 155 -# define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 -# define EVP_R_CIPHER_PARAMETER_ERROR 122 -# define EVP_R_COMMAND_NOT_SUPPORTED 147 -# define EVP_R_COPY_ERROR 173 -# define EVP_R_CTRL_NOT_IMPLEMENTED 132 -# define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 -# define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 -# define EVP_R_DECODE_ERROR 114 -# define EVP_R_DIFFERENT_KEY_TYPES 101 -# define EVP_R_DIFFERENT_PARAMETERS 153 -# define EVP_R_ERROR_LOADING_SECTION 165 -# define EVP_R_ERROR_SETTING_FIPS_MODE 166 -# define EVP_R_EXPECTING_AN_HMAC_KEY 174 -# define EVP_R_EXPECTING_AN_RSA_KEY 127 -# define EVP_R_EXPECTING_A_DH_KEY 128 -# define EVP_R_EXPECTING_A_DSA_KEY 129 -# define EVP_R_EXPECTING_A_EC_KEY 142 -# define EVP_R_EXPECTING_A_POLY1305_KEY 164 -# define EVP_R_EXPECTING_A_SIPHASH_KEY 175 -# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 -# define EVP_R_GET_RAW_KEY_FAILED 182 -# define EVP_R_ILLEGAL_SCRYPT_PARAMETERS 171 -# define EVP_R_INITIALIZATION_ERROR 134 -# define EVP_R_INPUT_NOT_INITIALIZED 111 -# define EVP_R_INVALID_DIGEST 152 -# define EVP_R_INVALID_FIPS_MODE 168 -# define EVP_R_INVALID_KEY 163 -# define EVP_R_INVALID_KEY_LENGTH 130 -# define EVP_R_INVALID_OPERATION 148 -# define EVP_R_KEYGEN_FAILURE 120 -# define EVP_R_KEY_SETUP_FAILED 180 -# define EVP_R_MEMORY_LIMIT_EXCEEDED 172 -# define EVP_R_MESSAGE_DIGEST_IS_NULL 159 -# define EVP_R_METHOD_NOT_SUPPORTED 144 -# define EVP_R_MISSING_PARAMETERS 103 -# define EVP_R_NOT_XOF_OR_INVALID_LENGTH 178 -# define EVP_R_NO_CIPHER_SET 131 -# define EVP_R_NO_DEFAULT_DIGEST 158 -# define EVP_R_NO_DIGEST_SET 139 -# define EVP_R_NO_KEY_SET 154 -# define EVP_R_NO_OPERATION_SET 149 -# define EVP_R_ONLY_ONESHOT_SUPPORTED 177 -# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 -# define EVP_R_OPERATON_NOT_INITIALIZED 151 -# define EVP_R_PARTIALLY_OVERLAPPING 162 -# define EVP_R_PBKDF2_ERROR 181 -# define EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED 179 -# define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 -# define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 -# define EVP_R_PUBLIC_KEY_NOT_RSA 106 -# define EVP_R_UNKNOWN_CIPHER 160 -# define EVP_R_UNKNOWN_DIGEST 161 -# define EVP_R_UNKNOWN_OPTION 169 -# define EVP_R_UNKNOWN_PBE_ALGORITHM 121 -# define EVP_R_UNSUPPORTED_ALGORITHM 156 -# define EVP_R_UNSUPPORTED_CIPHER 107 -# define EVP_R_UNSUPPORTED_KEYLENGTH 123 -# define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124 -# define EVP_R_UNSUPPORTED_KEY_SIZE 108 -# define EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS 135 -# define EVP_R_UNSUPPORTED_PRF 125 -# define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 -# define EVP_R_UNSUPPORTED_SALT_TYPE 126 -# define EVP_R_WRAP_MODE_NOT_ALLOWED 170 -# define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 -# define EVP_R_XTS_DUPLICATED_KEYS 183 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/hmac.h b/submodules/MtProtoKit/openssl/openssl/hmac.h deleted file mode 100644 index 458efc1d51..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/hmac.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_HMAC_H -# define HEADER_HMAC_H - -# include - -# include - -# if OPENSSL_API_COMPAT < 0x10200000L -# define HMAC_MAX_MD_CBLOCK 128 /* Deprecated */ -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -size_t HMAC_size(const HMAC_CTX *e); -HMAC_CTX *HMAC_CTX_new(void); -int HMAC_CTX_reset(HMAC_CTX *ctx); -void HMAC_CTX_free(HMAC_CTX *ctx); - -DEPRECATEDIN_1_1_0(__owur int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md)) - -/*__owur*/ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md, ENGINE *impl); -/*__owur*/ int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, - size_t len); -/*__owur*/ int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, - unsigned int *len); -unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, - const unsigned char *d, size_t n, unsigned char *md, - unsigned int *md_len); -__owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); - -void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); -const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/idea.h b/submodules/MtProtoKit/openssl/openssl/idea.h deleted file mode 100644 index 4334f3ea71..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/idea.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_IDEA_H -# define HEADER_IDEA_H - -# include - -# ifndef OPENSSL_NO_IDEA -# ifdef __cplusplus -extern "C" { -# endif - -typedef unsigned int IDEA_INT; - -# define IDEA_ENCRYPT 1 -# define IDEA_DECRYPT 0 - -# define IDEA_BLOCK 8 -# define IDEA_KEY_LENGTH 16 - -typedef struct idea_key_st { - IDEA_INT data[9][6]; -} IDEA_KEY_SCHEDULE; - -const char *IDEA_options(void); -void IDEA_ecb_encrypt(const unsigned char *in, unsigned char *out, - IDEA_KEY_SCHEDULE *ks); -void IDEA_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); -void IDEA_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); -void IDEA_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int enc); -void IDEA_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num, int enc); -void IDEA_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num); -void IDEA_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define idea_options IDEA_options -# define idea_ecb_encrypt IDEA_ecb_encrypt -# define idea_set_encrypt_key IDEA_set_encrypt_key -# define idea_set_decrypt_key IDEA_set_decrypt_key -# define idea_cbc_encrypt IDEA_cbc_encrypt -# define idea_cfb64_encrypt IDEA_cfb64_encrypt -# define idea_ofb64_encrypt IDEA_ofb64_encrypt -# define idea_encrypt IDEA_encrypt -# endif - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/kdf.h b/submodules/MtProtoKit/openssl/openssl/kdf.h deleted file mode 100644 index 5abd4c3714..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/kdf.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_KDF_H -# define HEADER_KDF_H - -# include -#ifdef __cplusplus -extern "C" { -#endif - -# define EVP_PKEY_CTRL_TLS_MD (EVP_PKEY_ALG_CTRL) -# define EVP_PKEY_CTRL_TLS_SECRET (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_TLS_SEED (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_HKDF_MD (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_HKDF_SALT (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_HKDF_KEY (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_HKDF_INFO (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_HKDF_MODE (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_PASS (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_SCRYPT_SALT (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_SCRYPT_N (EVP_PKEY_ALG_CTRL + 10) -# define EVP_PKEY_CTRL_SCRYPT_R (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_SCRYPT_P (EVP_PKEY_ALG_CTRL + 12) -# define EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES (EVP_PKEY_ALG_CTRL + 13) - -# define EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND 0 -# define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY 1 -# define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY 2 - -# define EVP_PKEY_CTX_set_tls1_prf_md(pctx, md) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, sec, seclen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_SECRET, seclen, (void *)(sec)) - -# define EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed, seedlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_SEED, seedlen, (void *)(seed)) - -# define EVP_PKEY_CTX_set_hkdf_md(pctx, md) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt, saltlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_SALT, saltlen, (void *)(salt)) - -# define EVP_PKEY_CTX_set1_hkdf_key(pctx, key, keylen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_KEY, keylen, (void *)(key)) - -# define EVP_PKEY_CTX_add1_hkdf_info(pctx, info, infolen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_INFO, infolen, (void *)(info)) - -# define EVP_PKEY_CTX_hkdf_mode(pctx, mode) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_MODE, mode, NULL) - -# define EVP_PKEY_CTX_set1_pbe_pass(pctx, pass, passlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_PASS, passlen, (void *)(pass)) - -# define EVP_PKEY_CTX_set1_scrypt_salt(pctx, salt, saltlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_SALT, saltlen, (void *)(salt)) - -# define EVP_PKEY_CTX_set_scrypt_N(pctx, n) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_N, n) - -# define EVP_PKEY_CTX_set_scrypt_r(pctx, r) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_R, r) - -# define EVP_PKEY_CTX_set_scrypt_p(pctx, p) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_P, p) - -# define EVP_PKEY_CTX_set_scrypt_maxmem_bytes(pctx, maxmem_bytes) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES, maxmem_bytes) - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/kdferr.h b/submodules/MtProtoKit/openssl/openssl/kdferr.h deleted file mode 100644 index 3f51bd0228..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/kdferr.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_KDFERR_H -# define HEADER_KDFERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_KDF_strings(void); - -/* - * KDF function codes. - */ -# define KDF_F_PKEY_HKDF_CTRL_STR 103 -# define KDF_F_PKEY_HKDF_DERIVE 102 -# define KDF_F_PKEY_HKDF_INIT 108 -# define KDF_F_PKEY_SCRYPT_CTRL_STR 104 -# define KDF_F_PKEY_SCRYPT_CTRL_UINT64 105 -# define KDF_F_PKEY_SCRYPT_DERIVE 109 -# define KDF_F_PKEY_SCRYPT_INIT 106 -# define KDF_F_PKEY_SCRYPT_SET_MEMBUF 107 -# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 100 -# define KDF_F_PKEY_TLS1_PRF_DERIVE 101 -# define KDF_F_PKEY_TLS1_PRF_INIT 110 -# define KDF_F_TLS1_PRF_ALG 111 - -/* - * KDF reason codes. - */ -# define KDF_R_INVALID_DIGEST 100 -# define KDF_R_MISSING_ITERATION_COUNT 109 -# define KDF_R_MISSING_KEY 104 -# define KDF_R_MISSING_MESSAGE_DIGEST 105 -# define KDF_R_MISSING_PARAMETER 101 -# define KDF_R_MISSING_PASS 110 -# define KDF_R_MISSING_SALT 111 -# define KDF_R_MISSING_SECRET 107 -# define KDF_R_MISSING_SEED 106 -# define KDF_R_UNKNOWN_PARAMETER_TYPE 103 -# define KDF_R_VALUE_ERROR 108 -# define KDF_R_VALUE_MISSING 102 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/krb5_asn.h b/submodules/MtProtoKit/openssl/openssl/krb5_asn.h deleted file mode 100644 index 9cf5a26dd8..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/krb5_asn.h +++ /dev/null @@ -1,240 +0,0 @@ -/* krb5_asn.h */ -/* - * Written by Vern Staats for the OpenSSL project, ** - * using ocsp/{*.h,*asn*.c} as a starting point - */ - -/* ==================================================================== - * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_KRB5_ASN_H -# define HEADER_KRB5_ASN_H - -/* - * #include - */ -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * ASN.1 from Kerberos RFC 1510 - */ - -/*- EncryptedData ::= SEQUENCE { - * etype[0] INTEGER, -- EncryptionType - * kvno[1] INTEGER OPTIONAL, - * cipher[2] OCTET STRING -- ciphertext - * } - */ -typedef struct krb5_encdata_st { - ASN1_INTEGER *etype; - ASN1_INTEGER *kvno; - ASN1_OCTET_STRING *cipher; -} KRB5_ENCDATA; - -DECLARE_STACK_OF(KRB5_ENCDATA) - -/*- PrincipalName ::= SEQUENCE { - * name-type[0] INTEGER, - * name-string[1] SEQUENCE OF GeneralString - * } - */ -typedef struct krb5_princname_st { - ASN1_INTEGER *nametype; - STACK_OF(ASN1_GENERALSTRING) *namestring; -} KRB5_PRINCNAME; - -DECLARE_STACK_OF(KRB5_PRINCNAME) - -/*- Ticket ::= [APPLICATION 1] SEQUENCE { - * tkt-vno[0] INTEGER, - * realm[1] Realm, - * sname[2] PrincipalName, - * enc-part[3] EncryptedData - * } - */ -typedef struct krb5_tktbody_st { - ASN1_INTEGER *tktvno; - ASN1_GENERALSTRING *realm; - KRB5_PRINCNAME *sname; - KRB5_ENCDATA *encdata; -} KRB5_TKTBODY; - -typedef STACK_OF(KRB5_TKTBODY) KRB5_TICKET; -DECLARE_STACK_OF(KRB5_TKTBODY) - -/*- AP-REQ ::= [APPLICATION 14] SEQUENCE { - * pvno[0] INTEGER, - * msg-type[1] INTEGER, - * ap-options[2] APOptions, - * ticket[3] Ticket, - * authenticator[4] EncryptedData - * } - * - * APOptions ::= BIT STRING { - * reserved(0), use-session-key(1), mutual-required(2) } - */ -typedef struct krb5_ap_req_st { - ASN1_INTEGER *pvno; - ASN1_INTEGER *msgtype; - ASN1_BIT_STRING *apoptions; - KRB5_TICKET *ticket; - KRB5_ENCDATA *authenticator; -} KRB5_APREQBODY; - -typedef STACK_OF(KRB5_APREQBODY) KRB5_APREQ; -DECLARE_STACK_OF(KRB5_APREQBODY) - -/* Authenticator Stuff */ - -/*- Checksum ::= SEQUENCE { - * cksumtype[0] INTEGER, - * checksum[1] OCTET STRING - * } - */ -typedef struct krb5_checksum_st { - ASN1_INTEGER *ctype; - ASN1_OCTET_STRING *checksum; -} KRB5_CHECKSUM; - -DECLARE_STACK_OF(KRB5_CHECKSUM) - -/*- EncryptionKey ::= SEQUENCE { - * keytype[0] INTEGER, - * keyvalue[1] OCTET STRING - * } - */ -typedef struct krb5_encryptionkey_st { - ASN1_INTEGER *ktype; - ASN1_OCTET_STRING *keyvalue; -} KRB5_ENCKEY; - -DECLARE_STACK_OF(KRB5_ENCKEY) - -/*- AuthorizationData ::= SEQUENCE OF SEQUENCE { - * ad-type[0] INTEGER, - * ad-data[1] OCTET STRING - * } - */ -typedef struct krb5_authorization_st { - ASN1_INTEGER *adtype; - ASN1_OCTET_STRING *addata; -} KRB5_AUTHDATA; - -DECLARE_STACK_OF(KRB5_AUTHDATA) - -/*- -- Unencrypted authenticator - * Authenticator ::= [APPLICATION 2] SEQUENCE { - * authenticator-vno[0] INTEGER, - * crealm[1] Realm, - * cname[2] PrincipalName, - * cksum[3] Checksum OPTIONAL, - * cusec[4] INTEGER, - * ctime[5] KerberosTime, - * subkey[6] EncryptionKey OPTIONAL, - * seq-number[7] INTEGER OPTIONAL, - * authorization-data[8] AuthorizationData OPTIONAL - * } - */ -typedef struct krb5_authenticator_st { - ASN1_INTEGER *avno; - ASN1_GENERALSTRING *crealm; - KRB5_PRINCNAME *cname; - KRB5_CHECKSUM *cksum; - ASN1_INTEGER *cusec; - ASN1_GENERALIZEDTIME *ctime; - KRB5_ENCKEY *subkey; - ASN1_INTEGER *seqnum; - KRB5_AUTHDATA *authorization; -} KRB5_AUTHENTBODY; - -typedef STACK_OF(KRB5_AUTHENTBODY) KRB5_AUTHENT; -DECLARE_STACK_OF(KRB5_AUTHENTBODY) - -/*- DECLARE_ASN1_FUNCTIONS(type) = DECLARE_ASN1_FUNCTIONS_name(type, type) = - * type *name##_new(void); - * void name##_free(type *a); - * DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) = - * DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) = - * type *d2i_##name(type **a, const unsigned char **in, long len); - * int i2d_##name(type *a, unsigned char **out); - * DECLARE_ASN1_ITEM(itname) = OPENSSL_EXTERN const ASN1_ITEM itname##_it - */ - -DECLARE_ASN1_FUNCTIONS(KRB5_ENCDATA) -DECLARE_ASN1_FUNCTIONS(KRB5_PRINCNAME) -DECLARE_ASN1_FUNCTIONS(KRB5_TKTBODY) -DECLARE_ASN1_FUNCTIONS(KRB5_APREQBODY) -DECLARE_ASN1_FUNCTIONS(KRB5_TICKET) -DECLARE_ASN1_FUNCTIONS(KRB5_APREQ) - -DECLARE_ASN1_FUNCTIONS(KRB5_CHECKSUM) -DECLARE_ASN1_FUNCTIONS(KRB5_ENCKEY) -DECLARE_ASN1_FUNCTIONS(KRB5_AUTHDATA) -DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENTBODY) -DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENT) - -/* BEGIN ERROR CODES */ -/* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. - */ - -#ifdef __cplusplus -} -#endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/kssl.h b/submodules/MtProtoKit/openssl/openssl/kssl.h deleted file mode 100644 index ae8a51f472..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/kssl.h +++ /dev/null @@ -1,197 +0,0 @@ -/* ssl/kssl.h */ -/* - * Written by Vern Staats for the OpenSSL project - * 2000. project 2000. - */ -/* ==================================================================== - * Copyright (c) 2000 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -/* - ** 19990701 VRS Started. - */ - -#ifndef KSSL_H -# define KSSL_H - -# include - -# ifndef OPENSSL_NO_KRB5 - -# include -# include -# include -# ifdef OPENSSL_SYS_WIN32 -/* - * These can sometimes get redefined indirectly by krb5 header files after - * they get undefed in ossl_typ.h - */ -# undef X509_NAME -# undef X509_EXTENSIONS -# undef OCSP_REQUEST -# undef OCSP_RESPONSE -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Depending on which KRB5 implementation used, some types from - * the other may be missing. Resolve that here and now - */ -# ifdef KRB5_HEIMDAL -typedef unsigned char krb5_octet; -# define FAR -# else - -# ifndef FAR -# define FAR -# endif - -# endif - -/*- - * Uncomment this to debug kssl problems or - * to trace usage of the Kerberos session key - * - * #define KSSL_DEBUG - */ - -# ifndef KRB5SVC -# define KRB5SVC "host" -# endif - -# ifndef KRB5KEYTAB -# define KRB5KEYTAB "/etc/krb5.keytab" -# endif - -# ifndef KRB5SENDAUTH -# define KRB5SENDAUTH 1 -# endif - -# ifndef KRB5CHECKAUTH -# define KRB5CHECKAUTH 1 -# endif - -# ifndef KSSL_CLOCKSKEW -# define KSSL_CLOCKSKEW 300; -# endif - -# define KSSL_ERR_MAX 255 -typedef struct kssl_err_st { - int reason; - char text[KSSL_ERR_MAX + 1]; -} KSSL_ERR; - -/*- Context for passing - * (1) Kerberos session key to SSL, and - * (2) Config data between application and SSL lib - */ -typedef struct kssl_ctx_st { - /* used by: disposition: */ - char *service_name; /* C,S default ok (kssl) */ - char *service_host; /* C input, REQUIRED */ - char *client_princ; /* S output from krb5 ticket */ - char *keytab_file; /* S NULL (/etc/krb5.keytab) */ - char *cred_cache; /* C NULL (default) */ - krb5_enctype enctype; - int length; - krb5_octet FAR *key; -} KSSL_CTX; - -# define KSSL_CLIENT 1 -# define KSSL_SERVER 2 -# define KSSL_SERVICE 3 -# define KSSL_KEYTAB 4 - -# define KSSL_CTX_OK 0 -# define KSSL_CTX_ERR 1 -# define KSSL_NOMEM 2 - -/* Public (for use by applications that use OpenSSL with Kerberos 5 support */ -krb5_error_code kssl_ctx_setstring(KSSL_CTX *kssl_ctx, int which, char *text); -KSSL_CTX *kssl_ctx_new(void); -KSSL_CTX *kssl_ctx_free(KSSL_CTX *kssl_ctx); -void kssl_ctx_show(KSSL_CTX *kssl_ctx); -krb5_error_code kssl_ctx_setprinc(KSSL_CTX *kssl_ctx, int which, - krb5_data *realm, krb5_data *entity, - int nentities); -krb5_error_code kssl_cget_tkt(KSSL_CTX *kssl_ctx, krb5_data **enc_tktp, - krb5_data *authenp, KSSL_ERR *kssl_err); -krb5_error_code kssl_sget_tkt(KSSL_CTX *kssl_ctx, krb5_data *indata, - krb5_ticket_times *ttimes, KSSL_ERR *kssl_err); -krb5_error_code kssl_ctx_setkey(KSSL_CTX *kssl_ctx, krb5_keyblock *session); -void kssl_err_set(KSSL_ERR *kssl_err, int reason, char *text); -void kssl_krb5_free_data_contents(krb5_context context, krb5_data *data); -krb5_error_code kssl_build_principal_2(krb5_context context, - krb5_principal *princ, int rlen, - const char *realm, int slen, - const char *svc, int hlen, - const char *host); -krb5_error_code kssl_validate_times(krb5_timestamp atime, - krb5_ticket_times *ttimes); -krb5_error_code kssl_check_authent(KSSL_CTX *kssl_ctx, krb5_data *authentp, - krb5_timestamp *atimep, - KSSL_ERR *kssl_err); -unsigned char *kssl_skip_confound(krb5_enctype enctype, unsigned char *authn); - -void SSL_set0_kssl_ctx(SSL *s, KSSL_CTX *kctx); -KSSL_CTX *SSL_get0_kssl_ctx(SSL *s); -char *kssl_ctx_get0_client_princ(KSSL_CTX *kctx); - -#ifdef __cplusplus -} -#endif -# endif /* OPENSSL_NO_KRB5 */ -#endif /* KSSL_H */ diff --git a/submodules/MtProtoKit/openssl/openssl/lhash.h b/submodules/MtProtoKit/openssl/openssl/lhash.h deleted file mode 100644 index 47b99d17fb..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/lhash.h +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -/* - * Header for dynamic hash table routines Author - Eric Young - */ - -#ifndef HEADER_LHASH_H -# define HEADER_LHASH_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct lhash_node_st OPENSSL_LH_NODE; -typedef int (*OPENSSL_LH_COMPFUNC) (const void *, const void *); -typedef unsigned long (*OPENSSL_LH_HASHFUNC) (const void *); -typedef void (*OPENSSL_LH_DOALL_FUNC) (void *); -typedef void (*OPENSSL_LH_DOALL_FUNCARG) (void *, void *); -typedef struct lhash_st OPENSSL_LHASH; - -/* - * Macros for declaring and implementing type-safe wrappers for LHASH - * callbacks. This way, callbacks can be provided to LHASH structures without - * function pointer casting and the macro-defined callbacks provide - * per-variable casting before deferring to the underlying type-specific - * callbacks. NB: It is possible to place a "static" in front of both the - * DECLARE and IMPLEMENT macros if the functions are strictly internal. - */ - -/* First: "hash" functions */ -# define DECLARE_LHASH_HASH_FN(name, o_type) \ - unsigned long name##_LHASH_HASH(const void *); -# define IMPLEMENT_LHASH_HASH_FN(name, o_type) \ - unsigned long name##_LHASH_HASH(const void *arg) { \ - const o_type *a = arg; \ - return name##_hash(a); } -# define LHASH_HASH_FN(name) name##_LHASH_HASH - -/* Second: "compare" functions */ -# define DECLARE_LHASH_COMP_FN(name, o_type) \ - int name##_LHASH_COMP(const void *, const void *); -# define IMPLEMENT_LHASH_COMP_FN(name, o_type) \ - int name##_LHASH_COMP(const void *arg1, const void *arg2) { \ - const o_type *a = arg1; \ - const o_type *b = arg2; \ - return name##_cmp(a,b); } -# define LHASH_COMP_FN(name) name##_LHASH_COMP - -/* Fourth: "doall_arg" functions */ -# define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ - void name##_LHASH_DOALL_ARG(void *, void *); -# define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ - void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ - o_type *a = arg1; \ - a_type *b = arg2; \ - name##_doall_arg(a, b); } -# define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG - - -# define LH_LOAD_MULT 256 - -int OPENSSL_LH_error(OPENSSL_LHASH *lh); -OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c); -void OPENSSL_LH_free(OPENSSL_LHASH *lh); -void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data); -void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data); -void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data); -void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func); -void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg); -unsigned long OPENSSL_LH_strhash(const char *c); -unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh); -unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh); -void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load); - -# ifndef OPENSSL_NO_STDIO -void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); -void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); -void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); -# endif -void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define _LHASH OPENSSL_LHASH -# define LHASH_NODE OPENSSL_LH_NODE -# define lh_error OPENSSL_LH_error -# define lh_new OPENSSL_LH_new -# define lh_free OPENSSL_LH_free -# define lh_insert OPENSSL_LH_insert -# define lh_delete OPENSSL_LH_delete -# define lh_retrieve OPENSSL_LH_retrieve -# define lh_doall OPENSSL_LH_doall -# define lh_doall_arg OPENSSL_LH_doall_arg -# define lh_strhash OPENSSL_LH_strhash -# define lh_num_items OPENSSL_LH_num_items -# ifndef OPENSSL_NO_STDIO -# define lh_stats OPENSSL_LH_stats -# define lh_node_stats OPENSSL_LH_node_stats -# define lh_node_usage_stats OPENSSL_LH_node_usage_stats -# endif -# define lh_stats_bio OPENSSL_LH_stats_bio -# define lh_node_stats_bio OPENSSL_LH_node_stats_bio -# define lh_node_usage_stats_bio OPENSSL_LH_node_usage_stats_bio -# endif - -/* Type checking... */ - -# define LHASH_OF(type) struct lhash_st_##type - -# define DEFINE_LHASH_OF(type) \ - LHASH_OF(type) { union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; }; \ - static ossl_inline LHASH_OF(type) * \ - lh_##type##_new(unsigned long (*hfn)(const type *), \ - int (*cfn)(const type *, const type *)) \ - { \ - return (LHASH_OF(type) *) \ - OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ - } \ - static ossl_unused ossl_inline void lh_##type##_free(LHASH_OF(type) *lh) \ - { \ - OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ - } \ - static ossl_unused ossl_inline type *lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ - { \ - return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ - } \ - static ossl_unused ossl_inline type *lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ - { \ - return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ - } \ - static ossl_unused ossl_inline type *lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ - { \ - return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ - } \ - static ossl_unused ossl_inline int lh_##type##_error(LHASH_OF(type) *lh) \ - { \ - return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ - } \ - static ossl_unused ossl_inline unsigned long lh_##type##_num_items(LHASH_OF(type) *lh) \ - { \ - return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ - } \ - static ossl_unused ossl_inline void lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline void lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline void lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline unsigned long lh_##type##_get_down_load(LHASH_OF(type) *lh) \ - { \ - return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ - } \ - static ossl_unused ossl_inline void lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ - { \ - OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \ - } \ - static ossl_unused ossl_inline void lh_##type##_doall(LHASH_OF(type) *lh, \ - void (*doall)(type *)) \ - { \ - OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ - } \ - LHASH_OF(type) - -#define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \ - int_implement_lhash_doall(type, argtype, const type) - -#define IMPLEMENT_LHASH_DOALL_ARG(type, argtype) \ - int_implement_lhash_doall(type, argtype, type) - -#define int_implement_lhash_doall(type, argtype, cbargtype) \ - static ossl_unused ossl_inline void \ - lh_##type##_doall_##argtype(LHASH_OF(type) *lh, \ - void (*fn)(cbargtype *, argtype *), \ - argtype *arg) \ - { \ - OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ - } \ - LHASH_OF(type) - -DEFINE_LHASH_OF(OPENSSL_STRING); -# ifdef _MSC_VER -/* - * push and pop this warning: - * warning C4090: 'function': different 'const' qualifiers - */ -# pragma warning (push) -# pragma warning (disable: 4090) -# endif - -DEFINE_LHASH_OF(OPENSSL_CSTRING); - -# ifdef _MSC_VER -# pragma warning (pop) -# endif - -/* - * If called without higher optimization (min. -xO3) the Oracle Developer - * Studio compiler generates code for the defined (static inline) functions - * above. - * This would later lead to the linker complaining about missing symbols when - * this header file is included but the resulting object is not linked against - * the Crypto library (openssl#6912). - */ -# ifdef __SUNPRO_C -# pragma weak OPENSSL_LH_new -# pragma weak OPENSSL_LH_free -# pragma weak OPENSSL_LH_insert -# pragma weak OPENSSL_LH_delete -# pragma weak OPENSSL_LH_retrieve -# pragma weak OPENSSL_LH_error -# pragma weak OPENSSL_LH_num_items -# pragma weak OPENSSL_LH_node_stats_bio -# pragma weak OPENSSL_LH_node_usage_stats_bio -# pragma weak OPENSSL_LH_stats_bio -# pragma weak OPENSSL_LH_get_down_load -# pragma weak OPENSSL_LH_set_down_load -# pragma weak OPENSSL_LH_doall -# pragma weak OPENSSL_LH_doall_arg -# endif /* __SUNPRO_C */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/md2.h b/submodules/MtProtoKit/openssl/openssl/md2.h deleted file mode 100644 index 7faf8e3d65..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/md2.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_MD2_H -# define HEADER_MD2_H - -# include - -# ifndef OPENSSL_NO_MD2 -# include -# ifdef __cplusplus -extern "C" { -# endif - -typedef unsigned char MD2_INT; - -# define MD2_DIGEST_LENGTH 16 -# define MD2_BLOCK 16 - -typedef struct MD2state_st { - unsigned int num; - unsigned char data[MD2_BLOCK]; - MD2_INT cksm[MD2_BLOCK]; - MD2_INT state[MD2_BLOCK]; -} MD2_CTX; - -const char *MD2_options(void); -int MD2_Init(MD2_CTX *c); -int MD2_Update(MD2_CTX *c, const unsigned char *data, size_t len); -int MD2_Final(unsigned char *md, MD2_CTX *c); -unsigned char *MD2(const unsigned char *d, size_t n, unsigned char *md); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/md4.h b/submodules/MtProtoKit/openssl/openssl/md4.h deleted file mode 100644 index 940e29db40..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/md4.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_MD4_H -# define HEADER_MD4_H - -# include - -# ifndef OPENSSL_NO_MD4 -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -/*- - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! MD4_LONG has to be at least 32 bits wide. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ -# define MD4_LONG unsigned int - -# define MD4_CBLOCK 64 -# define MD4_LBLOCK (MD4_CBLOCK/4) -# define MD4_DIGEST_LENGTH 16 - -typedef struct MD4state_st { - MD4_LONG A, B, C, D; - MD4_LONG Nl, Nh; - MD4_LONG data[MD4_LBLOCK]; - unsigned int num; -} MD4_CTX; - -int MD4_Init(MD4_CTX *c); -int MD4_Update(MD4_CTX *c, const void *data, size_t len); -int MD4_Final(unsigned char *md, MD4_CTX *c); -unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md); -void MD4_Transform(MD4_CTX *c, const unsigned char *b); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/md5.h b/submodules/MtProtoKit/openssl/openssl/md5.h deleted file mode 100644 index 2deb772118..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/md5.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_MD5_H -# define HEADER_MD5_H - -# include - -# ifndef OPENSSL_NO_MD5 -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -/* - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! MD5_LONG has to be at least 32 bits wide. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ -# define MD5_LONG unsigned int - -# define MD5_CBLOCK 64 -# define MD5_LBLOCK (MD5_CBLOCK/4) -# define MD5_DIGEST_LENGTH 16 - -typedef struct MD5state_st { - MD5_LONG A, B, C, D; - MD5_LONG Nl, Nh; - MD5_LONG data[MD5_LBLOCK]; - unsigned int num; -} MD5_CTX; - -int MD5_Init(MD5_CTX *c); -int MD5_Update(MD5_CTX *c, const void *data, size_t len); -int MD5_Final(unsigned char *md, MD5_CTX *c); -unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md); -void MD5_Transform(MD5_CTX *c, const unsigned char *b); -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/mdc2.h b/submodules/MtProtoKit/openssl/openssl/mdc2.h deleted file mode 100644 index aabd2bfaad..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/mdc2.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_MDC2_H -# define HEADER_MDC2_H - -# include - -#ifndef OPENSSL_NO_MDC2 -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -# define MDC2_BLOCK 8 -# define MDC2_DIGEST_LENGTH 16 - -typedef struct mdc2_ctx_st { - unsigned int num; - unsigned char data[MDC2_BLOCK]; - DES_cblock h, hh; - int pad_type; /* either 1 or 2, default 1 */ -} MDC2_CTX; - -int MDC2_Init(MDC2_CTX *c); -int MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len); -int MDC2_Final(unsigned char *md, MDC2_CTX *c); -unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/modes.h b/submodules/MtProtoKit/openssl/openssl/modes.h deleted file mode 100644 index d544f98d55..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/modes.h +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_MODES_H -# define HEADER_MODES_H - -# include - -# ifdef __cplusplus -extern "C" { -# endif -typedef void (*block128_f) (const unsigned char in[16], - unsigned char out[16], const void *key); - -typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int enc); - -typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out, - size_t blocks, const void *key, - const unsigned char ivec[16]); - -typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out, - size_t blocks, const void *key, - const unsigned char ivec[16], - unsigned char cmac[16]); - -void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], block128_f block); -void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], block128_f block); - -void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], - unsigned char ecount_buf[16], unsigned int *num, - block128_f block); - -void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], - unsigned char ecount_buf[16], - unsigned int *num, ctr128_f ctr); - -void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int *num, - block128_f block); - -void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); -void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); -void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out, - size_t bits, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); - -size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, unsigned char ivec[16], - block128_f block); -size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); -size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, unsigned char ivec[16], - block128_f block); -size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); - -size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, - unsigned char ivec[16], - block128_f block); -size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); -size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, - unsigned char ivec[16], - block128_f block); -size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); - -typedef struct gcm128_context GCM128_CONTEXT; - -GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block); -void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block); -void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, - size_t len); -int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, - size_t len); -int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len); -int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len); -int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len, ctr128_f stream); -int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len, ctr128_f stream); -int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag, - size_t len); -void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); -void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx); - -typedef struct ccm128_context CCM128_CONTEXT; - -void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, - unsigned int M, unsigned int L, void *key, - block128_f block); -int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce, - size_t nlen, size_t mlen); -void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad, - size_t alen); -int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len); -int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len); -int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len, - ccm128_f stream); -int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len, - ccm128_f stream); -size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); - -typedef struct xts128_context XTS128_CONTEXT; - -int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, - const unsigned char iv[16], - const unsigned char *inp, unsigned char *out, - size_t len, int enc); - -size_t CRYPTO_128_wrap(void *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, size_t inlen, - block128_f block); - -size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, size_t inlen, - block128_f block); -size_t CRYPTO_128_wrap_pad(void *key, const unsigned char *icv, - unsigned char *out, const unsigned char *in, - size_t inlen, block128_f block); -size_t CRYPTO_128_unwrap_pad(void *key, const unsigned char *icv, - unsigned char *out, const unsigned char *in, - size_t inlen, block128_f block); - -# ifndef OPENSSL_NO_OCB -typedef struct ocb128_context OCB128_CONTEXT; - -typedef void (*ocb128_f) (const unsigned char *in, unsigned char *out, - size_t blocks, const void *key, - size_t start_block_num, - unsigned char offset_i[16], - const unsigned char L_[][16], - unsigned char checksum[16]); - -OCB128_CONTEXT *CRYPTO_ocb128_new(void *keyenc, void *keydec, - block128_f encrypt, block128_f decrypt, - ocb128_f stream); -int CRYPTO_ocb128_init(OCB128_CONTEXT *ctx, void *keyenc, void *keydec, - block128_f encrypt, block128_f decrypt, - ocb128_f stream); -int CRYPTO_ocb128_copy_ctx(OCB128_CONTEXT *dest, OCB128_CONTEXT *src, - void *keyenc, void *keydec); -int CRYPTO_ocb128_setiv(OCB128_CONTEXT *ctx, const unsigned char *iv, - size_t len, size_t taglen); -int CRYPTO_ocb128_aad(OCB128_CONTEXT *ctx, const unsigned char *aad, - size_t len); -int CRYPTO_ocb128_encrypt(OCB128_CONTEXT *ctx, const unsigned char *in, - unsigned char *out, size_t len); -int CRYPTO_ocb128_decrypt(OCB128_CONTEXT *ctx, const unsigned char *in, - unsigned char *out, size_t len); -int CRYPTO_ocb128_finish(OCB128_CONTEXT *ctx, const unsigned char *tag, - size_t len); -int CRYPTO_ocb128_tag(OCB128_CONTEXT *ctx, unsigned char *tag, size_t len); -void CRYPTO_ocb128_cleanup(OCB128_CONTEXT *ctx); -# endif /* OPENSSL_NO_OCB */ - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/obj_mac.h b/submodules/MtProtoKit/openssl/openssl/obj_mac.h deleted file mode 100644 index 47dafe48d0..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/obj_mac.h +++ /dev/null @@ -1,5198 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by crypto/objects/objects.pl - * - * Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#define SN_undef "UNDEF" -#define LN_undef "undefined" -#define NID_undef 0 -#define OBJ_undef 0L - -#define SN_itu_t "ITU-T" -#define LN_itu_t "itu-t" -#define NID_itu_t 645 -#define OBJ_itu_t 0L - -#define NID_ccitt 404 -#define OBJ_ccitt OBJ_itu_t - -#define SN_iso "ISO" -#define LN_iso "iso" -#define NID_iso 181 -#define OBJ_iso 1L - -#define SN_joint_iso_itu_t "JOINT-ISO-ITU-T" -#define LN_joint_iso_itu_t "joint-iso-itu-t" -#define NID_joint_iso_itu_t 646 -#define OBJ_joint_iso_itu_t 2L - -#define NID_joint_iso_ccitt 393 -#define OBJ_joint_iso_ccitt OBJ_joint_iso_itu_t - -#define SN_member_body "member-body" -#define LN_member_body "ISO Member Body" -#define NID_member_body 182 -#define OBJ_member_body OBJ_iso,2L - -#define SN_identified_organization "identified-organization" -#define NID_identified_organization 676 -#define OBJ_identified_organization OBJ_iso,3L - -#define SN_hmac_md5 "HMAC-MD5" -#define LN_hmac_md5 "hmac-md5" -#define NID_hmac_md5 780 -#define OBJ_hmac_md5 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L - -#define SN_hmac_sha1 "HMAC-SHA1" -#define LN_hmac_sha1 "hmac-sha1" -#define NID_hmac_sha1 781 -#define OBJ_hmac_sha1 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L - -#define SN_x509ExtAdmission "x509ExtAdmission" -#define LN_x509ExtAdmission "Professional Information or basis for Admission" -#define NID_x509ExtAdmission 1093 -#define OBJ_x509ExtAdmission OBJ_identified_organization,36L,8L,3L,3L - -#define SN_certicom_arc "certicom-arc" -#define NID_certicom_arc 677 -#define OBJ_certicom_arc OBJ_identified_organization,132L - -#define SN_ieee "ieee" -#define NID_ieee 1170 -#define OBJ_ieee OBJ_identified_organization,111L - -#define SN_ieee_siswg "ieee-siswg" -#define LN_ieee_siswg "IEEE Security in Storage Working Group" -#define NID_ieee_siswg 1171 -#define OBJ_ieee_siswg OBJ_ieee,2L,1619L - -#define SN_international_organizations "international-organizations" -#define LN_international_organizations "International Organizations" -#define NID_international_organizations 647 -#define OBJ_international_organizations OBJ_joint_iso_itu_t,23L - -#define SN_wap "wap" -#define NID_wap 678 -#define OBJ_wap OBJ_international_organizations,43L - -#define SN_wap_wsg "wap-wsg" -#define NID_wap_wsg 679 -#define OBJ_wap_wsg OBJ_wap,1L - -#define SN_selected_attribute_types "selected-attribute-types" -#define LN_selected_attribute_types "Selected Attribute Types" -#define NID_selected_attribute_types 394 -#define OBJ_selected_attribute_types OBJ_joint_iso_itu_t,5L,1L,5L - -#define SN_clearance "clearance" -#define NID_clearance 395 -#define OBJ_clearance OBJ_selected_attribute_types,55L - -#define SN_ISO_US "ISO-US" -#define LN_ISO_US "ISO US Member Body" -#define NID_ISO_US 183 -#define OBJ_ISO_US OBJ_member_body,840L - -#define SN_X9_57 "X9-57" -#define LN_X9_57 "X9.57" -#define NID_X9_57 184 -#define OBJ_X9_57 OBJ_ISO_US,10040L - -#define SN_X9cm "X9cm" -#define LN_X9cm "X9.57 CM ?" -#define NID_X9cm 185 -#define OBJ_X9cm OBJ_X9_57,4L - -#define SN_ISO_CN "ISO-CN" -#define LN_ISO_CN "ISO CN Member Body" -#define NID_ISO_CN 1140 -#define OBJ_ISO_CN OBJ_member_body,156L - -#define SN_oscca "oscca" -#define NID_oscca 1141 -#define OBJ_oscca OBJ_ISO_CN,10197L - -#define SN_sm_scheme "sm-scheme" -#define NID_sm_scheme 1142 -#define OBJ_sm_scheme OBJ_oscca,1L - -#define SN_dsa "DSA" -#define LN_dsa "dsaEncryption" -#define NID_dsa 116 -#define OBJ_dsa OBJ_X9cm,1L - -#define SN_dsaWithSHA1 "DSA-SHA1" -#define LN_dsaWithSHA1 "dsaWithSHA1" -#define NID_dsaWithSHA1 113 -#define OBJ_dsaWithSHA1 OBJ_X9cm,3L - -#define SN_ansi_X9_62 "ansi-X9-62" -#define LN_ansi_X9_62 "ANSI X9.62" -#define NID_ansi_X9_62 405 -#define OBJ_ansi_X9_62 OBJ_ISO_US,10045L - -#define OBJ_X9_62_id_fieldType OBJ_ansi_X9_62,1L - -#define SN_X9_62_prime_field "prime-field" -#define NID_X9_62_prime_field 406 -#define OBJ_X9_62_prime_field OBJ_X9_62_id_fieldType,1L - -#define SN_X9_62_characteristic_two_field "characteristic-two-field" -#define NID_X9_62_characteristic_two_field 407 -#define OBJ_X9_62_characteristic_two_field OBJ_X9_62_id_fieldType,2L - -#define SN_X9_62_id_characteristic_two_basis "id-characteristic-two-basis" -#define NID_X9_62_id_characteristic_two_basis 680 -#define OBJ_X9_62_id_characteristic_two_basis OBJ_X9_62_characteristic_two_field,3L - -#define SN_X9_62_onBasis "onBasis" -#define NID_X9_62_onBasis 681 -#define OBJ_X9_62_onBasis OBJ_X9_62_id_characteristic_two_basis,1L - -#define SN_X9_62_tpBasis "tpBasis" -#define NID_X9_62_tpBasis 682 -#define OBJ_X9_62_tpBasis OBJ_X9_62_id_characteristic_two_basis,2L - -#define SN_X9_62_ppBasis "ppBasis" -#define NID_X9_62_ppBasis 683 -#define OBJ_X9_62_ppBasis OBJ_X9_62_id_characteristic_two_basis,3L - -#define OBJ_X9_62_id_publicKeyType OBJ_ansi_X9_62,2L - -#define SN_X9_62_id_ecPublicKey "id-ecPublicKey" -#define NID_X9_62_id_ecPublicKey 408 -#define OBJ_X9_62_id_ecPublicKey OBJ_X9_62_id_publicKeyType,1L - -#define OBJ_X9_62_ellipticCurve OBJ_ansi_X9_62,3L - -#define OBJ_X9_62_c_TwoCurve OBJ_X9_62_ellipticCurve,0L - -#define SN_X9_62_c2pnb163v1 "c2pnb163v1" -#define NID_X9_62_c2pnb163v1 684 -#define OBJ_X9_62_c2pnb163v1 OBJ_X9_62_c_TwoCurve,1L - -#define SN_X9_62_c2pnb163v2 "c2pnb163v2" -#define NID_X9_62_c2pnb163v2 685 -#define OBJ_X9_62_c2pnb163v2 OBJ_X9_62_c_TwoCurve,2L - -#define SN_X9_62_c2pnb163v3 "c2pnb163v3" -#define NID_X9_62_c2pnb163v3 686 -#define OBJ_X9_62_c2pnb163v3 OBJ_X9_62_c_TwoCurve,3L - -#define SN_X9_62_c2pnb176v1 "c2pnb176v1" -#define NID_X9_62_c2pnb176v1 687 -#define OBJ_X9_62_c2pnb176v1 OBJ_X9_62_c_TwoCurve,4L - -#define SN_X9_62_c2tnb191v1 "c2tnb191v1" -#define NID_X9_62_c2tnb191v1 688 -#define OBJ_X9_62_c2tnb191v1 OBJ_X9_62_c_TwoCurve,5L - -#define SN_X9_62_c2tnb191v2 "c2tnb191v2" -#define NID_X9_62_c2tnb191v2 689 -#define OBJ_X9_62_c2tnb191v2 OBJ_X9_62_c_TwoCurve,6L - -#define SN_X9_62_c2tnb191v3 "c2tnb191v3" -#define NID_X9_62_c2tnb191v3 690 -#define OBJ_X9_62_c2tnb191v3 OBJ_X9_62_c_TwoCurve,7L - -#define SN_X9_62_c2onb191v4 "c2onb191v4" -#define NID_X9_62_c2onb191v4 691 -#define OBJ_X9_62_c2onb191v4 OBJ_X9_62_c_TwoCurve,8L - -#define SN_X9_62_c2onb191v5 "c2onb191v5" -#define NID_X9_62_c2onb191v5 692 -#define OBJ_X9_62_c2onb191v5 OBJ_X9_62_c_TwoCurve,9L - -#define SN_X9_62_c2pnb208w1 "c2pnb208w1" -#define NID_X9_62_c2pnb208w1 693 -#define OBJ_X9_62_c2pnb208w1 OBJ_X9_62_c_TwoCurve,10L - -#define SN_X9_62_c2tnb239v1 "c2tnb239v1" -#define NID_X9_62_c2tnb239v1 694 -#define OBJ_X9_62_c2tnb239v1 OBJ_X9_62_c_TwoCurve,11L - -#define SN_X9_62_c2tnb239v2 "c2tnb239v2" -#define NID_X9_62_c2tnb239v2 695 -#define OBJ_X9_62_c2tnb239v2 OBJ_X9_62_c_TwoCurve,12L - -#define SN_X9_62_c2tnb239v3 "c2tnb239v3" -#define NID_X9_62_c2tnb239v3 696 -#define OBJ_X9_62_c2tnb239v3 OBJ_X9_62_c_TwoCurve,13L - -#define SN_X9_62_c2onb239v4 "c2onb239v4" -#define NID_X9_62_c2onb239v4 697 -#define OBJ_X9_62_c2onb239v4 OBJ_X9_62_c_TwoCurve,14L - -#define SN_X9_62_c2onb239v5 "c2onb239v5" -#define NID_X9_62_c2onb239v5 698 -#define OBJ_X9_62_c2onb239v5 OBJ_X9_62_c_TwoCurve,15L - -#define SN_X9_62_c2pnb272w1 "c2pnb272w1" -#define NID_X9_62_c2pnb272w1 699 -#define OBJ_X9_62_c2pnb272w1 OBJ_X9_62_c_TwoCurve,16L - -#define SN_X9_62_c2pnb304w1 "c2pnb304w1" -#define NID_X9_62_c2pnb304w1 700 -#define OBJ_X9_62_c2pnb304w1 OBJ_X9_62_c_TwoCurve,17L - -#define SN_X9_62_c2tnb359v1 "c2tnb359v1" -#define NID_X9_62_c2tnb359v1 701 -#define OBJ_X9_62_c2tnb359v1 OBJ_X9_62_c_TwoCurve,18L - -#define SN_X9_62_c2pnb368w1 "c2pnb368w1" -#define NID_X9_62_c2pnb368w1 702 -#define OBJ_X9_62_c2pnb368w1 OBJ_X9_62_c_TwoCurve,19L - -#define SN_X9_62_c2tnb431r1 "c2tnb431r1" -#define NID_X9_62_c2tnb431r1 703 -#define OBJ_X9_62_c2tnb431r1 OBJ_X9_62_c_TwoCurve,20L - -#define OBJ_X9_62_primeCurve OBJ_X9_62_ellipticCurve,1L - -#define SN_X9_62_prime192v1 "prime192v1" -#define NID_X9_62_prime192v1 409 -#define OBJ_X9_62_prime192v1 OBJ_X9_62_primeCurve,1L - -#define SN_X9_62_prime192v2 "prime192v2" -#define NID_X9_62_prime192v2 410 -#define OBJ_X9_62_prime192v2 OBJ_X9_62_primeCurve,2L - -#define SN_X9_62_prime192v3 "prime192v3" -#define NID_X9_62_prime192v3 411 -#define OBJ_X9_62_prime192v3 OBJ_X9_62_primeCurve,3L - -#define SN_X9_62_prime239v1 "prime239v1" -#define NID_X9_62_prime239v1 412 -#define OBJ_X9_62_prime239v1 OBJ_X9_62_primeCurve,4L - -#define SN_X9_62_prime239v2 "prime239v2" -#define NID_X9_62_prime239v2 413 -#define OBJ_X9_62_prime239v2 OBJ_X9_62_primeCurve,5L - -#define SN_X9_62_prime239v3 "prime239v3" -#define NID_X9_62_prime239v3 414 -#define OBJ_X9_62_prime239v3 OBJ_X9_62_primeCurve,6L - -#define SN_X9_62_prime256v1 "prime256v1" -#define NID_X9_62_prime256v1 415 -#define OBJ_X9_62_prime256v1 OBJ_X9_62_primeCurve,7L - -#define OBJ_X9_62_id_ecSigType OBJ_ansi_X9_62,4L - -#define SN_ecdsa_with_SHA1 "ecdsa-with-SHA1" -#define NID_ecdsa_with_SHA1 416 -#define OBJ_ecdsa_with_SHA1 OBJ_X9_62_id_ecSigType,1L - -#define SN_ecdsa_with_Recommended "ecdsa-with-Recommended" -#define NID_ecdsa_with_Recommended 791 -#define OBJ_ecdsa_with_Recommended OBJ_X9_62_id_ecSigType,2L - -#define SN_ecdsa_with_Specified "ecdsa-with-Specified" -#define NID_ecdsa_with_Specified 792 -#define OBJ_ecdsa_with_Specified OBJ_X9_62_id_ecSigType,3L - -#define SN_ecdsa_with_SHA224 "ecdsa-with-SHA224" -#define NID_ecdsa_with_SHA224 793 -#define OBJ_ecdsa_with_SHA224 OBJ_ecdsa_with_Specified,1L - -#define SN_ecdsa_with_SHA256 "ecdsa-with-SHA256" -#define NID_ecdsa_with_SHA256 794 -#define OBJ_ecdsa_with_SHA256 OBJ_ecdsa_with_Specified,2L - -#define SN_ecdsa_with_SHA384 "ecdsa-with-SHA384" -#define NID_ecdsa_with_SHA384 795 -#define OBJ_ecdsa_with_SHA384 OBJ_ecdsa_with_Specified,3L - -#define SN_ecdsa_with_SHA512 "ecdsa-with-SHA512" -#define NID_ecdsa_with_SHA512 796 -#define OBJ_ecdsa_with_SHA512 OBJ_ecdsa_with_Specified,4L - -#define OBJ_secg_ellipticCurve OBJ_certicom_arc,0L - -#define SN_secp112r1 "secp112r1" -#define NID_secp112r1 704 -#define OBJ_secp112r1 OBJ_secg_ellipticCurve,6L - -#define SN_secp112r2 "secp112r2" -#define NID_secp112r2 705 -#define OBJ_secp112r2 OBJ_secg_ellipticCurve,7L - -#define SN_secp128r1 "secp128r1" -#define NID_secp128r1 706 -#define OBJ_secp128r1 OBJ_secg_ellipticCurve,28L - -#define SN_secp128r2 "secp128r2" -#define NID_secp128r2 707 -#define OBJ_secp128r2 OBJ_secg_ellipticCurve,29L - -#define SN_secp160k1 "secp160k1" -#define NID_secp160k1 708 -#define OBJ_secp160k1 OBJ_secg_ellipticCurve,9L - -#define SN_secp160r1 "secp160r1" -#define NID_secp160r1 709 -#define OBJ_secp160r1 OBJ_secg_ellipticCurve,8L - -#define SN_secp160r2 "secp160r2" -#define NID_secp160r2 710 -#define OBJ_secp160r2 OBJ_secg_ellipticCurve,30L - -#define SN_secp192k1 "secp192k1" -#define NID_secp192k1 711 -#define OBJ_secp192k1 OBJ_secg_ellipticCurve,31L - -#define SN_secp224k1 "secp224k1" -#define NID_secp224k1 712 -#define OBJ_secp224k1 OBJ_secg_ellipticCurve,32L - -#define SN_secp224r1 "secp224r1" -#define NID_secp224r1 713 -#define OBJ_secp224r1 OBJ_secg_ellipticCurve,33L - -#define SN_secp256k1 "secp256k1" -#define NID_secp256k1 714 -#define OBJ_secp256k1 OBJ_secg_ellipticCurve,10L - -#define SN_secp384r1 "secp384r1" -#define NID_secp384r1 715 -#define OBJ_secp384r1 OBJ_secg_ellipticCurve,34L - -#define SN_secp521r1 "secp521r1" -#define NID_secp521r1 716 -#define OBJ_secp521r1 OBJ_secg_ellipticCurve,35L - -#define SN_sect113r1 "sect113r1" -#define NID_sect113r1 717 -#define OBJ_sect113r1 OBJ_secg_ellipticCurve,4L - -#define SN_sect113r2 "sect113r2" -#define NID_sect113r2 718 -#define OBJ_sect113r2 OBJ_secg_ellipticCurve,5L - -#define SN_sect131r1 "sect131r1" -#define NID_sect131r1 719 -#define OBJ_sect131r1 OBJ_secg_ellipticCurve,22L - -#define SN_sect131r2 "sect131r2" -#define NID_sect131r2 720 -#define OBJ_sect131r2 OBJ_secg_ellipticCurve,23L - -#define SN_sect163k1 "sect163k1" -#define NID_sect163k1 721 -#define OBJ_sect163k1 OBJ_secg_ellipticCurve,1L - -#define SN_sect163r1 "sect163r1" -#define NID_sect163r1 722 -#define OBJ_sect163r1 OBJ_secg_ellipticCurve,2L - -#define SN_sect163r2 "sect163r2" -#define NID_sect163r2 723 -#define OBJ_sect163r2 OBJ_secg_ellipticCurve,15L - -#define SN_sect193r1 "sect193r1" -#define NID_sect193r1 724 -#define OBJ_sect193r1 OBJ_secg_ellipticCurve,24L - -#define SN_sect193r2 "sect193r2" -#define NID_sect193r2 725 -#define OBJ_sect193r2 OBJ_secg_ellipticCurve,25L - -#define SN_sect233k1 "sect233k1" -#define NID_sect233k1 726 -#define OBJ_sect233k1 OBJ_secg_ellipticCurve,26L - -#define SN_sect233r1 "sect233r1" -#define NID_sect233r1 727 -#define OBJ_sect233r1 OBJ_secg_ellipticCurve,27L - -#define SN_sect239k1 "sect239k1" -#define NID_sect239k1 728 -#define OBJ_sect239k1 OBJ_secg_ellipticCurve,3L - -#define SN_sect283k1 "sect283k1" -#define NID_sect283k1 729 -#define OBJ_sect283k1 OBJ_secg_ellipticCurve,16L - -#define SN_sect283r1 "sect283r1" -#define NID_sect283r1 730 -#define OBJ_sect283r1 OBJ_secg_ellipticCurve,17L - -#define SN_sect409k1 "sect409k1" -#define NID_sect409k1 731 -#define OBJ_sect409k1 OBJ_secg_ellipticCurve,36L - -#define SN_sect409r1 "sect409r1" -#define NID_sect409r1 732 -#define OBJ_sect409r1 OBJ_secg_ellipticCurve,37L - -#define SN_sect571k1 "sect571k1" -#define NID_sect571k1 733 -#define OBJ_sect571k1 OBJ_secg_ellipticCurve,38L - -#define SN_sect571r1 "sect571r1" -#define NID_sect571r1 734 -#define OBJ_sect571r1 OBJ_secg_ellipticCurve,39L - -#define OBJ_wap_wsg_idm_ecid OBJ_wap_wsg,4L - -#define SN_wap_wsg_idm_ecid_wtls1 "wap-wsg-idm-ecid-wtls1" -#define NID_wap_wsg_idm_ecid_wtls1 735 -#define OBJ_wap_wsg_idm_ecid_wtls1 OBJ_wap_wsg_idm_ecid,1L - -#define SN_wap_wsg_idm_ecid_wtls3 "wap-wsg-idm-ecid-wtls3" -#define NID_wap_wsg_idm_ecid_wtls3 736 -#define OBJ_wap_wsg_idm_ecid_wtls3 OBJ_wap_wsg_idm_ecid,3L - -#define SN_wap_wsg_idm_ecid_wtls4 "wap-wsg-idm-ecid-wtls4" -#define NID_wap_wsg_idm_ecid_wtls4 737 -#define OBJ_wap_wsg_idm_ecid_wtls4 OBJ_wap_wsg_idm_ecid,4L - -#define SN_wap_wsg_idm_ecid_wtls5 "wap-wsg-idm-ecid-wtls5" -#define NID_wap_wsg_idm_ecid_wtls5 738 -#define OBJ_wap_wsg_idm_ecid_wtls5 OBJ_wap_wsg_idm_ecid,5L - -#define SN_wap_wsg_idm_ecid_wtls6 "wap-wsg-idm-ecid-wtls6" -#define NID_wap_wsg_idm_ecid_wtls6 739 -#define OBJ_wap_wsg_idm_ecid_wtls6 OBJ_wap_wsg_idm_ecid,6L - -#define SN_wap_wsg_idm_ecid_wtls7 "wap-wsg-idm-ecid-wtls7" -#define NID_wap_wsg_idm_ecid_wtls7 740 -#define OBJ_wap_wsg_idm_ecid_wtls7 OBJ_wap_wsg_idm_ecid,7L - -#define SN_wap_wsg_idm_ecid_wtls8 "wap-wsg-idm-ecid-wtls8" -#define NID_wap_wsg_idm_ecid_wtls8 741 -#define OBJ_wap_wsg_idm_ecid_wtls8 OBJ_wap_wsg_idm_ecid,8L - -#define SN_wap_wsg_idm_ecid_wtls9 "wap-wsg-idm-ecid-wtls9" -#define NID_wap_wsg_idm_ecid_wtls9 742 -#define OBJ_wap_wsg_idm_ecid_wtls9 OBJ_wap_wsg_idm_ecid,9L - -#define SN_wap_wsg_idm_ecid_wtls10 "wap-wsg-idm-ecid-wtls10" -#define NID_wap_wsg_idm_ecid_wtls10 743 -#define OBJ_wap_wsg_idm_ecid_wtls10 OBJ_wap_wsg_idm_ecid,10L - -#define SN_wap_wsg_idm_ecid_wtls11 "wap-wsg-idm-ecid-wtls11" -#define NID_wap_wsg_idm_ecid_wtls11 744 -#define OBJ_wap_wsg_idm_ecid_wtls11 OBJ_wap_wsg_idm_ecid,11L - -#define SN_wap_wsg_idm_ecid_wtls12 "wap-wsg-idm-ecid-wtls12" -#define NID_wap_wsg_idm_ecid_wtls12 745 -#define OBJ_wap_wsg_idm_ecid_wtls12 OBJ_wap_wsg_idm_ecid,12L - -#define SN_cast5_cbc "CAST5-CBC" -#define LN_cast5_cbc "cast5-cbc" -#define NID_cast5_cbc 108 -#define OBJ_cast5_cbc OBJ_ISO_US,113533L,7L,66L,10L - -#define SN_cast5_ecb "CAST5-ECB" -#define LN_cast5_ecb "cast5-ecb" -#define NID_cast5_ecb 109 - -#define SN_cast5_cfb64 "CAST5-CFB" -#define LN_cast5_cfb64 "cast5-cfb" -#define NID_cast5_cfb64 110 - -#define SN_cast5_ofb64 "CAST5-OFB" -#define LN_cast5_ofb64 "cast5-ofb" -#define NID_cast5_ofb64 111 - -#define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" -#define NID_pbeWithMD5AndCast5_CBC 112 -#define OBJ_pbeWithMD5AndCast5_CBC OBJ_ISO_US,113533L,7L,66L,12L - -#define SN_id_PasswordBasedMAC "id-PasswordBasedMAC" -#define LN_id_PasswordBasedMAC "password based MAC" -#define NID_id_PasswordBasedMAC 782 -#define OBJ_id_PasswordBasedMAC OBJ_ISO_US,113533L,7L,66L,13L - -#define SN_id_DHBasedMac "id-DHBasedMac" -#define LN_id_DHBasedMac "Diffie-Hellman based MAC" -#define NID_id_DHBasedMac 783 -#define OBJ_id_DHBasedMac OBJ_ISO_US,113533L,7L,66L,30L - -#define SN_rsadsi "rsadsi" -#define LN_rsadsi "RSA Data Security, Inc." -#define NID_rsadsi 1 -#define OBJ_rsadsi OBJ_ISO_US,113549L - -#define SN_pkcs "pkcs" -#define LN_pkcs "RSA Data Security, Inc. PKCS" -#define NID_pkcs 2 -#define OBJ_pkcs OBJ_rsadsi,1L - -#define SN_pkcs1 "pkcs1" -#define NID_pkcs1 186 -#define OBJ_pkcs1 OBJ_pkcs,1L - -#define LN_rsaEncryption "rsaEncryption" -#define NID_rsaEncryption 6 -#define OBJ_rsaEncryption OBJ_pkcs1,1L - -#define SN_md2WithRSAEncryption "RSA-MD2" -#define LN_md2WithRSAEncryption "md2WithRSAEncryption" -#define NID_md2WithRSAEncryption 7 -#define OBJ_md2WithRSAEncryption OBJ_pkcs1,2L - -#define SN_md4WithRSAEncryption "RSA-MD4" -#define LN_md4WithRSAEncryption "md4WithRSAEncryption" -#define NID_md4WithRSAEncryption 396 -#define OBJ_md4WithRSAEncryption OBJ_pkcs1,3L - -#define SN_md5WithRSAEncryption "RSA-MD5" -#define LN_md5WithRSAEncryption "md5WithRSAEncryption" -#define NID_md5WithRSAEncryption 8 -#define OBJ_md5WithRSAEncryption OBJ_pkcs1,4L - -#define SN_sha1WithRSAEncryption "RSA-SHA1" -#define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" -#define NID_sha1WithRSAEncryption 65 -#define OBJ_sha1WithRSAEncryption OBJ_pkcs1,5L - -#define SN_rsaesOaep "RSAES-OAEP" -#define LN_rsaesOaep "rsaesOaep" -#define NID_rsaesOaep 919 -#define OBJ_rsaesOaep OBJ_pkcs1,7L - -#define SN_mgf1 "MGF1" -#define LN_mgf1 "mgf1" -#define NID_mgf1 911 -#define OBJ_mgf1 OBJ_pkcs1,8L - -#define SN_pSpecified "PSPECIFIED" -#define LN_pSpecified "pSpecified" -#define NID_pSpecified 935 -#define OBJ_pSpecified OBJ_pkcs1,9L - -#define SN_rsassaPss "RSASSA-PSS" -#define LN_rsassaPss "rsassaPss" -#define NID_rsassaPss 912 -#define OBJ_rsassaPss OBJ_pkcs1,10L - -#define SN_sha256WithRSAEncryption "RSA-SHA256" -#define LN_sha256WithRSAEncryption "sha256WithRSAEncryption" -#define NID_sha256WithRSAEncryption 668 -#define OBJ_sha256WithRSAEncryption OBJ_pkcs1,11L - -#define SN_sha384WithRSAEncryption "RSA-SHA384" -#define LN_sha384WithRSAEncryption "sha384WithRSAEncryption" -#define NID_sha384WithRSAEncryption 669 -#define OBJ_sha384WithRSAEncryption OBJ_pkcs1,12L - -#define SN_sha512WithRSAEncryption "RSA-SHA512" -#define LN_sha512WithRSAEncryption "sha512WithRSAEncryption" -#define NID_sha512WithRSAEncryption 670 -#define OBJ_sha512WithRSAEncryption OBJ_pkcs1,13L - -#define SN_sha224WithRSAEncryption "RSA-SHA224" -#define LN_sha224WithRSAEncryption "sha224WithRSAEncryption" -#define NID_sha224WithRSAEncryption 671 -#define OBJ_sha224WithRSAEncryption OBJ_pkcs1,14L - -#define SN_sha512_224WithRSAEncryption "RSA-SHA512/224" -#define LN_sha512_224WithRSAEncryption "sha512-224WithRSAEncryption" -#define NID_sha512_224WithRSAEncryption 1145 -#define OBJ_sha512_224WithRSAEncryption OBJ_pkcs1,15L - -#define SN_sha512_256WithRSAEncryption "RSA-SHA512/256" -#define LN_sha512_256WithRSAEncryption "sha512-256WithRSAEncryption" -#define NID_sha512_256WithRSAEncryption 1146 -#define OBJ_sha512_256WithRSAEncryption OBJ_pkcs1,16L - -#define SN_pkcs3 "pkcs3" -#define NID_pkcs3 27 -#define OBJ_pkcs3 OBJ_pkcs,3L - -#define LN_dhKeyAgreement "dhKeyAgreement" -#define NID_dhKeyAgreement 28 -#define OBJ_dhKeyAgreement OBJ_pkcs3,1L - -#define SN_pkcs5 "pkcs5" -#define NID_pkcs5 187 -#define OBJ_pkcs5 OBJ_pkcs,5L - -#define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" -#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" -#define NID_pbeWithMD2AndDES_CBC 9 -#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs5,1L - -#define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" -#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" -#define NID_pbeWithMD5AndDES_CBC 10 -#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs5,3L - -#define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" -#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" -#define NID_pbeWithMD2AndRC2_CBC 168 -#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs5,4L - -#define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" -#define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" -#define NID_pbeWithMD5AndRC2_CBC 169 -#define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs5,6L - -#define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" -#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" -#define NID_pbeWithSHA1AndDES_CBC 170 -#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs5,10L - -#define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" -#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" -#define NID_pbeWithSHA1AndRC2_CBC 68 -#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs5,11L - -#define LN_id_pbkdf2 "PBKDF2" -#define NID_id_pbkdf2 69 -#define OBJ_id_pbkdf2 OBJ_pkcs5,12L - -#define LN_pbes2 "PBES2" -#define NID_pbes2 161 -#define OBJ_pbes2 OBJ_pkcs5,13L - -#define LN_pbmac1 "PBMAC1" -#define NID_pbmac1 162 -#define OBJ_pbmac1 OBJ_pkcs5,14L - -#define SN_pkcs7 "pkcs7" -#define NID_pkcs7 20 -#define OBJ_pkcs7 OBJ_pkcs,7L - -#define LN_pkcs7_data "pkcs7-data" -#define NID_pkcs7_data 21 -#define OBJ_pkcs7_data OBJ_pkcs7,1L - -#define LN_pkcs7_signed "pkcs7-signedData" -#define NID_pkcs7_signed 22 -#define OBJ_pkcs7_signed OBJ_pkcs7,2L - -#define LN_pkcs7_enveloped "pkcs7-envelopedData" -#define NID_pkcs7_enveloped 23 -#define OBJ_pkcs7_enveloped OBJ_pkcs7,3L - -#define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" -#define NID_pkcs7_signedAndEnveloped 24 -#define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L - -#define LN_pkcs7_digest "pkcs7-digestData" -#define NID_pkcs7_digest 25 -#define OBJ_pkcs7_digest OBJ_pkcs7,5L - -#define LN_pkcs7_encrypted "pkcs7-encryptedData" -#define NID_pkcs7_encrypted 26 -#define OBJ_pkcs7_encrypted OBJ_pkcs7,6L - -#define SN_pkcs9 "pkcs9" -#define NID_pkcs9 47 -#define OBJ_pkcs9 OBJ_pkcs,9L - -#define LN_pkcs9_emailAddress "emailAddress" -#define NID_pkcs9_emailAddress 48 -#define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L - -#define LN_pkcs9_unstructuredName "unstructuredName" -#define NID_pkcs9_unstructuredName 49 -#define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L - -#define LN_pkcs9_contentType "contentType" -#define NID_pkcs9_contentType 50 -#define OBJ_pkcs9_contentType OBJ_pkcs9,3L - -#define LN_pkcs9_messageDigest "messageDigest" -#define NID_pkcs9_messageDigest 51 -#define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L - -#define LN_pkcs9_signingTime "signingTime" -#define NID_pkcs9_signingTime 52 -#define OBJ_pkcs9_signingTime OBJ_pkcs9,5L - -#define LN_pkcs9_countersignature "countersignature" -#define NID_pkcs9_countersignature 53 -#define OBJ_pkcs9_countersignature OBJ_pkcs9,6L - -#define LN_pkcs9_challengePassword "challengePassword" -#define NID_pkcs9_challengePassword 54 -#define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L - -#define LN_pkcs9_unstructuredAddress "unstructuredAddress" -#define NID_pkcs9_unstructuredAddress 55 -#define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L - -#define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" -#define NID_pkcs9_extCertAttributes 56 -#define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L - -#define SN_ext_req "extReq" -#define LN_ext_req "Extension Request" -#define NID_ext_req 172 -#define OBJ_ext_req OBJ_pkcs9,14L - -#define SN_SMIMECapabilities "SMIME-CAPS" -#define LN_SMIMECapabilities "S/MIME Capabilities" -#define NID_SMIMECapabilities 167 -#define OBJ_SMIMECapabilities OBJ_pkcs9,15L - -#define SN_SMIME "SMIME" -#define LN_SMIME "S/MIME" -#define NID_SMIME 188 -#define OBJ_SMIME OBJ_pkcs9,16L - -#define SN_id_smime_mod "id-smime-mod" -#define NID_id_smime_mod 189 -#define OBJ_id_smime_mod OBJ_SMIME,0L - -#define SN_id_smime_ct "id-smime-ct" -#define NID_id_smime_ct 190 -#define OBJ_id_smime_ct OBJ_SMIME,1L - -#define SN_id_smime_aa "id-smime-aa" -#define NID_id_smime_aa 191 -#define OBJ_id_smime_aa OBJ_SMIME,2L - -#define SN_id_smime_alg "id-smime-alg" -#define NID_id_smime_alg 192 -#define OBJ_id_smime_alg OBJ_SMIME,3L - -#define SN_id_smime_cd "id-smime-cd" -#define NID_id_smime_cd 193 -#define OBJ_id_smime_cd OBJ_SMIME,4L - -#define SN_id_smime_spq "id-smime-spq" -#define NID_id_smime_spq 194 -#define OBJ_id_smime_spq OBJ_SMIME,5L - -#define SN_id_smime_cti "id-smime-cti" -#define NID_id_smime_cti 195 -#define OBJ_id_smime_cti OBJ_SMIME,6L - -#define SN_id_smime_mod_cms "id-smime-mod-cms" -#define NID_id_smime_mod_cms 196 -#define OBJ_id_smime_mod_cms OBJ_id_smime_mod,1L - -#define SN_id_smime_mod_ess "id-smime-mod-ess" -#define NID_id_smime_mod_ess 197 -#define OBJ_id_smime_mod_ess OBJ_id_smime_mod,2L - -#define SN_id_smime_mod_oid "id-smime-mod-oid" -#define NID_id_smime_mod_oid 198 -#define OBJ_id_smime_mod_oid OBJ_id_smime_mod,3L - -#define SN_id_smime_mod_msg_v3 "id-smime-mod-msg-v3" -#define NID_id_smime_mod_msg_v3 199 -#define OBJ_id_smime_mod_msg_v3 OBJ_id_smime_mod,4L - -#define SN_id_smime_mod_ets_eSignature_88 "id-smime-mod-ets-eSignature-88" -#define NID_id_smime_mod_ets_eSignature_88 200 -#define OBJ_id_smime_mod_ets_eSignature_88 OBJ_id_smime_mod,5L - -#define SN_id_smime_mod_ets_eSignature_97 "id-smime-mod-ets-eSignature-97" -#define NID_id_smime_mod_ets_eSignature_97 201 -#define OBJ_id_smime_mod_ets_eSignature_97 OBJ_id_smime_mod,6L - -#define SN_id_smime_mod_ets_eSigPolicy_88 "id-smime-mod-ets-eSigPolicy-88" -#define NID_id_smime_mod_ets_eSigPolicy_88 202 -#define OBJ_id_smime_mod_ets_eSigPolicy_88 OBJ_id_smime_mod,7L - -#define SN_id_smime_mod_ets_eSigPolicy_97 "id-smime-mod-ets-eSigPolicy-97" -#define NID_id_smime_mod_ets_eSigPolicy_97 203 -#define OBJ_id_smime_mod_ets_eSigPolicy_97 OBJ_id_smime_mod,8L - -#define SN_id_smime_ct_receipt "id-smime-ct-receipt" -#define NID_id_smime_ct_receipt 204 -#define OBJ_id_smime_ct_receipt OBJ_id_smime_ct,1L - -#define SN_id_smime_ct_authData "id-smime-ct-authData" -#define NID_id_smime_ct_authData 205 -#define OBJ_id_smime_ct_authData OBJ_id_smime_ct,2L - -#define SN_id_smime_ct_publishCert "id-smime-ct-publishCert" -#define NID_id_smime_ct_publishCert 206 -#define OBJ_id_smime_ct_publishCert OBJ_id_smime_ct,3L - -#define SN_id_smime_ct_TSTInfo "id-smime-ct-TSTInfo" -#define NID_id_smime_ct_TSTInfo 207 -#define OBJ_id_smime_ct_TSTInfo OBJ_id_smime_ct,4L - -#define SN_id_smime_ct_TDTInfo "id-smime-ct-TDTInfo" -#define NID_id_smime_ct_TDTInfo 208 -#define OBJ_id_smime_ct_TDTInfo OBJ_id_smime_ct,5L - -#define SN_id_smime_ct_contentInfo "id-smime-ct-contentInfo" -#define NID_id_smime_ct_contentInfo 209 -#define OBJ_id_smime_ct_contentInfo OBJ_id_smime_ct,6L - -#define SN_id_smime_ct_DVCSRequestData "id-smime-ct-DVCSRequestData" -#define NID_id_smime_ct_DVCSRequestData 210 -#define OBJ_id_smime_ct_DVCSRequestData OBJ_id_smime_ct,7L - -#define SN_id_smime_ct_DVCSResponseData "id-smime-ct-DVCSResponseData" -#define NID_id_smime_ct_DVCSResponseData 211 -#define OBJ_id_smime_ct_DVCSResponseData OBJ_id_smime_ct,8L - -#define SN_id_smime_ct_compressedData "id-smime-ct-compressedData" -#define NID_id_smime_ct_compressedData 786 -#define OBJ_id_smime_ct_compressedData OBJ_id_smime_ct,9L - -#define SN_id_smime_ct_contentCollection "id-smime-ct-contentCollection" -#define NID_id_smime_ct_contentCollection 1058 -#define OBJ_id_smime_ct_contentCollection OBJ_id_smime_ct,19L - -#define SN_id_smime_ct_authEnvelopedData "id-smime-ct-authEnvelopedData" -#define NID_id_smime_ct_authEnvelopedData 1059 -#define OBJ_id_smime_ct_authEnvelopedData OBJ_id_smime_ct,23L - -#define SN_id_ct_asciiTextWithCRLF "id-ct-asciiTextWithCRLF" -#define NID_id_ct_asciiTextWithCRLF 787 -#define OBJ_id_ct_asciiTextWithCRLF OBJ_id_smime_ct,27L - -#define SN_id_ct_xml "id-ct-xml" -#define NID_id_ct_xml 1060 -#define OBJ_id_ct_xml OBJ_id_smime_ct,28L - -#define SN_id_smime_aa_receiptRequest "id-smime-aa-receiptRequest" -#define NID_id_smime_aa_receiptRequest 212 -#define OBJ_id_smime_aa_receiptRequest OBJ_id_smime_aa,1L - -#define SN_id_smime_aa_securityLabel "id-smime-aa-securityLabel" -#define NID_id_smime_aa_securityLabel 213 -#define OBJ_id_smime_aa_securityLabel OBJ_id_smime_aa,2L - -#define SN_id_smime_aa_mlExpandHistory "id-smime-aa-mlExpandHistory" -#define NID_id_smime_aa_mlExpandHistory 214 -#define OBJ_id_smime_aa_mlExpandHistory OBJ_id_smime_aa,3L - -#define SN_id_smime_aa_contentHint "id-smime-aa-contentHint" -#define NID_id_smime_aa_contentHint 215 -#define OBJ_id_smime_aa_contentHint OBJ_id_smime_aa,4L - -#define SN_id_smime_aa_msgSigDigest "id-smime-aa-msgSigDigest" -#define NID_id_smime_aa_msgSigDigest 216 -#define OBJ_id_smime_aa_msgSigDigest OBJ_id_smime_aa,5L - -#define SN_id_smime_aa_encapContentType "id-smime-aa-encapContentType" -#define NID_id_smime_aa_encapContentType 217 -#define OBJ_id_smime_aa_encapContentType OBJ_id_smime_aa,6L - -#define SN_id_smime_aa_contentIdentifier "id-smime-aa-contentIdentifier" -#define NID_id_smime_aa_contentIdentifier 218 -#define OBJ_id_smime_aa_contentIdentifier OBJ_id_smime_aa,7L - -#define SN_id_smime_aa_macValue "id-smime-aa-macValue" -#define NID_id_smime_aa_macValue 219 -#define OBJ_id_smime_aa_macValue OBJ_id_smime_aa,8L - -#define SN_id_smime_aa_equivalentLabels "id-smime-aa-equivalentLabels" -#define NID_id_smime_aa_equivalentLabels 220 -#define OBJ_id_smime_aa_equivalentLabels OBJ_id_smime_aa,9L - -#define SN_id_smime_aa_contentReference "id-smime-aa-contentReference" -#define NID_id_smime_aa_contentReference 221 -#define OBJ_id_smime_aa_contentReference OBJ_id_smime_aa,10L - -#define SN_id_smime_aa_encrypKeyPref "id-smime-aa-encrypKeyPref" -#define NID_id_smime_aa_encrypKeyPref 222 -#define OBJ_id_smime_aa_encrypKeyPref OBJ_id_smime_aa,11L - -#define SN_id_smime_aa_signingCertificate "id-smime-aa-signingCertificate" -#define NID_id_smime_aa_signingCertificate 223 -#define OBJ_id_smime_aa_signingCertificate OBJ_id_smime_aa,12L - -#define SN_id_smime_aa_smimeEncryptCerts "id-smime-aa-smimeEncryptCerts" -#define NID_id_smime_aa_smimeEncryptCerts 224 -#define OBJ_id_smime_aa_smimeEncryptCerts OBJ_id_smime_aa,13L - -#define SN_id_smime_aa_timeStampToken "id-smime-aa-timeStampToken" -#define NID_id_smime_aa_timeStampToken 225 -#define OBJ_id_smime_aa_timeStampToken OBJ_id_smime_aa,14L - -#define SN_id_smime_aa_ets_sigPolicyId "id-smime-aa-ets-sigPolicyId" -#define NID_id_smime_aa_ets_sigPolicyId 226 -#define OBJ_id_smime_aa_ets_sigPolicyId OBJ_id_smime_aa,15L - -#define SN_id_smime_aa_ets_commitmentType "id-smime-aa-ets-commitmentType" -#define NID_id_smime_aa_ets_commitmentType 227 -#define OBJ_id_smime_aa_ets_commitmentType OBJ_id_smime_aa,16L - -#define SN_id_smime_aa_ets_signerLocation "id-smime-aa-ets-signerLocation" -#define NID_id_smime_aa_ets_signerLocation 228 -#define OBJ_id_smime_aa_ets_signerLocation OBJ_id_smime_aa,17L - -#define SN_id_smime_aa_ets_signerAttr "id-smime-aa-ets-signerAttr" -#define NID_id_smime_aa_ets_signerAttr 229 -#define OBJ_id_smime_aa_ets_signerAttr OBJ_id_smime_aa,18L - -#define SN_id_smime_aa_ets_otherSigCert "id-smime-aa-ets-otherSigCert" -#define NID_id_smime_aa_ets_otherSigCert 230 -#define OBJ_id_smime_aa_ets_otherSigCert OBJ_id_smime_aa,19L - -#define SN_id_smime_aa_ets_contentTimestamp "id-smime-aa-ets-contentTimestamp" -#define NID_id_smime_aa_ets_contentTimestamp 231 -#define OBJ_id_smime_aa_ets_contentTimestamp OBJ_id_smime_aa,20L - -#define SN_id_smime_aa_ets_CertificateRefs "id-smime-aa-ets-CertificateRefs" -#define NID_id_smime_aa_ets_CertificateRefs 232 -#define OBJ_id_smime_aa_ets_CertificateRefs OBJ_id_smime_aa,21L - -#define SN_id_smime_aa_ets_RevocationRefs "id-smime-aa-ets-RevocationRefs" -#define NID_id_smime_aa_ets_RevocationRefs 233 -#define OBJ_id_smime_aa_ets_RevocationRefs OBJ_id_smime_aa,22L - -#define SN_id_smime_aa_ets_certValues "id-smime-aa-ets-certValues" -#define NID_id_smime_aa_ets_certValues 234 -#define OBJ_id_smime_aa_ets_certValues OBJ_id_smime_aa,23L - -#define SN_id_smime_aa_ets_revocationValues "id-smime-aa-ets-revocationValues" -#define NID_id_smime_aa_ets_revocationValues 235 -#define OBJ_id_smime_aa_ets_revocationValues OBJ_id_smime_aa,24L - -#define SN_id_smime_aa_ets_escTimeStamp "id-smime-aa-ets-escTimeStamp" -#define NID_id_smime_aa_ets_escTimeStamp 236 -#define OBJ_id_smime_aa_ets_escTimeStamp OBJ_id_smime_aa,25L - -#define SN_id_smime_aa_ets_certCRLTimestamp "id-smime-aa-ets-certCRLTimestamp" -#define NID_id_smime_aa_ets_certCRLTimestamp 237 -#define OBJ_id_smime_aa_ets_certCRLTimestamp OBJ_id_smime_aa,26L - -#define SN_id_smime_aa_ets_archiveTimeStamp "id-smime-aa-ets-archiveTimeStamp" -#define NID_id_smime_aa_ets_archiveTimeStamp 238 -#define OBJ_id_smime_aa_ets_archiveTimeStamp OBJ_id_smime_aa,27L - -#define SN_id_smime_aa_signatureType "id-smime-aa-signatureType" -#define NID_id_smime_aa_signatureType 239 -#define OBJ_id_smime_aa_signatureType OBJ_id_smime_aa,28L - -#define SN_id_smime_aa_dvcs_dvc "id-smime-aa-dvcs-dvc" -#define NID_id_smime_aa_dvcs_dvc 240 -#define OBJ_id_smime_aa_dvcs_dvc OBJ_id_smime_aa,29L - -#define SN_id_smime_aa_signingCertificateV2 "id-smime-aa-signingCertificateV2" -#define NID_id_smime_aa_signingCertificateV2 1086 -#define OBJ_id_smime_aa_signingCertificateV2 OBJ_id_smime_aa,47L - -#define SN_id_smime_alg_ESDHwith3DES "id-smime-alg-ESDHwith3DES" -#define NID_id_smime_alg_ESDHwith3DES 241 -#define OBJ_id_smime_alg_ESDHwith3DES OBJ_id_smime_alg,1L - -#define SN_id_smime_alg_ESDHwithRC2 "id-smime-alg-ESDHwithRC2" -#define NID_id_smime_alg_ESDHwithRC2 242 -#define OBJ_id_smime_alg_ESDHwithRC2 OBJ_id_smime_alg,2L - -#define SN_id_smime_alg_3DESwrap "id-smime-alg-3DESwrap" -#define NID_id_smime_alg_3DESwrap 243 -#define OBJ_id_smime_alg_3DESwrap OBJ_id_smime_alg,3L - -#define SN_id_smime_alg_RC2wrap "id-smime-alg-RC2wrap" -#define NID_id_smime_alg_RC2wrap 244 -#define OBJ_id_smime_alg_RC2wrap OBJ_id_smime_alg,4L - -#define SN_id_smime_alg_ESDH "id-smime-alg-ESDH" -#define NID_id_smime_alg_ESDH 245 -#define OBJ_id_smime_alg_ESDH OBJ_id_smime_alg,5L - -#define SN_id_smime_alg_CMS3DESwrap "id-smime-alg-CMS3DESwrap" -#define NID_id_smime_alg_CMS3DESwrap 246 -#define OBJ_id_smime_alg_CMS3DESwrap OBJ_id_smime_alg,6L - -#define SN_id_smime_alg_CMSRC2wrap "id-smime-alg-CMSRC2wrap" -#define NID_id_smime_alg_CMSRC2wrap 247 -#define OBJ_id_smime_alg_CMSRC2wrap OBJ_id_smime_alg,7L - -#define SN_id_alg_PWRI_KEK "id-alg-PWRI-KEK" -#define NID_id_alg_PWRI_KEK 893 -#define OBJ_id_alg_PWRI_KEK OBJ_id_smime_alg,9L - -#define SN_id_smime_cd_ldap "id-smime-cd-ldap" -#define NID_id_smime_cd_ldap 248 -#define OBJ_id_smime_cd_ldap OBJ_id_smime_cd,1L - -#define SN_id_smime_spq_ets_sqt_uri "id-smime-spq-ets-sqt-uri" -#define NID_id_smime_spq_ets_sqt_uri 249 -#define OBJ_id_smime_spq_ets_sqt_uri OBJ_id_smime_spq,1L - -#define SN_id_smime_spq_ets_sqt_unotice "id-smime-spq-ets-sqt-unotice" -#define NID_id_smime_spq_ets_sqt_unotice 250 -#define OBJ_id_smime_spq_ets_sqt_unotice OBJ_id_smime_spq,2L - -#define SN_id_smime_cti_ets_proofOfOrigin "id-smime-cti-ets-proofOfOrigin" -#define NID_id_smime_cti_ets_proofOfOrigin 251 -#define OBJ_id_smime_cti_ets_proofOfOrigin OBJ_id_smime_cti,1L - -#define SN_id_smime_cti_ets_proofOfReceipt "id-smime-cti-ets-proofOfReceipt" -#define NID_id_smime_cti_ets_proofOfReceipt 252 -#define OBJ_id_smime_cti_ets_proofOfReceipt OBJ_id_smime_cti,2L - -#define SN_id_smime_cti_ets_proofOfDelivery "id-smime-cti-ets-proofOfDelivery" -#define NID_id_smime_cti_ets_proofOfDelivery 253 -#define OBJ_id_smime_cti_ets_proofOfDelivery OBJ_id_smime_cti,3L - -#define SN_id_smime_cti_ets_proofOfSender "id-smime-cti-ets-proofOfSender" -#define NID_id_smime_cti_ets_proofOfSender 254 -#define OBJ_id_smime_cti_ets_proofOfSender OBJ_id_smime_cti,4L - -#define SN_id_smime_cti_ets_proofOfApproval "id-smime-cti-ets-proofOfApproval" -#define NID_id_smime_cti_ets_proofOfApproval 255 -#define OBJ_id_smime_cti_ets_proofOfApproval OBJ_id_smime_cti,5L - -#define SN_id_smime_cti_ets_proofOfCreation "id-smime-cti-ets-proofOfCreation" -#define NID_id_smime_cti_ets_proofOfCreation 256 -#define OBJ_id_smime_cti_ets_proofOfCreation OBJ_id_smime_cti,6L - -#define LN_friendlyName "friendlyName" -#define NID_friendlyName 156 -#define OBJ_friendlyName OBJ_pkcs9,20L - -#define LN_localKeyID "localKeyID" -#define NID_localKeyID 157 -#define OBJ_localKeyID OBJ_pkcs9,21L - -#define SN_ms_csp_name "CSPName" -#define LN_ms_csp_name "Microsoft CSP Name" -#define NID_ms_csp_name 417 -#define OBJ_ms_csp_name 1L,3L,6L,1L,4L,1L,311L,17L,1L - -#define SN_LocalKeySet "LocalKeySet" -#define LN_LocalKeySet "Microsoft Local Key set" -#define NID_LocalKeySet 856 -#define OBJ_LocalKeySet 1L,3L,6L,1L,4L,1L,311L,17L,2L - -#define OBJ_certTypes OBJ_pkcs9,22L - -#define LN_x509Certificate "x509Certificate" -#define NID_x509Certificate 158 -#define OBJ_x509Certificate OBJ_certTypes,1L - -#define LN_sdsiCertificate "sdsiCertificate" -#define NID_sdsiCertificate 159 -#define OBJ_sdsiCertificate OBJ_certTypes,2L - -#define OBJ_crlTypes OBJ_pkcs9,23L - -#define LN_x509Crl "x509Crl" -#define NID_x509Crl 160 -#define OBJ_x509Crl OBJ_crlTypes,1L - -#define OBJ_pkcs12 OBJ_pkcs,12L - -#define OBJ_pkcs12_pbeids OBJ_pkcs12,1L - -#define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" -#define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" -#define NID_pbe_WithSHA1And128BitRC4 144 -#define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids,1L - -#define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" -#define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" -#define NID_pbe_WithSHA1And40BitRC4 145 -#define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids,2L - -#define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" -#define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" -#define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 -#define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids,3L - -#define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" -#define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" -#define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 -#define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids,4L - -#define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" -#define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" -#define NID_pbe_WithSHA1And128BitRC2_CBC 148 -#define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids,5L - -#define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" -#define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" -#define NID_pbe_WithSHA1And40BitRC2_CBC 149 -#define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids,6L - -#define OBJ_pkcs12_Version1 OBJ_pkcs12,10L - -#define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1,1L - -#define LN_keyBag "keyBag" -#define NID_keyBag 150 -#define OBJ_keyBag OBJ_pkcs12_BagIds,1L - -#define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" -#define NID_pkcs8ShroudedKeyBag 151 -#define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds,2L - -#define LN_certBag "certBag" -#define NID_certBag 152 -#define OBJ_certBag OBJ_pkcs12_BagIds,3L - -#define LN_crlBag "crlBag" -#define NID_crlBag 153 -#define OBJ_crlBag OBJ_pkcs12_BagIds,4L - -#define LN_secretBag "secretBag" -#define NID_secretBag 154 -#define OBJ_secretBag OBJ_pkcs12_BagIds,5L - -#define LN_safeContentsBag "safeContentsBag" -#define NID_safeContentsBag 155 -#define OBJ_safeContentsBag OBJ_pkcs12_BagIds,6L - -#define SN_md2 "MD2" -#define LN_md2 "md2" -#define NID_md2 3 -#define OBJ_md2 OBJ_rsadsi,2L,2L - -#define SN_md4 "MD4" -#define LN_md4 "md4" -#define NID_md4 257 -#define OBJ_md4 OBJ_rsadsi,2L,4L - -#define SN_md5 "MD5" -#define LN_md5 "md5" -#define NID_md5 4 -#define OBJ_md5 OBJ_rsadsi,2L,5L - -#define SN_md5_sha1 "MD5-SHA1" -#define LN_md5_sha1 "md5-sha1" -#define NID_md5_sha1 114 - -#define LN_hmacWithMD5 "hmacWithMD5" -#define NID_hmacWithMD5 797 -#define OBJ_hmacWithMD5 OBJ_rsadsi,2L,6L - -#define LN_hmacWithSHA1 "hmacWithSHA1" -#define NID_hmacWithSHA1 163 -#define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L - -#define SN_sm2 "SM2" -#define LN_sm2 "sm2" -#define NID_sm2 1172 -#define OBJ_sm2 OBJ_sm_scheme,301L - -#define SN_sm3 "SM3" -#define LN_sm3 "sm3" -#define NID_sm3 1143 -#define OBJ_sm3 OBJ_sm_scheme,401L - -#define SN_sm3WithRSAEncryption "RSA-SM3" -#define LN_sm3WithRSAEncryption "sm3WithRSAEncryption" -#define NID_sm3WithRSAEncryption 1144 -#define OBJ_sm3WithRSAEncryption OBJ_sm_scheme,504L - -#define LN_hmacWithSHA224 "hmacWithSHA224" -#define NID_hmacWithSHA224 798 -#define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L - -#define LN_hmacWithSHA256 "hmacWithSHA256" -#define NID_hmacWithSHA256 799 -#define OBJ_hmacWithSHA256 OBJ_rsadsi,2L,9L - -#define LN_hmacWithSHA384 "hmacWithSHA384" -#define NID_hmacWithSHA384 800 -#define OBJ_hmacWithSHA384 OBJ_rsadsi,2L,10L - -#define LN_hmacWithSHA512 "hmacWithSHA512" -#define NID_hmacWithSHA512 801 -#define OBJ_hmacWithSHA512 OBJ_rsadsi,2L,11L - -#define LN_hmacWithSHA512_224 "hmacWithSHA512-224" -#define NID_hmacWithSHA512_224 1193 -#define OBJ_hmacWithSHA512_224 OBJ_rsadsi,2L,12L - -#define LN_hmacWithSHA512_256 "hmacWithSHA512-256" -#define NID_hmacWithSHA512_256 1194 -#define OBJ_hmacWithSHA512_256 OBJ_rsadsi,2L,13L - -#define SN_rc2_cbc "RC2-CBC" -#define LN_rc2_cbc "rc2-cbc" -#define NID_rc2_cbc 37 -#define OBJ_rc2_cbc OBJ_rsadsi,3L,2L - -#define SN_rc2_ecb "RC2-ECB" -#define LN_rc2_ecb "rc2-ecb" -#define NID_rc2_ecb 38 - -#define SN_rc2_cfb64 "RC2-CFB" -#define LN_rc2_cfb64 "rc2-cfb" -#define NID_rc2_cfb64 39 - -#define SN_rc2_ofb64 "RC2-OFB" -#define LN_rc2_ofb64 "rc2-ofb" -#define NID_rc2_ofb64 40 - -#define SN_rc2_40_cbc "RC2-40-CBC" -#define LN_rc2_40_cbc "rc2-40-cbc" -#define NID_rc2_40_cbc 98 - -#define SN_rc2_64_cbc "RC2-64-CBC" -#define LN_rc2_64_cbc "rc2-64-cbc" -#define NID_rc2_64_cbc 166 - -#define SN_rc4 "RC4" -#define LN_rc4 "rc4" -#define NID_rc4 5 -#define OBJ_rc4 OBJ_rsadsi,3L,4L - -#define SN_rc4_40 "RC4-40" -#define LN_rc4_40 "rc4-40" -#define NID_rc4_40 97 - -#define SN_des_ede3_cbc "DES-EDE3-CBC" -#define LN_des_ede3_cbc "des-ede3-cbc" -#define NID_des_ede3_cbc 44 -#define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L - -#define SN_rc5_cbc "RC5-CBC" -#define LN_rc5_cbc "rc5-cbc" -#define NID_rc5_cbc 120 -#define OBJ_rc5_cbc OBJ_rsadsi,3L,8L - -#define SN_rc5_ecb "RC5-ECB" -#define LN_rc5_ecb "rc5-ecb" -#define NID_rc5_ecb 121 - -#define SN_rc5_cfb64 "RC5-CFB" -#define LN_rc5_cfb64 "rc5-cfb" -#define NID_rc5_cfb64 122 - -#define SN_rc5_ofb64 "RC5-OFB" -#define LN_rc5_ofb64 "rc5-ofb" -#define NID_rc5_ofb64 123 - -#define SN_ms_ext_req "msExtReq" -#define LN_ms_ext_req "Microsoft Extension Request" -#define NID_ms_ext_req 171 -#define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L - -#define SN_ms_code_ind "msCodeInd" -#define LN_ms_code_ind "Microsoft Individual Code Signing" -#define NID_ms_code_ind 134 -#define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L - -#define SN_ms_code_com "msCodeCom" -#define LN_ms_code_com "Microsoft Commercial Code Signing" -#define NID_ms_code_com 135 -#define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L - -#define SN_ms_ctl_sign "msCTLSign" -#define LN_ms_ctl_sign "Microsoft Trust List Signing" -#define NID_ms_ctl_sign 136 -#define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L - -#define SN_ms_sgc "msSGC" -#define LN_ms_sgc "Microsoft Server Gated Crypto" -#define NID_ms_sgc 137 -#define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L - -#define SN_ms_efs "msEFS" -#define LN_ms_efs "Microsoft Encrypted File System" -#define NID_ms_efs 138 -#define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L - -#define SN_ms_smartcard_login "msSmartcardLogin" -#define LN_ms_smartcard_login "Microsoft Smartcardlogin" -#define NID_ms_smartcard_login 648 -#define OBJ_ms_smartcard_login 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L - -#define SN_ms_upn "msUPN" -#define LN_ms_upn "Microsoft Universal Principal Name" -#define NID_ms_upn 649 -#define OBJ_ms_upn 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L - -#define SN_idea_cbc "IDEA-CBC" -#define LN_idea_cbc "idea-cbc" -#define NID_idea_cbc 34 -#define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L - -#define SN_idea_ecb "IDEA-ECB" -#define LN_idea_ecb "idea-ecb" -#define NID_idea_ecb 36 - -#define SN_idea_cfb64 "IDEA-CFB" -#define LN_idea_cfb64 "idea-cfb" -#define NID_idea_cfb64 35 - -#define SN_idea_ofb64 "IDEA-OFB" -#define LN_idea_ofb64 "idea-ofb" -#define NID_idea_ofb64 46 - -#define SN_bf_cbc "BF-CBC" -#define LN_bf_cbc "bf-cbc" -#define NID_bf_cbc 91 -#define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L - -#define SN_bf_ecb "BF-ECB" -#define LN_bf_ecb "bf-ecb" -#define NID_bf_ecb 92 - -#define SN_bf_cfb64 "BF-CFB" -#define LN_bf_cfb64 "bf-cfb" -#define NID_bf_cfb64 93 - -#define SN_bf_ofb64 "BF-OFB" -#define LN_bf_ofb64 "bf-ofb" -#define NID_bf_ofb64 94 - -#define SN_id_pkix "PKIX" -#define NID_id_pkix 127 -#define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L - -#define SN_id_pkix_mod "id-pkix-mod" -#define NID_id_pkix_mod 258 -#define OBJ_id_pkix_mod OBJ_id_pkix,0L - -#define SN_id_pe "id-pe" -#define NID_id_pe 175 -#define OBJ_id_pe OBJ_id_pkix,1L - -#define SN_id_qt "id-qt" -#define NID_id_qt 259 -#define OBJ_id_qt OBJ_id_pkix,2L - -#define SN_id_kp "id-kp" -#define NID_id_kp 128 -#define OBJ_id_kp OBJ_id_pkix,3L - -#define SN_id_it "id-it" -#define NID_id_it 260 -#define OBJ_id_it OBJ_id_pkix,4L - -#define SN_id_pkip "id-pkip" -#define NID_id_pkip 261 -#define OBJ_id_pkip OBJ_id_pkix,5L - -#define SN_id_alg "id-alg" -#define NID_id_alg 262 -#define OBJ_id_alg OBJ_id_pkix,6L - -#define SN_id_cmc "id-cmc" -#define NID_id_cmc 263 -#define OBJ_id_cmc OBJ_id_pkix,7L - -#define SN_id_on "id-on" -#define NID_id_on 264 -#define OBJ_id_on OBJ_id_pkix,8L - -#define SN_id_pda "id-pda" -#define NID_id_pda 265 -#define OBJ_id_pda OBJ_id_pkix,9L - -#define SN_id_aca "id-aca" -#define NID_id_aca 266 -#define OBJ_id_aca OBJ_id_pkix,10L - -#define SN_id_qcs "id-qcs" -#define NID_id_qcs 267 -#define OBJ_id_qcs OBJ_id_pkix,11L - -#define SN_id_cct "id-cct" -#define NID_id_cct 268 -#define OBJ_id_cct OBJ_id_pkix,12L - -#define SN_id_ppl "id-ppl" -#define NID_id_ppl 662 -#define OBJ_id_ppl OBJ_id_pkix,21L - -#define SN_id_ad "id-ad" -#define NID_id_ad 176 -#define OBJ_id_ad OBJ_id_pkix,48L - -#define SN_id_pkix1_explicit_88 "id-pkix1-explicit-88" -#define NID_id_pkix1_explicit_88 269 -#define OBJ_id_pkix1_explicit_88 OBJ_id_pkix_mod,1L - -#define SN_id_pkix1_implicit_88 "id-pkix1-implicit-88" -#define NID_id_pkix1_implicit_88 270 -#define OBJ_id_pkix1_implicit_88 OBJ_id_pkix_mod,2L - -#define SN_id_pkix1_explicit_93 "id-pkix1-explicit-93" -#define NID_id_pkix1_explicit_93 271 -#define OBJ_id_pkix1_explicit_93 OBJ_id_pkix_mod,3L - -#define SN_id_pkix1_implicit_93 "id-pkix1-implicit-93" -#define NID_id_pkix1_implicit_93 272 -#define OBJ_id_pkix1_implicit_93 OBJ_id_pkix_mod,4L - -#define SN_id_mod_crmf "id-mod-crmf" -#define NID_id_mod_crmf 273 -#define OBJ_id_mod_crmf OBJ_id_pkix_mod,5L - -#define SN_id_mod_cmc "id-mod-cmc" -#define NID_id_mod_cmc 274 -#define OBJ_id_mod_cmc OBJ_id_pkix_mod,6L - -#define SN_id_mod_kea_profile_88 "id-mod-kea-profile-88" -#define NID_id_mod_kea_profile_88 275 -#define OBJ_id_mod_kea_profile_88 OBJ_id_pkix_mod,7L - -#define SN_id_mod_kea_profile_93 "id-mod-kea-profile-93" -#define NID_id_mod_kea_profile_93 276 -#define OBJ_id_mod_kea_profile_93 OBJ_id_pkix_mod,8L - -#define SN_id_mod_cmp "id-mod-cmp" -#define NID_id_mod_cmp 277 -#define OBJ_id_mod_cmp OBJ_id_pkix_mod,9L - -#define SN_id_mod_qualified_cert_88 "id-mod-qualified-cert-88" -#define NID_id_mod_qualified_cert_88 278 -#define OBJ_id_mod_qualified_cert_88 OBJ_id_pkix_mod,10L - -#define SN_id_mod_qualified_cert_93 "id-mod-qualified-cert-93" -#define NID_id_mod_qualified_cert_93 279 -#define OBJ_id_mod_qualified_cert_93 OBJ_id_pkix_mod,11L - -#define SN_id_mod_attribute_cert "id-mod-attribute-cert" -#define NID_id_mod_attribute_cert 280 -#define OBJ_id_mod_attribute_cert OBJ_id_pkix_mod,12L - -#define SN_id_mod_timestamp_protocol "id-mod-timestamp-protocol" -#define NID_id_mod_timestamp_protocol 281 -#define OBJ_id_mod_timestamp_protocol OBJ_id_pkix_mod,13L - -#define SN_id_mod_ocsp "id-mod-ocsp" -#define NID_id_mod_ocsp 282 -#define OBJ_id_mod_ocsp OBJ_id_pkix_mod,14L - -#define SN_id_mod_dvcs "id-mod-dvcs" -#define NID_id_mod_dvcs 283 -#define OBJ_id_mod_dvcs OBJ_id_pkix_mod,15L - -#define SN_id_mod_cmp2000 "id-mod-cmp2000" -#define NID_id_mod_cmp2000 284 -#define OBJ_id_mod_cmp2000 OBJ_id_pkix_mod,16L - -#define SN_info_access "authorityInfoAccess" -#define LN_info_access "Authority Information Access" -#define NID_info_access 177 -#define OBJ_info_access OBJ_id_pe,1L - -#define SN_biometricInfo "biometricInfo" -#define LN_biometricInfo "Biometric Info" -#define NID_biometricInfo 285 -#define OBJ_biometricInfo OBJ_id_pe,2L - -#define SN_qcStatements "qcStatements" -#define NID_qcStatements 286 -#define OBJ_qcStatements OBJ_id_pe,3L - -#define SN_ac_auditEntity "ac-auditEntity" -#define NID_ac_auditEntity 287 -#define OBJ_ac_auditEntity OBJ_id_pe,4L - -#define SN_ac_targeting "ac-targeting" -#define NID_ac_targeting 288 -#define OBJ_ac_targeting OBJ_id_pe,5L - -#define SN_aaControls "aaControls" -#define NID_aaControls 289 -#define OBJ_aaControls OBJ_id_pe,6L - -#define SN_sbgp_ipAddrBlock "sbgp-ipAddrBlock" -#define NID_sbgp_ipAddrBlock 290 -#define OBJ_sbgp_ipAddrBlock OBJ_id_pe,7L - -#define SN_sbgp_autonomousSysNum "sbgp-autonomousSysNum" -#define NID_sbgp_autonomousSysNum 291 -#define OBJ_sbgp_autonomousSysNum OBJ_id_pe,8L - -#define SN_sbgp_routerIdentifier "sbgp-routerIdentifier" -#define NID_sbgp_routerIdentifier 292 -#define OBJ_sbgp_routerIdentifier OBJ_id_pe,9L - -#define SN_ac_proxying "ac-proxying" -#define NID_ac_proxying 397 -#define OBJ_ac_proxying OBJ_id_pe,10L - -#define SN_sinfo_access "subjectInfoAccess" -#define LN_sinfo_access "Subject Information Access" -#define NID_sinfo_access 398 -#define OBJ_sinfo_access OBJ_id_pe,11L - -#define SN_proxyCertInfo "proxyCertInfo" -#define LN_proxyCertInfo "Proxy Certificate Information" -#define NID_proxyCertInfo 663 -#define OBJ_proxyCertInfo OBJ_id_pe,14L - -#define SN_tlsfeature "tlsfeature" -#define LN_tlsfeature "TLS Feature" -#define NID_tlsfeature 1020 -#define OBJ_tlsfeature OBJ_id_pe,24L - -#define SN_id_qt_cps "id-qt-cps" -#define LN_id_qt_cps "Policy Qualifier CPS" -#define NID_id_qt_cps 164 -#define OBJ_id_qt_cps OBJ_id_qt,1L - -#define SN_id_qt_unotice "id-qt-unotice" -#define LN_id_qt_unotice "Policy Qualifier User Notice" -#define NID_id_qt_unotice 165 -#define OBJ_id_qt_unotice OBJ_id_qt,2L - -#define SN_textNotice "textNotice" -#define NID_textNotice 293 -#define OBJ_textNotice OBJ_id_qt,3L - -#define SN_server_auth "serverAuth" -#define LN_server_auth "TLS Web Server Authentication" -#define NID_server_auth 129 -#define OBJ_server_auth OBJ_id_kp,1L - -#define SN_client_auth "clientAuth" -#define LN_client_auth "TLS Web Client Authentication" -#define NID_client_auth 130 -#define OBJ_client_auth OBJ_id_kp,2L - -#define SN_code_sign "codeSigning" -#define LN_code_sign "Code Signing" -#define NID_code_sign 131 -#define OBJ_code_sign OBJ_id_kp,3L - -#define SN_email_protect "emailProtection" -#define LN_email_protect "E-mail Protection" -#define NID_email_protect 132 -#define OBJ_email_protect OBJ_id_kp,4L - -#define SN_ipsecEndSystem "ipsecEndSystem" -#define LN_ipsecEndSystem "IPSec End System" -#define NID_ipsecEndSystem 294 -#define OBJ_ipsecEndSystem OBJ_id_kp,5L - -#define SN_ipsecTunnel "ipsecTunnel" -#define LN_ipsecTunnel "IPSec Tunnel" -#define NID_ipsecTunnel 295 -#define OBJ_ipsecTunnel OBJ_id_kp,6L - -#define SN_ipsecUser "ipsecUser" -#define LN_ipsecUser "IPSec User" -#define NID_ipsecUser 296 -#define OBJ_ipsecUser OBJ_id_kp,7L - -#define SN_time_stamp "timeStamping" -#define LN_time_stamp "Time Stamping" -#define NID_time_stamp 133 -#define OBJ_time_stamp OBJ_id_kp,8L - -#define SN_OCSP_sign "OCSPSigning" -#define LN_OCSP_sign "OCSP Signing" -#define NID_OCSP_sign 180 -#define OBJ_OCSP_sign OBJ_id_kp,9L - -#define SN_dvcs "DVCS" -#define LN_dvcs "dvcs" -#define NID_dvcs 297 -#define OBJ_dvcs OBJ_id_kp,10L - -#define SN_ipsec_IKE "ipsecIKE" -#define LN_ipsec_IKE "ipsec Internet Key Exchange" -#define NID_ipsec_IKE 1022 -#define OBJ_ipsec_IKE OBJ_id_kp,17L - -#define SN_capwapAC "capwapAC" -#define LN_capwapAC "Ctrl/provision WAP Access" -#define NID_capwapAC 1023 -#define OBJ_capwapAC OBJ_id_kp,18L - -#define SN_capwapWTP "capwapWTP" -#define LN_capwapWTP "Ctrl/Provision WAP Termination" -#define NID_capwapWTP 1024 -#define OBJ_capwapWTP OBJ_id_kp,19L - -#define SN_sshClient "secureShellClient" -#define LN_sshClient "SSH Client" -#define NID_sshClient 1025 -#define OBJ_sshClient OBJ_id_kp,21L - -#define SN_sshServer "secureShellServer" -#define LN_sshServer "SSH Server" -#define NID_sshServer 1026 -#define OBJ_sshServer OBJ_id_kp,22L - -#define SN_sendRouter "sendRouter" -#define LN_sendRouter "Send Router" -#define NID_sendRouter 1027 -#define OBJ_sendRouter OBJ_id_kp,23L - -#define SN_sendProxiedRouter "sendProxiedRouter" -#define LN_sendProxiedRouter "Send Proxied Router" -#define NID_sendProxiedRouter 1028 -#define OBJ_sendProxiedRouter OBJ_id_kp,24L - -#define SN_sendOwner "sendOwner" -#define LN_sendOwner "Send Owner" -#define NID_sendOwner 1029 -#define OBJ_sendOwner OBJ_id_kp,25L - -#define SN_sendProxiedOwner "sendProxiedOwner" -#define LN_sendProxiedOwner "Send Proxied Owner" -#define NID_sendProxiedOwner 1030 -#define OBJ_sendProxiedOwner OBJ_id_kp,26L - -#define SN_cmcCA "cmcCA" -#define LN_cmcCA "CMC Certificate Authority" -#define NID_cmcCA 1131 -#define OBJ_cmcCA OBJ_id_kp,27L - -#define SN_cmcRA "cmcRA" -#define LN_cmcRA "CMC Registration Authority" -#define NID_cmcRA 1132 -#define OBJ_cmcRA OBJ_id_kp,28L - -#define SN_id_it_caProtEncCert "id-it-caProtEncCert" -#define NID_id_it_caProtEncCert 298 -#define OBJ_id_it_caProtEncCert OBJ_id_it,1L - -#define SN_id_it_signKeyPairTypes "id-it-signKeyPairTypes" -#define NID_id_it_signKeyPairTypes 299 -#define OBJ_id_it_signKeyPairTypes OBJ_id_it,2L - -#define SN_id_it_encKeyPairTypes "id-it-encKeyPairTypes" -#define NID_id_it_encKeyPairTypes 300 -#define OBJ_id_it_encKeyPairTypes OBJ_id_it,3L - -#define SN_id_it_preferredSymmAlg "id-it-preferredSymmAlg" -#define NID_id_it_preferredSymmAlg 301 -#define OBJ_id_it_preferredSymmAlg OBJ_id_it,4L - -#define SN_id_it_caKeyUpdateInfo "id-it-caKeyUpdateInfo" -#define NID_id_it_caKeyUpdateInfo 302 -#define OBJ_id_it_caKeyUpdateInfo OBJ_id_it,5L - -#define SN_id_it_currentCRL "id-it-currentCRL" -#define NID_id_it_currentCRL 303 -#define OBJ_id_it_currentCRL OBJ_id_it,6L - -#define SN_id_it_unsupportedOIDs "id-it-unsupportedOIDs" -#define NID_id_it_unsupportedOIDs 304 -#define OBJ_id_it_unsupportedOIDs OBJ_id_it,7L - -#define SN_id_it_subscriptionRequest "id-it-subscriptionRequest" -#define NID_id_it_subscriptionRequest 305 -#define OBJ_id_it_subscriptionRequest OBJ_id_it,8L - -#define SN_id_it_subscriptionResponse "id-it-subscriptionResponse" -#define NID_id_it_subscriptionResponse 306 -#define OBJ_id_it_subscriptionResponse OBJ_id_it,9L - -#define SN_id_it_keyPairParamReq "id-it-keyPairParamReq" -#define NID_id_it_keyPairParamReq 307 -#define OBJ_id_it_keyPairParamReq OBJ_id_it,10L - -#define SN_id_it_keyPairParamRep "id-it-keyPairParamRep" -#define NID_id_it_keyPairParamRep 308 -#define OBJ_id_it_keyPairParamRep OBJ_id_it,11L - -#define SN_id_it_revPassphrase "id-it-revPassphrase" -#define NID_id_it_revPassphrase 309 -#define OBJ_id_it_revPassphrase OBJ_id_it,12L - -#define SN_id_it_implicitConfirm "id-it-implicitConfirm" -#define NID_id_it_implicitConfirm 310 -#define OBJ_id_it_implicitConfirm OBJ_id_it,13L - -#define SN_id_it_confirmWaitTime "id-it-confirmWaitTime" -#define NID_id_it_confirmWaitTime 311 -#define OBJ_id_it_confirmWaitTime OBJ_id_it,14L - -#define SN_id_it_origPKIMessage "id-it-origPKIMessage" -#define NID_id_it_origPKIMessage 312 -#define OBJ_id_it_origPKIMessage OBJ_id_it,15L - -#define SN_id_it_suppLangTags "id-it-suppLangTags" -#define NID_id_it_suppLangTags 784 -#define OBJ_id_it_suppLangTags OBJ_id_it,16L - -#define SN_id_regCtrl "id-regCtrl" -#define NID_id_regCtrl 313 -#define OBJ_id_regCtrl OBJ_id_pkip,1L - -#define SN_id_regInfo "id-regInfo" -#define NID_id_regInfo 314 -#define OBJ_id_regInfo OBJ_id_pkip,2L - -#define SN_id_regCtrl_regToken "id-regCtrl-regToken" -#define NID_id_regCtrl_regToken 315 -#define OBJ_id_regCtrl_regToken OBJ_id_regCtrl,1L - -#define SN_id_regCtrl_authenticator "id-regCtrl-authenticator" -#define NID_id_regCtrl_authenticator 316 -#define OBJ_id_regCtrl_authenticator OBJ_id_regCtrl,2L - -#define SN_id_regCtrl_pkiPublicationInfo "id-regCtrl-pkiPublicationInfo" -#define NID_id_regCtrl_pkiPublicationInfo 317 -#define OBJ_id_regCtrl_pkiPublicationInfo OBJ_id_regCtrl,3L - -#define SN_id_regCtrl_pkiArchiveOptions "id-regCtrl-pkiArchiveOptions" -#define NID_id_regCtrl_pkiArchiveOptions 318 -#define OBJ_id_regCtrl_pkiArchiveOptions OBJ_id_regCtrl,4L - -#define SN_id_regCtrl_oldCertID "id-regCtrl-oldCertID" -#define NID_id_regCtrl_oldCertID 319 -#define OBJ_id_regCtrl_oldCertID OBJ_id_regCtrl,5L - -#define SN_id_regCtrl_protocolEncrKey "id-regCtrl-protocolEncrKey" -#define NID_id_regCtrl_protocolEncrKey 320 -#define OBJ_id_regCtrl_protocolEncrKey OBJ_id_regCtrl,6L - -#define SN_id_regInfo_utf8Pairs "id-regInfo-utf8Pairs" -#define NID_id_regInfo_utf8Pairs 321 -#define OBJ_id_regInfo_utf8Pairs OBJ_id_regInfo,1L - -#define SN_id_regInfo_certReq "id-regInfo-certReq" -#define NID_id_regInfo_certReq 322 -#define OBJ_id_regInfo_certReq OBJ_id_regInfo,2L - -#define SN_id_alg_des40 "id-alg-des40" -#define NID_id_alg_des40 323 -#define OBJ_id_alg_des40 OBJ_id_alg,1L - -#define SN_id_alg_noSignature "id-alg-noSignature" -#define NID_id_alg_noSignature 324 -#define OBJ_id_alg_noSignature OBJ_id_alg,2L - -#define SN_id_alg_dh_sig_hmac_sha1 "id-alg-dh-sig-hmac-sha1" -#define NID_id_alg_dh_sig_hmac_sha1 325 -#define OBJ_id_alg_dh_sig_hmac_sha1 OBJ_id_alg,3L - -#define SN_id_alg_dh_pop "id-alg-dh-pop" -#define NID_id_alg_dh_pop 326 -#define OBJ_id_alg_dh_pop OBJ_id_alg,4L - -#define SN_id_cmc_statusInfo "id-cmc-statusInfo" -#define NID_id_cmc_statusInfo 327 -#define OBJ_id_cmc_statusInfo OBJ_id_cmc,1L - -#define SN_id_cmc_identification "id-cmc-identification" -#define NID_id_cmc_identification 328 -#define OBJ_id_cmc_identification OBJ_id_cmc,2L - -#define SN_id_cmc_identityProof "id-cmc-identityProof" -#define NID_id_cmc_identityProof 329 -#define OBJ_id_cmc_identityProof OBJ_id_cmc,3L - -#define SN_id_cmc_dataReturn "id-cmc-dataReturn" -#define NID_id_cmc_dataReturn 330 -#define OBJ_id_cmc_dataReturn OBJ_id_cmc,4L - -#define SN_id_cmc_transactionId "id-cmc-transactionId" -#define NID_id_cmc_transactionId 331 -#define OBJ_id_cmc_transactionId OBJ_id_cmc,5L - -#define SN_id_cmc_senderNonce "id-cmc-senderNonce" -#define NID_id_cmc_senderNonce 332 -#define OBJ_id_cmc_senderNonce OBJ_id_cmc,6L - -#define SN_id_cmc_recipientNonce "id-cmc-recipientNonce" -#define NID_id_cmc_recipientNonce 333 -#define OBJ_id_cmc_recipientNonce OBJ_id_cmc,7L - -#define SN_id_cmc_addExtensions "id-cmc-addExtensions" -#define NID_id_cmc_addExtensions 334 -#define OBJ_id_cmc_addExtensions OBJ_id_cmc,8L - -#define SN_id_cmc_encryptedPOP "id-cmc-encryptedPOP" -#define NID_id_cmc_encryptedPOP 335 -#define OBJ_id_cmc_encryptedPOP OBJ_id_cmc,9L - -#define SN_id_cmc_decryptedPOP "id-cmc-decryptedPOP" -#define NID_id_cmc_decryptedPOP 336 -#define OBJ_id_cmc_decryptedPOP OBJ_id_cmc,10L - -#define SN_id_cmc_lraPOPWitness "id-cmc-lraPOPWitness" -#define NID_id_cmc_lraPOPWitness 337 -#define OBJ_id_cmc_lraPOPWitness OBJ_id_cmc,11L - -#define SN_id_cmc_getCert "id-cmc-getCert" -#define NID_id_cmc_getCert 338 -#define OBJ_id_cmc_getCert OBJ_id_cmc,15L - -#define SN_id_cmc_getCRL "id-cmc-getCRL" -#define NID_id_cmc_getCRL 339 -#define OBJ_id_cmc_getCRL OBJ_id_cmc,16L - -#define SN_id_cmc_revokeRequest "id-cmc-revokeRequest" -#define NID_id_cmc_revokeRequest 340 -#define OBJ_id_cmc_revokeRequest OBJ_id_cmc,17L - -#define SN_id_cmc_regInfo "id-cmc-regInfo" -#define NID_id_cmc_regInfo 341 -#define OBJ_id_cmc_regInfo OBJ_id_cmc,18L - -#define SN_id_cmc_responseInfo "id-cmc-responseInfo" -#define NID_id_cmc_responseInfo 342 -#define OBJ_id_cmc_responseInfo OBJ_id_cmc,19L - -#define SN_id_cmc_queryPending "id-cmc-queryPending" -#define NID_id_cmc_queryPending 343 -#define OBJ_id_cmc_queryPending OBJ_id_cmc,21L - -#define SN_id_cmc_popLinkRandom "id-cmc-popLinkRandom" -#define NID_id_cmc_popLinkRandom 344 -#define OBJ_id_cmc_popLinkRandom OBJ_id_cmc,22L - -#define SN_id_cmc_popLinkWitness "id-cmc-popLinkWitness" -#define NID_id_cmc_popLinkWitness 345 -#define OBJ_id_cmc_popLinkWitness OBJ_id_cmc,23L - -#define SN_id_cmc_confirmCertAcceptance "id-cmc-confirmCertAcceptance" -#define NID_id_cmc_confirmCertAcceptance 346 -#define OBJ_id_cmc_confirmCertAcceptance OBJ_id_cmc,24L - -#define SN_id_on_personalData "id-on-personalData" -#define NID_id_on_personalData 347 -#define OBJ_id_on_personalData OBJ_id_on,1L - -#define SN_id_on_permanentIdentifier "id-on-permanentIdentifier" -#define LN_id_on_permanentIdentifier "Permanent Identifier" -#define NID_id_on_permanentIdentifier 858 -#define OBJ_id_on_permanentIdentifier OBJ_id_on,3L - -#define SN_id_pda_dateOfBirth "id-pda-dateOfBirth" -#define NID_id_pda_dateOfBirth 348 -#define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L - -#define SN_id_pda_placeOfBirth "id-pda-placeOfBirth" -#define NID_id_pda_placeOfBirth 349 -#define OBJ_id_pda_placeOfBirth OBJ_id_pda,2L - -#define SN_id_pda_gender "id-pda-gender" -#define NID_id_pda_gender 351 -#define OBJ_id_pda_gender OBJ_id_pda,3L - -#define SN_id_pda_countryOfCitizenship "id-pda-countryOfCitizenship" -#define NID_id_pda_countryOfCitizenship 352 -#define OBJ_id_pda_countryOfCitizenship OBJ_id_pda,4L - -#define SN_id_pda_countryOfResidence "id-pda-countryOfResidence" -#define NID_id_pda_countryOfResidence 353 -#define OBJ_id_pda_countryOfResidence OBJ_id_pda,5L - -#define SN_id_aca_authenticationInfo "id-aca-authenticationInfo" -#define NID_id_aca_authenticationInfo 354 -#define OBJ_id_aca_authenticationInfo OBJ_id_aca,1L - -#define SN_id_aca_accessIdentity "id-aca-accessIdentity" -#define NID_id_aca_accessIdentity 355 -#define OBJ_id_aca_accessIdentity OBJ_id_aca,2L - -#define SN_id_aca_chargingIdentity "id-aca-chargingIdentity" -#define NID_id_aca_chargingIdentity 356 -#define OBJ_id_aca_chargingIdentity OBJ_id_aca,3L - -#define SN_id_aca_group "id-aca-group" -#define NID_id_aca_group 357 -#define OBJ_id_aca_group OBJ_id_aca,4L - -#define SN_id_aca_role "id-aca-role" -#define NID_id_aca_role 358 -#define OBJ_id_aca_role OBJ_id_aca,5L - -#define SN_id_aca_encAttrs "id-aca-encAttrs" -#define NID_id_aca_encAttrs 399 -#define OBJ_id_aca_encAttrs OBJ_id_aca,6L - -#define SN_id_qcs_pkixQCSyntax_v1 "id-qcs-pkixQCSyntax-v1" -#define NID_id_qcs_pkixQCSyntax_v1 359 -#define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L - -#define SN_id_cct_crs "id-cct-crs" -#define NID_id_cct_crs 360 -#define OBJ_id_cct_crs OBJ_id_cct,1L - -#define SN_id_cct_PKIData "id-cct-PKIData" -#define NID_id_cct_PKIData 361 -#define OBJ_id_cct_PKIData OBJ_id_cct,2L - -#define SN_id_cct_PKIResponse "id-cct-PKIResponse" -#define NID_id_cct_PKIResponse 362 -#define OBJ_id_cct_PKIResponse OBJ_id_cct,3L - -#define SN_id_ppl_anyLanguage "id-ppl-anyLanguage" -#define LN_id_ppl_anyLanguage "Any language" -#define NID_id_ppl_anyLanguage 664 -#define OBJ_id_ppl_anyLanguage OBJ_id_ppl,0L - -#define SN_id_ppl_inheritAll "id-ppl-inheritAll" -#define LN_id_ppl_inheritAll "Inherit all" -#define NID_id_ppl_inheritAll 665 -#define OBJ_id_ppl_inheritAll OBJ_id_ppl,1L - -#define SN_Independent "id-ppl-independent" -#define LN_Independent "Independent" -#define NID_Independent 667 -#define OBJ_Independent OBJ_id_ppl,2L - -#define SN_ad_OCSP "OCSP" -#define LN_ad_OCSP "OCSP" -#define NID_ad_OCSP 178 -#define OBJ_ad_OCSP OBJ_id_ad,1L - -#define SN_ad_ca_issuers "caIssuers" -#define LN_ad_ca_issuers "CA Issuers" -#define NID_ad_ca_issuers 179 -#define OBJ_ad_ca_issuers OBJ_id_ad,2L - -#define SN_ad_timeStamping "ad_timestamping" -#define LN_ad_timeStamping "AD Time Stamping" -#define NID_ad_timeStamping 363 -#define OBJ_ad_timeStamping OBJ_id_ad,3L - -#define SN_ad_dvcs "AD_DVCS" -#define LN_ad_dvcs "ad dvcs" -#define NID_ad_dvcs 364 -#define OBJ_ad_dvcs OBJ_id_ad,4L - -#define SN_caRepository "caRepository" -#define LN_caRepository "CA Repository" -#define NID_caRepository 785 -#define OBJ_caRepository OBJ_id_ad,5L - -#define OBJ_id_pkix_OCSP OBJ_ad_OCSP - -#define SN_id_pkix_OCSP_basic "basicOCSPResponse" -#define LN_id_pkix_OCSP_basic "Basic OCSP Response" -#define NID_id_pkix_OCSP_basic 365 -#define OBJ_id_pkix_OCSP_basic OBJ_id_pkix_OCSP,1L - -#define SN_id_pkix_OCSP_Nonce "Nonce" -#define LN_id_pkix_OCSP_Nonce "OCSP Nonce" -#define NID_id_pkix_OCSP_Nonce 366 -#define OBJ_id_pkix_OCSP_Nonce OBJ_id_pkix_OCSP,2L - -#define SN_id_pkix_OCSP_CrlID "CrlID" -#define LN_id_pkix_OCSP_CrlID "OCSP CRL ID" -#define NID_id_pkix_OCSP_CrlID 367 -#define OBJ_id_pkix_OCSP_CrlID OBJ_id_pkix_OCSP,3L - -#define SN_id_pkix_OCSP_acceptableResponses "acceptableResponses" -#define LN_id_pkix_OCSP_acceptableResponses "Acceptable OCSP Responses" -#define NID_id_pkix_OCSP_acceptableResponses 368 -#define OBJ_id_pkix_OCSP_acceptableResponses OBJ_id_pkix_OCSP,4L - -#define SN_id_pkix_OCSP_noCheck "noCheck" -#define LN_id_pkix_OCSP_noCheck "OCSP No Check" -#define NID_id_pkix_OCSP_noCheck 369 -#define OBJ_id_pkix_OCSP_noCheck OBJ_id_pkix_OCSP,5L - -#define SN_id_pkix_OCSP_archiveCutoff "archiveCutoff" -#define LN_id_pkix_OCSP_archiveCutoff "OCSP Archive Cutoff" -#define NID_id_pkix_OCSP_archiveCutoff 370 -#define OBJ_id_pkix_OCSP_archiveCutoff OBJ_id_pkix_OCSP,6L - -#define SN_id_pkix_OCSP_serviceLocator "serviceLocator" -#define LN_id_pkix_OCSP_serviceLocator "OCSP Service Locator" -#define NID_id_pkix_OCSP_serviceLocator 371 -#define OBJ_id_pkix_OCSP_serviceLocator OBJ_id_pkix_OCSP,7L - -#define SN_id_pkix_OCSP_extendedStatus "extendedStatus" -#define LN_id_pkix_OCSP_extendedStatus "Extended OCSP Status" -#define NID_id_pkix_OCSP_extendedStatus 372 -#define OBJ_id_pkix_OCSP_extendedStatus OBJ_id_pkix_OCSP,8L - -#define SN_id_pkix_OCSP_valid "valid" -#define NID_id_pkix_OCSP_valid 373 -#define OBJ_id_pkix_OCSP_valid OBJ_id_pkix_OCSP,9L - -#define SN_id_pkix_OCSP_path "path" -#define NID_id_pkix_OCSP_path 374 -#define OBJ_id_pkix_OCSP_path OBJ_id_pkix_OCSP,10L - -#define SN_id_pkix_OCSP_trustRoot "trustRoot" -#define LN_id_pkix_OCSP_trustRoot "Trust Root" -#define NID_id_pkix_OCSP_trustRoot 375 -#define OBJ_id_pkix_OCSP_trustRoot OBJ_id_pkix_OCSP,11L - -#define SN_algorithm "algorithm" -#define LN_algorithm "algorithm" -#define NID_algorithm 376 -#define OBJ_algorithm 1L,3L,14L,3L,2L - -#define SN_md5WithRSA "RSA-NP-MD5" -#define LN_md5WithRSA "md5WithRSA" -#define NID_md5WithRSA 104 -#define OBJ_md5WithRSA OBJ_algorithm,3L - -#define SN_des_ecb "DES-ECB" -#define LN_des_ecb "des-ecb" -#define NID_des_ecb 29 -#define OBJ_des_ecb OBJ_algorithm,6L - -#define SN_des_cbc "DES-CBC" -#define LN_des_cbc "des-cbc" -#define NID_des_cbc 31 -#define OBJ_des_cbc OBJ_algorithm,7L - -#define SN_des_ofb64 "DES-OFB" -#define LN_des_ofb64 "des-ofb" -#define NID_des_ofb64 45 -#define OBJ_des_ofb64 OBJ_algorithm,8L - -#define SN_des_cfb64 "DES-CFB" -#define LN_des_cfb64 "des-cfb" -#define NID_des_cfb64 30 -#define OBJ_des_cfb64 OBJ_algorithm,9L - -#define SN_rsaSignature "rsaSignature" -#define NID_rsaSignature 377 -#define OBJ_rsaSignature OBJ_algorithm,11L - -#define SN_dsa_2 "DSA-old" -#define LN_dsa_2 "dsaEncryption-old" -#define NID_dsa_2 67 -#define OBJ_dsa_2 OBJ_algorithm,12L - -#define SN_dsaWithSHA "DSA-SHA" -#define LN_dsaWithSHA "dsaWithSHA" -#define NID_dsaWithSHA 66 -#define OBJ_dsaWithSHA OBJ_algorithm,13L - -#define SN_shaWithRSAEncryption "RSA-SHA" -#define LN_shaWithRSAEncryption "shaWithRSAEncryption" -#define NID_shaWithRSAEncryption 42 -#define OBJ_shaWithRSAEncryption OBJ_algorithm,15L - -#define SN_des_ede_ecb "DES-EDE" -#define LN_des_ede_ecb "des-ede" -#define NID_des_ede_ecb 32 -#define OBJ_des_ede_ecb OBJ_algorithm,17L - -#define SN_des_ede3_ecb "DES-EDE3" -#define LN_des_ede3_ecb "des-ede3" -#define NID_des_ede3_ecb 33 - -#define SN_des_ede_cbc "DES-EDE-CBC" -#define LN_des_ede_cbc "des-ede-cbc" -#define NID_des_ede_cbc 43 - -#define SN_des_ede_cfb64 "DES-EDE-CFB" -#define LN_des_ede_cfb64 "des-ede-cfb" -#define NID_des_ede_cfb64 60 - -#define SN_des_ede3_cfb64 "DES-EDE3-CFB" -#define LN_des_ede3_cfb64 "des-ede3-cfb" -#define NID_des_ede3_cfb64 61 - -#define SN_des_ede_ofb64 "DES-EDE-OFB" -#define LN_des_ede_ofb64 "des-ede-ofb" -#define NID_des_ede_ofb64 62 - -#define SN_des_ede3_ofb64 "DES-EDE3-OFB" -#define LN_des_ede3_ofb64 "des-ede3-ofb" -#define NID_des_ede3_ofb64 63 - -#define SN_desx_cbc "DESX-CBC" -#define LN_desx_cbc "desx-cbc" -#define NID_desx_cbc 80 - -#define SN_sha "SHA" -#define LN_sha "sha" -#define NID_sha 41 -#define OBJ_sha OBJ_algorithm,18L - -#define SN_sha1 "SHA1" -#define LN_sha1 "sha1" -#define NID_sha1 64 -#define OBJ_sha1 OBJ_algorithm,26L - -#define SN_dsaWithSHA1_2 "DSA-SHA1-old" -#define LN_dsaWithSHA1_2 "dsaWithSHA1-old" -#define NID_dsaWithSHA1_2 70 -#define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L - -#define SN_sha1WithRSA "RSA-SHA1-2" -#define LN_sha1WithRSA "sha1WithRSA" -#define NID_sha1WithRSA 115 -#define OBJ_sha1WithRSA OBJ_algorithm,29L - -#define SN_ripemd160 "RIPEMD160" -#define LN_ripemd160 "ripemd160" -#define NID_ripemd160 117 -#define OBJ_ripemd160 1L,3L,36L,3L,2L,1L - -#define SN_ripemd160WithRSA "RSA-RIPEMD160" -#define LN_ripemd160WithRSA "ripemd160WithRSA" -#define NID_ripemd160WithRSA 119 -#define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L - -#define SN_blake2b512 "BLAKE2b512" -#define LN_blake2b512 "blake2b512" -#define NID_blake2b512 1056 -#define OBJ_blake2b512 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L,16L - -#define SN_blake2s256 "BLAKE2s256" -#define LN_blake2s256 "blake2s256" -#define NID_blake2s256 1057 -#define OBJ_blake2s256 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L,8L - -#define SN_sxnet "SXNetID" -#define LN_sxnet "Strong Extranet ID" -#define NID_sxnet 143 -#define OBJ_sxnet 1L,3L,101L,1L,4L,1L - -#define SN_X500 "X500" -#define LN_X500 "directory services (X.500)" -#define NID_X500 11 -#define OBJ_X500 2L,5L - -#define SN_X509 "X509" -#define NID_X509 12 -#define OBJ_X509 OBJ_X500,4L - -#define SN_commonName "CN" -#define LN_commonName "commonName" -#define NID_commonName 13 -#define OBJ_commonName OBJ_X509,3L - -#define SN_surname "SN" -#define LN_surname "surname" -#define NID_surname 100 -#define OBJ_surname OBJ_X509,4L - -#define LN_serialNumber "serialNumber" -#define NID_serialNumber 105 -#define OBJ_serialNumber OBJ_X509,5L - -#define SN_countryName "C" -#define LN_countryName "countryName" -#define NID_countryName 14 -#define OBJ_countryName OBJ_X509,6L - -#define SN_localityName "L" -#define LN_localityName "localityName" -#define NID_localityName 15 -#define OBJ_localityName OBJ_X509,7L - -#define SN_stateOrProvinceName "ST" -#define LN_stateOrProvinceName "stateOrProvinceName" -#define NID_stateOrProvinceName 16 -#define OBJ_stateOrProvinceName OBJ_X509,8L - -#define SN_streetAddress "street" -#define LN_streetAddress "streetAddress" -#define NID_streetAddress 660 -#define OBJ_streetAddress OBJ_X509,9L - -#define SN_organizationName "O" -#define LN_organizationName "organizationName" -#define NID_organizationName 17 -#define OBJ_organizationName OBJ_X509,10L - -#define SN_organizationalUnitName "OU" -#define LN_organizationalUnitName "organizationalUnitName" -#define NID_organizationalUnitName 18 -#define OBJ_organizationalUnitName OBJ_X509,11L - -#define SN_title "title" -#define LN_title "title" -#define NID_title 106 -#define OBJ_title OBJ_X509,12L - -#define LN_description "description" -#define NID_description 107 -#define OBJ_description OBJ_X509,13L - -#define LN_searchGuide "searchGuide" -#define NID_searchGuide 859 -#define OBJ_searchGuide OBJ_X509,14L - -#define LN_businessCategory "businessCategory" -#define NID_businessCategory 860 -#define OBJ_businessCategory OBJ_X509,15L - -#define LN_postalAddress "postalAddress" -#define NID_postalAddress 861 -#define OBJ_postalAddress OBJ_X509,16L - -#define LN_postalCode "postalCode" -#define NID_postalCode 661 -#define OBJ_postalCode OBJ_X509,17L - -#define LN_postOfficeBox "postOfficeBox" -#define NID_postOfficeBox 862 -#define OBJ_postOfficeBox OBJ_X509,18L - -#define LN_physicalDeliveryOfficeName "physicalDeliveryOfficeName" -#define NID_physicalDeliveryOfficeName 863 -#define OBJ_physicalDeliveryOfficeName OBJ_X509,19L - -#define LN_telephoneNumber "telephoneNumber" -#define NID_telephoneNumber 864 -#define OBJ_telephoneNumber OBJ_X509,20L - -#define LN_telexNumber "telexNumber" -#define NID_telexNumber 865 -#define OBJ_telexNumber OBJ_X509,21L - -#define LN_teletexTerminalIdentifier "teletexTerminalIdentifier" -#define NID_teletexTerminalIdentifier 866 -#define OBJ_teletexTerminalIdentifier OBJ_X509,22L - -#define LN_facsimileTelephoneNumber "facsimileTelephoneNumber" -#define NID_facsimileTelephoneNumber 867 -#define OBJ_facsimileTelephoneNumber OBJ_X509,23L - -#define LN_x121Address "x121Address" -#define NID_x121Address 868 -#define OBJ_x121Address OBJ_X509,24L - -#define LN_internationaliSDNNumber "internationaliSDNNumber" -#define NID_internationaliSDNNumber 869 -#define OBJ_internationaliSDNNumber OBJ_X509,25L - -#define LN_registeredAddress "registeredAddress" -#define NID_registeredAddress 870 -#define OBJ_registeredAddress OBJ_X509,26L - -#define LN_destinationIndicator "destinationIndicator" -#define NID_destinationIndicator 871 -#define OBJ_destinationIndicator OBJ_X509,27L - -#define LN_preferredDeliveryMethod "preferredDeliveryMethod" -#define NID_preferredDeliveryMethod 872 -#define OBJ_preferredDeliveryMethod OBJ_X509,28L - -#define LN_presentationAddress "presentationAddress" -#define NID_presentationAddress 873 -#define OBJ_presentationAddress OBJ_X509,29L - -#define LN_supportedApplicationContext "supportedApplicationContext" -#define NID_supportedApplicationContext 874 -#define OBJ_supportedApplicationContext OBJ_X509,30L - -#define SN_member "member" -#define NID_member 875 -#define OBJ_member OBJ_X509,31L - -#define SN_owner "owner" -#define NID_owner 876 -#define OBJ_owner OBJ_X509,32L - -#define LN_roleOccupant "roleOccupant" -#define NID_roleOccupant 877 -#define OBJ_roleOccupant OBJ_X509,33L - -#define SN_seeAlso "seeAlso" -#define NID_seeAlso 878 -#define OBJ_seeAlso OBJ_X509,34L - -#define LN_userPassword "userPassword" -#define NID_userPassword 879 -#define OBJ_userPassword OBJ_X509,35L - -#define LN_userCertificate "userCertificate" -#define NID_userCertificate 880 -#define OBJ_userCertificate OBJ_X509,36L - -#define LN_cACertificate "cACertificate" -#define NID_cACertificate 881 -#define OBJ_cACertificate OBJ_X509,37L - -#define LN_authorityRevocationList "authorityRevocationList" -#define NID_authorityRevocationList 882 -#define OBJ_authorityRevocationList OBJ_X509,38L - -#define LN_certificateRevocationList "certificateRevocationList" -#define NID_certificateRevocationList 883 -#define OBJ_certificateRevocationList OBJ_X509,39L - -#define LN_crossCertificatePair "crossCertificatePair" -#define NID_crossCertificatePair 884 -#define OBJ_crossCertificatePair OBJ_X509,40L - -#define SN_name "name" -#define LN_name "name" -#define NID_name 173 -#define OBJ_name OBJ_X509,41L - -#define SN_givenName "GN" -#define LN_givenName "givenName" -#define NID_givenName 99 -#define OBJ_givenName OBJ_X509,42L - -#define SN_initials "initials" -#define LN_initials "initials" -#define NID_initials 101 -#define OBJ_initials OBJ_X509,43L - -#define LN_generationQualifier "generationQualifier" -#define NID_generationQualifier 509 -#define OBJ_generationQualifier OBJ_X509,44L - -#define LN_x500UniqueIdentifier "x500UniqueIdentifier" -#define NID_x500UniqueIdentifier 503 -#define OBJ_x500UniqueIdentifier OBJ_X509,45L - -#define SN_dnQualifier "dnQualifier" -#define LN_dnQualifier "dnQualifier" -#define NID_dnQualifier 174 -#define OBJ_dnQualifier OBJ_X509,46L - -#define LN_enhancedSearchGuide "enhancedSearchGuide" -#define NID_enhancedSearchGuide 885 -#define OBJ_enhancedSearchGuide OBJ_X509,47L - -#define LN_protocolInformation "protocolInformation" -#define NID_protocolInformation 886 -#define OBJ_protocolInformation OBJ_X509,48L - -#define LN_distinguishedName "distinguishedName" -#define NID_distinguishedName 887 -#define OBJ_distinguishedName OBJ_X509,49L - -#define LN_uniqueMember "uniqueMember" -#define NID_uniqueMember 888 -#define OBJ_uniqueMember OBJ_X509,50L - -#define LN_houseIdentifier "houseIdentifier" -#define NID_houseIdentifier 889 -#define OBJ_houseIdentifier OBJ_X509,51L - -#define LN_supportedAlgorithms "supportedAlgorithms" -#define NID_supportedAlgorithms 890 -#define OBJ_supportedAlgorithms OBJ_X509,52L - -#define LN_deltaRevocationList "deltaRevocationList" -#define NID_deltaRevocationList 891 -#define OBJ_deltaRevocationList OBJ_X509,53L - -#define SN_dmdName "dmdName" -#define NID_dmdName 892 -#define OBJ_dmdName OBJ_X509,54L - -#define LN_pseudonym "pseudonym" -#define NID_pseudonym 510 -#define OBJ_pseudonym OBJ_X509,65L - -#define SN_role "role" -#define LN_role "role" -#define NID_role 400 -#define OBJ_role OBJ_X509,72L - -#define LN_organizationIdentifier "organizationIdentifier" -#define NID_organizationIdentifier 1089 -#define OBJ_organizationIdentifier OBJ_X509,97L - -#define SN_countryCode3c "c3" -#define LN_countryCode3c "countryCode3c" -#define NID_countryCode3c 1090 -#define OBJ_countryCode3c OBJ_X509,98L - -#define SN_countryCode3n "n3" -#define LN_countryCode3n "countryCode3n" -#define NID_countryCode3n 1091 -#define OBJ_countryCode3n OBJ_X509,99L - -#define LN_dnsName "dnsName" -#define NID_dnsName 1092 -#define OBJ_dnsName OBJ_X509,100L - -#define SN_X500algorithms "X500algorithms" -#define LN_X500algorithms "directory services - algorithms" -#define NID_X500algorithms 378 -#define OBJ_X500algorithms OBJ_X500,8L - -#define SN_rsa "RSA" -#define LN_rsa "rsa" -#define NID_rsa 19 -#define OBJ_rsa OBJ_X500algorithms,1L,1L - -#define SN_mdc2WithRSA "RSA-MDC2" -#define LN_mdc2WithRSA "mdc2WithRSA" -#define NID_mdc2WithRSA 96 -#define OBJ_mdc2WithRSA OBJ_X500algorithms,3L,100L - -#define SN_mdc2 "MDC2" -#define LN_mdc2 "mdc2" -#define NID_mdc2 95 -#define OBJ_mdc2 OBJ_X500algorithms,3L,101L - -#define SN_id_ce "id-ce" -#define NID_id_ce 81 -#define OBJ_id_ce OBJ_X500,29L - -#define SN_subject_directory_attributes "subjectDirectoryAttributes" -#define LN_subject_directory_attributes "X509v3 Subject Directory Attributes" -#define NID_subject_directory_attributes 769 -#define OBJ_subject_directory_attributes OBJ_id_ce,9L - -#define SN_subject_key_identifier "subjectKeyIdentifier" -#define LN_subject_key_identifier "X509v3 Subject Key Identifier" -#define NID_subject_key_identifier 82 -#define OBJ_subject_key_identifier OBJ_id_ce,14L - -#define SN_key_usage "keyUsage" -#define LN_key_usage "X509v3 Key Usage" -#define NID_key_usage 83 -#define OBJ_key_usage OBJ_id_ce,15L - -#define SN_private_key_usage_period "privateKeyUsagePeriod" -#define LN_private_key_usage_period "X509v3 Private Key Usage Period" -#define NID_private_key_usage_period 84 -#define OBJ_private_key_usage_period OBJ_id_ce,16L - -#define SN_subject_alt_name "subjectAltName" -#define LN_subject_alt_name "X509v3 Subject Alternative Name" -#define NID_subject_alt_name 85 -#define OBJ_subject_alt_name OBJ_id_ce,17L - -#define SN_issuer_alt_name "issuerAltName" -#define LN_issuer_alt_name "X509v3 Issuer Alternative Name" -#define NID_issuer_alt_name 86 -#define OBJ_issuer_alt_name OBJ_id_ce,18L - -#define SN_basic_constraints "basicConstraints" -#define LN_basic_constraints "X509v3 Basic Constraints" -#define NID_basic_constraints 87 -#define OBJ_basic_constraints OBJ_id_ce,19L - -#define SN_crl_number "crlNumber" -#define LN_crl_number "X509v3 CRL Number" -#define NID_crl_number 88 -#define OBJ_crl_number OBJ_id_ce,20L - -#define SN_crl_reason "CRLReason" -#define LN_crl_reason "X509v3 CRL Reason Code" -#define NID_crl_reason 141 -#define OBJ_crl_reason OBJ_id_ce,21L - -#define SN_invalidity_date "invalidityDate" -#define LN_invalidity_date "Invalidity Date" -#define NID_invalidity_date 142 -#define OBJ_invalidity_date OBJ_id_ce,24L - -#define SN_delta_crl "deltaCRL" -#define LN_delta_crl "X509v3 Delta CRL Indicator" -#define NID_delta_crl 140 -#define OBJ_delta_crl OBJ_id_ce,27L - -#define SN_issuing_distribution_point "issuingDistributionPoint" -#define LN_issuing_distribution_point "X509v3 Issuing Distribution Point" -#define NID_issuing_distribution_point 770 -#define OBJ_issuing_distribution_point OBJ_id_ce,28L - -#define SN_certificate_issuer "certificateIssuer" -#define LN_certificate_issuer "X509v3 Certificate Issuer" -#define NID_certificate_issuer 771 -#define OBJ_certificate_issuer OBJ_id_ce,29L - -#define SN_name_constraints "nameConstraints" -#define LN_name_constraints "X509v3 Name Constraints" -#define NID_name_constraints 666 -#define OBJ_name_constraints OBJ_id_ce,30L - -#define SN_crl_distribution_points "crlDistributionPoints" -#define LN_crl_distribution_points "X509v3 CRL Distribution Points" -#define NID_crl_distribution_points 103 -#define OBJ_crl_distribution_points OBJ_id_ce,31L - -#define SN_certificate_policies "certificatePolicies" -#define LN_certificate_policies "X509v3 Certificate Policies" -#define NID_certificate_policies 89 -#define OBJ_certificate_policies OBJ_id_ce,32L - -#define SN_any_policy "anyPolicy" -#define LN_any_policy "X509v3 Any Policy" -#define NID_any_policy 746 -#define OBJ_any_policy OBJ_certificate_policies,0L - -#define SN_policy_mappings "policyMappings" -#define LN_policy_mappings "X509v3 Policy Mappings" -#define NID_policy_mappings 747 -#define OBJ_policy_mappings OBJ_id_ce,33L - -#define SN_authority_key_identifier "authorityKeyIdentifier" -#define LN_authority_key_identifier "X509v3 Authority Key Identifier" -#define NID_authority_key_identifier 90 -#define OBJ_authority_key_identifier OBJ_id_ce,35L - -#define SN_policy_constraints "policyConstraints" -#define LN_policy_constraints "X509v3 Policy Constraints" -#define NID_policy_constraints 401 -#define OBJ_policy_constraints OBJ_id_ce,36L - -#define SN_ext_key_usage "extendedKeyUsage" -#define LN_ext_key_usage "X509v3 Extended Key Usage" -#define NID_ext_key_usage 126 -#define OBJ_ext_key_usage OBJ_id_ce,37L - -#define SN_freshest_crl "freshestCRL" -#define LN_freshest_crl "X509v3 Freshest CRL" -#define NID_freshest_crl 857 -#define OBJ_freshest_crl OBJ_id_ce,46L - -#define SN_inhibit_any_policy "inhibitAnyPolicy" -#define LN_inhibit_any_policy "X509v3 Inhibit Any Policy" -#define NID_inhibit_any_policy 748 -#define OBJ_inhibit_any_policy OBJ_id_ce,54L - -#define SN_target_information "targetInformation" -#define LN_target_information "X509v3 AC Targeting" -#define NID_target_information 402 -#define OBJ_target_information OBJ_id_ce,55L - -#define SN_no_rev_avail "noRevAvail" -#define LN_no_rev_avail "X509v3 No Revocation Available" -#define NID_no_rev_avail 403 -#define OBJ_no_rev_avail OBJ_id_ce,56L - -#define SN_anyExtendedKeyUsage "anyExtendedKeyUsage" -#define LN_anyExtendedKeyUsage "Any Extended Key Usage" -#define NID_anyExtendedKeyUsage 910 -#define OBJ_anyExtendedKeyUsage OBJ_ext_key_usage,0L - -#define SN_netscape "Netscape" -#define LN_netscape "Netscape Communications Corp." -#define NID_netscape 57 -#define OBJ_netscape 2L,16L,840L,1L,113730L - -#define SN_netscape_cert_extension "nsCertExt" -#define LN_netscape_cert_extension "Netscape Certificate Extension" -#define NID_netscape_cert_extension 58 -#define OBJ_netscape_cert_extension OBJ_netscape,1L - -#define SN_netscape_data_type "nsDataType" -#define LN_netscape_data_type "Netscape Data Type" -#define NID_netscape_data_type 59 -#define OBJ_netscape_data_type OBJ_netscape,2L - -#define SN_netscape_cert_type "nsCertType" -#define LN_netscape_cert_type "Netscape Cert Type" -#define NID_netscape_cert_type 71 -#define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L - -#define SN_netscape_base_url "nsBaseUrl" -#define LN_netscape_base_url "Netscape Base Url" -#define NID_netscape_base_url 72 -#define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L - -#define SN_netscape_revocation_url "nsRevocationUrl" -#define LN_netscape_revocation_url "Netscape Revocation Url" -#define NID_netscape_revocation_url 73 -#define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L - -#define SN_netscape_ca_revocation_url "nsCaRevocationUrl" -#define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" -#define NID_netscape_ca_revocation_url 74 -#define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L - -#define SN_netscape_renewal_url "nsRenewalUrl" -#define LN_netscape_renewal_url "Netscape Renewal Url" -#define NID_netscape_renewal_url 75 -#define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L - -#define SN_netscape_ca_policy_url "nsCaPolicyUrl" -#define LN_netscape_ca_policy_url "Netscape CA Policy Url" -#define NID_netscape_ca_policy_url 76 -#define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L - -#define SN_netscape_ssl_server_name "nsSslServerName" -#define LN_netscape_ssl_server_name "Netscape SSL Server Name" -#define NID_netscape_ssl_server_name 77 -#define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L - -#define SN_netscape_comment "nsComment" -#define LN_netscape_comment "Netscape Comment" -#define NID_netscape_comment 78 -#define OBJ_netscape_comment OBJ_netscape_cert_extension,13L - -#define SN_netscape_cert_sequence "nsCertSequence" -#define LN_netscape_cert_sequence "Netscape Certificate Sequence" -#define NID_netscape_cert_sequence 79 -#define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L - -#define SN_ns_sgc "nsSGC" -#define LN_ns_sgc "Netscape Server Gated Crypto" -#define NID_ns_sgc 139 -#define OBJ_ns_sgc OBJ_netscape,4L,1L - -#define SN_org "ORG" -#define LN_org "org" -#define NID_org 379 -#define OBJ_org OBJ_iso,3L - -#define SN_dod "DOD" -#define LN_dod "dod" -#define NID_dod 380 -#define OBJ_dod OBJ_org,6L - -#define SN_iana "IANA" -#define LN_iana "iana" -#define NID_iana 381 -#define OBJ_iana OBJ_dod,1L - -#define OBJ_internet OBJ_iana - -#define SN_Directory "directory" -#define LN_Directory "Directory" -#define NID_Directory 382 -#define OBJ_Directory OBJ_internet,1L - -#define SN_Management "mgmt" -#define LN_Management "Management" -#define NID_Management 383 -#define OBJ_Management OBJ_internet,2L - -#define SN_Experimental "experimental" -#define LN_Experimental "Experimental" -#define NID_Experimental 384 -#define OBJ_Experimental OBJ_internet,3L - -#define SN_Private "private" -#define LN_Private "Private" -#define NID_Private 385 -#define OBJ_Private OBJ_internet,4L - -#define SN_Security "security" -#define LN_Security "Security" -#define NID_Security 386 -#define OBJ_Security OBJ_internet,5L - -#define SN_SNMPv2 "snmpv2" -#define LN_SNMPv2 "SNMPv2" -#define NID_SNMPv2 387 -#define OBJ_SNMPv2 OBJ_internet,6L - -#define LN_Mail "Mail" -#define NID_Mail 388 -#define OBJ_Mail OBJ_internet,7L - -#define SN_Enterprises "enterprises" -#define LN_Enterprises "Enterprises" -#define NID_Enterprises 389 -#define OBJ_Enterprises OBJ_Private,1L - -#define SN_dcObject "dcobject" -#define LN_dcObject "dcObject" -#define NID_dcObject 390 -#define OBJ_dcObject OBJ_Enterprises,1466L,344L - -#define SN_mime_mhs "mime-mhs" -#define LN_mime_mhs "MIME MHS" -#define NID_mime_mhs 504 -#define OBJ_mime_mhs OBJ_Mail,1L - -#define SN_mime_mhs_headings "mime-mhs-headings" -#define LN_mime_mhs_headings "mime-mhs-headings" -#define NID_mime_mhs_headings 505 -#define OBJ_mime_mhs_headings OBJ_mime_mhs,1L - -#define SN_mime_mhs_bodies "mime-mhs-bodies" -#define LN_mime_mhs_bodies "mime-mhs-bodies" -#define NID_mime_mhs_bodies 506 -#define OBJ_mime_mhs_bodies OBJ_mime_mhs,2L - -#define SN_id_hex_partial_message "id-hex-partial-message" -#define LN_id_hex_partial_message "id-hex-partial-message" -#define NID_id_hex_partial_message 507 -#define OBJ_id_hex_partial_message OBJ_mime_mhs_headings,1L - -#define SN_id_hex_multipart_message "id-hex-multipart-message" -#define LN_id_hex_multipart_message "id-hex-multipart-message" -#define NID_id_hex_multipart_message 508 -#define OBJ_id_hex_multipart_message OBJ_mime_mhs_headings,2L - -#define SN_zlib_compression "ZLIB" -#define LN_zlib_compression "zlib compression" -#define NID_zlib_compression 125 -#define OBJ_zlib_compression OBJ_id_smime_alg,8L - -#define OBJ_csor 2L,16L,840L,1L,101L,3L - -#define OBJ_nistAlgorithms OBJ_csor,4L - -#define OBJ_aes OBJ_nistAlgorithms,1L - -#define SN_aes_128_ecb "AES-128-ECB" -#define LN_aes_128_ecb "aes-128-ecb" -#define NID_aes_128_ecb 418 -#define OBJ_aes_128_ecb OBJ_aes,1L - -#define SN_aes_128_cbc "AES-128-CBC" -#define LN_aes_128_cbc "aes-128-cbc" -#define NID_aes_128_cbc 419 -#define OBJ_aes_128_cbc OBJ_aes,2L - -#define SN_aes_128_ofb128 "AES-128-OFB" -#define LN_aes_128_ofb128 "aes-128-ofb" -#define NID_aes_128_ofb128 420 -#define OBJ_aes_128_ofb128 OBJ_aes,3L - -#define SN_aes_128_cfb128 "AES-128-CFB" -#define LN_aes_128_cfb128 "aes-128-cfb" -#define NID_aes_128_cfb128 421 -#define OBJ_aes_128_cfb128 OBJ_aes,4L - -#define SN_id_aes128_wrap "id-aes128-wrap" -#define NID_id_aes128_wrap 788 -#define OBJ_id_aes128_wrap OBJ_aes,5L - -#define SN_aes_128_gcm "id-aes128-GCM" -#define LN_aes_128_gcm "aes-128-gcm" -#define NID_aes_128_gcm 895 -#define OBJ_aes_128_gcm OBJ_aes,6L - -#define SN_aes_128_ccm "id-aes128-CCM" -#define LN_aes_128_ccm "aes-128-ccm" -#define NID_aes_128_ccm 896 -#define OBJ_aes_128_ccm OBJ_aes,7L - -#define SN_id_aes128_wrap_pad "id-aes128-wrap-pad" -#define NID_id_aes128_wrap_pad 897 -#define OBJ_id_aes128_wrap_pad OBJ_aes,8L - -#define SN_aes_192_ecb "AES-192-ECB" -#define LN_aes_192_ecb "aes-192-ecb" -#define NID_aes_192_ecb 422 -#define OBJ_aes_192_ecb OBJ_aes,21L - -#define SN_aes_192_cbc "AES-192-CBC" -#define LN_aes_192_cbc "aes-192-cbc" -#define NID_aes_192_cbc 423 -#define OBJ_aes_192_cbc OBJ_aes,22L - -#define SN_aes_192_ofb128 "AES-192-OFB" -#define LN_aes_192_ofb128 "aes-192-ofb" -#define NID_aes_192_ofb128 424 -#define OBJ_aes_192_ofb128 OBJ_aes,23L - -#define SN_aes_192_cfb128 "AES-192-CFB" -#define LN_aes_192_cfb128 "aes-192-cfb" -#define NID_aes_192_cfb128 425 -#define OBJ_aes_192_cfb128 OBJ_aes,24L - -#define SN_id_aes192_wrap "id-aes192-wrap" -#define NID_id_aes192_wrap 789 -#define OBJ_id_aes192_wrap OBJ_aes,25L - -#define SN_aes_192_gcm "id-aes192-GCM" -#define LN_aes_192_gcm "aes-192-gcm" -#define NID_aes_192_gcm 898 -#define OBJ_aes_192_gcm OBJ_aes,26L - -#define SN_aes_192_ccm "id-aes192-CCM" -#define LN_aes_192_ccm "aes-192-ccm" -#define NID_aes_192_ccm 899 -#define OBJ_aes_192_ccm OBJ_aes,27L - -#define SN_id_aes192_wrap_pad "id-aes192-wrap-pad" -#define NID_id_aes192_wrap_pad 900 -#define OBJ_id_aes192_wrap_pad OBJ_aes,28L - -#define SN_aes_256_ecb "AES-256-ECB" -#define LN_aes_256_ecb "aes-256-ecb" -#define NID_aes_256_ecb 426 -#define OBJ_aes_256_ecb OBJ_aes,41L - -#define SN_aes_256_cbc "AES-256-CBC" -#define LN_aes_256_cbc "aes-256-cbc" -#define NID_aes_256_cbc 427 -#define OBJ_aes_256_cbc OBJ_aes,42L - -#define SN_aes_256_ofb128 "AES-256-OFB" -#define LN_aes_256_ofb128 "aes-256-ofb" -#define NID_aes_256_ofb128 428 -#define OBJ_aes_256_ofb128 OBJ_aes,43L - -#define SN_aes_256_cfb128 "AES-256-CFB" -#define LN_aes_256_cfb128 "aes-256-cfb" -#define NID_aes_256_cfb128 429 -#define OBJ_aes_256_cfb128 OBJ_aes,44L - -#define SN_id_aes256_wrap "id-aes256-wrap" -#define NID_id_aes256_wrap 790 -#define OBJ_id_aes256_wrap OBJ_aes,45L - -#define SN_aes_256_gcm "id-aes256-GCM" -#define LN_aes_256_gcm "aes-256-gcm" -#define NID_aes_256_gcm 901 -#define OBJ_aes_256_gcm OBJ_aes,46L - -#define SN_aes_256_ccm "id-aes256-CCM" -#define LN_aes_256_ccm "aes-256-ccm" -#define NID_aes_256_ccm 902 -#define OBJ_aes_256_ccm OBJ_aes,47L - -#define SN_id_aes256_wrap_pad "id-aes256-wrap-pad" -#define NID_id_aes256_wrap_pad 903 -#define OBJ_id_aes256_wrap_pad OBJ_aes,48L - -#define SN_aes_128_xts "AES-128-XTS" -#define LN_aes_128_xts "aes-128-xts" -#define NID_aes_128_xts 913 -#define OBJ_aes_128_xts OBJ_ieee_siswg,0L,1L,1L - -#define SN_aes_256_xts "AES-256-XTS" -#define LN_aes_256_xts "aes-256-xts" -#define NID_aes_256_xts 914 -#define OBJ_aes_256_xts OBJ_ieee_siswg,0L,1L,2L - -#define SN_aes_128_cfb1 "AES-128-CFB1" -#define LN_aes_128_cfb1 "aes-128-cfb1" -#define NID_aes_128_cfb1 650 - -#define SN_aes_192_cfb1 "AES-192-CFB1" -#define LN_aes_192_cfb1 "aes-192-cfb1" -#define NID_aes_192_cfb1 651 - -#define SN_aes_256_cfb1 "AES-256-CFB1" -#define LN_aes_256_cfb1 "aes-256-cfb1" -#define NID_aes_256_cfb1 652 - -#define SN_aes_128_cfb8 "AES-128-CFB8" -#define LN_aes_128_cfb8 "aes-128-cfb8" -#define NID_aes_128_cfb8 653 - -#define SN_aes_192_cfb8 "AES-192-CFB8" -#define LN_aes_192_cfb8 "aes-192-cfb8" -#define NID_aes_192_cfb8 654 - -#define SN_aes_256_cfb8 "AES-256-CFB8" -#define LN_aes_256_cfb8 "aes-256-cfb8" -#define NID_aes_256_cfb8 655 - -#define SN_aes_128_ctr "AES-128-CTR" -#define LN_aes_128_ctr "aes-128-ctr" -#define NID_aes_128_ctr 904 - -#define SN_aes_192_ctr "AES-192-CTR" -#define LN_aes_192_ctr "aes-192-ctr" -#define NID_aes_192_ctr 905 - -#define SN_aes_256_ctr "AES-256-CTR" -#define LN_aes_256_ctr "aes-256-ctr" -#define NID_aes_256_ctr 906 - -#define SN_aes_128_ocb "AES-128-OCB" -#define LN_aes_128_ocb "aes-128-ocb" -#define NID_aes_128_ocb 958 - -#define SN_aes_192_ocb "AES-192-OCB" -#define LN_aes_192_ocb "aes-192-ocb" -#define NID_aes_192_ocb 959 - -#define SN_aes_256_ocb "AES-256-OCB" -#define LN_aes_256_ocb "aes-256-ocb" -#define NID_aes_256_ocb 960 - -#define SN_des_cfb1 "DES-CFB1" -#define LN_des_cfb1 "des-cfb1" -#define NID_des_cfb1 656 - -#define SN_des_cfb8 "DES-CFB8" -#define LN_des_cfb8 "des-cfb8" -#define NID_des_cfb8 657 - -#define SN_des_ede3_cfb1 "DES-EDE3-CFB1" -#define LN_des_ede3_cfb1 "des-ede3-cfb1" -#define NID_des_ede3_cfb1 658 - -#define SN_des_ede3_cfb8 "DES-EDE3-CFB8" -#define LN_des_ede3_cfb8 "des-ede3-cfb8" -#define NID_des_ede3_cfb8 659 - -#define OBJ_nist_hashalgs OBJ_nistAlgorithms,2L - -#define SN_sha256 "SHA256" -#define LN_sha256 "sha256" -#define NID_sha256 672 -#define OBJ_sha256 OBJ_nist_hashalgs,1L - -#define SN_sha384 "SHA384" -#define LN_sha384 "sha384" -#define NID_sha384 673 -#define OBJ_sha384 OBJ_nist_hashalgs,2L - -#define SN_sha512 "SHA512" -#define LN_sha512 "sha512" -#define NID_sha512 674 -#define OBJ_sha512 OBJ_nist_hashalgs,3L - -#define SN_sha224 "SHA224" -#define LN_sha224 "sha224" -#define NID_sha224 675 -#define OBJ_sha224 OBJ_nist_hashalgs,4L - -#define SN_sha512_224 "SHA512-224" -#define LN_sha512_224 "sha512-224" -#define NID_sha512_224 1094 -#define OBJ_sha512_224 OBJ_nist_hashalgs,5L - -#define SN_sha512_256 "SHA512-256" -#define LN_sha512_256 "sha512-256" -#define NID_sha512_256 1095 -#define OBJ_sha512_256 OBJ_nist_hashalgs,6L - -#define SN_sha3_224 "SHA3-224" -#define LN_sha3_224 "sha3-224" -#define NID_sha3_224 1096 -#define OBJ_sha3_224 OBJ_nist_hashalgs,7L - -#define SN_sha3_256 "SHA3-256" -#define LN_sha3_256 "sha3-256" -#define NID_sha3_256 1097 -#define OBJ_sha3_256 OBJ_nist_hashalgs,8L - -#define SN_sha3_384 "SHA3-384" -#define LN_sha3_384 "sha3-384" -#define NID_sha3_384 1098 -#define OBJ_sha3_384 OBJ_nist_hashalgs,9L - -#define SN_sha3_512 "SHA3-512" -#define LN_sha3_512 "sha3-512" -#define NID_sha3_512 1099 -#define OBJ_sha3_512 OBJ_nist_hashalgs,10L - -#define SN_shake128 "SHAKE128" -#define LN_shake128 "shake128" -#define NID_shake128 1100 -#define OBJ_shake128 OBJ_nist_hashalgs,11L - -#define SN_shake256 "SHAKE256" -#define LN_shake256 "shake256" -#define NID_shake256 1101 -#define OBJ_shake256 OBJ_nist_hashalgs,12L - -#define SN_hmac_sha3_224 "id-hmacWithSHA3-224" -#define LN_hmac_sha3_224 "hmac-sha3-224" -#define NID_hmac_sha3_224 1102 -#define OBJ_hmac_sha3_224 OBJ_nist_hashalgs,13L - -#define SN_hmac_sha3_256 "id-hmacWithSHA3-256" -#define LN_hmac_sha3_256 "hmac-sha3-256" -#define NID_hmac_sha3_256 1103 -#define OBJ_hmac_sha3_256 OBJ_nist_hashalgs,14L - -#define SN_hmac_sha3_384 "id-hmacWithSHA3-384" -#define LN_hmac_sha3_384 "hmac-sha3-384" -#define NID_hmac_sha3_384 1104 -#define OBJ_hmac_sha3_384 OBJ_nist_hashalgs,15L - -#define SN_hmac_sha3_512 "id-hmacWithSHA3-512" -#define LN_hmac_sha3_512 "hmac-sha3-512" -#define NID_hmac_sha3_512 1105 -#define OBJ_hmac_sha3_512 OBJ_nist_hashalgs,16L - -#define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L - -#define SN_dsa_with_SHA224 "dsa_with_SHA224" -#define NID_dsa_with_SHA224 802 -#define OBJ_dsa_with_SHA224 OBJ_dsa_with_sha2,1L - -#define SN_dsa_with_SHA256 "dsa_with_SHA256" -#define NID_dsa_with_SHA256 803 -#define OBJ_dsa_with_SHA256 OBJ_dsa_with_sha2,2L - -#define OBJ_sigAlgs OBJ_nistAlgorithms,3L - -#define SN_dsa_with_SHA384 "id-dsa-with-sha384" -#define LN_dsa_with_SHA384 "dsa_with_SHA384" -#define NID_dsa_with_SHA384 1106 -#define OBJ_dsa_with_SHA384 OBJ_sigAlgs,3L - -#define SN_dsa_with_SHA512 "id-dsa-with-sha512" -#define LN_dsa_with_SHA512 "dsa_with_SHA512" -#define NID_dsa_with_SHA512 1107 -#define OBJ_dsa_with_SHA512 OBJ_sigAlgs,4L - -#define SN_dsa_with_SHA3_224 "id-dsa-with-sha3-224" -#define LN_dsa_with_SHA3_224 "dsa_with_SHA3-224" -#define NID_dsa_with_SHA3_224 1108 -#define OBJ_dsa_with_SHA3_224 OBJ_sigAlgs,5L - -#define SN_dsa_with_SHA3_256 "id-dsa-with-sha3-256" -#define LN_dsa_with_SHA3_256 "dsa_with_SHA3-256" -#define NID_dsa_with_SHA3_256 1109 -#define OBJ_dsa_with_SHA3_256 OBJ_sigAlgs,6L - -#define SN_dsa_with_SHA3_384 "id-dsa-with-sha3-384" -#define LN_dsa_with_SHA3_384 "dsa_with_SHA3-384" -#define NID_dsa_with_SHA3_384 1110 -#define OBJ_dsa_with_SHA3_384 OBJ_sigAlgs,7L - -#define SN_dsa_with_SHA3_512 "id-dsa-with-sha3-512" -#define LN_dsa_with_SHA3_512 "dsa_with_SHA3-512" -#define NID_dsa_with_SHA3_512 1111 -#define OBJ_dsa_with_SHA3_512 OBJ_sigAlgs,8L - -#define SN_ecdsa_with_SHA3_224 "id-ecdsa-with-sha3-224" -#define LN_ecdsa_with_SHA3_224 "ecdsa_with_SHA3-224" -#define NID_ecdsa_with_SHA3_224 1112 -#define OBJ_ecdsa_with_SHA3_224 OBJ_sigAlgs,9L - -#define SN_ecdsa_with_SHA3_256 "id-ecdsa-with-sha3-256" -#define LN_ecdsa_with_SHA3_256 "ecdsa_with_SHA3-256" -#define NID_ecdsa_with_SHA3_256 1113 -#define OBJ_ecdsa_with_SHA3_256 OBJ_sigAlgs,10L - -#define SN_ecdsa_with_SHA3_384 "id-ecdsa-with-sha3-384" -#define LN_ecdsa_with_SHA3_384 "ecdsa_with_SHA3-384" -#define NID_ecdsa_with_SHA3_384 1114 -#define OBJ_ecdsa_with_SHA3_384 OBJ_sigAlgs,11L - -#define SN_ecdsa_with_SHA3_512 "id-ecdsa-with-sha3-512" -#define LN_ecdsa_with_SHA3_512 "ecdsa_with_SHA3-512" -#define NID_ecdsa_with_SHA3_512 1115 -#define OBJ_ecdsa_with_SHA3_512 OBJ_sigAlgs,12L - -#define SN_RSA_SHA3_224 "id-rsassa-pkcs1-v1_5-with-sha3-224" -#define LN_RSA_SHA3_224 "RSA-SHA3-224" -#define NID_RSA_SHA3_224 1116 -#define OBJ_RSA_SHA3_224 OBJ_sigAlgs,13L - -#define SN_RSA_SHA3_256 "id-rsassa-pkcs1-v1_5-with-sha3-256" -#define LN_RSA_SHA3_256 "RSA-SHA3-256" -#define NID_RSA_SHA3_256 1117 -#define OBJ_RSA_SHA3_256 OBJ_sigAlgs,14L - -#define SN_RSA_SHA3_384 "id-rsassa-pkcs1-v1_5-with-sha3-384" -#define LN_RSA_SHA3_384 "RSA-SHA3-384" -#define NID_RSA_SHA3_384 1118 -#define OBJ_RSA_SHA3_384 OBJ_sigAlgs,15L - -#define SN_RSA_SHA3_512 "id-rsassa-pkcs1-v1_5-with-sha3-512" -#define LN_RSA_SHA3_512 "RSA-SHA3-512" -#define NID_RSA_SHA3_512 1119 -#define OBJ_RSA_SHA3_512 OBJ_sigAlgs,16L - -#define SN_hold_instruction_code "holdInstructionCode" -#define LN_hold_instruction_code "Hold Instruction Code" -#define NID_hold_instruction_code 430 -#define OBJ_hold_instruction_code OBJ_id_ce,23L - -#define OBJ_holdInstruction OBJ_X9_57,2L - -#define SN_hold_instruction_none "holdInstructionNone" -#define LN_hold_instruction_none "Hold Instruction None" -#define NID_hold_instruction_none 431 -#define OBJ_hold_instruction_none OBJ_holdInstruction,1L - -#define SN_hold_instruction_call_issuer "holdInstructionCallIssuer" -#define LN_hold_instruction_call_issuer "Hold Instruction Call Issuer" -#define NID_hold_instruction_call_issuer 432 -#define OBJ_hold_instruction_call_issuer OBJ_holdInstruction,2L - -#define SN_hold_instruction_reject "holdInstructionReject" -#define LN_hold_instruction_reject "Hold Instruction Reject" -#define NID_hold_instruction_reject 433 -#define OBJ_hold_instruction_reject OBJ_holdInstruction,3L - -#define SN_data "data" -#define NID_data 434 -#define OBJ_data OBJ_itu_t,9L - -#define SN_pss "pss" -#define NID_pss 435 -#define OBJ_pss OBJ_data,2342L - -#define SN_ucl "ucl" -#define NID_ucl 436 -#define OBJ_ucl OBJ_pss,19200300L - -#define SN_pilot "pilot" -#define NID_pilot 437 -#define OBJ_pilot OBJ_ucl,100L - -#define LN_pilotAttributeType "pilotAttributeType" -#define NID_pilotAttributeType 438 -#define OBJ_pilotAttributeType OBJ_pilot,1L - -#define LN_pilotAttributeSyntax "pilotAttributeSyntax" -#define NID_pilotAttributeSyntax 439 -#define OBJ_pilotAttributeSyntax OBJ_pilot,3L - -#define LN_pilotObjectClass "pilotObjectClass" -#define NID_pilotObjectClass 440 -#define OBJ_pilotObjectClass OBJ_pilot,4L - -#define LN_pilotGroups "pilotGroups" -#define NID_pilotGroups 441 -#define OBJ_pilotGroups OBJ_pilot,10L - -#define LN_iA5StringSyntax "iA5StringSyntax" -#define NID_iA5StringSyntax 442 -#define OBJ_iA5StringSyntax OBJ_pilotAttributeSyntax,4L - -#define LN_caseIgnoreIA5StringSyntax "caseIgnoreIA5StringSyntax" -#define NID_caseIgnoreIA5StringSyntax 443 -#define OBJ_caseIgnoreIA5StringSyntax OBJ_pilotAttributeSyntax,5L - -#define LN_pilotObject "pilotObject" -#define NID_pilotObject 444 -#define OBJ_pilotObject OBJ_pilotObjectClass,3L - -#define LN_pilotPerson "pilotPerson" -#define NID_pilotPerson 445 -#define OBJ_pilotPerson OBJ_pilotObjectClass,4L - -#define SN_account "account" -#define NID_account 446 -#define OBJ_account OBJ_pilotObjectClass,5L - -#define SN_document "document" -#define NID_document 447 -#define OBJ_document OBJ_pilotObjectClass,6L - -#define SN_room "room" -#define NID_room 448 -#define OBJ_room OBJ_pilotObjectClass,7L - -#define LN_documentSeries "documentSeries" -#define NID_documentSeries 449 -#define OBJ_documentSeries OBJ_pilotObjectClass,9L - -#define SN_Domain "domain" -#define LN_Domain "Domain" -#define NID_Domain 392 -#define OBJ_Domain OBJ_pilotObjectClass,13L - -#define LN_rFC822localPart "rFC822localPart" -#define NID_rFC822localPart 450 -#define OBJ_rFC822localPart OBJ_pilotObjectClass,14L - -#define LN_dNSDomain "dNSDomain" -#define NID_dNSDomain 451 -#define OBJ_dNSDomain OBJ_pilotObjectClass,15L - -#define LN_domainRelatedObject "domainRelatedObject" -#define NID_domainRelatedObject 452 -#define OBJ_domainRelatedObject OBJ_pilotObjectClass,17L - -#define LN_friendlyCountry "friendlyCountry" -#define NID_friendlyCountry 453 -#define OBJ_friendlyCountry OBJ_pilotObjectClass,18L - -#define LN_simpleSecurityObject "simpleSecurityObject" -#define NID_simpleSecurityObject 454 -#define OBJ_simpleSecurityObject OBJ_pilotObjectClass,19L - -#define LN_pilotOrganization "pilotOrganization" -#define NID_pilotOrganization 455 -#define OBJ_pilotOrganization OBJ_pilotObjectClass,20L - -#define LN_pilotDSA "pilotDSA" -#define NID_pilotDSA 456 -#define OBJ_pilotDSA OBJ_pilotObjectClass,21L - -#define LN_qualityLabelledData "qualityLabelledData" -#define NID_qualityLabelledData 457 -#define OBJ_qualityLabelledData OBJ_pilotObjectClass,22L - -#define SN_userId "UID" -#define LN_userId "userId" -#define NID_userId 458 -#define OBJ_userId OBJ_pilotAttributeType,1L - -#define LN_textEncodedORAddress "textEncodedORAddress" -#define NID_textEncodedORAddress 459 -#define OBJ_textEncodedORAddress OBJ_pilotAttributeType,2L - -#define SN_rfc822Mailbox "mail" -#define LN_rfc822Mailbox "rfc822Mailbox" -#define NID_rfc822Mailbox 460 -#define OBJ_rfc822Mailbox OBJ_pilotAttributeType,3L - -#define SN_info "info" -#define NID_info 461 -#define OBJ_info OBJ_pilotAttributeType,4L - -#define LN_favouriteDrink "favouriteDrink" -#define NID_favouriteDrink 462 -#define OBJ_favouriteDrink OBJ_pilotAttributeType,5L - -#define LN_roomNumber "roomNumber" -#define NID_roomNumber 463 -#define OBJ_roomNumber OBJ_pilotAttributeType,6L - -#define SN_photo "photo" -#define NID_photo 464 -#define OBJ_photo OBJ_pilotAttributeType,7L - -#define LN_userClass "userClass" -#define NID_userClass 465 -#define OBJ_userClass OBJ_pilotAttributeType,8L - -#define SN_host "host" -#define NID_host 466 -#define OBJ_host OBJ_pilotAttributeType,9L - -#define SN_manager "manager" -#define NID_manager 467 -#define OBJ_manager OBJ_pilotAttributeType,10L - -#define LN_documentIdentifier "documentIdentifier" -#define NID_documentIdentifier 468 -#define OBJ_documentIdentifier OBJ_pilotAttributeType,11L - -#define LN_documentTitle "documentTitle" -#define NID_documentTitle 469 -#define OBJ_documentTitle OBJ_pilotAttributeType,12L - -#define LN_documentVersion "documentVersion" -#define NID_documentVersion 470 -#define OBJ_documentVersion OBJ_pilotAttributeType,13L - -#define LN_documentAuthor "documentAuthor" -#define NID_documentAuthor 471 -#define OBJ_documentAuthor OBJ_pilotAttributeType,14L - -#define LN_documentLocation "documentLocation" -#define NID_documentLocation 472 -#define OBJ_documentLocation OBJ_pilotAttributeType,15L - -#define LN_homeTelephoneNumber "homeTelephoneNumber" -#define NID_homeTelephoneNumber 473 -#define OBJ_homeTelephoneNumber OBJ_pilotAttributeType,20L - -#define SN_secretary "secretary" -#define NID_secretary 474 -#define OBJ_secretary OBJ_pilotAttributeType,21L - -#define LN_otherMailbox "otherMailbox" -#define NID_otherMailbox 475 -#define OBJ_otherMailbox OBJ_pilotAttributeType,22L - -#define LN_lastModifiedTime "lastModifiedTime" -#define NID_lastModifiedTime 476 -#define OBJ_lastModifiedTime OBJ_pilotAttributeType,23L - -#define LN_lastModifiedBy "lastModifiedBy" -#define NID_lastModifiedBy 477 -#define OBJ_lastModifiedBy OBJ_pilotAttributeType,24L - -#define SN_domainComponent "DC" -#define LN_domainComponent "domainComponent" -#define NID_domainComponent 391 -#define OBJ_domainComponent OBJ_pilotAttributeType,25L - -#define LN_aRecord "aRecord" -#define NID_aRecord 478 -#define OBJ_aRecord OBJ_pilotAttributeType,26L - -#define LN_pilotAttributeType27 "pilotAttributeType27" -#define NID_pilotAttributeType27 479 -#define OBJ_pilotAttributeType27 OBJ_pilotAttributeType,27L - -#define LN_mXRecord "mXRecord" -#define NID_mXRecord 480 -#define OBJ_mXRecord OBJ_pilotAttributeType,28L - -#define LN_nSRecord "nSRecord" -#define NID_nSRecord 481 -#define OBJ_nSRecord OBJ_pilotAttributeType,29L - -#define LN_sOARecord "sOARecord" -#define NID_sOARecord 482 -#define OBJ_sOARecord OBJ_pilotAttributeType,30L - -#define LN_cNAMERecord "cNAMERecord" -#define NID_cNAMERecord 483 -#define OBJ_cNAMERecord OBJ_pilotAttributeType,31L - -#define LN_associatedDomain "associatedDomain" -#define NID_associatedDomain 484 -#define OBJ_associatedDomain OBJ_pilotAttributeType,37L - -#define LN_associatedName "associatedName" -#define NID_associatedName 485 -#define OBJ_associatedName OBJ_pilotAttributeType,38L - -#define LN_homePostalAddress "homePostalAddress" -#define NID_homePostalAddress 486 -#define OBJ_homePostalAddress OBJ_pilotAttributeType,39L - -#define LN_personalTitle "personalTitle" -#define NID_personalTitle 487 -#define OBJ_personalTitle OBJ_pilotAttributeType,40L - -#define LN_mobileTelephoneNumber "mobileTelephoneNumber" -#define NID_mobileTelephoneNumber 488 -#define OBJ_mobileTelephoneNumber OBJ_pilotAttributeType,41L - -#define LN_pagerTelephoneNumber "pagerTelephoneNumber" -#define NID_pagerTelephoneNumber 489 -#define OBJ_pagerTelephoneNumber OBJ_pilotAttributeType,42L - -#define LN_friendlyCountryName "friendlyCountryName" -#define NID_friendlyCountryName 490 -#define OBJ_friendlyCountryName OBJ_pilotAttributeType,43L - -#define SN_uniqueIdentifier "uid" -#define LN_uniqueIdentifier "uniqueIdentifier" -#define NID_uniqueIdentifier 102 -#define OBJ_uniqueIdentifier OBJ_pilotAttributeType,44L - -#define LN_organizationalStatus "organizationalStatus" -#define NID_organizationalStatus 491 -#define OBJ_organizationalStatus OBJ_pilotAttributeType,45L - -#define LN_janetMailbox "janetMailbox" -#define NID_janetMailbox 492 -#define OBJ_janetMailbox OBJ_pilotAttributeType,46L - -#define LN_mailPreferenceOption "mailPreferenceOption" -#define NID_mailPreferenceOption 493 -#define OBJ_mailPreferenceOption OBJ_pilotAttributeType,47L - -#define LN_buildingName "buildingName" -#define NID_buildingName 494 -#define OBJ_buildingName OBJ_pilotAttributeType,48L - -#define LN_dSAQuality "dSAQuality" -#define NID_dSAQuality 495 -#define OBJ_dSAQuality OBJ_pilotAttributeType,49L - -#define LN_singleLevelQuality "singleLevelQuality" -#define NID_singleLevelQuality 496 -#define OBJ_singleLevelQuality OBJ_pilotAttributeType,50L - -#define LN_subtreeMinimumQuality "subtreeMinimumQuality" -#define NID_subtreeMinimumQuality 497 -#define OBJ_subtreeMinimumQuality OBJ_pilotAttributeType,51L - -#define LN_subtreeMaximumQuality "subtreeMaximumQuality" -#define NID_subtreeMaximumQuality 498 -#define OBJ_subtreeMaximumQuality OBJ_pilotAttributeType,52L - -#define LN_personalSignature "personalSignature" -#define NID_personalSignature 499 -#define OBJ_personalSignature OBJ_pilotAttributeType,53L - -#define LN_dITRedirect "dITRedirect" -#define NID_dITRedirect 500 -#define OBJ_dITRedirect OBJ_pilotAttributeType,54L - -#define SN_audio "audio" -#define NID_audio 501 -#define OBJ_audio OBJ_pilotAttributeType,55L - -#define LN_documentPublisher "documentPublisher" -#define NID_documentPublisher 502 -#define OBJ_documentPublisher OBJ_pilotAttributeType,56L - -#define SN_id_set "id-set" -#define LN_id_set "Secure Electronic Transactions" -#define NID_id_set 512 -#define OBJ_id_set OBJ_international_organizations,42L - -#define SN_set_ctype "set-ctype" -#define LN_set_ctype "content types" -#define NID_set_ctype 513 -#define OBJ_set_ctype OBJ_id_set,0L - -#define SN_set_msgExt "set-msgExt" -#define LN_set_msgExt "message extensions" -#define NID_set_msgExt 514 -#define OBJ_set_msgExt OBJ_id_set,1L - -#define SN_set_attr "set-attr" -#define NID_set_attr 515 -#define OBJ_set_attr OBJ_id_set,3L - -#define SN_set_policy "set-policy" -#define NID_set_policy 516 -#define OBJ_set_policy OBJ_id_set,5L - -#define SN_set_certExt "set-certExt" -#define LN_set_certExt "certificate extensions" -#define NID_set_certExt 517 -#define OBJ_set_certExt OBJ_id_set,7L - -#define SN_set_brand "set-brand" -#define NID_set_brand 518 -#define OBJ_set_brand OBJ_id_set,8L - -#define SN_setct_PANData "setct-PANData" -#define NID_setct_PANData 519 -#define OBJ_setct_PANData OBJ_set_ctype,0L - -#define SN_setct_PANToken "setct-PANToken" -#define NID_setct_PANToken 520 -#define OBJ_setct_PANToken OBJ_set_ctype,1L - -#define SN_setct_PANOnly "setct-PANOnly" -#define NID_setct_PANOnly 521 -#define OBJ_setct_PANOnly OBJ_set_ctype,2L - -#define SN_setct_OIData "setct-OIData" -#define NID_setct_OIData 522 -#define OBJ_setct_OIData OBJ_set_ctype,3L - -#define SN_setct_PI "setct-PI" -#define NID_setct_PI 523 -#define OBJ_setct_PI OBJ_set_ctype,4L - -#define SN_setct_PIData "setct-PIData" -#define NID_setct_PIData 524 -#define OBJ_setct_PIData OBJ_set_ctype,5L - -#define SN_setct_PIDataUnsigned "setct-PIDataUnsigned" -#define NID_setct_PIDataUnsigned 525 -#define OBJ_setct_PIDataUnsigned OBJ_set_ctype,6L - -#define SN_setct_HODInput "setct-HODInput" -#define NID_setct_HODInput 526 -#define OBJ_setct_HODInput OBJ_set_ctype,7L - -#define SN_setct_AuthResBaggage "setct-AuthResBaggage" -#define NID_setct_AuthResBaggage 527 -#define OBJ_setct_AuthResBaggage OBJ_set_ctype,8L - -#define SN_setct_AuthRevReqBaggage "setct-AuthRevReqBaggage" -#define NID_setct_AuthRevReqBaggage 528 -#define OBJ_setct_AuthRevReqBaggage OBJ_set_ctype,9L - -#define SN_setct_AuthRevResBaggage "setct-AuthRevResBaggage" -#define NID_setct_AuthRevResBaggage 529 -#define OBJ_setct_AuthRevResBaggage OBJ_set_ctype,10L - -#define SN_setct_CapTokenSeq "setct-CapTokenSeq" -#define NID_setct_CapTokenSeq 530 -#define OBJ_setct_CapTokenSeq OBJ_set_ctype,11L - -#define SN_setct_PInitResData "setct-PInitResData" -#define NID_setct_PInitResData 531 -#define OBJ_setct_PInitResData OBJ_set_ctype,12L - -#define SN_setct_PI_TBS "setct-PI-TBS" -#define NID_setct_PI_TBS 532 -#define OBJ_setct_PI_TBS OBJ_set_ctype,13L - -#define SN_setct_PResData "setct-PResData" -#define NID_setct_PResData 533 -#define OBJ_setct_PResData OBJ_set_ctype,14L - -#define SN_setct_AuthReqTBS "setct-AuthReqTBS" -#define NID_setct_AuthReqTBS 534 -#define OBJ_setct_AuthReqTBS OBJ_set_ctype,16L - -#define SN_setct_AuthResTBS "setct-AuthResTBS" -#define NID_setct_AuthResTBS 535 -#define OBJ_setct_AuthResTBS OBJ_set_ctype,17L - -#define SN_setct_AuthResTBSX "setct-AuthResTBSX" -#define NID_setct_AuthResTBSX 536 -#define OBJ_setct_AuthResTBSX OBJ_set_ctype,18L - -#define SN_setct_AuthTokenTBS "setct-AuthTokenTBS" -#define NID_setct_AuthTokenTBS 537 -#define OBJ_setct_AuthTokenTBS OBJ_set_ctype,19L - -#define SN_setct_CapTokenData "setct-CapTokenData" -#define NID_setct_CapTokenData 538 -#define OBJ_setct_CapTokenData OBJ_set_ctype,20L - -#define SN_setct_CapTokenTBS "setct-CapTokenTBS" -#define NID_setct_CapTokenTBS 539 -#define OBJ_setct_CapTokenTBS OBJ_set_ctype,21L - -#define SN_setct_AcqCardCodeMsg "setct-AcqCardCodeMsg" -#define NID_setct_AcqCardCodeMsg 540 -#define OBJ_setct_AcqCardCodeMsg OBJ_set_ctype,22L - -#define SN_setct_AuthRevReqTBS "setct-AuthRevReqTBS" -#define NID_setct_AuthRevReqTBS 541 -#define OBJ_setct_AuthRevReqTBS OBJ_set_ctype,23L - -#define SN_setct_AuthRevResData "setct-AuthRevResData" -#define NID_setct_AuthRevResData 542 -#define OBJ_setct_AuthRevResData OBJ_set_ctype,24L - -#define SN_setct_AuthRevResTBS "setct-AuthRevResTBS" -#define NID_setct_AuthRevResTBS 543 -#define OBJ_setct_AuthRevResTBS OBJ_set_ctype,25L - -#define SN_setct_CapReqTBS "setct-CapReqTBS" -#define NID_setct_CapReqTBS 544 -#define OBJ_setct_CapReqTBS OBJ_set_ctype,26L - -#define SN_setct_CapReqTBSX "setct-CapReqTBSX" -#define NID_setct_CapReqTBSX 545 -#define OBJ_setct_CapReqTBSX OBJ_set_ctype,27L - -#define SN_setct_CapResData "setct-CapResData" -#define NID_setct_CapResData 546 -#define OBJ_setct_CapResData OBJ_set_ctype,28L - -#define SN_setct_CapRevReqTBS "setct-CapRevReqTBS" -#define NID_setct_CapRevReqTBS 547 -#define OBJ_setct_CapRevReqTBS OBJ_set_ctype,29L - -#define SN_setct_CapRevReqTBSX "setct-CapRevReqTBSX" -#define NID_setct_CapRevReqTBSX 548 -#define OBJ_setct_CapRevReqTBSX OBJ_set_ctype,30L - -#define SN_setct_CapRevResData "setct-CapRevResData" -#define NID_setct_CapRevResData 549 -#define OBJ_setct_CapRevResData OBJ_set_ctype,31L - -#define SN_setct_CredReqTBS "setct-CredReqTBS" -#define NID_setct_CredReqTBS 550 -#define OBJ_setct_CredReqTBS OBJ_set_ctype,32L - -#define SN_setct_CredReqTBSX "setct-CredReqTBSX" -#define NID_setct_CredReqTBSX 551 -#define OBJ_setct_CredReqTBSX OBJ_set_ctype,33L - -#define SN_setct_CredResData "setct-CredResData" -#define NID_setct_CredResData 552 -#define OBJ_setct_CredResData OBJ_set_ctype,34L - -#define SN_setct_CredRevReqTBS "setct-CredRevReqTBS" -#define NID_setct_CredRevReqTBS 553 -#define OBJ_setct_CredRevReqTBS OBJ_set_ctype,35L - -#define SN_setct_CredRevReqTBSX "setct-CredRevReqTBSX" -#define NID_setct_CredRevReqTBSX 554 -#define OBJ_setct_CredRevReqTBSX OBJ_set_ctype,36L - -#define SN_setct_CredRevResData "setct-CredRevResData" -#define NID_setct_CredRevResData 555 -#define OBJ_setct_CredRevResData OBJ_set_ctype,37L - -#define SN_setct_PCertReqData "setct-PCertReqData" -#define NID_setct_PCertReqData 556 -#define OBJ_setct_PCertReqData OBJ_set_ctype,38L - -#define SN_setct_PCertResTBS "setct-PCertResTBS" -#define NID_setct_PCertResTBS 557 -#define OBJ_setct_PCertResTBS OBJ_set_ctype,39L - -#define SN_setct_BatchAdminReqData "setct-BatchAdminReqData" -#define NID_setct_BatchAdminReqData 558 -#define OBJ_setct_BatchAdminReqData OBJ_set_ctype,40L - -#define SN_setct_BatchAdminResData "setct-BatchAdminResData" -#define NID_setct_BatchAdminResData 559 -#define OBJ_setct_BatchAdminResData OBJ_set_ctype,41L - -#define SN_setct_CardCInitResTBS "setct-CardCInitResTBS" -#define NID_setct_CardCInitResTBS 560 -#define OBJ_setct_CardCInitResTBS OBJ_set_ctype,42L - -#define SN_setct_MeAqCInitResTBS "setct-MeAqCInitResTBS" -#define NID_setct_MeAqCInitResTBS 561 -#define OBJ_setct_MeAqCInitResTBS OBJ_set_ctype,43L - -#define SN_setct_RegFormResTBS "setct-RegFormResTBS" -#define NID_setct_RegFormResTBS 562 -#define OBJ_setct_RegFormResTBS OBJ_set_ctype,44L - -#define SN_setct_CertReqData "setct-CertReqData" -#define NID_setct_CertReqData 563 -#define OBJ_setct_CertReqData OBJ_set_ctype,45L - -#define SN_setct_CertReqTBS "setct-CertReqTBS" -#define NID_setct_CertReqTBS 564 -#define OBJ_setct_CertReqTBS OBJ_set_ctype,46L - -#define SN_setct_CertResData "setct-CertResData" -#define NID_setct_CertResData 565 -#define OBJ_setct_CertResData OBJ_set_ctype,47L - -#define SN_setct_CertInqReqTBS "setct-CertInqReqTBS" -#define NID_setct_CertInqReqTBS 566 -#define OBJ_setct_CertInqReqTBS OBJ_set_ctype,48L - -#define SN_setct_ErrorTBS "setct-ErrorTBS" -#define NID_setct_ErrorTBS 567 -#define OBJ_setct_ErrorTBS OBJ_set_ctype,49L - -#define SN_setct_PIDualSignedTBE "setct-PIDualSignedTBE" -#define NID_setct_PIDualSignedTBE 568 -#define OBJ_setct_PIDualSignedTBE OBJ_set_ctype,50L - -#define SN_setct_PIUnsignedTBE "setct-PIUnsignedTBE" -#define NID_setct_PIUnsignedTBE 569 -#define OBJ_setct_PIUnsignedTBE OBJ_set_ctype,51L - -#define SN_setct_AuthReqTBE "setct-AuthReqTBE" -#define NID_setct_AuthReqTBE 570 -#define OBJ_setct_AuthReqTBE OBJ_set_ctype,52L - -#define SN_setct_AuthResTBE "setct-AuthResTBE" -#define NID_setct_AuthResTBE 571 -#define OBJ_setct_AuthResTBE OBJ_set_ctype,53L - -#define SN_setct_AuthResTBEX "setct-AuthResTBEX" -#define NID_setct_AuthResTBEX 572 -#define OBJ_setct_AuthResTBEX OBJ_set_ctype,54L - -#define SN_setct_AuthTokenTBE "setct-AuthTokenTBE" -#define NID_setct_AuthTokenTBE 573 -#define OBJ_setct_AuthTokenTBE OBJ_set_ctype,55L - -#define SN_setct_CapTokenTBE "setct-CapTokenTBE" -#define NID_setct_CapTokenTBE 574 -#define OBJ_setct_CapTokenTBE OBJ_set_ctype,56L - -#define SN_setct_CapTokenTBEX "setct-CapTokenTBEX" -#define NID_setct_CapTokenTBEX 575 -#define OBJ_setct_CapTokenTBEX OBJ_set_ctype,57L - -#define SN_setct_AcqCardCodeMsgTBE "setct-AcqCardCodeMsgTBE" -#define NID_setct_AcqCardCodeMsgTBE 576 -#define OBJ_setct_AcqCardCodeMsgTBE OBJ_set_ctype,58L - -#define SN_setct_AuthRevReqTBE "setct-AuthRevReqTBE" -#define NID_setct_AuthRevReqTBE 577 -#define OBJ_setct_AuthRevReqTBE OBJ_set_ctype,59L - -#define SN_setct_AuthRevResTBE "setct-AuthRevResTBE" -#define NID_setct_AuthRevResTBE 578 -#define OBJ_setct_AuthRevResTBE OBJ_set_ctype,60L - -#define SN_setct_AuthRevResTBEB "setct-AuthRevResTBEB" -#define NID_setct_AuthRevResTBEB 579 -#define OBJ_setct_AuthRevResTBEB OBJ_set_ctype,61L - -#define SN_setct_CapReqTBE "setct-CapReqTBE" -#define NID_setct_CapReqTBE 580 -#define OBJ_setct_CapReqTBE OBJ_set_ctype,62L - -#define SN_setct_CapReqTBEX "setct-CapReqTBEX" -#define NID_setct_CapReqTBEX 581 -#define OBJ_setct_CapReqTBEX OBJ_set_ctype,63L - -#define SN_setct_CapResTBE "setct-CapResTBE" -#define NID_setct_CapResTBE 582 -#define OBJ_setct_CapResTBE OBJ_set_ctype,64L - -#define SN_setct_CapRevReqTBE "setct-CapRevReqTBE" -#define NID_setct_CapRevReqTBE 583 -#define OBJ_setct_CapRevReqTBE OBJ_set_ctype,65L - -#define SN_setct_CapRevReqTBEX "setct-CapRevReqTBEX" -#define NID_setct_CapRevReqTBEX 584 -#define OBJ_setct_CapRevReqTBEX OBJ_set_ctype,66L - -#define SN_setct_CapRevResTBE "setct-CapRevResTBE" -#define NID_setct_CapRevResTBE 585 -#define OBJ_setct_CapRevResTBE OBJ_set_ctype,67L - -#define SN_setct_CredReqTBE "setct-CredReqTBE" -#define NID_setct_CredReqTBE 586 -#define OBJ_setct_CredReqTBE OBJ_set_ctype,68L - -#define SN_setct_CredReqTBEX "setct-CredReqTBEX" -#define NID_setct_CredReqTBEX 587 -#define OBJ_setct_CredReqTBEX OBJ_set_ctype,69L - -#define SN_setct_CredResTBE "setct-CredResTBE" -#define NID_setct_CredResTBE 588 -#define OBJ_setct_CredResTBE OBJ_set_ctype,70L - -#define SN_setct_CredRevReqTBE "setct-CredRevReqTBE" -#define NID_setct_CredRevReqTBE 589 -#define OBJ_setct_CredRevReqTBE OBJ_set_ctype,71L - -#define SN_setct_CredRevReqTBEX "setct-CredRevReqTBEX" -#define NID_setct_CredRevReqTBEX 590 -#define OBJ_setct_CredRevReqTBEX OBJ_set_ctype,72L - -#define SN_setct_CredRevResTBE "setct-CredRevResTBE" -#define NID_setct_CredRevResTBE 591 -#define OBJ_setct_CredRevResTBE OBJ_set_ctype,73L - -#define SN_setct_BatchAdminReqTBE "setct-BatchAdminReqTBE" -#define NID_setct_BatchAdminReqTBE 592 -#define OBJ_setct_BatchAdminReqTBE OBJ_set_ctype,74L - -#define SN_setct_BatchAdminResTBE "setct-BatchAdminResTBE" -#define NID_setct_BatchAdminResTBE 593 -#define OBJ_setct_BatchAdminResTBE OBJ_set_ctype,75L - -#define SN_setct_RegFormReqTBE "setct-RegFormReqTBE" -#define NID_setct_RegFormReqTBE 594 -#define OBJ_setct_RegFormReqTBE OBJ_set_ctype,76L - -#define SN_setct_CertReqTBE "setct-CertReqTBE" -#define NID_setct_CertReqTBE 595 -#define OBJ_setct_CertReqTBE OBJ_set_ctype,77L - -#define SN_setct_CertReqTBEX "setct-CertReqTBEX" -#define NID_setct_CertReqTBEX 596 -#define OBJ_setct_CertReqTBEX OBJ_set_ctype,78L - -#define SN_setct_CertResTBE "setct-CertResTBE" -#define NID_setct_CertResTBE 597 -#define OBJ_setct_CertResTBE OBJ_set_ctype,79L - -#define SN_setct_CRLNotificationTBS "setct-CRLNotificationTBS" -#define NID_setct_CRLNotificationTBS 598 -#define OBJ_setct_CRLNotificationTBS OBJ_set_ctype,80L - -#define SN_setct_CRLNotificationResTBS "setct-CRLNotificationResTBS" -#define NID_setct_CRLNotificationResTBS 599 -#define OBJ_setct_CRLNotificationResTBS OBJ_set_ctype,81L - -#define SN_setct_BCIDistributionTBS "setct-BCIDistributionTBS" -#define NID_setct_BCIDistributionTBS 600 -#define OBJ_setct_BCIDistributionTBS OBJ_set_ctype,82L - -#define SN_setext_genCrypt "setext-genCrypt" -#define LN_setext_genCrypt "generic cryptogram" -#define NID_setext_genCrypt 601 -#define OBJ_setext_genCrypt OBJ_set_msgExt,1L - -#define SN_setext_miAuth "setext-miAuth" -#define LN_setext_miAuth "merchant initiated auth" -#define NID_setext_miAuth 602 -#define OBJ_setext_miAuth OBJ_set_msgExt,3L - -#define SN_setext_pinSecure "setext-pinSecure" -#define NID_setext_pinSecure 603 -#define OBJ_setext_pinSecure OBJ_set_msgExt,4L - -#define SN_setext_pinAny "setext-pinAny" -#define NID_setext_pinAny 604 -#define OBJ_setext_pinAny OBJ_set_msgExt,5L - -#define SN_setext_track2 "setext-track2" -#define NID_setext_track2 605 -#define OBJ_setext_track2 OBJ_set_msgExt,7L - -#define SN_setext_cv "setext-cv" -#define LN_setext_cv "additional verification" -#define NID_setext_cv 606 -#define OBJ_setext_cv OBJ_set_msgExt,8L - -#define SN_set_policy_root "set-policy-root" -#define NID_set_policy_root 607 -#define OBJ_set_policy_root OBJ_set_policy,0L - -#define SN_setCext_hashedRoot "setCext-hashedRoot" -#define NID_setCext_hashedRoot 608 -#define OBJ_setCext_hashedRoot OBJ_set_certExt,0L - -#define SN_setCext_certType "setCext-certType" -#define NID_setCext_certType 609 -#define OBJ_setCext_certType OBJ_set_certExt,1L - -#define SN_setCext_merchData "setCext-merchData" -#define NID_setCext_merchData 610 -#define OBJ_setCext_merchData OBJ_set_certExt,2L - -#define SN_setCext_cCertRequired "setCext-cCertRequired" -#define NID_setCext_cCertRequired 611 -#define OBJ_setCext_cCertRequired OBJ_set_certExt,3L - -#define SN_setCext_tunneling "setCext-tunneling" -#define NID_setCext_tunneling 612 -#define OBJ_setCext_tunneling OBJ_set_certExt,4L - -#define SN_setCext_setExt "setCext-setExt" -#define NID_setCext_setExt 613 -#define OBJ_setCext_setExt OBJ_set_certExt,5L - -#define SN_setCext_setQualf "setCext-setQualf" -#define NID_setCext_setQualf 614 -#define OBJ_setCext_setQualf OBJ_set_certExt,6L - -#define SN_setCext_PGWYcapabilities "setCext-PGWYcapabilities" -#define NID_setCext_PGWYcapabilities 615 -#define OBJ_setCext_PGWYcapabilities OBJ_set_certExt,7L - -#define SN_setCext_TokenIdentifier "setCext-TokenIdentifier" -#define NID_setCext_TokenIdentifier 616 -#define OBJ_setCext_TokenIdentifier OBJ_set_certExt,8L - -#define SN_setCext_Track2Data "setCext-Track2Data" -#define NID_setCext_Track2Data 617 -#define OBJ_setCext_Track2Data OBJ_set_certExt,9L - -#define SN_setCext_TokenType "setCext-TokenType" -#define NID_setCext_TokenType 618 -#define OBJ_setCext_TokenType OBJ_set_certExt,10L - -#define SN_setCext_IssuerCapabilities "setCext-IssuerCapabilities" -#define NID_setCext_IssuerCapabilities 619 -#define OBJ_setCext_IssuerCapabilities OBJ_set_certExt,11L - -#define SN_setAttr_Cert "setAttr-Cert" -#define NID_setAttr_Cert 620 -#define OBJ_setAttr_Cert OBJ_set_attr,0L - -#define SN_setAttr_PGWYcap "setAttr-PGWYcap" -#define LN_setAttr_PGWYcap "payment gateway capabilities" -#define NID_setAttr_PGWYcap 621 -#define OBJ_setAttr_PGWYcap OBJ_set_attr,1L - -#define SN_setAttr_TokenType "setAttr-TokenType" -#define NID_setAttr_TokenType 622 -#define OBJ_setAttr_TokenType OBJ_set_attr,2L - -#define SN_setAttr_IssCap "setAttr-IssCap" -#define LN_setAttr_IssCap "issuer capabilities" -#define NID_setAttr_IssCap 623 -#define OBJ_setAttr_IssCap OBJ_set_attr,3L - -#define SN_set_rootKeyThumb "set-rootKeyThumb" -#define NID_set_rootKeyThumb 624 -#define OBJ_set_rootKeyThumb OBJ_setAttr_Cert,0L - -#define SN_set_addPolicy "set-addPolicy" -#define NID_set_addPolicy 625 -#define OBJ_set_addPolicy OBJ_setAttr_Cert,1L - -#define SN_setAttr_Token_EMV "setAttr-Token-EMV" -#define NID_setAttr_Token_EMV 626 -#define OBJ_setAttr_Token_EMV OBJ_setAttr_TokenType,1L - -#define SN_setAttr_Token_B0Prime "setAttr-Token-B0Prime" -#define NID_setAttr_Token_B0Prime 627 -#define OBJ_setAttr_Token_B0Prime OBJ_setAttr_TokenType,2L - -#define SN_setAttr_IssCap_CVM "setAttr-IssCap-CVM" -#define NID_setAttr_IssCap_CVM 628 -#define OBJ_setAttr_IssCap_CVM OBJ_setAttr_IssCap,3L - -#define SN_setAttr_IssCap_T2 "setAttr-IssCap-T2" -#define NID_setAttr_IssCap_T2 629 -#define OBJ_setAttr_IssCap_T2 OBJ_setAttr_IssCap,4L - -#define SN_setAttr_IssCap_Sig "setAttr-IssCap-Sig" -#define NID_setAttr_IssCap_Sig 630 -#define OBJ_setAttr_IssCap_Sig OBJ_setAttr_IssCap,5L - -#define SN_setAttr_GenCryptgrm "setAttr-GenCryptgrm" -#define LN_setAttr_GenCryptgrm "generate cryptogram" -#define NID_setAttr_GenCryptgrm 631 -#define OBJ_setAttr_GenCryptgrm OBJ_setAttr_IssCap_CVM,1L - -#define SN_setAttr_T2Enc "setAttr-T2Enc" -#define LN_setAttr_T2Enc "encrypted track 2" -#define NID_setAttr_T2Enc 632 -#define OBJ_setAttr_T2Enc OBJ_setAttr_IssCap_T2,1L - -#define SN_setAttr_T2cleartxt "setAttr-T2cleartxt" -#define LN_setAttr_T2cleartxt "cleartext track 2" -#define NID_setAttr_T2cleartxt 633 -#define OBJ_setAttr_T2cleartxt OBJ_setAttr_IssCap_T2,2L - -#define SN_setAttr_TokICCsig "setAttr-TokICCsig" -#define LN_setAttr_TokICCsig "ICC or token signature" -#define NID_setAttr_TokICCsig 634 -#define OBJ_setAttr_TokICCsig OBJ_setAttr_IssCap_Sig,1L - -#define SN_setAttr_SecDevSig "setAttr-SecDevSig" -#define LN_setAttr_SecDevSig "secure device signature" -#define NID_setAttr_SecDevSig 635 -#define OBJ_setAttr_SecDevSig OBJ_setAttr_IssCap_Sig,2L - -#define SN_set_brand_IATA_ATA "set-brand-IATA-ATA" -#define NID_set_brand_IATA_ATA 636 -#define OBJ_set_brand_IATA_ATA OBJ_set_brand,1L - -#define SN_set_brand_Diners "set-brand-Diners" -#define NID_set_brand_Diners 637 -#define OBJ_set_brand_Diners OBJ_set_brand,30L - -#define SN_set_brand_AmericanExpress "set-brand-AmericanExpress" -#define NID_set_brand_AmericanExpress 638 -#define OBJ_set_brand_AmericanExpress OBJ_set_brand,34L - -#define SN_set_brand_JCB "set-brand-JCB" -#define NID_set_brand_JCB 639 -#define OBJ_set_brand_JCB OBJ_set_brand,35L - -#define SN_set_brand_Visa "set-brand-Visa" -#define NID_set_brand_Visa 640 -#define OBJ_set_brand_Visa OBJ_set_brand,4L - -#define SN_set_brand_MasterCard "set-brand-MasterCard" -#define NID_set_brand_MasterCard 641 -#define OBJ_set_brand_MasterCard OBJ_set_brand,5L - -#define SN_set_brand_Novus "set-brand-Novus" -#define NID_set_brand_Novus 642 -#define OBJ_set_brand_Novus OBJ_set_brand,6011L - -#define SN_des_cdmf "DES-CDMF" -#define LN_des_cdmf "des-cdmf" -#define NID_des_cdmf 643 -#define OBJ_des_cdmf OBJ_rsadsi,3L,10L - -#define SN_rsaOAEPEncryptionSET "rsaOAEPEncryptionSET" -#define NID_rsaOAEPEncryptionSET 644 -#define OBJ_rsaOAEPEncryptionSET OBJ_rsadsi,1L,1L,6L - -#define SN_ipsec3 "Oakley-EC2N-3" -#define LN_ipsec3 "ipsec3" -#define NID_ipsec3 749 - -#define SN_ipsec4 "Oakley-EC2N-4" -#define LN_ipsec4 "ipsec4" -#define NID_ipsec4 750 - -#define SN_whirlpool "whirlpool" -#define NID_whirlpool 804 -#define OBJ_whirlpool OBJ_iso,0L,10118L,3L,0L,55L - -#define SN_cryptopro "cryptopro" -#define NID_cryptopro 805 -#define OBJ_cryptopro OBJ_member_body,643L,2L,2L - -#define SN_cryptocom "cryptocom" -#define NID_cryptocom 806 -#define OBJ_cryptocom OBJ_member_body,643L,2L,9L - -#define SN_id_tc26 "id-tc26" -#define NID_id_tc26 974 -#define OBJ_id_tc26 OBJ_member_body,643L,7L,1L - -#define SN_id_GostR3411_94_with_GostR3410_2001 "id-GostR3411-94-with-GostR3410-2001" -#define LN_id_GostR3411_94_with_GostR3410_2001 "GOST R 34.11-94 with GOST R 34.10-2001" -#define NID_id_GostR3411_94_with_GostR3410_2001 807 -#define OBJ_id_GostR3411_94_with_GostR3410_2001 OBJ_cryptopro,3L - -#define SN_id_GostR3411_94_with_GostR3410_94 "id-GostR3411-94-with-GostR3410-94" -#define LN_id_GostR3411_94_with_GostR3410_94 "GOST R 34.11-94 with GOST R 34.10-94" -#define NID_id_GostR3411_94_with_GostR3410_94 808 -#define OBJ_id_GostR3411_94_with_GostR3410_94 OBJ_cryptopro,4L - -#define SN_id_GostR3411_94 "md_gost94" -#define LN_id_GostR3411_94 "GOST R 34.11-94" -#define NID_id_GostR3411_94 809 -#define OBJ_id_GostR3411_94 OBJ_cryptopro,9L - -#define SN_id_HMACGostR3411_94 "id-HMACGostR3411-94" -#define LN_id_HMACGostR3411_94 "HMAC GOST 34.11-94" -#define NID_id_HMACGostR3411_94 810 -#define OBJ_id_HMACGostR3411_94 OBJ_cryptopro,10L - -#define SN_id_GostR3410_2001 "gost2001" -#define LN_id_GostR3410_2001 "GOST R 34.10-2001" -#define NID_id_GostR3410_2001 811 -#define OBJ_id_GostR3410_2001 OBJ_cryptopro,19L - -#define SN_id_GostR3410_94 "gost94" -#define LN_id_GostR3410_94 "GOST R 34.10-94" -#define NID_id_GostR3410_94 812 -#define OBJ_id_GostR3410_94 OBJ_cryptopro,20L - -#define SN_id_Gost28147_89 "gost89" -#define LN_id_Gost28147_89 "GOST 28147-89" -#define NID_id_Gost28147_89 813 -#define OBJ_id_Gost28147_89 OBJ_cryptopro,21L - -#define SN_gost89_cnt "gost89-cnt" -#define NID_gost89_cnt 814 - -#define SN_gost89_cnt_12 "gost89-cnt-12" -#define NID_gost89_cnt_12 975 - -#define SN_gost89_cbc "gost89-cbc" -#define NID_gost89_cbc 1009 - -#define SN_gost89_ecb "gost89-ecb" -#define NID_gost89_ecb 1010 - -#define SN_gost89_ctr "gost89-ctr" -#define NID_gost89_ctr 1011 - -#define SN_id_Gost28147_89_MAC "gost-mac" -#define LN_id_Gost28147_89_MAC "GOST 28147-89 MAC" -#define NID_id_Gost28147_89_MAC 815 -#define OBJ_id_Gost28147_89_MAC OBJ_cryptopro,22L - -#define SN_gost_mac_12 "gost-mac-12" -#define NID_gost_mac_12 976 - -#define SN_id_GostR3411_94_prf "prf-gostr3411-94" -#define LN_id_GostR3411_94_prf "GOST R 34.11-94 PRF" -#define NID_id_GostR3411_94_prf 816 -#define OBJ_id_GostR3411_94_prf OBJ_cryptopro,23L - -#define SN_id_GostR3410_2001DH "id-GostR3410-2001DH" -#define LN_id_GostR3410_2001DH "GOST R 34.10-2001 DH" -#define NID_id_GostR3410_2001DH 817 -#define OBJ_id_GostR3410_2001DH OBJ_cryptopro,98L - -#define SN_id_GostR3410_94DH "id-GostR3410-94DH" -#define LN_id_GostR3410_94DH "GOST R 34.10-94 DH" -#define NID_id_GostR3410_94DH 818 -#define OBJ_id_GostR3410_94DH OBJ_cryptopro,99L - -#define SN_id_Gost28147_89_CryptoPro_KeyMeshing "id-Gost28147-89-CryptoPro-KeyMeshing" -#define NID_id_Gost28147_89_CryptoPro_KeyMeshing 819 -#define OBJ_id_Gost28147_89_CryptoPro_KeyMeshing OBJ_cryptopro,14L,1L - -#define SN_id_Gost28147_89_None_KeyMeshing "id-Gost28147-89-None-KeyMeshing" -#define NID_id_Gost28147_89_None_KeyMeshing 820 -#define OBJ_id_Gost28147_89_None_KeyMeshing OBJ_cryptopro,14L,0L - -#define SN_id_GostR3411_94_TestParamSet "id-GostR3411-94-TestParamSet" -#define NID_id_GostR3411_94_TestParamSet 821 -#define OBJ_id_GostR3411_94_TestParamSet OBJ_cryptopro,30L,0L - -#define SN_id_GostR3411_94_CryptoProParamSet "id-GostR3411-94-CryptoProParamSet" -#define NID_id_GostR3411_94_CryptoProParamSet 822 -#define OBJ_id_GostR3411_94_CryptoProParamSet OBJ_cryptopro,30L,1L - -#define SN_id_Gost28147_89_TestParamSet "id-Gost28147-89-TestParamSet" -#define NID_id_Gost28147_89_TestParamSet 823 -#define OBJ_id_Gost28147_89_TestParamSet OBJ_cryptopro,31L,0L - -#define SN_id_Gost28147_89_CryptoPro_A_ParamSet "id-Gost28147-89-CryptoPro-A-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_A_ParamSet 824 -#define OBJ_id_Gost28147_89_CryptoPro_A_ParamSet OBJ_cryptopro,31L,1L - -#define SN_id_Gost28147_89_CryptoPro_B_ParamSet "id-Gost28147-89-CryptoPro-B-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_B_ParamSet 825 -#define OBJ_id_Gost28147_89_CryptoPro_B_ParamSet OBJ_cryptopro,31L,2L - -#define SN_id_Gost28147_89_CryptoPro_C_ParamSet "id-Gost28147-89-CryptoPro-C-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_C_ParamSet 826 -#define OBJ_id_Gost28147_89_CryptoPro_C_ParamSet OBJ_cryptopro,31L,3L - -#define SN_id_Gost28147_89_CryptoPro_D_ParamSet "id-Gost28147-89-CryptoPro-D-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_D_ParamSet 827 -#define OBJ_id_Gost28147_89_CryptoPro_D_ParamSet OBJ_cryptopro,31L,4L - -#define SN_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet 828 -#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet OBJ_cryptopro,31L,5L - -#define SN_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet 829 -#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet OBJ_cryptopro,31L,6L - -#define SN_id_Gost28147_89_CryptoPro_RIC_1_ParamSet "id-Gost28147-89-CryptoPro-RIC-1-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_RIC_1_ParamSet 830 -#define OBJ_id_Gost28147_89_CryptoPro_RIC_1_ParamSet OBJ_cryptopro,31L,7L - -#define SN_id_GostR3410_94_TestParamSet "id-GostR3410-94-TestParamSet" -#define NID_id_GostR3410_94_TestParamSet 831 -#define OBJ_id_GostR3410_94_TestParamSet OBJ_cryptopro,32L,0L - -#define SN_id_GostR3410_94_CryptoPro_A_ParamSet "id-GostR3410-94-CryptoPro-A-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_A_ParamSet 832 -#define OBJ_id_GostR3410_94_CryptoPro_A_ParamSet OBJ_cryptopro,32L,2L - -#define SN_id_GostR3410_94_CryptoPro_B_ParamSet "id-GostR3410-94-CryptoPro-B-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_B_ParamSet 833 -#define OBJ_id_GostR3410_94_CryptoPro_B_ParamSet OBJ_cryptopro,32L,3L - -#define SN_id_GostR3410_94_CryptoPro_C_ParamSet "id-GostR3410-94-CryptoPro-C-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_C_ParamSet 834 -#define OBJ_id_GostR3410_94_CryptoPro_C_ParamSet OBJ_cryptopro,32L,4L - -#define SN_id_GostR3410_94_CryptoPro_D_ParamSet "id-GostR3410-94-CryptoPro-D-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_D_ParamSet 835 -#define OBJ_id_GostR3410_94_CryptoPro_D_ParamSet OBJ_cryptopro,32L,5L - -#define SN_id_GostR3410_94_CryptoPro_XchA_ParamSet "id-GostR3410-94-CryptoPro-XchA-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchA_ParamSet 836 -#define OBJ_id_GostR3410_94_CryptoPro_XchA_ParamSet OBJ_cryptopro,33L,1L - -#define SN_id_GostR3410_94_CryptoPro_XchB_ParamSet "id-GostR3410-94-CryptoPro-XchB-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchB_ParamSet 837 -#define OBJ_id_GostR3410_94_CryptoPro_XchB_ParamSet OBJ_cryptopro,33L,2L - -#define SN_id_GostR3410_94_CryptoPro_XchC_ParamSet "id-GostR3410-94-CryptoPro-XchC-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchC_ParamSet 838 -#define OBJ_id_GostR3410_94_CryptoPro_XchC_ParamSet OBJ_cryptopro,33L,3L - -#define SN_id_GostR3410_2001_TestParamSet "id-GostR3410-2001-TestParamSet" -#define NID_id_GostR3410_2001_TestParamSet 839 -#define OBJ_id_GostR3410_2001_TestParamSet OBJ_cryptopro,35L,0L - -#define SN_id_GostR3410_2001_CryptoPro_A_ParamSet "id-GostR3410-2001-CryptoPro-A-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_A_ParamSet 840 -#define OBJ_id_GostR3410_2001_CryptoPro_A_ParamSet OBJ_cryptopro,35L,1L - -#define SN_id_GostR3410_2001_CryptoPro_B_ParamSet "id-GostR3410-2001-CryptoPro-B-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_B_ParamSet 841 -#define OBJ_id_GostR3410_2001_CryptoPro_B_ParamSet OBJ_cryptopro,35L,2L - -#define SN_id_GostR3410_2001_CryptoPro_C_ParamSet "id-GostR3410-2001-CryptoPro-C-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_C_ParamSet 842 -#define OBJ_id_GostR3410_2001_CryptoPro_C_ParamSet OBJ_cryptopro,35L,3L - -#define SN_id_GostR3410_2001_CryptoPro_XchA_ParamSet "id-GostR3410-2001-CryptoPro-XchA-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet 843 -#define OBJ_id_GostR3410_2001_CryptoPro_XchA_ParamSet OBJ_cryptopro,36L,0L - -#define SN_id_GostR3410_2001_CryptoPro_XchB_ParamSet "id-GostR3410-2001-CryptoPro-XchB-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet 844 -#define OBJ_id_GostR3410_2001_CryptoPro_XchB_ParamSet OBJ_cryptopro,36L,1L - -#define SN_id_GostR3410_94_a "id-GostR3410-94-a" -#define NID_id_GostR3410_94_a 845 -#define OBJ_id_GostR3410_94_a OBJ_id_GostR3410_94,1L - -#define SN_id_GostR3410_94_aBis "id-GostR3410-94-aBis" -#define NID_id_GostR3410_94_aBis 846 -#define OBJ_id_GostR3410_94_aBis OBJ_id_GostR3410_94,2L - -#define SN_id_GostR3410_94_b "id-GostR3410-94-b" -#define NID_id_GostR3410_94_b 847 -#define OBJ_id_GostR3410_94_b OBJ_id_GostR3410_94,3L - -#define SN_id_GostR3410_94_bBis "id-GostR3410-94-bBis" -#define NID_id_GostR3410_94_bBis 848 -#define OBJ_id_GostR3410_94_bBis OBJ_id_GostR3410_94,4L - -#define SN_id_Gost28147_89_cc "id-Gost28147-89-cc" -#define LN_id_Gost28147_89_cc "GOST 28147-89 Cryptocom ParamSet" -#define NID_id_Gost28147_89_cc 849 -#define OBJ_id_Gost28147_89_cc OBJ_cryptocom,1L,6L,1L - -#define SN_id_GostR3410_94_cc "gost94cc" -#define LN_id_GostR3410_94_cc "GOST 34.10-94 Cryptocom" -#define NID_id_GostR3410_94_cc 850 -#define OBJ_id_GostR3410_94_cc OBJ_cryptocom,1L,5L,3L - -#define SN_id_GostR3410_2001_cc "gost2001cc" -#define LN_id_GostR3410_2001_cc "GOST 34.10-2001 Cryptocom" -#define NID_id_GostR3410_2001_cc 851 -#define OBJ_id_GostR3410_2001_cc OBJ_cryptocom,1L,5L,4L - -#define SN_id_GostR3411_94_with_GostR3410_94_cc "id-GostR3411-94-with-GostR3410-94-cc" -#define LN_id_GostR3411_94_with_GostR3410_94_cc "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom" -#define NID_id_GostR3411_94_with_GostR3410_94_cc 852 -#define OBJ_id_GostR3411_94_with_GostR3410_94_cc OBJ_cryptocom,1L,3L,3L - -#define SN_id_GostR3411_94_with_GostR3410_2001_cc "id-GostR3411-94-with-GostR3410-2001-cc" -#define LN_id_GostR3411_94_with_GostR3410_2001_cc "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom" -#define NID_id_GostR3411_94_with_GostR3410_2001_cc 853 -#define OBJ_id_GostR3411_94_with_GostR3410_2001_cc OBJ_cryptocom,1L,3L,4L - -#define SN_id_GostR3410_2001_ParamSet_cc "id-GostR3410-2001-ParamSet-cc" -#define LN_id_GostR3410_2001_ParamSet_cc "GOST R 3410-2001 Parameter Set Cryptocom" -#define NID_id_GostR3410_2001_ParamSet_cc 854 -#define OBJ_id_GostR3410_2001_ParamSet_cc OBJ_cryptocom,1L,8L,1L - -#define SN_id_tc26_algorithms "id-tc26-algorithms" -#define NID_id_tc26_algorithms 977 -#define OBJ_id_tc26_algorithms OBJ_id_tc26,1L - -#define SN_id_tc26_sign "id-tc26-sign" -#define NID_id_tc26_sign 978 -#define OBJ_id_tc26_sign OBJ_id_tc26_algorithms,1L - -#define SN_id_GostR3410_2012_256 "gost2012_256" -#define LN_id_GostR3410_2012_256 "GOST R 34.10-2012 with 256 bit modulus" -#define NID_id_GostR3410_2012_256 979 -#define OBJ_id_GostR3410_2012_256 OBJ_id_tc26_sign,1L - -#define SN_id_GostR3410_2012_512 "gost2012_512" -#define LN_id_GostR3410_2012_512 "GOST R 34.10-2012 with 512 bit modulus" -#define NID_id_GostR3410_2012_512 980 -#define OBJ_id_GostR3410_2012_512 OBJ_id_tc26_sign,2L - -#define SN_id_tc26_digest "id-tc26-digest" -#define NID_id_tc26_digest 981 -#define OBJ_id_tc26_digest OBJ_id_tc26_algorithms,2L - -#define SN_id_GostR3411_2012_256 "md_gost12_256" -#define LN_id_GostR3411_2012_256 "GOST R 34.11-2012 with 256 bit hash" -#define NID_id_GostR3411_2012_256 982 -#define OBJ_id_GostR3411_2012_256 OBJ_id_tc26_digest,2L - -#define SN_id_GostR3411_2012_512 "md_gost12_512" -#define LN_id_GostR3411_2012_512 "GOST R 34.11-2012 with 512 bit hash" -#define NID_id_GostR3411_2012_512 983 -#define OBJ_id_GostR3411_2012_512 OBJ_id_tc26_digest,3L - -#define SN_id_tc26_signwithdigest "id-tc26-signwithdigest" -#define NID_id_tc26_signwithdigest 984 -#define OBJ_id_tc26_signwithdigest OBJ_id_tc26_algorithms,3L - -#define SN_id_tc26_signwithdigest_gost3410_2012_256 "id-tc26-signwithdigest-gost3410-2012-256" -#define LN_id_tc26_signwithdigest_gost3410_2012_256 "GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)" -#define NID_id_tc26_signwithdigest_gost3410_2012_256 985 -#define OBJ_id_tc26_signwithdigest_gost3410_2012_256 OBJ_id_tc26_signwithdigest,2L - -#define SN_id_tc26_signwithdigest_gost3410_2012_512 "id-tc26-signwithdigest-gost3410-2012-512" -#define LN_id_tc26_signwithdigest_gost3410_2012_512 "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)" -#define NID_id_tc26_signwithdigest_gost3410_2012_512 986 -#define OBJ_id_tc26_signwithdigest_gost3410_2012_512 OBJ_id_tc26_signwithdigest,3L - -#define SN_id_tc26_mac "id-tc26-mac" -#define NID_id_tc26_mac 987 -#define OBJ_id_tc26_mac OBJ_id_tc26_algorithms,4L - -#define SN_id_tc26_hmac_gost_3411_2012_256 "id-tc26-hmac-gost-3411-2012-256" -#define LN_id_tc26_hmac_gost_3411_2012_256 "HMAC GOST 34.11-2012 256 bit" -#define NID_id_tc26_hmac_gost_3411_2012_256 988 -#define OBJ_id_tc26_hmac_gost_3411_2012_256 OBJ_id_tc26_mac,1L - -#define SN_id_tc26_hmac_gost_3411_2012_512 "id-tc26-hmac-gost-3411-2012-512" -#define LN_id_tc26_hmac_gost_3411_2012_512 "HMAC GOST 34.11-2012 512 bit" -#define NID_id_tc26_hmac_gost_3411_2012_512 989 -#define OBJ_id_tc26_hmac_gost_3411_2012_512 OBJ_id_tc26_mac,2L - -#define SN_id_tc26_cipher "id-tc26-cipher" -#define NID_id_tc26_cipher 990 -#define OBJ_id_tc26_cipher OBJ_id_tc26_algorithms,5L - -#define SN_id_tc26_cipher_gostr3412_2015_magma "id-tc26-cipher-gostr3412-2015-magma" -#define NID_id_tc26_cipher_gostr3412_2015_magma 1173 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma OBJ_id_tc26_cipher,1L - -#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm "id-tc26-cipher-gostr3412-2015-magma-ctracpkm" -#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm 1174 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_magma,1L - -#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-magma-ctracpkm-omac" -#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac 1175 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_magma,2L - -#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik "id-tc26-cipher-gostr3412-2015-kuznyechik" -#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik 1176 -#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik OBJ_id_tc26_cipher,2L - -#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm" -#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm 1177 -#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,1L - -#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm-omac" -#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac 1178 -#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,2L - -#define SN_id_tc26_agreement "id-tc26-agreement" -#define NID_id_tc26_agreement 991 -#define OBJ_id_tc26_agreement OBJ_id_tc26_algorithms,6L - -#define SN_id_tc26_agreement_gost_3410_2012_256 "id-tc26-agreement-gost-3410-2012-256" -#define NID_id_tc26_agreement_gost_3410_2012_256 992 -#define OBJ_id_tc26_agreement_gost_3410_2012_256 OBJ_id_tc26_agreement,1L - -#define SN_id_tc26_agreement_gost_3410_2012_512 "id-tc26-agreement-gost-3410-2012-512" -#define NID_id_tc26_agreement_gost_3410_2012_512 993 -#define OBJ_id_tc26_agreement_gost_3410_2012_512 OBJ_id_tc26_agreement,2L - -#define SN_id_tc26_wrap "id-tc26-wrap" -#define NID_id_tc26_wrap 1179 -#define OBJ_id_tc26_wrap OBJ_id_tc26_algorithms,7L - -#define SN_id_tc26_wrap_gostr3412_2015_magma "id-tc26-wrap-gostr3412-2015-magma" -#define NID_id_tc26_wrap_gostr3412_2015_magma 1180 -#define OBJ_id_tc26_wrap_gostr3412_2015_magma OBJ_id_tc26_wrap,1L - -#define SN_id_tc26_wrap_gostr3412_2015_magma_kexp15 "id-tc26-wrap-gostr3412-2015-magma-kexp15" -#define NID_id_tc26_wrap_gostr3412_2015_magma_kexp15 1181 -#define OBJ_id_tc26_wrap_gostr3412_2015_magma_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_magma,1L - -#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik "id-tc26-wrap-gostr3412-2015-kuznyechik" -#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik 1182 -#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik OBJ_id_tc26_wrap,2L - -#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 "id-tc26-wrap-gostr3412-2015-kuznyechik-kexp15" -#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 1183 -#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik,1L - -#define SN_id_tc26_constants "id-tc26-constants" -#define NID_id_tc26_constants 994 -#define OBJ_id_tc26_constants OBJ_id_tc26,2L - -#define SN_id_tc26_sign_constants "id-tc26-sign-constants" -#define NID_id_tc26_sign_constants 995 -#define OBJ_id_tc26_sign_constants OBJ_id_tc26_constants,1L - -#define SN_id_tc26_gost_3410_2012_256_constants "id-tc26-gost-3410-2012-256-constants" -#define NID_id_tc26_gost_3410_2012_256_constants 1147 -#define OBJ_id_tc26_gost_3410_2012_256_constants OBJ_id_tc26_sign_constants,1L - -#define SN_id_tc26_gost_3410_2012_256_paramSetA "id-tc26-gost-3410-2012-256-paramSetA" -#define LN_id_tc26_gost_3410_2012_256_paramSetA "GOST R 34.10-2012 (256 bit) ParamSet A" -#define NID_id_tc26_gost_3410_2012_256_paramSetA 1148 -#define OBJ_id_tc26_gost_3410_2012_256_paramSetA OBJ_id_tc26_gost_3410_2012_256_constants,1L - -#define SN_id_tc26_gost_3410_2012_256_paramSetB "id-tc26-gost-3410-2012-256-paramSetB" -#define LN_id_tc26_gost_3410_2012_256_paramSetB "GOST R 34.10-2012 (256 bit) ParamSet B" -#define NID_id_tc26_gost_3410_2012_256_paramSetB 1184 -#define OBJ_id_tc26_gost_3410_2012_256_paramSetB OBJ_id_tc26_gost_3410_2012_256_constants,2L - -#define SN_id_tc26_gost_3410_2012_256_paramSetC "id-tc26-gost-3410-2012-256-paramSetC" -#define LN_id_tc26_gost_3410_2012_256_paramSetC "GOST R 34.10-2012 (256 bit) ParamSet C" -#define NID_id_tc26_gost_3410_2012_256_paramSetC 1185 -#define OBJ_id_tc26_gost_3410_2012_256_paramSetC OBJ_id_tc26_gost_3410_2012_256_constants,3L - -#define SN_id_tc26_gost_3410_2012_256_paramSetD "id-tc26-gost-3410-2012-256-paramSetD" -#define LN_id_tc26_gost_3410_2012_256_paramSetD "GOST R 34.10-2012 (256 bit) ParamSet D" -#define NID_id_tc26_gost_3410_2012_256_paramSetD 1186 -#define OBJ_id_tc26_gost_3410_2012_256_paramSetD OBJ_id_tc26_gost_3410_2012_256_constants,4L - -#define SN_id_tc26_gost_3410_2012_512_constants "id-tc26-gost-3410-2012-512-constants" -#define NID_id_tc26_gost_3410_2012_512_constants 996 -#define OBJ_id_tc26_gost_3410_2012_512_constants OBJ_id_tc26_sign_constants,2L - -#define SN_id_tc26_gost_3410_2012_512_paramSetTest "id-tc26-gost-3410-2012-512-paramSetTest" -#define LN_id_tc26_gost_3410_2012_512_paramSetTest "GOST R 34.10-2012 (512 bit) testing parameter set" -#define NID_id_tc26_gost_3410_2012_512_paramSetTest 997 -#define OBJ_id_tc26_gost_3410_2012_512_paramSetTest OBJ_id_tc26_gost_3410_2012_512_constants,0L - -#define SN_id_tc26_gost_3410_2012_512_paramSetA "id-tc26-gost-3410-2012-512-paramSetA" -#define LN_id_tc26_gost_3410_2012_512_paramSetA "GOST R 34.10-2012 (512 bit) ParamSet A" -#define NID_id_tc26_gost_3410_2012_512_paramSetA 998 -#define OBJ_id_tc26_gost_3410_2012_512_paramSetA OBJ_id_tc26_gost_3410_2012_512_constants,1L - -#define SN_id_tc26_gost_3410_2012_512_paramSetB "id-tc26-gost-3410-2012-512-paramSetB" -#define LN_id_tc26_gost_3410_2012_512_paramSetB "GOST R 34.10-2012 (512 bit) ParamSet B" -#define NID_id_tc26_gost_3410_2012_512_paramSetB 999 -#define OBJ_id_tc26_gost_3410_2012_512_paramSetB OBJ_id_tc26_gost_3410_2012_512_constants,2L - -#define SN_id_tc26_gost_3410_2012_512_paramSetC "id-tc26-gost-3410-2012-512-paramSetC" -#define LN_id_tc26_gost_3410_2012_512_paramSetC "GOST R 34.10-2012 (512 bit) ParamSet C" -#define NID_id_tc26_gost_3410_2012_512_paramSetC 1149 -#define OBJ_id_tc26_gost_3410_2012_512_paramSetC OBJ_id_tc26_gost_3410_2012_512_constants,3L - -#define SN_id_tc26_digest_constants "id-tc26-digest-constants" -#define NID_id_tc26_digest_constants 1000 -#define OBJ_id_tc26_digest_constants OBJ_id_tc26_constants,2L - -#define SN_id_tc26_cipher_constants "id-tc26-cipher-constants" -#define NID_id_tc26_cipher_constants 1001 -#define OBJ_id_tc26_cipher_constants OBJ_id_tc26_constants,5L - -#define SN_id_tc26_gost_28147_constants "id-tc26-gost-28147-constants" -#define NID_id_tc26_gost_28147_constants 1002 -#define OBJ_id_tc26_gost_28147_constants OBJ_id_tc26_cipher_constants,1L - -#define SN_id_tc26_gost_28147_param_Z "id-tc26-gost-28147-param-Z" -#define LN_id_tc26_gost_28147_param_Z "GOST 28147-89 TC26 parameter set" -#define NID_id_tc26_gost_28147_param_Z 1003 -#define OBJ_id_tc26_gost_28147_param_Z OBJ_id_tc26_gost_28147_constants,1L - -#define SN_INN "INN" -#define LN_INN "INN" -#define NID_INN 1004 -#define OBJ_INN OBJ_member_body,643L,3L,131L,1L,1L - -#define SN_OGRN "OGRN" -#define LN_OGRN "OGRN" -#define NID_OGRN 1005 -#define OBJ_OGRN OBJ_member_body,643L,100L,1L - -#define SN_SNILS "SNILS" -#define LN_SNILS "SNILS" -#define NID_SNILS 1006 -#define OBJ_SNILS OBJ_member_body,643L,100L,3L - -#define SN_subjectSignTool "subjectSignTool" -#define LN_subjectSignTool "Signing Tool of Subject" -#define NID_subjectSignTool 1007 -#define OBJ_subjectSignTool OBJ_member_body,643L,100L,111L - -#define SN_issuerSignTool "issuerSignTool" -#define LN_issuerSignTool "Signing Tool of Issuer" -#define NID_issuerSignTool 1008 -#define OBJ_issuerSignTool OBJ_member_body,643L,100L,112L - -#define SN_grasshopper_ecb "grasshopper-ecb" -#define NID_grasshopper_ecb 1012 - -#define SN_grasshopper_ctr "grasshopper-ctr" -#define NID_grasshopper_ctr 1013 - -#define SN_grasshopper_ofb "grasshopper-ofb" -#define NID_grasshopper_ofb 1014 - -#define SN_grasshopper_cbc "grasshopper-cbc" -#define NID_grasshopper_cbc 1015 - -#define SN_grasshopper_cfb "grasshopper-cfb" -#define NID_grasshopper_cfb 1016 - -#define SN_grasshopper_mac "grasshopper-mac" -#define NID_grasshopper_mac 1017 - -#define SN_magma_ecb "magma-ecb" -#define NID_magma_ecb 1187 - -#define SN_magma_ctr "magma-ctr" -#define NID_magma_ctr 1188 - -#define SN_magma_ofb "magma-ofb" -#define NID_magma_ofb 1189 - -#define SN_magma_cbc "magma-cbc" -#define NID_magma_cbc 1190 - -#define SN_magma_cfb "magma-cfb" -#define NID_magma_cfb 1191 - -#define SN_magma_mac "magma-mac" -#define NID_magma_mac 1192 - -#define SN_camellia_128_cbc "CAMELLIA-128-CBC" -#define LN_camellia_128_cbc "camellia-128-cbc" -#define NID_camellia_128_cbc 751 -#define OBJ_camellia_128_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,2L - -#define SN_camellia_192_cbc "CAMELLIA-192-CBC" -#define LN_camellia_192_cbc "camellia-192-cbc" -#define NID_camellia_192_cbc 752 -#define OBJ_camellia_192_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,3L - -#define SN_camellia_256_cbc "CAMELLIA-256-CBC" -#define LN_camellia_256_cbc "camellia-256-cbc" -#define NID_camellia_256_cbc 753 -#define OBJ_camellia_256_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,4L - -#define SN_id_camellia128_wrap "id-camellia128-wrap" -#define NID_id_camellia128_wrap 907 -#define OBJ_id_camellia128_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,2L - -#define SN_id_camellia192_wrap "id-camellia192-wrap" -#define NID_id_camellia192_wrap 908 -#define OBJ_id_camellia192_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,3L - -#define SN_id_camellia256_wrap "id-camellia256-wrap" -#define NID_id_camellia256_wrap 909 -#define OBJ_id_camellia256_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,4L - -#define OBJ_ntt_ds 0L,3L,4401L,5L - -#define OBJ_camellia OBJ_ntt_ds,3L,1L,9L - -#define SN_camellia_128_ecb "CAMELLIA-128-ECB" -#define LN_camellia_128_ecb "camellia-128-ecb" -#define NID_camellia_128_ecb 754 -#define OBJ_camellia_128_ecb OBJ_camellia,1L - -#define SN_camellia_128_ofb128 "CAMELLIA-128-OFB" -#define LN_camellia_128_ofb128 "camellia-128-ofb" -#define NID_camellia_128_ofb128 766 -#define OBJ_camellia_128_ofb128 OBJ_camellia,3L - -#define SN_camellia_128_cfb128 "CAMELLIA-128-CFB" -#define LN_camellia_128_cfb128 "camellia-128-cfb" -#define NID_camellia_128_cfb128 757 -#define OBJ_camellia_128_cfb128 OBJ_camellia,4L - -#define SN_camellia_128_gcm "CAMELLIA-128-GCM" -#define LN_camellia_128_gcm "camellia-128-gcm" -#define NID_camellia_128_gcm 961 -#define OBJ_camellia_128_gcm OBJ_camellia,6L - -#define SN_camellia_128_ccm "CAMELLIA-128-CCM" -#define LN_camellia_128_ccm "camellia-128-ccm" -#define NID_camellia_128_ccm 962 -#define OBJ_camellia_128_ccm OBJ_camellia,7L - -#define SN_camellia_128_ctr "CAMELLIA-128-CTR" -#define LN_camellia_128_ctr "camellia-128-ctr" -#define NID_camellia_128_ctr 963 -#define OBJ_camellia_128_ctr OBJ_camellia,9L - -#define SN_camellia_128_cmac "CAMELLIA-128-CMAC" -#define LN_camellia_128_cmac "camellia-128-cmac" -#define NID_camellia_128_cmac 964 -#define OBJ_camellia_128_cmac OBJ_camellia,10L - -#define SN_camellia_192_ecb "CAMELLIA-192-ECB" -#define LN_camellia_192_ecb "camellia-192-ecb" -#define NID_camellia_192_ecb 755 -#define OBJ_camellia_192_ecb OBJ_camellia,21L - -#define SN_camellia_192_ofb128 "CAMELLIA-192-OFB" -#define LN_camellia_192_ofb128 "camellia-192-ofb" -#define NID_camellia_192_ofb128 767 -#define OBJ_camellia_192_ofb128 OBJ_camellia,23L - -#define SN_camellia_192_cfb128 "CAMELLIA-192-CFB" -#define LN_camellia_192_cfb128 "camellia-192-cfb" -#define NID_camellia_192_cfb128 758 -#define OBJ_camellia_192_cfb128 OBJ_camellia,24L - -#define SN_camellia_192_gcm "CAMELLIA-192-GCM" -#define LN_camellia_192_gcm "camellia-192-gcm" -#define NID_camellia_192_gcm 965 -#define OBJ_camellia_192_gcm OBJ_camellia,26L - -#define SN_camellia_192_ccm "CAMELLIA-192-CCM" -#define LN_camellia_192_ccm "camellia-192-ccm" -#define NID_camellia_192_ccm 966 -#define OBJ_camellia_192_ccm OBJ_camellia,27L - -#define SN_camellia_192_ctr "CAMELLIA-192-CTR" -#define LN_camellia_192_ctr "camellia-192-ctr" -#define NID_camellia_192_ctr 967 -#define OBJ_camellia_192_ctr OBJ_camellia,29L - -#define SN_camellia_192_cmac "CAMELLIA-192-CMAC" -#define LN_camellia_192_cmac "camellia-192-cmac" -#define NID_camellia_192_cmac 968 -#define OBJ_camellia_192_cmac OBJ_camellia,30L - -#define SN_camellia_256_ecb "CAMELLIA-256-ECB" -#define LN_camellia_256_ecb "camellia-256-ecb" -#define NID_camellia_256_ecb 756 -#define OBJ_camellia_256_ecb OBJ_camellia,41L - -#define SN_camellia_256_ofb128 "CAMELLIA-256-OFB" -#define LN_camellia_256_ofb128 "camellia-256-ofb" -#define NID_camellia_256_ofb128 768 -#define OBJ_camellia_256_ofb128 OBJ_camellia,43L - -#define SN_camellia_256_cfb128 "CAMELLIA-256-CFB" -#define LN_camellia_256_cfb128 "camellia-256-cfb" -#define NID_camellia_256_cfb128 759 -#define OBJ_camellia_256_cfb128 OBJ_camellia,44L - -#define SN_camellia_256_gcm "CAMELLIA-256-GCM" -#define LN_camellia_256_gcm "camellia-256-gcm" -#define NID_camellia_256_gcm 969 -#define OBJ_camellia_256_gcm OBJ_camellia,46L - -#define SN_camellia_256_ccm "CAMELLIA-256-CCM" -#define LN_camellia_256_ccm "camellia-256-ccm" -#define NID_camellia_256_ccm 970 -#define OBJ_camellia_256_ccm OBJ_camellia,47L - -#define SN_camellia_256_ctr "CAMELLIA-256-CTR" -#define LN_camellia_256_ctr "camellia-256-ctr" -#define NID_camellia_256_ctr 971 -#define OBJ_camellia_256_ctr OBJ_camellia,49L - -#define SN_camellia_256_cmac "CAMELLIA-256-CMAC" -#define LN_camellia_256_cmac "camellia-256-cmac" -#define NID_camellia_256_cmac 972 -#define OBJ_camellia_256_cmac OBJ_camellia,50L - -#define SN_camellia_128_cfb1 "CAMELLIA-128-CFB1" -#define LN_camellia_128_cfb1 "camellia-128-cfb1" -#define NID_camellia_128_cfb1 760 - -#define SN_camellia_192_cfb1 "CAMELLIA-192-CFB1" -#define LN_camellia_192_cfb1 "camellia-192-cfb1" -#define NID_camellia_192_cfb1 761 - -#define SN_camellia_256_cfb1 "CAMELLIA-256-CFB1" -#define LN_camellia_256_cfb1 "camellia-256-cfb1" -#define NID_camellia_256_cfb1 762 - -#define SN_camellia_128_cfb8 "CAMELLIA-128-CFB8" -#define LN_camellia_128_cfb8 "camellia-128-cfb8" -#define NID_camellia_128_cfb8 763 - -#define SN_camellia_192_cfb8 "CAMELLIA-192-CFB8" -#define LN_camellia_192_cfb8 "camellia-192-cfb8" -#define NID_camellia_192_cfb8 764 - -#define SN_camellia_256_cfb8 "CAMELLIA-256-CFB8" -#define LN_camellia_256_cfb8 "camellia-256-cfb8" -#define NID_camellia_256_cfb8 765 - -#define OBJ_aria 1L,2L,410L,200046L,1L,1L - -#define SN_aria_128_ecb "ARIA-128-ECB" -#define LN_aria_128_ecb "aria-128-ecb" -#define NID_aria_128_ecb 1065 -#define OBJ_aria_128_ecb OBJ_aria,1L - -#define SN_aria_128_cbc "ARIA-128-CBC" -#define LN_aria_128_cbc "aria-128-cbc" -#define NID_aria_128_cbc 1066 -#define OBJ_aria_128_cbc OBJ_aria,2L - -#define SN_aria_128_cfb128 "ARIA-128-CFB" -#define LN_aria_128_cfb128 "aria-128-cfb" -#define NID_aria_128_cfb128 1067 -#define OBJ_aria_128_cfb128 OBJ_aria,3L - -#define SN_aria_128_ofb128 "ARIA-128-OFB" -#define LN_aria_128_ofb128 "aria-128-ofb" -#define NID_aria_128_ofb128 1068 -#define OBJ_aria_128_ofb128 OBJ_aria,4L - -#define SN_aria_128_ctr "ARIA-128-CTR" -#define LN_aria_128_ctr "aria-128-ctr" -#define NID_aria_128_ctr 1069 -#define OBJ_aria_128_ctr OBJ_aria,5L - -#define SN_aria_192_ecb "ARIA-192-ECB" -#define LN_aria_192_ecb "aria-192-ecb" -#define NID_aria_192_ecb 1070 -#define OBJ_aria_192_ecb OBJ_aria,6L - -#define SN_aria_192_cbc "ARIA-192-CBC" -#define LN_aria_192_cbc "aria-192-cbc" -#define NID_aria_192_cbc 1071 -#define OBJ_aria_192_cbc OBJ_aria,7L - -#define SN_aria_192_cfb128 "ARIA-192-CFB" -#define LN_aria_192_cfb128 "aria-192-cfb" -#define NID_aria_192_cfb128 1072 -#define OBJ_aria_192_cfb128 OBJ_aria,8L - -#define SN_aria_192_ofb128 "ARIA-192-OFB" -#define LN_aria_192_ofb128 "aria-192-ofb" -#define NID_aria_192_ofb128 1073 -#define OBJ_aria_192_ofb128 OBJ_aria,9L - -#define SN_aria_192_ctr "ARIA-192-CTR" -#define LN_aria_192_ctr "aria-192-ctr" -#define NID_aria_192_ctr 1074 -#define OBJ_aria_192_ctr OBJ_aria,10L - -#define SN_aria_256_ecb "ARIA-256-ECB" -#define LN_aria_256_ecb "aria-256-ecb" -#define NID_aria_256_ecb 1075 -#define OBJ_aria_256_ecb OBJ_aria,11L - -#define SN_aria_256_cbc "ARIA-256-CBC" -#define LN_aria_256_cbc "aria-256-cbc" -#define NID_aria_256_cbc 1076 -#define OBJ_aria_256_cbc OBJ_aria,12L - -#define SN_aria_256_cfb128 "ARIA-256-CFB" -#define LN_aria_256_cfb128 "aria-256-cfb" -#define NID_aria_256_cfb128 1077 -#define OBJ_aria_256_cfb128 OBJ_aria,13L - -#define SN_aria_256_ofb128 "ARIA-256-OFB" -#define LN_aria_256_ofb128 "aria-256-ofb" -#define NID_aria_256_ofb128 1078 -#define OBJ_aria_256_ofb128 OBJ_aria,14L - -#define SN_aria_256_ctr "ARIA-256-CTR" -#define LN_aria_256_ctr "aria-256-ctr" -#define NID_aria_256_ctr 1079 -#define OBJ_aria_256_ctr OBJ_aria,15L - -#define SN_aria_128_cfb1 "ARIA-128-CFB1" -#define LN_aria_128_cfb1 "aria-128-cfb1" -#define NID_aria_128_cfb1 1080 - -#define SN_aria_192_cfb1 "ARIA-192-CFB1" -#define LN_aria_192_cfb1 "aria-192-cfb1" -#define NID_aria_192_cfb1 1081 - -#define SN_aria_256_cfb1 "ARIA-256-CFB1" -#define LN_aria_256_cfb1 "aria-256-cfb1" -#define NID_aria_256_cfb1 1082 - -#define SN_aria_128_cfb8 "ARIA-128-CFB8" -#define LN_aria_128_cfb8 "aria-128-cfb8" -#define NID_aria_128_cfb8 1083 - -#define SN_aria_192_cfb8 "ARIA-192-CFB8" -#define LN_aria_192_cfb8 "aria-192-cfb8" -#define NID_aria_192_cfb8 1084 - -#define SN_aria_256_cfb8 "ARIA-256-CFB8" -#define LN_aria_256_cfb8 "aria-256-cfb8" -#define NID_aria_256_cfb8 1085 - -#define SN_aria_128_ccm "ARIA-128-CCM" -#define LN_aria_128_ccm "aria-128-ccm" -#define NID_aria_128_ccm 1120 -#define OBJ_aria_128_ccm OBJ_aria,37L - -#define SN_aria_192_ccm "ARIA-192-CCM" -#define LN_aria_192_ccm "aria-192-ccm" -#define NID_aria_192_ccm 1121 -#define OBJ_aria_192_ccm OBJ_aria,38L - -#define SN_aria_256_ccm "ARIA-256-CCM" -#define LN_aria_256_ccm "aria-256-ccm" -#define NID_aria_256_ccm 1122 -#define OBJ_aria_256_ccm OBJ_aria,39L - -#define SN_aria_128_gcm "ARIA-128-GCM" -#define LN_aria_128_gcm "aria-128-gcm" -#define NID_aria_128_gcm 1123 -#define OBJ_aria_128_gcm OBJ_aria,34L - -#define SN_aria_192_gcm "ARIA-192-GCM" -#define LN_aria_192_gcm "aria-192-gcm" -#define NID_aria_192_gcm 1124 -#define OBJ_aria_192_gcm OBJ_aria,35L - -#define SN_aria_256_gcm "ARIA-256-GCM" -#define LN_aria_256_gcm "aria-256-gcm" -#define NID_aria_256_gcm 1125 -#define OBJ_aria_256_gcm OBJ_aria,36L - -#define SN_kisa "KISA" -#define LN_kisa "kisa" -#define NID_kisa 773 -#define OBJ_kisa OBJ_member_body,410L,200004L - -#define SN_seed_ecb "SEED-ECB" -#define LN_seed_ecb "seed-ecb" -#define NID_seed_ecb 776 -#define OBJ_seed_ecb OBJ_kisa,1L,3L - -#define SN_seed_cbc "SEED-CBC" -#define LN_seed_cbc "seed-cbc" -#define NID_seed_cbc 777 -#define OBJ_seed_cbc OBJ_kisa,1L,4L - -#define SN_seed_cfb128 "SEED-CFB" -#define LN_seed_cfb128 "seed-cfb" -#define NID_seed_cfb128 779 -#define OBJ_seed_cfb128 OBJ_kisa,1L,5L - -#define SN_seed_ofb128 "SEED-OFB" -#define LN_seed_ofb128 "seed-ofb" -#define NID_seed_ofb128 778 -#define OBJ_seed_ofb128 OBJ_kisa,1L,6L - -#define SN_sm4_ecb "SM4-ECB" -#define LN_sm4_ecb "sm4-ecb" -#define NID_sm4_ecb 1133 -#define OBJ_sm4_ecb OBJ_sm_scheme,104L,1L - -#define SN_sm4_cbc "SM4-CBC" -#define LN_sm4_cbc "sm4-cbc" -#define NID_sm4_cbc 1134 -#define OBJ_sm4_cbc OBJ_sm_scheme,104L,2L - -#define SN_sm4_ofb128 "SM4-OFB" -#define LN_sm4_ofb128 "sm4-ofb" -#define NID_sm4_ofb128 1135 -#define OBJ_sm4_ofb128 OBJ_sm_scheme,104L,3L - -#define SN_sm4_cfb128 "SM4-CFB" -#define LN_sm4_cfb128 "sm4-cfb" -#define NID_sm4_cfb128 1137 -#define OBJ_sm4_cfb128 OBJ_sm_scheme,104L,4L - -#define SN_sm4_cfb1 "SM4-CFB1" -#define LN_sm4_cfb1 "sm4-cfb1" -#define NID_sm4_cfb1 1136 -#define OBJ_sm4_cfb1 OBJ_sm_scheme,104L,5L - -#define SN_sm4_cfb8 "SM4-CFB8" -#define LN_sm4_cfb8 "sm4-cfb8" -#define NID_sm4_cfb8 1138 -#define OBJ_sm4_cfb8 OBJ_sm_scheme,104L,6L - -#define SN_sm4_ctr "SM4-CTR" -#define LN_sm4_ctr "sm4-ctr" -#define NID_sm4_ctr 1139 -#define OBJ_sm4_ctr OBJ_sm_scheme,104L,7L - -#define SN_hmac "HMAC" -#define LN_hmac "hmac" -#define NID_hmac 855 - -#define SN_cmac "CMAC" -#define LN_cmac "cmac" -#define NID_cmac 894 - -#define SN_rc4_hmac_md5 "RC4-HMAC-MD5" -#define LN_rc4_hmac_md5 "rc4-hmac-md5" -#define NID_rc4_hmac_md5 915 - -#define SN_aes_128_cbc_hmac_sha1 "AES-128-CBC-HMAC-SHA1" -#define LN_aes_128_cbc_hmac_sha1 "aes-128-cbc-hmac-sha1" -#define NID_aes_128_cbc_hmac_sha1 916 - -#define SN_aes_192_cbc_hmac_sha1 "AES-192-CBC-HMAC-SHA1" -#define LN_aes_192_cbc_hmac_sha1 "aes-192-cbc-hmac-sha1" -#define NID_aes_192_cbc_hmac_sha1 917 - -#define SN_aes_256_cbc_hmac_sha1 "AES-256-CBC-HMAC-SHA1" -#define LN_aes_256_cbc_hmac_sha1 "aes-256-cbc-hmac-sha1" -#define NID_aes_256_cbc_hmac_sha1 918 - -#define SN_aes_128_cbc_hmac_sha256 "AES-128-CBC-HMAC-SHA256" -#define LN_aes_128_cbc_hmac_sha256 "aes-128-cbc-hmac-sha256" -#define NID_aes_128_cbc_hmac_sha256 948 - -#define SN_aes_192_cbc_hmac_sha256 "AES-192-CBC-HMAC-SHA256" -#define LN_aes_192_cbc_hmac_sha256 "aes-192-cbc-hmac-sha256" -#define NID_aes_192_cbc_hmac_sha256 949 - -#define SN_aes_256_cbc_hmac_sha256 "AES-256-CBC-HMAC-SHA256" -#define LN_aes_256_cbc_hmac_sha256 "aes-256-cbc-hmac-sha256" -#define NID_aes_256_cbc_hmac_sha256 950 - -#define SN_chacha20_poly1305 "ChaCha20-Poly1305" -#define LN_chacha20_poly1305 "chacha20-poly1305" -#define NID_chacha20_poly1305 1018 - -#define SN_chacha20 "ChaCha20" -#define LN_chacha20 "chacha20" -#define NID_chacha20 1019 - -#define SN_dhpublicnumber "dhpublicnumber" -#define LN_dhpublicnumber "X9.42 DH" -#define NID_dhpublicnumber 920 -#define OBJ_dhpublicnumber OBJ_ISO_US,10046L,2L,1L - -#define SN_brainpoolP160r1 "brainpoolP160r1" -#define NID_brainpoolP160r1 921 -#define OBJ_brainpoolP160r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,1L - -#define SN_brainpoolP160t1 "brainpoolP160t1" -#define NID_brainpoolP160t1 922 -#define OBJ_brainpoolP160t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,2L - -#define SN_brainpoolP192r1 "brainpoolP192r1" -#define NID_brainpoolP192r1 923 -#define OBJ_brainpoolP192r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,3L - -#define SN_brainpoolP192t1 "brainpoolP192t1" -#define NID_brainpoolP192t1 924 -#define OBJ_brainpoolP192t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,4L - -#define SN_brainpoolP224r1 "brainpoolP224r1" -#define NID_brainpoolP224r1 925 -#define OBJ_brainpoolP224r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,5L - -#define SN_brainpoolP224t1 "brainpoolP224t1" -#define NID_brainpoolP224t1 926 -#define OBJ_brainpoolP224t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,6L - -#define SN_brainpoolP256r1 "brainpoolP256r1" -#define NID_brainpoolP256r1 927 -#define OBJ_brainpoolP256r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,7L - -#define SN_brainpoolP256t1 "brainpoolP256t1" -#define NID_brainpoolP256t1 928 -#define OBJ_brainpoolP256t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,8L - -#define SN_brainpoolP320r1 "brainpoolP320r1" -#define NID_brainpoolP320r1 929 -#define OBJ_brainpoolP320r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,9L - -#define SN_brainpoolP320t1 "brainpoolP320t1" -#define NID_brainpoolP320t1 930 -#define OBJ_brainpoolP320t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,10L - -#define SN_brainpoolP384r1 "brainpoolP384r1" -#define NID_brainpoolP384r1 931 -#define OBJ_brainpoolP384r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,11L - -#define SN_brainpoolP384t1 "brainpoolP384t1" -#define NID_brainpoolP384t1 932 -#define OBJ_brainpoolP384t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,12L - -#define SN_brainpoolP512r1 "brainpoolP512r1" -#define NID_brainpoolP512r1 933 -#define OBJ_brainpoolP512r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,13L - -#define SN_brainpoolP512t1 "brainpoolP512t1" -#define NID_brainpoolP512t1 934 -#define OBJ_brainpoolP512t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,14L - -#define OBJ_x9_63_scheme 1L,3L,133L,16L,840L,63L,0L - -#define OBJ_secg_scheme OBJ_certicom_arc,1L - -#define SN_dhSinglePass_stdDH_sha1kdf_scheme "dhSinglePass-stdDH-sha1kdf-scheme" -#define NID_dhSinglePass_stdDH_sha1kdf_scheme 936 -#define OBJ_dhSinglePass_stdDH_sha1kdf_scheme OBJ_x9_63_scheme,2L - -#define SN_dhSinglePass_stdDH_sha224kdf_scheme "dhSinglePass-stdDH-sha224kdf-scheme" -#define NID_dhSinglePass_stdDH_sha224kdf_scheme 937 -#define OBJ_dhSinglePass_stdDH_sha224kdf_scheme OBJ_secg_scheme,11L,0L - -#define SN_dhSinglePass_stdDH_sha256kdf_scheme "dhSinglePass-stdDH-sha256kdf-scheme" -#define NID_dhSinglePass_stdDH_sha256kdf_scheme 938 -#define OBJ_dhSinglePass_stdDH_sha256kdf_scheme OBJ_secg_scheme,11L,1L - -#define SN_dhSinglePass_stdDH_sha384kdf_scheme "dhSinglePass-stdDH-sha384kdf-scheme" -#define NID_dhSinglePass_stdDH_sha384kdf_scheme 939 -#define OBJ_dhSinglePass_stdDH_sha384kdf_scheme OBJ_secg_scheme,11L,2L - -#define SN_dhSinglePass_stdDH_sha512kdf_scheme "dhSinglePass-stdDH-sha512kdf-scheme" -#define NID_dhSinglePass_stdDH_sha512kdf_scheme 940 -#define OBJ_dhSinglePass_stdDH_sha512kdf_scheme OBJ_secg_scheme,11L,3L - -#define SN_dhSinglePass_cofactorDH_sha1kdf_scheme "dhSinglePass-cofactorDH-sha1kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha1kdf_scheme 941 -#define OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme OBJ_x9_63_scheme,3L - -#define SN_dhSinglePass_cofactorDH_sha224kdf_scheme "dhSinglePass-cofactorDH-sha224kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha224kdf_scheme 942 -#define OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme OBJ_secg_scheme,14L,0L - -#define SN_dhSinglePass_cofactorDH_sha256kdf_scheme "dhSinglePass-cofactorDH-sha256kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha256kdf_scheme 943 -#define OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme OBJ_secg_scheme,14L,1L - -#define SN_dhSinglePass_cofactorDH_sha384kdf_scheme "dhSinglePass-cofactorDH-sha384kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha384kdf_scheme 944 -#define OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme OBJ_secg_scheme,14L,2L - -#define SN_dhSinglePass_cofactorDH_sha512kdf_scheme "dhSinglePass-cofactorDH-sha512kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha512kdf_scheme 945 -#define OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme OBJ_secg_scheme,14L,3L - -#define SN_dh_std_kdf "dh-std-kdf" -#define NID_dh_std_kdf 946 - -#define SN_dh_cofactor_kdf "dh-cofactor-kdf" -#define NID_dh_cofactor_kdf 947 - -#define SN_ct_precert_scts "ct_precert_scts" -#define LN_ct_precert_scts "CT Precertificate SCTs" -#define NID_ct_precert_scts 951 -#define OBJ_ct_precert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,2L - -#define SN_ct_precert_poison "ct_precert_poison" -#define LN_ct_precert_poison "CT Precertificate Poison" -#define NID_ct_precert_poison 952 -#define OBJ_ct_precert_poison 1L,3L,6L,1L,4L,1L,11129L,2L,4L,3L - -#define SN_ct_precert_signer "ct_precert_signer" -#define LN_ct_precert_signer "CT Precertificate Signer" -#define NID_ct_precert_signer 953 -#define OBJ_ct_precert_signer 1L,3L,6L,1L,4L,1L,11129L,2L,4L,4L - -#define SN_ct_cert_scts "ct_cert_scts" -#define LN_ct_cert_scts "CT Certificate SCTs" -#define NID_ct_cert_scts 954 -#define OBJ_ct_cert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,5L - -#define SN_jurisdictionLocalityName "jurisdictionL" -#define LN_jurisdictionLocalityName "jurisdictionLocalityName" -#define NID_jurisdictionLocalityName 955 -#define OBJ_jurisdictionLocalityName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L - -#define SN_jurisdictionStateOrProvinceName "jurisdictionST" -#define LN_jurisdictionStateOrProvinceName "jurisdictionStateOrProvinceName" -#define NID_jurisdictionStateOrProvinceName 956 -#define OBJ_jurisdictionStateOrProvinceName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L - -#define SN_jurisdictionCountryName "jurisdictionC" -#define LN_jurisdictionCountryName "jurisdictionCountryName" -#define NID_jurisdictionCountryName 957 -#define OBJ_jurisdictionCountryName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L - -#define SN_id_scrypt "id-scrypt" -#define LN_id_scrypt "scrypt" -#define NID_id_scrypt 973 -#define OBJ_id_scrypt 1L,3L,6L,1L,4L,1L,11591L,4L,11L - -#define SN_tls1_prf "TLS1-PRF" -#define LN_tls1_prf "tls1-prf" -#define NID_tls1_prf 1021 - -#define SN_hkdf "HKDF" -#define LN_hkdf "hkdf" -#define NID_hkdf 1036 - -#define SN_id_pkinit "id-pkinit" -#define NID_id_pkinit 1031 -#define OBJ_id_pkinit 1L,3L,6L,1L,5L,2L,3L - -#define SN_pkInitClientAuth "pkInitClientAuth" -#define LN_pkInitClientAuth "PKINIT Client Auth" -#define NID_pkInitClientAuth 1032 -#define OBJ_pkInitClientAuth OBJ_id_pkinit,4L - -#define SN_pkInitKDC "pkInitKDC" -#define LN_pkInitKDC "Signing KDC Response" -#define NID_pkInitKDC 1033 -#define OBJ_pkInitKDC OBJ_id_pkinit,5L - -#define SN_X25519 "X25519" -#define NID_X25519 1034 -#define OBJ_X25519 1L,3L,101L,110L - -#define SN_X448 "X448" -#define NID_X448 1035 -#define OBJ_X448 1L,3L,101L,111L - -#define SN_ED25519 "ED25519" -#define NID_ED25519 1087 -#define OBJ_ED25519 1L,3L,101L,112L - -#define SN_ED448 "ED448" -#define NID_ED448 1088 -#define OBJ_ED448 1L,3L,101L,113L - -#define SN_kx_rsa "KxRSA" -#define LN_kx_rsa "kx-rsa" -#define NID_kx_rsa 1037 - -#define SN_kx_ecdhe "KxECDHE" -#define LN_kx_ecdhe "kx-ecdhe" -#define NID_kx_ecdhe 1038 - -#define SN_kx_dhe "KxDHE" -#define LN_kx_dhe "kx-dhe" -#define NID_kx_dhe 1039 - -#define SN_kx_ecdhe_psk "KxECDHE-PSK" -#define LN_kx_ecdhe_psk "kx-ecdhe-psk" -#define NID_kx_ecdhe_psk 1040 - -#define SN_kx_dhe_psk "KxDHE-PSK" -#define LN_kx_dhe_psk "kx-dhe-psk" -#define NID_kx_dhe_psk 1041 - -#define SN_kx_rsa_psk "KxRSA_PSK" -#define LN_kx_rsa_psk "kx-rsa-psk" -#define NID_kx_rsa_psk 1042 - -#define SN_kx_psk "KxPSK" -#define LN_kx_psk "kx-psk" -#define NID_kx_psk 1043 - -#define SN_kx_srp "KxSRP" -#define LN_kx_srp "kx-srp" -#define NID_kx_srp 1044 - -#define SN_kx_gost "KxGOST" -#define LN_kx_gost "kx-gost" -#define NID_kx_gost 1045 - -#define SN_kx_any "KxANY" -#define LN_kx_any "kx-any" -#define NID_kx_any 1063 - -#define SN_auth_rsa "AuthRSA" -#define LN_auth_rsa "auth-rsa" -#define NID_auth_rsa 1046 - -#define SN_auth_ecdsa "AuthECDSA" -#define LN_auth_ecdsa "auth-ecdsa" -#define NID_auth_ecdsa 1047 - -#define SN_auth_psk "AuthPSK" -#define LN_auth_psk "auth-psk" -#define NID_auth_psk 1048 - -#define SN_auth_dss "AuthDSS" -#define LN_auth_dss "auth-dss" -#define NID_auth_dss 1049 - -#define SN_auth_gost01 "AuthGOST01" -#define LN_auth_gost01 "auth-gost01" -#define NID_auth_gost01 1050 - -#define SN_auth_gost12 "AuthGOST12" -#define LN_auth_gost12 "auth-gost12" -#define NID_auth_gost12 1051 - -#define SN_auth_srp "AuthSRP" -#define LN_auth_srp "auth-srp" -#define NID_auth_srp 1052 - -#define SN_auth_null "AuthNULL" -#define LN_auth_null "auth-null" -#define NID_auth_null 1053 - -#define SN_auth_any "AuthANY" -#define LN_auth_any "auth-any" -#define NID_auth_any 1064 - -#define SN_poly1305 "Poly1305" -#define LN_poly1305 "poly1305" -#define NID_poly1305 1061 - -#define SN_siphash "SipHash" -#define LN_siphash "siphash" -#define NID_siphash 1062 - -#define SN_ffdhe2048 "ffdhe2048" -#define NID_ffdhe2048 1126 - -#define SN_ffdhe3072 "ffdhe3072" -#define NID_ffdhe3072 1127 - -#define SN_ffdhe4096 "ffdhe4096" -#define NID_ffdhe4096 1128 - -#define SN_ffdhe6144 "ffdhe6144" -#define NID_ffdhe6144 1129 - -#define SN_ffdhe8192 "ffdhe8192" -#define NID_ffdhe8192 1130 - -#define SN_ISO_UA "ISO-UA" -#define NID_ISO_UA 1150 -#define OBJ_ISO_UA OBJ_member_body,804L - -#define SN_ua_pki "ua-pki" -#define NID_ua_pki 1151 -#define OBJ_ua_pki OBJ_ISO_UA,2L,1L,1L,1L - -#define SN_dstu28147 "dstu28147" -#define LN_dstu28147 "DSTU Gost 28147-2009" -#define NID_dstu28147 1152 -#define OBJ_dstu28147 OBJ_ua_pki,1L,1L,1L - -#define SN_dstu28147_ofb "dstu28147-ofb" -#define LN_dstu28147_ofb "DSTU Gost 28147-2009 OFB mode" -#define NID_dstu28147_ofb 1153 -#define OBJ_dstu28147_ofb OBJ_dstu28147,2L - -#define SN_dstu28147_cfb "dstu28147-cfb" -#define LN_dstu28147_cfb "DSTU Gost 28147-2009 CFB mode" -#define NID_dstu28147_cfb 1154 -#define OBJ_dstu28147_cfb OBJ_dstu28147,3L - -#define SN_dstu28147_wrap "dstu28147-wrap" -#define LN_dstu28147_wrap "DSTU Gost 28147-2009 key wrap" -#define NID_dstu28147_wrap 1155 -#define OBJ_dstu28147_wrap OBJ_dstu28147,5L - -#define SN_hmacWithDstu34311 "hmacWithDstu34311" -#define LN_hmacWithDstu34311 "HMAC DSTU Gost 34311-95" -#define NID_hmacWithDstu34311 1156 -#define OBJ_hmacWithDstu34311 OBJ_ua_pki,1L,1L,2L - -#define SN_dstu34311 "dstu34311" -#define LN_dstu34311 "DSTU Gost 34311-95" -#define NID_dstu34311 1157 -#define OBJ_dstu34311 OBJ_ua_pki,1L,2L,1L - -#define SN_dstu4145le "dstu4145le" -#define LN_dstu4145le "DSTU 4145-2002 little endian" -#define NID_dstu4145le 1158 -#define OBJ_dstu4145le OBJ_ua_pki,1L,3L,1L,1L - -#define SN_dstu4145be "dstu4145be" -#define LN_dstu4145be "DSTU 4145-2002 big endian" -#define NID_dstu4145be 1159 -#define OBJ_dstu4145be OBJ_dstu4145le,1L,1L - -#define SN_uacurve0 "uacurve0" -#define LN_uacurve0 "DSTU curve 0" -#define NID_uacurve0 1160 -#define OBJ_uacurve0 OBJ_dstu4145le,2L,0L - -#define SN_uacurve1 "uacurve1" -#define LN_uacurve1 "DSTU curve 1" -#define NID_uacurve1 1161 -#define OBJ_uacurve1 OBJ_dstu4145le,2L,1L - -#define SN_uacurve2 "uacurve2" -#define LN_uacurve2 "DSTU curve 2" -#define NID_uacurve2 1162 -#define OBJ_uacurve2 OBJ_dstu4145le,2L,2L - -#define SN_uacurve3 "uacurve3" -#define LN_uacurve3 "DSTU curve 3" -#define NID_uacurve3 1163 -#define OBJ_uacurve3 OBJ_dstu4145le,2L,3L - -#define SN_uacurve4 "uacurve4" -#define LN_uacurve4 "DSTU curve 4" -#define NID_uacurve4 1164 -#define OBJ_uacurve4 OBJ_dstu4145le,2L,4L - -#define SN_uacurve5 "uacurve5" -#define LN_uacurve5 "DSTU curve 5" -#define NID_uacurve5 1165 -#define OBJ_uacurve5 OBJ_dstu4145le,2L,5L - -#define SN_uacurve6 "uacurve6" -#define LN_uacurve6 "DSTU curve 6" -#define NID_uacurve6 1166 -#define OBJ_uacurve6 OBJ_dstu4145le,2L,6L - -#define SN_uacurve7 "uacurve7" -#define LN_uacurve7 "DSTU curve 7" -#define NID_uacurve7 1167 -#define OBJ_uacurve7 OBJ_dstu4145le,2L,7L - -#define SN_uacurve8 "uacurve8" -#define LN_uacurve8 "DSTU curve 8" -#define NID_uacurve8 1168 -#define OBJ_uacurve8 OBJ_dstu4145le,2L,8L - -#define SN_uacurve9 "uacurve9" -#define LN_uacurve9 "DSTU curve 9" -#define NID_uacurve9 1169 -#define OBJ_uacurve9 OBJ_dstu4145le,2L,9L diff --git a/submodules/MtProtoKit/openssl/openssl/objects.h b/submodules/MtProtoKit/openssl/openssl/objects.h deleted file mode 100644 index 5e8b5762f8..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/objects.h +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OBJECTS_H -# define HEADER_OBJECTS_H - -# include -# include -# include -# include - -# define OBJ_NAME_TYPE_UNDEF 0x00 -# define OBJ_NAME_TYPE_MD_METH 0x01 -# define OBJ_NAME_TYPE_CIPHER_METH 0x02 -# define OBJ_NAME_TYPE_PKEY_METH 0x03 -# define OBJ_NAME_TYPE_COMP_METH 0x04 -# define OBJ_NAME_TYPE_NUM 0x05 - -# define OBJ_NAME_ALIAS 0x8000 - -# define OBJ_BSEARCH_VALUE_ON_NOMATCH 0x01 -# define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 - - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct obj_name_st { - int type; - int alias; - const char *name; - const char *data; -} OBJ_NAME; - -# define OBJ_create_and_add_object(a,b,c) OBJ_create(a,b,c) - -int OBJ_NAME_init(void); -int OBJ_NAME_new_index(unsigned long (*hash_func) (const char *), - int (*cmp_func) (const char *, const char *), - void (*free_func) (const char *, int, const char *)); -const char *OBJ_NAME_get(const char *name, int type); -int OBJ_NAME_add(const char *name, int type, const char *data); -int OBJ_NAME_remove(const char *name, int type); -void OBJ_NAME_cleanup(int type); /* -1 for everything */ -void OBJ_NAME_do_all(int type, void (*fn) (const OBJ_NAME *, void *arg), - void *arg); -void OBJ_NAME_do_all_sorted(int type, - void (*fn) (const OBJ_NAME *, void *arg), - void *arg); - -ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o); -ASN1_OBJECT *OBJ_nid2obj(int n); -const char *OBJ_nid2ln(int n); -const char *OBJ_nid2sn(int n); -int OBJ_obj2nid(const ASN1_OBJECT *o); -ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name); -int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name); -int OBJ_txt2nid(const char *s); -int OBJ_ln2nid(const char *s); -int OBJ_sn2nid(const char *s); -int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b); -const void *OBJ_bsearch_(const void *key, const void *base, int num, int size, - int (*cmp) (const void *, const void *)); -const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, - int size, - int (*cmp) (const void *, const void *), - int flags); - -# define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *, const void *); \ - static int nm##_cmp(type1 const *, type2 const *); \ - scope type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) - -# define DECLARE_OBJ_BSEARCH_CMP_FN(type1, type2, cmp) \ - _DECLARE_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp) -# define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ - type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) - -/*- - * Unsolved problem: if a type is actually a pointer type, like - * nid_triple is, then its impossible to get a const where you need - * it. Consider: - * - * typedef int nid_triple[3]; - * const void *a_; - * const nid_triple const *a = a_; - * - * The assignment discards a const because what you really want is: - * - * const int const * const *a = a_; - * - * But if you do that, you lose the fact that a is an array of 3 ints, - * which breaks comparison functions. - * - * Thus we end up having to cast, sadly, or unpack the - * declarations. Or, as I finally did in this case, declare nid_triple - * to be a struct, which it should have been in the first place. - * - * Ben, August 2008. - * - * Also, strictly speaking not all types need be const, but handling - * the non-constness means a lot of complication, and in practice - * comparison routines do always not touch their arguments. - */ - -# define IMPLEMENT_OBJ_BSEARCH_CMP_FN(type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ - { \ - type1 const *a = a_; \ - type2 const *b = b_; \ - return nm##_cmp(a,b); \ - } \ - static type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ - { \ - return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ - nm##_cmp_BSEARCH_CMP_FN); \ - } \ - extern void dummy_prototype(void) - -# define IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ - { \ - type1 const *a = a_; \ - type2 const *b = b_; \ - return nm##_cmp(a,b); \ - } \ - type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ - { \ - return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ - nm##_cmp_BSEARCH_CMP_FN); \ - } \ - extern void dummy_prototype(void) - -# define OBJ_bsearch(type1,key,type2,base,num,cmp) \ - ((type2 *)OBJ_bsearch_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ - num,sizeof(type2), \ - ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ - (void)CHECKED_PTR_OF(type2,cmp##_type_2), \ - cmp##_BSEARCH_CMP_FN))) - -# define OBJ_bsearch_ex(type1,key,type2,base,num,cmp,flags) \ - ((type2 *)OBJ_bsearch_ex_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ - num,sizeof(type2), \ - ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ - (void)type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \ - cmp##_BSEARCH_CMP_FN)),flags) - -int OBJ_new_nid(int num); -int OBJ_add_object(const ASN1_OBJECT *obj); -int OBJ_create(const char *oid, const char *sn, const char *ln); -#if OPENSSL_API_COMPAT < 0x10100000L -# define OBJ_cleanup() while(0) continue -#endif -int OBJ_create_objects(BIO *in); - -size_t OBJ_length(const ASN1_OBJECT *obj); -const unsigned char *OBJ_get0_data(const ASN1_OBJECT *obj); - -int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid); -int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid); -int OBJ_add_sigid(int signid, int dig_id, int pkey_id); -void OBJ_sigid_free(void); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/objectserr.h b/submodules/MtProtoKit/openssl/openssl/objectserr.h deleted file mode 100644 index 02e166f1ac..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/objectserr.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OBJERR_H -# define HEADER_OBJERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OBJ_strings(void); - -/* - * OBJ function codes. - */ -# define OBJ_F_OBJ_ADD_OBJECT 105 -# define OBJ_F_OBJ_ADD_SIGID 107 -# define OBJ_F_OBJ_CREATE 100 -# define OBJ_F_OBJ_DUP 101 -# define OBJ_F_OBJ_NAME_NEW_INDEX 106 -# define OBJ_F_OBJ_NID2LN 102 -# define OBJ_F_OBJ_NID2OBJ 103 -# define OBJ_F_OBJ_NID2SN 104 -# define OBJ_F_OBJ_TXT2OBJ 108 - -/* - * OBJ reason codes. - */ -# define OBJ_R_OID_EXISTS 102 -# define OBJ_R_UNKNOWN_NID 101 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/ocsp.h b/submodules/MtProtoKit/openssl/openssl/ocsp.h deleted file mode 100644 index 8582fe1ee1..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ocsp.h +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OCSP_H -# define HEADER_OCSP_H - -#include - -/* - * These definitions are outside the OPENSSL_NO_OCSP guard because although for - * historical reasons they have OCSP_* names, they can actually be used - * independently of OCSP. E.g. see RFC5280 - */ -/*- - * CRLReason ::= ENUMERATED { - * unspecified (0), - * keyCompromise (1), - * cACompromise (2), - * affiliationChanged (3), - * superseded (4), - * cessationOfOperation (5), - * certificateHold (6), - * removeFromCRL (8) } - */ -# define OCSP_REVOKED_STATUS_NOSTATUS -1 -# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 -# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 -# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 -# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 -# define OCSP_REVOKED_STATUS_SUPERSEDED 4 -# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 -# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 -# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 - - -# ifndef OPENSSL_NO_OCSP - -# include -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Various flags and values */ - -# define OCSP_DEFAULT_NONCE_LENGTH 16 - -# define OCSP_NOCERTS 0x1 -# define OCSP_NOINTERN 0x2 -# define OCSP_NOSIGS 0x4 -# define OCSP_NOCHAIN 0x8 -# define OCSP_NOVERIFY 0x10 -# define OCSP_NOEXPLICIT 0x20 -# define OCSP_NOCASIGN 0x40 -# define OCSP_NODELEGATED 0x80 -# define OCSP_NOCHECKS 0x100 -# define OCSP_TRUSTOTHER 0x200 -# define OCSP_RESPID_KEY 0x400 -# define OCSP_NOTIME 0x800 - -typedef struct ocsp_cert_id_st OCSP_CERTID; - -DEFINE_STACK_OF(OCSP_CERTID) - -typedef struct ocsp_one_request_st OCSP_ONEREQ; - -DEFINE_STACK_OF(OCSP_ONEREQ) - -typedef struct ocsp_req_info_st OCSP_REQINFO; -typedef struct ocsp_signature_st OCSP_SIGNATURE; -typedef struct ocsp_request_st OCSP_REQUEST; - -# define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 -# define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 -# define OCSP_RESPONSE_STATUS_INTERNALERROR 2 -# define OCSP_RESPONSE_STATUS_TRYLATER 3 -# define OCSP_RESPONSE_STATUS_SIGREQUIRED 5 -# define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6 - -typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; - -# define V_OCSP_RESPID_NAME 0 -# define V_OCSP_RESPID_KEY 1 - -DEFINE_STACK_OF(OCSP_RESPID) - -typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; - -# define V_OCSP_CERTSTATUS_GOOD 0 -# define V_OCSP_CERTSTATUS_REVOKED 1 -# define V_OCSP_CERTSTATUS_UNKNOWN 2 - -typedef struct ocsp_cert_status_st OCSP_CERTSTATUS; -typedef struct ocsp_single_response_st OCSP_SINGLERESP; - -DEFINE_STACK_OF(OCSP_SINGLERESP) - -typedef struct ocsp_response_data_st OCSP_RESPDATA; - -typedef struct ocsp_basic_response_st OCSP_BASICRESP; - -typedef struct ocsp_crl_id_st OCSP_CRLID; -typedef struct ocsp_service_locator_st OCSP_SERVICELOC; - -# define PEM_STRING_OCSP_REQUEST "OCSP REQUEST" -# define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE" - -# define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p) - -# define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p) - -# define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \ - (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST, \ - bp,(char **)(x),cb,NULL) - -# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb)(OCSP_RESPONSE *)PEM_ASN1_read_bio(\ - (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE, \ - bp,(char **)(x),cb,NULL) - -# define PEM_write_bio_OCSP_REQUEST(bp,o) \ - PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\ - bp,(char *)(o), NULL,NULL,0,NULL,NULL) - -# define PEM_write_bio_OCSP_RESPONSE(bp,o) \ - PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\ - bp,(char *)(o), NULL,NULL,0,NULL,NULL) - -# define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o) - -# define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o) - -# define ASN1_BIT_STRING_digest(data,type,md,len) \ - ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) - -# define OCSP_CERTSTATUS_dup(cs)\ - (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\ - (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs)) - -OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id); - -OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); -OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, - int maxline); -int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); -int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); -OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline); -void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); -void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); -int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, - ASN1_VALUE *val); -int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval, - const ASN1_ITEM *it); -BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); -int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path); -int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req); -int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, - const char *name, const char *value); - -OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, const X509 *subject, - const X509 *issuer); - -OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, - const X509_NAME *issuerName, - const ASN1_BIT_STRING *issuerKey, - const ASN1_INTEGER *serialNumber); - -OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid); - -int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len); -int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); -int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); -int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); - -int OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm); -int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); - -int OCSP_request_sign(OCSP_REQUEST *req, - X509 *signer, - EVP_PKEY *key, - const EVP_MD *dgst, - STACK_OF(X509) *certs, unsigned long flags); - -int OCSP_response_status(OCSP_RESPONSE *resp); -OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); - -const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *bs); -const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs); -const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *bs); -int OCSP_resp_get0_signer(OCSP_BASICRESP *bs, X509 **signer, - STACK_OF(X509) *extra_certs); - -int OCSP_resp_count(OCSP_BASICRESP *bs); -OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); -const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at(const OCSP_BASICRESP* bs); -const STACK_OF(X509) *OCSP_resp_get0_certs(const OCSP_BASICRESP *bs); -int OCSP_resp_get0_id(const OCSP_BASICRESP *bs, - const ASN1_OCTET_STRING **pid, - const X509_NAME **pname); -int OCSP_resp_get1_id(const OCSP_BASICRESP *bs, - ASN1_OCTET_STRING **pid, - X509_NAME **pname); - -int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last); -int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, - ASN1_GENERALIZEDTIME **revtime, - ASN1_GENERALIZEDTIME **thisupd, - ASN1_GENERALIZEDTIME **nextupd); -int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status, - int *reason, - ASN1_GENERALIZEDTIME **revtime, - ASN1_GENERALIZEDTIME **thisupd, - ASN1_GENERALIZEDTIME **nextupd); -int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, - ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec); - -int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, - X509_STORE *store, unsigned long flags); - -int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath, - int *pssl); - -int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); -int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); - -int OCSP_request_onereq_count(OCSP_REQUEST *req); -OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i); -OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one); -int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, - ASN1_OCTET_STRING **pikeyHash, - ASN1_INTEGER **pserial, OCSP_CERTID *cid); -int OCSP_request_is_signed(OCSP_REQUEST *req); -OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs); -OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp, - OCSP_CERTID *cid, - int status, int reason, - ASN1_TIME *revtime, - ASN1_TIME *thisupd, - ASN1_TIME *nextupd); -int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert); -int OCSP_basic_sign(OCSP_BASICRESP *brsp, - X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, - STACK_OF(X509) *certs, unsigned long flags); -int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, - X509 *signer, EVP_MD_CTX *ctx, - STACK_OF(X509) *certs, unsigned long flags); -int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); -int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); -int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); - -X509_EXTENSION *OCSP_crlID_new(const char *url, long *n, char *tim); - -X509_EXTENSION *OCSP_accept_responses_new(char **oids); - -X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); - -X509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, const char **urls); - -int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); -int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); -int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, const ASN1_OBJECT *obj, - int lastpos); -int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos); -X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); -X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc); -void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, - int *idx); -int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit, - unsigned long flags); -int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc); - -int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x); -int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos); -int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, const ASN1_OBJECT *obj, int lastpos); -int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos); -X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); -X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc); -void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx); -int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit, - unsigned long flags); -int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc); - -int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x); -int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos); -int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, const ASN1_OBJECT *obj, - int lastpos); -int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, - int lastpos); -X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); -X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc); -void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, - int *idx); -int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, - int crit, unsigned long flags); -int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc); - -int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x); -int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos); -int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, const ASN1_OBJECT *obj, - int lastpos); -int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, - int lastpos); -X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); -X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc); -void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, - int *idx); -int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, - int crit, unsigned long flags); -int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc); -const OCSP_CERTID *OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *x); - -DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP) -DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS) -DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO) -DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES) -DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ) -DECLARE_ASN1_FUNCTIONS(OCSP_CERTID) -DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST) -DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE) -DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO) -DECLARE_ASN1_FUNCTIONS(OCSP_CRLID) -DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC) - -const char *OCSP_response_status_str(long s); -const char *OCSP_cert_status_str(long s); -const char *OCSP_crl_reason_str(long s); - -int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags); -int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags); - -int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, - X509_STORE *st, unsigned long flags); - - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/ocsperr.h b/submodules/MtProtoKit/openssl/openssl/ocsperr.h deleted file mode 100644 index 8dd9e01a17..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ocsperr.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OCSPERR_H -# define HEADER_OCSPERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_OCSP - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OCSP_strings(void); - -/* - * OCSP function codes. - */ -# define OCSP_F_D2I_OCSP_NONCE 102 -# define OCSP_F_OCSP_BASIC_ADD1_STATUS 103 -# define OCSP_F_OCSP_BASIC_SIGN 104 -# define OCSP_F_OCSP_BASIC_SIGN_CTX 119 -# define OCSP_F_OCSP_BASIC_VERIFY 105 -# define OCSP_F_OCSP_CERT_ID_NEW 101 -# define OCSP_F_OCSP_CHECK_DELEGATED 106 -# define OCSP_F_OCSP_CHECK_IDS 107 -# define OCSP_F_OCSP_CHECK_ISSUER 108 -# define OCSP_F_OCSP_CHECK_VALIDITY 115 -# define OCSP_F_OCSP_MATCH_ISSUERID 109 -# define OCSP_F_OCSP_PARSE_URL 114 -# define OCSP_F_OCSP_REQUEST_SIGN 110 -# define OCSP_F_OCSP_REQUEST_VERIFY 116 -# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 111 -# define OCSP_F_PARSE_HTTP_LINE1 118 - -/* - * OCSP reason codes. - */ -# define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 -# define OCSP_R_DIGEST_ERR 102 -# define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 -# define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 -# define OCSP_R_ERROR_PARSING_URL 121 -# define OCSP_R_MISSING_OCSPSIGNING_USAGE 103 -# define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 -# define OCSP_R_NOT_BASIC_RESPONSE 104 -# define OCSP_R_NO_CERTIFICATES_IN_CHAIN 105 -# define OCSP_R_NO_RESPONSE_DATA 108 -# define OCSP_R_NO_REVOKED_TIME 109 -# define OCSP_R_NO_SIGNER_KEY 130 -# define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 110 -# define OCSP_R_REQUEST_NOT_SIGNED 128 -# define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA 111 -# define OCSP_R_ROOT_CA_NOT_TRUSTED 112 -# define OCSP_R_SERVER_RESPONSE_ERROR 114 -# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 -# define OCSP_R_SIGNATURE_FAILURE 117 -# define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 -# define OCSP_R_STATUS_EXPIRED 125 -# define OCSP_R_STATUS_NOT_YET_VALID 126 -# define OCSP_R_STATUS_TOO_OLD 127 -# define OCSP_R_UNKNOWN_MESSAGE_DIGEST 119 -# define OCSP_R_UNKNOWN_NID 120 -# define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE 129 - -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/opensslconf.h b/submodules/MtProtoKit/openssl/openssl/opensslconf.h deleted file mode 100644 index 55ebf8c603..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/opensslconf.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/opensslconf.h.in - * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef OPENSSL_ALGORITHM_DEFINES -# error OPENSSL_ALGORITHM_DEFINES no longer supported -#endif - -/* - * OpenSSL was configured with the following options: - */ - -#ifndef OPENSSL_SYS_MACOSX -# define OPENSSL_SYS_MACOSX 1 -#endif -#ifndef OPENSSL_NO_MD2 -# define OPENSSL_NO_MD2 -#endif -#ifndef OPENSSL_NO_RC5 -# define OPENSSL_NO_RC5 -#endif -#ifndef OPENSSL_THREADS -# define OPENSSL_THREADS -#endif -#ifndef OPENSSL_RAND_SEED_OS -# define OPENSSL_RAND_SEED_OS -#endif -#ifndef OPENSSL_NO_ASAN -# define OPENSSL_NO_ASAN -#endif -#ifndef OPENSSL_NO_CRYPTO_MDEBUG -# define OPENSSL_NO_CRYPTO_MDEBUG -#endif -#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE -# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE -#endif -#ifndef OPENSSL_NO_DEVCRYPTOENG -# define OPENSSL_NO_DEVCRYPTOENG -#endif -#ifndef OPENSSL_NO_EGD -# define OPENSSL_NO_EGD -#endif -#ifndef OPENSSL_NO_EXTERNAL_TESTS -# define OPENSSL_NO_EXTERNAL_TESTS -#endif -#ifndef OPENSSL_NO_FUZZ_AFL -# define OPENSSL_NO_FUZZ_AFL -#endif -#ifndef OPENSSL_NO_FUZZ_LIBFUZZER -# define OPENSSL_NO_FUZZ_LIBFUZZER -#endif -#ifndef OPENSSL_NO_HEARTBEATS -# define OPENSSL_NO_HEARTBEATS -#endif -#ifndef OPENSSL_NO_MSAN -# define OPENSSL_NO_MSAN -#endif -#ifndef OPENSSL_NO_SCTP -# define OPENSSL_NO_SCTP -#endif -#ifndef OPENSSL_NO_SSL_TRACE -# define OPENSSL_NO_SSL_TRACE -#endif -#ifndef OPENSSL_NO_SSL3 -# define OPENSSL_NO_SSL3 -#endif -#ifndef OPENSSL_NO_SSL3_METHOD -# define OPENSSL_NO_SSL3_METHOD -#endif -#ifndef OPENSSL_NO_UBSAN -# define OPENSSL_NO_UBSAN -#endif -#ifndef OPENSSL_NO_UNIT_TEST -# define OPENSSL_NO_UNIT_TEST -#endif -#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS -# define OPENSSL_NO_WEAK_SSL_CIPHERS -#endif -#ifndef OPENSSL_NO_STATIC_ENGINE -# define OPENSSL_NO_STATIC_ENGINE -#endif -#ifndef OPENSSL_NO_AFALGENG -# define OPENSSL_NO_AFALGENG -#endif - - -/* - * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers - * don't like that. This will hopefully silence them. - */ -#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; - -/* - * Applications should use -DOPENSSL_API_COMPAT= to suppress the - * declarations of functions deprecated in or before . Otherwise, they - * still won't see them if the library has been built to disable deprecated - * functions. - */ -#ifndef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f; -# ifdef __GNUC__ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# endif -#endif - -#ifndef OPENSSL_FILE -# ifdef OPENSSL_NO_FILENAMES -# define OPENSSL_FILE "" -# define OPENSSL_LINE 0 -# else -# define OPENSSL_FILE __FILE__ -# define OPENSSL_LINE __LINE__ -# endif -#endif - -#ifndef OPENSSL_MIN_API -# define OPENSSL_MIN_API 0 -#endif - -#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API -# undef OPENSSL_API_COMPAT -# define OPENSSL_API_COMPAT OPENSSL_MIN_API -#endif - -/* - * Do not deprecate things to be deprecated in version 1.2.0 before the - * OpenSSL version number matches. - */ -#if OPENSSL_VERSION_NUMBER < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) f; -#elif OPENSSL_API_COMPAT < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_2_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10100000L -# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_1_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10000000L -# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_0_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x00908000L -# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_0_9_8(f) -#endif - -/* Generate 80386 code? */ -#undef I386_ONLY - -#undef OPENSSL_UNISTD -#define OPENSSL_UNISTD - -#undef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* - * The following are cipher-specific, but are part of the public API. - */ -#if !defined(OPENSSL_SYS_UEFI) -# undef BN_LLONG -/* Only one for the following should be defined */ -# define SIXTY_FOUR_BIT_LONG -# undef SIXTY_FOUR_BIT -# undef THIRTY_TWO_BIT -#endif - -#define RC4_INT unsigned int - -#ifdef __cplusplus -} -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/opensslv.h b/submodules/MtProtoKit/openssl/openssl/opensslv.h deleted file mode 100644 index c28e632c44..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/opensslv.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OPENSSLV_H -# define HEADER_OPENSSLV_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*- - * Numeric release version identifier: - * MNNFFPPS: major minor fix patch status - * The status nibble has one of the values 0 for development, 1 to e for betas - * 1 to 14, and f for release. The patch level is exactly that. - * For example: - * 0.9.3-dev 0x00903000 - * 0.9.3-beta1 0x00903001 - * 0.9.3-beta2-dev 0x00903002 - * 0.9.3-beta2 0x00903002 (same as ...beta2-dev) - * 0.9.3 0x0090300f - * 0.9.3a 0x0090301f - * 0.9.4 0x0090400f - * 1.2.3z 0x102031af - * - * For continuity reasons (because 0.9.5 is already out, and is coded - * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level - * part is slightly different, by setting the highest bit. This means - * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start - * with 0x0090600S... - * - * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.) - * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for - * major minor fix final patch/beta) - */ -# define OPENSSL_VERSION_NUMBER 0x1010104fL -# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1d 10 Sep 2019" - -/*- - * The macros below are to be used for shared library (.so, .dll, ...) - * versioning. That kind of versioning works a bit differently between - * operating systems. The most usual scheme is to set a major and a minor - * number, and have the runtime loader check that the major number is equal - * to what it was at application link time, while the minor number has to - * be greater or equal to what it was at application link time. With this - * scheme, the version number is usually part of the file name, like this: - * - * libcrypto.so.0.9 - * - * Some unixen also make a softlink with the major version number only: - * - * libcrypto.so.0 - * - * On Tru64 and IRIX 6.x it works a little bit differently. There, the - * shared library version is stored in the file, and is actually a series - * of versions, separated by colons. The rightmost version present in the - * library when linking an application is stored in the application to be - * matched at run time. When the application is run, a check is done to - * see if the library version stored in the application matches any of the - * versions in the version string of the library itself. - * This version string can be constructed in any way, depending on what - * kind of matching is desired. However, to implement the same scheme as - * the one used in the other unixen, all compatible versions, from lowest - * to highest, should be part of the string. Consecutive builds would - * give the following versions strings: - * - * 3.0 - * 3.0:3.1 - * 3.0:3.1:3.2 - * 4.0 - * 4.0:4.1 - * - * Notice how version 4 is completely incompatible with version, and - * therefore give the breach you can see. - * - * There may be other schemes as well that I haven't yet discovered. - * - * So, here's the way it works here: first of all, the library version - * number doesn't need at all to match the overall OpenSSL version. - * However, it's nice and more understandable if it actually does. - * The current library version is stored in the macro SHLIB_VERSION_NUMBER, - * which is just a piece of text in the format "M.m.e" (Major, minor, edit). - * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways, - * we need to keep a history of version numbers, which is done in the - * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and - * should only keep the versions that are binary compatible with the current. - */ -# define SHLIB_VERSION_HISTORY "" -# define SHLIB_VERSION_NUMBER "1.1" - - -#ifdef __cplusplus -} -#endif -#endif /* HEADER_OPENSSLV_H */ diff --git a/submodules/MtProtoKit/openssl/openssl/ossl_typ.h b/submodules/MtProtoKit/openssl/openssl/ossl_typ.h deleted file mode 100644 index 7993ca28f3..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ossl_typ.h +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OPENSSL_TYPES_H -# define HEADER_OPENSSL_TYPES_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -# ifdef NO_ASN1_TYPEDEFS -# define ASN1_INTEGER ASN1_STRING -# define ASN1_ENUMERATED ASN1_STRING -# define ASN1_BIT_STRING ASN1_STRING -# define ASN1_OCTET_STRING ASN1_STRING -# define ASN1_PRINTABLESTRING ASN1_STRING -# define ASN1_T61STRING ASN1_STRING -# define ASN1_IA5STRING ASN1_STRING -# define ASN1_UTCTIME ASN1_STRING -# define ASN1_GENERALIZEDTIME ASN1_STRING -# define ASN1_TIME ASN1_STRING -# define ASN1_GENERALSTRING ASN1_STRING -# define ASN1_UNIVERSALSTRING ASN1_STRING -# define ASN1_BMPSTRING ASN1_STRING -# define ASN1_VISIBLESTRING ASN1_STRING -# define ASN1_UTF8STRING ASN1_STRING -# define ASN1_BOOLEAN int -# define ASN1_NULL int -# else -typedef struct asn1_string_st ASN1_INTEGER; -typedef struct asn1_string_st ASN1_ENUMERATED; -typedef struct asn1_string_st ASN1_BIT_STRING; -typedef struct asn1_string_st ASN1_OCTET_STRING; -typedef struct asn1_string_st ASN1_PRINTABLESTRING; -typedef struct asn1_string_st ASN1_T61STRING; -typedef struct asn1_string_st ASN1_IA5STRING; -typedef struct asn1_string_st ASN1_GENERALSTRING; -typedef struct asn1_string_st ASN1_UNIVERSALSTRING; -typedef struct asn1_string_st ASN1_BMPSTRING; -typedef struct asn1_string_st ASN1_UTCTIME; -typedef struct asn1_string_st ASN1_TIME; -typedef struct asn1_string_st ASN1_GENERALIZEDTIME; -typedef struct asn1_string_st ASN1_VISIBLESTRING; -typedef struct asn1_string_st ASN1_UTF8STRING; -typedef struct asn1_string_st ASN1_STRING; -typedef int ASN1_BOOLEAN; -typedef int ASN1_NULL; -# endif - -typedef struct asn1_object_st ASN1_OBJECT; - -typedef struct ASN1_ITEM_st ASN1_ITEM; -typedef struct asn1_pctx_st ASN1_PCTX; -typedef struct asn1_sctx_st ASN1_SCTX; - -# ifdef _WIN32 -# undef X509_NAME -# undef X509_EXTENSIONS -# undef PKCS7_ISSUER_AND_SERIAL -# undef PKCS7_SIGNER_INFO -# undef OCSP_REQUEST -# undef OCSP_RESPONSE -# endif - -# ifdef BIGNUM -# undef BIGNUM -# endif -struct dane_st; -typedef struct bio_st BIO; -typedef struct bignum_st BIGNUM; -typedef struct bignum_ctx BN_CTX; -typedef struct bn_blinding_st BN_BLINDING; -typedef struct bn_mont_ctx_st BN_MONT_CTX; -typedef struct bn_recp_ctx_st BN_RECP_CTX; -typedef struct bn_gencb_st BN_GENCB; - -typedef struct buf_mem_st BUF_MEM; - -typedef struct evp_cipher_st EVP_CIPHER; -typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; -typedef struct evp_md_st EVP_MD; -typedef struct evp_md_ctx_st EVP_MD_CTX; -typedef struct evp_pkey_st EVP_PKEY; - -typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; - -typedef struct evp_pkey_method_st EVP_PKEY_METHOD; -typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; - -typedef struct evp_Encode_Ctx_st EVP_ENCODE_CTX; - -typedef struct hmac_ctx_st HMAC_CTX; - -typedef struct dh_st DH; -typedef struct dh_method DH_METHOD; - -typedef struct dsa_st DSA; -typedef struct dsa_method DSA_METHOD; - -typedef struct rsa_st RSA; -typedef struct rsa_meth_st RSA_METHOD; - -typedef struct ec_key_st EC_KEY; -typedef struct ec_key_method_st EC_KEY_METHOD; - -typedef struct rand_meth_st RAND_METHOD; -typedef struct rand_drbg_st RAND_DRBG; - -typedef struct ssl_dane_st SSL_DANE; -typedef struct x509_st X509; -typedef struct X509_algor_st X509_ALGOR; -typedef struct X509_crl_st X509_CRL; -typedef struct x509_crl_method_st X509_CRL_METHOD; -typedef struct x509_revoked_st X509_REVOKED; -typedef struct X509_name_st X509_NAME; -typedef struct X509_pubkey_st X509_PUBKEY; -typedef struct x509_store_st X509_STORE; -typedef struct x509_store_ctx_st X509_STORE_CTX; - -typedef struct x509_object_st X509_OBJECT; -typedef struct x509_lookup_st X509_LOOKUP; -typedef struct x509_lookup_method_st X509_LOOKUP_METHOD; -typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; - -typedef struct x509_sig_info_st X509_SIG_INFO; - -typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; - -typedef struct v3_ext_ctx X509V3_CTX; -typedef struct conf_st CONF; -typedef struct ossl_init_settings_st OPENSSL_INIT_SETTINGS; - -typedef struct ui_st UI; -typedef struct ui_method_st UI_METHOD; - -typedef struct engine_st ENGINE; -typedef struct ssl_st SSL; -typedef struct ssl_ctx_st SSL_CTX; - -typedef struct comp_ctx_st COMP_CTX; -typedef struct comp_method_st COMP_METHOD; - -typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; -typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; -typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; -typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; - -typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; -typedef struct DIST_POINT_st DIST_POINT; -typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; -typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; - -typedef struct crypto_ex_data_st CRYPTO_EX_DATA; - -typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; -typedef struct ocsp_response_st OCSP_RESPONSE; -typedef struct ocsp_responder_id_st OCSP_RESPID; - -typedef struct sct_st SCT; -typedef struct sct_ctx_st SCT_CTX; -typedef struct ctlog_st CTLOG; -typedef struct ctlog_store_st CTLOG_STORE; -typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; - -typedef struct ossl_store_info_st OSSL_STORE_INFO; -typedef struct ossl_store_search_st OSSL_STORE_SEARCH; - -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ - defined(INTMAX_MAX) && defined(UINTMAX_MAX) -typedef intmax_t ossl_intmax_t; -typedef uintmax_t ossl_uintmax_t; -#else -/* - * Not long long, because the C-library can only be expected to provide - * strtoll(), strtoull() at the same time as intmax_t and strtoimax(), - * strtoumax(). Since we use these for parsing arguments, we need the - * conversion functions, not just the sizes. - */ -typedef long ossl_intmax_t; -typedef unsigned long ossl_uintmax_t; -#endif - -#ifdef __cplusplus -} -#endif -#endif /* def HEADER_OPENSSL_TYPES_H */ diff --git a/submodules/MtProtoKit/openssl/openssl/pem.h b/submodules/MtProtoKit/openssl/openssl/pem.h deleted file mode 100644 index 2ef5b5d04c..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/pem.h +++ /dev/null @@ -1,378 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_PEM_H -# define HEADER_PEM_H - -# include -# include -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define PEM_BUFSIZE 1024 - -# define PEM_STRING_X509_OLD "X509 CERTIFICATE" -# define PEM_STRING_X509 "CERTIFICATE" -# define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE" -# define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST" -# define PEM_STRING_X509_REQ "CERTIFICATE REQUEST" -# define PEM_STRING_X509_CRL "X509 CRL" -# define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY" -# define PEM_STRING_PUBLIC "PUBLIC KEY" -# define PEM_STRING_RSA "RSA PRIVATE KEY" -# define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY" -# define PEM_STRING_DSA "DSA PRIVATE KEY" -# define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY" -# define PEM_STRING_PKCS7 "PKCS7" -# define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA" -# define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY" -# define PEM_STRING_PKCS8INF "PRIVATE KEY" -# define PEM_STRING_DHPARAMS "DH PARAMETERS" -# define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS" -# define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" -# define PEM_STRING_DSAPARAMS "DSA PARAMETERS" -# define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY" -# define PEM_STRING_ECPARAMETERS "EC PARAMETERS" -# define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY" -# define PEM_STRING_PARAMETERS "PARAMETERS" -# define PEM_STRING_CMS "CMS" - -# define PEM_TYPE_ENCRYPTED 10 -# define PEM_TYPE_MIC_ONLY 20 -# define PEM_TYPE_MIC_CLEAR 30 -# define PEM_TYPE_CLEAR 40 - -/* - * These macros make the PEM_read/PEM_write functions easier to maintain and - * write. Now they are all implemented with either: IMPLEMENT_PEM_rw(...) or - * IMPLEMENT_PEM_rw_cb(...) - */ - -# ifdef OPENSSL_NO_STDIO - -# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ -# else - -# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ -type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \ -} - -# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, const type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } - -# endif - -# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ -type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \ -} - -# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, const type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write(name, type, str, asn1) \ - IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ - IMPLEMENT_PEM_write_fp(name, type, str, asn1) - -# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) - -# define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) - -# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) - -# define IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ - IMPLEMENT_PEM_read_fp(name, type, str, asn1) - -# define IMPLEMENT_PEM_rw(name, type, str, asn1) \ - IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_write(name, type, str, asn1) - -# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ - IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_write_const(name, type, str, asn1) - -# define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ - IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb(name, type, str, asn1) - -/* These are the same except they are for the declarations */ - -# if defined(OPENSSL_NO_STDIO) - -# define DECLARE_PEM_read_fp(name, type) /**/ -# define DECLARE_PEM_write_fp(name, type) /**/ -# define DECLARE_PEM_write_fp_const(name, type) /**/ -# define DECLARE_PEM_write_cb_fp(name, type) /**/ -# else - -# define DECLARE_PEM_read_fp(name, type) \ - type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u); - -# define DECLARE_PEM_write_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x); - -# define DECLARE_PEM_write_fp_const(name, type) \ - int PEM_write_##name(FILE *fp, const type *x); - -# define DECLARE_PEM_write_cb_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); - -# endif - -# define DECLARE_PEM_read_bio(name, type) \ - type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); - -# define DECLARE_PEM_write_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x); - -# define DECLARE_PEM_write_bio_const(name, type) \ - int PEM_write_bio_##name(BIO *bp, const type *x); - -# define DECLARE_PEM_write_cb_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); - -# define DECLARE_PEM_write(name, type) \ - DECLARE_PEM_write_bio(name, type) \ - DECLARE_PEM_write_fp(name, type) -# define DECLARE_PEM_write_const(name, type) \ - DECLARE_PEM_write_bio_const(name, type) \ - DECLARE_PEM_write_fp_const(name, type) -# define DECLARE_PEM_write_cb(name, type) \ - DECLARE_PEM_write_cb_bio(name, type) \ - DECLARE_PEM_write_cb_fp(name, type) -# define DECLARE_PEM_read(name, type) \ - DECLARE_PEM_read_bio(name, type) \ - DECLARE_PEM_read_fp(name, type) -# define DECLARE_PEM_rw(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write(name, type) -# define DECLARE_PEM_rw_const(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_const(name, type) -# define DECLARE_PEM_rw_cb(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_cb(name, type) -typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); - -int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher); -int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len, - pem_password_cb *callback, void *u); - -int PEM_read_bio(BIO *bp, char **name, char **header, - unsigned char **data, long *len); -# define PEM_FLAG_SECURE 0x1 -# define PEM_FLAG_EAY_COMPATIBLE 0x2 -# define PEM_FLAG_ONLY_B64 0x4 -int PEM_read_bio_ex(BIO *bp, char **name, char **header, - unsigned char **data, long *len, unsigned int flags); -int PEM_bytes_read_bio_secmem(unsigned char **pdata, long *plen, char **pnm, - const char *name, BIO *bp, pem_password_cb *cb, - void *u); -int PEM_write_bio(BIO *bp, const char *name, const char *hdr, - const unsigned char *data, long len); -int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, - const char *name, BIO *bp, pem_password_cb *cb, - void *u); -void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x, - pem_password_cb *cb, void *u); -int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, void *x, - const EVP_CIPHER *enc, unsigned char *kstr, int klen, - pem_password_cb *cb, void *u); - -STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, - pem_password_cb *cb, void *u); -int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, - unsigned char *kstr, int klen, - pem_password_cb *cd, void *u); - -#ifndef OPENSSL_NO_STDIO -int PEM_read(FILE *fp, char **name, char **header, - unsigned char **data, long *len); -int PEM_write(FILE *fp, const char *name, const char *hdr, - const unsigned char *data, long len); -void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, - pem_password_cb *cb, void *u); -int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, - void *x, const EVP_CIPHER *enc, unsigned char *kstr, - int klen, pem_password_cb *callback, void *u); -STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, - pem_password_cb *cb, void *u); -#endif - -int PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); -int PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *d, unsigned int cnt); -int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, - unsigned int *siglen, EVP_PKEY *pkey); - -/* The default pem_password_cb that's used internally */ -int PEM_def_callback(char *buf, int num, int rwflag, void *userdata); -void PEM_proc_type(char *buf, int type); -void PEM_dek_info(char *buf, const char *type, int len, char *str); - -# include - -DECLARE_PEM_rw(X509, X509) -DECLARE_PEM_rw(X509_AUX, X509) -DECLARE_PEM_rw(X509_REQ, X509_REQ) -DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) -DECLARE_PEM_rw(X509_CRL, X509_CRL) -DECLARE_PEM_rw(PKCS7, PKCS7) -DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) -DECLARE_PEM_rw(PKCS8, X509_SIG) -DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) -# ifndef OPENSSL_NO_RSA -DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) -DECLARE_PEM_rw_const(RSAPublicKey, RSA) -DECLARE_PEM_rw(RSA_PUBKEY, RSA) -# endif -# ifndef OPENSSL_NO_DSA -DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) -DECLARE_PEM_rw(DSA_PUBKEY, DSA) -DECLARE_PEM_rw_const(DSAparams, DSA) -# endif -# ifndef OPENSSL_NO_EC -DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP) -DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) -DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) -# endif -# ifndef OPENSSL_NO_DH -DECLARE_PEM_rw_const(DHparams, DH) -DECLARE_PEM_write_const(DHxparams, DH) -# endif -DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) -DECLARE_PEM_rw(PUBKEY, EVP_PKEY) - -int PEM_write_bio_PrivateKey_traditional(BIO *bp, EVP_PKEY *x, - const EVP_CIPHER *enc, - unsigned char *kstr, int klen, - pem_password_cb *cb, void *u); - -int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, - char *, int, pem_password_cb *, void *); -int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); -EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, - void *u); - -# ifndef OPENSSL_NO_STDIO -int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); - -EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, - void *u); - -int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, pem_password_cb *cd, - void *u); -# endif -EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); -int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); - -# ifndef OPENSSL_NO_DSA -EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); -EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); -EVP_PKEY *b2i_PrivateKey_bio(BIO *in); -EVP_PKEY *b2i_PublicKey_bio(BIO *in); -int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk); -int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk); -# ifndef OPENSSL_NO_RC4 -EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); -int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, - pem_password_cb *cb, void *u); -# endif -# endif - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/pem2.h b/submodules/MtProtoKit/openssl/openssl/pem2.h deleted file mode 100644 index 038fe790ac..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/pem2.h +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_PEM2_H -# define HEADER_PEM2_H -# include -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/pemerr.h b/submodules/MtProtoKit/openssl/openssl/pemerr.h deleted file mode 100644 index 0c45918f3c..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/pemerr.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_PEMERR_H -# define HEADER_PEMERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PEM_strings(void); - -/* - * PEM function codes. - */ -# define PEM_F_B2I_DSS 127 -# define PEM_F_B2I_PVK_BIO 128 -# define PEM_F_B2I_RSA 129 -# define PEM_F_CHECK_BITLEN_DSA 130 -# define PEM_F_CHECK_BITLEN_RSA 131 -# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 -# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 -# define PEM_F_DO_B2I 132 -# define PEM_F_DO_B2I_BIO 133 -# define PEM_F_DO_BLOB_HEADER 134 -# define PEM_F_DO_I2B 146 -# define PEM_F_DO_PK8PKEY 126 -# define PEM_F_DO_PK8PKEY_FP 125 -# define PEM_F_DO_PVK_BODY 135 -# define PEM_F_DO_PVK_HEADER 136 -# define PEM_F_GET_HEADER_AND_DATA 143 -# define PEM_F_GET_NAME 144 -# define PEM_F_I2B_PVK 137 -# define PEM_F_I2B_PVK_BIO 138 -# define PEM_F_LOAD_IV 101 -# define PEM_F_PEM_ASN1_READ 102 -# define PEM_F_PEM_ASN1_READ_BIO 103 -# define PEM_F_PEM_ASN1_WRITE 104 -# define PEM_F_PEM_ASN1_WRITE_BIO 105 -# define PEM_F_PEM_DEF_CALLBACK 100 -# define PEM_F_PEM_DO_HEADER 106 -# define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 -# define PEM_F_PEM_READ 108 -# define PEM_F_PEM_READ_BIO 109 -# define PEM_F_PEM_READ_BIO_DHPARAMS 141 -# define PEM_F_PEM_READ_BIO_EX 145 -# define PEM_F_PEM_READ_BIO_PARAMETERS 140 -# define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 -# define PEM_F_PEM_READ_DHPARAMS 142 -# define PEM_F_PEM_READ_PRIVATEKEY 124 -# define PEM_F_PEM_SIGNFINAL 112 -# define PEM_F_PEM_WRITE 113 -# define PEM_F_PEM_WRITE_BIO 114 -# define PEM_F_PEM_WRITE_PRIVATEKEY 139 -# define PEM_F_PEM_X509_INFO_READ 115 -# define PEM_F_PEM_X509_INFO_READ_BIO 116 -# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 - -/* - * PEM reason codes. - */ -# define PEM_R_BAD_BASE64_DECODE 100 -# define PEM_R_BAD_DECRYPT 101 -# define PEM_R_BAD_END_LINE 102 -# define PEM_R_BAD_IV_CHARS 103 -# define PEM_R_BAD_MAGIC_NUMBER 116 -# define PEM_R_BAD_PASSWORD_READ 104 -# define PEM_R_BAD_VERSION_NUMBER 117 -# define PEM_R_BIO_WRITE_FAILURE 118 -# define PEM_R_CIPHER_IS_NULL 127 -# define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 -# define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 -# define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 -# define PEM_R_HEADER_TOO_LONG 128 -# define PEM_R_INCONSISTENT_HEADER 121 -# define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 -# define PEM_R_KEYBLOB_TOO_SHORT 123 -# define PEM_R_MISSING_DEK_IV 129 -# define PEM_R_NOT_DEK_INFO 105 -# define PEM_R_NOT_ENCRYPTED 106 -# define PEM_R_NOT_PROC_TYPE 107 -# define PEM_R_NO_START_LINE 108 -# define PEM_R_PROBLEMS_GETTING_PASSWORD 109 -# define PEM_R_PVK_DATA_TOO_SHORT 124 -# define PEM_R_PVK_TOO_SHORT 125 -# define PEM_R_READ_KEY 111 -# define PEM_R_SHORT_HEADER 112 -# define PEM_R_UNEXPECTED_DEK_IV 130 -# define PEM_R_UNSUPPORTED_CIPHER 113 -# define PEM_R_UNSUPPORTED_ENCRYPTION 114 -# define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/pkcs12.h b/submodules/MtProtoKit/openssl/openssl/pkcs12.h deleted file mode 100644 index 3f43dad6d9..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/pkcs12.h +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_PKCS12_H -# define HEADER_PKCS12_H - -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define PKCS12_KEY_ID 1 -# define PKCS12_IV_ID 2 -# define PKCS12_MAC_ID 3 - -/* Default iteration count */ -# ifndef PKCS12_DEFAULT_ITER -# define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER -# endif - -# define PKCS12_MAC_KEY_LENGTH 20 - -# define PKCS12_SALT_LEN 8 - -/* It's not clear if these are actually needed... */ -# define PKCS12_key_gen PKCS12_key_gen_utf8 -# define PKCS12_add_friendlyname PKCS12_add_friendlyname_utf8 - -/* MS key usage constants */ - -# define KEY_EX 0x10 -# define KEY_SIG 0x80 - -typedef struct PKCS12_MAC_DATA_st PKCS12_MAC_DATA; - -typedef struct PKCS12_st PKCS12; - -typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; - -DEFINE_STACK_OF(PKCS12_SAFEBAG) - -typedef struct pkcs12_bag_st PKCS12_BAGS; - -# define PKCS12_ERROR 0 -# define PKCS12_OK 1 - -/* Compatibility macros */ - -#if OPENSSL_API_COMPAT < 0x10100000L - -# define M_PKCS12_bag_type PKCS12_bag_type -# define M_PKCS12_cert_bag_type PKCS12_cert_bag_type -# define M_PKCS12_crl_bag_type PKCS12_cert_bag_type - -# define PKCS12_certbag2x509 PKCS12_SAFEBAG_get1_cert -# define PKCS12_certbag2scrl PKCS12_SAFEBAG_get1_crl -# define PKCS12_bag_type PKCS12_SAFEBAG_get_nid -# define PKCS12_cert_bag_type PKCS12_SAFEBAG_get_bag_nid -# define PKCS12_x5092certbag PKCS12_SAFEBAG_create_cert -# define PKCS12_x509crl2certbag PKCS12_SAFEBAG_create_crl -# define PKCS12_MAKE_KEYBAG PKCS12_SAFEBAG_create0_p8inf -# define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt - -#endif - -DEPRECATEDIN_1_1_0(ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, int attr_nid)) - -ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); -int PKCS12_mac_present(const PKCS12 *p12); -void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, - const X509_ALGOR **pmacalg, - const ASN1_OCTET_STRING **psalt, - const ASN1_INTEGER **piter, - const PKCS12 *p12); - -const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, - int attr_nid); -const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); -int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); -int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); - -X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); -X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); -const STACK_OF(PKCS12_SAFEBAG) * -PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag); -const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag); -const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); - -PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); -PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); -PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); -PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); -PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, - const char *pass, - int passlen, - unsigned char *salt, - int saltlen, int iter, - PKCS8_PRIV_KEY_INFO *p8inf); - -PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, - int nid1, int nid2); -PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, - int passlen); -PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, - const char *pass, int passlen); -X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, - const char *pass, int passlen, unsigned char *salt, - int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); -X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, - PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); -PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); -STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); -PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, - unsigned char *salt, int saltlen, int iter, - STACK_OF(PKCS12_SAFEBAG) *bags); -STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, - int passlen); - -int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); -STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12); - -int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, - int namelen); -int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, - int namelen); -int PKCS12_add_friendlyname_utf8(PKCS12_SAFEBAG *bag, const char *name, - int namelen); -int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, - int namelen); -int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, - const unsigned char *name, int namelen); -int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); -ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, - int attr_nid); -char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); -const STACK_OF(X509_ATTRIBUTE) * -PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag); -unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, - const char *pass, int passlen, - const unsigned char *in, int inlen, - unsigned char **data, int *datalen, - int en_de); -void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, - const char *pass, int passlen, - const ASN1_OCTET_STRING *oct, int zbuf); -ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, - const ASN1_ITEM *it, - const char *pass, int passlen, - void *obj, int zbuf); -PKCS12 *PKCS12_init(int mode); -int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, - int saltlen, int id, int iter, int n, - unsigned char *out, const EVP_MD *md_type); -int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, - int saltlen, int id, int iter, int n, - unsigned char *out, const EVP_MD *md_type); -int PKCS12_key_gen_utf8(const char *pass, int passlen, unsigned char *salt, - int saltlen, int id, int iter, int n, - unsigned char *out, const EVP_MD *md_type); -int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, - ASN1_TYPE *param, const EVP_CIPHER *cipher, - const EVP_MD *md_type, int en_de); -int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, - unsigned char *mac, unsigned int *maclen); -int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); -int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, - unsigned char *salt, int saltlen, int iter, - const EVP_MD *md_type); -int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, - int saltlen, const EVP_MD *md_type); -unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, - unsigned char **uni, int *unilen); -char *OPENSSL_uni2asc(const unsigned char *uni, int unilen); -unsigned char *OPENSSL_utf82uni(const char *asc, int asclen, - unsigned char **uni, int *unilen); -char *OPENSSL_uni2utf8(const unsigned char *uni, int unilen); - -DECLARE_ASN1_FUNCTIONS(PKCS12) -DECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA) -DECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG) -DECLARE_ASN1_FUNCTIONS(PKCS12_BAGS) - -DECLARE_ASN1_ITEM(PKCS12_SAFEBAGS) -DECLARE_ASN1_ITEM(PKCS12_AUTHSAFES) - -void PKCS12_PBE_add(void); -int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, - STACK_OF(X509) **ca); -PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, - X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, - int iter, int mac_iter, int keytype); - -PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); -PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, - EVP_PKEY *key, int key_usage, int iter, - int key_nid, const char *pass); -int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, - int safe_nid, int iter, const char *pass); -PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); - -int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); -# ifndef OPENSSL_NO_STDIO -int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); -# endif -PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); -# ifndef OPENSSL_NO_STDIO -PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); -# endif -int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/pkcs12err.h b/submodules/MtProtoKit/openssl/openssl/pkcs12err.h deleted file mode 100644 index eff5eb2602..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/pkcs12err.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_PKCS12ERR_H -# define HEADER_PKCS12ERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PKCS12_strings(void); - -/* - * PKCS12 function codes. - */ -# define PKCS12_F_OPENSSL_ASC2UNI 121 -# define PKCS12_F_OPENSSL_UNI2ASC 124 -# define PKCS12_F_OPENSSL_UNI2UTF8 127 -# define PKCS12_F_OPENSSL_UTF82UNI 129 -# define PKCS12_F_PKCS12_CREATE 105 -# define PKCS12_F_PKCS12_GEN_MAC 107 -# define PKCS12_F_PKCS12_INIT 109 -# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 -# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 -# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 -# define PKCS12_F_PKCS12_KEY_GEN_ASC 110 -# define PKCS12_F_PKCS12_KEY_GEN_UNI 111 -# define PKCS12_F_PKCS12_KEY_GEN_UTF8 116 -# define PKCS12_F_PKCS12_NEWPASS 128 -# define PKCS12_F_PKCS12_PACK_P7DATA 114 -# define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 -# define PKCS12_F_PKCS12_PARSE 118 -# define PKCS12_F_PKCS12_PBE_CRYPT 119 -# define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 112 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 113 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 133 -# define PKCS12_F_PKCS12_SETUP_MAC 122 -# define PKCS12_F_PKCS12_SET_MAC 123 -# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 -# define PKCS12_F_PKCS12_UNPACK_P7DATA 131 -# define PKCS12_F_PKCS12_VERIFY_MAC 126 -# define PKCS12_F_PKCS8_ENCRYPT 125 -# define PKCS12_F_PKCS8_SET0_PBE 132 - -/* - * PKCS12 reason codes. - */ -# define PKCS12_R_CANT_PACK_STRUCTURE 100 -# define PKCS12_R_CONTENT_TYPE_NOT_DATA 121 -# define PKCS12_R_DECODE_ERROR 101 -# define PKCS12_R_ENCODE_ERROR 102 -# define PKCS12_R_ENCRYPT_ERROR 103 -# define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 -# define PKCS12_R_INVALID_NULL_ARGUMENT 104 -# define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 -# define PKCS12_R_IV_GEN_ERROR 106 -# define PKCS12_R_KEY_GEN_ERROR 107 -# define PKCS12_R_MAC_ABSENT 108 -# define PKCS12_R_MAC_GENERATION_ERROR 109 -# define PKCS12_R_MAC_SETUP_ERROR 110 -# define PKCS12_R_MAC_STRING_SET_ERROR 111 -# define PKCS12_R_MAC_VERIFY_FAILURE 113 -# define PKCS12_R_PARSE_ERROR 114 -# define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 -# define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 -# define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 -# define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 -# define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/pkcs7.h b/submodules/MtProtoKit/openssl/openssl/pkcs7.h deleted file mode 100644 index 9b66e002d2..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/pkcs7.h +++ /dev/null @@ -1,319 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_PKCS7_H -# define HEADER_PKCS7_H - -# include -# include -# include - -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/*- -Encryption_ID DES-CBC -Digest_ID MD5 -Digest_Encryption_ID rsaEncryption -Key_Encryption_ID rsaEncryption -*/ - -typedef struct pkcs7_issuer_and_serial_st { - X509_NAME *issuer; - ASN1_INTEGER *serial; -} PKCS7_ISSUER_AND_SERIAL; - -typedef struct pkcs7_signer_info_st { - ASN1_INTEGER *version; /* version 1 */ - PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; - X509_ALGOR *digest_alg; - STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */ - X509_ALGOR *digest_enc_alg; - ASN1_OCTET_STRING *enc_digest; - STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ - /* The private key to sign with */ - EVP_PKEY *pkey; -} PKCS7_SIGNER_INFO; - -DEFINE_STACK_OF(PKCS7_SIGNER_INFO) - -typedef struct pkcs7_recip_info_st { - ASN1_INTEGER *version; /* version 0 */ - PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; - X509_ALGOR *key_enc_algor; - ASN1_OCTET_STRING *enc_key; - X509 *cert; /* get the pub-key from this */ -} PKCS7_RECIP_INFO; - -DEFINE_STACK_OF(PKCS7_RECIP_INFO) - -typedef struct pkcs7_signed_st { - ASN1_INTEGER *version; /* version 1 */ - STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ - STACK_OF(PKCS7_SIGNER_INFO) *signer_info; - struct pkcs7_st *contents; -} PKCS7_SIGNED; -/* - * The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about - * merging the two - */ - -typedef struct pkcs7_enc_content_st { - ASN1_OBJECT *content_type; - X509_ALGOR *algorithm; - ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ - const EVP_CIPHER *cipher; -} PKCS7_ENC_CONTENT; - -typedef struct pkcs7_enveloped_st { - ASN1_INTEGER *version; /* version 0 */ - STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; - PKCS7_ENC_CONTENT *enc_data; -} PKCS7_ENVELOPE; - -typedef struct pkcs7_signedandenveloped_st { - ASN1_INTEGER *version; /* version 1 */ - STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ - STACK_OF(PKCS7_SIGNER_INFO) *signer_info; - PKCS7_ENC_CONTENT *enc_data; - STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; -} PKCS7_SIGN_ENVELOPE; - -typedef struct pkcs7_digest_st { - ASN1_INTEGER *version; /* version 0 */ - X509_ALGOR *md; /* md used */ - struct pkcs7_st *contents; - ASN1_OCTET_STRING *digest; -} PKCS7_DIGEST; - -typedef struct pkcs7_encrypted_st { - ASN1_INTEGER *version; /* version 0 */ - PKCS7_ENC_CONTENT *enc_data; -} PKCS7_ENCRYPT; - -typedef struct pkcs7_st { - /* - * The following is non NULL if it contains ASN1 encoding of this - * structure - */ - unsigned char *asn1; - long length; -# define PKCS7_S_HEADER 0 -# define PKCS7_S_BODY 1 -# define PKCS7_S_TAIL 2 - int state; /* used during processing */ - int detached; - ASN1_OBJECT *type; - /* content as defined by the type */ - /* - * all encryption/message digests are applied to the 'contents', leaving - * out the 'type' field. - */ - union { - char *ptr; - /* NID_pkcs7_data */ - ASN1_OCTET_STRING *data; - /* NID_pkcs7_signed */ - PKCS7_SIGNED *sign; - /* NID_pkcs7_enveloped */ - PKCS7_ENVELOPE *enveloped; - /* NID_pkcs7_signedAndEnveloped */ - PKCS7_SIGN_ENVELOPE *signed_and_enveloped; - /* NID_pkcs7_digest */ - PKCS7_DIGEST *digest; - /* NID_pkcs7_encrypted */ - PKCS7_ENCRYPT *encrypted; - /* Anything else */ - ASN1_TYPE *other; - } d; -} PKCS7; - -DEFINE_STACK_OF(PKCS7) - -# define PKCS7_OP_SET_DETACHED_SIGNATURE 1 -# define PKCS7_OP_GET_DETACHED_SIGNATURE 2 - -# define PKCS7_get_signed_attributes(si) ((si)->auth_attr) -# define PKCS7_get_attributes(si) ((si)->unauth_attr) - -# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) -# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) -# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) -# define PKCS7_type_is_signedAndEnveloped(a) \ - (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) -# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data) -# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) - -# define PKCS7_set_detached(p,v) \ - PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL) -# define PKCS7_get_detached(p) \ - PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL) - -# define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7)) - -/* S/MIME related flags */ - -# define PKCS7_TEXT 0x1 -# define PKCS7_NOCERTS 0x2 -# define PKCS7_NOSIGS 0x4 -# define PKCS7_NOCHAIN 0x8 -# define PKCS7_NOINTERN 0x10 -# define PKCS7_NOVERIFY 0x20 -# define PKCS7_DETACHED 0x40 -# define PKCS7_BINARY 0x80 -# define PKCS7_NOATTR 0x100 -# define PKCS7_NOSMIMECAP 0x200 -# define PKCS7_NOOLDMIMETYPE 0x400 -# define PKCS7_CRLFEOL 0x800 -# define PKCS7_STREAM 0x1000 -# define PKCS7_NOCRL 0x2000 -# define PKCS7_PARTIAL 0x4000 -# define PKCS7_REUSE_DIGEST 0x8000 -# define PKCS7_NO_DUAL_CONTENT 0x10000 - -/* Flags: for compatibility with older code */ - -# define SMIME_TEXT PKCS7_TEXT -# define SMIME_NOCERTS PKCS7_NOCERTS -# define SMIME_NOSIGS PKCS7_NOSIGS -# define SMIME_NOCHAIN PKCS7_NOCHAIN -# define SMIME_NOINTERN PKCS7_NOINTERN -# define SMIME_NOVERIFY PKCS7_NOVERIFY -# define SMIME_DETACHED PKCS7_DETACHED -# define SMIME_BINARY PKCS7_BINARY -# define SMIME_NOATTR PKCS7_NOATTR - -/* CRLF ASCII canonicalisation */ -# define SMIME_ASCIICRLF 0x80000 - -DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) - -int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, - const EVP_MD *type, unsigned char *md, - unsigned int *len); -# ifndef OPENSSL_NO_STDIO -PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); -int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7); -# endif -PKCS7 *PKCS7_dup(PKCS7 *p7); -PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); -int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7); -int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); -int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); - -DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) -DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) -DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED) -DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) -DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE) -DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) -DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) -DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) -DECLARE_ASN1_FUNCTIONS(PKCS7) - -DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) -DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) - -DECLARE_ASN1_NDEF_FUNCTION(PKCS7) -DECLARE_ASN1_PRINT_FUNCTION(PKCS7) - -long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); - -int PKCS7_set_type(PKCS7 *p7, int type); -int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); -int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); -int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, - const EVP_MD *dgst); -int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); -int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); -int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); -int PKCS7_content_new(PKCS7 *p7, int nid); -int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, - BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); -int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, - X509 *x509); - -BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); -int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); -BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert); - -PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, - EVP_PKEY *pkey, const EVP_MD *dgst); -X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si); -int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md); -STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7); - -PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509); -void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, - X509_ALGOR **pdig, X509_ALGOR **psig); -void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc); -int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri); -int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509); -int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); -int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); - -PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); -ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); -int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, - void *data); -int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, - void *value); -ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid); -ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid); -int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, - STACK_OF(X509_ATTRIBUTE) *sk); -int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, - STACK_OF(X509_ATTRIBUTE) *sk); - -PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, - BIO *data, int flags); - -PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, - X509 *signcert, EVP_PKEY *pkey, - const EVP_MD *md, int flags); - -int PKCS7_final(PKCS7 *p7, BIO *data, int flags); -int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, - BIO *indata, BIO *out, int flags); -STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, - int flags); -PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, - int flags); -int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, - int flags); - -int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, - STACK_OF(X509_ALGOR) *cap); -STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si); -int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg); - -int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid); -int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t); -int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, - const unsigned char *md, int mdlen); - -int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); -PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); - -BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/pkcs7err.h b/submodules/MtProtoKit/openssl/openssl/pkcs7err.h deleted file mode 100644 index 02e0299a3c..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/pkcs7err.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_PKCS7ERR_H -# define HEADER_PKCS7ERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PKCS7_strings(void); - -/* - * PKCS7 function codes. - */ -# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 -# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 -# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 -# define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 -# define PKCS7_F_PKCS7_ADD_CRL 101 -# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 -# define PKCS7_F_PKCS7_ADD_SIGNATURE 131 -# define PKCS7_F_PKCS7_ADD_SIGNER 103 -# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 -# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 -# define PKCS7_F_PKCS7_CTRL 104 -# define PKCS7_F_PKCS7_DATADECODE 112 -# define PKCS7_F_PKCS7_DATAFINAL 128 -# define PKCS7_F_PKCS7_DATAINIT 105 -# define PKCS7_F_PKCS7_DATAVERIFY 107 -# define PKCS7_F_PKCS7_DECRYPT 114 -# define PKCS7_F_PKCS7_DECRYPT_RINFO 133 -# define PKCS7_F_PKCS7_ENCODE_RINFO 132 -# define PKCS7_F_PKCS7_ENCRYPT 115 -# define PKCS7_F_PKCS7_FINAL 134 -# define PKCS7_F_PKCS7_FIND_DIGEST 127 -# define PKCS7_F_PKCS7_GET0_SIGNERS 124 -# define PKCS7_F_PKCS7_RECIP_INFO_SET 130 -# define PKCS7_F_PKCS7_SET_CIPHER 108 -# define PKCS7_F_PKCS7_SET_CONTENT 109 -# define PKCS7_F_PKCS7_SET_DIGEST 126 -# define PKCS7_F_PKCS7_SET_TYPE 110 -# define PKCS7_F_PKCS7_SIGN 116 -# define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 -# define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 -# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 -# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 -# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 -# define PKCS7_F_PKCS7_VERIFY 117 - -/* - * PKCS7 reason codes. - */ -# define PKCS7_R_CERTIFICATE_VERIFY_ERROR 117 -# define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 144 -# define PKCS7_R_CIPHER_NOT_INITIALIZED 116 -# define PKCS7_R_CONTENT_AND_DATA_PRESENT 118 -# define PKCS7_R_CTRL_ERROR 152 -# define PKCS7_R_DECRYPT_ERROR 119 -# define PKCS7_R_DIGEST_FAILURE 101 -# define PKCS7_R_ENCRYPTION_CTRL_FAILURE 149 -# define PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 150 -# define PKCS7_R_ERROR_ADDING_RECIPIENT 120 -# define PKCS7_R_ERROR_SETTING_CIPHER 121 -# define PKCS7_R_INVALID_NULL_POINTER 143 -# define PKCS7_R_INVALID_SIGNED_DATA_TYPE 155 -# define PKCS7_R_NO_CONTENT 122 -# define PKCS7_R_NO_DEFAULT_DIGEST 151 -# define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 -# define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 -# define PKCS7_R_NO_SIGNATURES_ON_DATA 123 -# define PKCS7_R_NO_SIGNERS 142 -# define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE 104 -# define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR 124 -# define PKCS7_R_PKCS7_ADD_SIGNER_ERROR 153 -# define PKCS7_R_PKCS7_DATASIGN 145 -# define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 127 -# define PKCS7_R_SIGNATURE_FAILURE 105 -# define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND 128 -# define PKCS7_R_SIGNING_CTRL_FAILURE 147 -# define PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 148 -# define PKCS7_R_SMIME_TEXT_ERROR 129 -# define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE 106 -# define PKCS7_R_UNABLE_TO_FIND_MEM_BIO 107 -# define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST 108 -# define PKCS7_R_UNKNOWN_DIGEST_TYPE 109 -# define PKCS7_R_UNKNOWN_OPERATION 110 -# define PKCS7_R_UNSUPPORTED_CIPHER_TYPE 111 -# define PKCS7_R_UNSUPPORTED_CONTENT_TYPE 112 -# define PKCS7_R_WRONG_CONTENT_TYPE 113 -# define PKCS7_R_WRONG_PKCS7_TYPE 114 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/pqueue.h b/submodules/MtProtoKit/openssl/openssl/pqueue.h deleted file mode 100644 index d40d9c7d85..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/pqueue.h +++ /dev/null @@ -1,99 +0,0 @@ -/* crypto/pqueue/pqueue.h */ -/* - * DTLS implementation written by Nagendra Modadugu - * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. - */ -/* ==================================================================== - * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_PQUEUE_H -# define HEADER_PQUEUE_H - -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif -typedef struct _pqueue *pqueue; - -typedef struct _pitem { - unsigned char priority[8]; /* 64-bit value in big-endian encoding */ - void *data; - struct _pitem *next; -} pitem; - -typedef struct _pitem *piterator; - -pitem *pitem_new(unsigned char *prio64be, void *data); -void pitem_free(pitem *item); - -pqueue pqueue_new(void); -void pqueue_free(pqueue pq); - -pitem *pqueue_insert(pqueue pq, pitem *item); -pitem *pqueue_peek(pqueue pq); -pitem *pqueue_pop(pqueue pq); -pitem *pqueue_find(pqueue pq, unsigned char *prio64be); -pitem *pqueue_iterator(pqueue pq); -pitem *pqueue_next(piterator *iter); - -void pqueue_print(pqueue pq); -int pqueue_size(pqueue pq); - -#ifdef __cplusplus -} -#endif -#endif /* ! HEADER_PQUEUE_H */ diff --git a/submodules/MtProtoKit/openssl/openssl/rand.h b/submodules/MtProtoKit/openssl/openssl/rand.h deleted file mode 100644 index 38a2a2718f..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/rand.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RAND_H -# define HEADER_RAND_H - -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -struct rand_meth_st { - int (*seed) (const void *buf, int num); - int (*bytes) (unsigned char *buf, int num); - void (*cleanup) (void); - int (*add) (const void *buf, int num, double randomness); - int (*pseudorand) (unsigned char *buf, int num); - int (*status) (void); -}; - -int RAND_set_rand_method(const RAND_METHOD *meth); -const RAND_METHOD *RAND_get_rand_method(void); -# ifndef OPENSSL_NO_ENGINE -int RAND_set_rand_engine(ENGINE *engine); -# endif - -RAND_METHOD *RAND_OpenSSL(void); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define RAND_cleanup() while(0) continue -# endif -int RAND_bytes(unsigned char *buf, int num); -int RAND_priv_bytes(unsigned char *buf, int num); -DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num)) - -void RAND_seed(const void *buf, int num); -void RAND_keep_random_devices_open(int keep); - -# if defined(__ANDROID__) && defined(__NDK_FPABI__) -__NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ -# endif -void RAND_add(const void *buf, int num, double randomness); -int RAND_load_file(const char *file, long max_bytes); -int RAND_write_file(const char *file); -const char *RAND_file_name(char *file, size_t num); -int RAND_status(void); - -# ifndef OPENSSL_NO_EGD -int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes); -int RAND_egd(const char *path); -int RAND_egd_bytes(const char *path, int bytes); -# endif - -int RAND_poll(void); - -# if defined(_WIN32) && (defined(BASETYPES) || defined(_WINDEF_H)) -/* application has to include in order to use these */ -DEPRECATEDIN_1_1_0(void RAND_screen(void)) -DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM)) -# endif - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/rand_drbg.h b/submodules/MtProtoKit/openssl/openssl/rand_drbg.h deleted file mode 100644 index 45b731b73c..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/rand_drbg.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DRBG_RAND_H -# define HEADER_DRBG_RAND_H - -# include -# include -# include - -/* - * RAND_DRBG flags - * - * Note: if new flags are added, the constant `rand_drbg_used_flags` - * in drbg_lib.c needs to be updated accordingly. - */ - -/* In CTR mode, disable derivation function ctr_df */ -# define RAND_DRBG_FLAG_CTR_NO_DF 0x1 - - -# if OPENSSL_API_COMPAT < 0x10200000L -/* This #define was replaced by an internal constant and should not be used. */ -# define RAND_DRBG_USED_FLAGS (RAND_DRBG_FLAG_CTR_NO_DF) -# endif - -/* - * Default security strength (in the sense of [NIST SP 800-90Ar1]) - * - * NIST SP 800-90Ar1 supports the strength of the DRBG being smaller than that - * of the cipher by collecting less entropy. The current DRBG implementation - * does not take RAND_DRBG_STRENGTH into account and sets the strength of the - * DRBG to that of the cipher. - * - * RAND_DRBG_STRENGTH is currently only used for the legacy RAND - * implementation. - * - * Currently supported ciphers are: NID_aes_128_ctr, NID_aes_192_ctr and - * NID_aes_256_ctr - */ -# define RAND_DRBG_STRENGTH 256 -/* Default drbg type */ -# define RAND_DRBG_TYPE NID_aes_256_ctr -/* Default drbg flags */ -# define RAND_DRBG_FLAGS 0 - - -# ifdef __cplusplus -extern "C" { -# endif - -/* - * Object lifetime functions. - */ -RAND_DRBG *RAND_DRBG_new(int type, unsigned int flags, RAND_DRBG *parent); -RAND_DRBG *RAND_DRBG_secure_new(int type, unsigned int flags, RAND_DRBG *parent); -int RAND_DRBG_set(RAND_DRBG *drbg, int type, unsigned int flags); -int RAND_DRBG_set_defaults(int type, unsigned int flags); -int RAND_DRBG_instantiate(RAND_DRBG *drbg, - const unsigned char *pers, size_t perslen); -int RAND_DRBG_uninstantiate(RAND_DRBG *drbg); -void RAND_DRBG_free(RAND_DRBG *drbg); - -/* - * Object "use" functions. - */ -int RAND_DRBG_reseed(RAND_DRBG *drbg, - const unsigned char *adin, size_t adinlen, - int prediction_resistance); -int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen, - int prediction_resistance, - const unsigned char *adin, size_t adinlen); -int RAND_DRBG_bytes(RAND_DRBG *drbg, unsigned char *out, size_t outlen); - -int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg, unsigned int interval); -int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg, time_t interval); - -int RAND_DRBG_set_reseed_defaults( - unsigned int master_reseed_interval, - unsigned int slave_reseed_interval, - time_t master_reseed_time_interval, - time_t slave_reseed_time_interval - ); - -RAND_DRBG *RAND_DRBG_get0_master(void); -RAND_DRBG *RAND_DRBG_get0_public(void); -RAND_DRBG *RAND_DRBG_get0_private(void); - -/* - * EXDATA - */ -# define RAND_DRBG_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DRBG, l, p, newf, dupf, freef) -int RAND_DRBG_set_ex_data(RAND_DRBG *drbg, int idx, void *arg); -void *RAND_DRBG_get_ex_data(const RAND_DRBG *drbg, int idx); - -/* - * Callback function typedefs - */ -typedef size_t (*RAND_DRBG_get_entropy_fn)(RAND_DRBG *drbg, - unsigned char **pout, - int entropy, size_t min_len, - size_t max_len, - int prediction_resistance); -typedef void (*RAND_DRBG_cleanup_entropy_fn)(RAND_DRBG *ctx, - unsigned char *out, size_t outlen); -typedef size_t (*RAND_DRBG_get_nonce_fn)(RAND_DRBG *drbg, unsigned char **pout, - int entropy, size_t min_len, - size_t max_len); -typedef void (*RAND_DRBG_cleanup_nonce_fn)(RAND_DRBG *drbg, - unsigned char *out, size_t outlen); - -int RAND_DRBG_set_callbacks(RAND_DRBG *drbg, - RAND_DRBG_get_entropy_fn get_entropy, - RAND_DRBG_cleanup_entropy_fn cleanup_entropy, - RAND_DRBG_get_nonce_fn get_nonce, - RAND_DRBG_cleanup_nonce_fn cleanup_nonce); - - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/randerr.h b/submodules/MtProtoKit/openssl/openssl/randerr.h deleted file mode 100644 index 70d1a17a4c..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/randerr.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RANDERR_H -# define HEADER_RANDERR_H - -# include - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_RAND_strings(void); - -/* - * RAND function codes. - */ -# define RAND_F_DRBG_BYTES 101 -# define RAND_F_DRBG_GET_ENTROPY 105 -# define RAND_F_DRBG_SETUP 117 -# define RAND_F_GET_ENTROPY 106 -# define RAND_F_RAND_BYTES 100 -# define RAND_F_RAND_DRBG_ENABLE_LOCKING 119 -# define RAND_F_RAND_DRBG_GENERATE 107 -# define RAND_F_RAND_DRBG_GET_ENTROPY 120 -# define RAND_F_RAND_DRBG_GET_NONCE 123 -# define RAND_F_RAND_DRBG_INSTANTIATE 108 -# define RAND_F_RAND_DRBG_NEW 109 -# define RAND_F_RAND_DRBG_RESEED 110 -# define RAND_F_RAND_DRBG_RESTART 102 -# define RAND_F_RAND_DRBG_SET 104 -# define RAND_F_RAND_DRBG_SET_DEFAULTS 121 -# define RAND_F_RAND_DRBG_UNINSTANTIATE 118 -# define RAND_F_RAND_LOAD_FILE 111 -# define RAND_F_RAND_POOL_ACQUIRE_ENTROPY 122 -# define RAND_F_RAND_POOL_ADD 103 -# define RAND_F_RAND_POOL_ADD_BEGIN 113 -# define RAND_F_RAND_POOL_ADD_END 114 -# define RAND_F_RAND_POOL_ATTACH 124 -# define RAND_F_RAND_POOL_BYTES_NEEDED 115 -# define RAND_F_RAND_POOL_GROW 125 -# define RAND_F_RAND_POOL_NEW 116 -# define RAND_F_RAND_WRITE_FILE 112 - -/* - * RAND reason codes. - */ -# define RAND_R_ADDITIONAL_INPUT_TOO_LONG 102 -# define RAND_R_ALREADY_INSTANTIATED 103 -# define RAND_R_ARGUMENT_OUT_OF_RANGE 105 -# define RAND_R_CANNOT_OPEN_FILE 121 -# define RAND_R_DRBG_ALREADY_INITIALIZED 129 -# define RAND_R_DRBG_NOT_INITIALISED 104 -# define RAND_R_ENTROPY_INPUT_TOO_LONG 106 -# define RAND_R_ENTROPY_OUT_OF_RANGE 124 -# define RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED 127 -# define RAND_R_ERROR_INITIALISING_DRBG 107 -# define RAND_R_ERROR_INSTANTIATING_DRBG 108 -# define RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT 109 -# define RAND_R_ERROR_RETRIEVING_ENTROPY 110 -# define RAND_R_ERROR_RETRIEVING_NONCE 111 -# define RAND_R_FAILED_TO_CREATE_LOCK 126 -# define RAND_R_FUNC_NOT_IMPLEMENTED 101 -# define RAND_R_FWRITE_ERROR 123 -# define RAND_R_GENERATE_ERROR 112 -# define RAND_R_INTERNAL_ERROR 113 -# define RAND_R_IN_ERROR_STATE 114 -# define RAND_R_NOT_A_REGULAR_FILE 122 -# define RAND_R_NOT_INSTANTIATED 115 -# define RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED 128 -# define RAND_R_PARENT_LOCKING_NOT_ENABLED 130 -# define RAND_R_PARENT_STRENGTH_TOO_WEAK 131 -# define RAND_R_PERSONALISATION_STRING_TOO_LONG 116 -# define RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED 133 -# define RAND_R_PRNG_NOT_SEEDED 100 -# define RAND_R_RANDOM_POOL_OVERFLOW 125 -# define RAND_R_RANDOM_POOL_UNDERFLOW 134 -# define RAND_R_REQUEST_TOO_LARGE_FOR_DRBG 117 -# define RAND_R_RESEED_ERROR 118 -# define RAND_R_SELFTEST_FAILURE 119 -# define RAND_R_TOO_LITTLE_NONCE_REQUESTED 135 -# define RAND_R_TOO_MUCH_NONCE_REQUESTED 136 -# define RAND_R_UNSUPPORTED_DRBG_FLAGS 132 -# define RAND_R_UNSUPPORTED_DRBG_TYPE 120 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/rc2.h b/submodules/MtProtoKit/openssl/openssl/rc2.h deleted file mode 100644 index 585f9e4c38..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/rc2.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RC2_H -# define HEADER_RC2_H - -# include - -# ifndef OPENSSL_NO_RC2 -# ifdef __cplusplus -extern "C" { -# endif - -typedef unsigned int RC2_INT; - -# define RC2_ENCRYPT 1 -# define RC2_DECRYPT 0 - -# define RC2_BLOCK 8 -# define RC2_KEY_LENGTH 16 - -typedef struct rc2_key_st { - RC2_INT data[64]; -} RC2_KEY; - -void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); -void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, - RC2_KEY *key, int enc); -void RC2_encrypt(unsigned long *data, RC2_KEY *key); -void RC2_decrypt(unsigned long *data, RC2_KEY *key); -void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - RC2_KEY *ks, unsigned char *iv, int enc); -void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num, int enc); -void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/rc4.h b/submodules/MtProtoKit/openssl/openssl/rc4.h deleted file mode 100644 index 86803b37fb..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/rc4.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RC4_H -# define HEADER_RC4_H - -# include - -# ifndef OPENSSL_NO_RC4 -# include -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct rc4_key_st { - RC4_INT x, y; - RC4_INT data[256]; -} RC4_KEY; - -const char *RC4_options(void); -void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); -void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, - unsigned char *outdata); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/rc5.h b/submodules/MtProtoKit/openssl/openssl/rc5.h deleted file mode 100644 index 793f88e4e8..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/rc5.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RC5_H -# define HEADER_RC5_H - -# include - -# ifndef OPENSSL_NO_RC5 -# ifdef __cplusplus -extern "C" { -# endif - -# define RC5_ENCRYPT 1 -# define RC5_DECRYPT 0 - -# define RC5_32_INT unsigned int - -# define RC5_32_BLOCK 8 -# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ - -/* - * This are the only values supported. Tweak the code if you want more The - * most supported modes will be RC5-32/12/16 RC5-32/16/8 - */ -# define RC5_8_ROUNDS 8 -# define RC5_12_ROUNDS 12 -# define RC5_16_ROUNDS 16 - -typedef struct rc5_key_st { - /* Number of rounds */ - int rounds; - RC5_32_INT data[2 * (RC5_16_ROUNDS + 1)]; -} RC5_32_KEY; - -void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data, - int rounds); -void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out, - RC5_32_KEY *key, int enc); -void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); -void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); -void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *ks, unsigned char *iv, - int enc); -void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *schedule, - unsigned char *ivec, int *num); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/ripemd.h b/submodules/MtProtoKit/openssl/openssl/ripemd.h deleted file mode 100644 index c42026aa42..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ripemd.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RIPEMD_H -# define HEADER_RIPEMD_H - -# include - -#ifndef OPENSSL_NO_RMD160 -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -# define RIPEMD160_LONG unsigned int - -# define RIPEMD160_CBLOCK 64 -# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) -# define RIPEMD160_DIGEST_LENGTH 20 - -typedef struct RIPEMD160state_st { - RIPEMD160_LONG A, B, C, D, E; - RIPEMD160_LONG Nl, Nh; - RIPEMD160_LONG data[RIPEMD160_LBLOCK]; - unsigned int num; -} RIPEMD160_CTX; - -int RIPEMD160_Init(RIPEMD160_CTX *c); -int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); -int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); -unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md); -void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b); - -# ifdef __cplusplus -} -# endif -# endif - - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/rsa.h b/submodules/MtProtoKit/openssl/openssl/rsa.h deleted file mode 100644 index cdce1264eb..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/rsa.h +++ /dev/null @@ -1,512 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RSA_H -# define HEADER_RSA_H - -# include - -# ifndef OPENSSL_NO_RSA -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include -# ifdef __cplusplus -extern "C" { -# endif - -/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ - -# ifndef OPENSSL_RSA_MAX_MODULUS_BITS -# define OPENSSL_RSA_MAX_MODULUS_BITS 16384 -# endif - -# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 1024 - -# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS -# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 -# endif -# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS - -/* exponent limit enforced for "large" modulus only */ -# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 -# endif - -# define RSA_3 0x3L -# define RSA_F4 0x10001L - -/* based on RFC 8017 appendix A.1.2 */ -# define RSA_ASN1_VERSION_DEFAULT 0 -# define RSA_ASN1_VERSION_MULTI 1 - -# define RSA_DEFAULT_PRIME_NUM 2 - -# define RSA_METHOD_FLAG_NO_CHECK 0x0001/* don't check pub/private - * match */ - -# define RSA_FLAG_CACHE_PUBLIC 0x0002 -# define RSA_FLAG_CACHE_PRIVATE 0x0004 -# define RSA_FLAG_BLINDING 0x0008 -# define RSA_FLAG_THREAD_SAFE 0x0010 -/* - * This flag means the private key operations will be handled by rsa_mod_exp - * and that they do not depend on the private key components being present: - * for example a key stored in external hardware. Without this flag - * bn_mod_exp gets called when private key components are absent. - */ -# define RSA_FLAG_EXT_PKEY 0x0020 - -/* - * new with 0.9.6j and 0.9.7b; the built-in - * RSA implementation now uses blinding by - * default (ignoring RSA_FLAG_BLINDING), - * but other engines might not need it - */ -# define RSA_FLAG_NO_BLINDING 0x0080 -# if OPENSSL_API_COMPAT < 0x10100000L -/* - * Does nothing. Previously this switched off constant time behaviour. - */ -# define RSA_FLAG_NO_CONSTTIME 0x0000 -# endif -# if OPENSSL_API_COMPAT < 0x00908000L -/* deprecated name for the flag*/ -/* - * new with 0.9.7h; the built-in RSA - * implementation now uses constant time - * modular exponentiation for secret exponents - * by default. This flag causes the - * faster variable sliding window method to - * be used for all exponents. - */ -# define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME -# endif - -# define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ - RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_RSA_PADDING, pad, NULL) - -# define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \ - RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad) - -# define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \ - RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) -/* Salt length matches digest */ -# define RSA_PSS_SALTLEN_DIGEST -1 -/* Verify only: auto detect salt length */ -# define RSA_PSS_SALTLEN_AUTO -2 -/* Set salt length to maximum possible */ -# define RSA_PSS_SALTLEN_MAX -3 -/* Old compatible max salt length for sign only */ -# define RSA_PSS_SALTLEN_MAX_SIGN -2 - -# define EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \ - RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, 0, plen) - -# define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) - -# define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) - -# define EVP_PKEY_CTX_set_rsa_keygen_primes(ctx, primes) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES, primes, NULL) - -# define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)(l)) - -# define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)(l)) - -# define EVP_PKEY_CTX_set_rsa_pss_keygen_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, \ - EVP_PKEY_OP_KEYGEN, EVP_PKEY_CTRL_MD, \ - 0, (void *)(md)) - -# define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) - -# define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 5) - -# define EVP_PKEY_CTRL_GET_RSA_PADDING (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 8) - -# define EVP_PKEY_CTRL_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 10) - -# define EVP_PKEY_CTRL_GET_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12) - -# define EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES (EVP_PKEY_ALG_CTRL + 13) - -# define RSA_PKCS1_PADDING 1 -# define RSA_SSLV23_PADDING 2 -# define RSA_NO_PADDING 3 -# define RSA_PKCS1_OAEP_PADDING 4 -# define RSA_X931_PADDING 5 -/* EVP_PKEY_ only */ -# define RSA_PKCS1_PSS_PADDING 6 - -# define RSA_PKCS1_PADDING_SIZE 11 - -# define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) -# define RSA_get_app_data(s) RSA_get_ex_data(s,0) - -RSA *RSA_new(void); -RSA *RSA_new_method(ENGINE *engine); -int RSA_bits(const RSA *rsa); -int RSA_size(const RSA *rsa); -int RSA_security_bits(const RSA *rsa); - -int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); -int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); -int RSA_set0_crt_params(RSA *r,BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); -int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[], - BIGNUM *coeffs[], int pnum); -void RSA_get0_key(const RSA *r, - const BIGNUM **n, const BIGNUM **e, const BIGNUM **d); -void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q); -int RSA_get_multi_prime_extra_count(const RSA *r); -int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]); -void RSA_get0_crt_params(const RSA *r, - const BIGNUM **dmp1, const BIGNUM **dmq1, - const BIGNUM **iqmp); -int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], - const BIGNUM *coeffs[]); -const BIGNUM *RSA_get0_n(const RSA *d); -const BIGNUM *RSA_get0_e(const RSA *d); -const BIGNUM *RSA_get0_d(const RSA *d); -const BIGNUM *RSA_get0_p(const RSA *d); -const BIGNUM *RSA_get0_q(const RSA *d); -const BIGNUM *RSA_get0_dmp1(const RSA *r); -const BIGNUM *RSA_get0_dmq1(const RSA *r); -const BIGNUM *RSA_get0_iqmp(const RSA *r); -void RSA_clear_flags(RSA *r, int flags); -int RSA_test_flags(const RSA *r, int flags); -void RSA_set_flags(RSA *r, int flags); -int RSA_get_version(RSA *r); -ENGINE *RSA_get0_engine(const RSA *r); - -/* Deprecated version */ -DEPRECATEDIN_0_9_8(RSA *RSA_generate_key(int bits, unsigned long e, void - (*callback) (int, int, void *), - void *cb_arg)) - -/* New version */ -int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); -/* Multi-prime version */ -int RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes, - BIGNUM *e, BN_GENCB *cb); - -int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, - BIGNUM *q2, const BIGNUM *Xp1, const BIGNUM *Xp2, - const BIGNUM *Xp, const BIGNUM *Xq1, const BIGNUM *Xq2, - const BIGNUM *Xq, const BIGNUM *e, BN_GENCB *cb); -int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e, - BN_GENCB *cb); - -int RSA_check_key(const RSA *); -int RSA_check_key_ex(const RSA *, BN_GENCB *cb); - /* next 4 return -1 on error */ -int RSA_public_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_public_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -void RSA_free(RSA *r); -/* "up" the RSA object's reference count */ -int RSA_up_ref(RSA *r); - -int RSA_flags(const RSA *r); - -void RSA_set_default_method(const RSA_METHOD *meth); -const RSA_METHOD *RSA_get_default_method(void); -const RSA_METHOD *RSA_null_method(void); -const RSA_METHOD *RSA_get_method(const RSA *rsa); -int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); - -/* these are the actual RSA functions */ -const RSA_METHOD *RSA_PKCS1_OpenSSL(void); - -int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2); - -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) - -typedef struct rsa_pss_params_st { - X509_ALGOR *hashAlgorithm; - X509_ALGOR *maskGenAlgorithm; - ASN1_INTEGER *saltLength; - ASN1_INTEGER *trailerField; - /* Decoded hash algorithm from maskGenAlgorithm */ - X509_ALGOR *maskHash; -} RSA_PSS_PARAMS; - -DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) - -typedef struct rsa_oaep_params_st { - X509_ALGOR *hashFunc; - X509_ALGOR *maskGenFunc; - X509_ALGOR *pSourceFunc; - /* Decoded hash algorithm from maskGenFunc */ - X509_ALGOR *maskHash; -} RSA_OAEP_PARAMS; - -DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) - -# ifndef OPENSSL_NO_STDIO -int RSA_print_fp(FILE *fp, const RSA *r, int offset); -# endif - -int RSA_print(BIO *bp, const RSA *r, int offset); - -/* - * The following 2 functions sign and verify a X509_SIG ASN1 object inside - * PKCS#1 padded RSA encryption - */ -int RSA_sign(int type, const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, RSA *rsa); -int RSA_verify(int type, const unsigned char *m, unsigned int m_length, - const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); - -/* - * The following 2 function sign and verify a ASN1_OCTET_STRING object inside - * PKCS#1 padded RSA encryption - */ -int RSA_sign_ASN1_OCTET_STRING(int type, - const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, - RSA *rsa); -int RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m, - unsigned int m_length, unsigned char *sigbuf, - unsigned int siglen, RSA *rsa); - -int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); -void RSA_blinding_off(RSA *rsa); -BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); - -int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, - const unsigned char *f, int fl, - int rsa_len); -int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, - const unsigned char *f, int fl, - int rsa_len); -int PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, - long seedlen, const EVP_MD *dgst); -int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, - const unsigned char *f, int fl, - const unsigned char *p, int pl); -int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len, - const unsigned char *p, int pl); -int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, - const unsigned char *from, int flen, - const unsigned char *param, int plen, - const EVP_MD *md, const EVP_MD *mgf1md); -int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, - const unsigned char *from, int flen, - int num, const unsigned char *param, - int plen, const EVP_MD *md, - const EVP_MD *mgf1md); -int RSA_padding_add_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_none(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_X931(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_X931_hash_id(int nid); - -int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, - const EVP_MD *Hash, const unsigned char *EM, - int sLen); -int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, - const unsigned char *mHash, const EVP_MD *Hash, - int sLen); - -int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, - const EVP_MD *Hash, const EVP_MD *mgf1Hash, - const unsigned char *EM, int sLen); - -int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, - const unsigned char *mHash, - const EVP_MD *Hash, const EVP_MD *mgf1Hash, - int sLen); - -#define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, l, p, newf, dupf, freef) -int RSA_set_ex_data(RSA *r, int idx, void *arg); -void *RSA_get_ex_data(const RSA *r, int idx); - -RSA *RSAPublicKey_dup(RSA *rsa); -RSA *RSAPrivateKey_dup(RSA *rsa); - -/* - * If this flag is set the RSA method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its responsibility to ensure the - * result is compliant. - */ - -# define RSA_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 -/* - * Application has decided PRNG is good enough to generate a key: don't - * check. - */ -# define RSA_FLAG_CHECKED 0x0800 - -RSA_METHOD *RSA_meth_new(const char *name, int flags); -void RSA_meth_free(RSA_METHOD *meth); -RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); -const char *RSA_meth_get0_name(const RSA_METHOD *meth); -int RSA_meth_set1_name(RSA_METHOD *meth, const char *name); -int RSA_meth_get_flags(const RSA_METHOD *meth); -int RSA_meth_set_flags(RSA_METHOD *meth, int flags); -void *RSA_meth_get0_app_data(const RSA_METHOD *meth); -int RSA_meth_set0_app_data(RSA_METHOD *meth, void *app_data); -int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_meth_set_pub_enc(RSA_METHOD *rsa, - int (*pub_enc) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, - int padding)); -int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_meth_set_pub_dec(RSA_METHOD *rsa, - int (*pub_dec) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, - int padding)); -int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_meth_set_priv_enc(RSA_METHOD *rsa, - int (*priv_enc) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, - int padding)); -int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_meth_set_priv_dec(RSA_METHOD *rsa, - int (*priv_dec) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, - int padding)); -int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) - (BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx); -int RSA_meth_set_mod_exp(RSA_METHOD *rsa, - int (*mod_exp) (BIGNUM *r0, const BIGNUM *i, RSA *rsa, - BN_CTX *ctx)); -int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) - (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, - int (*bn_mod_exp) (BIGNUM *r, - const BIGNUM *a, - const BIGNUM *p, - const BIGNUM *m, - BN_CTX *ctx, - BN_MONT_CTX *m_ctx)); -int (*RSA_meth_get_init(const RSA_METHOD *meth)) (RSA *rsa); -int RSA_meth_set_init(RSA_METHOD *rsa, int (*init) (RSA *rsa)); -int (*RSA_meth_get_finish(const RSA_METHOD *meth)) (RSA *rsa); -int RSA_meth_set_finish(RSA_METHOD *rsa, int (*finish) (RSA *rsa)); -int (*RSA_meth_get_sign(const RSA_METHOD *meth)) - (int type, - const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, - const RSA *rsa); -int RSA_meth_set_sign(RSA_METHOD *rsa, - int (*sign) (int type, const unsigned char *m, - unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, - const RSA *rsa)); -int (*RSA_meth_get_verify(const RSA_METHOD *meth)) - (int dtype, const unsigned char *m, - unsigned int m_length, const unsigned char *sigbuf, - unsigned int siglen, const RSA *rsa); -int RSA_meth_set_verify(RSA_METHOD *rsa, - int (*verify) (int dtype, const unsigned char *m, - unsigned int m_length, - const unsigned char *sigbuf, - unsigned int siglen, const RSA *rsa)); -int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) - (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); -int RSA_meth_set_keygen(RSA_METHOD *rsa, - int (*keygen) (RSA *rsa, int bits, BIGNUM *e, - BN_GENCB *cb)); -int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) - (RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb); -int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth, - int (*keygen) (RSA *rsa, int bits, - int primes, BIGNUM *e, - BN_GENCB *cb)); - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/rsaerr.h b/submodules/MtProtoKit/openssl/openssl/rsaerr.h deleted file mode 100644 index 59b15e13e9..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/rsaerr.h +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RSAERR_H -# define HEADER_RSAERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_RSA_strings(void); - -/* - * RSA function codes. - */ -# define RSA_F_CHECK_PADDING_MD 140 -# define RSA_F_ENCODE_PKCS1 146 -# define RSA_F_INT_RSA_VERIFY 145 -# define RSA_F_OLD_RSA_PRIV_DECODE 147 -# define RSA_F_PKEY_PSS_INIT 165 -# define RSA_F_PKEY_RSA_CTRL 143 -# define RSA_F_PKEY_RSA_CTRL_STR 144 -# define RSA_F_PKEY_RSA_SIGN 142 -# define RSA_F_PKEY_RSA_VERIFY 149 -# define RSA_F_PKEY_RSA_VERIFYRECOVER 141 -# define RSA_F_RSA_ALGOR_TO_MD 156 -# define RSA_F_RSA_BUILTIN_KEYGEN 129 -# define RSA_F_RSA_CHECK_KEY 123 -# define RSA_F_RSA_CHECK_KEY_EX 160 -# define RSA_F_RSA_CMS_DECRYPT 159 -# define RSA_F_RSA_CMS_VERIFY 158 -# define RSA_F_RSA_ITEM_VERIFY 148 -# define RSA_F_RSA_METH_DUP 161 -# define RSA_F_RSA_METH_NEW 162 -# define RSA_F_RSA_METH_SET1_NAME 163 -# define RSA_F_RSA_MGF1_TO_MD 157 -# define RSA_F_RSA_MULTIP_INFO_NEW 166 -# define RSA_F_RSA_NEW_METHOD 106 -# define RSA_F_RSA_NULL 124 -# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 -# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 -# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 -# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 -# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 101 -# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 102 -# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 103 -# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 104 -# define RSA_F_RSA_PADDING_ADD_NONE 107 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 154 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 152 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 -# define RSA_F_RSA_PADDING_ADD_SSLV23 110 -# define RSA_F_RSA_PADDING_ADD_X931 127 -# define RSA_F_RSA_PADDING_CHECK_NONE 111 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 153 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 -# define RSA_F_RSA_PADDING_CHECK_SSLV23 114 -# define RSA_F_RSA_PADDING_CHECK_X931 128 -# define RSA_F_RSA_PARAM_DECODE 164 -# define RSA_F_RSA_PRINT 115 -# define RSA_F_RSA_PRINT_FP 116 -# define RSA_F_RSA_PRIV_DECODE 150 -# define RSA_F_RSA_PRIV_ENCODE 138 -# define RSA_F_RSA_PSS_GET_PARAM 151 -# define RSA_F_RSA_PSS_TO_CTX 155 -# define RSA_F_RSA_PUB_DECODE 139 -# define RSA_F_RSA_SETUP_BLINDING 136 -# define RSA_F_RSA_SIGN 117 -# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 -# define RSA_F_RSA_VERIFY 119 -# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 -# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 126 -# define RSA_F_SETUP_TBUF 167 - -/* - * RSA reason codes. - */ -# define RSA_R_ALGORITHM_MISMATCH 100 -# define RSA_R_BAD_E_VALUE 101 -# define RSA_R_BAD_FIXED_HEADER_DECRYPT 102 -# define RSA_R_BAD_PAD_BYTE_COUNT 103 -# define RSA_R_BAD_SIGNATURE 104 -# define RSA_R_BLOCK_TYPE_IS_NOT_01 106 -# define RSA_R_BLOCK_TYPE_IS_NOT_02 107 -# define RSA_R_DATA_GREATER_THAN_MOD_LEN 108 -# define RSA_R_DATA_TOO_LARGE 109 -# define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 110 -# define RSA_R_DATA_TOO_LARGE_FOR_MODULUS 132 -# define RSA_R_DATA_TOO_SMALL 111 -# define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 122 -# define RSA_R_DIGEST_DOES_NOT_MATCH 158 -# define RSA_R_DIGEST_NOT_ALLOWED 145 -# define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112 -# define RSA_R_DMP1_NOT_CONGRUENT_TO_D 124 -# define RSA_R_DMQ1_NOT_CONGRUENT_TO_D 125 -# define RSA_R_D_E_NOT_CONGRUENT_TO_1 123 -# define RSA_R_FIRST_OCTET_INVALID 133 -# define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 144 -# define RSA_R_INVALID_DIGEST 157 -# define RSA_R_INVALID_DIGEST_LENGTH 143 -# define RSA_R_INVALID_HEADER 137 -# define RSA_R_INVALID_LABEL 160 -# define RSA_R_INVALID_MESSAGE_LENGTH 131 -# define RSA_R_INVALID_MGF1_MD 156 -# define RSA_R_INVALID_MULTI_PRIME_KEY 167 -# define RSA_R_INVALID_OAEP_PARAMETERS 161 -# define RSA_R_INVALID_PADDING 138 -# define RSA_R_INVALID_PADDING_MODE 141 -# define RSA_R_INVALID_PSS_PARAMETERS 149 -# define RSA_R_INVALID_PSS_SALTLEN 146 -# define RSA_R_INVALID_SALT_LENGTH 150 -# define RSA_R_INVALID_TRAILER 139 -# define RSA_R_INVALID_X931_DIGEST 142 -# define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 -# define RSA_R_KEY_PRIME_NUM_INVALID 165 -# define RSA_R_KEY_SIZE_TOO_SMALL 120 -# define RSA_R_LAST_OCTET_INVALID 134 -# define RSA_R_MISSING_PRIVATE_KEY 179 -# define RSA_R_MGF1_DIGEST_NOT_ALLOWED 152 -# define RSA_R_MODULUS_TOO_LARGE 105 -# define RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R 168 -# define RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D 169 -# define RSA_R_MP_R_NOT_PRIME 170 -# define RSA_R_NO_PUBLIC_EXPONENT 140 -# define RSA_R_NULL_BEFORE_BLOCK_MISSING 113 -# define RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES 172 -# define RSA_R_N_DOES_NOT_EQUAL_P_Q 127 -# define RSA_R_OAEP_DECODING_ERROR 121 -# define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 -# define RSA_R_PADDING_CHECK_FAILED 114 -# define RSA_R_PKCS_DECODING_ERROR 159 -# define RSA_R_PSS_SALTLEN_TOO_SMALL 164 -# define RSA_R_P_NOT_PRIME 128 -# define RSA_R_Q_NOT_PRIME 129 -# define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 -# define RSA_R_SLEN_CHECK_FAILED 136 -# define RSA_R_SLEN_RECOVERY_FAILED 135 -# define RSA_R_SSLV3_ROLLBACK_ATTACK 115 -# define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116 -# define RSA_R_UNKNOWN_ALGORITHM_TYPE 117 -# define RSA_R_UNKNOWN_DIGEST 166 -# define RSA_R_UNKNOWN_MASK_DIGEST 151 -# define RSA_R_UNKNOWN_PADDING_TYPE 118 -# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 162 -# define RSA_R_UNSUPPORTED_LABEL_SOURCE 163 -# define RSA_R_UNSUPPORTED_MASK_ALGORITHM 153 -# define RSA_R_UNSUPPORTED_MASK_PARAMETER 154 -# define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155 -# define RSA_R_VALUE_MISSING 147 -# define RSA_R_WRONG_SIGNATURE_LENGTH 119 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/safestack.h b/submodules/MtProtoKit/openssl/openssl/safestack.h deleted file mode 100644 index 38b5578978..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/safestack.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_SAFESTACK_H -# define HEADER_SAFESTACK_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define STACK_OF(type) struct stack_st_##type - -# define SKM_DEFINE_STACK_OF(t1, t2, t3) \ - STACK_OF(t1); \ - typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ - typedef void (*sk_##t1##_freefunc)(t3 *a); \ - typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ - static ossl_unused ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \ - { \ - return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \ - } \ - static ossl_unused ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \ - { \ - return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \ - } \ - static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new(sk_##t1##_compfunc compare) \ - { \ - return (STACK_OF(t1) *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \ - } \ - static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ - { \ - return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ - } \ - static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_reserve(sk_##t1##_compfunc compare, int n) \ - { \ - return (STACK_OF(t1) *)OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n); \ - } \ - static ossl_unused ossl_inline int sk_##t1##_reserve(STACK_OF(t1) *sk, int n) \ - { \ - return OPENSSL_sk_reserve((OPENSSL_STACK *)sk, n); \ - } \ - static ossl_unused ossl_inline void sk_##t1##_free(STACK_OF(t1) *sk) \ - { \ - OPENSSL_sk_free((OPENSSL_STACK *)sk); \ - } \ - static ossl_unused ossl_inline void sk_##t1##_zero(STACK_OF(t1) *sk) \ - { \ - OPENSSL_sk_zero((OPENSSL_STACK *)sk); \ - } \ - static ossl_unused ossl_inline t2 *sk_##t1##_delete(STACK_OF(t1) *sk, int i) \ - { \ - return (t2 *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i); \ - } \ - static ossl_unused ossl_inline t2 *sk_##t1##_delete_ptr(STACK_OF(t1) *sk, t2 *ptr) \ - { \ - return (t2 *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, \ - (const void *)ptr); \ - } \ - static ossl_unused ossl_inline int sk_##t1##_push(STACK_OF(t1) *sk, t2 *ptr) \ - { \ - return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \ - } \ - static ossl_unused ossl_inline int sk_##t1##_unshift(STACK_OF(t1) *sk, t2 *ptr) \ - { \ - return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr); \ - } \ - static ossl_unused ossl_inline t2 *sk_##t1##_pop(STACK_OF(t1) *sk) \ - { \ - return (t2 *)OPENSSL_sk_pop((OPENSSL_STACK *)sk); \ - } \ - static ossl_unused ossl_inline t2 *sk_##t1##_shift(STACK_OF(t1) *sk) \ - { \ - return (t2 *)OPENSSL_sk_shift((OPENSSL_STACK *)sk); \ - } \ - static ossl_unused ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \ - { \ - OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \ - } \ - static ossl_unused ossl_inline int sk_##t1##_insert(STACK_OF(t1) *sk, t2 *ptr, int idx) \ - { \ - return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx); \ - } \ - static ossl_unused ossl_inline t2 *sk_##t1##_set(STACK_OF(t1) *sk, int idx, t2 *ptr) \ - { \ - return (t2 *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr); \ - } \ - static ossl_unused ossl_inline int sk_##t1##_find(STACK_OF(t1) *sk, t2 *ptr) \ - { \ - return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr); \ - } \ - static ossl_unused ossl_inline int sk_##t1##_find_ex(STACK_OF(t1) *sk, t2 *ptr) \ - { \ - return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ - } \ - static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ - { \ - OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ - } \ - static ossl_unused ossl_inline int sk_##t1##_is_sorted(const STACK_OF(t1) *sk) \ - { \ - return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk); \ - } \ - static ossl_unused ossl_inline STACK_OF(t1) * sk_##t1##_dup(const STACK_OF(t1) *sk) \ - { \ - return (STACK_OF(t1) *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk); \ - } \ - static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_deep_copy(const STACK_OF(t1) *sk, \ - sk_##t1##_copyfunc copyfunc, \ - sk_##t1##_freefunc freefunc) \ - { \ - return (STACK_OF(t1) *)OPENSSL_sk_deep_copy((const OPENSSL_STACK *)sk, \ - (OPENSSL_sk_copyfunc)copyfunc, \ - (OPENSSL_sk_freefunc)freefunc); \ - } \ - static ossl_unused ossl_inline sk_##t1##_compfunc sk_##t1##_set_cmp_func(STACK_OF(t1) *sk, sk_##t1##_compfunc compare) \ - { \ - return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \ - } - -# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) -# define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) -# define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ - SKM_DEFINE_STACK_OF(t1, const t2, t2) -# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) - -/*- - * Strings are special: normally an lhash entry will point to a single - * (somewhat) mutable object. In the case of strings: - * - * a) Instead of a single char, there is an array of chars, NUL-terminated. - * b) The string may have be immutable. - * - * So, they need their own declarations. Especially important for - * type-checking tools, such as Deputy. - * - * In practice, however, it appears to be hard to have a const - * string. For now, I'm settling for dealing with the fact it is a - * string at all. - */ -typedef char *OPENSSL_STRING; -typedef const char *OPENSSL_CSTRING; - -/*- - * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but - * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned - * above, instead of a single char each entry is a NUL-terminated array of - * chars. So, we have to implement STRING specially for STACK_OF. This is - * dealt with in the autogenerated macros below. - */ -DEFINE_SPECIAL_STACK_OF(OPENSSL_STRING, char) -DEFINE_SPECIAL_STACK_OF_CONST(OPENSSL_CSTRING, char) - -/* - * Similarly, we sometimes use a block of characters, NOT nul-terminated. - * These should also be distinguished from "normal" stacks. - */ -typedef void *OPENSSL_BLOCK; -DEFINE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) - -/* - * If called without higher optimization (min. -xO3) the Oracle Developer - * Studio compiler generates code for the defined (static inline) functions - * above. - * This would later lead to the linker complaining about missing symbols when - * this header file is included but the resulting object is not linked against - * the Crypto library (openssl#6912). - */ -# ifdef __SUNPRO_C -# pragma weak OPENSSL_sk_num -# pragma weak OPENSSL_sk_value -# pragma weak OPENSSL_sk_new -# pragma weak OPENSSL_sk_new_null -# pragma weak OPENSSL_sk_new_reserve -# pragma weak OPENSSL_sk_reserve -# pragma weak OPENSSL_sk_free -# pragma weak OPENSSL_sk_zero -# pragma weak OPENSSL_sk_delete -# pragma weak OPENSSL_sk_delete_ptr -# pragma weak OPENSSL_sk_push -# pragma weak OPENSSL_sk_unshift -# pragma weak OPENSSL_sk_pop -# pragma weak OPENSSL_sk_shift -# pragma weak OPENSSL_sk_pop_free -# pragma weak OPENSSL_sk_insert -# pragma weak OPENSSL_sk_set -# pragma weak OPENSSL_sk_find -# pragma weak OPENSSL_sk_find_ex -# pragma weak OPENSSL_sk_sort -# pragma weak OPENSSL_sk_is_sorted -# pragma weak OPENSSL_sk_dup -# pragma weak OPENSSL_sk_deep_copy -# pragma weak OPENSSL_sk_set_cmp_func -# endif /* __SUNPRO_C */ - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/seed.h b/submodules/MtProtoKit/openssl/openssl/seed.h deleted file mode 100644 index de10b08572..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/seed.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -/* - * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Neither the name of author nor the names of its contributors may - * be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef HEADER_SEED_H -# define HEADER_SEED_H - -# include - -# ifndef OPENSSL_NO_SEED -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* look whether we need 'long' to get 32 bits */ -# ifdef AES_LONG -# ifndef SEED_LONG -# define SEED_LONG 1 -# endif -# endif - -# include - -# define SEED_BLOCK_SIZE 16 -# define SEED_KEY_LENGTH 16 - -typedef struct seed_key_st { -# ifdef SEED_LONG - unsigned long data[32]; -# else - unsigned int data[32]; -# endif -} SEED_KEY_SCHEDULE; - -void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], - SEED_KEY_SCHEDULE *ks); - -void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], - unsigned char d[SEED_BLOCK_SIZE], - const SEED_KEY_SCHEDULE *ks); -void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], - unsigned char d[SEED_BLOCK_SIZE], - const SEED_KEY_SCHEDULE *ks); - -void SEED_ecb_encrypt(const unsigned char *in, unsigned char *out, - const SEED_KEY_SCHEDULE *ks, int enc); -void SEED_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, - const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int enc); -void SEED_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num, - int enc); -void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/sha.h b/submodules/MtProtoKit/openssl/openssl/sha.h deleted file mode 100644 index 6a1eb0de8b..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/sha.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_SHA_H -# define HEADER_SHA_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/*- - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! SHA_LONG has to be at least 32 bits wide. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ -# define SHA_LONG unsigned int - -# define SHA_LBLOCK 16 -# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a - * contiguous array of 32 bit wide - * big-endian values. */ -# define SHA_LAST_BLOCK (SHA_CBLOCK-8) -# define SHA_DIGEST_LENGTH 20 - -typedef struct SHAstate_st { - SHA_LONG h0, h1, h2, h3, h4; - SHA_LONG Nl, Nh; - SHA_LONG data[SHA_LBLOCK]; - unsigned int num; -} SHA_CTX; - -int SHA1_Init(SHA_CTX *c); -int SHA1_Update(SHA_CTX *c, const void *data, size_t len); -int SHA1_Final(unsigned char *md, SHA_CTX *c); -unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); -void SHA1_Transform(SHA_CTX *c, const unsigned char *data); - -# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a - * contiguous array of 32 bit wide - * big-endian values. */ - -typedef struct SHA256state_st { - SHA_LONG h[8]; - SHA_LONG Nl, Nh; - SHA_LONG data[SHA_LBLOCK]; - unsigned int num, md_len; -} SHA256_CTX; - -int SHA224_Init(SHA256_CTX *c); -int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA224_Final(unsigned char *md, SHA256_CTX *c); -unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); -int SHA256_Init(SHA256_CTX *c); -int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA256_Final(unsigned char *md, SHA256_CTX *c); -unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); -void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); - -# define SHA224_DIGEST_LENGTH 28 -# define SHA256_DIGEST_LENGTH 32 -# define SHA384_DIGEST_LENGTH 48 -# define SHA512_DIGEST_LENGTH 64 - -/* - * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64 - * being exactly 64-bit wide. See Implementation Notes in sha512.c - * for further details. - */ -/* - * SHA-512 treats input data as a - * contiguous array of 64 bit - * wide big-endian values. - */ -# define SHA512_CBLOCK (SHA_LBLOCK*8) -# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) -# define SHA_LONG64 unsigned __int64 -# define U64(C) C##UI64 -# elif defined(__arch64__) -# define SHA_LONG64 unsigned long -# define U64(C) C##UL -# else -# define SHA_LONG64 unsigned long long -# define U64(C) C##ULL -# endif - -typedef struct SHA512state_st { - SHA_LONG64 h[8]; - SHA_LONG64 Nl, Nh; - union { - SHA_LONG64 d[SHA_LBLOCK]; - unsigned char p[SHA512_CBLOCK]; - } u; - unsigned int num, md_len; -} SHA512_CTX; - -int SHA384_Init(SHA512_CTX *c); -int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA384_Final(unsigned char *md, SHA512_CTX *c); -unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md); -int SHA512_Init(SHA512_CTX *c); -int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA512_Final(unsigned char *md, SHA512_CTX *c); -unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); -void SHA512_Transform(SHA512_CTX *c, const unsigned char *data); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/srp.h b/submodules/MtProtoKit/openssl/openssl/srp.h deleted file mode 100644 index aaf13558e3..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/srp.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2004, EdelKey Project. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - * - * Originally written by Christophe Renou and Peter Sylvester, - * for the EdelKey project. - */ - -#ifndef HEADER_SRP_H -# define HEADER_SRP_H - -#include - -#ifndef OPENSSL_NO_SRP -# include -# include -# include -# include -# include - -# ifdef __cplusplus -extern "C" { -# endif - -typedef struct SRP_gN_cache_st { - char *b64_bn; - BIGNUM *bn; -} SRP_gN_cache; - - -DEFINE_STACK_OF(SRP_gN_cache) - -typedef struct SRP_user_pwd_st { - /* Owned by us. */ - char *id; - BIGNUM *s; - BIGNUM *v; - /* Not owned by us. */ - const BIGNUM *g; - const BIGNUM *N; - /* Owned by us. */ - char *info; -} SRP_user_pwd; - -void SRP_user_pwd_free(SRP_user_pwd *user_pwd); - -DEFINE_STACK_OF(SRP_user_pwd) - -typedef struct SRP_VBASE_st { - STACK_OF(SRP_user_pwd) *users_pwd; - STACK_OF(SRP_gN_cache) *gN_cache; -/* to simulate a user */ - char *seed_key; - const BIGNUM *default_g; - const BIGNUM *default_N; -} SRP_VBASE; - -/* - * Internal structure storing N and g pair - */ -typedef struct SRP_gN_st { - char *id; - const BIGNUM *g; - const BIGNUM *N; -} SRP_gN; - -DEFINE_STACK_OF(SRP_gN) - -SRP_VBASE *SRP_VBASE_new(char *seed_key); -void SRP_VBASE_free(SRP_VBASE *vb); -int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); - -/* This method ignores the configured seed and fails for an unknown user. */ -DEPRECATEDIN_1_1_0(SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)) -/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ -SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); - -char *SRP_create_verifier(const char *user, const char *pass, char **salt, - char **verifier, const char *N, const char *g); -int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, - BIGNUM **verifier, const BIGNUM *N, - const BIGNUM *g); - -# define SRP_NO_ERROR 0 -# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 -# define SRP_ERR_VBASE_BN_LIB 2 -# define SRP_ERR_OPEN_FILE 3 -# define SRP_ERR_MEMORY 4 - -# define DB_srptype 0 -# define DB_srpverifier 1 -# define DB_srpsalt 2 -# define DB_srpid 3 -# define DB_srpgN 4 -# define DB_srpinfo 5 -# undef DB_NUMBER -# define DB_NUMBER 6 - -# define DB_SRP_INDEX 'I' -# define DB_SRP_VALID 'V' -# define DB_SRP_REVOKED 'R' -# define DB_SRP_MODIF 'v' - -/* see srp.c */ -char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N); -SRP_gN *SRP_get_default_gN(const char *id); - -/* server side .... */ -BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, - const BIGNUM *b, const BIGNUM *N); -BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, - const BIGNUM *v); -int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); -BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); - -/* client side .... */ -BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); -BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); -BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, - const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); -int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); - -# define SRP_MINIMAL_N 1024 - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/srtp.h b/submodules/MtProtoKit/openssl/openssl/srtp.h deleted file mode 100644 index 0b57c2356c..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/srtp.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -/* - * DTLS code by Eric Rescorla - * - * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. - */ - -#ifndef HEADER_D1_SRTP_H -# define HEADER_D1_SRTP_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define SRTP_AES128_CM_SHA1_80 0x0001 -# define SRTP_AES128_CM_SHA1_32 0x0002 -# define SRTP_AES128_F8_SHA1_80 0x0003 -# define SRTP_AES128_F8_SHA1_32 0x0004 -# define SRTP_NULL_SHA1_80 0x0005 -# define SRTP_NULL_SHA1_32 0x0006 - -/* AEAD SRTP protection profiles from RFC 7714 */ -# define SRTP_AEAD_AES_128_GCM 0x0007 -# define SRTP_AEAD_AES_256_GCM 0x0008 - -# ifndef OPENSSL_NO_SRTP - -__owur int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); -__owur int SSL_set_tlsext_use_srtp(SSL *ssl, const char *profiles); - -__owur STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); -__owur SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); - -# endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/ssl.h b/submodules/MtProtoKit/openssl/openssl/ssl.h deleted file mode 100644 index 6724ccf2d2..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ssl.h +++ /dev/null @@ -1,2438 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_SSL_H -# define HEADER_SSL_H - -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# include -# include -# endif -# include -# include -# include -# include - -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* OpenSSL version number for ASN.1 encoding of the session information */ -/*- - * Version 0 - initial version - * Version 1 - added the optional peer certificate - */ -# define SSL_SESSION_ASN1_VERSION 0x0001 - -# define SSL_MAX_SSL_SESSION_ID_LENGTH 32 -# define SSL_MAX_SID_CTX_LENGTH 32 - -# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) -# define SSL_MAX_KEY_ARG_LENGTH 8 -# define SSL_MAX_MASTER_KEY_LENGTH 48 - -/* The maximum number of encrypt/decrypt pipelines we can support */ -# define SSL_MAX_PIPELINES 32 - -/* text strings for the ciphers */ - -/* These are used to specify which ciphers to use and not to use */ - -# define SSL_TXT_LOW "LOW" -# define SSL_TXT_MEDIUM "MEDIUM" -# define SSL_TXT_HIGH "HIGH" -# define SSL_TXT_FIPS "FIPS" - -# define SSL_TXT_aNULL "aNULL" -# define SSL_TXT_eNULL "eNULL" -# define SSL_TXT_NULL "NULL" - -# define SSL_TXT_kRSA "kRSA" -# define SSL_TXT_kDHr "kDHr"/* this cipher class has been removed */ -# define SSL_TXT_kDHd "kDHd"/* this cipher class has been removed */ -# define SSL_TXT_kDH "kDH"/* this cipher class has been removed */ -# define SSL_TXT_kEDH "kEDH"/* alias for kDHE */ -# define SSL_TXT_kDHE "kDHE" -# define SSL_TXT_kECDHr "kECDHr"/* this cipher class has been removed */ -# define SSL_TXT_kECDHe "kECDHe"/* this cipher class has been removed */ -# define SSL_TXT_kECDH "kECDH"/* this cipher class has been removed */ -# define SSL_TXT_kEECDH "kEECDH"/* alias for kECDHE */ -# define SSL_TXT_kECDHE "kECDHE" -# define SSL_TXT_kPSK "kPSK" -# define SSL_TXT_kRSAPSK "kRSAPSK" -# define SSL_TXT_kECDHEPSK "kECDHEPSK" -# define SSL_TXT_kDHEPSK "kDHEPSK" -# define SSL_TXT_kGOST "kGOST" -# define SSL_TXT_kSRP "kSRP" - -# define SSL_TXT_aRSA "aRSA" -# define SSL_TXT_aDSS "aDSS" -# define SSL_TXT_aDH "aDH"/* this cipher class has been removed */ -# define SSL_TXT_aECDH "aECDH"/* this cipher class has been removed */ -# define SSL_TXT_aECDSA "aECDSA" -# define SSL_TXT_aPSK "aPSK" -# define SSL_TXT_aGOST94 "aGOST94" -# define SSL_TXT_aGOST01 "aGOST01" -# define SSL_TXT_aGOST12 "aGOST12" -# define SSL_TXT_aGOST "aGOST" -# define SSL_TXT_aSRP "aSRP" - -# define SSL_TXT_DSS "DSS" -# define SSL_TXT_DH "DH" -# define SSL_TXT_DHE "DHE"/* same as "kDHE:-ADH" */ -# define SSL_TXT_EDH "EDH"/* alias for DHE */ -# define SSL_TXT_ADH "ADH" -# define SSL_TXT_RSA "RSA" -# define SSL_TXT_ECDH "ECDH" -# define SSL_TXT_EECDH "EECDH"/* alias for ECDHE" */ -# define SSL_TXT_ECDHE "ECDHE"/* same as "kECDHE:-AECDH" */ -# define SSL_TXT_AECDH "AECDH" -# define SSL_TXT_ECDSA "ECDSA" -# define SSL_TXT_PSK "PSK" -# define SSL_TXT_SRP "SRP" - -# define SSL_TXT_DES "DES" -# define SSL_TXT_3DES "3DES" -# define SSL_TXT_RC4 "RC4" -# define SSL_TXT_RC2 "RC2" -# define SSL_TXT_IDEA "IDEA" -# define SSL_TXT_SEED "SEED" -# define SSL_TXT_AES128 "AES128" -# define SSL_TXT_AES256 "AES256" -# define SSL_TXT_AES "AES" -# define SSL_TXT_AES_GCM "AESGCM" -# define SSL_TXT_AES_CCM "AESCCM" -# define SSL_TXT_AES_CCM_8 "AESCCM8" -# define SSL_TXT_CAMELLIA128 "CAMELLIA128" -# define SSL_TXT_CAMELLIA256 "CAMELLIA256" -# define SSL_TXT_CAMELLIA "CAMELLIA" -# define SSL_TXT_CHACHA20 "CHACHA20" -# define SSL_TXT_GOST "GOST89" -# define SSL_TXT_ARIA "ARIA" -# define SSL_TXT_ARIA_GCM "ARIAGCM" -# define SSL_TXT_ARIA128 "ARIA128" -# define SSL_TXT_ARIA256 "ARIA256" - -# define SSL_TXT_MD5 "MD5" -# define SSL_TXT_SHA1 "SHA1" -# define SSL_TXT_SHA "SHA"/* same as "SHA1" */ -# define SSL_TXT_GOST94 "GOST94" -# define SSL_TXT_GOST89MAC "GOST89MAC" -# define SSL_TXT_GOST12 "GOST12" -# define SSL_TXT_GOST89MAC12 "GOST89MAC12" -# define SSL_TXT_SHA256 "SHA256" -# define SSL_TXT_SHA384 "SHA384" - -# define SSL_TXT_SSLV3 "SSLv3" -# define SSL_TXT_TLSV1 "TLSv1" -# define SSL_TXT_TLSV1_1 "TLSv1.1" -# define SSL_TXT_TLSV1_2 "TLSv1.2" - -# define SSL_TXT_ALL "ALL" - -/*- - * COMPLEMENTOF* definitions. These identifiers are used to (de-select) - * ciphers normally not being used. - * Example: "RC4" will activate all ciphers using RC4 including ciphers - * without authentication, which would normally disabled by DEFAULT (due - * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT" - * will make sure that it is also disabled in the specific selection. - * COMPLEMENTOF* identifiers are portable between version, as adjustments - * to the default cipher setup will also be included here. - * - * COMPLEMENTOFDEFAULT does not experience the same special treatment that - * DEFAULT gets, as only selection is being done and no sorting as needed - * for DEFAULT. - */ -# define SSL_TXT_CMPALL "COMPLEMENTOFALL" -# define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT" - -/* - * The following cipher list is used by default. It also is substituted when - * an application-defined cipher list string starts with 'DEFAULT'. - * This applies to ciphersuites for TLSv1.2 and below. - */ -# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" -/* This is the default set of TLSv1.3 ciphersuites */ -# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) -# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ - "TLS_CHACHA20_POLY1305_SHA256:" \ - "TLS_AES_128_GCM_SHA256" -# else -# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ - "TLS_AES_128_GCM_SHA256" -#endif -/* - * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always - * starts with a reasonable order, and all we have to do for DEFAULT is - * throwing out anonymous and unencrypted ciphersuites! (The latter are not - * actually enabled by ALL, but "ALL:RSA" would enable some of them.) - */ - -/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ -# define SSL_SENT_SHUTDOWN 1 -# define SSL_RECEIVED_SHUTDOWN 2 - -#ifdef __cplusplus -} -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -# define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1 -# define SSL_FILETYPE_PEM X509_FILETYPE_PEM - -/* - * This is needed to stop compilers complaining about the 'struct ssl_st *' - * function parameters used to prototype callbacks in SSL_CTX. - */ -typedef struct ssl_st *ssl_crock_st; -typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; -typedef struct ssl_method_st SSL_METHOD; -typedef struct ssl_cipher_st SSL_CIPHER; -typedef struct ssl_session_st SSL_SESSION; -typedef struct tls_sigalgs_st TLS_SIGALGS; -typedef struct ssl_conf_ctx_st SSL_CONF_CTX; -typedef struct ssl_comp_st SSL_COMP; - -STACK_OF(SSL_CIPHER); -STACK_OF(SSL_COMP); - -/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ -typedef struct srtp_protection_profile_st { - const char *name; - unsigned long id; -} SRTP_PROTECTION_PROFILE; - -DEFINE_STACK_OF(SRTP_PROTECTION_PROFILE) - -typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, - int len, void *arg); -typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, - STACK_OF(SSL_CIPHER) *peer_ciphers, - const SSL_CIPHER **cipher, void *arg); - -/* Extension context codes */ -/* This extension is only allowed in TLS */ -#define SSL_EXT_TLS_ONLY 0x0001 -/* This extension is only allowed in DTLS */ -#define SSL_EXT_DTLS_ONLY 0x0002 -/* Some extensions may be allowed in DTLS but we don't implement them for it */ -#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x0004 -/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ -#define SSL_EXT_SSL3_ALLOWED 0x0008 -/* Extension is only defined for TLS1.2 and below */ -#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 -/* Extension is only defined for TLS1.3 and above */ -#define SSL_EXT_TLS1_3_ONLY 0x0020 -/* Ignore this extension during parsing if we are resuming */ -#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 -#define SSL_EXT_CLIENT_HELLO 0x0080 -/* Really means TLS1.2 or below */ -#define SSL_EXT_TLS1_2_SERVER_HELLO 0x0100 -#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 -#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 -#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 -#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 -#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 -#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 - -/* Typedefs for handling custom extensions */ - -typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type, - const unsigned char **out, size_t *outlen, - int *al, void *add_arg); - -typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type, - const unsigned char *out, void *add_arg); - -typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type, - const unsigned char *in, size_t inlen, - int *al, void *parse_arg); - - -typedef int (*SSL_custom_ext_add_cb_ex)(SSL *s, unsigned int ext_type, - unsigned int context, - const unsigned char **out, - size_t *outlen, X509 *x, - size_t chainidx, - int *al, void *add_arg); - -typedef void (*SSL_custom_ext_free_cb_ex)(SSL *s, unsigned int ext_type, - unsigned int context, - const unsigned char *out, - void *add_arg); - -typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type, - unsigned int context, - const unsigned char *in, - size_t inlen, X509 *x, - size_t chainidx, - int *al, void *parse_arg); - -/* Typedef for verification callback */ -typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); - -/* - * Some values are reserved until OpenSSL 1.2.0 because they were previously - * included in SSL_OP_ALL in a 1.1.x release. - * - * Reserved value (until OpenSSL 1.2.0) 0x00000001U - * Reserved value (until OpenSSL 1.2.0) 0x00000002U - */ -/* Allow initial connection to servers that don't support RI */ -# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004U - -/* Reserved value (until OpenSSL 1.2.0) 0x00000008U */ -# define SSL_OP_TLSEXT_PADDING 0x00000010U -/* Reserved value (until OpenSSL 1.2.0) 0x00000020U */ -# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040U -/* - * Reserved value (until OpenSSL 1.2.0) 0x00000080U - * Reserved value (until OpenSSL 1.2.0) 0x00000100U - * Reserved value (until OpenSSL 1.2.0) 0x00000200U - */ - -/* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ -# define SSL_OP_ALLOW_NO_DHE_KEX 0x00000400U - -/* - * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in - * OpenSSL 0.9.6d. Usually (depending on the application protocol) the - * workaround is not needed. Unfortunately some broken SSL/TLS - * implementations cannot handle it at all, which is why we include it in - * SSL_OP_ALL. Added in 0.9.6e - */ -# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800U - -/* DTLS options */ -# define SSL_OP_NO_QUERY_MTU 0x00001000U -/* Turn on Cookie Exchange (on relevant for servers) */ -# define SSL_OP_COOKIE_EXCHANGE 0x00002000U -/* Don't use RFC4507 ticket extension */ -# define SSL_OP_NO_TICKET 0x00004000U -# ifndef OPENSSL_NO_DTLS1_METHOD -/* Use Cisco's "speshul" version of DTLS_BAD_VER - * (only with deprecated DTLSv1_client_method()) */ -# define SSL_OP_CISCO_ANYCONNECT 0x00008000U -# endif - -/* As server, disallow session resumption on renegotiation */ -# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000U -/* Don't use compression even if supported */ -# define SSL_OP_NO_COMPRESSION 0x00020000U -/* Permit unsafe legacy renegotiation */ -# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000U -/* Disable encrypt-then-mac */ -# define SSL_OP_NO_ENCRYPT_THEN_MAC 0x00080000U - -/* - * Enable TLSv1.3 Compatibility mode. This is on by default. A future version - * of OpenSSL may have this disabled by default. - */ -# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT 0x00100000U - -/* Prioritize Chacha20Poly1305 when client does. - * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE */ -# define SSL_OP_PRIORITIZE_CHACHA 0x00200000U - -/* - * Set on servers to choose the cipher according to the server's preferences - */ -# define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000U -/* - * If set, a server will allow a client to issue a SSLv3.0 version number as - * latest version supported in the premaster secret, even when TLSv1.0 - * (version 3.1) was announced in the client hello. Normally this is - * forbidden to prevent version rollback attacks. - */ -# define SSL_OP_TLS_ROLLBACK_BUG 0x00800000U - -/* - * Switches off automatic TLSv1.3 anti-replay protection for early data. This - * is a server-side option only (no effect on the client). - */ -# define SSL_OP_NO_ANTI_REPLAY 0x01000000U - -# define SSL_OP_NO_SSLv3 0x02000000U -# define SSL_OP_NO_TLSv1 0x04000000U -# define SSL_OP_NO_TLSv1_2 0x08000000U -# define SSL_OP_NO_TLSv1_1 0x10000000U -# define SSL_OP_NO_TLSv1_3 0x20000000U - -# define SSL_OP_NO_DTLSv1 0x04000000U -# define SSL_OP_NO_DTLSv1_2 0x08000000U - -# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv3|\ - SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2|SSL_OP_NO_TLSv1_3) -# define SSL_OP_NO_DTLS_MASK (SSL_OP_NO_DTLSv1|SSL_OP_NO_DTLSv1_2) - -/* Disallow all renegotiation */ -# define SSL_OP_NO_RENEGOTIATION 0x40000000U - -/* - * Make server add server-hello extension from early version of cryptopro - * draft, when GOST ciphersuite is negotiated. Required for interoperability - * with CryptoPro CSP 3.x - */ -# define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000U - -/* - * SSL_OP_ALL: various bug workarounds that should be rather harmless. - * This used to be 0x000FFFFFL before 0.9.7. - * This used to be 0x80000BFFU before 1.1.1. - */ -# define SSL_OP_ALL (SSL_OP_CRYPTOPRO_TLSEXT_BUG|\ - SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS|\ - SSL_OP_LEGACY_SERVER_CONNECT|\ - SSL_OP_TLSEXT_PADDING|\ - SSL_OP_SAFARI_ECDHE_ECDSA_BUG) - -/* OBSOLETE OPTIONS: retained for compatibility */ - -/* Removed from OpenSSL 1.1.0. Was 0x00000001L */ -/* Related to removed SSLv2. */ -# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000002L */ -/* Related to removed SSLv2. */ -# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0 -/* Removed from OpenSSL 0.9.8q and 1.0.0c. Was 0x00000008L */ -/* Dead forever, see CVE-2010-4180 */ -# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0 -/* Removed from OpenSSL 1.0.1h and 1.0.2. Was 0x00000010L */ -/* Refers to ancient SSLREF and SSLv2. */ -# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000020 */ -# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0 -/* Removed from OpenSSL 0.9.7h and 0.9.8b. Was 0x00000040L */ -# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000080 */ -/* Ancient SSLeay version. */ -# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000100L */ -# define SSL_OP_TLS_D5_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000200L */ -# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00080000L */ -# define SSL_OP_SINGLE_ECDH_USE 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00100000L */ -# define SSL_OP_SINGLE_DH_USE 0x0 -/* Removed from OpenSSL 1.0.1k and 1.0.2. Was 0x00200000L */ -# define SSL_OP_EPHEMERAL_RSA 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x01000000L */ -# define SSL_OP_NO_SSLv2 0x0 -/* Removed from OpenSSL 1.0.1. Was 0x08000000L */ -# define SSL_OP_PKCS1_CHECK_1 0x0 -/* Removed from OpenSSL 1.0.1. Was 0x10000000L */ -# define SSL_OP_PKCS1_CHECK_2 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x20000000L */ -# define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x40000000L */ -# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0 - -/* - * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success - * when just a single record has been written): - */ -# define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001U -/* - * Make it possible to retry SSL_write() with changed buffer location (buffer - * contents must stay the same!); this is not the default to avoid the - * misconception that non-blocking SSL_write() behaves like non-blocking - * write(): - */ -# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002U -/* - * Never bother the application with retries if the transport is blocking: - */ -# define SSL_MODE_AUTO_RETRY 0x00000004U -/* Don't attempt to automatically build certificate chain */ -# define SSL_MODE_NO_AUTO_CHAIN 0x00000008U -/* - * Save RAM by releasing read and write buffers when they're empty. (SSL3 and - * TLS only.) Released buffers are freed. - */ -# define SSL_MODE_RELEASE_BUFFERS 0x00000010U -/* - * Send the current time in the Random fields of the ClientHello and - * ServerHello records for compatibility with hypothetical implementations - * that require it. - */ -# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020U -# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040U -/* - * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications - * that reconnect with a downgraded protocol version; see - * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your - * application attempts a normal handshake. Only use this in explicit - * fallback retries, following the guidance in - * draft-ietf-tls-downgrade-scsv-00. - */ -# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080U -/* - * Support Asynchronous operation - */ -# define SSL_MODE_ASYNC 0x00000100U - -/* - * When using DTLS/SCTP, include the terminating zero in the label - * used for computing the endpoint-pair shared secret. Required for - * interoperability with implementations having this bug like these - * older version of OpenSSL: - * - OpenSSL 1.0.0 series - * - OpenSSL 1.0.1 series - * - OpenSSL 1.0.2 series - * - OpenSSL 1.1.0 series - * - OpenSSL 1.1.1 and 1.1.1a - */ -# define SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG 0x00000400U - -/* Cert related flags */ -/* - * Many implementations ignore some aspects of the TLS standards such as - * enforcing certificate chain algorithms. When this is set we enforce them. - */ -# define SSL_CERT_FLAG_TLS_STRICT 0x00000001U - -/* Suite B modes, takes same values as certificate verify flags */ -# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000 -/* Suite B 192 bit only mode */ -# define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000 -/* Suite B 128 bit mode allowing 192 bit algorithms */ -# define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000 - -/* Perform all sorts of protocol violations for testing purposes */ -# define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000 - -/* Flags for building certificate chains */ -/* Treat any existing certificates as untrusted CAs */ -# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1 -/* Don't include root CA in chain */ -# define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2 -/* Just check certificates already there */ -# define SSL_BUILD_CHAIN_FLAG_CHECK 0x4 -/* Ignore verification errors */ -# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8 -/* Clear verification errors from queue */ -# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10 - -/* Flags returned by SSL_check_chain */ -/* Certificate can be used with this session */ -# define CERT_PKEY_VALID 0x1 -/* Certificate can also be used for signing */ -# define CERT_PKEY_SIGN 0x2 -/* EE certificate signing algorithm OK */ -# define CERT_PKEY_EE_SIGNATURE 0x10 -/* CA signature algorithms OK */ -# define CERT_PKEY_CA_SIGNATURE 0x20 -/* EE certificate parameters OK */ -# define CERT_PKEY_EE_PARAM 0x40 -/* CA certificate parameters OK */ -# define CERT_PKEY_CA_PARAM 0x80 -/* Signing explicitly allowed as opposed to SHA1 fallback */ -# define CERT_PKEY_EXPLICIT_SIGN 0x100 -/* Client CA issuer names match (always set for server cert) */ -# define CERT_PKEY_ISSUER_NAME 0x200 -/* Cert type matches client types (always set for server cert) */ -# define CERT_PKEY_CERT_TYPE 0x400 -/* Cert chain suitable to Suite B */ -# define CERT_PKEY_SUITEB 0x800 - -# define SSL_CONF_FLAG_CMDLINE 0x1 -# define SSL_CONF_FLAG_FILE 0x2 -# define SSL_CONF_FLAG_CLIENT 0x4 -# define SSL_CONF_FLAG_SERVER 0x8 -# define SSL_CONF_FLAG_SHOW_ERRORS 0x10 -# define SSL_CONF_FLAG_CERTIFICATE 0x20 -# define SSL_CONF_FLAG_REQUIRE_PRIVATE 0x40 -/* Configuration value types */ -# define SSL_CONF_TYPE_UNKNOWN 0x0 -# define SSL_CONF_TYPE_STRING 0x1 -# define SSL_CONF_TYPE_FILE 0x2 -# define SSL_CONF_TYPE_DIR 0x3 -# define SSL_CONF_TYPE_NONE 0x4 - -/* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */ -# define SSL_COOKIE_LENGTH 4096 - -/* - * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they - * cannot be used to clear bits. - */ - -unsigned long SSL_CTX_get_options(const SSL_CTX *ctx); -unsigned long SSL_get_options(const SSL *s); -unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op); -unsigned long SSL_clear_options(SSL *s, unsigned long op); -unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op); -unsigned long SSL_set_options(SSL *s, unsigned long op); - -# define SSL_CTX_set_mode(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) -# define SSL_CTX_clear_mode(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL) -# define SSL_CTX_get_mode(ctx) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL) -# define SSL_clear_mode(ssl,op) \ - SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL) -# define SSL_set_mode(ssl,op) \ - SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL) -# define SSL_get_mode(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL) -# define SSL_set_mtu(ssl, mtu) \ - SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL) -# define DTLS_set_link_mtu(ssl, mtu) \ - SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL) -# define DTLS_get_link_min_mtu(ssl) \ - SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL) - -# define SSL_get_secure_renegotiation_support(ssl) \ - SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) - -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_heartbeat(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT,0,NULL) -# endif - -# define SSL_CTX_set_cert_flags(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) -# define SSL_set_cert_flags(s,op) \ - SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL) -# define SSL_CTX_clear_cert_flags(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) -# define SSL_clear_cert_flags(s,op) \ - SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) - -void SSL_CTX_set_msg_callback(SSL_CTX *ctx, - void (*cb) (int write_p, int version, - int content_type, const void *buf, - size_t len, SSL *ssl, void *arg)); -void SSL_set_msg_callback(SSL *ssl, - void (*cb) (int write_p, int version, - int content_type, const void *buf, - size_t len, SSL *ssl, void *arg)); -# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) -# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) - -# define SSL_get_extms_support(s) \ - SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL) - -# ifndef OPENSSL_NO_SRP - -/* see tls_srp.c */ -__owur int SSL_SRP_CTX_init(SSL *s); -__owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); -int SSL_SRP_CTX_free(SSL *ctx); -int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); -__owur int SSL_srp_server_param_with_username(SSL *s, int *ad); -__owur int SRP_Calc_A_param(SSL *s); - -# endif - -/* 100k max cert list */ -# define SSL_MAX_CERT_LIST_DEFAULT 1024*100 - -# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) - -/* - * This callback type is used inside SSL_CTX, SSL, and in the functions that - * set them. It is used to override the generation of SSL/TLS session IDs in - * a server. Return value should be zero on an error, non-zero to proceed. - * Also, callbacks should themselves check if the id they generate is unique - * otherwise the SSL handshake will fail with an error - callbacks can do - * this using the 'ssl' value they're passed by; - * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in - * is set at the maximum size the session ID can be. In SSLv3/TLSv1 it is 32 - * bytes. The callback can alter this length to be less if desired. It is - * also an error for the callback to set the size to zero. - */ -typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id, - unsigned int *id_len); - -# define SSL_SESS_CACHE_OFF 0x0000 -# define SSL_SESS_CACHE_CLIENT 0x0001 -# define SSL_SESS_CACHE_SERVER 0x0002 -# define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER) -# define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080 -/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */ -# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100 -# define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 -# define SSL_SESS_CACHE_NO_INTERNAL \ - (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) - -LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); -# define SSL_CTX_sess_number(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL) -# define SSL_CTX_sess_connect(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL) -# define SSL_CTX_sess_connect_good(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL) -# define SSL_CTX_sess_connect_renegotiate(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL) -# define SSL_CTX_sess_accept(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL) -# define SSL_CTX_sess_accept_renegotiate(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL) -# define SSL_CTX_sess_accept_good(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL) -# define SSL_CTX_sess_hits(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL) -# define SSL_CTX_sess_cb_hits(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL) -# define SSL_CTX_sess_misses(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL) -# define SSL_CTX_sess_timeouts(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL) -# define SSL_CTX_sess_cache_full(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL) - -void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, - int (*new_session_cb) (struct ssl_st *ssl, - SSL_SESSION *sess)); -int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, - SSL_SESSION *sess); -void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, - void (*remove_session_cb) (struct ssl_ctx_st - *ctx, - SSL_SESSION *sess)); -void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx, - SSL_SESSION *sess); -void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, - SSL_SESSION *(*get_session_cb) (struct ssl_st - *ssl, - const unsigned char - *data, int len, - int *copy)); -SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, - const unsigned char *data, - int len, int *copy); -void SSL_CTX_set_info_callback(SSL_CTX *ctx, - void (*cb) (const SSL *ssl, int type, int val)); -void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type, - int val); -void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, - int (*client_cert_cb) (SSL *ssl, X509 **x509, - EVP_PKEY **pkey)); -int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509, - EVP_PKEY **pkey); -# ifndef OPENSSL_NO_ENGINE -__owur int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); -# endif -void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, - int (*app_gen_cookie_cb) (SSL *ssl, - unsigned char - *cookie, - unsigned int - *cookie_len)); -void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, - int (*app_verify_cookie_cb) (SSL *ssl, - const unsigned - char *cookie, - unsigned int - cookie_len)); - -void SSL_CTX_set_stateless_cookie_generate_cb( - SSL_CTX *ctx, - int (*gen_stateless_cookie_cb) (SSL *ssl, - unsigned char *cookie, - size_t *cookie_len)); -void SSL_CTX_set_stateless_cookie_verify_cb( - SSL_CTX *ctx, - int (*verify_stateless_cookie_cb) (SSL *ssl, - const unsigned char *cookie, - size_t cookie_len)); -# ifndef OPENSSL_NO_NEXTPROTONEG - -typedef int (*SSL_CTX_npn_advertised_cb_func)(SSL *ssl, - const unsigned char **out, - unsigned int *outlen, - void *arg); -void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s, - SSL_CTX_npn_advertised_cb_func cb, - void *arg); -# define SSL_CTX_set_npn_advertised_cb SSL_CTX_set_next_protos_advertised_cb - -typedef int (*SSL_CTX_npn_select_cb_func)(SSL *s, - unsigned char **out, - unsigned char *outlen, - const unsigned char *in, - unsigned int inlen, - void *arg); -void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, - SSL_CTX_npn_select_cb_func cb, - void *arg); -# define SSL_CTX_set_npn_select_cb SSL_CTX_set_next_proto_select_cb - -void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, - unsigned *len); -# define SSL_get0_npn_negotiated SSL_get0_next_proto_negotiated -# endif - -__owur int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, - const unsigned char *in, unsigned int inlen, - const unsigned char *client, - unsigned int client_len); - -# define OPENSSL_NPN_UNSUPPORTED 0 -# define OPENSSL_NPN_NEGOTIATED 1 -# define OPENSSL_NPN_NO_OVERLAP 2 - -__owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, - unsigned int protos_len); -__owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, - unsigned int protos_len); -typedef int (*SSL_CTX_alpn_select_cb_func)(SSL *ssl, - const unsigned char **out, - unsigned char *outlen, - const unsigned char *in, - unsigned int inlen, - void *arg); -void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, - SSL_CTX_alpn_select_cb_func cb, - void *arg); -void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, - unsigned int *len); - -# ifndef OPENSSL_NO_PSK -/* - * the maximum length of the buffer given to callbacks containing the - * resulting identity/psk - */ -# define PSK_MAX_IDENTITY_LEN 128 -# define PSK_MAX_PSK_LEN 256 -typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl, - const char *hint, - char *identity, - unsigned int max_identity_len, - unsigned char *psk, - unsigned int max_psk_len); -void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb); -void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb); - -typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl, - const char *identity, - unsigned char *psk, - unsigned int max_psk_len); -void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb); -void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb); - -__owur int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); -__owur int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint); -const char *SSL_get_psk_identity_hint(const SSL *s); -const char *SSL_get_psk_identity(const SSL *s); -# endif - -typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl, - const unsigned char *identity, - size_t identity_len, - SSL_SESSION **sess); -typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md, - const unsigned char **id, - size_t *idlen, - SSL_SESSION **sess); - -void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb); -void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx, - SSL_psk_find_session_cb_func cb); -void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb); -void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx, - SSL_psk_use_session_cb_func cb); - -/* Register callbacks to handle custom TLS Extensions for client or server. */ - -__owur int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx, - unsigned int ext_type); - -__owur int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, - unsigned int ext_type, - custom_ext_add_cb add_cb, - custom_ext_free_cb free_cb, - void *add_arg, - custom_ext_parse_cb parse_cb, - void *parse_arg); - -__owur int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, - unsigned int ext_type, - custom_ext_add_cb add_cb, - custom_ext_free_cb free_cb, - void *add_arg, - custom_ext_parse_cb parse_cb, - void *parse_arg); - -__owur int SSL_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type, - unsigned int context, - SSL_custom_ext_add_cb_ex add_cb, - SSL_custom_ext_free_cb_ex free_cb, - void *add_arg, - SSL_custom_ext_parse_cb_ex parse_cb, - void *parse_arg); - -__owur int SSL_extension_supported(unsigned int ext_type); - -# define SSL_NOTHING 1 -# define SSL_WRITING 2 -# define SSL_READING 3 -# define SSL_X509_LOOKUP 4 -# define SSL_ASYNC_PAUSED 5 -# define SSL_ASYNC_NO_JOBS 6 -# define SSL_CLIENT_HELLO_CB 7 - -/* These will only be used when doing non-blocking IO */ -# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) -# define SSL_want_read(s) (SSL_want(s) == SSL_READING) -# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) -# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) -# define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) -# define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) -# define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB) - -# define SSL_MAC_FLAG_READ_MAC_STREAM 1 -# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 - -/* - * A callback for logging out TLS key material. This callback should log out - * |line| followed by a newline. - */ -typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line); - -/* - * SSL_CTX_set_keylog_callback configures a callback to log key material. This - * is intended for debugging use with tools like Wireshark. The cb function - * should log line followed by a newline. - */ -void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb); - -/* - * SSL_CTX_get_keylog_callback returns the callback configured by - * SSL_CTX_set_keylog_callback. - */ -SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx); - -int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data); -uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx); -int SSL_set_max_early_data(SSL *s, uint32_t max_early_data); -uint32_t SSL_get_max_early_data(const SSL *s); -int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data); -uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx); -int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data); -uint32_t SSL_get_recv_max_early_data(const SSL *s); - -#ifdef __cplusplus -} -#endif - -# include -# include -# include /* This is mostly sslv3 with a few tweaks */ -# include /* Datagram TLS */ -# include /* Support for the use_srtp extension */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * These need to be after the above set of includes due to a compiler bug - * in VisualStudio 2015 - */ -DEFINE_STACK_OF_CONST(SSL_CIPHER) -DEFINE_STACK_OF(SSL_COMP) - -/* compatibility */ -# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg))) -# define SSL_get_app_data(s) (SSL_get_ex_data(s,0)) -# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0, \ - (char *)(a))) -# define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0)) -# define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) -# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \ - (char *)(arg))) -DEPRECATEDIN_1_1_0(void SSL_set_debug(SSL *s, int debug)) - -/* TLSv1.3 KeyUpdate message types */ -/* -1 used so that this is an invalid value for the on-the-wire protocol */ -#define SSL_KEY_UPDATE_NONE -1 -/* Values as defined for the on-the-wire protocol */ -#define SSL_KEY_UPDATE_NOT_REQUESTED 0 -#define SSL_KEY_UPDATE_REQUESTED 1 - -/* - * The valid handshake states (one for each type message sent and one for each - * type of message received). There are also two "special" states: - * TLS = TLS or DTLS state - * DTLS = DTLS specific state - * CR/SR = Client Read/Server Read - * CW/SW = Client Write/Server Write - * - * The "special" states are: - * TLS_ST_BEFORE = No handshake has been initiated yet - * TLS_ST_OK = A handshake has been successfully completed - */ -typedef enum { - TLS_ST_BEFORE, - TLS_ST_OK, - DTLS_ST_CR_HELLO_VERIFY_REQUEST, - TLS_ST_CR_SRVR_HELLO, - TLS_ST_CR_CERT, - TLS_ST_CR_CERT_STATUS, - TLS_ST_CR_KEY_EXCH, - TLS_ST_CR_CERT_REQ, - TLS_ST_CR_SRVR_DONE, - TLS_ST_CR_SESSION_TICKET, - TLS_ST_CR_CHANGE, - TLS_ST_CR_FINISHED, - TLS_ST_CW_CLNT_HELLO, - TLS_ST_CW_CERT, - TLS_ST_CW_KEY_EXCH, - TLS_ST_CW_CERT_VRFY, - TLS_ST_CW_CHANGE, - TLS_ST_CW_NEXT_PROTO, - TLS_ST_CW_FINISHED, - TLS_ST_SW_HELLO_REQ, - TLS_ST_SR_CLNT_HELLO, - DTLS_ST_SW_HELLO_VERIFY_REQUEST, - TLS_ST_SW_SRVR_HELLO, - TLS_ST_SW_CERT, - TLS_ST_SW_KEY_EXCH, - TLS_ST_SW_CERT_REQ, - TLS_ST_SW_SRVR_DONE, - TLS_ST_SR_CERT, - TLS_ST_SR_KEY_EXCH, - TLS_ST_SR_CERT_VRFY, - TLS_ST_SR_NEXT_PROTO, - TLS_ST_SR_CHANGE, - TLS_ST_SR_FINISHED, - TLS_ST_SW_SESSION_TICKET, - TLS_ST_SW_CERT_STATUS, - TLS_ST_SW_CHANGE, - TLS_ST_SW_FINISHED, - TLS_ST_SW_ENCRYPTED_EXTENSIONS, - TLS_ST_CR_ENCRYPTED_EXTENSIONS, - TLS_ST_CR_CERT_VRFY, - TLS_ST_SW_CERT_VRFY, - TLS_ST_CR_HELLO_REQ, - TLS_ST_SW_KEY_UPDATE, - TLS_ST_CW_KEY_UPDATE, - TLS_ST_SR_KEY_UPDATE, - TLS_ST_CR_KEY_UPDATE, - TLS_ST_EARLY_DATA, - TLS_ST_PENDING_EARLY_DATA_END, - TLS_ST_CW_END_OF_EARLY_DATA, - TLS_ST_SR_END_OF_EARLY_DATA -} OSSL_HANDSHAKE_STATE; - -/* - * Most of the following state values are no longer used and are defined to be - * the closest equivalent value in the current state machine code. Not all - * defines have an equivalent and are set to a dummy value (-1). SSL_ST_CONNECT - * and SSL_ST_ACCEPT are still in use in the definition of SSL_CB_ACCEPT_LOOP, - * SSL_CB_ACCEPT_EXIT, SSL_CB_CONNECT_LOOP and SSL_CB_CONNECT_EXIT. - */ - -# define SSL_ST_CONNECT 0x1000 -# define SSL_ST_ACCEPT 0x2000 - -# define SSL_ST_MASK 0x0FFF - -# define SSL_CB_LOOP 0x01 -# define SSL_CB_EXIT 0x02 -# define SSL_CB_READ 0x04 -# define SSL_CB_WRITE 0x08 -# define SSL_CB_ALERT 0x4000/* used in callback */ -# define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ) -# define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE) -# define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP) -# define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT) -# define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP) -# define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT) -# define SSL_CB_HANDSHAKE_START 0x10 -# define SSL_CB_HANDSHAKE_DONE 0x20 - -/* Is the SSL_connection established? */ -# define SSL_in_connect_init(a) (SSL_in_init(a) && !SSL_is_server(a)) -# define SSL_in_accept_init(a) (SSL_in_init(a) && SSL_is_server(a)) -int SSL_in_init(const SSL *s); -int SSL_in_before(const SSL *s); -int SSL_is_init_finished(const SSL *s); - -/* - * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you - * should not need these - */ -# define SSL_ST_READ_HEADER 0xF0 -# define SSL_ST_READ_BODY 0xF1 -# define SSL_ST_READ_DONE 0xF2 - -/*- - * Obtain latest Finished message - * -- that we sent (SSL_get_finished) - * -- that we expected from peer (SSL_get_peer_finished). - * Returns length (0 == no Finished so far), copies up to 'count' bytes. - */ -size_t SSL_get_finished(const SSL *s, void *buf, size_t count); -size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); - -/* - * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 3 options are - * 'ored' with SSL_VERIFY_PEER if they are desired - */ -# define SSL_VERIFY_NONE 0x00 -# define SSL_VERIFY_PEER 0x01 -# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 -# define SSL_VERIFY_CLIENT_ONCE 0x04 -# define SSL_VERIFY_POST_HANDSHAKE 0x08 - -# if OPENSSL_API_COMPAT < 0x10100000L -# define OpenSSL_add_ssl_algorithms() SSL_library_init() -# define SSLeay_add_ssl_algorithms() SSL_library_init() -# endif - -/* More backward compatibility */ -# define SSL_get_cipher(s) \ - SSL_CIPHER_get_name(SSL_get_current_cipher(s)) -# define SSL_get_cipher_bits(s,np) \ - SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np) -# define SSL_get_cipher_version(s) \ - SSL_CIPHER_get_version(SSL_get_current_cipher(s)) -# define SSL_get_cipher_name(s) \ - SSL_CIPHER_get_name(SSL_get_current_cipher(s)) -# define SSL_get_time(a) SSL_SESSION_get_time(a) -# define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b)) -# define SSL_get_timeout(a) SSL_SESSION_get_timeout(a) -# define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b)) - -# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id) -# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id) - -DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) -# define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value - * from SSL_AD_... */ -/* These alert types are for SSLv3 and TLSv1 */ -# define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY -/* fatal */ -# define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE -/* fatal */ -# define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC -# define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED -# define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW -/* fatal */ -# define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE -/* fatal */ -# define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE -/* Not for TLS */ -# define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE -# define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE -# define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE -# define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED -# define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED -# define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN -/* fatal */ -# define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER -/* fatal */ -# define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA -/* fatal */ -# define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED -/* fatal */ -# define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR -# define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR -/* fatal */ -# define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION -/* fatal */ -# define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION -/* fatal */ -# define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY -/* fatal */ -# define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR -# define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED -# define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION -# define SSL_AD_MISSING_EXTENSION TLS13_AD_MISSING_EXTENSION -# define SSL_AD_CERTIFICATE_REQUIRED TLS13_AD_CERTIFICATE_REQUIRED -# define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION -# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE -# define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME -# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE -# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE -/* fatal */ -# define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY -/* fatal */ -# define SSL_AD_INAPPROPRIATE_FALLBACK TLS1_AD_INAPPROPRIATE_FALLBACK -# define SSL_AD_NO_APPLICATION_PROTOCOL TLS1_AD_NO_APPLICATION_PROTOCOL -# define SSL_ERROR_NONE 0 -# define SSL_ERROR_SSL 1 -# define SSL_ERROR_WANT_READ 2 -# define SSL_ERROR_WANT_WRITE 3 -# define SSL_ERROR_WANT_X509_LOOKUP 4 -# define SSL_ERROR_SYSCALL 5/* look at error stack/return - * value/errno */ -# define SSL_ERROR_ZERO_RETURN 6 -# define SSL_ERROR_WANT_CONNECT 7 -# define SSL_ERROR_WANT_ACCEPT 8 -# define SSL_ERROR_WANT_ASYNC 9 -# define SSL_ERROR_WANT_ASYNC_JOB 10 -# define SSL_ERROR_WANT_CLIENT_HELLO_CB 11 -# define SSL_CTRL_SET_TMP_DH 3 -# define SSL_CTRL_SET_TMP_ECDH 4 -# define SSL_CTRL_SET_TMP_DH_CB 6 -# define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 -# define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 -# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 -# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12 -# define SSL_CTRL_GET_FLAGS 13 -# define SSL_CTRL_EXTRA_CHAIN_CERT 14 -# define SSL_CTRL_SET_MSG_CALLBACK 15 -# define SSL_CTRL_SET_MSG_CALLBACK_ARG 16 -/* only applies to datagram connections */ -# define SSL_CTRL_SET_MTU 17 -/* Stats */ -# define SSL_CTRL_SESS_NUMBER 20 -# define SSL_CTRL_SESS_CONNECT 21 -# define SSL_CTRL_SESS_CONNECT_GOOD 22 -# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 -# define SSL_CTRL_SESS_ACCEPT 24 -# define SSL_CTRL_SESS_ACCEPT_GOOD 25 -# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26 -# define SSL_CTRL_SESS_HIT 27 -# define SSL_CTRL_SESS_CB_HIT 28 -# define SSL_CTRL_SESS_MISSES 29 -# define SSL_CTRL_SESS_TIMEOUTS 30 -# define SSL_CTRL_SESS_CACHE_FULL 31 -# define SSL_CTRL_MODE 33 -# define SSL_CTRL_GET_READ_AHEAD 40 -# define SSL_CTRL_SET_READ_AHEAD 41 -# define SSL_CTRL_SET_SESS_CACHE_SIZE 42 -# define SSL_CTRL_GET_SESS_CACHE_SIZE 43 -# define SSL_CTRL_SET_SESS_CACHE_MODE 44 -# define SSL_CTRL_GET_SESS_CACHE_MODE 45 -# define SSL_CTRL_GET_MAX_CERT_LIST 50 -# define SSL_CTRL_SET_MAX_CERT_LIST 51 -# define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52 -/* see tls1.h for macros based on these */ -# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53 -# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54 -# define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 -# define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56 -# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 -# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 -# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 -/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 */ -/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 */ -/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 */ -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 -# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 -# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 -# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 -# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 -# define SSL_CTRL_SET_SRP_ARG 78 -# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 -# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 -# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT 85 -# define SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING 86 -# define SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS 87 -# endif -# define DTLS_CTRL_GET_TIMEOUT 73 -# define DTLS_CTRL_HANDLE_TIMEOUT 74 -# define SSL_CTRL_GET_RI_SUPPORT 76 -# define SSL_CTRL_CLEAR_MODE 78 -# define SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB 79 -# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82 -# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83 -# define SSL_CTRL_CHAIN 88 -# define SSL_CTRL_CHAIN_CERT 89 -# define SSL_CTRL_GET_GROUPS 90 -# define SSL_CTRL_SET_GROUPS 91 -# define SSL_CTRL_SET_GROUPS_LIST 92 -# define SSL_CTRL_GET_SHARED_GROUP 93 -# define SSL_CTRL_SET_SIGALGS 97 -# define SSL_CTRL_SET_SIGALGS_LIST 98 -# define SSL_CTRL_CERT_FLAGS 99 -# define SSL_CTRL_CLEAR_CERT_FLAGS 100 -# define SSL_CTRL_SET_CLIENT_SIGALGS 101 -# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102 -# define SSL_CTRL_GET_CLIENT_CERT_TYPES 103 -# define SSL_CTRL_SET_CLIENT_CERT_TYPES 104 -# define SSL_CTRL_BUILD_CERT_CHAIN 105 -# define SSL_CTRL_SET_VERIFY_CERT_STORE 106 -# define SSL_CTRL_SET_CHAIN_CERT_STORE 107 -# define SSL_CTRL_GET_PEER_SIGNATURE_NID 108 -# define SSL_CTRL_GET_PEER_TMP_KEY 109 -# define SSL_CTRL_GET_RAW_CIPHERLIST 110 -# define SSL_CTRL_GET_EC_POINT_FORMATS 111 -# define SSL_CTRL_GET_CHAIN_CERTS 115 -# define SSL_CTRL_SELECT_CURRENT_CERT 116 -# define SSL_CTRL_SET_CURRENT_CERT 117 -# define SSL_CTRL_SET_DH_AUTO 118 -# define DTLS_CTRL_SET_LINK_MTU 120 -# define DTLS_CTRL_GET_LINK_MIN_MTU 121 -# define SSL_CTRL_GET_EXTMS_SUPPORT 122 -# define SSL_CTRL_SET_MIN_PROTO_VERSION 123 -# define SSL_CTRL_SET_MAX_PROTO_VERSION 124 -# define SSL_CTRL_SET_SPLIT_SEND_FRAGMENT 125 -# define SSL_CTRL_SET_MAX_PIPELINES 126 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE 127 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB 128 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG 129 -# define SSL_CTRL_GET_MIN_PROTO_VERSION 130 -# define SSL_CTRL_GET_MAX_PROTO_VERSION 131 -# define SSL_CTRL_GET_SIGNATURE_NID 132 -# define SSL_CTRL_GET_TMP_KEY 133 -# define SSL_CERT_SET_FIRST 1 -# define SSL_CERT_SET_NEXT 2 -# define SSL_CERT_SET_SERVER 3 -# define DTLSv1_get_timeout(ssl, arg) \ - SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)(arg)) -# define DTLSv1_handle_timeout(ssl) \ - SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) -# define SSL_num_renegotiations(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL) -# define SSL_clear_num_renegotiations(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) -# define SSL_total_renegotiations(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) -# define SSL_CTX_set_tmp_dh(ctx,dh) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) -# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) -# define SSL_CTX_set_dh_auto(ctx, onoff) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) -# define SSL_set_dh_auto(s, onoff) \ - SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) -# define SSL_set_tmp_dh(ssl,dh) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) -# define SSL_set_tmp_ecdh(ssl,ecdh) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) -# define SSL_CTX_add_extra_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509)) -# define SSL_CTX_get_extra_chain_certs(ctx,px509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509) -# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509) -# define SSL_CTX_clear_extra_chain_certs(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL) -# define SSL_CTX_set0_chain(ctx,sk) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk)) -# define SSL_CTX_set1_chain(ctx,sk) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk)) -# define SSL_CTX_add0_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) -# define SSL_CTX_add1_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) -# define SSL_CTX_get0_chain_certs(ctx,px509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) -# define SSL_CTX_clear_chain_certs(ctx) \ - SSL_CTX_set0_chain(ctx,NULL) -# define SSL_CTX_build_cert_chain(ctx, flags) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) -# define SSL_CTX_select_current_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) -# define SSL_CTX_set_current_cert(ctx, op) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) -# define SSL_CTX_set0_verify_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) -# define SSL_CTX_set1_verify_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) -# define SSL_CTX_set0_chain_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) -# define SSL_CTX_set1_chain_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) -# define SSL_set0_chain(s,sk) \ - SSL_ctrl(s,SSL_CTRL_CHAIN,0,(char *)(sk)) -# define SSL_set1_chain(s,sk) \ - SSL_ctrl(s,SSL_CTRL_CHAIN,1,(char *)(sk)) -# define SSL_add0_chain_cert(s,x509) \ - SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) -# define SSL_add1_chain_cert(s,x509) \ - SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) -# define SSL_get0_chain_certs(s,px509) \ - SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERTS,0,px509) -# define SSL_clear_chain_certs(s) \ - SSL_set0_chain(s,NULL) -# define SSL_build_cert_chain(s, flags) \ - SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) -# define SSL_select_current_cert(s,x509) \ - SSL_ctrl(s,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) -# define SSL_set_current_cert(s,op) \ - SSL_ctrl(s,SSL_CTRL_SET_CURRENT_CERT, op, NULL) -# define SSL_set0_verify_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) -# define SSL_set1_verify_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) -# define SSL_set0_chain_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) -# define SSL_set1_chain_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) -# define SSL_get1_groups(s, glist) \ - SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist)) -# define SSL_CTX_set1_groups(ctx, glist, glistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist)) -# define SSL_CTX_set1_groups_list(ctx, s) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s)) -# define SSL_set1_groups(s, glist, glistlen) \ - SSL_ctrl(s,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist)) -# define SSL_set1_groups_list(s, str) \ - SSL_ctrl(s,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(str)) -# define SSL_get_shared_group(s, n) \ - SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL) -# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) -# define SSL_CTX_set1_sigalgs_list(ctx, s) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(s)) -# define SSL_set1_sigalgs(s, slist, slistlen) \ - SSL_ctrl(s,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) -# define SSL_set1_sigalgs_list(s, str) \ - SSL_ctrl(s,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(str)) -# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) -# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(s)) -# define SSL_set1_client_sigalgs(s, slist, slistlen) \ - SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) -# define SSL_set1_client_sigalgs_list(s, str) \ - SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(str)) -# define SSL_get0_certificate_types(s, clist) \ - SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)(clist)) -# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen, \ - (char *)(clist)) -# define SSL_set1_client_certificate_types(s, clist, clistlen) \ - SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)(clist)) -# define SSL_get_signature_nid(s, pn) \ - SSL_ctrl(s,SSL_CTRL_GET_SIGNATURE_NID,0,pn) -# define SSL_get_peer_signature_nid(s, pn) \ - SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn) -# define SSL_get_peer_tmp_key(s, pk) \ - SSL_ctrl(s,SSL_CTRL_GET_PEER_TMP_KEY,0,pk) -# define SSL_get_tmp_key(s, pk) \ - SSL_ctrl(s,SSL_CTRL_GET_TMP_KEY,0,pk) -# define SSL_get0_raw_cipherlist(s, plst) \ - SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,plst) -# define SSL_get0_ec_point_formats(s, plst) \ - SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,plst) -# define SSL_CTX_set_min_proto_version(ctx, version) \ - SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) -# define SSL_CTX_set_max_proto_version(ctx, version) \ - SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) -# define SSL_CTX_get_min_proto_version(ctx) \ - SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) -# define SSL_CTX_get_max_proto_version(ctx) \ - SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) -# define SSL_set_min_proto_version(s, version) \ - SSL_ctrl(s, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) -# define SSL_set_max_proto_version(s, version) \ - SSL_ctrl(s, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) -# define SSL_get_min_proto_version(s) \ - SSL_ctrl(s, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) -# define SSL_get_max_proto_version(s) \ - SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) - -/* Backwards compatibility, original 1.1.0 names */ -# define SSL_CTRL_GET_SERVER_TMP_KEY \ - SSL_CTRL_GET_PEER_TMP_KEY -# define SSL_get_server_tmp_key(s, pk) \ - SSL_get_peer_tmp_key(s, pk) - -/* - * The following symbol names are old and obsolete. They are kept - * for compatibility reasons only and should not be used anymore. - */ -# define SSL_CTRL_GET_CURVES SSL_CTRL_GET_GROUPS -# define SSL_CTRL_SET_CURVES SSL_CTRL_SET_GROUPS -# define SSL_CTRL_SET_CURVES_LIST SSL_CTRL_SET_GROUPS_LIST -# define SSL_CTRL_GET_SHARED_CURVE SSL_CTRL_GET_SHARED_GROUP - -# define SSL_get1_curves SSL_get1_groups -# define SSL_CTX_set1_curves SSL_CTX_set1_groups -# define SSL_CTX_set1_curves_list SSL_CTX_set1_groups_list -# define SSL_set1_curves SSL_set1_groups -# define SSL_set1_curves_list SSL_set1_groups_list -# define SSL_get_shared_curve SSL_get_shared_group - - -# if OPENSSL_API_COMPAT < 0x10100000L -/* Provide some compatibility macros for removed functionality. */ -# define SSL_CTX_need_tmp_RSA(ctx) 0 -# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 -# define SSL_need_tmp_RSA(ssl) 0 -# define SSL_set_tmp_rsa(ssl,rsa) 1 -# define SSL_CTX_set_ecdh_auto(dummy, onoff) ((onoff) != 0) -# define SSL_set_ecdh_auto(dummy, onoff) ((onoff) != 0) -/* - * We "pretend" to call the callback to avoid warnings about unused static - * functions. - */ -# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0) -# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0) -# endif -__owur const BIO_METHOD *BIO_f_ssl(void); -__owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client); -__owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx); -__owur BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); -__owur int BIO_ssl_copy_session_id(BIO *to, BIO *from); -void BIO_ssl_shutdown(BIO *ssl_bio); - -__owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); -__owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); -int SSL_CTX_up_ref(SSL_CTX *ctx); -void SSL_CTX_free(SSL_CTX *); -__owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); -__owur long SSL_CTX_get_timeout(const SSL_CTX *ctx); -__owur X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); -void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); -void SSL_CTX_set1_cert_store(SSL_CTX *, X509_STORE *); -__owur int SSL_want(const SSL *s); -__owur int SSL_clear(SSL *s); - -void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); - -__owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); -__owur const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s); -__owur int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); -__owur const char *SSL_CIPHER_get_version(const SSL_CIPHER *c); -__owur const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); -__owur const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); -__owur const char *OPENSSL_cipher_name(const char *rfc_name); -__owur uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c); -__owur uint16_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *c); -__owur int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c); -__owur int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c); -__owur const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c); -__owur int SSL_CIPHER_is_aead(const SSL_CIPHER *c); - -__owur int SSL_get_fd(const SSL *s); -__owur int SSL_get_rfd(const SSL *s); -__owur int SSL_get_wfd(const SSL *s); -__owur const char *SSL_get_cipher_list(const SSL *s, int n); -__owur char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size); -__owur int SSL_get_read_ahead(const SSL *s); -__owur int SSL_pending(const SSL *s); -__owur int SSL_has_pending(const SSL *s); -# ifndef OPENSSL_NO_SOCK -__owur int SSL_set_fd(SSL *s, int fd); -__owur int SSL_set_rfd(SSL *s, int fd); -__owur int SSL_set_wfd(SSL *s, int fd); -# endif -void SSL_set0_rbio(SSL *s, BIO *rbio); -void SSL_set0_wbio(SSL *s, BIO *wbio); -void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); -__owur BIO *SSL_get_rbio(const SSL *s); -__owur BIO *SSL_get_wbio(const SSL *s); -__owur int SSL_set_cipher_list(SSL *s, const char *str); -__owur int SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str); -__owur int SSL_set_ciphersuites(SSL *s, const char *str); -void SSL_set_read_ahead(SSL *s, int yes); -__owur int SSL_get_verify_mode(const SSL *s); -__owur int SSL_get_verify_depth(const SSL *s); -__owur SSL_verify_cb SSL_get_verify_callback(const SSL *s); -void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback); -void SSL_set_verify_depth(SSL *s, int depth); -void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); -# ifndef OPENSSL_NO_RSA -__owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); -__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d, - long len); -# endif -__owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); -__owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, - long len); -__owur int SSL_use_certificate(SSL *ssl, X509 *x); -__owur int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); -__owur int SSL_use_cert_and_key(SSL *ssl, X509 *x509, EVP_PKEY *privatekey, - STACK_OF(X509) *chain, int override); - - -/* serverinfo file format versions */ -# define SSL_SERVERINFOV1 1 -# define SSL_SERVERINFOV2 2 - -/* Set serverinfo data for the current active cert. */ -__owur int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, - size_t serverinfo_length); -__owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version, - const unsigned char *serverinfo, - size_t serverinfo_length); -__owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); - -#ifndef OPENSSL_NO_RSA -__owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); -#endif - -__owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); -__owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); - -#ifndef OPENSSL_NO_RSA -__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, - int type); -#endif -__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, - int type); -__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, - int type); -/* PEM type */ -__owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); -__owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); -__owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); -__owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, - const char *file); -int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, - const char *dir); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_load_error_strings() \ - OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ - | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) -# endif - -__owur const char *SSL_state_string(const SSL *s); -__owur const char *SSL_rstate_string(const SSL *s); -__owur const char *SSL_state_string_long(const SSL *s); -__owur const char *SSL_rstate_string_long(const SSL *s); -__owur long SSL_SESSION_get_time(const SSL_SESSION *s); -__owur long SSL_SESSION_set_time(SSL_SESSION *s, long t); -__owur long SSL_SESSION_get_timeout(const SSL_SESSION *s); -__owur long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); -__owur int SSL_SESSION_get_protocol_version(const SSL_SESSION *s); -__owur int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version); - -__owur const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s); -__owur int SSL_SESSION_set1_hostname(SSL_SESSION *s, const char *hostname); -void SSL_SESSION_get0_alpn_selected(const SSL_SESSION *s, - const unsigned char **alpn, - size_t *len); -__owur int SSL_SESSION_set1_alpn_selected(SSL_SESSION *s, - const unsigned char *alpn, - size_t len); -__owur const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s); -__owur int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher); -__owur int SSL_SESSION_has_ticket(const SSL_SESSION *s); -__owur unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s); -void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick, - size_t *len); -__owur uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s); -__owur int SSL_SESSION_set_max_early_data(SSL_SESSION *s, - uint32_t max_early_data); -__owur int SSL_copy_session_id(SSL *to, const SSL *from); -__owur X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); -__owur int SSL_SESSION_set1_id_context(SSL_SESSION *s, - const unsigned char *sid_ctx, - unsigned int sid_ctx_len); -__owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, - unsigned int sid_len); -__owur int SSL_SESSION_is_resumable(const SSL_SESSION *s); - -__owur SSL_SESSION *SSL_SESSION_new(void); -__owur SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *src); -const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, - unsigned int *len); -const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, - unsigned int *len); -__owur unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); -# ifndef OPENSSL_NO_STDIO -int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); -# endif -int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); -int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x); -int SSL_SESSION_up_ref(SSL_SESSION *ses); -void SSL_SESSION_free(SSL_SESSION *ses); -__owur int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); -__owur int SSL_set_session(SSL *to, SSL_SESSION *session); -int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session); -int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session); -__owur int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb); -__owur int SSL_set_generate_session_id(SSL *s, GEN_SESSION_CB cb); -__owur int SSL_has_matching_session_id(const SSL *s, - const unsigned char *id, - unsigned int id_len); -SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, - long length); - -# ifdef HEADER_X509_H -__owur X509 *SSL_get_peer_certificate(const SSL *s); -# endif - -__owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); - -__owur int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); -__owur int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); -__owur SSL_verify_cb SSL_CTX_get_verify_callback(const SSL_CTX *ctx); -void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb callback); -void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); -void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, - int (*cb) (X509_STORE_CTX *, void *), - void *arg); -void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), - void *arg); -# ifndef OPENSSL_NO_RSA -__owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); -__owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, - long len); -# endif -__owur int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); -__owur int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, - const unsigned char *d, long len); -__owur int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); -__owur int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, - const unsigned char *d); -__owur int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x509, EVP_PKEY *privatekey, - STACK_OF(X509) *chain, int override); - -void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); -void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); -pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx); -void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx); -void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb); -void SSL_set_default_passwd_cb_userdata(SSL *s, void *u); -pem_password_cb *SSL_get_default_passwd_cb(SSL *s); -void *SSL_get_default_passwd_cb_userdata(SSL *s); - -__owur int SSL_CTX_check_private_key(const SSL_CTX *ctx); -__owur int SSL_check_private_key(const SSL *ctx); - -__owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, - const unsigned char *sid_ctx, - unsigned int sid_ctx_len); - -SSL *SSL_new(SSL_CTX *ctx); -int SSL_up_ref(SSL *s); -int SSL_is_dtls(const SSL *s); -__owur int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, - unsigned int sid_ctx_len); - -__owur int SSL_CTX_set_purpose(SSL_CTX *ctx, int purpose); -__owur int SSL_set_purpose(SSL *ssl, int purpose); -__owur int SSL_CTX_set_trust(SSL_CTX *ctx, int trust); -__owur int SSL_set_trust(SSL *ssl, int trust); - -__owur int SSL_set1_host(SSL *s, const char *hostname); -__owur int SSL_add1_host(SSL *s, const char *hostname); -__owur const char *SSL_get0_peername(SSL *s); -void SSL_set_hostflags(SSL *s, unsigned int flags); - -__owur int SSL_CTX_dane_enable(SSL_CTX *ctx); -__owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, - uint8_t mtype, uint8_t ord); -__owur int SSL_dane_enable(SSL *s, const char *basedomain); -__owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, - uint8_t mtype, unsigned const char *data, size_t dlen); -__owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); -__owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, - uint8_t *mtype, unsigned const char **data, - size_t *dlen); -/* - * Bridge opacity barrier between libcrypt and libssl, also needed to support - * offline testing in test/danetest.c - */ -SSL_DANE *SSL_get0_dane(SSL *ssl); -/* - * DANE flags - */ -unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags); -unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags); -unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags); -unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags); - -__owur int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); -__owur int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); - -__owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); -__owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); - -# ifndef OPENSSL_NO_SRP -int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); -int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); -int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); -int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, - char *(*cb) (SSL *, void *)); -int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, - int (*cb) (SSL *, void *)); -int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, - int (*cb) (SSL *, int *, void *)); -int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); - -int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, - BIGNUM *sa, BIGNUM *v, char *info); -int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, - const char *grp); - -__owur BIGNUM *SSL_get_srp_g(SSL *s); -__owur BIGNUM *SSL_get_srp_N(SSL *s); - -__owur char *SSL_get_srp_username(SSL *s); -__owur char *SSL_get_srp_userinfo(SSL *s); -# endif - -/* - * ClientHello callback and helpers. - */ - -# define SSL_CLIENT_HELLO_SUCCESS 1 -# define SSL_CLIENT_HELLO_ERROR 0 -# define SSL_CLIENT_HELLO_RETRY (-1) - -typedef int (*SSL_client_hello_cb_fn) (SSL *s, int *al, void *arg); -void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb, - void *arg); -int SSL_client_hello_isv2(SSL *s); -unsigned int SSL_client_hello_get0_legacy_version(SSL *s); -size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out); -size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out); -size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out); -size_t SSL_client_hello_get0_compression_methods(SSL *s, - const unsigned char **out); -int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen); -int SSL_client_hello_get0_ext(SSL *s, unsigned int type, - const unsigned char **out, size_t *outlen); - -void SSL_certs_clear(SSL *s); -void SSL_free(SSL *ssl); -# ifdef OSSL_ASYNC_FD -/* - * Windows application developer has to include windows.h to use these. - */ -__owur int SSL_waiting_for_async(SSL *s); -__owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds); -__owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, - size_t *numaddfds, OSSL_ASYNC_FD *delfd, - size_t *numdelfds); -# endif -__owur int SSL_accept(SSL *ssl); -__owur int SSL_stateless(SSL *s); -__owur int SSL_connect(SSL *ssl); -__owur int SSL_read(SSL *ssl, void *buf, int num); -__owur int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); - -# define SSL_READ_EARLY_DATA_ERROR 0 -# define SSL_READ_EARLY_DATA_SUCCESS 1 -# define SSL_READ_EARLY_DATA_FINISH 2 - -__owur int SSL_read_early_data(SSL *s, void *buf, size_t num, - size_t *readbytes); -__owur int SSL_peek(SSL *ssl, void *buf, int num); -__owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); -__owur int SSL_write(SSL *ssl, const void *buf, int num); -__owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written); -__owur int SSL_write_early_data(SSL *s, const void *buf, size_t num, - size_t *written); -long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg); -long SSL_callback_ctrl(SSL *, int, void (*)(void)); -long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); -long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void)); - -# define SSL_EARLY_DATA_NOT_SENT 0 -# define SSL_EARLY_DATA_REJECTED 1 -# define SSL_EARLY_DATA_ACCEPTED 2 - -__owur int SSL_get_early_data_status(const SSL *s); - -__owur int SSL_get_error(const SSL *s, int ret_code); -__owur const char *SSL_get_version(const SSL *s); - -/* This sets the 'default' SSL version that SSL_new() will create */ -__owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); - -# ifndef OPENSSL_NO_SSL3_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_method(void)) /* SSLv3 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_client_method(void)) -# endif - -#define SSLv23_method TLS_method -#define SSLv23_server_method TLS_server_method -#define SSLv23_client_method TLS_client_method - -/* Negotiate highest available SSL/TLS version */ -__owur const SSL_METHOD *TLS_method(void); -__owur const SSL_METHOD *TLS_server_method(void); -__owur const SSL_METHOD *TLS_client_method(void); - -# ifndef OPENSSL_NO_TLS1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) -# endif - -# ifndef OPENSSL_NO_TLS1_1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void)) -# endif - -# ifndef OPENSSL_NO_TLS1_2_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void)) -# endif - -# ifndef OPENSSL_NO_DTLS1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_method(void)) /* DTLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_client_method(void)) -# endif - -# ifndef OPENSSL_NO_DTLS1_2_METHOD -/* DTLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_client_method(void)) -# endif - -__owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ -__owur const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ -__owur const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ - -__owur size_t DTLS_get_data_mtu(const SSL *s); - -__owur STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); -__owur STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx); -__owur STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s); -__owur STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s); - -__owur int SSL_do_handshake(SSL *s); -int SSL_key_update(SSL *s, int updatetype); -int SSL_get_key_update_type(const SSL *s); -int SSL_renegotiate(SSL *s); -int SSL_renegotiate_abbreviated(SSL *s); -__owur int SSL_renegotiate_pending(const SSL *s); -int SSL_shutdown(SSL *s); -__owur int SSL_verify_client_post_handshake(SSL *s); -void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val); -void SSL_set_post_handshake_auth(SSL *s, int val); - -__owur const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx); -__owur const SSL_METHOD *SSL_get_ssl_method(const SSL *s); -__owur int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); -__owur const char *SSL_alert_type_string_long(int value); -__owur const char *SSL_alert_type_string(int value); -__owur const char *SSL_alert_desc_string_long(int value); -__owur const char *SSL_alert_desc_string(int value); - -void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); -void SSL_CTX_set0_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); -__owur const STACK_OF(X509_NAME) *SSL_get0_CA_list(const SSL *s); -__owur const STACK_OF(X509_NAME) *SSL_CTX_get0_CA_list(const SSL_CTX *ctx); -__owur int SSL_add1_to_CA_list(SSL *ssl, const X509 *x); -__owur int SSL_CTX_add1_to_CA_list(SSL_CTX *ctx, const X509 *x); -__owur const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s); - -void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); -void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); -__owur STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); -__owur STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); -__owur int SSL_add_client_CA(SSL *ssl, X509 *x); -__owur int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); - -void SSL_set_connect_state(SSL *s); -void SSL_set_accept_state(SSL *s); - -__owur long SSL_get_default_timeout(const SSL *s); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_library_init() OPENSSL_init_ssl(0, NULL) -# endif - -__owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); -__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk); - -__owur SSL *SSL_dup(SSL *ssl); - -__owur X509 *SSL_get_certificate(const SSL *ssl); -/* - * EVP_PKEY - */ -struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); - -__owur X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); -__owur EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); - -void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); -__owur int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); -void SSL_set_quiet_shutdown(SSL *ssl, int mode); -__owur int SSL_get_quiet_shutdown(const SSL *ssl); -void SSL_set_shutdown(SSL *ssl, int mode); -__owur int SSL_get_shutdown(const SSL *ssl); -__owur int SSL_version(const SSL *ssl); -__owur int SSL_client_version(const SSL *s); -__owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); -__owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); -__owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); -__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, - const char *CApath); -# define SSL_get0_session SSL_get_session/* just peek at pointer */ -__owur SSL_SESSION *SSL_get_session(const SSL *ssl); -__owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ -__owur SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); -SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); -void SSL_set_info_callback(SSL *ssl, - void (*cb) (const SSL *ssl, int type, int val)); -void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type, - int val); -__owur OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl); - -void SSL_set_verify_result(SSL *ssl, long v); -__owur long SSL_get_verify_result(const SSL *ssl); -__owur STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s); - -__owur size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, - size_t outlen); -__owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, - size_t outlen); -__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *sess, - unsigned char *out, size_t outlen); -__owur int SSL_SESSION_set1_master_key(SSL_SESSION *sess, - const unsigned char *in, size_t len); -uint8_t SSL_SESSION_get_max_fragment_length(const SSL_SESSION *sess); - -#define SSL_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef) -__owur int SSL_set_ex_data(SSL *ssl, int idx, void *data); -void *SSL_get_ex_data(const SSL *ssl, int idx); -#define SSL_SESSION_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, l, p, newf, dupf, freef) -__owur int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data); -void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx); -#define SSL_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, l, p, newf, dupf, freef) -__owur int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data); -void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx); - -__owur int SSL_get_ex_data_X509_STORE_CTX_idx(void); - -# define SSL_CTX_sess_set_cache_size(ctx,t) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL) -# define SSL_CTX_sess_get_cache_size(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL) -# define SSL_CTX_set_session_cache_mode(ctx,m) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL) -# define SSL_CTX_get_session_cache_mode(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL) - -# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx) -# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m) -# define SSL_CTX_get_read_ahead(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL) -# define SSL_CTX_set_read_ahead(ctx,m) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL) -# define SSL_CTX_get_max_cert_list(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) -# define SSL_CTX_set_max_cert_list(ctx,m) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) -# define SSL_get_max_cert_list(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) -# define SSL_set_max_cert_list(ssl,m) \ - SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) - -# define SSL_CTX_set_max_send_fragment(ctx,m) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) -# define SSL_set_max_send_fragment(ssl,m) \ - SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) -# define SSL_CTX_set_split_send_fragment(ctx,m) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) -# define SSL_set_split_send_fragment(ssl,m) \ - SSL_ctrl(ssl,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) -# define SSL_CTX_set_max_pipelines(ctx,m) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) -# define SSL_set_max_pipelines(ssl,m) \ - SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) - -void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); -void SSL_set_default_read_buffer_len(SSL *s, size_t len); - -# ifndef OPENSSL_NO_DH -/* NB: the |keylength| is only applicable when is_export is true */ -void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, - DH *(*dh) (SSL *ssl, int is_export, - int keylength)); -void SSL_set_tmp_dh_callback(SSL *ssl, - DH *(*dh) (SSL *ssl, int is_export, - int keylength)); -# endif - -__owur const COMP_METHOD *SSL_get_current_compression(const SSL *s); -__owur const COMP_METHOD *SSL_get_current_expansion(const SSL *s); -__owur const char *SSL_COMP_get_name(const COMP_METHOD *comp); -__owur const char *SSL_COMP_get0_name(const SSL_COMP *comp); -__owur int SSL_COMP_get_id(const SSL_COMP *comp); -STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); -__owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) - *meths); -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_COMP_free_compression_methods() while(0) continue -# endif -__owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); - -const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); -int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c); -int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c); -int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len, - int isv2format, STACK_OF(SSL_CIPHER) **sk, - STACK_OF(SSL_CIPHER) **scsvs); - -/* TLS extensions functions */ -__owur int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); - -__owur int SSL_set_session_ticket_ext_cb(SSL *s, - tls_session_ticket_ext_cb_fn cb, - void *arg); - -/* Pre-shared secret session resumption functions */ -__owur int SSL_set_session_secret_cb(SSL *s, - tls_session_secret_cb_fn session_secret_cb, - void *arg); - -void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx, - int (*cb) (SSL *ssl, - int - is_forward_secure)); - -void SSL_set_not_resumable_session_callback(SSL *ssl, - int (*cb) (SSL *ssl, - int is_forward_secure)); - -void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx, - size_t (*cb) (SSL *ssl, int type, - size_t len, void *arg)); -void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg); -void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx); -int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size); - -void SSL_set_record_padding_callback(SSL *ssl, - size_t (*cb) (SSL *ssl, int type, - size_t len, void *arg)); -void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); -void *SSL_get_record_padding_callback_arg(const SSL *ssl); -int SSL_set_block_padding(SSL *ssl, size_t block_size); - -int SSL_set_num_tickets(SSL *s, size_t num_tickets); -size_t SSL_get_num_tickets(const SSL *s); -int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); -size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_cache_hit(s) SSL_session_reused(s) -# endif - -__owur int SSL_session_reused(const SSL *s); -__owur int SSL_is_server(const SSL *s); - -__owur __owur SSL_CONF_CTX *SSL_CONF_CTX_new(void); -int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx); -void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx); -unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags); -__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, - unsigned int flags); -__owur int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre); - -void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl); -void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx); - -__owur int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); -__owur int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); -__owur int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); - -void SSL_add_ssl_module(void); -int SSL_config(SSL *s, const char *name); -int SSL_CTX_config(SSL_CTX *ctx, const char *name); - -# ifndef OPENSSL_NO_SSL_TRACE -void SSL_trace(int write_p, int version, int content_type, - const void *buf, size_t len, SSL *ssl, void *arg); -# endif - -# ifndef OPENSSL_NO_SOCK -int DTLSv1_listen(SSL *s, BIO_ADDR *client); -# endif - -# ifndef OPENSSL_NO_CT - -/* - * A callback for verifying that the received SCTs are sufficient. - * Expected to return 1 if they are sufficient, otherwise 0. - * May return a negative integer if an error occurs. - * A connection should be aborted if the SCTs are deemed insufficient. - */ -typedef int (*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx, - const STACK_OF(SCT) *scts, void *arg); - -/* - * Sets a |callback| that is invoked upon receipt of ServerHelloDone to validate - * the received SCTs. - * If the callback returns a non-positive result, the connection is terminated. - * Call this function before beginning a handshake. - * If a NULL |callback| is provided, SCT validation is disabled. - * |arg| is arbitrary userdata that will be passed to the callback whenever it - * is invoked. Ownership of |arg| remains with the caller. - * - * NOTE: A side-effect of setting a CT callback is that an OCSP stapled response - * will be requested. - */ -int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback, - void *arg); -int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx, - ssl_ct_validation_cb callback, - void *arg); -#define SSL_disable_ct(s) \ - ((void) SSL_set_validation_callback((s), NULL, NULL)) -#define SSL_CTX_disable_ct(ctx) \ - ((void) SSL_CTX_set_validation_callback((ctx), NULL, NULL)) - -/* - * The validation type enumerates the available behaviours of the built-in SSL - * CT validation callback selected via SSL_enable_ct() and SSL_CTX_enable_ct(). - * The underlying callback is a static function in libssl. - */ -enum { - SSL_CT_VALIDATION_PERMISSIVE = 0, - SSL_CT_VALIDATION_STRICT -}; - -/* - * Enable CT by setting up a callback that implements one of the built-in - * validation variants. The SSL_CT_VALIDATION_PERMISSIVE variant always - * continues the handshake, the application can make appropriate decisions at - * handshake completion. The SSL_CT_VALIDATION_STRICT variant requires at - * least one valid SCT, or else handshake termination will be requested. The - * handshake may continue anyway if SSL_VERIFY_NONE is in effect. - */ -int SSL_enable_ct(SSL *s, int validation_mode); -int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode); - -/* - * Report whether a non-NULL callback is enabled. - */ -int SSL_ct_is_enabled(const SSL *s); -int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx); - -/* Gets the SCTs received from a connection */ -const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s); - -/* - * Loads the CT log list from the default location. - * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, - * the log information loaded from this file will be appended to the - * CTLOG_STORE. - * Returns 1 on success, 0 otherwise. - */ -int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx); - -/* - * Loads the CT log list from the specified file path. - * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, - * the log information loaded from this file will be appended to the - * CTLOG_STORE. - * Returns 1 on success, 0 otherwise. - */ -int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path); - -/* - * Sets the CT log list used by all SSL connections created from this SSL_CTX. - * Ownership of the CTLOG_STORE is transferred to the SSL_CTX. - */ -void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs); - -/* - * Gets the CT log list used by all SSL connections created from this SSL_CTX. - * This will be NULL unless one of the following functions has been called: - * - SSL_CTX_set_default_ctlog_list_file - * - SSL_CTX_set_ctlog_list_file - * - SSL_CTX_set_ctlog_store - */ -const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx); - -# endif /* OPENSSL_NO_CT */ - -/* What the "other" parameter contains in security callback */ -/* Mask for type */ -# define SSL_SECOP_OTHER_TYPE 0xffff0000 -# define SSL_SECOP_OTHER_NONE 0 -# define SSL_SECOP_OTHER_CIPHER (1 << 16) -# define SSL_SECOP_OTHER_CURVE (2 << 16) -# define SSL_SECOP_OTHER_DH (3 << 16) -# define SSL_SECOP_OTHER_PKEY (4 << 16) -# define SSL_SECOP_OTHER_SIGALG (5 << 16) -# define SSL_SECOP_OTHER_CERT (6 << 16) - -/* Indicated operation refers to peer key or certificate */ -# define SSL_SECOP_PEER 0x1000 - -/* Values for "op" parameter in security callback */ - -/* Called to filter ciphers */ -/* Ciphers client supports */ -# define SSL_SECOP_CIPHER_SUPPORTED (1 | SSL_SECOP_OTHER_CIPHER) -/* Cipher shared by client/server */ -# define SSL_SECOP_CIPHER_SHARED (2 | SSL_SECOP_OTHER_CIPHER) -/* Sanity check of cipher server selects */ -# define SSL_SECOP_CIPHER_CHECK (3 | SSL_SECOP_OTHER_CIPHER) -/* Curves supported by client */ -# define SSL_SECOP_CURVE_SUPPORTED (4 | SSL_SECOP_OTHER_CURVE) -/* Curves shared by client/server */ -# define SSL_SECOP_CURVE_SHARED (5 | SSL_SECOP_OTHER_CURVE) -/* Sanity check of curve server selects */ -# define SSL_SECOP_CURVE_CHECK (6 | SSL_SECOP_OTHER_CURVE) -/* Temporary DH key */ -# define SSL_SECOP_TMP_DH (7 | SSL_SECOP_OTHER_PKEY) -/* SSL/TLS version */ -# define SSL_SECOP_VERSION (9 | SSL_SECOP_OTHER_NONE) -/* Session tickets */ -# define SSL_SECOP_TICKET (10 | SSL_SECOP_OTHER_NONE) -/* Supported signature algorithms sent to peer */ -# define SSL_SECOP_SIGALG_SUPPORTED (11 | SSL_SECOP_OTHER_SIGALG) -/* Shared signature algorithm */ -# define SSL_SECOP_SIGALG_SHARED (12 | SSL_SECOP_OTHER_SIGALG) -/* Sanity check signature algorithm allowed */ -# define SSL_SECOP_SIGALG_CHECK (13 | SSL_SECOP_OTHER_SIGALG) -/* Used to get mask of supported public key signature algorithms */ -# define SSL_SECOP_SIGALG_MASK (14 | SSL_SECOP_OTHER_SIGALG) -/* Use to see if compression is allowed */ -# define SSL_SECOP_COMPRESSION (15 | SSL_SECOP_OTHER_NONE) -/* EE key in certificate */ -# define SSL_SECOP_EE_KEY (16 | SSL_SECOP_OTHER_CERT) -/* CA key in certificate */ -# define SSL_SECOP_CA_KEY (17 | SSL_SECOP_OTHER_CERT) -/* CA digest algorithm in certificate */ -# define SSL_SECOP_CA_MD (18 | SSL_SECOP_OTHER_CERT) -/* Peer EE key in certificate */ -# define SSL_SECOP_PEER_EE_KEY (SSL_SECOP_EE_KEY | SSL_SECOP_PEER) -/* Peer CA key in certificate */ -# define SSL_SECOP_PEER_CA_KEY (SSL_SECOP_CA_KEY | SSL_SECOP_PEER) -/* Peer CA digest algorithm in certificate */ -# define SSL_SECOP_PEER_CA_MD (SSL_SECOP_CA_MD | SSL_SECOP_PEER) - -void SSL_set_security_level(SSL *s, int level); -__owur int SSL_get_security_level(const SSL *s); -void SSL_set_security_callback(SSL *s, - int (*cb) (const SSL *s, const SSL_CTX *ctx, - int op, int bits, int nid, - void *other, void *ex)); -int (*SSL_get_security_callback(const SSL *s)) (const SSL *s, - const SSL_CTX *ctx, int op, - int bits, int nid, void *other, - void *ex); -void SSL_set0_security_ex_data(SSL *s, void *ex); -__owur void *SSL_get0_security_ex_data(const SSL *s); - -void SSL_CTX_set_security_level(SSL_CTX *ctx, int level); -__owur int SSL_CTX_get_security_level(const SSL_CTX *ctx); -void SSL_CTX_set_security_callback(SSL_CTX *ctx, - int (*cb) (const SSL *s, const SSL_CTX *ctx, - int op, int bits, int nid, - void *other, void *ex)); -int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s, - const SSL_CTX *ctx, - int op, int bits, - int nid, - void *other, - void *ex); -void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex); -__owur void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx); - -/* OPENSSL_INIT flag 0x010000 reserved for internal use */ -# define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L -# define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L - -# define OPENSSL_INIT_SSL_DEFAULT \ - (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS) - -int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); - -# ifndef OPENSSL_NO_UNIT_TEST -__owur const struct openssl_ssl_test_functions *SSL_test_functions(void); -# endif - -__owur int SSL_free_buffers(SSL *ssl); -__owur int SSL_alloc_buffers(SSL *ssl); - -/* Status codes passed to the decrypt session ticket callback. Some of these - * are for internal use only and are never passed to the callback. */ -typedef int SSL_TICKET_STATUS; - -/* Support for ticket appdata */ -/* fatal error, malloc failure */ -# define SSL_TICKET_FATAL_ERR_MALLOC 0 -/* fatal error, either from parsing or decrypting the ticket */ -# define SSL_TICKET_FATAL_ERR_OTHER 1 -/* No ticket present */ -# define SSL_TICKET_NONE 2 -/* Empty ticket present */ -# define SSL_TICKET_EMPTY 3 -/* the ticket couldn't be decrypted */ -# define SSL_TICKET_NO_DECRYPT 4 -/* a ticket was successfully decrypted */ -# define SSL_TICKET_SUCCESS 5 -/* same as above but the ticket needs to be renewed */ -# define SSL_TICKET_SUCCESS_RENEW 6 - -/* Return codes for the decrypt session ticket callback */ -typedef int SSL_TICKET_RETURN; - -/* An error occurred */ -#define SSL_TICKET_RETURN_ABORT 0 -/* Do not use the ticket, do not send a renewed ticket to the client */ -#define SSL_TICKET_RETURN_IGNORE 1 -/* Do not use the ticket, send a renewed ticket to the client */ -#define SSL_TICKET_RETURN_IGNORE_RENEW 2 -/* Use the ticket, do not send a renewed ticket to the client */ -#define SSL_TICKET_RETURN_USE 3 -/* Use the ticket, send a renewed ticket to the client */ -#define SSL_TICKET_RETURN_USE_RENEW 4 - -typedef int (*SSL_CTX_generate_session_ticket_fn)(SSL *s, void *arg); -typedef SSL_TICKET_RETURN (*SSL_CTX_decrypt_session_ticket_fn)(SSL *s, SSL_SESSION *ss, - const unsigned char *keyname, - size_t keyname_length, - SSL_TICKET_STATUS status, - void *arg); -int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, - SSL_CTX_generate_session_ticket_fn gen_cb, - SSL_CTX_decrypt_session_ticket_fn dec_cb, - void *arg); -int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len); -int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len); - -extern const char SSL_version_str[]; - -typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); - -void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); - - -typedef int (*SSL_allow_early_data_cb_fn)(SSL *s, void *arg); -void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx, - SSL_allow_early_data_cb_fn cb, - void *arg); -void SSL_set_allow_early_data_cb(SSL *s, - SSL_allow_early_data_cb_fn cb, - void *arg); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/ssl2.h b/submodules/MtProtoKit/openssl/openssl/ssl2.h deleted file mode 100644 index 5321bd272c..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ssl2.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_SSL2_H -# define HEADER_SSL2_H - -#ifdef __cplusplus -extern "C" { -#endif - -# define SSL2_VERSION 0x0002 - -# define SSL2_MT_CLIENT_HELLO 1 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/ssl23.h b/submodules/MtProtoKit/openssl/openssl/ssl23.h deleted file mode 100644 index 9de4685af9..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ssl23.h +++ /dev/null @@ -1,84 +0,0 @@ -/* ssl/ssl23.h */ -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_SSL23_H -# define HEADER_SSL23_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * client - */ -/* write to server */ -# define SSL23_ST_CW_CLNT_HELLO_A (0x210|SSL_ST_CONNECT) -# define SSL23_ST_CW_CLNT_HELLO_B (0x211|SSL_ST_CONNECT) -/* read from server */ -# define SSL23_ST_CR_SRVR_HELLO_A (0x220|SSL_ST_CONNECT) -# define SSL23_ST_CR_SRVR_HELLO_B (0x221|SSL_ST_CONNECT) - -/* server */ -/* read from client */ -# define SSL23_ST_SR_CLNT_HELLO_A (0x210|SSL_ST_ACCEPT) -# define SSL23_ST_SR_CLNT_HELLO_B (0x211|SSL_ST_ACCEPT) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/ssl3.h b/submodules/MtProtoKit/openssl/openssl/ssl3.h deleted file mode 100644 index 8d01fcc487..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ssl3.h +++ /dev/null @@ -1,339 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_SSL3_H -# define HEADER_SSL3_H - -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Signalling cipher suite value from RFC 5746 - * (TLS_EMPTY_RENEGOTIATION_INFO_SCSV) - */ -# define SSL3_CK_SCSV 0x030000FF - -/* - * Signalling cipher suite value from draft-ietf-tls-downgrade-scsv-00 - * (TLS_FALLBACK_SCSV) - */ -# define SSL3_CK_FALLBACK_SCSV 0x03005600 - -# define SSL3_CK_RSA_NULL_MD5 0x03000001 -# define SSL3_CK_RSA_NULL_SHA 0x03000002 -# define SSL3_CK_RSA_RC4_40_MD5 0x03000003 -# define SSL3_CK_RSA_RC4_128_MD5 0x03000004 -# define SSL3_CK_RSA_RC4_128_SHA 0x03000005 -# define SSL3_CK_RSA_RC2_40_MD5 0x03000006 -# define SSL3_CK_RSA_IDEA_128_SHA 0x03000007 -# define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008 -# define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009 -# define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A - -# define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B -# define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C -# define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D -# define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E -# define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F -# define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010 - -# define SSL3_CK_DHE_DSS_DES_40_CBC_SHA 0x03000011 -# define SSL3_CK_EDH_DSS_DES_40_CBC_SHA SSL3_CK_DHE_DSS_DES_40_CBC_SHA -# define SSL3_CK_DHE_DSS_DES_64_CBC_SHA 0x03000012 -# define SSL3_CK_EDH_DSS_DES_64_CBC_SHA SSL3_CK_DHE_DSS_DES_64_CBC_SHA -# define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA 0x03000013 -# define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA SSL3_CK_DHE_DSS_DES_192_CBC3_SHA -# define SSL3_CK_DHE_RSA_DES_40_CBC_SHA 0x03000014 -# define SSL3_CK_EDH_RSA_DES_40_CBC_SHA SSL3_CK_DHE_RSA_DES_40_CBC_SHA -# define SSL3_CK_DHE_RSA_DES_64_CBC_SHA 0x03000015 -# define SSL3_CK_EDH_RSA_DES_64_CBC_SHA SSL3_CK_DHE_RSA_DES_64_CBC_SHA -# define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA 0x03000016 -# define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA SSL3_CK_DHE_RSA_DES_192_CBC3_SHA - -# define SSL3_CK_ADH_RC4_40_MD5 0x03000017 -# define SSL3_CK_ADH_RC4_128_MD5 0x03000018 -# define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019 -# define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A -# define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B - -/* a bundle of RFC standard cipher names, generated from ssl3_ciphers[] */ -# define SSL3_RFC_RSA_NULL_MD5 "TLS_RSA_WITH_NULL_MD5" -# define SSL3_RFC_RSA_NULL_SHA "TLS_RSA_WITH_NULL_SHA" -# define SSL3_RFC_RSA_DES_192_CBC3_SHA "TLS_RSA_WITH_3DES_EDE_CBC_SHA" -# define SSL3_RFC_DHE_DSS_DES_192_CBC3_SHA "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA" -# define SSL3_RFC_DHE_RSA_DES_192_CBC3_SHA "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA" -# define SSL3_RFC_ADH_DES_192_CBC_SHA "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA" -# define SSL3_RFC_RSA_IDEA_128_SHA "TLS_RSA_WITH_IDEA_CBC_SHA" -# define SSL3_RFC_RSA_RC4_128_MD5 "TLS_RSA_WITH_RC4_128_MD5" -# define SSL3_RFC_RSA_RC4_128_SHA "TLS_RSA_WITH_RC4_128_SHA" -# define SSL3_RFC_ADH_RC4_128_MD5 "TLS_DH_anon_WITH_RC4_128_MD5" - -# define SSL3_TXT_RSA_NULL_MD5 "NULL-MD5" -# define SSL3_TXT_RSA_NULL_SHA "NULL-SHA" -# define SSL3_TXT_RSA_RC4_40_MD5 "EXP-RC4-MD5" -# define SSL3_TXT_RSA_RC4_128_MD5 "RC4-MD5" -# define SSL3_TXT_RSA_RC4_128_SHA "RC4-SHA" -# define SSL3_TXT_RSA_RC2_40_MD5 "EXP-RC2-CBC-MD5" -# define SSL3_TXT_RSA_IDEA_128_SHA "IDEA-CBC-SHA" -# define SSL3_TXT_RSA_DES_40_CBC_SHA "EXP-DES-CBC-SHA" -# define SSL3_TXT_RSA_DES_64_CBC_SHA "DES-CBC-SHA" -# define SSL3_TXT_RSA_DES_192_CBC3_SHA "DES-CBC3-SHA" - -# define SSL3_TXT_DH_DSS_DES_40_CBC_SHA "EXP-DH-DSS-DES-CBC-SHA" -# define SSL3_TXT_DH_DSS_DES_64_CBC_SHA "DH-DSS-DES-CBC-SHA" -# define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA "DH-DSS-DES-CBC3-SHA" -# define SSL3_TXT_DH_RSA_DES_40_CBC_SHA "EXP-DH-RSA-DES-CBC-SHA" -# define SSL3_TXT_DH_RSA_DES_64_CBC_SHA "DH-RSA-DES-CBC-SHA" -# define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA "DH-RSA-DES-CBC3-SHA" - -# define SSL3_TXT_DHE_DSS_DES_40_CBC_SHA "EXP-DHE-DSS-DES-CBC-SHA" -# define SSL3_TXT_DHE_DSS_DES_64_CBC_SHA "DHE-DSS-DES-CBC-SHA" -# define SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA "DHE-DSS-DES-CBC3-SHA" -# define SSL3_TXT_DHE_RSA_DES_40_CBC_SHA "EXP-DHE-RSA-DES-CBC-SHA" -# define SSL3_TXT_DHE_RSA_DES_64_CBC_SHA "DHE-RSA-DES-CBC-SHA" -# define SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA "DHE-RSA-DES-CBC3-SHA" - -/* - * This next block of six "EDH" labels is for backward compatibility with - * older versions of OpenSSL. New code should use the six "DHE" labels above - * instead: - */ -# define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA "EXP-EDH-DSS-DES-CBC-SHA" -# define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA "EDH-DSS-DES-CBC-SHA" -# define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA "EDH-DSS-DES-CBC3-SHA" -# define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA "EXP-EDH-RSA-DES-CBC-SHA" -# define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA "EDH-RSA-DES-CBC-SHA" -# define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA "EDH-RSA-DES-CBC3-SHA" - -# define SSL3_TXT_ADH_RC4_40_MD5 "EXP-ADH-RC4-MD5" -# define SSL3_TXT_ADH_RC4_128_MD5 "ADH-RC4-MD5" -# define SSL3_TXT_ADH_DES_40_CBC_SHA "EXP-ADH-DES-CBC-SHA" -# define SSL3_TXT_ADH_DES_64_CBC_SHA "ADH-DES-CBC-SHA" -# define SSL3_TXT_ADH_DES_192_CBC_SHA "ADH-DES-CBC3-SHA" - -# define SSL3_SSL_SESSION_ID_LENGTH 32 -# define SSL3_MAX_SSL_SESSION_ID_LENGTH 32 - -# define SSL3_MASTER_SECRET_SIZE 48 -# define SSL3_RANDOM_SIZE 32 -# define SSL3_SESSION_ID_SIZE 32 -# define SSL3_RT_HEADER_LENGTH 5 - -# define SSL3_HM_HEADER_LENGTH 4 - -# ifndef SSL3_ALIGN_PAYLOAD - /* - * Some will argue that this increases memory footprint, but it's not - * actually true. Point is that malloc has to return at least 64-bit aligned - * pointers, meaning that allocating 5 bytes wastes 3 bytes in either case. - * Suggested pre-gaping simply moves these wasted bytes from the end of - * allocated region to its front, but makes data payload aligned, which - * improves performance:-) - */ -# define SSL3_ALIGN_PAYLOAD 8 -# else -# if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0 -# error "insane SSL3_ALIGN_PAYLOAD" -# undef SSL3_ALIGN_PAYLOAD -# endif -# endif - -/* - * This is the maximum MAC (digest) size used by the SSL library. Currently - * maximum of 20 is used by SHA1, but we reserve for future extension for - * 512-bit hashes. - */ - -# define SSL3_RT_MAX_MD_SIZE 64 - -/* - * Maximum block size used in all ciphersuites. Currently 16 for AES. - */ - -# define SSL_RT_MAX_CIPHER_BLOCK_SIZE 16 - -# define SSL3_RT_MAX_EXTRA (16384) - -/* Maximum plaintext length: defined by SSL/TLS standards */ -# define SSL3_RT_MAX_PLAIN_LENGTH 16384 -/* Maximum compression overhead: defined by SSL/TLS standards */ -# define SSL3_RT_MAX_COMPRESSED_OVERHEAD 1024 - -/* - * The standards give a maximum encryption overhead of 1024 bytes. In - * practice the value is lower than this. The overhead is the maximum number - * of padding bytes (256) plus the mac size. - */ -# define SSL3_RT_MAX_ENCRYPTED_OVERHEAD (256 + SSL3_RT_MAX_MD_SIZE) -# define SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD 256 - -/* - * OpenSSL currently only uses a padding length of at most one block so the - * send overhead is smaller. - */ - -# define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \ - (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE) - -/* If compression isn't used don't include the compression overhead */ - -# ifdef OPENSSL_NO_COMP -# define SSL3_RT_MAX_COMPRESSED_LENGTH SSL3_RT_MAX_PLAIN_LENGTH -# else -# define SSL3_RT_MAX_COMPRESSED_LENGTH \ - (SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD) -# endif -# define SSL3_RT_MAX_ENCRYPTED_LENGTH \ - (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH) -# define SSL3_RT_MAX_TLS13_ENCRYPTED_LENGTH \ - (SSL3_RT_MAX_PLAIN_LENGTH + SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD) -# define SSL3_RT_MAX_PACKET_SIZE \ - (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH) - -# define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" -# define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" - -# define SSL3_VERSION 0x0300 -# define SSL3_VERSION_MAJOR 0x03 -# define SSL3_VERSION_MINOR 0x00 - -# define SSL3_RT_CHANGE_CIPHER_SPEC 20 -# define SSL3_RT_ALERT 21 -# define SSL3_RT_HANDSHAKE 22 -# define SSL3_RT_APPLICATION_DATA 23 -# define DTLS1_RT_HEARTBEAT 24 - -/* Pseudo content types to indicate additional parameters */ -# define TLS1_RT_CRYPTO 0x1000 -# define TLS1_RT_CRYPTO_PREMASTER (TLS1_RT_CRYPTO | 0x1) -# define TLS1_RT_CRYPTO_CLIENT_RANDOM (TLS1_RT_CRYPTO | 0x2) -# define TLS1_RT_CRYPTO_SERVER_RANDOM (TLS1_RT_CRYPTO | 0x3) -# define TLS1_RT_CRYPTO_MASTER (TLS1_RT_CRYPTO | 0x4) - -# define TLS1_RT_CRYPTO_READ 0x0000 -# define TLS1_RT_CRYPTO_WRITE 0x0100 -# define TLS1_RT_CRYPTO_MAC (TLS1_RT_CRYPTO | 0x5) -# define TLS1_RT_CRYPTO_KEY (TLS1_RT_CRYPTO | 0x6) -# define TLS1_RT_CRYPTO_IV (TLS1_RT_CRYPTO | 0x7) -# define TLS1_RT_CRYPTO_FIXED_IV (TLS1_RT_CRYPTO | 0x8) - -/* Pseudo content types for SSL/TLS header info */ -# define SSL3_RT_HEADER 0x100 -# define SSL3_RT_INNER_CONTENT_TYPE 0x101 - -# define SSL3_AL_WARNING 1 -# define SSL3_AL_FATAL 2 - -# define SSL3_AD_CLOSE_NOTIFY 0 -# define SSL3_AD_UNEXPECTED_MESSAGE 10/* fatal */ -# define SSL3_AD_BAD_RECORD_MAC 20/* fatal */ -# define SSL3_AD_DECOMPRESSION_FAILURE 30/* fatal */ -# define SSL3_AD_HANDSHAKE_FAILURE 40/* fatal */ -# define SSL3_AD_NO_CERTIFICATE 41 -# define SSL3_AD_BAD_CERTIFICATE 42 -# define SSL3_AD_UNSUPPORTED_CERTIFICATE 43 -# define SSL3_AD_CERTIFICATE_REVOKED 44 -# define SSL3_AD_CERTIFICATE_EXPIRED 45 -# define SSL3_AD_CERTIFICATE_UNKNOWN 46 -# define SSL3_AD_ILLEGAL_PARAMETER 47/* fatal */ - -# define TLS1_HB_REQUEST 1 -# define TLS1_HB_RESPONSE 2 - - -# define SSL3_CT_RSA_SIGN 1 -# define SSL3_CT_DSS_SIGN 2 -# define SSL3_CT_RSA_FIXED_DH 3 -# define SSL3_CT_DSS_FIXED_DH 4 -# define SSL3_CT_RSA_EPHEMERAL_DH 5 -# define SSL3_CT_DSS_EPHEMERAL_DH 6 -# define SSL3_CT_FORTEZZA_DMS 20 -/* - * SSL3_CT_NUMBER is used to size arrays and it must be large enough to - * contain all of the cert types defined for *either* SSLv3 and TLSv1. - */ -# define SSL3_CT_NUMBER 10 - -# if defined(TLS_CT_NUMBER) -# if TLS_CT_NUMBER != SSL3_CT_NUMBER -# error "SSL/TLS CT_NUMBER values do not match" -# endif -# endif - -/* No longer used as of OpenSSL 1.1.1 */ -# define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 - -/* Removed from OpenSSL 1.1.0 */ -# define TLS1_FLAGS_TLS_PADDING_BUG 0x0 - -# define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 - -/* Set if we encrypt then mac instead of usual mac then encrypt */ -# define TLS1_FLAGS_ENCRYPT_THEN_MAC_READ 0x0100 -# define TLS1_FLAGS_ENCRYPT_THEN_MAC TLS1_FLAGS_ENCRYPT_THEN_MAC_READ - -/* Set if extended master secret extension received from peer */ -# define TLS1_FLAGS_RECEIVED_EXTMS 0x0200 - -# define TLS1_FLAGS_ENCRYPT_THEN_MAC_WRITE 0x0400 - -# define TLS1_FLAGS_STATELESS 0x0800 - -# define SSL3_MT_HELLO_REQUEST 0 -# define SSL3_MT_CLIENT_HELLO 1 -# define SSL3_MT_SERVER_HELLO 2 -# define SSL3_MT_NEWSESSION_TICKET 4 -# define SSL3_MT_END_OF_EARLY_DATA 5 -# define SSL3_MT_ENCRYPTED_EXTENSIONS 8 -# define SSL3_MT_CERTIFICATE 11 -# define SSL3_MT_SERVER_KEY_EXCHANGE 12 -# define SSL3_MT_CERTIFICATE_REQUEST 13 -# define SSL3_MT_SERVER_DONE 14 -# define SSL3_MT_CERTIFICATE_VERIFY 15 -# define SSL3_MT_CLIENT_KEY_EXCHANGE 16 -# define SSL3_MT_FINISHED 20 -# define SSL3_MT_CERTIFICATE_URL 21 -# define SSL3_MT_CERTIFICATE_STATUS 22 -# define SSL3_MT_SUPPLEMENTAL_DATA 23 -# define SSL3_MT_KEY_UPDATE 24 -# ifndef OPENSSL_NO_NEXTPROTONEG -# define SSL3_MT_NEXT_PROTO 67 -# endif -# define SSL3_MT_MESSAGE_HASH 254 -# define DTLS1_MT_HELLO_VERIFY_REQUEST 3 - -/* Dummy message type for handling CCS like a normal handshake message */ -# define SSL3_MT_CHANGE_CIPHER_SPEC 0x0101 - -# define SSL3_MT_CCS 1 - -/* These are used when changing over to a new cipher */ -# define SSL3_CC_READ 0x001 -# define SSL3_CC_WRITE 0x002 -# define SSL3_CC_CLIENT 0x010 -# define SSL3_CC_SERVER 0x020 -# define SSL3_CC_EARLY 0x040 -# define SSL3_CC_HANDSHAKE 0x080 -# define SSL3_CC_APPLICATION 0x100 -# define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE) -# define SSL3_CHANGE_CIPHER_SERVER_READ (SSL3_CC_SERVER|SSL3_CC_READ) -# define SSL3_CHANGE_CIPHER_CLIENT_READ (SSL3_CC_CLIENT|SSL3_CC_READ) -# define SSL3_CHANGE_CIPHER_SERVER_WRITE (SSL3_CC_SERVER|SSL3_CC_WRITE) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/sslerr.h b/submodules/MtProtoKit/openssl/openssl/sslerr.h deleted file mode 100644 index 3d6850dea3..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/sslerr.h +++ /dev/null @@ -1,772 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_SSLERR_H -# define HEADER_SSLERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_SSL_strings(void); - -/* - * SSL function codes. - */ -# define SSL_F_ADD_CLIENT_KEY_SHARE_EXT 438 -# define SSL_F_ADD_KEY_SHARE 512 -# define SSL_F_BYTES_TO_CIPHER_LIST 519 -# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 -# define SSL_F_CIPHERSUITE_CB 622 -# define SSL_F_CONSTRUCT_CA_NAMES 552 -# define SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS 553 -# define SSL_F_CONSTRUCT_STATEFUL_TICKET 636 -# define SSL_F_CONSTRUCT_STATELESS_TICKET 637 -# define SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH 539 -# define SSL_F_CREATE_TICKET_PREQUEL 638 -# define SSL_F_CT_MOVE_SCTS 345 -# define SSL_F_CT_STRICT 349 -# define SSL_F_CUSTOM_EXT_ADD 554 -# define SSL_F_CUSTOM_EXT_PARSE 555 -# define SSL_F_D2I_SSL_SESSION 103 -# define SSL_F_DANE_CTX_ENABLE 347 -# define SSL_F_DANE_MTYPE_SET 393 -# define SSL_F_DANE_TLSA_ADD 394 -# define SSL_F_DERIVE_SECRET_KEY_AND_IV 514 -# define SSL_F_DO_DTLS1_WRITE 245 -# define SSL_F_DO_SSL3_WRITE 104 -# define SSL_F_DTLS1_BUFFER_RECORD 247 -# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 318 -# define SSL_F_DTLS1_HEARTBEAT 305 -# define SSL_F_DTLS1_HM_FRAGMENT_NEW 623 -# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 -# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 -# define SSL_F_DTLS1_PROCESS_RECORD 257 -# define SSL_F_DTLS1_READ_BYTES 258 -# define SSL_F_DTLS1_READ_FAILED 339 -# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 390 -# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 -# define SSL_F_DTLS1_WRITE_BYTES 545 -# define SSL_F_DTLSV1_LISTEN 350 -# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 371 -# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 385 -# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 370 -# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 386 -# define SSL_F_DTLS_RECORD_LAYER_NEW 635 -# define SSL_F_DTLS_WAIT_FOR_DRY 592 -# define SSL_F_EARLY_DATA_COUNT_OK 532 -# define SSL_F_FINAL_EARLY_DATA 556 -# define SSL_F_FINAL_EC_PT_FORMATS 485 -# define SSL_F_FINAL_EMS 486 -# define SSL_F_FINAL_KEY_SHARE 503 -# define SSL_F_FINAL_MAXFRAGMENTLEN 557 -# define SSL_F_FINAL_RENEGOTIATE 483 -# define SSL_F_FINAL_SERVER_NAME 558 -# define SSL_F_FINAL_SIG_ALGS 497 -# define SSL_F_GET_CERT_VERIFY_TBS_DATA 588 -# define SSL_F_NSS_KEYLOG_INT 500 -# define SSL_F_OPENSSL_INIT_SSL 342 -# define SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION 436 -# define SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION 598 -# define SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE 430 -# define SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE 593 -# define SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE 594 -# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 417 -# define SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION 599 -# define SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION 437 -# define SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION 600 -# define SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE 431 -# define SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE 601 -# define SSL_F_OSSL_STATEM_SERVER_POST_WORK 602 -# define SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE 603 -# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 418 -# define SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION 604 -# define SSL_F_PARSE_CA_NAMES 541 -# define SSL_F_PITEM_NEW 624 -# define SSL_F_PQUEUE_NEW 625 -# define SSL_F_PROCESS_KEY_SHARE_EXT 439 -# define SSL_F_READ_STATE_MACHINE 352 -# define SSL_F_SET_CLIENT_CIPHERSUITE 540 -# define SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET 595 -# define SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET 589 -# define SSL_F_SRP_VERIFY_SERVER_PARAM 596 -# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 -# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 -# define SSL_F_SSL3_CTRL 213 -# define SSL_F_SSL3_CTX_CTRL 133 -# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 -# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 -# define SSL_F_SSL3_ENC 608 -# define SSL_F_SSL3_FINAL_FINISH_MAC 285 -# define SSL_F_SSL3_FINISH_MAC 587 -# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 -# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 -# define SSL_F_SSL3_GET_RECORD 143 -# define SSL_F_SSL3_INIT_FINISHED_MAC 397 -# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 -# define SSL_F_SSL3_READ_BYTES 148 -# define SSL_F_SSL3_READ_N 149 -# define SSL_F_SSL3_SETUP_KEY_BLOCK 157 -# define SSL_F_SSL3_SETUP_READ_BUFFER 156 -# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 -# define SSL_F_SSL3_WRITE_BYTES 158 -# define SSL_F_SSL3_WRITE_PENDING 159 -# define SSL_F_SSL_ADD_CERT_CHAIN 316 -# define SSL_F_SSL_ADD_CERT_TO_BUF 319 -# define SSL_F_SSL_ADD_CERT_TO_WPACKET 493 -# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 -# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 -# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307 -# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 -# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 -# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 -# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 -# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308 -# define SSL_F_SSL_BAD_METHOD 160 -# define SSL_F_SSL_BUILD_CERT_CHAIN 332 -# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 -# define SSL_F_SSL_CACHE_CIPHERLIST 520 -# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 346 -# define SSL_F_SSL_CERT_DUP 221 -# define SSL_F_SSL_CERT_NEW 162 -# define SSL_F_SSL_CERT_SET0_CHAIN 340 -# define SSL_F_SSL_CHECK_PRIVATE_KEY 163 -# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 -# define SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO 606 -# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 -# define SSL_F_SSL_CHOOSE_CLIENT_VERSION 607 -# define SSL_F_SSL_CIPHER_DESCRIPTION 626 -# define SSL_F_SSL_CIPHER_LIST_TO_BYTES 425 -# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 -# define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 -# define SSL_F_SSL_CLEAR 164 -# define SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT 627 -# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 -# define SSL_F_SSL_CONF_CMD 334 -# define SSL_F_SSL_CREATE_CIPHER_LIST 166 -# define SSL_F_SSL_CTRL 232 -# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 -# define SSL_F_SSL_CTX_ENABLE_CT 398 -# define SSL_F_SSL_CTX_MAKE_PROFILES 309 -# define SSL_F_SSL_CTX_NEW 169 -# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 343 -# define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 -# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 -# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 396 -# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 -# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 -# define SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH 551 -# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 -# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 -# define SSL_F_SSL_CTX_USE_SERVERINFO 336 -# define SSL_F_SSL_CTX_USE_SERVERINFO_EX 543 -# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337 -# define SSL_F_SSL_DANE_DUP 403 -# define SSL_F_SSL_DANE_ENABLE 395 -# define SSL_F_SSL_DERIVE 590 -# define SSL_F_SSL_DO_CONFIG 391 -# define SSL_F_SSL_DO_HANDSHAKE 180 -# define SSL_F_SSL_DUP_CA_LIST 408 -# define SSL_F_SSL_ENABLE_CT 402 -# define SSL_F_SSL_GENERATE_PKEY_GROUP 559 -# define SSL_F_SSL_GENERATE_SESSION_ID 547 -# define SSL_F_SSL_GET_NEW_SESSION 181 -# define SSL_F_SSL_GET_PREV_SESSION 217 -# define SSL_F_SSL_GET_SERVER_CERT_INDEX 322 -# define SSL_F_SSL_GET_SIGN_PKEY 183 -# define SSL_F_SSL_HANDSHAKE_HASH 560 -# define SSL_F_SSL_INIT_WBIO_BUFFER 184 -# define SSL_F_SSL_KEY_UPDATE 515 -# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 -# define SSL_F_SSL_LOG_MASTER_SECRET 498 -# define SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE 499 -# define SSL_F_SSL_MODULE_INIT 392 -# define SSL_F_SSL_NEW 186 -# define SSL_F_SSL_NEXT_PROTO_VALIDATE 565 -# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 -# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 -# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 310 -# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 -# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 -# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 311 -# define SSL_F_SSL_PEEK 270 -# define SSL_F_SSL_PEEK_EX 432 -# define SSL_F_SSL_PEEK_INTERNAL 522 -# define SSL_F_SSL_READ 223 -# define SSL_F_SSL_READ_EARLY_DATA 529 -# define SSL_F_SSL_READ_EX 434 -# define SSL_F_SSL_READ_INTERNAL 523 -# define SSL_F_SSL_RENEGOTIATE 516 -# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 546 -# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 -# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 -# define SSL_F_SSL_SESSION_DUP 348 -# define SSL_F_SSL_SESSION_NEW 189 -# define SSL_F_SSL_SESSION_PRINT_FP 190 -# define SSL_F_SSL_SESSION_SET1_ID 423 -# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 -# define SSL_F_SSL_SET_ALPN_PROTOS 344 -# define SSL_F_SSL_SET_CERT 191 -# define SSL_F_SSL_SET_CERT_AND_KEY 621 -# define SSL_F_SSL_SET_CIPHER_LIST 271 -# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 399 -# define SSL_F_SSL_SET_FD 192 -# define SSL_F_SSL_SET_PKEY 193 -# define SSL_F_SSL_SET_RFD 194 -# define SSL_F_SSL_SET_SESSION 195 -# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 -# define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 -# define SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH 550 -# define SSL_F_SSL_SET_WFD 196 -# define SSL_F_SSL_SHUTDOWN 224 -# define SSL_F_SSL_SRP_CTX_INIT 313 -# define SSL_F_SSL_START_ASYNC_JOB 389 -# define SSL_F_SSL_UNDEFINED_FUNCTION 197 -# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 -# define SSL_F_SSL_USE_CERTIFICATE 198 -# define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 -# define SSL_F_SSL_USE_CERTIFICATE_FILE 200 -# define SSL_F_SSL_USE_PRIVATEKEY 201 -# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 -# define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 -# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 -# define SSL_F_SSL_USE_RSAPRIVATEKEY 204 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 -# define SSL_F_SSL_VALIDATE_CT 400 -# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 -# define SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE 616 -# define SSL_F_SSL_WRITE 208 -# define SSL_F_SSL_WRITE_EARLY_DATA 526 -# define SSL_F_SSL_WRITE_EARLY_FINISH 527 -# define SSL_F_SSL_WRITE_EX 433 -# define SSL_F_SSL_WRITE_INTERNAL 524 -# define SSL_F_STATE_MACHINE 353 -# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 -# define SSL_F_TLS12_COPY_SIGALGS 533 -# define SSL_F_TLS13_CHANGE_CIPHER_STATE 440 -# define SSL_F_TLS13_ENC 609 -# define SSL_F_TLS13_FINAL_FINISH_MAC 605 -# define SSL_F_TLS13_GENERATE_SECRET 591 -# define SSL_F_TLS13_HKDF_EXPAND 561 -# define SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA 617 -# define SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA 618 -# define SSL_F_TLS13_SETUP_KEY_BLOCK 441 -# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 -# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 341 -# define SSL_F_TLS1_ENC 401 -# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 -# define SSL_F_TLS1_GET_CURVELIST 338 -# define SSL_F_TLS1_PRF 284 -# define SSL_F_TLS1_SAVE_U16 628 -# define SSL_F_TLS1_SETUP_KEY_BLOCK 211 -# define SSL_F_TLS1_SET_GROUPS 629 -# define SSL_F_TLS1_SET_RAW_SIGALGS 630 -# define SSL_F_TLS1_SET_SERVER_SIGALGS 335 -# define SSL_F_TLS1_SET_SHARED_SIGALGS 631 -# define SSL_F_TLS1_SET_SIGALGS 632 -# define SSL_F_TLS_CHOOSE_SIGALG 513 -# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 354 -# define SSL_F_TLS_COLLECT_EXTENSIONS 435 -# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES 542 -# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 372 -# define SSL_F_TLS_CONSTRUCT_CERT_STATUS 429 -# define SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY 494 -# define SSL_F_TLS_CONSTRUCT_CERT_VERIFY 496 -# define SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC 427 -# define SSL_F_TLS_CONSTRUCT_CKE_DHE 404 -# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 405 -# define SSL_F_TLS_CONSTRUCT_CKE_GOST 406 -# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 407 -# define SSL_F_TLS_CONSTRUCT_CKE_RSA 409 -# define SSL_F_TLS_CONSTRUCT_CKE_SRP 410 -# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 484 -# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 487 -# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 488 -# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 489 -# define SSL_F_TLS_CONSTRUCT_CTOS_ALPN 466 -# define SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE 355 -# define SSL_F_TLS_CONSTRUCT_CTOS_COOKIE 535 -# define SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA 530 -# define SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS 467 -# define SSL_F_TLS_CONSTRUCT_CTOS_EMS 468 -# define SSL_F_TLS_CONSTRUCT_CTOS_ETM 469 -# define SSL_F_TLS_CONSTRUCT_CTOS_HELLO 356 -# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE 357 -# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE 470 -# define SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN 549 -# define SSL_F_TLS_CONSTRUCT_CTOS_NPN 471 -# define SSL_F_TLS_CONSTRUCT_CTOS_PADDING 472 -# define SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH 619 -# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 501 -# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 509 -# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 473 -# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 474 -# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 475 -# define SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET 476 -# define SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS 477 -# define SSL_F_TLS_CONSTRUCT_CTOS_SRP 478 -# define SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST 479 -# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS 480 -# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS 481 -# define SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP 482 -# define SSL_F_TLS_CONSTRUCT_CTOS_VERIFY 358 -# define SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS 443 -# define SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA 536 -# define SSL_F_TLS_CONSTRUCT_EXTENSIONS 447 -# define SSL_F_TLS_CONSTRUCT_FINISHED 359 -# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 373 -# define SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST 510 -# define SSL_F_TLS_CONSTRUCT_KEY_UPDATE 517 -# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 428 -# define SSL_F_TLS_CONSTRUCT_NEXT_PROTO 426 -# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 490 -# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 491 -# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 492 -# define SSL_F_TLS_CONSTRUCT_STOC_ALPN 451 -# define SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE 374 -# define SSL_F_TLS_CONSTRUCT_STOC_COOKIE 613 -# define SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG 452 -# define SSL_F_TLS_CONSTRUCT_STOC_DONE 375 -# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA 531 -# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO 525 -# define SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS 453 -# define SSL_F_TLS_CONSTRUCT_STOC_EMS 454 -# define SSL_F_TLS_CONSTRUCT_STOC_ETM 455 -# define SSL_F_TLS_CONSTRUCT_STOC_HELLO 376 -# define SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE 377 -# define SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE 456 -# define SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN 548 -# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 457 -# define SSL_F_TLS_CONSTRUCT_STOC_PSK 504 -# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 458 -# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 459 -# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 460 -# define SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST 461 -# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS 544 -# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS 611 -# define SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP 462 -# define SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO 521 -# define SSL_F_TLS_FINISH_HANDSHAKE 597 -# define SSL_F_TLS_GET_MESSAGE_BODY 351 -# define SSL_F_TLS_GET_MESSAGE_HEADER 387 -# define SSL_F_TLS_HANDLE_ALPN 562 -# define SSL_F_TLS_HANDLE_STATUS_REQUEST 563 -# define SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES 566 -# define SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT 449 -# define SSL_F_TLS_PARSE_CTOS_ALPN 567 -# define SSL_F_TLS_PARSE_CTOS_COOKIE 614 -# define SSL_F_TLS_PARSE_CTOS_EARLY_DATA 568 -# define SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS 569 -# define SSL_F_TLS_PARSE_CTOS_EMS 570 -# define SSL_F_TLS_PARSE_CTOS_KEY_SHARE 463 -# define SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN 571 -# define SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH 620 -# define SSL_F_TLS_PARSE_CTOS_PSK 505 -# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 572 -# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 464 -# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 573 -# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 574 -# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS 575 -# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT 615 -# define SSL_F_TLS_PARSE_CTOS_SRP 576 -# define SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST 577 -# define SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS 578 -# define SSL_F_TLS_PARSE_CTOS_USE_SRTP 465 -# define SSL_F_TLS_PARSE_STOC_ALPN 579 -# define SSL_F_TLS_PARSE_STOC_COOKIE 534 -# define SSL_F_TLS_PARSE_STOC_EARLY_DATA 538 -# define SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO 528 -# define SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS 580 -# define SSL_F_TLS_PARSE_STOC_KEY_SHARE 445 -# define SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN 581 -# define SSL_F_TLS_PARSE_STOC_NPN 582 -# define SSL_F_TLS_PARSE_STOC_PSK 502 -# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 448 -# define SSL_F_TLS_PARSE_STOC_SCT 564 -# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 583 -# define SSL_F_TLS_PARSE_STOC_SESSION_TICKET 584 -# define SSL_F_TLS_PARSE_STOC_STATUS_REQUEST 585 -# define SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS 612 -# define SSL_F_TLS_PARSE_STOC_USE_SRTP 446 -# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 378 -# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 384 -# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 360 -# define SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST 610 -# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 361 -# define SSL_F_TLS_PROCESS_CERT_STATUS 362 -# define SSL_F_TLS_PROCESS_CERT_STATUS_BODY 495 -# define SSL_F_TLS_PROCESS_CERT_VERIFY 379 -# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 363 -# define SSL_F_TLS_PROCESS_CKE_DHE 411 -# define SSL_F_TLS_PROCESS_CKE_ECDHE 412 -# define SSL_F_TLS_PROCESS_CKE_GOST 413 -# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 414 -# define SSL_F_TLS_PROCESS_CKE_RSA 415 -# define SSL_F_TLS_PROCESS_CKE_SRP 416 -# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 380 -# define SSL_F_TLS_PROCESS_CLIENT_HELLO 381 -# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 382 -# define SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS 444 -# define SSL_F_TLS_PROCESS_END_OF_EARLY_DATA 537 -# define SSL_F_TLS_PROCESS_FINISHED 364 -# define SSL_F_TLS_PROCESS_HELLO_REQ 507 -# define SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST 511 -# define SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT 442 -# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 365 -# define SSL_F_TLS_PROCESS_KEY_UPDATE 518 -# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 366 -# define SSL_F_TLS_PROCESS_NEXT_PROTO 383 -# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 367 -# define SSL_F_TLS_PROCESS_SERVER_DONE 368 -# define SSL_F_TLS_PROCESS_SERVER_HELLO 369 -# define SSL_F_TLS_PROCESS_SKE_DHE 419 -# define SSL_F_TLS_PROCESS_SKE_ECDHE 420 -# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 421 -# define SSL_F_TLS_PROCESS_SKE_SRP 422 -# define SSL_F_TLS_PSK_DO_BINDER 506 -# define SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT 450 -# define SSL_F_TLS_SETUP_HANDSHAKE 508 -# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 220 -# define SSL_F_WPACKET_INTERN_INIT_LEN 633 -# define SSL_F_WPACKET_START_SUB_PACKET_LEN__ 634 -# define SSL_F_WRITE_STATE_MACHINE 586 - -/* - * SSL reason codes. - */ -# define SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY 291 -# define SSL_R_APP_DATA_IN_HANDSHAKE 100 -# define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 -# define SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE 143 -# define SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE 158 -# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 -# define SSL_R_BAD_CIPHER 186 -# define SSL_R_BAD_DATA 390 -# define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 -# define SSL_R_BAD_DECOMPRESSION 107 -# define SSL_R_BAD_DH_VALUE 102 -# define SSL_R_BAD_DIGEST_LENGTH 111 -# define SSL_R_BAD_EARLY_DATA 233 -# define SSL_R_BAD_ECC_CERT 304 -# define SSL_R_BAD_ECPOINT 306 -# define SSL_R_BAD_EXTENSION 110 -# define SSL_R_BAD_HANDSHAKE_LENGTH 332 -# define SSL_R_BAD_HANDSHAKE_STATE 236 -# define SSL_R_BAD_HELLO_REQUEST 105 -# define SSL_R_BAD_HRR_VERSION 263 -# define SSL_R_BAD_KEY_SHARE 108 -# define SSL_R_BAD_KEY_UPDATE 122 -# define SSL_R_BAD_LEGACY_VERSION 292 -# define SSL_R_BAD_LENGTH 271 -# define SSL_R_BAD_PACKET 240 -# define SSL_R_BAD_PACKET_LENGTH 115 -# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 -# define SSL_R_BAD_PSK 219 -# define SSL_R_BAD_PSK_IDENTITY 114 -# define SSL_R_BAD_RECORD_TYPE 443 -# define SSL_R_BAD_RSA_ENCRYPT 119 -# define SSL_R_BAD_SIGNATURE 123 -# define SSL_R_BAD_SRP_A_LENGTH 347 -# define SSL_R_BAD_SRP_PARAMETERS 371 -# define SSL_R_BAD_SRTP_MKI_VALUE 352 -# define SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST 353 -# define SSL_R_BAD_SSL_FILETYPE 124 -# define SSL_R_BAD_VALUE 384 -# define SSL_R_BAD_WRITE_RETRY 127 -# define SSL_R_BINDER_DOES_NOT_VERIFY 253 -# define SSL_R_BIO_NOT_SET 128 -# define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 129 -# define SSL_R_BN_LIB 130 -# define SSL_R_CALLBACK_FAILED 234 -# define SSL_R_CANNOT_CHANGE_CIPHER 109 -# define SSL_R_CA_DN_LENGTH_MISMATCH 131 -# define SSL_R_CA_KEY_TOO_SMALL 397 -# define SSL_R_CA_MD_TOO_WEAK 398 -# define SSL_R_CCS_RECEIVED_EARLY 133 -# define SSL_R_CERTIFICATE_VERIFY_FAILED 134 -# define SSL_R_CERT_CB_ERROR 377 -# define SSL_R_CERT_LENGTH_MISMATCH 135 -# define SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED 218 -# define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 -# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 -# define SSL_R_CLIENTHELLO_TLSEXT 226 -# define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 -# define SSL_R_COMPRESSION_DISABLED 343 -# define SSL_R_COMPRESSION_FAILURE 141 -# define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE 307 -# define SSL_R_COMPRESSION_LIBRARY_ERROR 142 -# define SSL_R_CONNECTION_TYPE_NOT_SET 144 -# define SSL_R_CONTEXT_NOT_DANE_ENABLED 167 -# define SSL_R_COOKIE_GEN_CALLBACK_FAILURE 400 -# define SSL_R_COOKIE_MISMATCH 308 -# define SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED 206 -# define SSL_R_DANE_ALREADY_ENABLED 172 -# define SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL 173 -# define SSL_R_DANE_NOT_ENABLED 175 -# define SSL_R_DANE_TLSA_BAD_CERTIFICATE 180 -# define SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE 184 -# define SSL_R_DANE_TLSA_BAD_DATA_LENGTH 189 -# define SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH 192 -# define SSL_R_DANE_TLSA_BAD_MATCHING_TYPE 200 -# define SSL_R_DANE_TLSA_BAD_PUBLIC_KEY 201 -# define SSL_R_DANE_TLSA_BAD_SELECTOR 202 -# define SSL_R_DANE_TLSA_NULL_DATA 203 -# define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 -# define SSL_R_DATA_LENGTH_TOO_LONG 146 -# define SSL_R_DECRYPTION_FAILED 147 -# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 -# define SSL_R_DH_KEY_TOO_SMALL 394 -# define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148 -# define SSL_R_DIGEST_CHECK_FAILED 149 -# define SSL_R_DTLS_MESSAGE_TOO_BIG 334 -# define SSL_R_DUPLICATE_COMPRESSION_ID 309 -# define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318 -# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 -# define SSL_R_EE_KEY_TOO_SMALL 399 -# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 -# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 -# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 -# define SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN 204 -# define SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE 194 -# define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 -# define SSL_R_EXTENSION_NOT_RECEIVED 279 -# define SSL_R_EXTRA_DATA_IN_MESSAGE 153 -# define SSL_R_EXT_LENGTH_MISMATCH 163 -# define SSL_R_FAILED_TO_INIT_ASYNC 405 -# define SSL_R_FRAGMENTED_CLIENT_HELLO 401 -# define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 -# define SSL_R_HTTPS_PROXY_REQUEST 155 -# define SSL_R_HTTP_REQUEST 156 -# define SSL_R_ILLEGAL_POINT_COMPRESSION 162 -# define SSL_R_ILLEGAL_SUITEB_DIGEST 380 -# define SSL_R_INAPPROPRIATE_FALLBACK 373 -# define SSL_R_INCONSISTENT_COMPRESSION 340 -# define SSL_R_INCONSISTENT_EARLY_DATA_ALPN 222 -# define SSL_R_INCONSISTENT_EARLY_DATA_SNI 231 -# define SSL_R_INCONSISTENT_EXTMS 104 -# define SSL_R_INSUFFICIENT_SECURITY 241 -# define SSL_R_INVALID_ALERT 205 -# define SSL_R_INVALID_CCS_MESSAGE 260 -# define SSL_R_INVALID_CERTIFICATE_OR_ALG 238 -# define SSL_R_INVALID_COMMAND 280 -# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 -# define SSL_R_INVALID_CONFIG 283 -# define SSL_R_INVALID_CONFIGURATION_NAME 113 -# define SSL_R_INVALID_CONTEXT 282 -# define SSL_R_INVALID_CT_VALIDATION_TYPE 212 -# define SSL_R_INVALID_KEY_UPDATE_TYPE 120 -# define SSL_R_INVALID_MAX_EARLY_DATA 174 -# define SSL_R_INVALID_NULL_CMD_NAME 385 -# define SSL_R_INVALID_SEQUENCE_NUMBER 402 -# define SSL_R_INVALID_SERVERINFO_DATA 388 -# define SSL_R_INVALID_SESSION_ID 999 -# define SSL_R_INVALID_SRP_USERNAME 357 -# define SSL_R_INVALID_STATUS_RESPONSE 328 -# define SSL_R_INVALID_TICKET_KEYS_LENGTH 325 -# define SSL_R_LENGTH_MISMATCH 159 -# define SSL_R_LENGTH_TOO_LONG 404 -# define SSL_R_LENGTH_TOO_SHORT 160 -# define SSL_R_LIBRARY_BUG 274 -# define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 -# define SSL_R_MISSING_DSA_SIGNING_CERT 165 -# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 -# define SSL_R_MISSING_FATAL 256 -# define SSL_R_MISSING_PARAMETERS 290 -# define SSL_R_MISSING_RSA_CERTIFICATE 168 -# define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169 -# define SSL_R_MISSING_RSA_SIGNING_CERT 170 -# define SSL_R_MISSING_SIGALGS_EXTENSION 112 -# define SSL_R_MISSING_SIGNING_CERT 221 -# define SSL_R_MISSING_SRP_PARAM 358 -# define SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION 209 -# define SSL_R_MISSING_TMP_DH_KEY 171 -# define SSL_R_MISSING_TMP_ECDH_KEY 311 -# define SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA 293 -# define SSL_R_NOT_ON_RECORD_BOUNDARY 182 -# define SSL_R_NOT_REPLACING_CERTIFICATE 289 -# define SSL_R_NOT_SERVER 284 -# define SSL_R_NO_APPLICATION_PROTOCOL 235 -# define SSL_R_NO_CERTIFICATES_RETURNED 176 -# define SSL_R_NO_CERTIFICATE_ASSIGNED 177 -# define SSL_R_NO_CERTIFICATE_SET 179 -# define SSL_R_NO_CHANGE_FOLLOWING_HRR 214 -# define SSL_R_NO_CIPHERS_AVAILABLE 181 -# define SSL_R_NO_CIPHERS_SPECIFIED 183 -# define SSL_R_NO_CIPHER_MATCH 185 -# define SSL_R_NO_CLIENT_CERT_METHOD 331 -# define SSL_R_NO_COMPRESSION_SPECIFIED 187 -# define SSL_R_NO_COOKIE_CALLBACK_SET 287 -# define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER 330 -# define SSL_R_NO_METHOD_SPECIFIED 188 -# define SSL_R_NO_PEM_EXTENSIONS 389 -# define SSL_R_NO_PRIVATE_KEY_ASSIGNED 190 -# define SSL_R_NO_PROTOCOLS_AVAILABLE 191 -# define SSL_R_NO_RENEGOTIATION 339 -# define SSL_R_NO_REQUIRED_DIGEST 324 -# define SSL_R_NO_SHARED_CIPHER 193 -# define SSL_R_NO_SHARED_GROUPS 410 -# define SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS 376 -# define SSL_R_NO_SRTP_PROFILES 359 -# define SSL_R_NO_SUITABLE_KEY_SHARE 101 -# define SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM 118 -# define SSL_R_NO_VALID_SCTS 216 -# define SSL_R_NO_VERIFY_COOKIE_CALLBACK 403 -# define SSL_R_NULL_SSL_CTX 195 -# define SSL_R_NULL_SSL_METHOD_PASSED 196 -# define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 -# define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 -# define SSL_R_OVERFLOW_ERROR 237 -# define SSL_R_PACKET_LENGTH_TOO_LONG 198 -# define SSL_R_PARSE_TLSEXT 227 -# define SSL_R_PATH_TOO_LONG 270 -# define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE 199 -# define SSL_R_PEM_NAME_BAD_PREFIX 391 -# define SSL_R_PEM_NAME_TOO_SHORT 392 -# define SSL_R_PIPELINE_FAILURE 406 -# define SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR 278 -# define SSL_R_PRIVATE_KEY_MISMATCH 288 -# define SSL_R_PROTOCOL_IS_SHUTDOWN 207 -# define SSL_R_PSK_IDENTITY_NOT_FOUND 223 -# define SSL_R_PSK_NO_CLIENT_CB 224 -# define SSL_R_PSK_NO_SERVER_CB 225 -# define SSL_R_READ_BIO_NOT_SET 211 -# define SSL_R_READ_TIMEOUT_EXPIRED 312 -# define SSL_R_RECORD_LENGTH_MISMATCH 213 -# define SSL_R_RECORD_TOO_SMALL 298 -# define SSL_R_RENEGOTIATE_EXT_TOO_LONG 335 -# define SSL_R_RENEGOTIATION_ENCODING_ERR 336 -# define SSL_R_RENEGOTIATION_MISMATCH 337 -# define SSL_R_REQUEST_PENDING 285 -# define SSL_R_REQUEST_SENT 286 -# define SSL_R_REQUIRED_CIPHER_MISSING 215 -# define SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING 342 -# define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 -# define SSL_R_SCT_VERIFICATION_FAILED 208 -# define SSL_R_SERVERHELLO_TLSEXT 275 -# define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 -# define SSL_R_SHUTDOWN_WHILE_IN_INIT 407 -# define SSL_R_SIGNATURE_ALGORITHMS_ERROR 360 -# define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220 -# define SSL_R_SRP_A_CALC 361 -# define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES 362 -# define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG 363 -# define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE 364 -# define SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH 232 -# define SSL_R_SSL3_EXT_INVALID_SERVERNAME 319 -# define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE 320 -# define SSL_R_SSL3_SESSION_ID_TOO_LONG 300 -# define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042 -# define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046 -# define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030 -# define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040 -# define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047 -# define SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041 -# define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 -# define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043 -# define SSL_R_SSL_COMMAND_SECTION_EMPTY 117 -# define SSL_R_SSL_COMMAND_SECTION_NOT_FOUND 125 -# define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION 228 -# define SSL_R_SSL_HANDSHAKE_FAILURE 229 -# define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS 230 -# define SSL_R_SSL_NEGATIVE_LENGTH 372 -# define SSL_R_SSL_SECTION_EMPTY 126 -# define SSL_R_SSL_SECTION_NOT_FOUND 136 -# define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 301 -# define SSL_R_SSL_SESSION_ID_CONFLICT 302 -# define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG 273 -# define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH 303 -# define SSL_R_SSL_SESSION_ID_TOO_LONG 408 -# define SSL_R_SSL_SESSION_VERSION_MISMATCH 210 -# define SSL_R_STILL_IN_INIT 121 -# define SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED 1116 -# define SSL_R_TLSV13_ALERT_MISSING_EXTENSION 1109 -# define SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049 -# define SSL_R_TLSV1_ALERT_DECODE_ERROR 1050 -# define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021 -# define SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051 -# define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060 -# define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 -# define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 -# define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 -# define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 -# define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 -# define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 -# define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 -# define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 -# define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 -# define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 -# define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 -# define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 -# define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 -# define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT 365 -# define SSL_R_TLS_HEARTBEAT_PENDING 366 -# define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 367 -# define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 -# define SSL_R_TOO_MANY_KEY_UPDATES 132 -# define SSL_R_TOO_MANY_WARN_ALERTS 409 -# define SSL_R_TOO_MUCH_EARLY_DATA 164 -# define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 -# define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 -# define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES 242 -# define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 243 -# define SSL_R_UNEXPECTED_CCS_MESSAGE 262 -# define SSL_R_UNEXPECTED_END_OF_EARLY_DATA 178 -# define SSL_R_UNEXPECTED_MESSAGE 244 -# define SSL_R_UNEXPECTED_RECORD 245 -# define SSL_R_UNINITIALIZED 276 -# define SSL_R_UNKNOWN_ALERT_TYPE 246 -# define SSL_R_UNKNOWN_CERTIFICATE_TYPE 247 -# define SSL_R_UNKNOWN_CIPHER_RETURNED 248 -# define SSL_R_UNKNOWN_CIPHER_TYPE 249 -# define SSL_R_UNKNOWN_CMD_NAME 386 -# define SSL_R_UNKNOWN_COMMAND 139 -# define SSL_R_UNKNOWN_DIGEST 368 -# define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 250 -# define SSL_R_UNKNOWN_PKEY_TYPE 251 -# define SSL_R_UNKNOWN_PROTOCOL 252 -# define SSL_R_UNKNOWN_SSL_VERSION 254 -# define SSL_R_UNKNOWN_STATE 255 -# define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 -# define SSL_R_UNSOLICITED_EXTENSION 217 -# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 -# define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE 315 -# define SSL_R_UNSUPPORTED_PROTOCOL 258 -# define SSL_R_UNSUPPORTED_SSL_VERSION 259 -# define SSL_R_UNSUPPORTED_STATUS_TYPE 329 -# define SSL_R_USE_SRTP_NOT_NEGOTIATED 369 -# define SSL_R_VERSION_TOO_HIGH 166 -# define SSL_R_VERSION_TOO_LOW 396 -# define SSL_R_WRONG_CERTIFICATE_TYPE 383 -# define SSL_R_WRONG_CIPHER_RETURNED 261 -# define SSL_R_WRONG_CURVE 378 -# define SSL_R_WRONG_SIGNATURE_LENGTH 264 -# define SSL_R_WRONG_SIGNATURE_SIZE 265 -# define SSL_R_WRONG_SIGNATURE_TYPE 370 -# define SSL_R_WRONG_SSL_VERSION 266 -# define SSL_R_WRONG_VERSION_NUMBER 267 -# define SSL_R_X509_LIB 268 -# define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 269 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/stack.h b/submodules/MtProtoKit/openssl/openssl/stack.h deleted file mode 100644 index cfc075057a..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/stack.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_STACK_H -# define HEADER_STACK_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct stack_st OPENSSL_STACK; /* Use STACK_OF(...) instead */ - -typedef int (*OPENSSL_sk_compfunc)(const void *, const void *); -typedef void (*OPENSSL_sk_freefunc)(void *); -typedef void *(*OPENSSL_sk_copyfunc)(const void *); - -int OPENSSL_sk_num(const OPENSSL_STACK *); -void *OPENSSL_sk_value(const OPENSSL_STACK *, int); - -void *OPENSSL_sk_set(OPENSSL_STACK *st, int i, const void *data); - -OPENSSL_STACK *OPENSSL_sk_new(OPENSSL_sk_compfunc cmp); -OPENSSL_STACK *OPENSSL_sk_new_null(void); -OPENSSL_STACK *OPENSSL_sk_new_reserve(OPENSSL_sk_compfunc c, int n); -int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n); -void OPENSSL_sk_free(OPENSSL_STACK *); -void OPENSSL_sk_pop_free(OPENSSL_STACK *st, void (*func) (void *)); -OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *, - OPENSSL_sk_copyfunc c, - OPENSSL_sk_freefunc f); -int OPENSSL_sk_insert(OPENSSL_STACK *sk, const void *data, int where); -void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc); -void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p); -int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data); -int OPENSSL_sk_find_ex(OPENSSL_STACK *st, const void *data); -int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data); -int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data); -void *OPENSSL_sk_shift(OPENSSL_STACK *st); -void *OPENSSL_sk_pop(OPENSSL_STACK *st); -void OPENSSL_sk_zero(OPENSSL_STACK *st); -OPENSSL_sk_compfunc OPENSSL_sk_set_cmp_func(OPENSSL_STACK *sk, - OPENSSL_sk_compfunc cmp); -OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *st); -void OPENSSL_sk_sort(OPENSSL_STACK *st); -int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define _STACK OPENSSL_STACK -# define sk_num OPENSSL_sk_num -# define sk_value OPENSSL_sk_value -# define sk_set OPENSSL_sk_set -# define sk_new OPENSSL_sk_new -# define sk_new_null OPENSSL_sk_new_null -# define sk_free OPENSSL_sk_free -# define sk_pop_free OPENSSL_sk_pop_free -# define sk_deep_copy OPENSSL_sk_deep_copy -# define sk_insert OPENSSL_sk_insert -# define sk_delete OPENSSL_sk_delete -# define sk_delete_ptr OPENSSL_sk_delete_ptr -# define sk_find OPENSSL_sk_find -# define sk_find_ex OPENSSL_sk_find_ex -# define sk_push OPENSSL_sk_push -# define sk_unshift OPENSSL_sk_unshift -# define sk_shift OPENSSL_sk_shift -# define sk_pop OPENSSL_sk_pop -# define sk_zero OPENSSL_sk_zero -# define sk_set_cmp_func OPENSSL_sk_set_cmp_func -# define sk_dup OPENSSL_sk_dup -# define sk_sort OPENSSL_sk_sort -# define sk_is_sorted OPENSSL_sk_is_sorted -# endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/store.h b/submodules/MtProtoKit/openssl/openssl/store.h deleted file mode 100644 index a40a7339e6..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/store.h +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OSSL_STORE_H -# define HEADER_OSSL_STORE_H - -# include -# include -# include -# include - -# ifdef __cplusplus -extern "C" { -# endif - -/*- - * The main OSSL_STORE functions. - * ------------------------------ - * - * These allow applications to open a channel to a resource with supported - * data (keys, certs, crls, ...), read the data a piece at a time and decide - * what to do with it, and finally close. - */ - -typedef struct ossl_store_ctx_st OSSL_STORE_CTX; - -/* - * Typedef for the OSSL_STORE_INFO post processing callback. This can be used - * to massage the given OSSL_STORE_INFO, or to drop it entirely (by returning - * NULL). - */ -typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *, - void *); - -/* - * Open a channel given a URI. The given UI method will be used any time the - * loader needs extra input, for example when a password or pin is needed, and - * will be passed the same user data every time it's needed in this context. - * - * Returns a context reference which represents the channel to communicate - * through. - */ -OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, - void *ui_data, - OSSL_STORE_post_process_info_fn post_process, - void *post_process_data); - -/* - * Control / fine tune the OSSL_STORE channel. |cmd| determines what is to be - * done, and depends on the underlying loader (use OSSL_STORE_get0_scheme to - * determine which loader is used), except for common commands (see below). - * Each command takes different arguments. - */ -int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ... /* args */); -int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args); - -/* - * Common ctrl commands that different loaders may choose to support. - */ -/* int on = 0 or 1; STORE_ctrl(ctx, STORE_C_USE_SECMEM, &on); */ -# define OSSL_STORE_C_USE_SECMEM 1 -/* Where custom commands start */ -# define OSSL_STORE_C_CUSTOM_START 100 - -/* - * Read one data item (a key, a cert, a CRL) that is supported by the OSSL_STORE - * functionality, given a context. - * Returns a OSSL_STORE_INFO pointer, from which OpenSSL typed data can be - * extracted with OSSL_STORE_INFO_get0_PKEY(), OSSL_STORE_INFO_get0_CERT(), ... - * NULL is returned on error, which may include that the data found at the URI - * can't be figured out for certain or is ambiguous. - */ -OSSL_STORE_INFO *OSSL_STORE_load(OSSL_STORE_CTX *ctx); - -/* - * Check if end of data (end of file) is reached - * Returns 1 on end, 0 otherwise. - */ -int OSSL_STORE_eof(OSSL_STORE_CTX *ctx); - -/* - * Check if an error occurred - * Returns 1 if it did, 0 otherwise. - */ -int OSSL_STORE_error(OSSL_STORE_CTX *ctx); - -/* - * Close the channel - * Returns 1 on success, 0 on error. - */ -int OSSL_STORE_close(OSSL_STORE_CTX *ctx); - - -/*- - * Extracting OpenSSL types from and creating new OSSL_STORE_INFOs - * --------------------------------------------------------------- - */ - -/* - * Types of data that can be ossl_stored in a OSSL_STORE_INFO. - * OSSL_STORE_INFO_NAME is typically found when getting a listing of - * available "files" / "tokens" / what have you. - */ -# define OSSL_STORE_INFO_NAME 1 /* char * */ -# define OSSL_STORE_INFO_PARAMS 2 /* EVP_PKEY * */ -# define OSSL_STORE_INFO_PKEY 3 /* EVP_PKEY * */ -# define OSSL_STORE_INFO_CERT 4 /* X509 * */ -# define OSSL_STORE_INFO_CRL 5 /* X509_CRL * */ - -/* - * Functions to generate OSSL_STORE_INFOs, one function for each type we - * support having in them, as well as a generic constructor. - * - * In all cases, ownership of the object is transferred to the OSSL_STORE_INFO - * and will therefore be freed when the OSSL_STORE_INFO is freed. - */ -OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name); -int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc); -OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(EVP_PKEY *params); -OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey); -OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509); -OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); - -/* - * Functions to try to extract data from a OSSL_STORE_INFO. - */ -int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *info); -const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *info); -char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *info); -const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO *info); -char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *info); -EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *info); -EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *info); -EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *info); -EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *info); -X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *info); -X509 *OSSL_STORE_INFO_get1_CERT(const OSSL_STORE_INFO *info); -X509_CRL *OSSL_STORE_INFO_get0_CRL(const OSSL_STORE_INFO *info); -X509_CRL *OSSL_STORE_INFO_get1_CRL(const OSSL_STORE_INFO *info); - -const char *OSSL_STORE_INFO_type_string(int type); - -/* - * Free the OSSL_STORE_INFO - */ -void OSSL_STORE_INFO_free(OSSL_STORE_INFO *info); - - -/*- - * Functions to construct a search URI from a base URI and search criteria - * ----------------------------------------------------------------------- - */ - -/* OSSL_STORE search types */ -# define OSSL_STORE_SEARCH_BY_NAME 1 /* subject in certs, issuer in CRLs */ -# define OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 2 -# define OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 3 -# define OSSL_STORE_SEARCH_BY_ALIAS 4 - -/* To check what search types the scheme handler supports */ -int OSSL_STORE_supports_search(OSSL_STORE_CTX *ctx, int search_type); - -/* Search term constructors */ -/* - * The input is considered to be owned by the caller, and must therefore - * remain present throughout the lifetime of the returned OSSL_STORE_SEARCH - */ -OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_name(X509_NAME *name); -OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_issuer_serial(X509_NAME *name, - const ASN1_INTEGER - *serial); -OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_key_fingerprint(const EVP_MD *digest, - const unsigned char - *bytes, size_t len); -OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_alias(const char *alias); - -/* Search term destructor */ -void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search); - -/* Search term accessors */ -int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion); -X509_NAME *OSSL_STORE_SEARCH_get0_name(OSSL_STORE_SEARCH *criterion); -const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH - *criterion); -const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH - *criterion, size_t *length); -const char *OSSL_STORE_SEARCH_get0_string(const OSSL_STORE_SEARCH *criterion); -const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH *criterion); - -/* - * Add search criterion and expected return type (which can be unspecified) - * to the loading channel. This MUST happen before the first OSSL_STORE_load(). - */ -int OSSL_STORE_expect(OSSL_STORE_CTX *ctx, int expected_type); -int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search); - - -/*- - * Function to register a loader for the given URI scheme. - * ------------------------------------------------------- - * - * The loader receives all the main components of an URI except for the - * scheme. - */ - -typedef struct ossl_store_loader_st OSSL_STORE_LOADER; -OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); -const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); -const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); -/* struct ossl_store_loader_ctx_st is defined differently by each loader */ -typedef struct ossl_store_loader_ctx_st OSSL_STORE_LOADER_CTX; -typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn)(const OSSL_STORE_LOADER - *loader, - const char *uri, - const UI_METHOD *ui_method, - void *ui_data); -int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *loader, - OSSL_STORE_open_fn open_function); -typedef int (*OSSL_STORE_ctrl_fn)(OSSL_STORE_LOADER_CTX *ctx, int cmd, - va_list args); -int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *loader, - OSSL_STORE_ctrl_fn ctrl_function); -typedef int (*OSSL_STORE_expect_fn)(OSSL_STORE_LOADER_CTX *ctx, int expected); -int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, - OSSL_STORE_expect_fn expect_function); -typedef int (*OSSL_STORE_find_fn)(OSSL_STORE_LOADER_CTX *ctx, - OSSL_STORE_SEARCH *criteria); -int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, - OSSL_STORE_find_fn find_function); -typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn)(OSSL_STORE_LOADER_CTX *ctx, - const UI_METHOD *ui_method, - void *ui_data); -int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *loader, - OSSL_STORE_load_fn load_function); -typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); -int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *loader, - OSSL_STORE_eof_fn eof_function); -typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); -int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *loader, - OSSL_STORE_error_fn error_function); -typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); -int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, - OSSL_STORE_close_fn close_function); -void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); - -int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader); -OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme); - -/*- - * Functions to list STORE loaders - * ------------------------------- - */ -int OSSL_STORE_do_all_loaders(void (*do_function) (const OSSL_STORE_LOADER - *loader, void *do_arg), - void *do_arg); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/storeerr.h b/submodules/MtProtoKit/openssl/openssl/storeerr.h deleted file mode 100644 index 190eab07fb..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/storeerr.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OSSL_STOREERR_H -# define HEADER_OSSL_STOREERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OSSL_STORE_strings(void); - -/* - * OSSL_STORE function codes. - */ -# define OSSL_STORE_F_FILE_CTRL 129 -# define OSSL_STORE_F_FILE_FIND 138 -# define OSSL_STORE_F_FILE_GET_PASS 118 -# define OSSL_STORE_F_FILE_LOAD 119 -# define OSSL_STORE_F_FILE_LOAD_TRY_DECODE 124 -# define OSSL_STORE_F_FILE_NAME_TO_URI 126 -# define OSSL_STORE_F_FILE_OPEN 120 -# define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO 127 -# define OSSL_STORE_F_OSSL_STORE_EXPECT 130 -# define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT 128 -# define OSSL_STORE_F_OSSL_STORE_FIND 131 -# define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT 100 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT 101 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL 102 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME 103 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 135 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS 104 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY 105 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT 106 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL 107 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED 123 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME 109 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS 110 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY 111 -# define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 134 -# define OSSL_STORE_F_OSSL_STORE_INIT_ONCE 112 -# define OSSL_STORE_F_OSSL_STORE_LOADER_NEW 113 -# define OSSL_STORE_F_OSSL_STORE_OPEN 114 -# define OSSL_STORE_F_OSSL_STORE_OPEN_INT 115 -# define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT 117 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS 132 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 133 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 136 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME 137 -# define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT 116 -# define OSSL_STORE_F_TRY_DECODE_PARAMS 121 -# define OSSL_STORE_F_TRY_DECODE_PKCS12 122 -# define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED 125 - -/* - * OSSL_STORE reason codes. - */ -# define OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE 107 -# define OSSL_STORE_R_BAD_PASSWORD_READ 115 -# define OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC 113 -# define OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST 121 -# define OSSL_STORE_R_INVALID_SCHEME 106 -# define OSSL_STORE_R_IS_NOT_A 112 -# define OSSL_STORE_R_LOADER_INCOMPLETE 116 -# define OSSL_STORE_R_LOADING_STARTED 117 -# define OSSL_STORE_R_NOT_A_CERTIFICATE 100 -# define OSSL_STORE_R_NOT_A_CRL 101 -# define OSSL_STORE_R_NOT_A_KEY 102 -# define OSSL_STORE_R_NOT_A_NAME 103 -# define OSSL_STORE_R_NOT_PARAMETERS 104 -# define OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR 114 -# define OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE 108 -# define OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES 119 -# define OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED 109 -# define OSSL_STORE_R_UNREGISTERED_SCHEME 105 -# define OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE 110 -# define OSSL_STORE_R_UNSUPPORTED_OPERATION 118 -# define OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE 120 -# define OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED 111 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/symhacks.h b/submodules/MtProtoKit/openssl/openssl/symhacks.h deleted file mode 100644 index 156ea6e4ee..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/symhacks.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_SYMHACKS_H -# define HEADER_SYMHACKS_H - -# include - -/* Case insensitive linking causes problems.... */ -# if defined(OPENSSL_SYS_VMS) -# undef ERR_load_CRYPTO_strings -# define ERR_load_CRYPTO_strings ERR_load_CRYPTOlib_strings -# undef OCSP_crlID_new -# define OCSP_crlID_new OCSP_crlID2_new - -# undef d2i_ECPARAMETERS -# define d2i_ECPARAMETERS d2i_UC_ECPARAMETERS -# undef i2d_ECPARAMETERS -# define i2d_ECPARAMETERS i2d_UC_ECPARAMETERS -# undef d2i_ECPKPARAMETERS -# define d2i_ECPKPARAMETERS d2i_UC_ECPKPARAMETERS -# undef i2d_ECPKPARAMETERS -# define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS - -/* This one clashes with CMS_data_create */ -# undef cms_Data_create -# define cms_Data_create priv_cms_Data_create - -# endif - -#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/submodules/MtProtoKit/openssl/openssl/tls1.h b/submodules/MtProtoKit/openssl/openssl/tls1.h deleted file mode 100644 index 76d9fda46e..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/tls1.h +++ /dev/null @@ -1,1237 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_TLS1_H -# define HEADER_TLS1_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Default security level if not overridden at config time */ -# ifndef OPENSSL_TLS_SECURITY_LEVEL -# define OPENSSL_TLS_SECURITY_LEVEL 1 -# endif - -# define TLS1_VERSION 0x0301 -# define TLS1_1_VERSION 0x0302 -# define TLS1_2_VERSION 0x0303 -# define TLS1_3_VERSION 0x0304 -# define TLS_MAX_VERSION TLS1_3_VERSION - -/* Special value for method supporting multiple versions */ -# define TLS_ANY_VERSION 0x10000 - -# define TLS1_VERSION_MAJOR 0x03 -# define TLS1_VERSION_MINOR 0x01 - -# define TLS1_1_VERSION_MAJOR 0x03 -# define TLS1_1_VERSION_MINOR 0x02 - -# define TLS1_2_VERSION_MAJOR 0x03 -# define TLS1_2_VERSION_MINOR 0x03 - -# define TLS1_get_version(s) \ - ((SSL_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_version(s) : 0) - -# define TLS1_get_client_version(s) \ - ((SSL_client_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_client_version(s) : 0) - -# define TLS1_AD_DECRYPTION_FAILED 21 -# define TLS1_AD_RECORD_OVERFLOW 22 -# define TLS1_AD_UNKNOWN_CA 48/* fatal */ -# define TLS1_AD_ACCESS_DENIED 49/* fatal */ -# define TLS1_AD_DECODE_ERROR 50/* fatal */ -# define TLS1_AD_DECRYPT_ERROR 51 -# define TLS1_AD_EXPORT_RESTRICTION 60/* fatal */ -# define TLS1_AD_PROTOCOL_VERSION 70/* fatal */ -# define TLS1_AD_INSUFFICIENT_SECURITY 71/* fatal */ -# define TLS1_AD_INTERNAL_ERROR 80/* fatal */ -# define TLS1_AD_INAPPROPRIATE_FALLBACK 86/* fatal */ -# define TLS1_AD_USER_CANCELLED 90 -# define TLS1_AD_NO_RENEGOTIATION 100 -/* TLSv1.3 alerts */ -# define TLS13_AD_MISSING_EXTENSION 109 /* fatal */ -# define TLS13_AD_CERTIFICATE_REQUIRED 116 /* fatal */ -/* codes 110-114 are from RFC3546 */ -# define TLS1_AD_UNSUPPORTED_EXTENSION 110 -# define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111 -# define TLS1_AD_UNRECOGNIZED_NAME 112 -# define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113 -# define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 -# define TLS1_AD_UNKNOWN_PSK_IDENTITY 115/* fatal */ -# define TLS1_AD_NO_APPLICATION_PROTOCOL 120 /* fatal */ - -/* ExtensionType values from RFC3546 / RFC4366 / RFC6066 */ -# define TLSEXT_TYPE_server_name 0 -# define TLSEXT_TYPE_max_fragment_length 1 -# define TLSEXT_TYPE_client_certificate_url 2 -# define TLSEXT_TYPE_trusted_ca_keys 3 -# define TLSEXT_TYPE_truncated_hmac 4 -# define TLSEXT_TYPE_status_request 5 -/* ExtensionType values from RFC4681 */ -# define TLSEXT_TYPE_user_mapping 6 -/* ExtensionType values from RFC5878 */ -# define TLSEXT_TYPE_client_authz 7 -# define TLSEXT_TYPE_server_authz 8 -/* ExtensionType values from RFC6091 */ -# define TLSEXT_TYPE_cert_type 9 - -/* ExtensionType values from RFC4492 */ -/* - * Prior to TLSv1.3 the supported_groups extension was known as - * elliptic_curves - */ -# define TLSEXT_TYPE_supported_groups 10 -# define TLSEXT_TYPE_elliptic_curves TLSEXT_TYPE_supported_groups -# define TLSEXT_TYPE_ec_point_formats 11 - - -/* ExtensionType value from RFC5054 */ -# define TLSEXT_TYPE_srp 12 - -/* ExtensionType values from RFC5246 */ -# define TLSEXT_TYPE_signature_algorithms 13 - -/* ExtensionType value from RFC5764 */ -# define TLSEXT_TYPE_use_srtp 14 - -/* ExtensionType value from RFC5620 */ -# define TLSEXT_TYPE_heartbeat 15 - -/* ExtensionType value from RFC7301 */ -# define TLSEXT_TYPE_application_layer_protocol_negotiation 16 - -/* - * Extension type for Certificate Transparency - * https://tools.ietf.org/html/rfc6962#section-3.3.1 - */ -# define TLSEXT_TYPE_signed_certificate_timestamp 18 - -/* - * ExtensionType value for TLS padding extension. - * http://tools.ietf.org/html/draft-agl-tls-padding - */ -# define TLSEXT_TYPE_padding 21 - -/* ExtensionType value from RFC7366 */ -# define TLSEXT_TYPE_encrypt_then_mac 22 - -/* ExtensionType value from RFC7627 */ -# define TLSEXT_TYPE_extended_master_secret 23 - -/* ExtensionType value from RFC4507 */ -# define TLSEXT_TYPE_session_ticket 35 - -/* As defined for TLS1.3 */ -# define TLSEXT_TYPE_psk 41 -# define TLSEXT_TYPE_early_data 42 -# define TLSEXT_TYPE_supported_versions 43 -# define TLSEXT_TYPE_cookie 44 -# define TLSEXT_TYPE_psk_kex_modes 45 -# define TLSEXT_TYPE_certificate_authorities 47 -# define TLSEXT_TYPE_post_handshake_auth 49 -# define TLSEXT_TYPE_signature_algorithms_cert 50 -# define TLSEXT_TYPE_key_share 51 - -/* Temporary extension type */ -# define TLSEXT_TYPE_renegotiate 0xff01 - -# ifndef OPENSSL_NO_NEXTPROTONEG -/* This is not an IANA defined extension number */ -# define TLSEXT_TYPE_next_proto_neg 13172 -# endif - -/* NameType value from RFC3546 */ -# define TLSEXT_NAMETYPE_host_name 0 -/* status request value from RFC3546 */ -# define TLSEXT_STATUSTYPE_ocsp 1 - -/* ECPointFormat values from RFC4492 */ -# define TLSEXT_ECPOINTFORMAT_first 0 -# define TLSEXT_ECPOINTFORMAT_uncompressed 0 -# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 -# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 -# define TLSEXT_ECPOINTFORMAT_last 2 - -/* Signature and hash algorithms from RFC5246 */ -# define TLSEXT_signature_anonymous 0 -# define TLSEXT_signature_rsa 1 -# define TLSEXT_signature_dsa 2 -# define TLSEXT_signature_ecdsa 3 -# define TLSEXT_signature_gostr34102001 237 -# define TLSEXT_signature_gostr34102012_256 238 -# define TLSEXT_signature_gostr34102012_512 239 - -/* Total number of different signature algorithms */ -# define TLSEXT_signature_num 7 - -# define TLSEXT_hash_none 0 -# define TLSEXT_hash_md5 1 -# define TLSEXT_hash_sha1 2 -# define TLSEXT_hash_sha224 3 -# define TLSEXT_hash_sha256 4 -# define TLSEXT_hash_sha384 5 -# define TLSEXT_hash_sha512 6 -# define TLSEXT_hash_gostr3411 237 -# define TLSEXT_hash_gostr34112012_256 238 -# define TLSEXT_hash_gostr34112012_512 239 - -/* Total number of different digest algorithms */ - -# define TLSEXT_hash_num 10 - -/* Flag set for unrecognised algorithms */ -# define TLSEXT_nid_unknown 0x1000000 - -/* ECC curves */ - -# define TLSEXT_curve_P_256 23 -# define TLSEXT_curve_P_384 24 - -/* OpenSSL value to disable maximum fragment length extension */ -# define TLSEXT_max_fragment_length_DISABLED 0 -/* Allowed values for max fragment length extension */ -# define TLSEXT_max_fragment_length_512 1 -# define TLSEXT_max_fragment_length_1024 2 -# define TLSEXT_max_fragment_length_2048 3 -# define TLSEXT_max_fragment_length_4096 4 - -int SSL_CTX_set_tlsext_max_fragment_length(SSL_CTX *ctx, uint8_t mode); -int SSL_set_tlsext_max_fragment_length(SSL *ssl, uint8_t mode); - -# define TLSEXT_MAXLEN_host_name 255 - -__owur const char *SSL_get_servername(const SSL *s, const int type); -__owur int SSL_get_servername_type(const SSL *s); -/* - * SSL_export_keying_material exports a value derived from the master secret, - * as specified in RFC 5705. It writes |olen| bytes to |out| given a label and - * optional context. (Since a zero length context is allowed, the |use_context| - * flag controls whether a context is included.) It returns 1 on success and - * 0 or -1 otherwise. - */ -__owur int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, - const char *label, size_t llen, - const unsigned char *context, - size_t contextlen, int use_context); - -/* - * SSL_export_keying_material_early exports a value derived from the - * early exporter master secret, as specified in - * https://tools.ietf.org/html/draft-ietf-tls-tls13-23. It writes - * |olen| bytes to |out| given a label and optional context. It - * returns 1 on success and 0 otherwise. - */ -__owur int SSL_export_keying_material_early(SSL *s, unsigned char *out, - size_t olen, const char *label, - size_t llen, - const unsigned char *context, - size_t contextlen); - -int SSL_get_peer_signature_type_nid(const SSL *s, int *pnid); -int SSL_get_signature_type_nid(const SSL *s, int *pnid); - -int SSL_get_sigalgs(SSL *s, int idx, - int *psign, int *phash, int *psignandhash, - unsigned char *rsig, unsigned char *rhash); - -int SSL_get_shared_sigalgs(SSL *s, int idx, - int *psign, int *phash, int *psignandhash, - unsigned char *rsig, unsigned char *rhash); - -__owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain); - -# define SSL_set_tlsext_host_name(s,name) \ - SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,\ - (void *)name) - -# define SSL_set_tlsext_debug_callback(ssl, cb) \ - SSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,\ - (void (*)(void))cb) - -# define SSL_set_tlsext_debug_arg(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0,arg) - -# define SSL_get_tlsext_status_type(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) - -# define SSL_set_tlsext_status_type(ssl, type) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL) - -# define SSL_get_tlsext_status_exts(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0,arg) - -# define SSL_set_tlsext_status_exts(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0,arg) - -# define SSL_get_tlsext_status_ids(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0,arg) - -# define SSL_set_tlsext_status_ids(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0,arg) - -# define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0,arg) - -# define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen,arg) - -# define SSL_CTX_set_tlsext_servername_callback(ctx, cb) \ - SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,\ - (void (*)(void))cb) - -# define SSL_TLSEXT_ERR_OK 0 -# define SSL_TLSEXT_ERR_ALERT_WARNING 1 -# define SSL_TLSEXT_ERR_ALERT_FATAL 2 -# define SSL_TLSEXT_ERR_NOACK 3 - -# define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0,arg) - -# define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_TLSEXT_TICKET_KEYS,keylen,keys) -# define SSL_CTX_set_tlsext_ticket_keys(ctx, keys, keylen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_TICKET_KEYS,keylen,keys) - -# define SSL_CTX_get_tlsext_status_cb(ssl, cb) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB,0,(void *)cb) -# define SSL_CTX_set_tlsext_status_cb(ssl, cb) \ - SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,\ - (void (*)(void))cb) - -# define SSL_CTX_get_tlsext_status_arg(ssl, arg) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG,0,arg) -# define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0,arg) - -# define SSL_CTX_set_tlsext_status_type(ssl, type) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL) - -# define SSL_CTX_get_tlsext_status_type(ssl) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) - -# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ - SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,\ - (void (*)(void))cb) - -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_DTLSEXT_HB_ENABLED 0x01 -# define SSL_DTLSEXT_HB_DONT_SEND_REQUESTS 0x02 -# define SSL_DTLSEXT_HB_DONT_RECV_REQUESTS 0x04 -# define SSL_get_dtlsext_heartbeat_pending(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING,0,NULL) -# define SSL_set_dtlsext_heartbeat_no_requests(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) - -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT \ - SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT -# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING \ - SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING -# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS \ - SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS -# define SSL_TLSEXT_HB_ENABLED \ - SSL_DTLSEXT_HB_ENABLED -# define SSL_TLSEXT_HB_DONT_SEND_REQUESTS \ - SSL_DTLSEXT_HB_DONT_SEND_REQUESTS -# define SSL_TLSEXT_HB_DONT_RECV_REQUESTS \ - SSL_DTLSEXT_HB_DONT_RECV_REQUESTS -# define SSL_get_tlsext_heartbeat_pending(ssl) \ - SSL_get_dtlsext_heartbeat_pending(ssl) -# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ - SSL_set_dtlsext_heartbeat_no_requests(ssl,arg) -# endif -# endif - -/* PSK ciphersuites from 4279 */ -# define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A -# define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B -# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C -# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D -# define TLS1_CK_DHE_PSK_WITH_RC4_128_SHA 0x0300008E -# define TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008F -# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA 0x03000090 -# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA 0x03000091 -# define TLS1_CK_RSA_PSK_WITH_RC4_128_SHA 0x03000092 -# define TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA 0x03000093 -# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA 0x03000094 -# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA 0x03000095 - -/* PSK ciphersuites from 5487 */ -# define TLS1_CK_PSK_WITH_AES_128_GCM_SHA256 0x030000A8 -# define TLS1_CK_PSK_WITH_AES_256_GCM_SHA384 0x030000A9 -# define TLS1_CK_DHE_PSK_WITH_AES_128_GCM_SHA256 0x030000AA -# define TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384 0x030000AB -# define TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256 0x030000AC -# define TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384 0x030000AD -# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA256 0x030000AE -# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA384 0x030000AF -# define TLS1_CK_PSK_WITH_NULL_SHA256 0x030000B0 -# define TLS1_CK_PSK_WITH_NULL_SHA384 0x030000B1 -# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256 0x030000B2 -# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384 0x030000B3 -# define TLS1_CK_DHE_PSK_WITH_NULL_SHA256 0x030000B4 -# define TLS1_CK_DHE_PSK_WITH_NULL_SHA384 0x030000B5 -# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256 0x030000B6 -# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384 0x030000B7 -# define TLS1_CK_RSA_PSK_WITH_NULL_SHA256 0x030000B8 -# define TLS1_CK_RSA_PSK_WITH_NULL_SHA384 0x030000B9 - -/* NULL PSK ciphersuites from RFC4785 */ -# define TLS1_CK_PSK_WITH_NULL_SHA 0x0300002C -# define TLS1_CK_DHE_PSK_WITH_NULL_SHA 0x0300002D -# define TLS1_CK_RSA_PSK_WITH_NULL_SHA 0x0300002E - -/* AES ciphersuites from RFC3268 */ -# define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F -# define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030 -# define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031 -# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA 0x03000032 -# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA 0x03000033 -# define TLS1_CK_ADH_WITH_AES_128_SHA 0x03000034 -# define TLS1_CK_RSA_WITH_AES_256_SHA 0x03000035 -# define TLS1_CK_DH_DSS_WITH_AES_256_SHA 0x03000036 -# define TLS1_CK_DH_RSA_WITH_AES_256_SHA 0x03000037 -# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA 0x03000038 -# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA 0x03000039 -# define TLS1_CK_ADH_WITH_AES_256_SHA 0x0300003A - -/* TLS v1.2 ciphersuites */ -# define TLS1_CK_RSA_WITH_NULL_SHA256 0x0300003B -# define TLS1_CK_RSA_WITH_AES_128_SHA256 0x0300003C -# define TLS1_CK_RSA_WITH_AES_256_SHA256 0x0300003D -# define TLS1_CK_DH_DSS_WITH_AES_128_SHA256 0x0300003E -# define TLS1_CK_DH_RSA_WITH_AES_128_SHA256 0x0300003F -# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA256 0x03000040 - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000041 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000042 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000043 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000044 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000045 -# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA 0x03000046 - -/* TLS v1.2 ciphersuites */ -# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA256 0x03000067 -# define TLS1_CK_DH_DSS_WITH_AES_256_SHA256 0x03000068 -# define TLS1_CK_DH_RSA_WITH_AES_256_SHA256 0x03000069 -# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA256 0x0300006A -# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA256 0x0300006B -# define TLS1_CK_ADH_WITH_AES_128_SHA256 0x0300006C -# define TLS1_CK_ADH_WITH_AES_256_SHA256 0x0300006D - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000084 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000085 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000086 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000087 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000088 -# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA 0x03000089 - -/* SEED ciphersuites from RFC4162 */ -# define TLS1_CK_RSA_WITH_SEED_SHA 0x03000096 -# define TLS1_CK_DH_DSS_WITH_SEED_SHA 0x03000097 -# define TLS1_CK_DH_RSA_WITH_SEED_SHA 0x03000098 -# define TLS1_CK_DHE_DSS_WITH_SEED_SHA 0x03000099 -# define TLS1_CK_DHE_RSA_WITH_SEED_SHA 0x0300009A -# define TLS1_CK_ADH_WITH_SEED_SHA 0x0300009B - -/* TLS v1.2 GCM ciphersuites from RFC5288 */ -# define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256 0x0300009C -# define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384 0x0300009D -# define TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256 0x0300009E -# define TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384 0x0300009F -# define TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256 0x030000A0 -# define TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384 0x030000A1 -# define TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256 0x030000A2 -# define TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384 0x030000A3 -# define TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256 0x030000A4 -# define TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384 0x030000A5 -# define TLS1_CK_ADH_WITH_AES_128_GCM_SHA256 0x030000A6 -# define TLS1_CK_ADH_WITH_AES_256_GCM_SHA384 0x030000A7 - -/* CCM ciphersuites from RFC6655 */ -# define TLS1_CK_RSA_WITH_AES_128_CCM 0x0300C09C -# define TLS1_CK_RSA_WITH_AES_256_CCM 0x0300C09D -# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM 0x0300C09E -# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM 0x0300C09F -# define TLS1_CK_RSA_WITH_AES_128_CCM_8 0x0300C0A0 -# define TLS1_CK_RSA_WITH_AES_256_CCM_8 0x0300C0A1 -# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM_8 0x0300C0A2 -# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM_8 0x0300C0A3 -# define TLS1_CK_PSK_WITH_AES_128_CCM 0x0300C0A4 -# define TLS1_CK_PSK_WITH_AES_256_CCM 0x0300C0A5 -# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM 0x0300C0A6 -# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM 0x0300C0A7 -# define TLS1_CK_PSK_WITH_AES_128_CCM_8 0x0300C0A8 -# define TLS1_CK_PSK_WITH_AES_256_CCM_8 0x0300C0A9 -# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM_8 0x0300C0AA -# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM_8 0x0300C0AB - -/* CCM ciphersuites from RFC7251 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM 0x0300C0AC -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM 0x0300C0AD -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM_8 0x0300C0AE -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM_8 0x0300C0AF - -/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BA -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BB -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BC -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BD -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BE -# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256 0x030000BF - -# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C0 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C1 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C2 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C3 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C4 -# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256 0x030000C5 - -/* ECC ciphersuites from RFC4492 */ -# define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA 0x0300C001 -# define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA 0x0300C002 -# define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C003 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0x0300C004 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0x0300C005 - -# define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA 0x0300C006 -# define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA 0x0300C007 -# define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C008 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0x0300C009 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0x0300C00A - -# define TLS1_CK_ECDH_RSA_WITH_NULL_SHA 0x0300C00B -# define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA 0x0300C00C -# define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA 0x0300C00D -# define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA 0x0300C00E -# define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA 0x0300C00F - -# define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA 0x0300C010 -# define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA 0x0300C011 -# define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA 0x0300C012 -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA 0x0300C013 -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA 0x0300C014 - -# define TLS1_CK_ECDH_anon_WITH_NULL_SHA 0x0300C015 -# define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA 0x0300C016 -# define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA 0x0300C017 -# define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA 0x0300C018 -# define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA 0x0300C019 - -/* SRP ciphersuites from RFC 5054 */ -# define TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA 0x0300C01A -# define TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA 0x0300C01B -# define TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA 0x0300C01C -# define TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA 0x0300C01D -# define TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA 0x0300C01E -# define TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA 0x0300C01F -# define TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA 0x0300C020 -# define TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA 0x0300C021 -# define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 - -/* ECDH HMAC based ciphersuites from RFC5289 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384 0x0300C026 -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256 0x0300C027 -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384 0x0300C028 -# define TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256 0x0300C029 -# define TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384 0x0300C02A - -/* ECDH GCM based ciphersuites from RFC5289 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02B -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02C -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02D -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02E -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0x0300C02F -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0x0300C030 -# define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 -# define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 - -/* ECDHE PSK ciphersuites from RFC5489 */ -# define TLS1_CK_ECDHE_PSK_WITH_RC4_128_SHA 0x0300C033 -# define TLS1_CK_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300C034 -# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA 0x0300C035 -# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA 0x0300C036 - -# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA256 0x0300C037 -# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384 0x0300C038 - -/* NULL PSK ciphersuites from RFC4785 */ -# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA 0x0300C039 -# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256 0x0300C03A -# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384 0x0300C03B - -/* Camellia-CBC ciphersuites from RFC6367 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C072 -# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C073 -# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C074 -# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C075 -# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C076 -# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C077 -# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C078 -# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C079 - -# define TLS1_CK_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C094 -# define TLS1_CK_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C095 -# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C096 -# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C097 -# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C098 -# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C099 -# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C09A -# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C09B - -/* draft-ietf-tls-chacha20-poly1305-03 */ -# define TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCA8 -# define TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 0x0300CCA9 -# define TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCAA -# define TLS1_CK_PSK_WITH_CHACHA20_POLY1305 0x0300CCAB -# define TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAC -# define TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAD -# define TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305 0x0300CCAE - -/* TLS v1.3 ciphersuites */ -# define TLS1_3_CK_AES_128_GCM_SHA256 0x03001301 -# define TLS1_3_CK_AES_256_GCM_SHA384 0x03001302 -# define TLS1_3_CK_CHACHA20_POLY1305_SHA256 0x03001303 -# define TLS1_3_CK_AES_128_CCM_SHA256 0x03001304 -# define TLS1_3_CK_AES_128_CCM_8_SHA256 0x03001305 - -/* Aria ciphersuites from RFC6209 */ -# define TLS1_CK_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C050 -# define TLS1_CK_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C051 -# define TLS1_CK_DHE_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C052 -# define TLS1_CK_DHE_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C053 -# define TLS1_CK_DH_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C054 -# define TLS1_CK_DH_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C055 -# define TLS1_CK_DHE_DSS_WITH_ARIA_128_GCM_SHA256 0x0300C056 -# define TLS1_CK_DHE_DSS_WITH_ARIA_256_GCM_SHA384 0x0300C057 -# define TLS1_CK_DH_DSS_WITH_ARIA_128_GCM_SHA256 0x0300C058 -# define TLS1_CK_DH_DSS_WITH_ARIA_256_GCM_SHA384 0x0300C059 -# define TLS1_CK_DH_anon_WITH_ARIA_128_GCM_SHA256 0x0300C05A -# define TLS1_CK_DH_anon_WITH_ARIA_256_GCM_SHA384 0x0300C05B -# define TLS1_CK_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 0x0300C05C -# define TLS1_CK_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 0x0300C05D -# define TLS1_CK_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 0x0300C05E -# define TLS1_CK_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 0x0300C05F -# define TLS1_CK_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C060 -# define TLS1_CK_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C061 -# define TLS1_CK_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C062 -# define TLS1_CK_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C063 -# define TLS1_CK_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06A -# define TLS1_CK_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06B -# define TLS1_CK_DHE_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06C -# define TLS1_CK_DHE_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06D -# define TLS1_CK_RSA_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06E -# define TLS1_CK_RSA_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06F - -/* a bundle of RFC standard cipher names, generated from ssl3_ciphers[] */ -# define TLS1_RFC_RSA_WITH_AES_128_SHA "TLS_RSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_AES_128_SHA "TLS_DHE_DSS_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_SHA "TLS_DHE_RSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ADH_WITH_AES_128_SHA "TLS_DH_anon_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_RSA_WITH_AES_256_SHA "TLS_RSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_AES_256_SHA "TLS_DHE_DSS_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_SHA "TLS_DHE_RSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ADH_WITH_AES_256_SHA "TLS_DH_anon_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_RSA_WITH_NULL_SHA256 "TLS_RSA_WITH_NULL_SHA256" -# define TLS1_RFC_RSA_WITH_AES_128_SHA256 "TLS_RSA_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_RSA_WITH_AES_256_SHA256 "TLS_RSA_WITH_AES_256_CBC_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_AES_128_SHA256 "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_SHA256 "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_AES_256_SHA256 "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_SHA256 "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256" -# define TLS1_RFC_ADH_WITH_AES_128_SHA256 "TLS_DH_anon_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_ADH_WITH_AES_256_SHA256 "TLS_DH_anon_WITH_AES_256_CBC_SHA256" -# define TLS1_RFC_RSA_WITH_AES_128_GCM_SHA256 "TLS_RSA_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_RSA_WITH_AES_256_GCM_SHA384 "TLS_RSA_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_GCM_SHA256 "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_GCM_SHA384 "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_DHE_DSS_WITH_AES_128_GCM_SHA256 "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_AES_256_GCM_SHA384 "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_ADH_WITH_AES_128_GCM_SHA256 "TLS_DH_anon_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_ADH_WITH_AES_256_GCM_SHA384 "TLS_DH_anon_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_RSA_WITH_AES_128_CCM "TLS_RSA_WITH_AES_128_CCM" -# define TLS1_RFC_RSA_WITH_AES_256_CCM "TLS_RSA_WITH_AES_256_CCM" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_CCM "TLS_DHE_RSA_WITH_AES_128_CCM" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_CCM "TLS_DHE_RSA_WITH_AES_256_CCM" -# define TLS1_RFC_RSA_WITH_AES_128_CCM_8 "TLS_RSA_WITH_AES_128_CCM_8" -# define TLS1_RFC_RSA_WITH_AES_256_CCM_8 "TLS_RSA_WITH_AES_256_CCM_8" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_CCM_8 "TLS_DHE_RSA_WITH_AES_128_CCM_8" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_CCM_8 "TLS_DHE_RSA_WITH_AES_256_CCM_8" -# define TLS1_RFC_PSK_WITH_AES_128_CCM "TLS_PSK_WITH_AES_128_CCM" -# define TLS1_RFC_PSK_WITH_AES_256_CCM "TLS_PSK_WITH_AES_256_CCM" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_CCM "TLS_DHE_PSK_WITH_AES_128_CCM" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_CCM "TLS_DHE_PSK_WITH_AES_256_CCM" -# define TLS1_RFC_PSK_WITH_AES_128_CCM_8 "TLS_PSK_WITH_AES_128_CCM_8" -# define TLS1_RFC_PSK_WITH_AES_256_CCM_8 "TLS_PSK_WITH_AES_256_CCM_8" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_CCM_8 "TLS_PSK_DHE_WITH_AES_128_CCM_8" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_CCM_8 "TLS_PSK_DHE_WITH_AES_256_CCM_8" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM "TLS_ECDHE_ECDSA_WITH_AES_128_CCM" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM "TLS_ECDHE_ECDSA_WITH_AES_256_CCM" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM_8 "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM_8 "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8" -# define TLS1_3_RFC_AES_128_GCM_SHA256 "TLS_AES_128_GCM_SHA256" -# define TLS1_3_RFC_AES_256_GCM_SHA384 "TLS_AES_256_GCM_SHA384" -# define TLS1_3_RFC_CHACHA20_POLY1305_SHA256 "TLS_CHACHA20_POLY1305_SHA256" -# define TLS1_3_RFC_AES_128_CCM_SHA256 "TLS_AES_128_CCM_SHA256" -# define TLS1_3_RFC_AES_128_CCM_8_SHA256 "TLS_AES_128_CCM_8_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_NULL_SHA "TLS_ECDHE_ECDSA_WITH_NULL_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_NULL_SHA "TLS_ECDHE_RSA_WITH_NULL_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_DES_192_CBC3_SHA "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_CBC_SHA "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_CBC_SHA "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ECDH_anon_WITH_NULL_SHA "TLS_ECDH_anon_WITH_NULL_SHA" -# define TLS1_RFC_ECDH_anon_WITH_DES_192_CBC3_SHA "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_ECDH_anon_WITH_AES_128_CBC_SHA "TLS_ECDH_anon_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ECDH_anon_WITH_AES_256_CBC_SHA "TLS_ECDH_anon_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_SHA256 "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_SHA384 "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_SHA256 "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_SHA384 "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_PSK_WITH_NULL_SHA "TLS_PSK_WITH_NULL_SHA" -# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA "TLS_DHE_PSK_WITH_NULL_SHA" -# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA "TLS_RSA_PSK_WITH_NULL_SHA" -# define TLS1_RFC_PSK_WITH_3DES_EDE_CBC_SHA "TLS_PSK_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_PSK_WITH_AES_128_CBC_SHA "TLS_PSK_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_PSK_WITH_AES_256_CBC_SHA "TLS_PSK_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_DHE_PSK_WITH_3DES_EDE_CBC_SHA "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA "TLS_DHE_PSK_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA "TLS_DHE_PSK_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_RSA_PSK_WITH_3DES_EDE_CBC_SHA "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA "TLS_RSA_PSK_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA "TLS_RSA_PSK_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_PSK_WITH_AES_128_GCM_SHA256 "TLS_PSK_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_PSK_WITH_AES_256_GCM_SHA384 "TLS_PSK_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_GCM_SHA256 "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_GCM_SHA384 "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_AES_128_GCM_SHA256 "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_AES_256_GCM_SHA384 "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_PSK_WITH_AES_128_CBC_SHA256 "TLS_PSK_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_PSK_WITH_AES_256_CBC_SHA384 "TLS_PSK_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_PSK_WITH_NULL_SHA256 "TLS_PSK_WITH_NULL_SHA256" -# define TLS1_RFC_PSK_WITH_NULL_SHA384 "TLS_PSK_WITH_NULL_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA256 "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA384 "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA256 "TLS_DHE_PSK_WITH_NULL_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA384 "TLS_DHE_PSK_WITH_NULL_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA256 "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA384 "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA256 "TLS_RSA_PSK_WITH_NULL_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA384 "TLS_RSA_PSK_WITH_NULL_SHA384" -# define TLS1_RFC_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA256 "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA384 "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA "TLS_ECDHE_PSK_WITH_NULL_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA256 "TLS_ECDHE_PSK_WITH_NULL_SHA256" -# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA384 "TLS_ECDHE_PSK_WITH_NULL_SHA384" -# define TLS1_RFC_SRP_SHA_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_SRP_SHA_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_SRP_SHA_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_CHACHA20_POLY1305 "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_CHACHA20_POLY1305 "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_PSK_WITH_CHACHA20_POLY1305 "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_ECDHE_PSK_WITH_CHACHA20_POLY1305 "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_CHACHA20_POLY1305 "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_CHACHA20_POLY1305 "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA256 "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256" -# define TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256" -# define TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA" -# define TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA" -# define TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA" -# define TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_RSA_WITH_SEED_SHA "TLS_RSA_WITH_SEED_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_SEED_SHA "TLS_DHE_DSS_WITH_SEED_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_SEED_SHA "TLS_DHE_RSA_WITH_SEED_CBC_SHA" -# define TLS1_RFC_ADH_WITH_SEED_SHA "TLS_DH_anon_WITH_SEED_CBC_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_RC4_128_SHA "TLS_ECDHE_PSK_WITH_RC4_128_SHA" -# define TLS1_RFC_ECDH_anon_WITH_RC4_128_SHA "TLS_ECDH_anon_WITH_RC4_128_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_RC4_128_SHA "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_RC4_128_SHA "TLS_ECDHE_RSA_WITH_RC4_128_SHA" -# define TLS1_RFC_PSK_WITH_RC4_128_SHA "TLS_PSK_WITH_RC4_128_SHA" -# define TLS1_RFC_RSA_PSK_WITH_RC4_128_SHA "TLS_RSA_PSK_WITH_RC4_128_SHA" -# define TLS1_RFC_DHE_PSK_WITH_RC4_128_SHA "TLS_DHE_PSK_WITH_RC4_128_SHA" -# define TLS1_RFC_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DHE_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DH_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DH_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DHE_DSS_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DH_DSS_WITH_ARIA_128_GCM_SHA256 "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DH_DSS_WITH_ARIA_256_GCM_SHA384 "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DH_anon_WITH_ARIA_128_GCM_SHA256 "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DH_anon_WITH_ARIA_256_GCM_SHA384 "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_PSK_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_PSK_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384" - - -/* - * XXX Backward compatibility alert: Older versions of OpenSSL gave some DHE - * ciphers names with "EDH" instead of "DHE". Going forward, we should be - * using DHE everywhere, though we may indefinitely maintain aliases for - * users or configurations that used "EDH" - */ -# define TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA "DHE-DSS-RC4-SHA" - -# define TLS1_TXT_PSK_WITH_NULL_SHA "PSK-NULL-SHA" -# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA "DHE-PSK-NULL-SHA" -# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA "RSA-PSK-NULL-SHA" - -/* AES ciphersuites from RFC3268 */ -# define TLS1_TXT_RSA_WITH_AES_128_SHA "AES128-SHA" -# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA "DH-DSS-AES128-SHA" -# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA "DH-RSA-AES128-SHA" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA "DHE-DSS-AES128-SHA" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA "DHE-RSA-AES128-SHA" -# define TLS1_TXT_ADH_WITH_AES_128_SHA "ADH-AES128-SHA" - -# define TLS1_TXT_RSA_WITH_AES_256_SHA "AES256-SHA" -# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA "DH-DSS-AES256-SHA" -# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA "DH-RSA-AES256-SHA" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA "DHE-DSS-AES256-SHA" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" -# define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" - -/* ECC ciphersuites from RFC4492 */ -# define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA "ECDH-ECDSA-AES128-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA "ECDH-ECDSA-AES256-SHA" - -# define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA "ECDHE-ECDSA-NULL-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA "ECDHE-ECDSA-RC4-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "ECDHE-ECDSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "ECDHE-ECDSA-AES128-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "ECDHE-ECDSA-AES256-SHA" - -# define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA "ECDH-RSA-NULL-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA "ECDH-RSA-RC4-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA "ECDH-RSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA "ECDH-RSA-AES128-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA "ECDH-RSA-AES256-SHA" - -# define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA "ECDHE-RSA-NULL-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA "ECDHE-RSA-RC4-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA "ECDHE-RSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA "ECDHE-RSA-AES128-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA "ECDHE-RSA-AES256-SHA" - -# define TLS1_TXT_ECDH_anon_WITH_NULL_SHA "AECDH-NULL-SHA" -# define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA "AECDH-RC4-SHA" -# define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA "AECDH-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA "AECDH-AES128-SHA" -# define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA "AECDH-AES256-SHA" - -/* PSK ciphersuites from RFC 4279 */ -# define TLS1_TXT_PSK_WITH_RC4_128_SHA "PSK-RC4-SHA" -# define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA "PSK-3DES-EDE-CBC-SHA" -# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA "PSK-AES128-CBC-SHA" -# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA "PSK-AES256-CBC-SHA" - -# define TLS1_TXT_DHE_PSK_WITH_RC4_128_SHA "DHE-PSK-RC4-SHA" -# define TLS1_TXT_DHE_PSK_WITH_3DES_EDE_CBC_SHA "DHE-PSK-3DES-EDE-CBC-SHA" -# define TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA "DHE-PSK-AES128-CBC-SHA" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA "DHE-PSK-AES256-CBC-SHA" -# define TLS1_TXT_RSA_PSK_WITH_RC4_128_SHA "RSA-PSK-RC4-SHA" -# define TLS1_TXT_RSA_PSK_WITH_3DES_EDE_CBC_SHA "RSA-PSK-3DES-EDE-CBC-SHA" -# define TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA "RSA-PSK-AES128-CBC-SHA" -# define TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA "RSA-PSK-AES256-CBC-SHA" - -/* PSK ciphersuites from RFC 5487 */ -# define TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256 "PSK-AES128-GCM-SHA256" -# define TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384 "PSK-AES256-GCM-SHA384" -# define TLS1_TXT_DHE_PSK_WITH_AES_128_GCM_SHA256 "DHE-PSK-AES128-GCM-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_GCM_SHA384 "DHE-PSK-AES256-GCM-SHA384" -# define TLS1_TXT_RSA_PSK_WITH_AES_128_GCM_SHA256 "RSA-PSK-AES128-GCM-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_AES_256_GCM_SHA384 "RSA-PSK-AES256-GCM-SHA384" - -# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA256 "PSK-AES128-CBC-SHA256" -# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA384 "PSK-AES256-CBC-SHA384" -# define TLS1_TXT_PSK_WITH_NULL_SHA256 "PSK-NULL-SHA256" -# define TLS1_TXT_PSK_WITH_NULL_SHA384 "PSK-NULL-SHA384" - -# define TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA256 "DHE-PSK-AES128-CBC-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA384 "DHE-PSK-AES256-CBC-SHA384" -# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA256 "DHE-PSK-NULL-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA384 "DHE-PSK-NULL-SHA384" - -# define TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA256 "RSA-PSK-AES128-CBC-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA384 "RSA-PSK-AES256-CBC-SHA384" -# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA256 "RSA-PSK-NULL-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA384 "RSA-PSK-NULL-SHA384" - -/* SRP ciphersuite from RFC 5054 */ -# define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA "SRP-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "SRP-RSA-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "SRP-DSS-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA "SRP-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "SRP-RSA-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "SRP-DSS-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA "SRP-AES-256-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "SRP-RSA-AES-256-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "SRP-DSS-AES-256-CBC-SHA" - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA "CAMELLIA128-SHA" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA "DH-DSS-CAMELLIA128-SHA" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA "DH-RSA-CAMELLIA128-SHA" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "DHE-DSS-CAMELLIA128-SHA" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "DHE-RSA-CAMELLIA128-SHA" -# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA "ADH-CAMELLIA128-SHA" - -# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA "CAMELLIA256-SHA" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA "DH-DSS-CAMELLIA256-SHA" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA "DH-RSA-CAMELLIA256-SHA" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "DHE-DSS-CAMELLIA256-SHA" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "DHE-RSA-CAMELLIA256-SHA" -# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA "ADH-CAMELLIA256-SHA" - -/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ -# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA256 "CAMELLIA128-SHA256" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 "DH-DSS-CAMELLIA128-SHA256" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 "DH-RSA-CAMELLIA128-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 "DHE-DSS-CAMELLIA128-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "DHE-RSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA256 "ADH-CAMELLIA128-SHA256" - -# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA256 "CAMELLIA256-SHA256" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 "DH-DSS-CAMELLIA256-SHA256" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 "DH-RSA-CAMELLIA256-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 "DHE-DSS-CAMELLIA256-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 "DHE-RSA-CAMELLIA256-SHA256" -# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA256 "ADH-CAMELLIA256-SHA256" - -# define TLS1_TXT_PSK_WITH_CAMELLIA_128_CBC_SHA256 "PSK-CAMELLIA128-SHA256" -# define TLS1_TXT_PSK_WITH_CAMELLIA_256_CBC_SHA384 "PSK-CAMELLIA256-SHA384" -# define TLS1_TXT_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "DHE-PSK-CAMELLIA128-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "DHE-PSK-CAMELLIA256-SHA384" -# define TLS1_TXT_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 "RSA-PSK-CAMELLIA128-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 "RSA-PSK-CAMELLIA256-SHA384" -# define TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-PSK-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-PSK-CAMELLIA256-SHA384" - -/* SEED ciphersuites from RFC4162 */ -# define TLS1_TXT_RSA_WITH_SEED_SHA "SEED-SHA" -# define TLS1_TXT_DH_DSS_WITH_SEED_SHA "DH-DSS-SEED-SHA" -# define TLS1_TXT_DH_RSA_WITH_SEED_SHA "DH-RSA-SEED-SHA" -# define TLS1_TXT_DHE_DSS_WITH_SEED_SHA "DHE-DSS-SEED-SHA" -# define TLS1_TXT_DHE_RSA_WITH_SEED_SHA "DHE-RSA-SEED-SHA" -# define TLS1_TXT_ADH_WITH_SEED_SHA "ADH-SEED-SHA" - -/* TLS v1.2 ciphersuites */ -# define TLS1_TXT_RSA_WITH_NULL_SHA256 "NULL-SHA256" -# define TLS1_TXT_RSA_WITH_AES_128_SHA256 "AES128-SHA256" -# define TLS1_TXT_RSA_WITH_AES_256_SHA256 "AES256-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA256 "DH-DSS-AES128-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA256 "DH-RSA-AES128-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256 "DHE-DSS-AES128-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256 "DHE-RSA-AES128-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA256 "DH-DSS-AES256-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA256 "DH-RSA-AES256-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256 "DHE-DSS-AES256-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256 "DHE-RSA-AES256-SHA256" -# define TLS1_TXT_ADH_WITH_AES_128_SHA256 "ADH-AES128-SHA256" -# define TLS1_TXT_ADH_WITH_AES_256_SHA256 "ADH-AES256-SHA256" - -/* TLS v1.2 GCM ciphersuites from RFC5288 */ -# define TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256 "AES128-GCM-SHA256" -# define TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384 "AES256-GCM-SHA384" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256 "DHE-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384 "DHE-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256 "DH-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384 "DH-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256 "DHE-DSS-AES128-GCM-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384 "DHE-DSS-AES256-GCM-SHA384" -# define TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256 "DH-DSS-AES128-GCM-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384 "DH-DSS-AES256-GCM-SHA384" -# define TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256 "ADH-AES128-GCM-SHA256" -# define TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384 "ADH-AES256-GCM-SHA384" - -/* CCM ciphersuites from RFC6655 */ -# define TLS1_TXT_RSA_WITH_AES_128_CCM "AES128-CCM" -# define TLS1_TXT_RSA_WITH_AES_256_CCM "AES256-CCM" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM "DHE-RSA-AES128-CCM" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_CCM "DHE-RSA-AES256-CCM" - -# define TLS1_TXT_RSA_WITH_AES_128_CCM_8 "AES128-CCM8" -# define TLS1_TXT_RSA_WITH_AES_256_CCM_8 "AES256-CCM8" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM_8 "DHE-RSA-AES128-CCM8" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_CCM_8 "DHE-RSA-AES256-CCM8" - -# define TLS1_TXT_PSK_WITH_AES_128_CCM "PSK-AES128-CCM" -# define TLS1_TXT_PSK_WITH_AES_256_CCM "PSK-AES256-CCM" -# define TLS1_TXT_DHE_PSK_WITH_AES_128_CCM "DHE-PSK-AES128-CCM" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM "DHE-PSK-AES256-CCM" - -# define TLS1_TXT_PSK_WITH_AES_128_CCM_8 "PSK-AES128-CCM8" -# define TLS1_TXT_PSK_WITH_AES_256_CCM_8 "PSK-AES256-CCM8" -# define TLS1_TXT_DHE_PSK_WITH_AES_128_CCM_8 "DHE-PSK-AES128-CCM8" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM_8 "DHE-PSK-AES256-CCM8" - -/* CCM ciphersuites from RFC7251 */ -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM "ECDHE-ECDSA-AES128-CCM" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM "ECDHE-ECDSA-AES256-CCM" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM_8 "ECDHE-ECDSA-AES128-CCM8" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM_8 "ECDHE-ECDSA-AES256-CCM8" - -/* ECDH HMAC based ciphersuites from RFC5289 */ -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256 "ECDHE-ECDSA-AES128-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384 "ECDHE-ECDSA-AES256-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256 "ECDH-ECDSA-AES128-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384 "ECDH-ECDSA-AES256-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256 "ECDHE-RSA-AES128-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384 "ECDHE-RSA-AES256-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256 "ECDH-RSA-AES128-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384 "ECDH-RSA-AES256-SHA384" - -/* ECDH GCM based ciphersuites from RFC5289 */ -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "ECDHE-ECDSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "ECDHE-ECDSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 "ECDH-ECDSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 "ECDH-ECDSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "ECDHE-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "ECDHE-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" - -/* TLS v1.2 PSK GCM ciphersuites from RFC5487 */ -# define TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256 "PSK-AES128-GCM-SHA256" -# define TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384 "PSK-AES256-GCM-SHA384" - -/* ECDHE PSK ciphersuites from RFC 5489 */ -# define TLS1_TXT_ECDHE_PSK_WITH_RC4_128_SHA "ECDHE-PSK-RC4-SHA" -# define TLS1_TXT_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA "ECDHE-PSK-3DES-EDE-CBC-SHA" -# define TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA "ECDHE-PSK-AES128-CBC-SHA" -# define TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA "ECDHE-PSK-AES256-CBC-SHA" - -# define TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA256 "ECDHE-PSK-AES128-CBC-SHA256" -# define TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA384 "ECDHE-PSK-AES256-CBC-SHA384" - -# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA "ECDHE-PSK-NULL-SHA" -# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA256 "ECDHE-PSK-NULL-SHA256" -# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA384 "ECDHE-PSK-NULL-SHA384" - -/* Camellia-CBC ciphersuites from RFC6367 */ -# define TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-ECDSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-ECDSA-CAMELLIA256-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDH-ECDSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDH-ECDSA-CAMELLIA256-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-RSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-RSA-CAMELLIA256-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDH-RSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDH-RSA-CAMELLIA256-SHA384" - -/* draft-ietf-tls-chacha20-poly1305-03 */ -# define TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305 "ECDHE-RSA-CHACHA20-POLY1305" -# define TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "ECDHE-ECDSA-CHACHA20-POLY1305" -# define TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305 "DHE-RSA-CHACHA20-POLY1305" -# define TLS1_TXT_PSK_WITH_CHACHA20_POLY1305 "PSK-CHACHA20-POLY1305" -# define TLS1_TXT_ECDHE_PSK_WITH_CHACHA20_POLY1305 "ECDHE-PSK-CHACHA20-POLY1305" -# define TLS1_TXT_DHE_PSK_WITH_CHACHA20_POLY1305 "DHE-PSK-CHACHA20-POLY1305" -# define TLS1_TXT_RSA_PSK_WITH_CHACHA20_POLY1305 "RSA-PSK-CHACHA20-POLY1305" - -/* Aria ciphersuites from RFC6209 */ -# define TLS1_TXT_RSA_WITH_ARIA_128_GCM_SHA256 "ARIA128-GCM-SHA256" -# define TLS1_TXT_RSA_WITH_ARIA_256_GCM_SHA384 "ARIA256-GCM-SHA384" -# define TLS1_TXT_DHE_RSA_WITH_ARIA_128_GCM_SHA256 "DHE-RSA-ARIA128-GCM-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_ARIA_256_GCM_SHA384 "DHE-RSA-ARIA256-GCM-SHA384" -# define TLS1_TXT_DH_RSA_WITH_ARIA_128_GCM_SHA256 "DH-RSA-ARIA128-GCM-SHA256" -# define TLS1_TXT_DH_RSA_WITH_ARIA_256_GCM_SHA384 "DH-RSA-ARIA256-GCM-SHA384" -# define TLS1_TXT_DHE_DSS_WITH_ARIA_128_GCM_SHA256 "DHE-DSS-ARIA128-GCM-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_ARIA_256_GCM_SHA384 "DHE-DSS-ARIA256-GCM-SHA384" -# define TLS1_TXT_DH_DSS_WITH_ARIA_128_GCM_SHA256 "DH-DSS-ARIA128-GCM-SHA256" -# define TLS1_TXT_DH_DSS_WITH_ARIA_256_GCM_SHA384 "DH-DSS-ARIA256-GCM-SHA384" -# define TLS1_TXT_DH_anon_WITH_ARIA_128_GCM_SHA256 "ADH-ARIA128-GCM-SHA256" -# define TLS1_TXT_DH_anon_WITH_ARIA_256_GCM_SHA384 "ADH-ARIA256-GCM-SHA384" -# define TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 "ECDHE-ECDSA-ARIA128-GCM-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 "ECDHE-ECDSA-ARIA256-GCM-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 "ECDH-ECDSA-ARIA128-GCM-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 "ECDH-ECDSA-ARIA256-GCM-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 "ECDHE-ARIA128-GCM-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 "ECDHE-ARIA256-GCM-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 "ECDH-ARIA128-GCM-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 "ECDH-ARIA256-GCM-SHA384" -# define TLS1_TXT_PSK_WITH_ARIA_128_GCM_SHA256 "PSK-ARIA128-GCM-SHA256" -# define TLS1_TXT_PSK_WITH_ARIA_256_GCM_SHA384 "PSK-ARIA256-GCM-SHA384" -# define TLS1_TXT_DHE_PSK_WITH_ARIA_128_GCM_SHA256 "DHE-PSK-ARIA128-GCM-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_ARIA_256_GCM_SHA384 "DHE-PSK-ARIA256-GCM-SHA384" -# define TLS1_TXT_RSA_PSK_WITH_ARIA_128_GCM_SHA256 "RSA-PSK-ARIA128-GCM-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_ARIA_256_GCM_SHA384 "RSA-PSK-ARIA256-GCM-SHA384" - -# define TLS_CT_RSA_SIGN 1 -# define TLS_CT_DSS_SIGN 2 -# define TLS_CT_RSA_FIXED_DH 3 -# define TLS_CT_DSS_FIXED_DH 4 -# define TLS_CT_ECDSA_SIGN 64 -# define TLS_CT_RSA_FIXED_ECDH 65 -# define TLS_CT_ECDSA_FIXED_ECDH 66 -# define TLS_CT_GOST01_SIGN 22 -# define TLS_CT_GOST12_SIGN 238 -# define TLS_CT_GOST12_512_SIGN 239 - -/* - * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see - * comment there) - */ -# define TLS_CT_NUMBER 10 - -# if defined(SSL3_CT_NUMBER) -# if TLS_CT_NUMBER != SSL3_CT_NUMBER -# error "SSL/TLS CT_NUMBER values do not match" -# endif -# endif - -# define TLS1_FINISH_MAC_LENGTH 12 - -# define TLS_MD_MAX_CONST_SIZE 22 -# define TLS_MD_CLIENT_FINISH_CONST "client finished" -# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 -# define TLS_MD_SERVER_FINISH_CONST "server finished" -# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 -# define TLS_MD_KEY_EXPANSION_CONST "key expansion" -# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 -# define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key" -# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" -# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_IV_BLOCK_CONST "IV block" -# define TLS_MD_IV_BLOCK_CONST_SIZE 8 -# define TLS_MD_MASTER_SECRET_CONST "master secret" -# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "extended master secret" -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 - -# ifdef CHARSET_EBCDIC -# undef TLS_MD_CLIENT_FINISH_CONST -/* - * client finished - */ -# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_FINISH_CONST -/* - * server finished - */ -# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_KEY_EXPANSION_CONST -/* - * key expansion - */ -# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" - -# undef TLS_MD_CLIENT_WRITE_KEY_CONST -/* - * client write key - */ -# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_IV_BLOCK_CONST -/* - * IV block - */ -# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" - -# undef TLS_MD_MASTER_SECRET_CONST -/* - * master secret - */ -# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" -# undef TLS_MD_EXTENDED_MASTER_SECRET_CONST -/* - * extended master secret - */ -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" -# endif - -/* TLS Session Ticket extension struct */ -struct tls_session_ticket_ext_st { - unsigned short length; - void *data; -}; - -#ifdef __cplusplus -} -#endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/ts.h b/submodules/MtProtoKit/openssl/openssl/ts.h deleted file mode 100644 index 3b58aa527e..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ts.h +++ /dev/null @@ -1,559 +0,0 @@ -/* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_TS_H -# define HEADER_TS_H - -# include - -# ifndef OPENSSL_NO_TS -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -# include -# include - -typedef struct TS_msg_imprint_st TS_MSG_IMPRINT; -typedef struct TS_req_st TS_REQ; -typedef struct TS_accuracy_st TS_ACCURACY; -typedef struct TS_tst_info_st TS_TST_INFO; - -/* Possible values for status. */ -# define TS_STATUS_GRANTED 0 -# define TS_STATUS_GRANTED_WITH_MODS 1 -# define TS_STATUS_REJECTION 2 -# define TS_STATUS_WAITING 3 -# define TS_STATUS_REVOCATION_WARNING 4 -# define TS_STATUS_REVOCATION_NOTIFICATION 5 - -/* Possible values for failure_info. */ -# define TS_INFO_BAD_ALG 0 -# define TS_INFO_BAD_REQUEST 2 -# define TS_INFO_BAD_DATA_FORMAT 5 -# define TS_INFO_TIME_NOT_AVAILABLE 14 -# define TS_INFO_UNACCEPTED_POLICY 15 -# define TS_INFO_UNACCEPTED_EXTENSION 16 -# define TS_INFO_ADD_INFO_NOT_AVAILABLE 17 -# define TS_INFO_SYSTEM_FAILURE 25 - - -typedef struct TS_status_info_st TS_STATUS_INFO; -typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; -typedef struct ESS_cert_id ESS_CERT_ID; -typedef struct ESS_signing_cert ESS_SIGNING_CERT; - -DEFINE_STACK_OF(ESS_CERT_ID) - -typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; -typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; - -DEFINE_STACK_OF(ESS_CERT_ID_V2) - -typedef struct TS_resp_st TS_RESP; - -TS_REQ *TS_REQ_new(void); -void TS_REQ_free(TS_REQ *a); -int i2d_TS_REQ(const TS_REQ *a, unsigned char **pp); -TS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length); - -TS_REQ *TS_REQ_dup(TS_REQ *a); - -#ifndef OPENSSL_NO_STDIO -TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); -int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); -#endif -TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); -int i2d_TS_REQ_bio(BIO *fp, TS_REQ *a); - -TS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void); -void TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a); -int i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp); -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a, - const unsigned char **pp, long length); - -TS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a); - -#ifndef OPENSSL_NO_STDIO -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a); -#endif -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT *a); - -TS_RESP *TS_RESP_new(void); -void TS_RESP_free(TS_RESP *a); -int i2d_TS_RESP(const TS_RESP *a, unsigned char **pp); -TS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length); -TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); -TS_RESP *TS_RESP_dup(TS_RESP *a); - -#ifndef OPENSSL_NO_STDIO -TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); -int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); -#endif -TS_RESP *d2i_TS_RESP_bio(BIO *bio, TS_RESP **a); -int i2d_TS_RESP_bio(BIO *bio, TS_RESP *a); - -TS_STATUS_INFO *TS_STATUS_INFO_new(void); -void TS_STATUS_INFO_free(TS_STATUS_INFO *a); -int i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp); -TS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a, - const unsigned char **pp, long length); -TS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a); - -TS_TST_INFO *TS_TST_INFO_new(void); -void TS_TST_INFO_free(TS_TST_INFO *a); -int i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp); -TS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp, - long length); -TS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a); - -#ifndef OPENSSL_NO_STDIO -TS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a); -int i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a); -#endif -TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO **a); -int i2d_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO *a); - -TS_ACCURACY *TS_ACCURACY_new(void); -void TS_ACCURACY_free(TS_ACCURACY *a); -int i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp); -TS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp, - long length); -TS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a); - -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void); -void ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a); -int i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp); -ESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a, - const unsigned char **pp, - long length); -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a); - -ESS_CERT_ID *ESS_CERT_ID_new(void); -void ESS_CERT_ID_free(ESS_CERT_ID *a); -int i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp); -ESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp, - long length); -ESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a); - -ESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void); -void ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a); -int i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp); -ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a, - const unsigned char **pp, long length); -ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); - -ESS_CERT_ID_V2 *ESS_CERT_ID_V2_new(void); -void ESS_CERT_ID_V2_free(ESS_CERT_ID_V2 *a); -int i2d_ESS_CERT_ID_V2(const ESS_CERT_ID_V2 *a, unsigned char **pp); -ESS_CERT_ID_V2 *d2i_ESS_CERT_ID_V2(ESS_CERT_ID_V2 **a, - const unsigned char **pp, long length); -ESS_CERT_ID_V2 *ESS_CERT_ID_V2_dup(ESS_CERT_ID_V2 *a); - -ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_new(void); -void ESS_SIGNING_CERT_V2_free(ESS_SIGNING_CERT_V2 *a); -int i2d_ESS_SIGNING_CERT_V2(const ESS_SIGNING_CERT_V2 *a, unsigned char **pp); -ESS_SIGNING_CERT_V2 *d2i_ESS_SIGNING_CERT_V2(ESS_SIGNING_CERT_V2 **a, - const unsigned char **pp, - long length); -ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_dup(ESS_SIGNING_CERT_V2 *a); - -int TS_REQ_set_version(TS_REQ *a, long version); -long TS_REQ_get_version(const TS_REQ *a); - -int TS_STATUS_INFO_set_status(TS_STATUS_INFO *a, int i); -const ASN1_INTEGER *TS_STATUS_INFO_get0_status(const TS_STATUS_INFO *a); - -const STACK_OF(ASN1_UTF8STRING) * -TS_STATUS_INFO_get0_text(const TS_STATUS_INFO *a); - -const ASN1_BIT_STRING * -TS_STATUS_INFO_get0_failure_info(const TS_STATUS_INFO *a); - -int TS_REQ_set_msg_imprint(TS_REQ *a, TS_MSG_IMPRINT *msg_imprint); -TS_MSG_IMPRINT *TS_REQ_get_msg_imprint(TS_REQ *a); - -int TS_MSG_IMPRINT_set_algo(TS_MSG_IMPRINT *a, X509_ALGOR *alg); -X509_ALGOR *TS_MSG_IMPRINT_get_algo(TS_MSG_IMPRINT *a); - -int TS_MSG_IMPRINT_set_msg(TS_MSG_IMPRINT *a, unsigned char *d, int len); -ASN1_OCTET_STRING *TS_MSG_IMPRINT_get_msg(TS_MSG_IMPRINT *a); - -int TS_REQ_set_policy_id(TS_REQ *a, const ASN1_OBJECT *policy); -ASN1_OBJECT *TS_REQ_get_policy_id(TS_REQ *a); - -int TS_REQ_set_nonce(TS_REQ *a, const ASN1_INTEGER *nonce); -const ASN1_INTEGER *TS_REQ_get_nonce(const TS_REQ *a); - -int TS_REQ_set_cert_req(TS_REQ *a, int cert_req); -int TS_REQ_get_cert_req(const TS_REQ *a); - -STACK_OF(X509_EXTENSION) *TS_REQ_get_exts(TS_REQ *a); -void TS_REQ_ext_free(TS_REQ *a); -int TS_REQ_get_ext_count(TS_REQ *a); -int TS_REQ_get_ext_by_NID(TS_REQ *a, int nid, int lastpos); -int TS_REQ_get_ext_by_OBJ(TS_REQ *a, const ASN1_OBJECT *obj, int lastpos); -int TS_REQ_get_ext_by_critical(TS_REQ *a, int crit, int lastpos); -X509_EXTENSION *TS_REQ_get_ext(TS_REQ *a, int loc); -X509_EXTENSION *TS_REQ_delete_ext(TS_REQ *a, int loc); -int TS_REQ_add_ext(TS_REQ *a, X509_EXTENSION *ex, int loc); -void *TS_REQ_get_ext_d2i(TS_REQ *a, int nid, int *crit, int *idx); - -/* Function declarations for TS_REQ defined in ts/ts_req_print.c */ - -int TS_REQ_print_bio(BIO *bio, TS_REQ *a); - -/* Function declarations for TS_RESP defined in ts/ts_resp_utils.c */ - -int TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *info); -TS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a); - -/* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */ -void TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info); -PKCS7 *TS_RESP_get_token(TS_RESP *a); -TS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a); - -int TS_TST_INFO_set_version(TS_TST_INFO *a, long version); -long TS_TST_INFO_get_version(const TS_TST_INFO *a); - -int TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy_id); -ASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a); - -int TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint); -TS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a); - -int TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial); -const ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a); - -int TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime); -const ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a); - -int TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy); -TS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a); - -int TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds); -const ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a); - -int TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis); -const ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a); - -int TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros); -const ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a); - -int TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering); -int TS_TST_INFO_get_ordering(const TS_TST_INFO *a); - -int TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce); -const ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a); - -int TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa); -GENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a); - -STACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a); -void TS_TST_INFO_ext_free(TS_TST_INFO *a); -int TS_TST_INFO_get_ext_count(TS_TST_INFO *a); -int TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos); -int TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, const ASN1_OBJECT *obj, - int lastpos); -int TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos); -X509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc); -X509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc); -int TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc); -void *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx); - -/* - * Declarations related to response generation, defined in ts/ts_resp_sign.c. - */ - -/* Optional flags for response generation. */ - -/* Don't include the TSA name in response. */ -# define TS_TSA_NAME 0x01 - -/* Set ordering to true in response. */ -# define TS_ORDERING 0x02 - -/* - * Include the signer certificate and the other specified certificates in - * the ESS signing certificate attribute beside the PKCS7 signed data. - * Only the signer certificates is included by default. - */ -# define TS_ESS_CERT_ID_CHAIN 0x04 - -/* Forward declaration. */ -struct TS_resp_ctx; - -/* This must return a unique number less than 160 bits long. */ -typedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *); - -/* - * This must return the seconds and microseconds since Jan 1, 1970 in the sec - * and usec variables allocated by the caller. Return non-zero for success - * and zero for failure. - */ -typedef int (*TS_time_cb) (struct TS_resp_ctx *, void *, long *sec, - long *usec); - -/* - * This must process the given extension. It can modify the TS_TST_INFO - * object of the context. Return values: !0 (processed), 0 (error, it must - * set the status info/failure info of the response). - */ -typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, - void *); - -typedef struct TS_resp_ctx TS_RESP_CTX; - -DEFINE_STACK_OF_CONST(EVP_MD) - -/* Creates a response context that can be used for generating responses. */ -TS_RESP_CTX *TS_RESP_CTX_new(void); -void TS_RESP_CTX_free(TS_RESP_CTX *ctx); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key); - -int TS_RESP_CTX_set_signer_digest(TS_RESP_CTX *ctx, - const EVP_MD *signer_digest); -int TS_RESP_CTX_set_ess_cert_id_digest(TS_RESP_CTX *ctx, const EVP_MD *md); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, const ASN1_OBJECT *def_policy); - -/* No additional certs are included in the response by default. */ -int TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs); - -/* - * Adds a new acceptable policy, only the default policy is accepted by - * default. - */ -int TS_RESP_CTX_add_policy(TS_RESP_CTX *ctx, const ASN1_OBJECT *policy); - -/* - * Adds a new acceptable message digest. Note that no message digests are - * accepted by default. The md argument is shared with the caller. - */ -int TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md); - -/* Accuracy is not included by default. */ -int TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx, - int secs, int millis, int micros); - -/* - * Clock precision digits, i.e. the number of decimal digits: '0' means sec, - * '3' msec, '6' usec, and so on. Default is 0. - */ -int TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx, - unsigned clock_precision_digits); -/* At most we accept usec precision. */ -# define TS_MAX_CLOCK_PRECISION_DIGITS 6 - -/* Maximum status message length */ -# define TS_MAX_STATUS_LENGTH (1024 * 1024) - -/* No flags are set by default. */ -void TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags); - -/* Default callback always returns a constant. */ -void TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data); - -/* Default callback uses the gettimeofday() and gmtime() system calls. */ -void TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data); - -/* - * Default callback rejects all extensions. The extension callback is called - * when the TS_TST_INFO object is already set up and not signed yet. - */ -/* FIXME: extension handling is not tested yet. */ -void TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, - TS_extension_cb cb, void *data); - -/* The following methods can be used in the callbacks. */ -int TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx, - int status, const char *text); - -/* Sets the status info only if it is still TS_STATUS_GRANTED. */ -int TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx, - int status, const char *text); - -int TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure); - -/* The get methods below can be used in the extension callback. */ -TS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx); - -TS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx); - -/* - * Creates the signed TS_TST_INFO and puts it in TS_RESP. - * In case of errors it sets the status info properly. - * Returns NULL only in case of memory allocation/fatal error. - */ -TS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio); - -/* - * Declarations related to response verification, - * they are defined in ts/ts_resp_verify.c. - */ - -int TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs, - X509_STORE *store, X509 **signer_out); - -/* Context structure for the generic verify method. */ - -/* Verify the signer's certificate and the signature of the response. */ -# define TS_VFY_SIGNATURE (1u << 0) -/* Verify the version number of the response. */ -# define TS_VFY_VERSION (1u << 1) -/* Verify if the policy supplied by the user matches the policy of the TSA. */ -# define TS_VFY_POLICY (1u << 2) -/* - * Verify the message imprint provided by the user. This flag should not be - * specified with TS_VFY_DATA. - */ -# define TS_VFY_IMPRINT (1u << 3) -/* - * Verify the message imprint computed by the verify method from the user - * provided data and the MD algorithm of the response. This flag should not - * be specified with TS_VFY_IMPRINT. - */ -# define TS_VFY_DATA (1u << 4) -/* Verify the nonce value. */ -# define TS_VFY_NONCE (1u << 5) -/* Verify if the TSA name field matches the signer certificate. */ -# define TS_VFY_SIGNER (1u << 6) -/* Verify if the TSA name field equals to the user provided name. */ -# define TS_VFY_TSA_NAME (1u << 7) - -/* You can use the following convenience constants. */ -# define TS_VFY_ALL_IMPRINT (TS_VFY_SIGNATURE \ - | TS_VFY_VERSION \ - | TS_VFY_POLICY \ - | TS_VFY_IMPRINT \ - | TS_VFY_NONCE \ - | TS_VFY_SIGNER \ - | TS_VFY_TSA_NAME) -# define TS_VFY_ALL_DATA (TS_VFY_SIGNATURE \ - | TS_VFY_VERSION \ - | TS_VFY_POLICY \ - | TS_VFY_DATA \ - | TS_VFY_NONCE \ - | TS_VFY_SIGNER \ - | TS_VFY_TSA_NAME) - -typedef struct TS_verify_ctx TS_VERIFY_CTX; - -int TS_RESP_verify_response(TS_VERIFY_CTX *ctx, TS_RESP *response); -int TS_RESP_verify_token(TS_VERIFY_CTX *ctx, PKCS7 *token); - -/* - * Declarations related to response verification context, - */ -TS_VERIFY_CTX *TS_VERIFY_CTX_new(void); -void TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx); -void TS_VERIFY_CTX_free(TS_VERIFY_CTX *ctx); -void TS_VERIFY_CTX_cleanup(TS_VERIFY_CTX *ctx); -int TS_VERIFY_CTX_set_flags(TS_VERIFY_CTX *ctx, int f); -int TS_VERIFY_CTX_add_flags(TS_VERIFY_CTX *ctx, int f); -BIO *TS_VERIFY_CTX_set_data(TS_VERIFY_CTX *ctx, BIO *b); -unsigned char *TS_VERIFY_CTX_set_imprint(TS_VERIFY_CTX *ctx, - unsigned char *hexstr, long len); -X509_STORE *TS_VERIFY_CTX_set_store(TS_VERIFY_CTX *ctx, X509_STORE *s); -STACK_OF(X509) *TS_VERIFY_CTS_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); - -/*- - * If ctx is NULL, it allocates and returns a new object, otherwise - * it returns ctx. It initialises all the members as follows: - * flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE) - * certs = NULL - * store = NULL - * policy = policy from the request or NULL if absent (in this case - * TS_VFY_POLICY is cleared from flags as well) - * md_alg = MD algorithm from request - * imprint, imprint_len = imprint from request - * data = NULL - * nonce, nonce_len = nonce from the request or NULL if absent (in this case - * TS_VFY_NONCE is cleared from flags as well) - * tsa_name = NULL - * Important: after calling this method TS_VFY_SIGNATURE should be added! - */ -TS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx); - -/* Function declarations for TS_RESP defined in ts/ts_resp_print.c */ - -int TS_RESP_print_bio(BIO *bio, TS_RESP *a); -int TS_STATUS_INFO_print_bio(BIO *bio, TS_STATUS_INFO *a); -int TS_TST_INFO_print_bio(BIO *bio, TS_TST_INFO *a); - -/* Common utility functions defined in ts/ts_lib.c */ - -int TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num); -int TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj); -int TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions); -int TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg); -int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *msg); - -/* - * Function declarations for handling configuration options, defined in - * ts/ts_conf.c - */ - -X509 *TS_CONF_load_cert(const char *file); -STACK_OF(X509) *TS_CONF_load_certs(const char *file); -EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass); -const char *TS_CONF_get_tsa_section(CONF *conf, const char *section); -int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb, - TS_RESP_CTX *ctx); -#ifndef OPENSSL_NO_ENGINE -int TS_CONF_set_crypto_device(CONF *conf, const char *section, - const char *device); -int TS_CONF_set_default_engine(const char *name); -#endif -int TS_CONF_set_signer_cert(CONF *conf, const char *section, - const char *cert, TS_RESP_CTX *ctx); -int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs, - TS_RESP_CTX *ctx); -int TS_CONF_set_signer_key(CONF *conf, const char *section, - const char *key, const char *pass, - TS_RESP_CTX *ctx); -int TS_CONF_set_signer_digest(CONF *conf, const char *section, - const char *md, TS_RESP_CTX *ctx); -int TS_CONF_set_def_policy(CONF *conf, const char *section, - const char *policy, TS_RESP_CTX *ctx); -int TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_clock_precision_digits(CONF *conf, const char *section, - TS_RESP_CTX *ctx); -int TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section, - TS_RESP_CTX *ctx); -int TS_CONF_set_ess_cert_id_digest(CONF *conf, const char *section, - TS_RESP_CTX *ctx); - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/tserr.h b/submodules/MtProtoKit/openssl/openssl/tserr.h deleted file mode 100644 index 07f23339c8..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/tserr.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_TSERR_H -# define HEADER_TSERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_TS - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_TS_strings(void); - -/* - * TS function codes. - */ -# define TS_F_DEF_SERIAL_CB 110 -# define TS_F_DEF_TIME_CB 111 -# define TS_F_ESS_ADD_SIGNING_CERT 112 -# define TS_F_ESS_ADD_SIGNING_CERT_V2 147 -# define TS_F_ESS_CERT_ID_NEW_INIT 113 -# define TS_F_ESS_CERT_ID_V2_NEW_INIT 156 -# define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 -# define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT 157 -# define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 -# define TS_F_PKCS7_TO_TS_TST_INFO 148 -# define TS_F_TS_ACCURACY_SET_MICROS 115 -# define TS_F_TS_ACCURACY_SET_MILLIS 116 -# define TS_F_TS_ACCURACY_SET_SECONDS 117 -# define TS_F_TS_CHECK_IMPRINTS 100 -# define TS_F_TS_CHECK_NONCES 101 -# define TS_F_TS_CHECK_POLICY 102 -# define TS_F_TS_CHECK_SIGNING_CERTS 103 -# define TS_F_TS_CHECK_STATUS_INFO 104 -# define TS_F_TS_COMPUTE_IMPRINT 145 -# define TS_F_TS_CONF_INVALID 151 -# define TS_F_TS_CONF_LOAD_CERT 153 -# define TS_F_TS_CONF_LOAD_CERTS 154 -# define TS_F_TS_CONF_LOAD_KEY 155 -# define TS_F_TS_CONF_LOOKUP_FAIL 152 -# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 -# define TS_F_TS_GET_STATUS_TEXT 105 -# define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 -# define TS_F_TS_REQ_SET_MSG_IMPRINT 119 -# define TS_F_TS_REQ_SET_NONCE 120 -# define TS_F_TS_REQ_SET_POLICY_ID 121 -# define TS_F_TS_RESP_CREATE_RESPONSE 122 -# define TS_F_TS_RESP_CREATE_TST_INFO 123 -# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 -# define TS_F_TS_RESP_CTX_ADD_MD 125 -# define TS_F_TS_RESP_CTX_ADD_POLICY 126 -# define TS_F_TS_RESP_CTX_NEW 127 -# define TS_F_TS_RESP_CTX_SET_ACCURACY 128 -# define TS_F_TS_RESP_CTX_SET_CERTS 129 -# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 -# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 -# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 -# define TS_F_TS_RESP_GET_POLICY 133 -# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 -# define TS_F_TS_RESP_SET_STATUS_INFO 135 -# define TS_F_TS_RESP_SET_TST_INFO 150 -# define TS_F_TS_RESP_SIGN 136 -# define TS_F_TS_RESP_VERIFY_SIGNATURE 106 -# define TS_F_TS_TST_INFO_SET_ACCURACY 137 -# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 -# define TS_F_TS_TST_INFO_SET_NONCE 139 -# define TS_F_TS_TST_INFO_SET_POLICY_ID 140 -# define TS_F_TS_TST_INFO_SET_SERIAL 141 -# define TS_F_TS_TST_INFO_SET_TIME 142 -# define TS_F_TS_TST_INFO_SET_TSA 143 -# define TS_F_TS_VERIFY 108 -# define TS_F_TS_VERIFY_CERT 109 -# define TS_F_TS_VERIFY_CTX_NEW 144 - -/* - * TS reason codes. - */ -# define TS_R_BAD_PKCS7_TYPE 132 -# define TS_R_BAD_TYPE 133 -# define TS_R_CANNOT_LOAD_CERT 137 -# define TS_R_CANNOT_LOAD_KEY 138 -# define TS_R_CERTIFICATE_VERIFY_ERROR 100 -# define TS_R_COULD_NOT_SET_ENGINE 127 -# define TS_R_COULD_NOT_SET_TIME 115 -# define TS_R_DETACHED_CONTENT 134 -# define TS_R_ESS_ADD_SIGNING_CERT_ERROR 116 -# define TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR 139 -# define TS_R_ESS_SIGNING_CERTIFICATE_ERROR 101 -# define TS_R_INVALID_NULL_POINTER 102 -# define TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE 117 -# define TS_R_MESSAGE_IMPRINT_MISMATCH 103 -# define TS_R_NONCE_MISMATCH 104 -# define TS_R_NONCE_NOT_RETURNED 105 -# define TS_R_NO_CONTENT 106 -# define TS_R_NO_TIME_STAMP_TOKEN 107 -# define TS_R_PKCS7_ADD_SIGNATURE_ERROR 118 -# define TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR 119 -# define TS_R_PKCS7_TO_TS_TST_INFO_FAILED 129 -# define TS_R_POLICY_MISMATCH 108 -# define TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 120 -# define TS_R_RESPONSE_SETUP_ERROR 121 -# define TS_R_SIGNATURE_FAILURE 109 -# define TS_R_THERE_MUST_BE_ONE_SIGNER 110 -# define TS_R_TIME_SYSCALL_ERROR 122 -# define TS_R_TOKEN_NOT_PRESENT 130 -# define TS_R_TOKEN_PRESENT 131 -# define TS_R_TSA_NAME_MISMATCH 111 -# define TS_R_TSA_UNTRUSTED 112 -# define TS_R_TST_INFO_SETUP_ERROR 123 -# define TS_R_TS_DATASIGN 124 -# define TS_R_UNACCEPTABLE_POLICY 125 -# define TS_R_UNSUPPORTED_MD_ALGORITHM 126 -# define TS_R_UNSUPPORTED_VERSION 113 -# define TS_R_VAR_BAD_VALUE 135 -# define TS_R_VAR_LOOKUP_FAILURE 136 -# define TS_R_WRONG_CONTENT_TYPE 114 - -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/txt_db.h b/submodules/MtProtoKit/openssl/openssl/txt_db.h deleted file mode 100644 index ec981a439f..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/txt_db.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_TXT_DB_H -# define HEADER_TXT_DB_H - -# include -# include -# include -# include - -# define DB_ERROR_OK 0 -# define DB_ERROR_MALLOC 1 -# define DB_ERROR_INDEX_CLASH 2 -# define DB_ERROR_INDEX_OUT_OF_RANGE 3 -# define DB_ERROR_NO_INDEX 4 -# define DB_ERROR_INSERT_INDEX_CLASH 5 -# define DB_ERROR_WRONG_NUM_FIELDS 6 - -#ifdef __cplusplus -extern "C" { -#endif - -typedef OPENSSL_STRING *OPENSSL_PSTRING; -DEFINE_SPECIAL_STACK_OF(OPENSSL_PSTRING, OPENSSL_STRING) - -typedef struct txt_db_st { - int num_fields; - STACK_OF(OPENSSL_PSTRING) *data; - LHASH_OF(OPENSSL_STRING) **index; - int (**qual) (OPENSSL_STRING *); - long error; - long arg1; - long arg2; - OPENSSL_STRING *arg_row; -} TXT_DB; - -TXT_DB *TXT_DB_read(BIO *in, int num); -long TXT_DB_write(BIO *out, TXT_DB *db); -int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), - OPENSSL_LH_HASHFUNC hash, OPENSSL_LH_COMPFUNC cmp); -void TXT_DB_free(TXT_DB *db); -OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, - OPENSSL_STRING *value); -int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *value); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/ui.h b/submodules/MtProtoKit/openssl/openssl/ui.h deleted file mode 100644 index 7c721ec818..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ui.h +++ /dev/null @@ -1,368 +0,0 @@ -/* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_UI_H -# define HEADER_UI_H - -# include - -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include -# include -# include -# include - -/* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */ -# if OPENSSL_API_COMPAT < 0x10200000L -# ifdef OPENSSL_NO_UI_CONSOLE -# define OPENSSL_NO_UI -# endif -# endif - -# ifdef __cplusplus -extern "C" { -# endif - -/* - * All the following functions return -1 or NULL on error and in some cases - * (UI_process()) -2 if interrupted or in some other way cancelled. When - * everything is fine, they return 0, a positive value or a non-NULL pointer, - * all depending on their purpose. - */ - -/* Creators and destructor. */ -UI *UI_new(void); -UI *UI_new_method(const UI_METHOD *method); -void UI_free(UI *ui); - -/*- - The following functions are used to add strings to be printed and prompt - strings to prompt for data. The names are UI_{add,dup}__string - and UI_{add,dup}_input_boolean. - - UI_{add,dup}__string have the following meanings: - add add a text or prompt string. The pointers given to these - functions are used verbatim, no copying is done. - dup make a copy of the text or prompt string, then add the copy - to the collection of strings in the user interface. - - The function is a name for the functionality that the given - string shall be used for. It can be one of: - input use the string as data prompt. - verify use the string as verification prompt. This - is used to verify a previous input. - info use the string for informational output. - error use the string for error output. - Honestly, there's currently no difference between info and error for the - moment. - - UI_{add,dup}_input_boolean have the same semantics for "add" and "dup", - and are typically used when one wants to prompt for a yes/no response. - - All of the functions in this group take a UI and a prompt string. - The string input and verify addition functions also take a flag argument, - a buffer for the result to end up with, a minimum input size and a maximum - input size (the result buffer MUST be large enough to be able to contain - the maximum number of characters). Additionally, the verify addition - functions takes another buffer to compare the result against. - The boolean input functions take an action description string (which should - be safe to ignore if the expected user action is obvious, for example with - a dialog box with an OK button and a Cancel button), a string of acceptable - characters to mean OK and to mean Cancel. The two last strings are checked - to make sure they don't have common characters. Additionally, the same - flag argument as for the string input is taken, as well as a result buffer. - The result buffer is required to be at least one byte long. Depending on - the answer, the first character from the OK or the Cancel character strings - will be stored in the first byte of the result buffer. No NUL will be - added, so the result is *not* a string. - - On success, the all return an index of the added information. That index - is useful when retrieving results with UI_get0_result(). */ -int UI_add_input_string(UI *ui, const char *prompt, int flags, - char *result_buf, int minsize, int maxsize); -int UI_dup_input_string(UI *ui, const char *prompt, int flags, - char *result_buf, int minsize, int maxsize); -int UI_add_verify_string(UI *ui, const char *prompt, int flags, - char *result_buf, int minsize, int maxsize, - const char *test_buf); -int UI_dup_verify_string(UI *ui, const char *prompt, int flags, - char *result_buf, int minsize, int maxsize, - const char *test_buf); -int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc, - const char *ok_chars, const char *cancel_chars, - int flags, char *result_buf); -int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc, - const char *ok_chars, const char *cancel_chars, - int flags, char *result_buf); -int UI_add_info_string(UI *ui, const char *text); -int UI_dup_info_string(UI *ui, const char *text); -int UI_add_error_string(UI *ui, const char *text); -int UI_dup_error_string(UI *ui, const char *text); - -/* These are the possible flags. They can be or'ed together. */ -/* Use to have echoing of input */ -# define UI_INPUT_FLAG_ECHO 0x01 -/* - * Use a default password. Where that password is found is completely up to - * the application, it might for example be in the user data set with - * UI_add_user_data(). It is not recommended to have more than one input in - * each UI being marked with this flag, or the application might get - * confused. - */ -# define UI_INPUT_FLAG_DEFAULT_PWD 0x02 - -/*- - * The user of these routines may want to define flags of their own. The core - * UI won't look at those, but will pass them on to the method routines. They - * must use higher bits so they don't get confused with the UI bits above. - * UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use. A good - * example of use is this: - * - * #define MY_UI_FLAG1 (0x01 << UI_INPUT_FLAG_USER_BASE) - * -*/ -# define UI_INPUT_FLAG_USER_BASE 16 - -/*- - * The following function helps construct a prompt. object_desc is a - * textual short description of the object, for example "pass phrase", - * and object_name is the name of the object (might be a card name or - * a file name. - * The returned string shall always be allocated on the heap with - * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). - * - * If the ui_method doesn't contain a pointer to a user-defined prompt - * constructor, a default string is built, looking like this: - * - * "Enter {object_desc} for {object_name}:" - * - * So, if object_desc has the value "pass phrase" and object_name has - * the value "foo.key", the resulting string is: - * - * "Enter pass phrase for foo.key:" -*/ -char *UI_construct_prompt(UI *ui_method, - const char *object_desc, const char *object_name); - -/* - * The following function is used to store a pointer to user-specific data. - * Any previous such pointer will be returned and replaced. - * - * For callback purposes, this function makes a lot more sense than using - * ex_data, since the latter requires that different parts of OpenSSL or - * applications share the same ex_data index. - * - * Note that the UI_OpenSSL() method completely ignores the user data. Other - * methods may not, however. - */ -void *UI_add_user_data(UI *ui, void *user_data); -/* - * Alternatively, this function is used to duplicate the user data. - * This uses the duplicator method function. The destroy function will - * be used to free the user data in this case. - */ -int UI_dup_user_data(UI *ui, void *user_data); -/* We need a user data retrieving function as well. */ -void *UI_get0_user_data(UI *ui); - -/* Return the result associated with a prompt given with the index i. */ -const char *UI_get0_result(UI *ui, int i); -int UI_get_result_length(UI *ui, int i); - -/* When all strings have been added, process the whole thing. */ -int UI_process(UI *ui); - -/* - * Give a user interface parameterised control commands. This can be used to - * send down an integer, a data pointer or a function pointer, as well as be - * used to get information from a UI. - */ -int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); - -/* The commands */ -/* - * Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the - * OpenSSL error stack before printing any info or added error messages and - * before any prompting. - */ -# define UI_CTRL_PRINT_ERRORS 1 -/* - * Check if a UI_process() is possible to do again with the same instance of - * a user interface. This makes UI_ctrl() return 1 if it is redoable, and 0 - * if not. - */ -# define UI_CTRL_IS_REDOABLE 2 - -/* Some methods may use extra data */ -# define UI_set_app_data(s,arg) UI_set_ex_data(s,0,arg) -# define UI_get_app_data(s) UI_get_ex_data(s,0) - -# define UI_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef) -int UI_set_ex_data(UI *r, int idx, void *arg); -void *UI_get_ex_data(UI *r, int idx); - -/* Use specific methods instead of the built-in one */ -void UI_set_default_method(const UI_METHOD *meth); -const UI_METHOD *UI_get_default_method(void); -const UI_METHOD *UI_get_method(UI *ui); -const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth); - -# ifndef OPENSSL_NO_UI_CONSOLE - -/* The method with all the built-in thingies */ -UI_METHOD *UI_OpenSSL(void); - -# endif - -/* - * NULL method. Literally does nothing, but may serve as a placeholder - * to avoid internal default. - */ -const UI_METHOD *UI_null(void); - -/* ---------- For method writers ---------- */ -/*- - A method contains a number of functions that implement the low level - of the User Interface. The functions are: - - an opener This function starts a session, maybe by opening - a channel to a tty, or by opening a window. - a writer This function is called to write a given string, - maybe to the tty, maybe as a field label in a - window. - a flusher This function is called to flush everything that - has been output so far. It can be used to actually - display a dialog box after it has been built. - a reader This function is called to read a given prompt, - maybe from the tty, maybe from a field in a - window. Note that it's called with all string - structures, not only the prompt ones, so it must - check such things itself. - a closer This function closes the session, maybe by closing - the channel to the tty, or closing the window. - - All these functions are expected to return: - - 0 on error. - 1 on success. - -1 on out-of-band events, for example if some prompting has - been canceled (by pressing Ctrl-C, for example). This is - only checked when returned by the flusher or the reader. - - The way this is used, the opener is first called, then the writer for all - strings, then the flusher, then the reader for all strings and finally the - closer. Note that if you want to prompt from a terminal or other command - line interface, the best is to have the reader also write the prompts - instead of having the writer do it. If you want to prompt from a dialog - box, the writer can be used to build up the contents of the box, and the - flusher to actually display the box and run the event loop until all data - has been given, after which the reader only grabs the given data and puts - them back into the UI strings. - - All method functions take a UI as argument. Additionally, the writer and - the reader take a UI_STRING. -*/ - -/* - * The UI_STRING type is the data structure that contains all the needed info - * about a string or a prompt, including test data for a verification prompt. - */ -typedef struct ui_string_st UI_STRING; -DEFINE_STACK_OF(UI_STRING) - -/* - * The different types of strings that are currently supported. This is only - * needed by method authors. - */ -enum UI_string_types { - UIT_NONE = 0, - UIT_PROMPT, /* Prompt for a string */ - UIT_VERIFY, /* Prompt for a string and verify */ - UIT_BOOLEAN, /* Prompt for a yes/no response */ - UIT_INFO, /* Send info to the user */ - UIT_ERROR /* Send an error message to the user */ -}; - -/* Create and manipulate methods */ -UI_METHOD *UI_create_method(const char *name); -void UI_destroy_method(UI_METHOD *ui_method); -int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui)); -int UI_method_set_writer(UI_METHOD *method, - int (*writer) (UI *ui, UI_STRING *uis)); -int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui)); -int UI_method_set_reader(UI_METHOD *method, - int (*reader) (UI *ui, UI_STRING *uis)); -int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)); -int UI_method_set_data_duplicator(UI_METHOD *method, - void *(*duplicator) (UI *ui, void *ui_data), - void (*destructor)(UI *ui, void *ui_data)); -int UI_method_set_prompt_constructor(UI_METHOD *method, - char *(*prompt_constructor) (UI *ui, - const char - *object_desc, - const char - *object_name)); -int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data); -int (*UI_method_get_opener(const UI_METHOD *method)) (UI *); -int (*UI_method_get_writer(const UI_METHOD *method)) (UI *, UI_STRING *); -int (*UI_method_get_flusher(const UI_METHOD *method)) (UI *); -int (*UI_method_get_reader(const UI_METHOD *method)) (UI *, UI_STRING *); -int (*UI_method_get_closer(const UI_METHOD *method)) (UI *); -char *(*UI_method_get_prompt_constructor(const UI_METHOD *method)) - (UI *, const char *, const char *); -void *(*UI_method_get_data_duplicator(const UI_METHOD *method)) (UI *, void *); -void (*UI_method_get_data_destructor(const UI_METHOD *method)) (UI *, void *); -const void *UI_method_get_ex_data(const UI_METHOD *method, int idx); - -/* - * The following functions are helpers for method writers to access relevant - * data from a UI_STRING. - */ - -/* Return type of the UI_STRING */ -enum UI_string_types UI_get_string_type(UI_STRING *uis); -/* Return input flags of the UI_STRING */ -int UI_get_input_flags(UI_STRING *uis); -/* Return the actual string to output (the prompt, info or error) */ -const char *UI_get0_output_string(UI_STRING *uis); -/* - * Return the optional action string to output (the boolean prompt - * instruction) - */ -const char *UI_get0_action_string(UI_STRING *uis); -/* Return the result of a prompt */ -const char *UI_get0_result_string(UI_STRING *uis); -int UI_get_result_string_length(UI_STRING *uis); -/* - * Return the string to test the result against. Only useful with verifies. - */ -const char *UI_get0_test_string(UI_STRING *uis); -/* Return the required minimum size of the result */ -int UI_get_result_minsize(UI_STRING *uis); -/* Return the required maximum size of the result */ -int UI_get_result_maxsize(UI_STRING *uis); -/* Set the result of a UI_STRING. */ -int UI_set_result(UI *ui, UI_STRING *uis, const char *result); -int UI_set_result_ex(UI *ui, UI_STRING *uis, const char *result, int len); - -/* A couple of popular utility functions */ -int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, - int verify); -int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, - int verify); -UI_METHOD *UI_UTIL_wrap_read_pem_callback(pem_password_cb *cb, int rwflag); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/ui_compat.h b/submodules/MtProtoKit/openssl/openssl/ui_compat.h deleted file mode 100644 index bf541542c0..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/ui_compat.h +++ /dev/null @@ -1,88 +0,0 @@ -/* crypto/ui/ui.h */ -/* - * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project - * 2001. - */ -/* ==================================================================== - * Copyright (c) 2001 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -#ifndef HEADER_UI_COMPAT_H -# define HEADER_UI_COMPAT_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * The following functions were previously part of the DES section, and are - * provided here for backward compatibility reasons. - */ - -# define des_read_pw_string(b,l,p,v) \ - _ossl_old_des_read_pw_string((b),(l),(p),(v)) -# define des_read_pw(b,bf,s,p,v) \ - _ossl_old_des_read_pw((b),(bf),(s),(p),(v)) - -int _ossl_old_des_read_pw_string(char *buf, int length, const char *prompt, - int verify); -int _ossl_old_des_read_pw(char *buf, char *buff, int size, const char *prompt, - int verify); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/uierr.h b/submodules/MtProtoKit/openssl/openssl/uierr.h deleted file mode 100644 index bd68864d0d..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/uierr.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_UIERR_H -# define HEADER_UIERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_UI_strings(void); - -/* - * UI function codes. - */ -# define UI_F_CLOSE_CONSOLE 115 -# define UI_F_ECHO_CONSOLE 116 -# define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 -# define UI_F_GENERAL_ALLOCATE_PROMPT 109 -# define UI_F_NOECHO_CONSOLE 117 -# define UI_F_OPEN_CONSOLE 114 -# define UI_F_UI_CONSTRUCT_PROMPT 121 -# define UI_F_UI_CREATE_METHOD 112 -# define UI_F_UI_CTRL 111 -# define UI_F_UI_DUP_ERROR_STRING 101 -# define UI_F_UI_DUP_INFO_STRING 102 -# define UI_F_UI_DUP_INPUT_BOOLEAN 110 -# define UI_F_UI_DUP_INPUT_STRING 103 -# define UI_F_UI_DUP_USER_DATA 118 -# define UI_F_UI_DUP_VERIFY_STRING 106 -# define UI_F_UI_GET0_RESULT 107 -# define UI_F_UI_GET_RESULT_LENGTH 119 -# define UI_F_UI_NEW_METHOD 104 -# define UI_F_UI_PROCESS 113 -# define UI_F_UI_SET_RESULT 105 -# define UI_F_UI_SET_RESULT_EX 120 - -/* - * UI reason codes. - */ -# define UI_R_COMMON_OK_AND_CANCEL_CHARACTERS 104 -# define UI_R_INDEX_TOO_LARGE 102 -# define UI_R_INDEX_TOO_SMALL 103 -# define UI_R_NO_RESULT_BUFFER 105 -# define UI_R_PROCESSING_ERROR 107 -# define UI_R_RESULT_TOO_LARGE 100 -# define UI_R_RESULT_TOO_SMALL 101 -# define UI_R_SYSASSIGN_ERROR 109 -# define UI_R_SYSDASSGN_ERROR 110 -# define UI_R_SYSQIOW_ERROR 111 -# define UI_R_UNKNOWN_CONTROL_COMMAND 106 -# define UI_R_UNKNOWN_TTYGET_ERRNO_VALUE 108 -# define UI_R_USER_DATA_DUPLICATION_UNSUPPORTED 112 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/whrlpool.h b/submodules/MtProtoKit/openssl/openssl/whrlpool.h deleted file mode 100644 index 20ea3503b7..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/whrlpool.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_WHRLPOOL_H -# define HEADER_WHRLPOOL_H - -#include - -# ifndef OPENSSL_NO_WHIRLPOOL -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -# define WHIRLPOOL_DIGEST_LENGTH (512/8) -# define WHIRLPOOL_BBLOCK 512 -# define WHIRLPOOL_COUNTER (256/8) - -typedef struct { - union { - unsigned char c[WHIRLPOOL_DIGEST_LENGTH]; - /* double q is here to ensure 64-bit alignment */ - double q[WHIRLPOOL_DIGEST_LENGTH / sizeof(double)]; - } H; - unsigned char data[WHIRLPOOL_BBLOCK / 8]; - unsigned int bitoff; - size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)]; -} WHIRLPOOL_CTX; - -int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); -int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes); -void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits); -int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); -unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/x509.h b/submodules/MtProtoKit/openssl/openssl/x509.h deleted file mode 100644 index 39ca0ba575..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/x509.h +++ /dev/null @@ -1,1047 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_X509_H -# define HEADER_X509_H - -# include -# include -# include -# include -# include -# include -# include -# include -# include - -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# include -# include -# endif - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Flags for X509_get_signature_info() */ -/* Signature info is valid */ -# define X509_SIG_INFO_VALID 0x1 -/* Signature is suitable for TLS use */ -# define X509_SIG_INFO_TLS 0x2 - -# define X509_FILETYPE_PEM 1 -# define X509_FILETYPE_ASN1 2 -# define X509_FILETYPE_DEFAULT 3 - -# define X509v3_KU_DIGITAL_SIGNATURE 0x0080 -# define X509v3_KU_NON_REPUDIATION 0x0040 -# define X509v3_KU_KEY_ENCIPHERMENT 0x0020 -# define X509v3_KU_DATA_ENCIPHERMENT 0x0010 -# define X509v3_KU_KEY_AGREEMENT 0x0008 -# define X509v3_KU_KEY_CERT_SIGN 0x0004 -# define X509v3_KU_CRL_SIGN 0x0002 -# define X509v3_KU_ENCIPHER_ONLY 0x0001 -# define X509v3_KU_DECIPHER_ONLY 0x8000 -# define X509v3_KU_UNDEF 0xffff - -struct X509_algor_st { - ASN1_OBJECT *algorithm; - ASN1_TYPE *parameter; -} /* X509_ALGOR */ ; - -typedef STACK_OF(X509_ALGOR) X509_ALGORS; - -typedef struct X509_val_st { - ASN1_TIME *notBefore; - ASN1_TIME *notAfter; -} X509_VAL; - -typedef struct X509_sig_st X509_SIG; - -typedef struct X509_name_entry_st X509_NAME_ENTRY; - -DEFINE_STACK_OF(X509_NAME_ENTRY) - -DEFINE_STACK_OF(X509_NAME) - -# define X509_EX_V_NETSCAPE_HACK 0x8000 -# define X509_EX_V_INIT 0x0001 -typedef struct X509_extension_st X509_EXTENSION; - -typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; - -DEFINE_STACK_OF(X509_EXTENSION) - -typedef struct x509_attributes_st X509_ATTRIBUTE; - -DEFINE_STACK_OF(X509_ATTRIBUTE) - -typedef struct X509_req_info_st X509_REQ_INFO; - -typedef struct X509_req_st X509_REQ; - -typedef struct x509_cert_aux_st X509_CERT_AUX; - -typedef struct x509_cinf_st X509_CINF; - -DEFINE_STACK_OF(X509) - -/* This is used for a table of trust checking functions */ - -typedef struct x509_trust_st { - int trust; - int flags; - int (*check_trust) (struct x509_trust_st *, X509 *, int); - char *name; - int arg1; - void *arg2; -} X509_TRUST; - -DEFINE_STACK_OF(X509_TRUST) - -/* standard trust ids */ - -# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ - -# define X509_TRUST_COMPAT 1 -# define X509_TRUST_SSL_CLIENT 2 -# define X509_TRUST_SSL_SERVER 3 -# define X509_TRUST_EMAIL 4 -# define X509_TRUST_OBJECT_SIGN 5 -# define X509_TRUST_OCSP_SIGN 6 -# define X509_TRUST_OCSP_REQUEST 7 -# define X509_TRUST_TSA 8 - -/* Keep these up to date! */ -# define X509_TRUST_MIN 1 -# define X509_TRUST_MAX 8 - -/* trust_flags values */ -# define X509_TRUST_DYNAMIC (1U << 0) -# define X509_TRUST_DYNAMIC_NAME (1U << 1) -/* No compat trust if self-signed, preempts "DO_SS" */ -# define X509_TRUST_NO_SS_COMPAT (1U << 2) -/* Compat trust if no explicit accepted trust EKUs */ -# define X509_TRUST_DO_SS_COMPAT (1U << 3) -/* Accept "anyEKU" as a wildcard trust OID */ -# define X509_TRUST_OK_ANY_EKU (1U << 4) - -/* check_trust return codes */ - -# define X509_TRUST_TRUSTED 1 -# define X509_TRUST_REJECTED 2 -# define X509_TRUST_UNTRUSTED 3 - -/* Flags for X509_print_ex() */ - -# define X509_FLAG_COMPAT 0 -# define X509_FLAG_NO_HEADER 1L -# define X509_FLAG_NO_VERSION (1L << 1) -# define X509_FLAG_NO_SERIAL (1L << 2) -# define X509_FLAG_NO_SIGNAME (1L << 3) -# define X509_FLAG_NO_ISSUER (1L << 4) -# define X509_FLAG_NO_VALIDITY (1L << 5) -# define X509_FLAG_NO_SUBJECT (1L << 6) -# define X509_FLAG_NO_PUBKEY (1L << 7) -# define X509_FLAG_NO_EXTENSIONS (1L << 8) -# define X509_FLAG_NO_SIGDUMP (1L << 9) -# define X509_FLAG_NO_AUX (1L << 10) -# define X509_FLAG_NO_ATTRIBUTES (1L << 11) -# define X509_FLAG_NO_IDS (1L << 12) - -/* Flags specific to X509_NAME_print_ex() */ - -/* The field separator information */ - -# define XN_FLAG_SEP_MASK (0xf << 16) - -# define XN_FLAG_COMPAT 0/* Traditional; use old X509_NAME_print */ -# define XN_FLAG_SEP_COMMA_PLUS (1 << 16)/* RFC2253 ,+ */ -# define XN_FLAG_SEP_CPLUS_SPC (2 << 16)/* ,+ spaced: more readable */ -# define XN_FLAG_SEP_SPLUS_SPC (3 << 16)/* ;+ spaced */ -# define XN_FLAG_SEP_MULTILINE (4 << 16)/* One line per field */ - -# define XN_FLAG_DN_REV (1 << 20)/* Reverse DN order */ - -/* How the field name is shown */ - -# define XN_FLAG_FN_MASK (0x3 << 21) - -# define XN_FLAG_FN_SN 0/* Object short name */ -# define XN_FLAG_FN_LN (1 << 21)/* Object long name */ -# define XN_FLAG_FN_OID (2 << 21)/* Always use OIDs */ -# define XN_FLAG_FN_NONE (3 << 21)/* No field names */ - -# define XN_FLAG_SPC_EQ (1 << 23)/* Put spaces round '=' */ - -/* - * This determines if we dump fields we don't recognise: RFC2253 requires - * this. - */ - -# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24) - -# define XN_FLAG_FN_ALIGN (1 << 25)/* Align field names to 20 - * characters */ - -/* Complete set of RFC2253 flags */ - -# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \ - XN_FLAG_SEP_COMMA_PLUS | \ - XN_FLAG_DN_REV | \ - XN_FLAG_FN_SN | \ - XN_FLAG_DUMP_UNKNOWN_FIELDS) - -/* readable oneline form */ - -# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \ - ASN1_STRFLGS_ESC_QUOTE | \ - XN_FLAG_SEP_CPLUS_SPC | \ - XN_FLAG_SPC_EQ | \ - XN_FLAG_FN_SN) - -/* readable multiline form */ - -# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \ - ASN1_STRFLGS_ESC_MSB | \ - XN_FLAG_SEP_MULTILINE | \ - XN_FLAG_SPC_EQ | \ - XN_FLAG_FN_LN | \ - XN_FLAG_FN_ALIGN) - -DEFINE_STACK_OF(X509_REVOKED) - -typedef struct X509_crl_info_st X509_CRL_INFO; - -DEFINE_STACK_OF(X509_CRL) - -typedef struct private_key_st { - int version; - /* The PKCS#8 data types */ - X509_ALGOR *enc_algor; - ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */ - /* When decrypted, the following will not be NULL */ - EVP_PKEY *dec_pkey; - /* used to encrypt and decrypt */ - int key_length; - char *key_data; - int key_free; /* true if we should auto free key_data */ - /* expanded version of 'enc_algor' */ - EVP_CIPHER_INFO cipher; -} X509_PKEY; - -typedef struct X509_info_st { - X509 *x509; - X509_CRL *crl; - X509_PKEY *x_pkey; - EVP_CIPHER_INFO enc_cipher; - int enc_len; - char *enc_data; -} X509_INFO; - -DEFINE_STACK_OF(X509_INFO) - -/* - * The next 2 structures and their 8 routines are used to manipulate Netscape's - * spki structures - useful if you are writing a CA web page - */ -typedef struct Netscape_spkac_st { - X509_PUBKEY *pubkey; - ASN1_IA5STRING *challenge; /* challenge sent in atlas >= PR2 */ -} NETSCAPE_SPKAC; - -typedef struct Netscape_spki_st { - NETSCAPE_SPKAC *spkac; /* signed public key and challenge */ - X509_ALGOR sig_algor; - ASN1_BIT_STRING *signature; -} NETSCAPE_SPKI; - -/* Netscape certificate sequence structure */ -typedef struct Netscape_certificate_sequence { - ASN1_OBJECT *type; - STACK_OF(X509) *certs; -} NETSCAPE_CERT_SEQUENCE; - -/*- Unused (and iv length is wrong) -typedef struct CBCParameter_st - { - unsigned char iv[8]; - } CBC_PARAM; -*/ - -/* Password based encryption structure */ - -typedef struct PBEPARAM_st { - ASN1_OCTET_STRING *salt; - ASN1_INTEGER *iter; -} PBEPARAM; - -/* Password based encryption V2 structures */ - -typedef struct PBE2PARAM_st { - X509_ALGOR *keyfunc; - X509_ALGOR *encryption; -} PBE2PARAM; - -typedef struct PBKDF2PARAM_st { -/* Usually OCTET STRING but could be anything */ - ASN1_TYPE *salt; - ASN1_INTEGER *iter; - ASN1_INTEGER *keylength; - X509_ALGOR *prf; -} PBKDF2PARAM; - -#ifndef OPENSSL_NO_SCRYPT -typedef struct SCRYPT_PARAMS_st { - ASN1_OCTET_STRING *salt; - ASN1_INTEGER *costParameter; - ASN1_INTEGER *blockSize; - ASN1_INTEGER *parallelizationParameter; - ASN1_INTEGER *keyLength; -} SCRYPT_PARAMS; -#endif - -#ifdef __cplusplus -} -#endif - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define X509_EXT_PACK_UNKNOWN 1 -# define X509_EXT_PACK_STRING 2 - -# define X509_extract_key(x) X509_get_pubkey(x)/*****/ -# define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) -# define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) - -void X509_CRL_set_default_method(const X509_CRL_METHOD *meth); -X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), - int (*crl_free) (X509_CRL *crl), - int (*crl_lookup) (X509_CRL *crl, - X509_REVOKED **ret, - ASN1_INTEGER *ser, - X509_NAME *issuer), - int (*crl_verify) (X509_CRL *crl, - EVP_PKEY *pk)); -void X509_CRL_METHOD_free(X509_CRL_METHOD *m); - -void X509_CRL_set_meth_data(X509_CRL *crl, void *dat); -void *X509_CRL_get_meth_data(X509_CRL *crl); - -const char *X509_verify_cert_error_string(long n); - -int X509_verify(X509 *a, EVP_PKEY *r); - -int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); -int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); -int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); - -NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len); -char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); -EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); -int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); - -int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); - -int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent); -int X509_signature_print(BIO *bp, const X509_ALGOR *alg, - const ASN1_STRING *sig); - -int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); -int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); -# ifndef OPENSSL_NO_OCSP -int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); -# endif -int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); -int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); -int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); -int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); -# ifndef OPENSSL_NO_OCSP -int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); -# endif -int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); - -int X509_pubkey_digest(const X509 *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_digest(const X509 *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); - -# ifndef OPENSSL_NO_STDIO -X509 *d2i_X509_fp(FILE *fp, X509 **x509); -int i2d_X509_fp(FILE *fp, X509 *x509); -X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); -int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl); -X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); -int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); -int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa); -# endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); -int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa); -DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); -int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); -int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); -int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey); -# endif -X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); -int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8); -PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, - PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key); -int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); -int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); -# endif - -X509 *d2i_X509_bio(BIO *bp, X509 **x509); -int i2d_X509_bio(BIO *bp, X509 *x509); -X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); -int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl); -X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); -int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); -int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa); -# endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); -int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa); -DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); -int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); -int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); -int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey); -# endif -X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); -int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8); -PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, - PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key); -int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); -int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); - -X509 *X509_dup(X509 *x509); -X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); -X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); -X509_CRL *X509_CRL_dup(X509_CRL *crl); -X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev); -X509_REQ *X509_REQ_dup(X509_REQ *req); -X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn); -int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, - void *pval); -void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype, - const void **ppval, const X509_ALGOR *algor); -void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); -int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); - -X509_NAME *X509_NAME_dup(X509_NAME *xn); -X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); - -int X509_cmp_time(const ASN1_TIME *s, time_t *t); -int X509_cmp_current_time(const ASN1_TIME *s); -ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); -ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, - int offset_day, long offset_sec, time_t *t); -ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); - -const char *X509_get_default_cert_area(void); -const char *X509_get_default_cert_dir(void); -const char *X509_get_default_cert_file(void); -const char *X509_get_default_cert_dir_env(void); -const char *X509_get_default_cert_file_env(void); -const char *X509_get_default_private_dir(void); - -X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); -X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey); - -DECLARE_ASN1_FUNCTIONS(X509_ALGOR) -DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) -DECLARE_ASN1_FUNCTIONS(X509_VAL) - -DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) - -int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); -EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key); -EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); -int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); -long X509_get_pathlen(X509 *x); -int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp); -EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length); -# ifndef OPENSSL_NO_RSA -int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp); -RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length); -# endif -# ifndef OPENSSL_NO_DSA -int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp); -DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); -# endif -# ifndef OPENSSL_NO_EC -int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp); -EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length); -# endif - -DECLARE_ASN1_FUNCTIONS(X509_SIG) -void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg, - const ASN1_OCTET_STRING **pdigest); -void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, - ASN1_OCTET_STRING **pdigest); - -DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) -DECLARE_ASN1_FUNCTIONS(X509_REQ) - -DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) -X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); - -DECLARE_ASN1_FUNCTIONS(X509_EXTENSION) -DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS) - -DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) - -DECLARE_ASN1_FUNCTIONS(X509_NAME) - -int X509_NAME_set(X509_NAME **xn, X509_NAME *name); - -DECLARE_ASN1_FUNCTIONS(X509_CINF) - -DECLARE_ASN1_FUNCTIONS(X509) -DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) - -#define X509_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef) -int X509_set_ex_data(X509 *r, int idx, void *arg); -void *X509_get_ex_data(X509 *r, int idx); -int i2d_X509_AUX(X509 *a, unsigned char **pp); -X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length); - -int i2d_re_X509_tbs(X509 *x, unsigned char **pp); - -int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid, - int *secbits, uint32_t *flags); -void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid, - int secbits, uint32_t flags); - -int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits, - uint32_t *flags); - -void X509_get0_signature(const ASN1_BIT_STRING **psig, - const X509_ALGOR **palg, const X509 *x); -int X509_get_signature_nid(const X509 *x); - -int X509_trusted(const X509 *x); -int X509_alias_set1(X509 *x, const unsigned char *name, int len); -int X509_keyid_set1(X509 *x, const unsigned char *id, int len); -unsigned char *X509_alias_get0(X509 *x, int *len); -unsigned char *X509_keyid_get0(X509 *x, int *len); -int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, - int); -int X509_TRUST_set(int *t, int trust); -int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); -int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); -void X509_trust_clear(X509 *x); -void X509_reject_clear(X509 *x); - -STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); -STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); - -DECLARE_ASN1_FUNCTIONS(X509_REVOKED) -DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) -DECLARE_ASN1_FUNCTIONS(X509_CRL) - -int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); -int X509_CRL_get0_by_serial(X509_CRL *crl, - X509_REVOKED **ret, ASN1_INTEGER *serial); -int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); - -X509_PKEY *X509_PKEY_new(void); -void X509_PKEY_free(X509_PKEY *a); - -DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) -DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) -DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) - -X509_INFO *X509_INFO_new(void); -void X509_INFO_free(X509_INFO *a); -char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size); - -int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, - ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); - -int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, - unsigned char *md, unsigned int *len); - -int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - char *data, EVP_PKEY *pkey, const EVP_MD *type); - -int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, - unsigned char *md, unsigned int *len); - -int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1, - ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey); - -int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data, - EVP_PKEY *pkey, const EVP_MD *type); -int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - void *asn, EVP_MD_CTX *ctx); - -long X509_get_version(const X509 *x); -int X509_set_version(X509 *x, long version); -int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); -ASN1_INTEGER *X509_get_serialNumber(X509 *x); -const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); -int X509_set_issuer_name(X509 *x, X509_NAME *name); -X509_NAME *X509_get_issuer_name(const X509 *a); -int X509_set_subject_name(X509 *x, X509_NAME *name); -X509_NAME *X509_get_subject_name(const X509 *a); -const ASN1_TIME * X509_get0_notBefore(const X509 *x); -ASN1_TIME *X509_getm_notBefore(const X509 *x); -int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm); -const ASN1_TIME *X509_get0_notAfter(const X509 *x); -ASN1_TIME *X509_getm_notAfter(const X509 *x); -int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm); -int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); -int X509_up_ref(X509 *x); -int X509_get_signature_type(const X509 *x); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define X509_get_notBefore X509_getm_notBefore -# define X509_get_notAfter X509_getm_notAfter -# define X509_set_notBefore X509_set1_notBefore -# define X509_set_notAfter X509_set1_notAfter -#endif - - -/* - * This one is only used so that a binary form can output, as in - * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf) - */ -X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x); -const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x); -void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid, - const ASN1_BIT_STRING **psuid); -const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); - -EVP_PKEY *X509_get0_pubkey(const X509 *x); -EVP_PKEY *X509_get_pubkey(X509 *x); -ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); -int X509_certificate_type(const X509 *x, const EVP_PKEY *pubkey); - -long X509_REQ_get_version(const X509_REQ *req); -int X509_REQ_set_version(X509_REQ *x, long version); -X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); -int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); -void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, - const X509_ALGOR **palg); -int X509_REQ_get_signature_nid(const X509_REQ *req); -int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); -int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); -EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); -EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); -X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req); -int X509_REQ_extension_nid(int nid); -int *X509_REQ_get_extension_nids(void); -void X509_REQ_set_extension_nids(int *nids); -STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); -int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, - int nid); -int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts); -int X509_REQ_get_attr_count(const X509_REQ *req); -int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); -int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj, - int lastpos); -X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); -X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc); -int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr); -int X509_REQ_add1_attr_by_OBJ(X509_REQ *req, - const ASN1_OBJECT *obj, int type, - const unsigned char *bytes, int len); -int X509_REQ_add1_attr_by_NID(X509_REQ *req, - int nid, int type, - const unsigned char *bytes, int len); -int X509_REQ_add1_attr_by_txt(X509_REQ *req, - const char *attrname, int type, - const unsigned char *bytes, int len); - -int X509_CRL_set_version(X509_CRL *x, long version); -int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); -int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); -int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); -int X509_CRL_sort(X509_CRL *crl); -int X509_CRL_up_ref(X509_CRL *crl); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate -# define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate -#endif - -long X509_CRL_get_version(const X509_CRL *crl); -const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); -const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); -DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl)) -DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl)) -X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); -const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); -STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); -void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, - const X509_ALGOR **palg); -int X509_CRL_get_signature_nid(const X509_CRL *crl); -int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp); - -const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x); -int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); -const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x); -int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); -const STACK_OF(X509_EXTENSION) * -X509_REVOKED_get0_extensions(const X509_REVOKED *r); - -X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, - EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); - -int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); - -int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey); -int X509_chain_check_suiteb(int *perror_depth, - X509 *x, STACK_OF(X509) *chain, - unsigned long flags); -int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags); -STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain); - -int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); -unsigned long X509_issuer_and_serial_hash(X509 *a); - -int X509_issuer_name_cmp(const X509 *a, const X509 *b); -unsigned long X509_issuer_name_hash(X509 *a); - -int X509_subject_name_cmp(const X509 *a, const X509 *b); -unsigned long X509_subject_name_hash(X509 *x); - -# ifndef OPENSSL_NO_MD5 -unsigned long X509_issuer_name_hash_old(X509 *a); -unsigned long X509_subject_name_hash_old(X509 *x); -# endif - -int X509_cmp(const X509 *a, const X509 *b); -int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); -unsigned long X509_NAME_hash(X509_NAME *x); -unsigned long X509_NAME_hash_old(X509_NAME *x); - -int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); -int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); -int X509_aux_print(BIO *out, X509 *x, int indent); -# ifndef OPENSSL_NO_STDIO -int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag, - unsigned long cflag); -int X509_print_fp(FILE *bp, X509 *x); -int X509_CRL_print_fp(FILE *bp, X509_CRL *x); -int X509_REQ_print_fp(FILE *bp, X509_REQ *req); -int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent, - unsigned long flags); -# endif - -int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase); -int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent, - unsigned long flags); -int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag, - unsigned long cflag); -int X509_print(BIO *bp, X509 *x); -int X509_ocspid_print(BIO *bp, X509 *x); -int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag); -int X509_CRL_print(BIO *bp, X509_CRL *x); -int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, - unsigned long cflag); -int X509_REQ_print(BIO *bp, X509_REQ *req); - -int X509_NAME_entry_count(const X509_NAME *name); -int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len); -int X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, - char *buf, int len); - -/* - * NOTE: you should be passing -1, not 0 as lastpos. The functions that use - * lastpos, search after that position on. - */ -int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos); -int X509_NAME_get_index_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, - int lastpos); -X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); -X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); -int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne, - int loc, int set); -int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type, - const unsigned char *bytes, int len, int loc, - int set); -int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, - const unsigned char *bytes, int len, int loc, - int set); -X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, - const char *field, int type, - const unsigned char *bytes, - int len); -X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, - int type, - const unsigned char *bytes, - int len); -int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, - const unsigned char *bytes, int len, int loc, - int set); -X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, - const ASN1_OBJECT *obj, int type, - const unsigned char *bytes, - int len); -int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj); -int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, - const unsigned char *bytes, int len); -ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); -ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); -int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); - -int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder, - size_t *pderlen); - -int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); -int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, - int nid, int lastpos); -int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, - const ASN1_OBJECT *obj, int lastpos); -int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, - int crit, int lastpos); -X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); -X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); -STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, - X509_EXTENSION *ex, int loc); - -int X509_get_ext_count(const X509 *x); -int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos); -int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos); -int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos); -X509_EXTENSION *X509_get_ext(const X509 *x, int loc); -X509_EXTENSION *X509_delete_ext(X509 *x, int loc); -int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); -void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx); -int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, - unsigned long flags); - -int X509_CRL_get_ext_count(const X509_CRL *x); -int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos); -int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj, - int lastpos); -int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos); -X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc); -X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); -int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); -void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx); -int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, - unsigned long flags); - -int X509_REVOKED_get_ext_count(const X509_REVOKED *x); -int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos); -int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj, - int lastpos); -int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, - int lastpos); -X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc); -X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); -int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); -void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit, - int *idx); -int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit, - unsigned long flags); - -X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, - int nid, int crit, - ASN1_OCTET_STRING *data); -X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, - const ASN1_OBJECT *obj, int crit, - ASN1_OCTET_STRING *data); -int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj); -int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); -int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); -ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); -ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); -int X509_EXTENSION_get_critical(const X509_EXTENSION *ex); - -int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); -int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, - int lastpos); -int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, - const ASN1_OBJECT *obj, int lastpos); -X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc); -X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, - X509_ATTRIBUTE *attr); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) - **x, const ASN1_OBJECT *obj, - int type, - const unsigned char *bytes, - int len); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) - **x, int nid, int type, - const unsigned char *bytes, - int len); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) - **x, const char *attrname, - int type, - const unsigned char *bytes, - int len); -void *X509at_get0_data_by_OBJ(STACK_OF(X509_ATTRIBUTE) *x, - const ASN1_OBJECT *obj, int lastpos, int type); -X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, - int atrtype, const void *data, - int len); -X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, - const ASN1_OBJECT *obj, - int atrtype, const void *data, - int len); -X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, - const char *atrname, int type, - const unsigned char *bytes, - int len); -int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); -int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, - const void *data, int len); -void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype, - void *data); -int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr); -ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); -ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); - -int EVP_PKEY_get_attr_count(const EVP_PKEY *key); -int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos); -int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj, - int lastpos); -X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc); -X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc); -int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr); -int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, - const ASN1_OBJECT *obj, int type, - const unsigned char *bytes, int len); -int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, - int nid, int type, - const unsigned char *bytes, int len); -int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, - const char *attrname, int type, - const unsigned char *bytes, int len); - -int X509_verify_cert(X509_STORE_CTX *ctx); - -/* lookup a cert from a X509 STACK */ -X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, - ASN1_INTEGER *serial); -X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name); - -DECLARE_ASN1_FUNCTIONS(PBEPARAM) -DECLARE_ASN1_FUNCTIONS(PBE2PARAM) -DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) -#ifndef OPENSSL_NO_SCRYPT -DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS) -#endif - -int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, - const unsigned char *salt, int saltlen); - -X509_ALGOR *PKCS5_pbe_set(int alg, int iter, - const unsigned char *salt, int saltlen); -X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, - unsigned char *salt, int saltlen); -X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, - unsigned char *salt, int saltlen, - unsigned char *aiv, int prf_nid); - -#ifndef OPENSSL_NO_SCRYPT -X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, - const unsigned char *salt, int saltlen, - unsigned char *aiv, uint64_t N, uint64_t r, - uint64_t p); -#endif - -X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, - int prf_nid, int keylen); - -/* PKCS#8 utilities */ - -DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) - -EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8); -PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); - -int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, - int version, int ptype, void *pval, - unsigned char *penc, int penclen); -int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg, - const unsigned char **pk, int *ppklen, - const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8); - -const STACK_OF(X509_ATTRIBUTE) * -PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8); -int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, - const unsigned char *bytes, int len); - -int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, - int ptype, void *pval, - unsigned char *penc, int penclen); -int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, - const unsigned char **pk, int *ppklen, - X509_ALGOR **pa, X509_PUBKEY *pub); - -int X509_check_trust(X509 *x, int id, int flags); -int X509_TRUST_get_count(void); -X509_TRUST *X509_TRUST_get0(int idx); -int X509_TRUST_get_by_id(int id); -int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), - const char *name, int arg1, void *arg2); -void X509_TRUST_cleanup(void); -int X509_TRUST_get_flags(const X509_TRUST *xp); -char *X509_TRUST_get0_name(const X509_TRUST *xp); -int X509_TRUST_get_trust(const X509_TRUST *xp); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/x509_vfy.h b/submodules/MtProtoKit/openssl/openssl/x509_vfy.h deleted file mode 100644 index adb8bce7cb..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/x509_vfy.h +++ /dev/null @@ -1,628 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_X509_VFY_H -# define HEADER_X509_VFY_H - -/* - * Protect against recursion, x509.h and x509_vfy.h each include the other. - */ -# ifndef HEADER_X509_H -# include -# endif - -# include -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/*- -SSL_CTX -> X509_STORE - -> X509_LOOKUP - ->X509_LOOKUP_METHOD - -> X509_LOOKUP - ->X509_LOOKUP_METHOD - -SSL -> X509_STORE_CTX - ->X509_STORE - -The X509_STORE holds the tables etc for verification stuff. -A X509_STORE_CTX is used while validating a single certificate. -The X509_STORE has X509_LOOKUPs for looking up certs. -The X509_STORE then calls a function to actually verify the -certificate chain. -*/ - -typedef enum { - X509_LU_NONE = 0, - X509_LU_X509, X509_LU_CRL -} X509_LOOKUP_TYPE; - -#if OPENSSL_API_COMPAT < 0x10100000L -#define X509_LU_RETRY -1 -#define X509_LU_FAIL 0 -#endif - -DEFINE_STACK_OF(X509_LOOKUP) -DEFINE_STACK_OF(X509_OBJECT) -DEFINE_STACK_OF(X509_VERIFY_PARAM) - -int X509_STORE_set_depth(X509_STORE *store, int depth); - -typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); -typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); -typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, - X509_STORE_CTX *ctx, X509 *x); -typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx, - X509 *x, X509 *issuer); -typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx); -typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx, - X509_CRL **crl, X509 *x); -typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); -typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, - X509_CRL *crl, X509 *x); -typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); -typedef STACK_OF(X509) *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, - X509_NAME *nm); -typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(X509_STORE_CTX *ctx, - X509_NAME *nm); -typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); - - -void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); - -# define X509_STORE_CTX_set_app_data(ctx,data) \ - X509_STORE_CTX_set_ex_data(ctx,0,data) -# define X509_STORE_CTX_get_app_data(ctx) \ - X509_STORE_CTX_get_ex_data(ctx,0) - -# define X509_L_FILE_LOAD 1 -# define X509_L_ADD_DIR 2 - -# define X509_LOOKUP_load_file(x,name,type) \ - X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) - -# define X509_LOOKUP_add_dir(x,name,type) \ - X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) - -# define X509_V_OK 0 -# define X509_V_ERR_UNSPECIFIED 1 -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 -# define X509_V_ERR_UNABLE_TO_GET_CRL 3 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 -# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 -# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 -# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 -# define X509_V_ERR_CERT_NOT_YET_VALID 9 -# define X509_V_ERR_CERT_HAS_EXPIRED 10 -# define X509_V_ERR_CRL_NOT_YET_VALID 11 -# define X509_V_ERR_CRL_HAS_EXPIRED 12 -# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 -# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 -# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 -# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 -# define X509_V_ERR_OUT_OF_MEM 17 -# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 -# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 -# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 -# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 -# define X509_V_ERR_CERT_REVOKED 23 -# define X509_V_ERR_INVALID_CA 24 -# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 -# define X509_V_ERR_INVALID_PURPOSE 26 -# define X509_V_ERR_CERT_UNTRUSTED 27 -# define X509_V_ERR_CERT_REJECTED 28 -/* These are 'informational' when looking for issuer cert */ -# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 -# define X509_V_ERR_AKID_SKID_MISMATCH 30 -# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 -# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 -# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 -# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 -# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 -# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 -# define X509_V_ERR_INVALID_NON_CA 37 -# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 -# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 -# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 -# define X509_V_ERR_INVALID_EXTENSION 41 -# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 -# define X509_V_ERR_NO_EXPLICIT_POLICY 43 -# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 -# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 -# define X509_V_ERR_UNNESTED_RESOURCE 46 -# define X509_V_ERR_PERMITTED_VIOLATION 47 -# define X509_V_ERR_EXCLUDED_VIOLATION 48 -# define X509_V_ERR_SUBTREE_MINMAX 49 -/* The application is not happy */ -# define X509_V_ERR_APPLICATION_VERIFICATION 50 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 -# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 -# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 -/* Another issuer check debug option */ -# define X509_V_ERR_PATH_LOOP 55 -/* Suite B mode algorithm violation */ -# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 -# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 -# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 -# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 -# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 -# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 -/* Host, email and IP check errors */ -# define X509_V_ERR_HOSTNAME_MISMATCH 62 -# define X509_V_ERR_EMAIL_MISMATCH 63 -# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 -/* DANE TLSA errors */ -# define X509_V_ERR_DANE_NO_MATCH 65 -/* security level errors */ -# define X509_V_ERR_EE_KEY_TOO_SMALL 66 -# define X509_V_ERR_CA_KEY_TOO_SMALL 67 -# define X509_V_ERR_CA_MD_TOO_WEAK 68 -/* Caller error */ -# define X509_V_ERR_INVALID_CALL 69 -/* Issuer lookup error */ -# define X509_V_ERR_STORE_LOOKUP 70 -/* Certificate transparency */ -# define X509_V_ERR_NO_VALID_SCTS 71 - -# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 -/* OCSP status errors */ -# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ -# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ -# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ - -/* Certificate verify flags */ - -# if OPENSSL_API_COMPAT < 0x10100000L -# define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ -# endif -/* Use check time instead of current time */ -# define X509_V_FLAG_USE_CHECK_TIME 0x2 -/* Lookup CRLs */ -# define X509_V_FLAG_CRL_CHECK 0x4 -/* Lookup CRLs for whole chain */ -# define X509_V_FLAG_CRL_CHECK_ALL 0x8 -/* Ignore unhandled critical extensions */ -# define X509_V_FLAG_IGNORE_CRITICAL 0x10 -/* Disable workarounds for broken certificates */ -# define X509_V_FLAG_X509_STRICT 0x20 -/* Enable proxy certificate validation */ -# define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 -/* Enable policy checking */ -# define X509_V_FLAG_POLICY_CHECK 0x80 -/* Policy variable require-explicit-policy */ -# define X509_V_FLAG_EXPLICIT_POLICY 0x100 -/* Policy variable inhibit-any-policy */ -# define X509_V_FLAG_INHIBIT_ANY 0x200 -/* Policy variable inhibit-policy-mapping */ -# define X509_V_FLAG_INHIBIT_MAP 0x400 -/* Notify callback that policy is OK */ -# define X509_V_FLAG_NOTIFY_POLICY 0x800 -/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ -# define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 -/* Delta CRL support */ -# define X509_V_FLAG_USE_DELTAS 0x2000 -/* Check self-signed CA signature */ -# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 -/* Use trusted store first */ -# define X509_V_FLAG_TRUSTED_FIRST 0x8000 -/* Suite B 128 bit only mode: not normally used */ -# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 -/* Suite B 192 bit only mode */ -# define X509_V_FLAG_SUITEB_192_LOS 0x20000 -/* Suite B 128 bit mode allowing 192 bit algorithms */ -# define X509_V_FLAG_SUITEB_128_LOS 0x30000 -/* Allow partial chains if at least one certificate is in trusted store */ -# define X509_V_FLAG_PARTIAL_CHAIN 0x80000 -/* - * If the initial chain is not trusted, do not attempt to build an alternative - * chain. Alternate chain checking was introduced in 1.1.0. Setting this flag - * will force the behaviour to match that of previous versions. - */ -# define X509_V_FLAG_NO_ALT_CHAINS 0x100000 -/* Do not check certificate/CRL validity against current time */ -# define X509_V_FLAG_NO_CHECK_TIME 0x200000 - -# define X509_VP_FLAG_DEFAULT 0x1 -# define X509_VP_FLAG_OVERWRITE 0x2 -# define X509_VP_FLAG_RESET_FLAGS 0x4 -# define X509_VP_FLAG_LOCKED 0x8 -# define X509_VP_FLAG_ONCE 0x10 - -/* Internal use: mask of policy related options */ -# define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ - | X509_V_FLAG_EXPLICIT_POLICY \ - | X509_V_FLAG_INHIBIT_ANY \ - | X509_V_FLAG_INHIBIT_MAP) - -int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, - X509_NAME *name); -X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, - X509_LOOKUP_TYPE type, - X509_NAME *name); -X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, - X509_OBJECT *x); -int X509_OBJECT_up_ref_count(X509_OBJECT *a); -X509_OBJECT *X509_OBJECT_new(void); -void X509_OBJECT_free(X509_OBJECT *a); -X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); -X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); -int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); -X509_CRL *X509_OBJECT_get0_X509_CRL(X509_OBJECT *a); -int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); -X509_STORE *X509_STORE_new(void); -void X509_STORE_free(X509_STORE *v); -int X509_STORE_lock(X509_STORE *ctx); -int X509_STORE_unlock(X509_STORE *ctx); -int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *v); - -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); -STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); -int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); -int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx); - -void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); -#define X509_STORE_set_verify_func(ctx, func) \ - X509_STORE_set_verify((ctx),(func)) -void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, - X509_STORE_CTX_verify_fn verify); -X509_STORE_CTX_verify_fn X509_STORE_get_verify(X509_STORE *ctx); -void X509_STORE_set_verify_cb(X509_STORE *ctx, - X509_STORE_CTX_verify_cb verify_cb); -# define X509_STORE_set_verify_cb_func(ctx,func) \ - X509_STORE_set_verify_cb((ctx),(func)) -X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(X509_STORE *ctx); -void X509_STORE_set_get_issuer(X509_STORE *ctx, - X509_STORE_CTX_get_issuer_fn get_issuer); -X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(X509_STORE *ctx); -void X509_STORE_set_check_issued(X509_STORE *ctx, - X509_STORE_CTX_check_issued_fn check_issued); -X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(X509_STORE *ctx); -void X509_STORE_set_check_revocation(X509_STORE *ctx, - X509_STORE_CTX_check_revocation_fn check_revocation); -X509_STORE_CTX_check_revocation_fn X509_STORE_get_check_revocation(X509_STORE *ctx); -void X509_STORE_set_get_crl(X509_STORE *ctx, - X509_STORE_CTX_get_crl_fn get_crl); -X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(X509_STORE *ctx); -void X509_STORE_set_check_crl(X509_STORE *ctx, - X509_STORE_CTX_check_crl_fn check_crl); -X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(X509_STORE *ctx); -void X509_STORE_set_cert_crl(X509_STORE *ctx, - X509_STORE_CTX_cert_crl_fn cert_crl); -X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(X509_STORE *ctx); -void X509_STORE_set_check_policy(X509_STORE *ctx, - X509_STORE_CTX_check_policy_fn check_policy); -X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(X509_STORE *ctx); -void X509_STORE_set_lookup_certs(X509_STORE *ctx, - X509_STORE_CTX_lookup_certs_fn lookup_certs); -X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(X509_STORE *ctx); -void X509_STORE_set_lookup_crls(X509_STORE *ctx, - X509_STORE_CTX_lookup_crls_fn lookup_crls); -#define X509_STORE_set_lookup_crls_cb(ctx, func) \ - X509_STORE_set_lookup_crls((ctx), (func)) -X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(X509_STORE *ctx); -void X509_STORE_set_cleanup(X509_STORE *ctx, - X509_STORE_CTX_cleanup_fn cleanup); -X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(X509_STORE *ctx); - -#define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) -int X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data); -void *X509_STORE_get_ex_data(X509_STORE *ctx, int idx); - -X509_STORE_CTX *X509_STORE_CTX_new(void); - -int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); - -void X509_STORE_CTX_free(X509_STORE_CTX *ctx); -int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, - X509 *x509, STACK_OF(X509) *chain); -void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); -void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); - -X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx); -X509 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx); -STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); -void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, - X509_STORE_CTX_verify_cb verify); -X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(X509_STORE_CTX *ctx); -X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(X509_STORE_CTX *ctx); -X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(X509_STORE_CTX *ctx); -X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(X509_STORE_CTX *ctx); -X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(X509_STORE_CTX *ctx); -X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(X509_STORE_CTX *ctx); -X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); - -#if OPENSSL_API_COMPAT < 0x10100000L -# define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain -# define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted -# define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack -# define X509_STORE_get_by_subject X509_STORE_CTX_get_by_subject -# define X509_STORE_get1_certs X509_STORE_CTX_get1_certs -# define X509_STORE_get1_crls X509_STORE_CTX_get1_crls -/* the following macro is misspelled; use X509_STORE_get1_certs instead */ -# define X509_STORE_get1_cert X509_STORE_CTX_get1_certs -/* the following macro is misspelled; use X509_STORE_get1_crls instead */ -# define X509_STORE_get1_crl X509_STORE_CTX_get1_crls -#endif - -X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); -X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); -X509_LOOKUP_METHOD *X509_LOOKUP_file(void); - -typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, - long argl, char **ret); -typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, - X509_LOOKUP_TYPE type, - X509_NAME *name, - X509_OBJECT *ret); -typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, - X509_LOOKUP_TYPE type, - X509_NAME *name, - ASN1_INTEGER *serial, - X509_OBJECT *ret); -typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx, - X509_LOOKUP_TYPE type, - const unsigned char* bytes, - int len, - X509_OBJECT *ret); -typedef int (*X509_LOOKUP_get_by_alias_fn)(X509_LOOKUP *ctx, - X509_LOOKUP_TYPE type, - const char *str, - int len, - X509_OBJECT *ret); - -X509_LOOKUP_METHOD *X509_LOOKUP_meth_new(const char *name); -void X509_LOOKUP_meth_free(X509_LOOKUP_METHOD *method); - -int X509_LOOKUP_meth_set_new_item(X509_LOOKUP_METHOD *method, - int (*new_item) (X509_LOOKUP *ctx)); -int (*X509_LOOKUP_meth_get_new_item(const X509_LOOKUP_METHOD* method)) - (X509_LOOKUP *ctx); - -int X509_LOOKUP_meth_set_free(X509_LOOKUP_METHOD *method, - void (*free_fn) (X509_LOOKUP *ctx)); -void (*X509_LOOKUP_meth_get_free(const X509_LOOKUP_METHOD* method)) - (X509_LOOKUP *ctx); - -int X509_LOOKUP_meth_set_init(X509_LOOKUP_METHOD *method, - int (*init) (X509_LOOKUP *ctx)); -int (*X509_LOOKUP_meth_get_init(const X509_LOOKUP_METHOD* method)) - (X509_LOOKUP *ctx); - -int X509_LOOKUP_meth_set_shutdown(X509_LOOKUP_METHOD *method, - int (*shutdown) (X509_LOOKUP *ctx)); -int (*X509_LOOKUP_meth_get_shutdown(const X509_LOOKUP_METHOD* method)) - (X509_LOOKUP *ctx); - -int X509_LOOKUP_meth_set_ctrl(X509_LOOKUP_METHOD *method, - X509_LOOKUP_ctrl_fn ctrl_fn); -X509_LOOKUP_ctrl_fn X509_LOOKUP_meth_get_ctrl(const X509_LOOKUP_METHOD *method); - -int X509_LOOKUP_meth_set_get_by_subject(X509_LOOKUP_METHOD *method, - X509_LOOKUP_get_by_subject_fn fn); -X509_LOOKUP_get_by_subject_fn X509_LOOKUP_meth_get_get_by_subject( - const X509_LOOKUP_METHOD *method); - -int X509_LOOKUP_meth_set_get_by_issuer_serial(X509_LOOKUP_METHOD *method, - X509_LOOKUP_get_by_issuer_serial_fn fn); -X509_LOOKUP_get_by_issuer_serial_fn X509_LOOKUP_meth_get_get_by_issuer_serial( - const X509_LOOKUP_METHOD *method); - -int X509_LOOKUP_meth_set_get_by_fingerprint(X509_LOOKUP_METHOD *method, - X509_LOOKUP_get_by_fingerprint_fn fn); -X509_LOOKUP_get_by_fingerprint_fn X509_LOOKUP_meth_get_get_by_fingerprint( - const X509_LOOKUP_METHOD *method); - -int X509_LOOKUP_meth_set_get_by_alias(X509_LOOKUP_METHOD *method, - X509_LOOKUP_get_by_alias_fn fn); -X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( - const X509_LOOKUP_METHOD *method); - - -int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); -int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); - -int X509_STORE_CTX_get_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, - X509_NAME *name, X509_OBJECT *ret); -X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, - X509_LOOKUP_TYPE type, - X509_NAME *name); - -int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, - long argl, char **ret); - -int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); -int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); -int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); - -X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); -void X509_LOOKUP_free(X509_LOOKUP *ctx); -int X509_LOOKUP_init(X509_LOOKUP *ctx); -int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, X509_OBJECT *ret); -int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, ASN1_INTEGER *serial, - X509_OBJECT *ret); -int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - const unsigned char *bytes, int len, - X509_OBJECT *ret); -int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - const char *str, int len, X509_OBJECT *ret); -int X509_LOOKUP_set_method_data(X509_LOOKUP *ctx, void *data); -void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); -X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); -int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); - -int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, const char *dir); -int X509_STORE_set_default_paths(X509_STORE *ctx); - -#define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) -int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); -void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx); -int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); -int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); -X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); -X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx); -X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_cert(X509_STORE_CTX *c, X509 *x); -void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); -void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); -int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); -int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); -int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, - int purpose, int trust); -void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); -void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, - time_t t); - -X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); -int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); -int X509_STORE_CTX_get_num_untrusted(X509_STORE_CTX *ctx); - -X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); -int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); - -/* - * Bridge opacity barrier between libcrypt and libssl, also needed to support - * offline testing in test/danetest.c - */ -void X509_STORE_CTX_set0_dane(X509_STORE_CTX *ctx, SSL_DANE *dane); -#define DANE_FLAG_NO_DANE_EE_NAMECHECKS (1L << 0) - -/* X509_VERIFY_PARAM functions */ - -X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); -void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); -int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, - const X509_VERIFY_PARAM *from); -int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, - const X509_VERIFY_PARAM *from); -int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); -int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, - unsigned long flags); -int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, - unsigned long flags); -unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); -int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); -int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); -void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); -void X509_VERIFY_PARAM_set_auth_level(X509_VERIFY_PARAM *param, int auth_level); -time_t X509_VERIFY_PARAM_get_time(const X509_VERIFY_PARAM *param); -void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); -int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, - ASN1_OBJECT *policy); -int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, - STACK_OF(ASN1_OBJECT) *policies); - -int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param, - uint32_t flags); -uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param); - -int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, - const char *name, size_t namelen); -int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, - const char *name, size_t namelen); -void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, - unsigned int flags); -unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); -char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *); -void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); -int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, - const char *email, size_t emaillen); -int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, - const unsigned char *ip, size_t iplen); -int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, - const char *ipasc); - -int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); -int X509_VERIFY_PARAM_get_auth_level(const X509_VERIFY_PARAM *param); -const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param); - -int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); -int X509_VERIFY_PARAM_get_count(void); -const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id); -const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); -void X509_VERIFY_PARAM_table_cleanup(void); - -/* Non positive return values are errors */ -#define X509_PCY_TREE_FAILURE -2 /* Failure to satisfy explicit policy */ -#define X509_PCY_TREE_INVALID -1 /* Inconsistent or invalid extensions */ -#define X509_PCY_TREE_INTERNAL 0 /* Internal error, most likely malloc */ - -/* - * Positive return values form a bit mask, all but the first are internal to - * the library and don't appear in results from X509_policy_check(). - */ -#define X509_PCY_TREE_VALID 1 /* The policy tree is valid */ -#define X509_PCY_TREE_EMPTY 2 /* The policy tree is empty */ -#define X509_PCY_TREE_EXPLICIT 4 /* Explicit policy required */ - -int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, - STACK_OF(X509) *certs, - STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags); - -void X509_policy_tree_free(X509_POLICY_TREE *tree); - -int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); -X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, - int i); - -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const - X509_POLICY_TREE - *tree); - -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const - X509_POLICY_TREE - *tree); - -int X509_policy_level_node_count(X509_POLICY_LEVEL *level); - -X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, - int i); - -const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); - -STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const - X509_POLICY_NODE - *node); -const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE - *node); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/x509err.h b/submodules/MtProtoKit/openssl/openssl/x509err.h deleted file mode 100644 index 0273853172..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/x509err.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_X509ERR_H -# define HEADER_X509ERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_X509_strings(void); - -/* - * X509 function codes. - */ -# define X509_F_ADD_CERT_DIR 100 -# define X509_F_BUILD_CHAIN 106 -# define X509_F_BY_FILE_CTRL 101 -# define X509_F_CHECK_NAME_CONSTRAINTS 149 -# define X509_F_CHECK_POLICY 145 -# define X509_F_DANE_I2D 107 -# define X509_F_DIR_CTRL 102 -# define X509_F_GET_CERT_BY_SUBJECT 103 -# define X509_F_I2D_X509_AUX 151 -# define X509_F_LOOKUP_CERTS_SK 152 -# define X509_F_NETSCAPE_SPKI_B64_DECODE 129 -# define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 -# define X509_F_NEW_DIR 153 -# define X509_F_X509AT_ADD1_ATTR 135 -# define X509_F_X509V3_ADD_EXT 104 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 -# define X509_F_X509_ATTRIBUTE_GET0_DATA 139 -# define X509_F_X509_ATTRIBUTE_SET1_DATA 138 -# define X509_F_X509_CHECK_PRIVATE_KEY 128 -# define X509_F_X509_CRL_DIFF 105 -# define X509_F_X509_CRL_METHOD_NEW 154 -# define X509_F_X509_CRL_PRINT_FP 147 -# define X509_F_X509_EXTENSION_CREATE_BY_NID 108 -# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 -# define X509_F_X509_GET_PUBKEY_PARAMETERS 110 -# define X509_F_X509_LOAD_CERT_CRL_FILE 132 -# define X509_F_X509_LOAD_CERT_FILE 111 -# define X509_F_X509_LOAD_CRL_FILE 112 -# define X509_F_X509_LOOKUP_METH_NEW 160 -# define X509_F_X509_LOOKUP_NEW 155 -# define X509_F_X509_NAME_ADD_ENTRY 113 -# define X509_F_X509_NAME_CANON 156 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 -# define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 -# define X509_F_X509_NAME_ONELINE 116 -# define X509_F_X509_NAME_PRINT 117 -# define X509_F_X509_OBJECT_NEW 150 -# define X509_F_X509_PRINT_EX_FP 118 -# define X509_F_X509_PUBKEY_DECODE 148 -# define X509_F_X509_PUBKEY_GET0 119 -# define X509_F_X509_PUBKEY_SET 120 -# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 -# define X509_F_X509_REQ_PRINT_EX 121 -# define X509_F_X509_REQ_PRINT_FP 122 -# define X509_F_X509_REQ_TO_X509 123 -# define X509_F_X509_STORE_ADD_CERT 124 -# define X509_F_X509_STORE_ADD_CRL 125 -# define X509_F_X509_STORE_ADD_LOOKUP 157 -# define X509_F_X509_STORE_CTX_GET1_ISSUER 146 -# define X509_F_X509_STORE_CTX_INIT 143 -# define X509_F_X509_STORE_CTX_NEW 142 -# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 -# define X509_F_X509_STORE_NEW 158 -# define X509_F_X509_TO_X509_REQ 126 -# define X509_F_X509_TRUST_ADD 133 -# define X509_F_X509_TRUST_SET 141 -# define X509_F_X509_VERIFY_CERT 127 -# define X509_F_X509_VERIFY_PARAM_NEW 159 - -/* - * X509 reason codes. - */ -# define X509_R_AKID_MISMATCH 110 -# define X509_R_BAD_SELECTOR 133 -# define X509_R_BAD_X509_FILETYPE 100 -# define X509_R_BASE64_DECODE_ERROR 118 -# define X509_R_CANT_CHECK_DH_KEY 114 -# define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 -# define X509_R_CRL_ALREADY_DELTA 127 -# define X509_R_CRL_VERIFY_FAILURE 131 -# define X509_R_IDP_MISMATCH 128 -# define X509_R_INVALID_ATTRIBUTES 138 -# define X509_R_INVALID_DIRECTORY 113 -# define X509_R_INVALID_FIELD_NAME 119 -# define X509_R_INVALID_TRUST 123 -# define X509_R_ISSUER_MISMATCH 129 -# define X509_R_KEY_TYPE_MISMATCH 115 -# define X509_R_KEY_VALUES_MISMATCH 116 -# define X509_R_LOADING_CERT_DIR 103 -# define X509_R_LOADING_DEFAULTS 104 -# define X509_R_METHOD_NOT_SUPPORTED 124 -# define X509_R_NAME_TOO_LONG 134 -# define X509_R_NEWER_CRL_NOT_NEWER 132 -# define X509_R_NO_CERTIFICATE_FOUND 135 -# define X509_R_NO_CERTIFICATE_OR_CRL_FOUND 136 -# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 -# define X509_R_NO_CRL_FOUND 137 -# define X509_R_NO_CRL_NUMBER 130 -# define X509_R_PUBLIC_KEY_DECODE_ERROR 125 -# define X509_R_PUBLIC_KEY_ENCODE_ERROR 126 -# define X509_R_SHOULD_RETRY 106 -# define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 -# define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 -# define X509_R_UNKNOWN_KEY_TYPE 117 -# define X509_R_UNKNOWN_NID 109 -# define X509_R_UNKNOWN_PURPOSE_ID 121 -# define X509_R_UNKNOWN_TRUST_ID 120 -# define X509_R_UNSUPPORTED_ALGORITHM 111 -# define X509_R_WRONG_LOOKUP_TYPE 112 -# define X509_R_WRONG_TYPE 122 - -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/x509v3.h b/submodules/MtProtoKit/openssl/openssl/x509v3.h deleted file mode 100644 index 6c6eca38a5..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/x509v3.h +++ /dev/null @@ -1,937 +0,0 @@ -/* - * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_X509V3_H -# define HEADER_X509V3_H - -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Forward reference */ -struct v3_ext_method; -struct v3_ext_ctx; - -/* Useful typedefs */ - -typedef void *(*X509V3_EXT_NEW)(void); -typedef void (*X509V3_EXT_FREE) (void *); -typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); -typedef int (*X509V3_EXT_I2D) (void *, unsigned char **); -typedef STACK_OF(CONF_VALUE) * - (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, - STACK_OF(CONF_VALUE) *extlist); -typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method, - struct v3_ext_ctx *ctx, - STACK_OF(CONF_VALUE) *values); -typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method, - void *ext); -typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method, - struct v3_ext_ctx *ctx, const char *str); -typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext, - BIO *out, int indent); -typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method, - struct v3_ext_ctx *ctx, const char *str); - -/* V3 extension structure */ - -struct v3_ext_method { - int ext_nid; - int ext_flags; -/* If this is set the following four fields are ignored */ - ASN1_ITEM_EXP *it; -/* Old style ASN1 calls */ - X509V3_EXT_NEW ext_new; - X509V3_EXT_FREE ext_free; - X509V3_EXT_D2I d2i; - X509V3_EXT_I2D i2d; -/* The following pair is used for string extensions */ - X509V3_EXT_I2S i2s; - X509V3_EXT_S2I s2i; -/* The following pair is used for multi-valued extensions */ - X509V3_EXT_I2V i2v; - X509V3_EXT_V2I v2i; -/* The following are used for raw extensions */ - X509V3_EXT_I2R i2r; - X509V3_EXT_R2I r2i; - void *usr_data; /* Any extension specific data */ -}; - -typedef struct X509V3_CONF_METHOD_st { - char *(*get_string) (void *db, const char *section, const char *value); - STACK_OF(CONF_VALUE) *(*get_section) (void *db, const char *section); - void (*free_string) (void *db, char *string); - void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); -} X509V3_CONF_METHOD; - -/* Context specific info */ -struct v3_ext_ctx { -# define CTX_TEST 0x1 -# define X509V3_CTX_REPLACE 0x2 - int flags; - X509 *issuer_cert; - X509 *subject_cert; - X509_REQ *subject_req; - X509_CRL *crl; - X509V3_CONF_METHOD *db_meth; - void *db; -/* Maybe more here */ -}; - -typedef struct v3_ext_method X509V3_EXT_METHOD; - -DEFINE_STACK_OF(X509V3_EXT_METHOD) - -/* ext_flags values */ -# define X509V3_EXT_DYNAMIC 0x1 -# define X509V3_EXT_CTX_DEP 0x2 -# define X509V3_EXT_MULTILINE 0x4 - -typedef BIT_STRING_BITNAME ENUMERATED_NAMES; - -typedef struct BASIC_CONSTRAINTS_st { - int ca; - ASN1_INTEGER *pathlen; -} BASIC_CONSTRAINTS; - -typedef struct PKEY_USAGE_PERIOD_st { - ASN1_GENERALIZEDTIME *notBefore; - ASN1_GENERALIZEDTIME *notAfter; -} PKEY_USAGE_PERIOD; - -typedef struct otherName_st { - ASN1_OBJECT *type_id; - ASN1_TYPE *value; -} OTHERNAME; - -typedef struct EDIPartyName_st { - ASN1_STRING *nameAssigner; - ASN1_STRING *partyName; -} EDIPARTYNAME; - -typedef struct GENERAL_NAME_st { -# define GEN_OTHERNAME 0 -# define GEN_EMAIL 1 -# define GEN_DNS 2 -# define GEN_X400 3 -# define GEN_DIRNAME 4 -# define GEN_EDIPARTY 5 -# define GEN_URI 6 -# define GEN_IPADD 7 -# define GEN_RID 8 - int type; - union { - char *ptr; - OTHERNAME *otherName; /* otherName */ - ASN1_IA5STRING *rfc822Name; - ASN1_IA5STRING *dNSName; - ASN1_TYPE *x400Address; - X509_NAME *directoryName; - EDIPARTYNAME *ediPartyName; - ASN1_IA5STRING *uniformResourceIdentifier; - ASN1_OCTET_STRING *iPAddress; - ASN1_OBJECT *registeredID; - /* Old names */ - ASN1_OCTET_STRING *ip; /* iPAddress */ - X509_NAME *dirn; /* dirn */ - ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, - * uniformResourceIdentifier */ - ASN1_OBJECT *rid; /* registeredID */ - ASN1_TYPE *other; /* x400Address */ - } d; -} GENERAL_NAME; - -typedef struct ACCESS_DESCRIPTION_st { - ASN1_OBJECT *method; - GENERAL_NAME *location; -} ACCESS_DESCRIPTION; - -typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; - -typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; - -typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; - -DEFINE_STACK_OF(GENERAL_NAME) -typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; -DEFINE_STACK_OF(GENERAL_NAMES) - -DEFINE_STACK_OF(ACCESS_DESCRIPTION) - -typedef struct DIST_POINT_NAME_st { - int type; - union { - GENERAL_NAMES *fullname; - STACK_OF(X509_NAME_ENTRY) *relativename; - } name; -/* If relativename then this contains the full distribution point name */ - X509_NAME *dpname; -} DIST_POINT_NAME; -/* All existing reasons */ -# define CRLDP_ALL_REASONS 0x807f - -# define CRL_REASON_NONE -1 -# define CRL_REASON_UNSPECIFIED 0 -# define CRL_REASON_KEY_COMPROMISE 1 -# define CRL_REASON_CA_COMPROMISE 2 -# define CRL_REASON_AFFILIATION_CHANGED 3 -# define CRL_REASON_SUPERSEDED 4 -# define CRL_REASON_CESSATION_OF_OPERATION 5 -# define CRL_REASON_CERTIFICATE_HOLD 6 -# define CRL_REASON_REMOVE_FROM_CRL 8 -# define CRL_REASON_PRIVILEGE_WITHDRAWN 9 -# define CRL_REASON_AA_COMPROMISE 10 - -struct DIST_POINT_st { - DIST_POINT_NAME *distpoint; - ASN1_BIT_STRING *reasons; - GENERAL_NAMES *CRLissuer; - int dp_reasons; -}; - -typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; - -DEFINE_STACK_OF(DIST_POINT) - -struct AUTHORITY_KEYID_st { - ASN1_OCTET_STRING *keyid; - GENERAL_NAMES *issuer; - ASN1_INTEGER *serial; -}; - -/* Strong extranet structures */ - -typedef struct SXNET_ID_st { - ASN1_INTEGER *zone; - ASN1_OCTET_STRING *user; -} SXNETID; - -DEFINE_STACK_OF(SXNETID) - -typedef struct SXNET_st { - ASN1_INTEGER *version; - STACK_OF(SXNETID) *ids; -} SXNET; - -typedef struct NOTICEREF_st { - ASN1_STRING *organization; - STACK_OF(ASN1_INTEGER) *noticenos; -} NOTICEREF; - -typedef struct USERNOTICE_st { - NOTICEREF *noticeref; - ASN1_STRING *exptext; -} USERNOTICE; - -typedef struct POLICYQUALINFO_st { - ASN1_OBJECT *pqualid; - union { - ASN1_IA5STRING *cpsuri; - USERNOTICE *usernotice; - ASN1_TYPE *other; - } d; -} POLICYQUALINFO; - -DEFINE_STACK_OF(POLICYQUALINFO) - -typedef struct POLICYINFO_st { - ASN1_OBJECT *policyid; - STACK_OF(POLICYQUALINFO) *qualifiers; -} POLICYINFO; - -typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; - -DEFINE_STACK_OF(POLICYINFO) - -typedef struct POLICY_MAPPING_st { - ASN1_OBJECT *issuerDomainPolicy; - ASN1_OBJECT *subjectDomainPolicy; -} POLICY_MAPPING; - -DEFINE_STACK_OF(POLICY_MAPPING) - -typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; - -typedef struct GENERAL_SUBTREE_st { - GENERAL_NAME *base; - ASN1_INTEGER *minimum; - ASN1_INTEGER *maximum; -} GENERAL_SUBTREE; - -DEFINE_STACK_OF(GENERAL_SUBTREE) - -struct NAME_CONSTRAINTS_st { - STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; - STACK_OF(GENERAL_SUBTREE) *excludedSubtrees; -}; - -typedef struct POLICY_CONSTRAINTS_st { - ASN1_INTEGER *requireExplicitPolicy; - ASN1_INTEGER *inhibitPolicyMapping; -} POLICY_CONSTRAINTS; - -/* Proxy certificate structures, see RFC 3820 */ -typedef struct PROXY_POLICY_st { - ASN1_OBJECT *policyLanguage; - ASN1_OCTET_STRING *policy; -} PROXY_POLICY; - -typedef struct PROXY_CERT_INFO_EXTENSION_st { - ASN1_INTEGER *pcPathLengthConstraint; - PROXY_POLICY *proxyPolicy; -} PROXY_CERT_INFO_EXTENSION; - -DECLARE_ASN1_FUNCTIONS(PROXY_POLICY) -DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION) - -struct ISSUING_DIST_POINT_st { - DIST_POINT_NAME *distpoint; - int onlyuser; - int onlyCA; - ASN1_BIT_STRING *onlysomereasons; - int indirectCRL; - int onlyattr; -}; - -/* Values in idp_flags field */ -/* IDP present */ -# define IDP_PRESENT 0x1 -/* IDP values inconsistent */ -# define IDP_INVALID 0x2 -/* onlyuser true */ -# define IDP_ONLYUSER 0x4 -/* onlyCA true */ -# define IDP_ONLYCA 0x8 -/* onlyattr true */ -# define IDP_ONLYATTR 0x10 -/* indirectCRL true */ -# define IDP_INDIRECT 0x20 -/* onlysomereasons present */ -# define IDP_REASONS 0x40 - -# define X509V3_conf_err(val) ERR_add_error_data(6, \ - "section:", (val)->section, \ - ",name:", (val)->name, ",value:", (val)->value) - -# define X509V3_set_ctx_test(ctx) \ - X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) -# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; - -# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ - 0,0,0,0, \ - 0,0, \ - (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \ - (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \ - NULL, NULL, \ - table} - -# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \ - 0,0,0,0, \ - (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \ - (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \ - 0,0,0,0, \ - NULL} - -# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - -/* X509_PURPOSE stuff */ - -# define EXFLAG_BCONS 0x1 -# define EXFLAG_KUSAGE 0x2 -# define EXFLAG_XKUSAGE 0x4 -# define EXFLAG_NSCERT 0x8 - -# define EXFLAG_CA 0x10 -/* Really self issued not necessarily self signed */ -# define EXFLAG_SI 0x20 -# define EXFLAG_V1 0x40 -# define EXFLAG_INVALID 0x80 -/* EXFLAG_SET is set to indicate that some values have been precomputed */ -# define EXFLAG_SET 0x100 -# define EXFLAG_CRITICAL 0x200 -# define EXFLAG_PROXY 0x400 - -# define EXFLAG_INVALID_POLICY 0x800 -# define EXFLAG_FRESHEST 0x1000 -/* Self signed */ -# define EXFLAG_SS 0x2000 - -# define KU_DIGITAL_SIGNATURE 0x0080 -# define KU_NON_REPUDIATION 0x0040 -# define KU_KEY_ENCIPHERMENT 0x0020 -# define KU_DATA_ENCIPHERMENT 0x0010 -# define KU_KEY_AGREEMENT 0x0008 -# define KU_KEY_CERT_SIGN 0x0004 -# define KU_CRL_SIGN 0x0002 -# define KU_ENCIPHER_ONLY 0x0001 -# define KU_DECIPHER_ONLY 0x8000 - -# define NS_SSL_CLIENT 0x80 -# define NS_SSL_SERVER 0x40 -# define NS_SMIME 0x20 -# define NS_OBJSIGN 0x10 -# define NS_SSL_CA 0x04 -# define NS_SMIME_CA 0x02 -# define NS_OBJSIGN_CA 0x01 -# define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA) - -# define XKU_SSL_SERVER 0x1 -# define XKU_SSL_CLIENT 0x2 -# define XKU_SMIME 0x4 -# define XKU_CODE_SIGN 0x8 -# define XKU_SGC 0x10 -# define XKU_OCSP_SIGN 0x20 -# define XKU_TIMESTAMP 0x40 -# define XKU_DVCS 0x80 -# define XKU_ANYEKU 0x100 - -# define X509_PURPOSE_DYNAMIC 0x1 -# define X509_PURPOSE_DYNAMIC_NAME 0x2 - -typedef struct x509_purpose_st { - int purpose; - int trust; /* Default trust ID */ - int flags; - int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int); - char *name; - char *sname; - void *usr_data; -} X509_PURPOSE; - -# define X509_PURPOSE_SSL_CLIENT 1 -# define X509_PURPOSE_SSL_SERVER 2 -# define X509_PURPOSE_NS_SSL_SERVER 3 -# define X509_PURPOSE_SMIME_SIGN 4 -# define X509_PURPOSE_SMIME_ENCRYPT 5 -# define X509_PURPOSE_CRL_SIGN 6 -# define X509_PURPOSE_ANY 7 -# define X509_PURPOSE_OCSP_HELPER 8 -# define X509_PURPOSE_TIMESTAMP_SIGN 9 - -# define X509_PURPOSE_MIN 1 -# define X509_PURPOSE_MAX 9 - -/* Flags for X509V3_EXT_print() */ - -# define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) -/* Return error for unknown extensions */ -# define X509V3_EXT_DEFAULT 0 -/* Print error for unknown extensions */ -# define X509V3_EXT_ERROR_UNKNOWN (1L << 16) -/* ASN1 parse unknown extensions */ -# define X509V3_EXT_PARSE_UNKNOWN (2L << 16) -/* BIO_dump unknown extensions */ -# define X509V3_EXT_DUMP_UNKNOWN (3L << 16) - -/* Flags for X509V3_add1_i2d */ - -# define X509V3_ADD_OP_MASK 0xfL -# define X509V3_ADD_DEFAULT 0L -# define X509V3_ADD_APPEND 1L -# define X509V3_ADD_REPLACE 2L -# define X509V3_ADD_REPLACE_EXISTING 3L -# define X509V3_ADD_KEEP_EXISTING 4L -# define X509V3_ADD_DELETE 5L -# define X509V3_ADD_SILENT 0x10 - -DEFINE_STACK_OF(X509_PURPOSE) - -DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) - -DECLARE_ASN1_FUNCTIONS(SXNET) -DECLARE_ASN1_FUNCTIONS(SXNETID) - -int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen); -int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user, - int userlen); -int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, const char *user, - int userlen); - -ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, const char *zone); -ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone); -ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone); - -DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) - -DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) - -DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) -GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a); -int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); - -ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, - STACK_OF(CONF_VALUE) *nval); -STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, - ASN1_BIT_STRING *bits, - STACK_OF(CONF_VALUE) *extlist); -char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); -ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, const char *str); - -STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, - GENERAL_NAME *gen, - STACK_OF(CONF_VALUE) *ret); -int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen); - -DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES) - -STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, - GENERAL_NAMES *gen, - STACK_OF(CONF_VALUE) *extlist); -GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); - -DECLARE_ASN1_FUNCTIONS(OTHERNAME) -DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME) -int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b); -void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value); -void *GENERAL_NAME_get0_value(const GENERAL_NAME *a, int *ptype); -int GENERAL_NAME_set0_othername(GENERAL_NAME *gen, - ASN1_OBJECT *oid, ASN1_TYPE *value); -int GENERAL_NAME_get0_otherName(const GENERAL_NAME *gen, - ASN1_OBJECT **poid, ASN1_TYPE **pvalue); - -char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, - const ASN1_OCTET_STRING *ia5); -ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, const char *str); - -DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE) -int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION *a); - -DECLARE_ASN1_ALLOC_FUNCTIONS(TLS_FEATURE) - -DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES) -DECLARE_ASN1_FUNCTIONS(POLICYINFO) -DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO) -DECLARE_ASN1_FUNCTIONS(USERNOTICE) -DECLARE_ASN1_FUNCTIONS(NOTICEREF) - -DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS) -DECLARE_ASN1_FUNCTIONS(DIST_POINT) -DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) -DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) - -int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname); - -int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); -int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc); - -DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) -DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) - -DECLARE_ASN1_ITEM(POLICY_MAPPING) -DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING) -DECLARE_ASN1_ITEM(POLICY_MAPPINGS) - -DECLARE_ASN1_ITEM(GENERAL_SUBTREE) -DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE) - -DECLARE_ASN1_ITEM(NAME_CONSTRAINTS) -DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS) - -DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS) -DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS) - -GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, - const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, int gen_type, - const char *value, int is_nc); - -# ifdef HEADER_CONF_H -GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, CONF_VALUE *cnf); -GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, - const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, CONF_VALUE *cnf, - int is_nc); -void X509V3_conf_free(CONF_VALUE *val); - -X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, - const char *value); -X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name, - const char *value); -int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section, - STACK_OF(X509_EXTENSION) **sk); -int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, - X509 *cert); -int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, - X509_REQ *req); -int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, - X509_CRL *crl); - -X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, - X509V3_CTX *ctx, int ext_nid, - const char *value); -X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - const char *name, const char *value); -int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - const char *section, X509 *cert); -int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - const char *section, X509_REQ *req); -int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - const char *section, X509_CRL *crl); - -int X509V3_add_value_bool_nf(const char *name, int asn1_bool, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool); -int X509V3_get_value_int(const CONF_VALUE *value, ASN1_INTEGER **aint); -void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); -void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash); -# endif - -char *X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section); -STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const char *section); -void X509V3_string_free(X509V3_CTX *ctx, char *str); -void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); -void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, - X509_REQ *req, X509_CRL *crl, int flags); - -int X509V3_add_value(const char *name, const char *value, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_add_value_uchar(const char *name, const unsigned char *value, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_add_value_bool(const char *name, int asn1_bool, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_add_value_int(const char *name, const ASN1_INTEGER *aint, - STACK_OF(CONF_VALUE) **extlist); -char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint); -ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value); -char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint); -char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, - const ASN1_ENUMERATED *aint); -int X509V3_EXT_add(X509V3_EXT_METHOD *ext); -int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); -int X509V3_EXT_add_alias(int nid_to, int nid_from); -void X509V3_EXT_cleanup(void); - -const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); -const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); -int X509V3_add_standard_extensions(void); -STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); -void *X509V3_EXT_d2i(X509_EXTENSION *ext); -void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit, - int *idx); - -X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); -int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, - int crit, unsigned long flags); - -#if OPENSSL_API_COMPAT < 0x10100000L -/* The new declarations are in crypto.h, but the old ones were here. */ -# define hex_to_string OPENSSL_buf2hexstr -# define string_to_hex OPENSSL_hexstr2buf -#endif - -void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, - int ml); -int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, - int indent); -#ifndef OPENSSL_NO_STDIO -int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); -#endif -int X509V3_extensions_print(BIO *out, const char *title, - const STACK_OF(X509_EXTENSION) *exts, - unsigned long flag, int indent); - -int X509_check_ca(X509 *x); -int X509_check_purpose(X509 *x, int id, int ca); -int X509_supported_extension(X509_EXTENSION *ex); -int X509_PURPOSE_set(int *p, int purpose); -int X509_check_issued(X509 *issuer, X509 *subject); -int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid); -void X509_set_proxy_flag(X509 *x); -void X509_set_proxy_pathlen(X509 *x, long l); -long X509_get_proxy_pathlen(X509 *x); - -uint32_t X509_get_extension_flags(X509 *x); -uint32_t X509_get_key_usage(X509 *x); -uint32_t X509_get_extended_key_usage(X509 *x); -const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x); -const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x); -const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x); -const ASN1_INTEGER *X509_get0_authority_serial(X509 *x); - -int X509_PURPOSE_get_count(void); -X509_PURPOSE *X509_PURPOSE_get0(int idx); -int X509_PURPOSE_get_by_sname(const char *sname); -int X509_PURPOSE_get_by_id(int id); -int X509_PURPOSE_add(int id, int trust, int flags, - int (*ck) (const X509_PURPOSE *, const X509 *, int), - const char *name, const char *sname, void *arg); -char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp); -char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp); -int X509_PURPOSE_get_trust(const X509_PURPOSE *xp); -void X509_PURPOSE_cleanup(void); -int X509_PURPOSE_get_id(const X509_PURPOSE *); - -STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); -STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); -void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); -STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); -/* Flags for X509_check_* functions */ - -/* - * Always check subject name for host match even if subject alt names present - */ -# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1 -/* Disable wildcard matching for dnsName fields and common name. */ -# define X509_CHECK_FLAG_NO_WILDCARDS 0x2 -/* Wildcards must not match a partial label. */ -# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 -/* Allow (non-partial) wildcards to match multiple labels. */ -# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8 -/* Constraint verifier subdomain patterns to match a single labels. */ -# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 -/* Never check the subject CN */ -# define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT 0x20 -/* - * Match reference identifiers starting with "." to any sub-domain. - * This is a non-public flag, turned on implicitly when the subject - * reference identity is a DNS name. - */ -# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000 - -int X509_check_host(X509 *x, const char *chk, size_t chklen, - unsigned int flags, char **peername); -int X509_check_email(X509 *x, const char *chk, size_t chklen, - unsigned int flags); -int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, - unsigned int flags); -int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); - -ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); -ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); -int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, - unsigned long chtype); - -void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); -DEFINE_STACK_OF(X509_POLICY_NODE) - -#ifndef OPENSSL_NO_RFC3779 -typedef struct ASRange_st { - ASN1_INTEGER *min, *max; -} ASRange; - -# define ASIdOrRange_id 0 -# define ASIdOrRange_range 1 - -typedef struct ASIdOrRange_st { - int type; - union { - ASN1_INTEGER *id; - ASRange *range; - } u; -} ASIdOrRange; - -typedef STACK_OF(ASIdOrRange) ASIdOrRanges; -DEFINE_STACK_OF(ASIdOrRange) - -# define ASIdentifierChoice_inherit 0 -# define ASIdentifierChoice_asIdsOrRanges 1 - -typedef struct ASIdentifierChoice_st { - int type; - union { - ASN1_NULL *inherit; - ASIdOrRanges *asIdsOrRanges; - } u; -} ASIdentifierChoice; - -typedef struct ASIdentifiers_st { - ASIdentifierChoice *asnum, *rdi; -} ASIdentifiers; - -DECLARE_ASN1_FUNCTIONS(ASRange) -DECLARE_ASN1_FUNCTIONS(ASIdOrRange) -DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice) -DECLARE_ASN1_FUNCTIONS(ASIdentifiers) - -typedef struct IPAddressRange_st { - ASN1_BIT_STRING *min, *max; -} IPAddressRange; - -# define IPAddressOrRange_addressPrefix 0 -# define IPAddressOrRange_addressRange 1 - -typedef struct IPAddressOrRange_st { - int type; - union { - ASN1_BIT_STRING *addressPrefix; - IPAddressRange *addressRange; - } u; -} IPAddressOrRange; - -typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; -DEFINE_STACK_OF(IPAddressOrRange) - -# define IPAddressChoice_inherit 0 -# define IPAddressChoice_addressesOrRanges 1 - -typedef struct IPAddressChoice_st { - int type; - union { - ASN1_NULL *inherit; - IPAddressOrRanges *addressesOrRanges; - } u; -} IPAddressChoice; - -typedef struct IPAddressFamily_st { - ASN1_OCTET_STRING *addressFamily; - IPAddressChoice *ipAddressChoice; -} IPAddressFamily; - -typedef STACK_OF(IPAddressFamily) IPAddrBlocks; -DEFINE_STACK_OF(IPAddressFamily) - -DECLARE_ASN1_FUNCTIONS(IPAddressRange) -DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) -DECLARE_ASN1_FUNCTIONS(IPAddressChoice) -DECLARE_ASN1_FUNCTIONS(IPAddressFamily) - -/* - * API tag for elements of the ASIdentifer SEQUENCE. - */ -# define V3_ASID_ASNUM 0 -# define V3_ASID_RDI 1 - -/* - * AFI values, assigned by IANA. It'd be nice to make the AFI - * handling code totally generic, but there are too many little things - * that would need to be defined for other address families for it to - * be worth the trouble. - */ -# define IANA_AFI_IPV4 1 -# define IANA_AFI_IPV6 2 - -/* - * Utilities to construct and extract values from RFC3779 extensions, - * since some of the encodings (particularly for IP address prefixes - * and ranges) are a bit tedious to work with directly. - */ -int X509v3_asid_add_inherit(ASIdentifiers *asid, int which); -int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which, - ASN1_INTEGER *min, ASN1_INTEGER *max); -int X509v3_addr_add_inherit(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi); -int X509v3_addr_add_prefix(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi, - unsigned char *a, const int prefixlen); -int X509v3_addr_add_range(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi, - unsigned char *min, unsigned char *max); -unsigned X509v3_addr_get_afi(const IPAddressFamily *f); -int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, - unsigned char *min, unsigned char *max, - const int length); - -/* - * Canonical forms. - */ -int X509v3_asid_is_canonical(ASIdentifiers *asid); -int X509v3_addr_is_canonical(IPAddrBlocks *addr); -int X509v3_asid_canonize(ASIdentifiers *asid); -int X509v3_addr_canonize(IPAddrBlocks *addr); - -/* - * Tests for inheritance and containment. - */ -int X509v3_asid_inherits(ASIdentifiers *asid); -int X509v3_addr_inherits(IPAddrBlocks *addr); -int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); -int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); - -/* - * Check whether RFC 3779 extensions nest properly in chains. - */ -int X509v3_asid_validate_path(X509_STORE_CTX *); -int X509v3_addr_validate_path(X509_STORE_CTX *); -int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain, - ASIdentifiers *ext, - int allow_inheritance); -int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, - IPAddrBlocks *ext, int allow_inheritance); - -#endif /* OPENSSL_NO_RFC3779 */ - -DEFINE_STACK_OF(ASN1_STRING) - -/* - * Admission Syntax - */ -typedef struct NamingAuthority_st NAMING_AUTHORITY; -typedef struct ProfessionInfo_st PROFESSION_INFO; -typedef struct Admissions_st ADMISSIONS; -typedef struct AdmissionSyntax_st ADMISSION_SYNTAX; -DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY) -DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO) -DECLARE_ASN1_FUNCTIONS(ADMISSIONS) -DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX) -DEFINE_STACK_OF(ADMISSIONS) -DEFINE_STACK_OF(PROFESSION_INFO) -typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS; - -const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId( - const NAMING_AUTHORITY *n); -const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL( - const NAMING_AUTHORITY *n); -const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText( - const NAMING_AUTHORITY *n); -void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n, - ASN1_OBJECT* namingAuthorityId); -void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n, - ASN1_IA5STRING* namingAuthorityUrl); -void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n, - ASN1_STRING* namingAuthorityText); - -const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority( - const ADMISSION_SYNTAX *as); -void ADMISSION_SYNTAX_set0_admissionAuthority( - ADMISSION_SYNTAX *as, GENERAL_NAME *aa); -const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions( - const ADMISSION_SYNTAX *as); -void ADMISSION_SYNTAX_set0_contentsOfAdmissions( - ADMISSION_SYNTAX *as, STACK_OF(ADMISSIONS) *a); -const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a); -void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa); -const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a); -void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na); -const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a); -void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi); -const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo( - const PROFESSION_INFO *pi); -void PROFESSION_INFO_set0_addProfessionInfo( - PROFESSION_INFO *pi, ASN1_OCTET_STRING *aos); -const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority( - const PROFESSION_INFO *pi); -void PROFESSION_INFO_set0_namingAuthority( - PROFESSION_INFO *pi, NAMING_AUTHORITY *na); -const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems( - const PROFESSION_INFO *pi); -void PROFESSION_INFO_set0_professionItems( - PROFESSION_INFO *pi, STACK_OF(ASN1_STRING) *as); -const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs( - const PROFESSION_INFO *pi); -void PROFESSION_INFO_set0_professionOIDs( - PROFESSION_INFO *pi, STACK_OF(ASN1_OBJECT) *po); -const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber( - const PROFESSION_INFO *pi); -void PROFESSION_INFO_set0_registrationNumber( - PROFESSION_INFO *pi, ASN1_PRINTABLESTRING *rn); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/submodules/MtProtoKit/openssl/openssl/x509v3err.h b/submodules/MtProtoKit/openssl/openssl/x509v3err.h deleted file mode 100644 index 5f25442f12..0000000000 --- a/submodules/MtProtoKit/openssl/openssl/x509v3err.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_X509V3ERR_H -# define HEADER_X509V3ERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_X509V3_strings(void); - -/* - * X509V3 function codes. - */ -# define X509V3_F_A2I_GENERAL_NAME 164 -# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 166 -# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 -# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 -# define X509V3_F_BIGNUM_TO_STRING 167 -# define X509V3_F_COPY_EMAIL 122 -# define X509V3_F_COPY_ISSUER 123 -# define X509V3_F_DO_DIRNAME 144 -# define X509V3_F_DO_EXT_I2D 135 -# define X509V3_F_DO_EXT_NCONF 151 -# define X509V3_F_GNAMES_FROM_SECTNAME 156 -# define X509V3_F_I2S_ASN1_ENUMERATED 121 -# define X509V3_F_I2S_ASN1_IA5STRING 149 -# define X509V3_F_I2S_ASN1_INTEGER 120 -# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 -# define X509V3_F_LEVEL_ADD_NODE 168 -# define X509V3_F_NOTICE_SECTION 132 -# define X509V3_F_NREF_NOS 133 -# define X509V3_F_POLICY_CACHE_CREATE 169 -# define X509V3_F_POLICY_CACHE_NEW 170 -# define X509V3_F_POLICY_DATA_NEW 171 -# define X509V3_F_POLICY_SECTION 131 -# define X509V3_F_PROCESS_PCI_VALUE 150 -# define X509V3_F_R2I_CERTPOL 130 -# define X509V3_F_R2I_PCI 155 -# define X509V3_F_S2I_ASN1_IA5STRING 100 -# define X509V3_F_S2I_ASN1_INTEGER 108 -# define X509V3_F_S2I_ASN1_OCTET_STRING 112 -# define X509V3_F_S2I_SKEY_ID 115 -# define X509V3_F_SET_DIST_POINT_NAME 158 -# define X509V3_F_SXNET_ADD_ID_ASC 125 -# define X509V3_F_SXNET_ADD_ID_INTEGER 126 -# define X509V3_F_SXNET_ADD_ID_ULONG 127 -# define X509V3_F_SXNET_GET_ID_ASC 128 -# define X509V3_F_SXNET_GET_ID_ULONG 129 -# define X509V3_F_TREE_INIT 172 -# define X509V3_F_V2I_ASIDENTIFIERS 163 -# define X509V3_F_V2I_ASN1_BIT_STRING 101 -# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 -# define X509V3_F_V2I_AUTHORITY_KEYID 119 -# define X509V3_F_V2I_BASIC_CONSTRAINTS 102 -# define X509V3_F_V2I_CRLD 134 -# define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 -# define X509V3_F_V2I_GENERAL_NAMES 118 -# define X509V3_F_V2I_GENERAL_NAME_EX 117 -# define X509V3_F_V2I_IDP 157 -# define X509V3_F_V2I_IPADDRBLOCKS 159 -# define X509V3_F_V2I_ISSUER_ALT 153 -# define X509V3_F_V2I_NAME_CONSTRAINTS 147 -# define X509V3_F_V2I_POLICY_CONSTRAINTS 146 -# define X509V3_F_V2I_POLICY_MAPPINGS 145 -# define X509V3_F_V2I_SUBJECT_ALT 154 -# define X509V3_F_V2I_TLS_FEATURE 165 -# define X509V3_F_V3_GENERIC_EXTENSION 116 -# define X509V3_F_X509V3_ADD1_I2D 140 -# define X509V3_F_X509V3_ADD_VALUE 105 -# define X509V3_F_X509V3_EXT_ADD 104 -# define X509V3_F_X509V3_EXT_ADD_ALIAS 106 -# define X509V3_F_X509V3_EXT_I2D 136 -# define X509V3_F_X509V3_EXT_NCONF 152 -# define X509V3_F_X509V3_GET_SECTION 142 -# define X509V3_F_X509V3_GET_STRING 143 -# define X509V3_F_X509V3_GET_VALUE_BOOL 110 -# define X509V3_F_X509V3_PARSE_LIST 109 -# define X509V3_F_X509_PURPOSE_ADD 137 -# define X509V3_F_X509_PURPOSE_SET 141 - -/* - * X509V3 reason codes. - */ -# define X509V3_R_BAD_IP_ADDRESS 118 -# define X509V3_R_BAD_OBJECT 119 -# define X509V3_R_BN_DEC2BN_ERROR 100 -# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101 -# define X509V3_R_DIRNAME_ERROR 149 -# define X509V3_R_DISTPOINT_ALREADY_SET 160 -# define X509V3_R_DUPLICATE_ZONE_ID 133 -# define X509V3_R_ERROR_CONVERTING_ZONE 131 -# define X509V3_R_ERROR_CREATING_EXTENSION 144 -# define X509V3_R_ERROR_IN_EXTENSION 128 -# define X509V3_R_EXPECTED_A_SECTION_NAME 137 -# define X509V3_R_EXTENSION_EXISTS 145 -# define X509V3_R_EXTENSION_NAME_ERROR 115 -# define X509V3_R_EXTENSION_NOT_FOUND 102 -# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 -# define X509V3_R_EXTENSION_VALUE_ERROR 116 -# define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151 -# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152 -# define X509V3_R_INVALID_ASNUMBER 162 -# define X509V3_R_INVALID_ASRANGE 163 -# define X509V3_R_INVALID_BOOLEAN_STRING 104 -# define X509V3_R_INVALID_EXTENSION_STRING 105 -# define X509V3_R_INVALID_INHERITANCE 165 -# define X509V3_R_INVALID_IPADDRESS 166 -# define X509V3_R_INVALID_MULTIPLE_RDNS 161 -# define X509V3_R_INVALID_NAME 106 -# define X509V3_R_INVALID_NULL_ARGUMENT 107 -# define X509V3_R_INVALID_NULL_NAME 108 -# define X509V3_R_INVALID_NULL_VALUE 109 -# define X509V3_R_INVALID_NUMBER 140 -# define X509V3_R_INVALID_NUMBERS 141 -# define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 -# define X509V3_R_INVALID_OPTION 138 -# define X509V3_R_INVALID_POLICY_IDENTIFIER 134 -# define X509V3_R_INVALID_PROXY_POLICY_SETTING 153 -# define X509V3_R_INVALID_PURPOSE 146 -# define X509V3_R_INVALID_SAFI 164 -# define X509V3_R_INVALID_SECTION 135 -# define X509V3_R_INVALID_SYNTAX 143 -# define X509V3_R_ISSUER_DECODE_ERROR 126 -# define X509V3_R_MISSING_VALUE 124 -# define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 -# define X509V3_R_NO_CONFIG_DATABASE 136 -# define X509V3_R_NO_ISSUER_CERTIFICATE 121 -# define X509V3_R_NO_ISSUER_DETAILS 127 -# define X509V3_R_NO_POLICY_IDENTIFIER 139 -# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154 -# define X509V3_R_NO_PUBLIC_KEY 114 -# define X509V3_R_NO_SUBJECT_DETAILS 125 -# define X509V3_R_OPERATION_NOT_DEFINED 148 -# define X509V3_R_OTHERNAME_ERROR 147 -# define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED 155 -# define X509V3_R_POLICY_PATH_LENGTH 156 -# define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED 157 -# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159 -# define X509V3_R_SECTION_NOT_FOUND 150 -# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 -# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 -# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 -# define X509V3_R_UNKNOWN_EXTENSION 129 -# define X509V3_R_UNKNOWN_EXTENSION_NAME 130 -# define X509V3_R_UNKNOWN_OPTION 120 -# define X509V3_R_UNSUPPORTED_OPTION 117 -# define X509V3_R_UNSUPPORTED_TYPE 167 -# define X509V3_R_USER_TOO_LONG 132 - -#endif diff --git a/submodules/MtProtoKit/thirdparty/AFNetworking/AFHTTPRequestOperation.h b/submodules/MtProtoKit/thirdparty/AFNetworking/AFHTTPRequestOperation.h index 8c74d2c002..6859124d1a 100644 --- a/submodules/MtProtoKit/thirdparty/AFNetworking/AFHTTPRequestOperation.h +++ b/submodules/MtProtoKit/thirdparty/AFNetworking/AFHTTPRequestOperation.h @@ -24,13 +24,8 @@ #import -#if defined(MtProtoKitDynamicFramework) -# import -#elif defined(MtProtoKitMacFramework) -# import -#else -# import -#endif +#import + /** `AFHTTPRequestOperation` is a subclass of `AFURLConnectionOperation` for requests using the HTTP or HTTPS protocols. It encapsulates the concept of acceptable status codes and content types, which determine the success or failure of a request. diff --git a/submodules/OpenSSLEncryptionProvider/Sources/OpenSSLEncryptionProvider.m b/submodules/OpenSSLEncryptionProvider/Sources/OpenSSLEncryptionProvider.m index c66d102ff4..1acb5c69fa 100644 --- a/submodules/OpenSSLEncryptionProvider/Sources/OpenSSLEncryptionProvider.m +++ b/submodules/OpenSSLEncryptionProvider/Sources/OpenSSLEncryptionProvider.m @@ -370,6 +370,35 @@ NS_ASSUME_NONNULL_BEGIN return [[MTRsaPublicKeyImpl alloc] initWithValue:rsaKey]; } +-(NSData *)macosRSAEncrypt:(NSString *) publicKey data: (NSData *)data { + BIO *keyBio = BIO_new(BIO_s_mem()); + const char *keyData = [publicKey UTF8String]; + BIO_write(keyBio, keyData, (int)publicKey.length); + RSA *rsaKey = PEM_read_bio_RSAPublicKey(keyBio, NULL, NULL, NULL); + BIO_free(keyBio); + + BN_CTX *ctx = BN_CTX_new(); + BIGNUM *a = BN_bin2bn(data.bytes, (int)data.length, NULL); + BIGNUM *r = BN_new(); + + + + BN_mod_exp(r, a, RSA_get0_e(rsaKey), RSA_get0_n(rsaKey), ctx); + + unsigned char *res = malloc((size_t)BN_num_bytes(r)); + int resLen = BN_bn2bin(r, res); + + BN_CTX_free(ctx); + BN_free(a); + BN_free(r); + + RSA_free(rsaKey); + + NSData *result = [[NSData alloc] initWithBytesNoCopy:res length:(NSUInteger)resLen freeWhenDone:true]; + + return result; +} + @end NS_ASSUME_NONNULL_END diff --git a/submodules/PasscodeUI/BUCK b/submodules/PasscodeUI/BUCK index 2421d5404e..4ef81d0bff 100644 --- a/submodules/PasscodeUI/BUCK +++ b/submodules/PasscodeUI/BUCK @@ -21,6 +21,7 @@ static_library( "//submodules/ImageBlur:ImageBlur", "//submodules/AppBundle:AppBundle", "//submodules/PasscodeInputFieldNode:PasscodeInputFieldNode", + "//submodules/MonotonicTime:MonotonicTime", ], frameworks = [ "$SDKROOT/System/Library/Frameworks/Foundation.framework", diff --git a/submodules/PasscodeUI/Sources/PasscodeEntryControllerNode.swift b/submodules/PasscodeUI/Sources/PasscodeEntryControllerNode.swift index f5d15761d2..3503cbac78 100644 --- a/submodules/PasscodeUI/Sources/PasscodeEntryControllerNode.swift +++ b/submodules/PasscodeUI/Sources/PasscodeEntryControllerNode.swift @@ -11,6 +11,7 @@ import AccountContext import LocalAuth import AppBundle import PasscodeInputFieldNode +import MonotonicTime private let titleFont = Font.regular(20.0) private let subtitleFont = Font.regular(15.0) @@ -194,7 +195,14 @@ final class PasscodeEntryControllerNode: ASDisplayNode { private func shouldWaitBeforeNextAttempt() -> Bool { if let attempts = self.invalidAttempts { if attempts.count >= 6 { - if Int32(CFAbsoluteTimeGetCurrent()) - attempts.timestamp < waitInterval { + var bootTimestamp: Int32 = 0 + let uptime = getDeviceUptimeSeconds(&bootTimestamp) + + if attempts.bootTimestamp != bootTimestamp { + return true + } + + if uptime - attempts.uptime < waitInterval { return true } else { return false @@ -215,10 +223,13 @@ final class PasscodeEntryControllerNode: ASDisplayNode { text = NSAttributedString(string: self.strings.PasscodeSettings_TryAgainIn1Minute, font: subtitleFont, textColor: .white) self.timer?.invalidate() - let timer = SwiftSignalKit.Timer(timeout: Double(attempts.timestamp + waitInterval - Int32(CFAbsoluteTimeGetCurrent())), repeat: false, completion: { [weak self] in + let timer = SwiftSignalKit.Timer(timeout: 1.0, repeat: true, completion: { [weak self] in if let strongSelf = self { - strongSelf.timer = nil - strongSelf.updateInvalidAttempts(strongSelf.invalidAttempts, animated: true) + if !strongSelf.shouldWaitBeforeNextAttempt() { + strongSelf.updateInvalidAttempts(strongSelf.invalidAttempts, animated: true) + strongSelf.timer?.invalidate() + strongSelf.timer = nil + } } }, queue: Queue.mainQueue()) self.timer = timer diff --git a/submodules/PasswordSetupUI/Resources/TwoFactorSetupMonkeyCloseAndPeek.tgs b/submodules/PasswordSetupUI/Resources/TwoFactorSetupMonkeyCloseAndPeek.tgs new file mode 100644 index 0000000000..c6f6cd07ba Binary files /dev/null and b/submodules/PasswordSetupUI/Resources/TwoFactorSetupMonkeyCloseAndPeek.tgs differ diff --git a/submodules/PasswordSetupUI/Resources/TwoFactorSetupMonkeyCloseAndPeekToIdle.tgs b/submodules/PasswordSetupUI/Resources/TwoFactorSetupMonkeyCloseAndPeekToIdle.tgs new file mode 100644 index 0000000000..68514fb029 Binary files /dev/null and b/submodules/PasswordSetupUI/Resources/TwoFactorSetupMonkeyCloseAndPeekToIdle.tgs differ diff --git a/submodules/PasswordSetupUI/Sources/SetupTwoStepVerificationControllerNode.swift b/submodules/PasswordSetupUI/Sources/SetupTwoStepVerificationControllerNode.swift index 77cbe23d0e..b1eb0635ea 100644 --- a/submodules/PasswordSetupUI/Sources/SetupTwoStepVerificationControllerNode.swift +++ b/submodules/PasswordSetupUI/Sources/SetupTwoStepVerificationControllerNode.swift @@ -272,11 +272,7 @@ final class SetupTwoStepVerificationControllerNode: ViewControllerTracingNode { var insets = state.layout.layout.insets(options: [.statusBar]) let visibleInsets = state.layout.layout.insets(options: [.statusBar, .input]) if let inputHeight = state.layout.layout.inputHeight { - if inputHeight.isEqual(to: state.layout.layout.standardInputHeight - 44.0) { - insets.bottom += state.layout.layout.standardInputHeight - } else { - insets.bottom += inputHeight - } + insets.bottom += max(inputHeight, state.layout.layout.standardInputHeight) } let contentFrame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: state.layout.layout.size.width, height: state.layout.layout.size.height)) if state.data.state?.kind != self.contentNode?.kind { diff --git a/submodules/PeerAvatarGalleryUI/Sources/PeerAvatarImageGalleryItem.swift b/submodules/PeerAvatarGalleryUI/Sources/PeerAvatarImageGalleryItem.swift index 2685325ddf..d8510f4029 100644 --- a/submodules/PeerAvatarGalleryUI/Sources/PeerAvatarImageGalleryItem.swift +++ b/submodules/PeerAvatarGalleryUI/Sources/PeerAvatarImageGalleryItem.swift @@ -26,7 +26,7 @@ private struct PeerAvatarImageGalleryThumbnailItem: GalleryThumbnailItem { var image: (Signal<(TransformImageArguments) -> DrawingContext?, NoError>, CGSize) { if let representation = largestImageRepresentation(self.content.map({ $0.representation })) { - return (avatarGalleryThumbnailPhoto(account: self.account, representations: self.content), representation.dimensions) + return (avatarGalleryThumbnailPhoto(account: self.account, representations: self.content), representation.dimensions.cgSize) } else { return (.single({ _ in return nil }), CGSize(width: 128.0, height: 128.0)) } @@ -168,7 +168,7 @@ final class PeerAvatarImageGalleryItemNode: ZoomableContentGalleryItemNode { self.footerContentNode.setEntry(entry) if let largestSize = largestImageRepresentation(entry.representations.map({ $0.representation })) { - let displaySize = largestSize.dimensions.fitted(CGSize(width: 1280.0, height: 1280.0)).dividedByScreenScale().integralFloor + let displaySize = largestSize.dimensions.cgSize.fitted(CGSize(width: 1280.0, height: 1280.0)).dividedByScreenScale().integralFloor self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: displaySize, boundingSize: displaySize, intrinsicInsets: UIEdgeInsets()))() let representations: [ImageRepresentationWithReference] switch entry { @@ -178,7 +178,7 @@ final class PeerAvatarImageGalleryItemNode: ZoomableContentGalleryItemNode { representations = imageRepresentations } self.imageNode.setSignal(chatAvatarGalleryPhoto(account: self.context.account, representations: representations), dispatchOnDisplayLink: false) - self.zoomableContent = (largestSize.dimensions, self.imageNode) + self.zoomableContent = (largestSize.dimensions.cgSize, self.imageNode) if let largestIndex = representations.firstIndex(where: { $0.representation == largestSize }) { self.fetchDisposable.set(fetchedMediaResource(mediaBox: self.context.account.postbox.mediaBox, reference: representations[largestIndex].reference).start()) } diff --git a/submodules/PeerInfoUI/Sources/ChannelAdminController.swift b/submodules/PeerInfoUI/Sources/ChannelAdminController.swift index 07c88ca4f0..0d974f8504 100644 --- a/submodules/PeerInfoUI/Sources/ChannelAdminController.swift +++ b/submodules/PeerInfoUI/Sources/ChannelAdminController.swift @@ -947,8 +947,25 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi updateState { current in return current.withUpdatedUpdating(true) } - updateRightsDisposable.set((context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: peerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: updateFlags), rank: effectiveRank) |> deliverOnMainQueue).start(error: { _ in - + updateRightsDisposable.set((context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: peerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: updateFlags), rank: effectiveRank) |> deliverOnMainQueue).start(error: { error in + let presentationData = context.sharedContext.currentPresentationData.with { $0 } + var text = presentationData.strings.Login_UnknownError + switch error { + case .generic: + break + case let .addMemberError(addMemberError): + switch addMemberError { + case .tooMuchJoined: + text = presentationData.strings.Group_ErrorSupergroupConversionNotPossible + case .restricted: + if let peer = adminView.peers[adminView.peerId] { + text = presentationData.strings.Privacy_GroupsAndChannels_InviteToGroupError(peer.compactDisplayTitle, peer.compactDisplayTitle).0 + } + default: + break + } + } + presentControllerImpl?(textAlertController(context: context, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) }, completed: { updated(TelegramChatAdminRights(flags: updateFlags)) dismissImpl?() @@ -1058,8 +1075,13 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi } else if updateFlags != defaultFlags || updateRank != nil { let signal = convertGroupToSupergroup(account: context.account, peerId: peerId) |> map(Optional.init) - |> `catch` { _ -> Signal in - return .fail(.generic) + |> `catch` { error -> Signal in + switch error { + case .tooManyChannels: + return .fail(.addMemberError(.tooMuchJoined)) + default: + return .fail(.generic) + } } |> mapToSignal { upgradedPeerId -> Signal in guard let upgradedPeerId = upgradedPeerId else { @@ -1083,8 +1105,14 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi }) } }, error: { error in - if case let .addMemberError(error) = error, case .restricted = error, let admin = adminView.peers[adminView.peerId] { - presentControllerImpl?(textAlertController(context: context, title: nil, text: presentationData.strings.Privacy_GroupsAndChannels_InviteToGroupError(admin.compactDisplayTitle, admin.compactDisplayTitle).0, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) + if case let .addMemberError(error) = error { + var text = presentationData.strings.Login_UnknownError + if case .restricted = error, let admin = adminView.peers[adminView.peerId] { + text = presentationData.strings.Privacy_GroupsAndChannels_InviteToGroupError(admin.compactDisplayTitle, admin.compactDisplayTitle).0 + } else if case .tooMuchJoined = error { + text = presentationData.strings.Group_ErrorSupergroupConversionNotPossible + } + presentControllerImpl?(textAlertController(context: context, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) } dismissImpl?() diff --git a/submodules/PeerInfoUI/Sources/ChannelAdminsController.swift b/submodules/PeerInfoUI/Sources/ChannelAdminsController.swift index ffd3b14477..121b8bb980 100644 --- a/submodules/PeerInfoUI/Sources/ChannelAdminsController.swift +++ b/submodules/PeerInfoUI/Sources/ChannelAdminsController.swift @@ -498,6 +498,7 @@ public func channelAdminsController(context: AccountContext, peerId: PeerId, loa var pushControllerImpl: ((ViewController) -> Void)? var presentControllerImpl: ((ViewController, Any?) -> Void)? + var dismissInputImpl: (() -> Void)? let actionsDisposable = DisposableSet() @@ -584,24 +585,24 @@ public func channelAdminsController(context: AccountContext, peerId: PeerId, loa } if let participant = participant { switch participant.participant { - case .creator: - return - case let .member(_, _, _, banInfo, _): - if let banInfo = banInfo { - var canUnban = false - if banInfo.restrictedBy != context.account.peerId { + case .creator: + return + case let .member(_, _, _, banInfo, _): + if let banInfo = banInfo { + var canUnban = false + if banInfo.restrictedBy != context.account.peerId { + canUnban = true + } + if let channel = peerView.peers[peerId] as? TelegramChannel { + if channel.hasPermission(.banMembers) { canUnban = true } - if let channel = peerView.peers[peerId] as? TelegramChannel { - if channel.hasPermission(.banMembers) { - canUnban = true - } - } - if !canUnban { - presentControllerImpl?(textAlertController(context: context, title: nil, text: presentationData.strings.Channel_Members_AddAdminErrorBlacklisted, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) - return - } } + if !canUnban { + presentControllerImpl?(textAlertController(context: context, title: nil, text: presentationData.strings.Channel_Members_AddAdminErrorBlacklisted, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) + return + } + } } } pushControllerImpl?(channelAdminController(context: context, peerId: peerId, adminId: peer.id, initialParticipant: participant?.participant, updated: { _ in @@ -746,6 +747,8 @@ public func channelAdminsController(context: AccountContext, peerId: PeerId, loa } }, pushController: { c in pushControllerImpl?(c) + }, dismissInput: { + dismissInputImpl?() }) } @@ -772,6 +775,9 @@ public func channelAdminsController(context: AccountContext, peerId: PeerId, loa controller.view.endEditing(true) } } + dismissInputImpl = { [weak controller] in + controller?.view.endEditing(true) + } upgradedToSupergroupImpl = { [weak controller] upgradedPeerId, f in guard let controller = controller, let navigationController = controller.navigationController as? NavigationController else { return diff --git a/submodules/PeerInfoUI/Sources/ChannelBlacklistController.swift b/submodules/PeerInfoUI/Sources/ChannelBlacklistController.swift index f4e88773b3..400d178646 100644 --- a/submodules/PeerInfoUI/Sources/ChannelBlacklistController.swift +++ b/submodules/PeerInfoUI/Sources/ChannelBlacklistController.swift @@ -277,6 +277,7 @@ public func channelBlacklistController(context: AccountContext, peerId: PeerId) var presentControllerImpl: ((ViewController, Any?) -> Void)? var pushControllerImpl: ((ViewController) -> Void)? + var dismissInputImpl: (() -> Void)? let actionsDisposable = DisposableSet() @@ -492,6 +493,8 @@ public func channelBlacklistController(context: AccountContext, peerId: PeerId) } }, pushController: { c in pushControllerImpl?(c) + }, dismissInput: { + dismissInputImpl?() }) } @@ -517,6 +520,9 @@ public func channelBlacklistController(context: AccountContext, peerId: PeerId) (controller.navigationController as? NavigationController)?.pushViewController(c) } } + dismissInputImpl = { [weak controller] in + controller?.view.endEditing(true) + } controller.visibleBottomContentOffsetChanged = { offset in if case let .known(value) = offset, value < 40.0 { context.peerChannelMemberCategoriesContextsManager.loadMore(peerId: peerId, control: loadMoreControl) diff --git a/submodules/PeerInfoUI/Sources/ChannelInfoController.swift b/submodules/PeerInfoUI/Sources/ChannelInfoController.swift index 02d8c73d89..1767eafb52 100644 --- a/submodules/PeerInfoUI/Sources/ChannelInfoController.swift +++ b/submodules/PeerInfoUI/Sources/ChannelInfoController.swift @@ -732,7 +732,7 @@ public func channelInfoController(context: AccountContext, peerId: PeerId) -> Vi if let data = image.jpegData(compressionQuality: 0.6) { let resource = LocalFileMediaResource(fileId: arc4random64()) context.account.postbox.mediaBox.storeResourceData(resource.id, data: data) - let representation = TelegramMediaImageRepresentation(dimensions: CGSize(width: 640.0, height: 640.0), resource: resource) + let representation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 640, height: 640), resource: resource) updateState { $0.withUpdatedUpdatingAvatar(.image(representation, true)) } diff --git a/submodules/PeerInfoUI/Sources/ChannelMembersController.swift b/submodules/PeerInfoUI/Sources/ChannelMembersController.swift index a7b285875b..05e0c8f130 100644 --- a/submodules/PeerInfoUI/Sources/ChannelMembersController.swift +++ b/submodules/PeerInfoUI/Sources/ChannelMembersController.swift @@ -339,6 +339,7 @@ public func channelMembersController(context: AccountContext, peerId: PeerId) -> var presentControllerImpl: ((ViewController, Any?) -> Void)? var pushControllerImpl: ((ViewController) -> Void)? + var dismissInputImpl: (() -> Void)? let actionsDisposable = DisposableSet() @@ -506,6 +507,8 @@ public func channelMembersController(context: AccountContext, peerId: PeerId) -> } }, pushController: { c in pushControllerImpl?(c) + }, dismissInput: { + dismissInputImpl?() }) } @@ -537,6 +540,9 @@ public func channelMembersController(context: AccountContext, peerId: PeerId) -> (controller.navigationController as? NavigationController)?.pushViewController(c) } } + dismissInputImpl = { [weak controller] in + controller?.view.endEditing(true) + } controller.visibleBottomContentOffsetChanged = { offset in if let loadMoreControl = loadMoreControl, case let .known(value) = offset, value < 40.0 { context.peerChannelMemberCategoriesContextsManager.loadMore(peerId: peerId, control: loadMoreControl) diff --git a/submodules/PeerInfoUI/Sources/ChannelPermissionsController.swift b/submodules/PeerInfoUI/Sources/ChannelPermissionsController.swift index 48e544fd06..3a9dde05fe 100644 --- a/submodules/PeerInfoUI/Sources/ChannelPermissionsController.swift +++ b/submodules/PeerInfoUI/Sources/ChannelPermissionsController.swift @@ -466,6 +466,7 @@ public func channelPermissionsController(context: AccountContext, peerId origina var presentControllerImpl: ((ViewController, Any?) -> Void)? var pushControllerImpl: ((ViewController) -> Void)? + var dismissInputImpl: (() -> Void)? let actionsDisposable = DisposableSet() @@ -803,6 +804,8 @@ public func channelPermissionsController(context: AccountContext, peerId origina } }, pushController: { c in pushControllerImpl?(c) + }, dismissInput: { + dismissInputImpl?() }) } @@ -828,6 +831,9 @@ public func channelPermissionsController(context: AccountContext, peerId origina (controller.navigationController as? NavigationController)?.pushViewController(c) } } + dismissInputImpl = { [weak controller] in + controller?.view.endEditing(true) + } upgradedToSupergroupImpl = { [weak controller] upgradedPeerId, f in guard let controller = controller, let navigationController = controller.navigationController as? NavigationController else { return diff --git a/submodules/PeerInfoUI/Sources/ChannelVisibilityController.swift b/submodules/PeerInfoUI/Sources/ChannelVisibilityController.swift index 64bb5a48fd..380e6bf9b8 100644 --- a/submodules/PeerInfoUI/Sources/ChannelVisibilityController.swift +++ b/submodules/PeerInfoUI/Sources/ChannelVisibilityController.swift @@ -637,7 +637,7 @@ private func channelVisibilityControllerEntries(presentationData: PresentationDa if let current = state.selectedType { selectedType = current } else { - selectedType = .privateChannel + selectedType = .publicChannel } let currentAddressName: String diff --git a/submodules/PeerInfoUI/Sources/GroupInfoController.swift b/submodules/PeerInfoUI/Sources/GroupInfoController.swift index dacc20697c..fad08702fd 100644 --- a/submodules/PeerInfoUI/Sources/GroupInfoController.swift +++ b/submodules/PeerInfoUI/Sources/GroupInfoController.swift @@ -1300,6 +1300,7 @@ public func groupInfoController(context: AccountContext, peerId originalPeerId: var removePeerChatImpl: ((Peer, Bool) -> Void)? var errorImpl: (() -> Void)? var clearHighlightImpl: (() -> Void)? + var dismissInputImpl: (() -> Void)? let actionsDisposable = DisposableSet() @@ -1414,7 +1415,7 @@ public func groupInfoController(context: AccountContext, peerId originalPeerId: if let data = image.jpegData(compressionQuality: 0.6) { let resource = LocalFileMediaResource(fileId: arc4random64()) context.account.postbox.mediaBox.storeResourceData(resource.id, data: data) - let representation = TelegramMediaImageRepresentation(dimensions: CGSize(width: 640.0, height: 640.0), resource: resource) + let representation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 640, height: 640), resource: resource) updateState { $0.withUpdatedUpdatingAvatar(.image(representation, true)) } @@ -2264,6 +2265,8 @@ public func groupInfoController(context: AccountContext, peerId originalPeerId: } }, pushController: { c in pushControllerImpl?(c) + }, dismissInput: { + dismissInputImpl?() }) } @@ -2306,6 +2309,9 @@ public func groupInfoController(context: AccountContext, peerId originalPeerId: controller?.view.endEditing(true) controller?.present(value, in: .window(.root), with: presentationArguments, blockInteraction: true) } + dismissInputImpl = { [weak controller] in + controller?.view.endEditing(true) + } upgradedToSupergroupImpl = { [weak controller] upgradedPeerId, f in let _ = (context.account.postbox.transaction { transaction -> Peer? in return transaction.getPeer(upgradedPeerId) diff --git a/submodules/PeerInfoUI/Sources/GroupInfoSearchItem.swift b/submodules/PeerInfoUI/Sources/GroupInfoSearchItem.swift index 072d4ef0a2..5d98c451be 100644 --- a/submodules/PeerInfoUI/Sources/GroupInfoSearchItem.swift +++ b/submodules/PeerInfoUI/Sources/GroupInfoSearchItem.swift @@ -17,19 +17,21 @@ final class ChannelMembersSearchItem: ItemListControllerSearch { let cancel: () -> Void let openPeer: (Peer, RenderedChannelParticipant?) -> Void let pushController: (ViewController) -> Void + let dismissInput: () -> Void let searchMode: ChannelMembersSearchMode private var updateActivity: ((Bool) -> Void)? private var activity: ValuePromise = ValuePromise(ignoreRepeated: false) private let activityDisposable = MetaDisposable() - init(context: AccountContext, peerId: PeerId, searchContext: GroupMembersSearchContext?, searchMode: ChannelMembersSearchMode = .searchMembers, cancel: @escaping () -> Void, openPeer: @escaping (Peer, RenderedChannelParticipant?) -> Void, pushController: @escaping (ViewController) -> Void) { + init(context: AccountContext, peerId: PeerId, searchContext: GroupMembersSearchContext?, searchMode: ChannelMembersSearchMode = .searchMembers, cancel: @escaping () -> Void, openPeer: @escaping (Peer, RenderedChannelParticipant?) -> Void, pushController: @escaping (ViewController) -> Void, dismissInput: @escaping () -> Void) { self.context = context self.peerId = peerId self.searchContext = searchContext self.cancel = cancel self.openPeer = openPeer self.pushController = pushController + self.dismissInput = dismissInput self.searchMode = searchMode activityDisposable.set((activity.get() |> mapToSignal { value -> Signal in if value { @@ -77,14 +79,14 @@ final class ChannelMembersSearchItem: ItemListControllerSearch { self?.activity.set(value) }, pushController: { [weak self] c in self?.pushController(c) - }) + }, dismissInput: self.dismissInput) } } private final class ChannelMembersSearchItemNode: ItemListControllerSearchNode { private let containerNode: ChannelMembersSearchContainerNode - init(context: AccountContext, peerId: PeerId, searchMode: ChannelMembersSearchMode, searchContext: GroupMembersSearchContext?, openPeer: @escaping (Peer, RenderedChannelParticipant?) -> Void, cancel: @escaping () -> Void, updateActivity: @escaping(Bool) -> Void, pushController: @escaping (ViewController) -> Void) { + init(context: AccountContext, peerId: PeerId, searchMode: ChannelMembersSearchMode, searchContext: GroupMembersSearchContext?, openPeer: @escaping (Peer, RenderedChannelParticipant?) -> Void, cancel: @escaping () -> Void, updateActivity: @escaping(Bool) -> Void, pushController: @escaping (ViewController) -> Void, dismissInput: @escaping () -> Void) { self.containerNode = ChannelMembersSearchContainerNode(context: context, peerId: peerId, mode: searchMode, filters: [], searchContext: searchContext, openPeer: { peer, participant in openPeer(peer, participant) }, updateActivity: updateActivity, pushController: pushController) @@ -95,6 +97,10 @@ private final class ChannelMembersSearchItemNode: ItemListControllerSearchNode { super.init() self.addSubnode(self.containerNode) + + self.containerNode.dismissInput = { + dismissInput() + } } override func queryUpdated(_ query: String) { diff --git a/submodules/PeerInfoUI/Sources/GroupStickerPackCurrentItem.swift b/submodules/PeerInfoUI/Sources/GroupStickerPackCurrentItem.swift index 135b7366b1..03d7e7795f 100644 --- a/submodules/PeerInfoUI/Sources/GroupStickerPackCurrentItem.swift +++ b/submodules/PeerInfoUI/Sources/GroupStickerPackCurrentItem.swift @@ -225,7 +225,7 @@ class GroupStickerPackCurrentItemNode: ItemListRevealOptionsItemNode { var imageSize: CGSize = CGSize(width: 34.0, height: 34.0) if let file = file, let dimensions = file.dimensions { let imageBoundingSize = CGSize(width: 34.0, height: 34.0) - imageSize = dimensions.aspectFitted(imageBoundingSize) + imageSize = dimensions.cgSize.aspectFitted(imageBoundingSize) imageApply = makeImageLayout(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: imageSize, intrinsicInsets: UIEdgeInsets())) } diff --git a/submodules/PeerInfoUI/Sources/GroupsInCommonController.swift b/submodules/PeerInfoUI/Sources/GroupsInCommonController.swift index 700dcd0d38..0ba5f9badc 100644 --- a/submodules/PeerInfoUI/Sources/GroupsInCommonController.swift +++ b/submodules/PeerInfoUI/Sources/GroupsInCommonController.swift @@ -220,6 +220,8 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent let navigationController: NavigationController? = nil + let passthroughTouches: Bool = true + init(controller: ViewController, sourceNode: ASDisplayNode?) { self.controller = controller self.sourceNode = sourceNode @@ -235,4 +237,7 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent } }) } + + func animatedIn() { + } } diff --git a/submodules/PeerPresenceStatusManager/BUCK b/submodules/PeerPresenceStatusManager/BUCK index b7d0cf9134..9c0b44b7ea 100644 --- a/submodules/PeerPresenceStatusManager/BUCK +++ b/submodules/PeerPresenceStatusManager/BUCK @@ -10,7 +10,6 @@ static_library( "//submodules/Postbox:Postbox#shared", "//submodules/TelegramCore:TelegramCore#shared", "//submodules/SyncCore:SyncCore#shared", - "//submodules/SyncCore:SyncCore#shared", ], frameworks = [ "$SDKROOT/System/Library/Frameworks/Foundation.framework", diff --git a/submodules/PhotoResources/Sources/PhotoResources.swift b/submodules/PhotoResources/Sources/PhotoResources.swift index 03945a16d1..1ffb182d03 100644 --- a/submodules/PhotoResources/Sources/PhotoResources.swift +++ b/submodules/PhotoResources/Sources/PhotoResources.swift @@ -27,11 +27,11 @@ private enum ResourceFileData { } public func largestRepresentationForPhoto(_ photo: TelegramMediaImage) -> TelegramMediaImageRepresentation? { - return photo.representationForDisplayAtSize(CGSize(width: 1280.0, height: 1280.0)) + return photo.representationForDisplayAtSize(PixelDimensions(width: 1280, height: 1280)) } public func chatMessagePhotoDatas(postbox: Postbox, photoReference: ImageMediaReference, fullRepresentationSize: CGSize = CGSize(width: 1280.0, height: 1280.0), autoFetchFullSize: Bool = false, tryAdditionalRepresentations: Bool = false, synchronousLoad: Bool = false) -> Signal, NoError> { - if let smallestRepresentation = smallestImageRepresentation(photoReference.media.representations), let largestRepresentation = photoReference.media.representationForDisplayAtSize(fullRepresentationSize) { + if let smallestRepresentation = smallestImageRepresentation(photoReference.media.representations), let largestRepresentation = photoReference.media.representationForDisplayAtSize(PixelDimensions(width: Int32(fullRepresentationSize.width), height: Int32(fullRepresentationSize.height))) { let maybeFullSize = postbox.mediaBox.resourceData(largestRepresentation.resource, option: .complete(waitUntilFetchStatus: false), attemptSynchronously: synchronousLoad) let signal = maybeFullSize @@ -216,7 +216,7 @@ private func chatMessageImageFileThumbnailDatas(account: Account, fileReference: if !thumbnailGenerationMimeTypes.contains(fileReference.media.mimeType) { if let decodedThumbnailData = decodedThumbnailData { - if autoFetchFullSizeThumbnail, let thumbnailRepresentation = thumbnailRepresentation, (thumbnailRepresentation.dimensions.width > 200.0 || thumbnailRepresentation.dimensions.height > 200.0) { + if autoFetchFullSizeThumbnail, let thumbnailRepresentation = thumbnailRepresentation, (thumbnailRepresentation.dimensions.width > 200 || thumbnailRepresentation.dimensions.height > 200) { return Signal { subscriber in let fetchedDisposable = fetchedMediaResource(mediaBox: account.postbox.mediaBox, reference: fileReference.resourceReference(thumbnailRepresentation.resource), statsCategory: .video).start() let thumbnailDisposable = account.postbox.mediaBox.resourceData(thumbnailRepresentation.resource, attemptSynchronously: false).start(next: { next in @@ -335,7 +335,7 @@ private func chatMessageVideoDatas(postbox: Postbox, fileReference: FileMediaRef if onlyFullSize { thumbnail = .single(nil) } else if let decodedThumbnailData = fileReference.media.immediateThumbnailData.flatMap(decodeTinyThumbnail) { - if autoFetchFullSizeThumbnail, let thumbnailRepresentation = thumbnailRepresentation, (thumbnailRepresentation.dimensions.width > 200.0 || thumbnailRepresentation.dimensions.height > 200.0) { + if autoFetchFullSizeThumbnail, let thumbnailRepresentation = thumbnailRepresentation, (thumbnailRepresentation.dimensions.width > 200 || thumbnailRepresentation.dimensions.height > 200) { thumbnail = Signal { subscriber in let fetchedDisposable = fetchedMediaResource(mediaBox: postbox.mediaBox, reference: fileReference.resourceReference(thumbnailRepresentation.resource), statsCategory: .video).start() let thumbnailDisposable = postbox.mediaBox.resourceData(thumbnailRepresentation.resource, attemptSynchronously: synchronousLoad).start(next: { next in @@ -876,7 +876,7 @@ public func chatMessagePhotoInternal(photoData: Signal Signal, NoError> { let fullRepresentationSize: CGSize = CGSize(width: 1280.0, height: 1280.0) - if let smallestRepresentation = smallestImageRepresentation(photoReference.media.representations), let largestRepresentation = photoReference.media.representationForDisplayAtSize(fullRepresentationSize) { + if let smallestRepresentation = smallestImageRepresentation(photoReference.media.representations), let largestRepresentation = photoReference.media.representationForDisplayAtSize(PixelDimensions(width: Int32(fullRepresentationSize.width), height: Int32(fullRepresentationSize.height))) { let maybeFullSize = account.postbox.mediaBox.cachedResourceRepresentation(largestRepresentation.resource, representation: CachedScaledImageRepresentation(size: CGSize(width: 180.0, height: 180.0), mode: .aspectFit), complete: onlyFullSize, fetch: false) let fetchedFullSize = account.postbox.mediaBox.cachedResourceRepresentation(largestRepresentation.resource, representation: CachedScaledImageRepresentation(size: CGSize(width: 180.0, height: 180.0), mode: .aspectFit), complete: onlyFullSize, fetch: true) @@ -1220,7 +1220,7 @@ public func chatSecretPhoto(account: Account, photoReference: ImageMediaReferenc } private func avatarGalleryThumbnailDatas(postbox: Postbox, representations: [ImageRepresentationWithReference], fullRepresentationSize: CGSize = CGSize(width: 1280.0, height: 1280.0), autoFetchFullSize: Bool = false) -> Signal, NoError> { - if let smallestRepresentation = smallestImageRepresentation(representations.map({ $0.representation })), let largestRepresentation = imageRepresentationLargerThan(representations.map({ $0.representation }), size: fullRepresentationSize), let smallestIndex = representations.firstIndex(where: { $0.representation == smallestRepresentation }), let largestIndex = representations.firstIndex(where: { $0.representation == largestRepresentation }) { + if let smallestRepresentation = smallestImageRepresentation(representations.map({ $0.representation })), let largestRepresentation = imageRepresentationLargerThan(representations.map({ $0.representation }), size: PixelDimensions(width: Int32(fullRepresentationSize.width), height: Int32(fullRepresentationSize.height))), let smallestIndex = representations.firstIndex(where: { $0.representation == smallestRepresentation }), let largestIndex = representations.firstIndex(where: { $0.representation == largestRepresentation }) { let maybeFullSize = postbox.mediaBox.resourceData(largestRepresentation.resource) let signal = maybeFullSize @@ -1809,7 +1809,7 @@ public func chatWebpageSnippetFileData(account: Account, fileReference: FileMedi } public func chatWebpageSnippetPhotoData(account: Account, photoReference: ImageMediaReference) -> Signal { - if let closestRepresentation = photoReference.media.representationForDisplayAtSize(CGSize(width: 120.0, height: 120.0)) { + if let closestRepresentation = photoReference.media.representationForDisplayAtSize(PixelDimensions(width: 120, height: 120)) { let resourceData = account.postbox.mediaBox.resourceData(closestRepresentation.resource) |> map { next in return next.size == 0 ? nil : try? Data(contentsOf: URL(fileURLWithPath: next.path), options: .mappedIfSafe) diff --git a/submodules/PlatformRestrictionMatching/BUCK b/submodules/PlatformRestrictionMatching/BUCK index 312c7c4e29..61d8d39123 100644 --- a/submodules/PlatformRestrictionMatching/BUCK +++ b/submodules/PlatformRestrictionMatching/BUCK @@ -8,7 +8,6 @@ static_library( deps = [ "//submodules/TelegramCore:TelegramCore#shared", "//submodules/SyncCore:SyncCore#shared", - "//submodules/SyncCore:SyncCore#shared", ], frameworks = [ "$SDKROOT/System/Library/Frameworks/Foundation.framework", diff --git a/submodules/Postbox/BUCK b/submodules/Postbox/BUCK index 95eeb14cea..5cee7bc9c0 100644 --- a/submodules/Postbox/BUCK +++ b/submodules/Postbox/BUCK @@ -3,14 +3,14 @@ load("//Config:buck_rule_macros.bzl", "framework") framework( name = "Postbox", srcs = glob([ - "Postbox/*.swift", - "Postbox/*.m", + "Sources/*.swift", + "Sources/*.m", ]), headers = [ - "Postbox/MurMurHash32.h", + "Sources/MurMurHash32.h", ], exported_headers = [ - "Postbox/MurMurHash32.h", + "Sources/MurMurHash32.h", ], deps = [ "//submodules/Crc32:Crc32", diff --git a/submodules/Postbox/Postbox/Info.plist b/submodules/Postbox/Postbox/Info.plist deleted file mode 100644 index d3de8eefb6..0000000000 --- a/submodules/Postbox/Postbox/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/submodules/Postbox/Postbox/module.private-mac.modulemap b/submodules/Postbox/Postbox/module.private-mac.modulemap deleted file mode 100644 index de77d1735e..0000000000 --- a/submodules/Postbox/Postbox/module.private-mac.modulemap +++ /dev/null @@ -1,3 +0,0 @@ -module PostboxMac.PostboxPrivate { - export * -} diff --git a/submodules/Postbox/PostboxMac/Info.plist b/submodules/Postbox/PostboxMac/Info.plist deleted file mode 100644 index ab41b55afe..0000000000 --- a/submodules/Postbox/PostboxMac/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSHumanReadableCopyright - Copyright © 2016 Telegram. All rights reserved. - NSPrincipalClass - - - diff --git a/submodules/Postbox/PostboxMac/PostboxMac.h b/submodules/Postbox/PostboxMac/PostboxMac.h deleted file mode 100644 index 1ac4979d37..0000000000 --- a/submodules/Postbox/PostboxMac/PostboxMac.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// PostboxMac.h -// PostboxMac -// -// Created by Peter on 9/5/16. -// Copyright © 2016 Telegram. All rights reserved. -// - -#import - -//! Project version number for PostboxMac. -FOUNDATION_EXPORT double PostboxMacVersionNumber; - -//! Project version string for PostboxMac. -FOUNDATION_EXPORT const unsigned char PostboxMacVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - - -#import diff --git a/submodules/Postbox/PostboxTests/ChatListTableTests.swift b/submodules/Postbox/PostboxTests/ChatListTableTests.swift deleted file mode 100644 index 01c5549207..0000000000 --- a/submodules/Postbox/PostboxTests/ChatListTableTests.swift +++ /dev/null @@ -1,573 +0,0 @@ -import Foundation - -import UIKit -import XCTest - -import Postbox -@testable import Postbox - -import SwiftSignalKit - -private let namespace: Int32 = 1 - -private let authorPeerId = PeerId(namespace: 2, id: 3) - -private enum Entry: Equatable, CustomStringConvertible { - case Message(Int32, Int32, Int32, Bool) - case Hole(Int32, Int32, Int32) - case GroupReference(PeerGroupId, Int32, Int32, Int32) - - var description: String { - switch self { - case let .Message(peerId, id, timestamp, exists): - return "Message(\(peerId), \(id), \(timestamp), \(exists))" - case let .Hole(peerId, id, timestamp): - return "Hole(\(peerId), \(id), \(timestamp))" - case let .GroupReference(groupId, peerId, id, timestamp): - return "GroupReference(\(groupId), \(peerId), \(id), \(timestamp))" - } - } -} - -private func ==(lhs: Entry, rhs: Entry) -> Bool { - switch lhs { - case let .Message(lhsPeerId, lhsId, lhsTimestamp, lhsExists): - switch rhs { - case let .Message(rhsPeerId, rhsId, rhsTimestamp, rhsExists): - return lhsPeerId == rhsPeerId && lhsId == rhsId && lhsTimestamp == rhsTimestamp && lhsExists == rhsExists - case .Hole, .GroupReference: - return false - } - case let .Hole(lhsPeerId, lhsId, lhsTimestamp): - switch rhs { - case .Message, .GroupReference: - return false - case let .Hole(rhsPeerId, rhsId, rhsTimestamp): - return lhsPeerId == rhsPeerId && lhsId == rhsId && lhsTimestamp == rhsTimestamp - } - case let .GroupReference(lhsGroupId, lhsPeerId, lhsId, lhsTimestamp): - switch rhs { - case .GroupReference(lhsGroupId, lhsPeerId, lhsId, lhsTimestamp): - return true - default: - return false - } - } -} - -class ChatListTableTests: XCTestCase { - var valueBox: ValueBox? - var path: String? - - var globalMessageIdsTable: GlobalMessageIdsTable? - var indexTable: MessageHistoryIndexTable? - var mediaTable: MessageMediaTable? - var historyTable: MessageHistoryTable? - var chatListIndexTable: ChatListIndexTable? - var chatListTable: ChatListTable? - var historyMetadataTable: MessageHistoryMetadataTable? - var unsentTable: MessageHistoryUnsentTable? - var tagsTable: MessageHistoryTagsTable? - var readStateTable: MessageHistoryReadStateTable? - var synchronizeReadStateTable: MessageHistorySynchronizeReadStateTable? - var peerChatInterfaceStateTable: PeerChatInterfaceStateTable? - var peerTable: PeerTable? - var peerNameTokenIndexTable: ReverseIndexReferenceTable? - var peerNameIndexTable: PeerNameIndexTable? - var notificationSettingsTable: PeerNotificationSettingsTable? - var globallyUniqueMessageIdsTable: MessageGloballyUniqueIdTable? - var globalTagsTable: GlobalMessageHistoryTagsTable? - var localTagsTable: LocalMessageHistoryTagsTable? - var reverseAssociatedTable: ReverseAssociatedPeerTable? - var textIndexTable: MessageHistoryTextIndexTable? - var messageHistoryTagsSummaryTable: MessageHistoryTagsSummaryTable? - var invalidatedMessageHistoryTagsSummaryTable: InvalidatedMessageHistoryTagsSummaryTable? - var pendingMessageActionsTable: PendingMessageActionsTable? - var pendingMessageActionsMetadataTable: PendingMessageActionsMetadataTable? - var pendingPeerNotificationSettingsIndexTable: PendingPeerNotificationSettingsIndexTable? - - override class func setUp() { - super.setUp() - } - - override func setUp() { - super.setUp() - - var randomId: Int64 = 0 - arc4random_buf(&randomId, 8) - path = NSTemporaryDirectory() + "\(randomId)" - self.valueBox = SqliteValueBox(basePath: path!, queue: Queue.mainQueue()) - - let seedConfiguration = SeedConfiguration(initializeChatListWithHole: (topLevel: nil, groups: nil), initializeMessageNamespacesWithHoles: [], existingMessageTags: [], messageTagsWithSummary: [], existingGlobalMessageTags: [], peerNamespacesRequiringMessageTextIndex: [], peerSummaryCounterTags: { _ in PeerSummaryCounterTags(rawValue: 0) }, additionalChatListIndexNamespace: nil, chatMessagesNamespaces: Set()) - - self.globalMessageIdsTable = GlobalMessageIdsTable(valueBox: self.valueBox!, table: GlobalMessageIdsTable.tableSpec(7), namespace: namespace) - self.historyMetadataTable = MessageHistoryMetadataTable(valueBox: self.valueBox!, table: MessageHistoryMetadataTable.tableSpec(8)) - self.unsentTable = MessageHistoryUnsentTable(valueBox: self.valueBox!, table: MessageHistoryUnsentTable.tableSpec(9)) - self.invalidatedMessageHistoryTagsSummaryTable = InvalidatedMessageHistoryTagsSummaryTable(valueBox: self.valueBox!, table: MessageHistoryTagsSummaryTable.tableSpec(31)) - self.messageHistoryTagsSummaryTable = MessageHistoryTagsSummaryTable(valueBox: self.valueBox!, table: MessageHistoryTagsSummaryTable.tableSpec(28), invalidateTable: self.invalidatedMessageHistoryTagsSummaryTable!) - self.pendingMessageActionsMetadataTable = PendingMessageActionsMetadataTable(valueBox: self.valueBox!, table: PendingMessageActionsMetadataTable.tableSpec(29)) - self.pendingMessageActionsTable = PendingMessageActionsTable(valueBox: self.valueBox!, table: PendingMessageActionsTable.tableSpec(30), metadataTable: self.pendingMessageActionsMetadataTable!) - self.tagsTable = MessageHistoryTagsTable(valueBox: self.valueBox!, table: MessageHistoryTagsTable.tableSpec(10), seedConfiguration: seedConfiguration, summaryTable: self.messageHistoryTagsSummaryTable!) - self.indexTable = MessageHistoryIndexTable(valueBox: self.valueBox!, table: MessageHistoryIndexTable.tableSpec(1), globalMessageIdsTable: self.globalMessageIdsTable!, metadataTable: self.historyMetadataTable!, seedConfiguration: seedConfiguration) - self.mediaTable = MessageMediaTable(valueBox: self.valueBox!, table: MessageMediaTable.tableSpec(2)) - self.readStateTable = MessageHistoryReadStateTable(valueBox: self.valueBox!, table: MessageHistoryReadStateTable.tableSpec(11)) - self.synchronizeReadStateTable = MessageHistorySynchronizeReadStateTable(valueBox: self.valueBox!, table: MessageHistorySynchronizeReadStateTable.tableSpec(12)) - self.globallyUniqueMessageIdsTable = MessageGloballyUniqueIdTable(valueBox: self.valueBox!, table: MessageGloballyUniqueIdTable.tableSpec(24)) - self.globalTagsTable = GlobalMessageHistoryTagsTable(valueBox: self.valueBox!, table: GlobalMessageHistoryTagsTable.tableSpec(25)) - self.localTagsTable = LocalMessageHistoryTagsTable(valueBox: self.valueBox!, table: GlobalMessageHistoryTagsTable.tableSpec(35)) - self.textIndexTable = MessageHistoryTextIndexTable(valueBox: self.valueBox!, table: MessageHistoryTextIndexTable.tableSpec(27)) - self.historyTable = MessageHistoryTable(valueBox: self.valueBox!, table: MessageHistoryTable.tableSpec(4), messageHistoryIndexTable: self.indexTable!, messageMediaTable: self.mediaTable!, historyMetadataTable: self.historyMetadataTable!, globallyUniqueMessageIdsTable: self.globallyUniqueMessageIdsTable!, unsentTable: self.unsentTable!, tagsTable: self.tagsTable!, globalTagsTable: self.globalTagsTable!, localTagsTable: self.localTagsTable!, readStateTable: self.readStateTable!, synchronizeReadStateTable: self.synchronizeReadStateTable!, textIndexTable: self.textIndexTable!, summaryTable: self.messageHistoryTagsSummaryTable!, pendingActionsTable: self.pendingMessageActionsTable!) - self.reverseAssociatedTable = ReverseAssociatedPeerTable(valueBox: self.valueBox!, table: ReverseAssociatedPeerTable.tableSpec(26)) - self.peerTable = PeerTable(valueBox: self.valueBox!, table: PeerTable.tableSpec(20), reverseAssociatedTable: self.reverseAssociatedTable!) - self.peerNameTokenIndexTable = ReverseIndexReferenceTable(valueBox: self.valueBox!, table: ReverseIndexReferenceTable.tableSpec(21)) - self.peerNameIndexTable = PeerNameIndexTable(valueBox: self.valueBox!, table: PeerNameIndexTable.tableSpec(22), peerTable: self.peerTable!, peerNameTokenIndexTable: self.peerNameTokenIndexTable!) - self.pendingPeerNotificationSettingsIndexTable = PendingPeerNotificationSettingsIndexTable(valueBox: self.valueBox!, table: PeerNotificationSettingsTable.tableSpec(32)) - self.notificationSettingsTable = PeerNotificationSettingsTable(valueBox: self.valueBox!, table: PeerNotificationSettingsTable.tableSpec(23), pendingIndexTable: self.pendingPeerNotificationSettingsIndexTable!) - self.chatListIndexTable = ChatListIndexTable(valueBox: self.valueBox!, table: ChatListIndexTable.tableSpec(5), peerNameIndexTable: self.peerNameIndexTable!, metadataTable: self.historyMetadataTable!, readStateTable: self.readStateTable!, notificationSettingsTable: self.notificationSettingsTable!) - self.chatListTable = ChatListTable(valueBox: self.valueBox!, table: ChatListTable.tableSpec(6), indexTable: self.chatListIndexTable!, metadataTable: self.historyMetadataTable!, seedConfiguration: seedConfiguration) - self.peerChatInterfaceStateTable = PeerChatInterfaceStateTable(valueBox: self.valueBox!, table: PeerChatInterfaceStateTable.tableSpec(20)) - } - - override func tearDown() { - super.tearDown() - - self.historyTable = nil - self.indexTable = nil - self.mediaTable = nil - self.chatListIndexTable = nil - self.chatListTable = nil - - self.valueBox = nil - let _ = try? FileManager.default.removeItem(atPath: path!) - self.path = nil - } - - private func addMessage(_ peerId: Int32, _ id: Int32, _ timestamp: Int32, _ text: String = "", _ media: [Media] = [], _ groupingKey: Int64? = nil) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - let updatedPeerChatListEmbeddedStates: [PeerId: PeerChatListEmbeddedInterfaceState?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - let initialPeerGroupIdsBeforeUpdate: [PeerId: WrappedPeerGroupId] = [:] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - let updatedChatListGroupInclusions: [PeerGroupId: GroupChatListInclusion] = [:] - var updatedMedia: [MediaId : Media?] = [:] - - let _ = self.historyTable!.addMessages(messages: [StoreMessage(id: MessageId(peerId: PeerId(namespace: namespace, id: peerId), namespace: namespace, id: id), globallyUniqueId: nil, groupingKey: groupingKey, timestamp: timestamp, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, authorId: authorPeerId, text: text, attributes: [], media: media)], location: .Random, operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, localTagsOperations: &localTagsOperations, processMessages: nil) - var operations: [WrappedPeerGroupId: [ChatListOperation]] = [:] - self.chatListTable!.replay(historyOperationsByPeerId: operationsByPeerId, updatedPeerChatListEmbeddedStates: updatedPeerChatListEmbeddedStates, updatedChatListInclusions: [:], updatedChatListGroupInclusions: updatedChatListGroupInclusions, initialPeerGroupIdsBeforeUpdate: initialPeerGroupIdsBeforeUpdate, messageHistoryTable: self.historyTable!, peerChatInterfaceStateTable: self.peerChatInterfaceStateTable!, operations: &operations) - var updatedTotalUnreadState: ChatListTotalUnreadState? - self.chatListIndexTable?.commitWithTransaction(postbox: postbox, alteredInitialPeerCombinedReadStates: [:], updatedPeers: [], transactionParticipationInTotalUnreadCountUpdates: (added: Set(), removed: Set()), updatedTotalUnreadState: &updatedTotalUnreadState) - self.chatListIndexTable?.clearMemoryCache() - } - - private func updateInclusion(_ peerId: Int32, f: (PeerChatListInclusion) -> PeerChatListInclusion) { - var updatedChatListInclusions: [PeerId: PeerChatListInclusion] = [:] - self.chatListTable!.updateInclusion(peerId: PeerId(namespace: namespace, id: peerId), updatedChatListInclusions: &updatedChatListInclusions, f) - - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - let updatedPeerChatListEmbeddedStates: [PeerId: PeerChatListEmbeddedInterfaceState?] = [:] - let initialPeerGroupIdsBeforeUpdate: [PeerId: WrappedPeerGroupId] = [:] - let updatedChatListGroupInclusions: [PeerGroupId: GroupChatListInclusion] = [:] - - var operations: [WrappedPeerGroupId: [ChatListOperation]] = [:] - - self.chatListTable!.replay(historyOperationsByPeerId: [:], updatedPeerChatListEmbeddedStates: [:], updatedChatListInclusions: updatedChatListInclusions, updatedChatListGroupInclusions: updatedChatListGroupInclusions, initialPeerGroupIdsBeforeUpdate: initialPeerGroupIdsBeforeUpdate, messageHistoryTable: self.historyTable!, peerChatInterfaceStateTable: self.peerChatInterfaceStateTable!, operations: &operations) - var updatedTotalUnreadState: ChatListTotalUnreadState? - self.chatListIndexTable?.commitWithTransaction(alteredInitialPeerCombinedReadStates: [:], transactionParticipationInTotalUnreadCountUpdates: (added: Set(), removed: Set()), getCombinedPeerReadState: { peerId -> CombinedPeerReadState? in - self.readStateTable?.getCombinedState(peerId) - }, getPeer: { _ in - return nil - }, updatedTotalUnreadState: &updatedTotalUnreadState) - self.chatListIndexTable?.clearMemoryCache() - } - - private func updatePeerGroup(_ peerId: Int32, _ groupId: PeerGroupId?) { - var initialPeerGroupIdsBeforeUpdate: [PeerId: WrappedPeerGroupId] = [:] - self.groupAssociationTable!.set(peerId: PeerId(namespace: namespace, id: peerId), groupId: groupId, initialPeerGroupIdsBeforeUpdate: &initialPeerGroupIdsBeforeUpdate) - - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - let updatedPeerChatListEmbeddedStates: [PeerId: PeerChatListEmbeddedInterfaceState?] = [:] - let updatedChatListGroupInclusions: [PeerGroupId: GroupChatListInclusion] = [:] - - var operations: [WrappedPeerGroupId: [ChatListOperation]] = [:] - - self.chatListTable!.replay(historyOperationsByPeerId: [:], updatedPeerChatListEmbeddedStates: [:], updatedChatListInclusions: [:], updatedChatListGroupInclusions: updatedChatListGroupInclusions, initialPeerGroupIdsBeforeUpdate: initialPeerGroupIdsBeforeUpdate, messageHistoryTable: self.historyTable!, peerChatInterfaceStateTable: self.peerChatInterfaceStateTable!, operations: &operations) - var updatedTotalUnreadState: ChatListTotalUnreadState? - self.chatListIndexTable?.commitWithTransaction(alteredInitialPeerCombinedReadStates: [:], transactionParticipationInTotalUnreadCountUpdates: (added: Set(), removed: Set()), getCombinedPeerReadState: { peerId -> CombinedPeerReadState? in - self.readStateTable?.getCombinedState(peerId) - }, getPeer: { _ in - return nil - }, updatedTotalUnreadState: &updatedTotalUnreadState) - self.chatListIndexTable?.clearMemoryCache() - } - - private func addHole(_ peerId: Int32, _ id: Int32) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - let updatedPeerChatListEmbeddedStates: [PeerId: PeerChatListEmbeddedInterfaceState?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - let initialPeerGroupIdsBeforeUpdate: [PeerId: WrappedPeerGroupId] = [:] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - let updatedChatListGroupInclusions: [PeerGroupId: GroupChatListInclusion] = [:] - var updatedMedia: [MediaId : Media?] = [:] - - self.historyTable!.addHoles([MessageId(peerId: PeerId(namespace: namespace, id: peerId), namespace: namespace, id: id)], operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, localTagsOperations: &localTagsOperations) - var operations: [WrappedPeerGroupId: [ChatListOperation]] = [:] - self.chatListTable!.replay(historyOperationsByPeerId: operationsByPeerId, updatedPeerChatListEmbeddedStates: updatedPeerChatListEmbeddedStates, updatedChatListInclusions: [:], updatedChatListGroupInclusions: updatedChatListGroupInclusions, initialPeerGroupIdsBeforeUpdate: initialPeerGroupIdsBeforeUpdate, messageHistoryTable: self.historyTable!, peerChatInterfaceStateTable: self.peerChatInterfaceStateTable!, operations: &operations) - } - - private func addChatListHole(groupId: PeerGroupId?, peerId: Int32, id: Int32, timestamp: Int32) { - var operations: [WrappedPeerGroupId: [ChatListOperation]] = [:] - self.chatListTable!.addHole(groupId: groupId, hole: ChatListHole(index: MessageIndex(id: MessageId(peerId: PeerId(namespace: namespace, id: peerId), namespace: namespace, id: id), timestamp: timestamp)), operations: &operations) - } - - private func replaceChatListHole(groupId: PeerGroupId?, peerId: Int32, id: Int32, timestamp: Int32, otherPeerId: Int32, otherId: Int32, otherTimestamp: Int32) { - var operations: [WrappedPeerGroupId: [ChatListOperation]] = [:] - self.chatListTable!.replaceHole(groupId: groupId, index: MessageIndex(id: MessageId(peerId: PeerId(namespace: namespace, id: peerId), namespace: namespace, id: id), timestamp: timestamp), hole: ChatListHole(index: MessageIndex(id: MessageId(peerId: PeerId(namespace: namespace, id: otherPeerId), namespace: namespace, id: otherId), timestamp: otherTimestamp)), operations: &operations) - } - - private func removeChatListHole(groupId: PeerGroupId?, peerId: Int32, id: Int32, timestamp: Int32) { - var operations: [WrappedPeerGroupId: [ChatListOperation]] = [:] - self.chatListTable!.replaceHole(groupId: groupId, index: MessageIndex(id: MessageId(peerId: PeerId(namespace: namespace, id: peerId), namespace: namespace, id: id), timestamp: timestamp), hole: nil, operations: &operations) - } - - private func removeMessages(_ peerId: Int32, _ ids: [Int32]) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - let updatedPeerChatListEmbeddedStates: [PeerId: PeerChatListEmbeddedInterfaceState?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - let initialPeerGroupIdsBeforeUpdate: [PeerId: WrappedPeerGroupId] = [:] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - let updatedChatListGroupInclusions: [PeerGroupId: GroupChatListInclusion] = [:] - var updatedMedia: [MediaId : Media?] = [:] - - self.historyTable!.removeMessages(ids.map({ MessageId(peerId: PeerId(namespace: namespace, id: peerId), namespace: namespace, id: $0) }), operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, localTagsOperations: &localTagsOperations) - var operations: [WrappedPeerGroupId: [ChatListOperation]] = [:] - self.chatListTable!.replay(historyOperationsByPeerId: operationsByPeerId, updatedPeerChatListEmbeddedStates: updatedPeerChatListEmbeddedStates, updatedChatListInclusions: [:], updatedChatListGroupInclusions: updatedChatListGroupInclusions, initialPeerGroupIdsBeforeUpdate: initialPeerGroupIdsBeforeUpdate, messageHistoryTable: self.historyTable!, peerChatInterfaceStateTable: self.peerChatInterfaceStateTable!, operations: &operations) - } - - private func fillHole(_ peerId: Int32, _ id: Int32, _ fillType: HoleFill, _ messages: [(Int32, Int32, String, [Media], Int64?)]) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - let updatedPeerChatListEmbeddedStates: [PeerId: PeerChatListEmbeddedInterfaceState?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - let initialPeerGroupIdsBeforeUpdate: [PeerId: WrappedPeerGroupId] = [:] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - let updatedChatListGroupInclusions: [PeerGroupId: GroupChatListInclusion] = [:] - var updatedMedia: [MediaId : Media?] = [:] - - self.historyTable!.fillHole(MessageId(peerId: PeerId(namespace: namespace, id: peerId), namespace: namespace, id: id), fillType: fillType, tagMask: nil, messages: messages.map({ StoreMessage(id: MessageId(peerId: PeerId(namespace: namespace, id: peerId), namespace: namespace, id: $0.0), globallyUniqueId: nil, groupingKey: $0.4, timestamp: $0.1, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, authorId: authorPeerId, text: $0.2, attributes: [], media: $0.3) }), operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, localTagsOperations: &localTagsOperations) - var operations: [WrappedPeerGroupId: [ChatListOperation]] = [:] - self.chatListTable!.replay(historyOperationsByPeerId: operationsByPeerId, updatedPeerChatListEmbeddedStates: updatedPeerChatListEmbeddedStates, updatedChatListInclusions: [:], updatedChatListGroupInclusions: updatedChatListGroupInclusions, initialPeerGroupIdsBeforeUpdate: initialPeerGroupIdsBeforeUpdate, messageHistoryTable: self.historyTable!, peerChatInterfaceStateTable: self.peerChatInterfaceStateTable!, operations: &operations) - } - - private func expectEntries(groupId: PeerGroupId?, entries: [Entry]) { - let actualEntries = self.chatListTable!.debugList(groupId: groupId, messageHistoryTable: self.historyTable!, peerChatInterfaceStateTable: self.peerChatInterfaceStateTable!).map({ entry -> Entry in - switch entry { - case let .message(index, message, _): - if let message = message, message.authorId != authorPeerId { - XCTFail("Expected authorId \(authorPeerId), actual \(String(describing: message.authorId))") - } - return .Message(index.messageIndex.id.peerId.id, index.messageIndex.id.id, index.messageIndex.timestamp, message != nil) - case let .hole(hole): - return .Hole(hole.index.id.peerId.id, hole.index.id.id, hole.index.timestamp) - case let .groupReference(groupId, index): - return .GroupReference(groupId, index.messageIndex.id.peerId.id, index.messageIndex.id.id, index.messageIndex.timestamp) - } - }) - if entries != actualEntries { - XCTFail("Expected\n\(entries)\nActual\n\(actualEntries)") - } - } - - func testEmpty() { - expectEntries(groupId: nil, entries: []) - } - - func testAddSingleMessage() { - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - - addMessage(1, 100, 100) - expectEntries(groupId: nil, entries: [.Message(1, 100, 100, true)]) - } - - func testInsertLaterMessage() { - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - - addMessage(1, 100, 100) - addMessage(1, 200, 200) - expectEntries(groupId: nil, entries: [.Message(1, 200, 200, true)]) - } - - func testInsertEarlierMessage() { - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - - addMessage(1, 100, 100) - addMessage(1, 10, 20) - expectEntries(groupId: nil, entries: [.Message(1, 100, 100, true)]) - } - - func testInsertTwoChatMessages() { - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - updateInclusion(2, f: { _ in - return .ifHasMessages - }) - - addMessage(1, 100, 100) - addMessage(2, 10, 20) - expectEntries(groupId: nil, entries: [.Message(2, 10, 20, true), .Message(1, 100, 100, true)]) - } - - func testMoveChatUpper() { - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - updateInclusion(2, f: { _ in - return .ifHasMessages - }) - - addMessage(1, 100, 100) - addMessage(2, 10, 20) - addMessage(2, 120, 120) - expectEntries(groupId: nil, entries: [.Message(1, 100, 100, true), .Message(2, 120, 120, true)]) - } - - func testRemoveSingleMessageInclusionIfHasMessages() { - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - addMessage(1, 100, 100) - removeMessages(1, [100]) - expectEntries(groupId: nil, entries: []) - } - - func testAddSingleMessageInclusionNever() { - addMessage(1, 100, 100) - expectEntries(groupId: nil, entries: []) - } - - func testEmptyWithInclusionMinIndex() { - updateInclusion(1, f: { _ in - return .ifHasMessagesOrOneOf(pinningIndex: nil, minTimestamp: 50) - }) - expectEntries(groupId: nil, entries: [.Message(1, 0, 50, false)]) - addMessage(1, 20, 20) - expectEntries(groupId: nil, entries: [.Message(1, 0, 50, true)]) - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - expectEntries(groupId: nil, entries: [.Message(1, 20, 20, true)]) - } - - func testEmptyWithInclusionPinningIndex() { - updateInclusion(1, f: { _ in - return .ifHasMessagesOrOneOf(pinningIndex: 0, minTimestamp: nil) - }) - expectEntries(groupId: nil, entries: [.Message(1, 0, 0, false)]) - } - - func testRemoveSingleMessageInclusionWithMinIndexUpdate() { - updateInclusion(1, f: { _ in - return .ifHasMessagesOrOneOf(pinningIndex: nil, minTimestamp: 50) - }) - addMessage(1, 100, 100) - removeMessages(1, [100]) - expectEntries(groupId: nil, entries: [.Message(1, 0, 50, false)]) - updateInclusion(1, f: { _ in - return .ifHasMessagesOrOneOf(pinningIndex: nil, minTimestamp: 200) - }) - expectEntries(groupId: nil, entries: [.Message(1, 0, 200, false)]) - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - expectEntries(groupId: nil, entries: []) - addMessage(1, 200, 200) - expectEntries(groupId: nil, entries: [.Message(1, 200, 200, true)]) - } - - func testOverrideNothing() { - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - - addMessage(1, 100, 100) - removeMessages(1, [100]) - addMessage(1, 100, 100) - expectEntries(groupId: nil, entries: [.Message(1, 100, 100, true)]) - } - - func testInsertHoleIntoEmpty() { - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - - addChatListHole(groupId: nil, peerId: 1, id: 10, timestamp: 10) - expectEntries(groupId: nil, entries: [.Hole(1, 10, 10)]) - } - - func testInsertHoleLower() { - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - - addMessage(1, 100, 100) - addChatListHole(groupId: nil, peerId: 1, id: 10, timestamp: 10) - expectEntries(groupId: nil, entries: [.Hole(1, 10, 10), .Message(1, 100, 100, true)]) - } - - func testInsertHoleUpper() { - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - - addMessage(1, 100, 100) - addChatListHole(groupId: nil, peerId: 1, id: 200, timestamp: 200) - expectEntries(groupId: nil, entries: [.Message(1, 100, 100, true), .Hole(1, 200, 200)]) - } - - func testIgnoreRemoveHole() { - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - - addChatListHole(groupId: nil, peerId: 1, id: 100, timestamp: 100) - removeMessages(1, [100]) - expectEntries(groupId: nil, entries: [.Hole(1, 100, 100)]) - - addMessage(1, 100, 100) - expectEntries(groupId: nil, entries: [.Message(1, 100, 100, true), .Hole(1, 100, 100)]) - - removeMessages(1, [100]) - expectEntries(groupId: nil, entries: [.Hole(1, 100, 100)]) - - updateInclusion(1, f: { _ in - return .ifHasMessagesOrOneOf(pinningIndex: nil, minTimestamp: 100) - }) - expectEntries(groupId: nil, entries: [.Message(1, 0, 100, false), .Hole(1, 100, 100)]) - } - - func testReplaceHoleWithHole() { - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - updateInclusion(2, f: { _ in - return .ifHasMessages - }) - - addChatListHole(groupId: nil, peerId: 1, id: 100, timestamp: 100) - replaceChatListHole(groupId: nil, peerId: 1, id: 100, timestamp: 100, otherPeerId: 2, otherId: 200, otherTimestamp: 200) - expectEntries(groupId: nil, entries: [.Hole(2, 200, 200)]) - } - - func testReplaceHoleWithNone() { - addChatListHole(groupId: nil, peerId: 1, id: 100, timestamp: 100) - removeChatListHole(groupId: nil, peerId: 1, id: 100, timestamp: 100) - expectEntries(groupId: nil, entries: []) - } - - func testInclusionUpdate() { - addMessage(1, 100, 100) - addMessage(1, 200, 200) - updateInclusion(1, f: { _ in - return .ifHasMessagesOrOneOf(pinningIndex: nil, minTimestamp: 1) - }) - addMessage(1, 300, 300) - expectEntries(groupId: nil, entries: [.Message(1, 300, 300, true)]) - } - - func testGroup1() { - updateInclusion(1, f: { _ in - return .ifHasMessages - }) - updateInclusion(2, f: { _ in - return .ifHasMessages - }) - updateInclusion(3, f: { _ in - return .ifHasMessages - }) - - updatePeerGroup(1, PeerGroupId(rawValue: 1)) - updatePeerGroup(2, PeerGroupId(rawValue: 2)) - addMessage(1, 100, 100) - addMessage(1, 200, 200) - addMessage(2, 110, 100) - addMessage(3, 220, 200) - expectEntries(groupId: PeerGroupId(rawValue: 1), entries: [ - .Message(1, 200, 200, true) - ]) - expectEntries(groupId: PeerGroupId(rawValue: 2), entries: [ - .Message(2, 110, 100, true) - ]) - expectEntries(groupId: nil, entries: [ - .GroupReference(PeerGroupId(rawValue: 2), 2, 110, 100), - .GroupReference(PeerGroupId(rawValue: 1), 1, 200, 200), - .Message(3, 220, 200, true) - ]) - removeMessages(1, [200]) - expectEntries(groupId: PeerGroupId(rawValue: 1), entries: [ - .Message(1, 100, 100, true) - ]) - expectEntries(groupId: PeerGroupId(rawValue: 2), entries: [ - .Message(2, 110, 100, true) - ]) - expectEntries(groupId: nil, entries: [ - .GroupReference(PeerGroupId(rawValue: 1), 1, 100, 100), - .GroupReference(PeerGroupId(rawValue: 2), 2, 110, 100), - .Message(3, 220, 200, true) - ]) - - updatePeerGroup(1, nil) - expectEntries(groupId: PeerGroupId(rawValue: 1), entries: []) - expectEntries(groupId: PeerGroupId(rawValue: 2), entries: [ - .Message(2, 110, 100, true) - ]) - expectEntries(groupId: nil, entries: [ - .Message(1, 100, 100, true), - .GroupReference(PeerGroupId(rawValue: 2), 2, 110, 100), - .Message(3, 220, 200, true) - ]) - removeMessages(2, [110]) - expectEntries(groupId: nil, entries: [ - .Message(1, 100, 100, true), - .Message(3, 220, 200, true) - ]) - addMessage(2, 110, 100) - expectEntries(groupId: nil, entries: [ - .Message(1, 100, 100, true), - .GroupReference(PeerGroupId(rawValue: 2), 2, 110, 100), - .Message(3, 220, 200, true) - ]) - } -} diff --git a/submodules/Postbox/PostboxTests/CodingTests.swift b/submodules/Postbox/PostboxTests/CodingTests.swift deleted file mode 100644 index e6e6b1f50c..0000000000 --- a/submodules/Postbox/PostboxTests/CodingTests.swift +++ /dev/null @@ -1,222 +0,0 @@ -import UIKit -import XCTest - -import Postbox - -class TestParent: PostboxCoding, Equatable { - var parentInt32: Int32 - - required init(decoder: PostboxDecoder) { - self.parentInt32 = decoder.decodeInt32ForKey("parentInt32", orElse: 0) - } - - init(parentInt32: Int32) { - self.parentInt32 = parentInt32 - } - - func encode(_ encoder: PostboxEncoder) { - encoder.encodeInt32(self.parentInt32, forKey: "parentInt32") - } -} - -class TestObject: TestParent { - var int32: Int32 - var int64: Int64 - var double: Double - var string: String - var int32Array: [Int32] - var int64Array: [Int64] - - required init(decoder: PostboxDecoder) { - self.int32 = decoder.decodeInt32ForKey("int32", orElse: 0) - self.int64 = decoder.decodeInt64ForKey("int64", orElse: 0) - self.double = decoder.decodeDoubleForKey("double", orElse: 0.0) - self.string = decoder.decodeStringForKey("string", orElse: "") - self.int32Array = decoder.decodeInt32ArrayForKey("int32Array") - self.int64Array = decoder.decodeInt64ArrayForKey("int64Array") - super.init(decoder: decoder) - } - - init(parentInt32: Int32, int32: Int32, int64: Int64, double: Double, string: String, int32Array: [Int32], int64Array: [Int64]) { - self.int32 = int32 - self.int64 = int64 - self.double = double - self.string = string - self.int32Array = int32Array - self.int64Array = int64Array - super.init(parentInt32: parentInt32) - } - - override func encode(_ encoder: PostboxEncoder) { - encoder.encodeInt32(self.int32, forKey: "int32") - encoder.encodeInt64(self.int64, forKey: "int64") - encoder.encodeDouble(self.double, forKey: "double") - encoder.encodeString(self.string, forKey: "string") - encoder.encodeInt32Array(self.int32Array, forKey: "int32Array") - encoder.encodeInt64Array(self.int64Array, forKey: "int64Array") - super.encode(encoder) - } -} - -class TestKey: PostboxCoding, Hashable { - let value: Int - required init(decoder: PostboxDecoder) { - self.value = Int(decoder.decodeInt32ForKey("value", orElse: 0)) - } - - init(value: Int) { - self.value = value - } - - func encode(_ encoder: PostboxEncoder) { - encoder.encodeInt32(Int32(self.value), forKey: "value") - } - - var hashValue: Int { - get { - return self.value - } - } -} - -func ==(lhs: TestObject, rhs: TestObject) -> Bool { - return lhs.int32 == rhs.int32 && - lhs.int64 == rhs.int64 && - lhs.double == rhs.double && - lhs.string == rhs.string && - lhs.int32Array == rhs.int32Array && - lhs.int64Array == rhs.int64Array && - lhs.parentInt32 == rhs.parentInt32 -} - -func ==(lhs: TestParent, rhs: TestParent) -> Bool { - return lhs.parentInt32 == rhs.parentInt32 -} - -func ==(lhs: TestKey, rhs: TestKey) -> Bool { - return lhs.value == rhs.value -} - -class EmptyState: PostboxCoding { - required init(decoder: PostboxDecoder) { - } - - func encode(_ encoder: PostboxEncoder) { - } -} - -class SerializationTests: XCTestCase { - override func setUp() { - super.setUp() - } - - override func tearDown() { - super.tearDown() - } - - func testExample() { - declareEncodable(TestParent.self, f: { TestParent(decoder: $0) }) - declareEncodable(TestObject.self, f: { TestObject(decoder: $0) }) - declareEncodable(TestKey.self, f: { TestKey(decoder: $0) }) - - let encoder = PostboxEncoder() - encoder.encodeInt32(12345, forKey: "a") - encoder.encodeInt64(Int64(12345), forKey: "b") - encoder.encodeBool(true, forKey: "c") - encoder.encodeString("test", forKey: "d") - - let before = TestObject(parentInt32: 100, int32: 12345, int64: 67890, double: 1.23456, string: "test", int32Array: [1, 2, 3, 4, 5], int64Array: [6, 7, 8, 9, 0]) - encoder.encodeObject(before, forKey: "e") - - encoder.encodeInt32Array([1, 2, 3, 4], forKey: "f") - encoder.encodeInt64Array([1, 2, 3, 4], forKey: "g") - - let beforeArray: [TestParent] = [TestObject(parentInt32: 1000, int32: 12345, int64: 67890, double: 1.23456, string: "test", int32Array: [1, 2, 3, 4, 5], int64Array: [6, 7, 8, 9, 0]), TestParent(parentInt32: 2000)] - - encoder.encodeObjectArray(beforeArray, forKey: "h") - - let beforeDictionary: [TestKey : TestParent] = [ - TestKey(value: 1): TestObject(parentInt32: 1000, int32: 12345, int64: 67890, double: 1.23456, string: "test", int32Array: [1, 2, 3, 4, 5], int64Array: [6, 7, 8, 9, 0]), - TestKey(value: 2): TestParent(parentInt32: 2000) - ] - - encoder.encodeObjectDictionary(beforeDictionary, forKey: "i") - - let decoder = PostboxDecoder(buffer: encoder.makeReadBufferAndReset()) - - let afterDictionary = decoder.decodeObjectDictionaryForKey("i") as [TestKey : TestParent] - XCTAssert(afterDictionary == beforeDictionary, "object dictionary failed") - - let afterArray = decoder.decodeObjectArrayForKey("h") as [TestParent] - XCTAssert(afterArray == beforeArray, "object array failed") - - XCTAssert(decoder.decodeInt64ArrayForKey("g") == [1, 2, 3, 4], "int64 array failed") - XCTAssert(decoder.decodeInt32ArrayForKey("f") == [1, 2, 3, 4], "int32 array failed") - - if let after = decoder.decodeObjectForKey("e") as? TestObject { - XCTAssert(after == before, "object failed") - } else { - XCTFail("object failed") - } - - XCTAssert(decoder.decodeStringForKey("d", orElse: "") == "test", "string failed") - XCTAssert(decoder.decodeBoolForKey("c", orElse: false), "bool failed") - XCTAssert(decoder.decodeInt64ForKey("b", orElse: 0) == Int64(12345), "int64 failed") - XCTAssert(decoder.decodeInt32ForKey("a", orElse: 0) == 12345, "int32 failed") - } - - func testKeys() { - let key1 = ValueBoxKey(length: 8) - let key2 = ValueBoxKey(length: 8) - - key1.setInt32(0, value: 1) - key1.setInt32(4, value: 2) - - key2.setInt32(0, value: 1) - key2.setInt32(4, value: 3) - - let lowerBound = ValueBoxKey(length: 4) - lowerBound.setInt32(0, value: 0) - let upperBound = ValueBoxKey(length: 4) - upperBound.setInt32(0, value: 2) - - XCTAssert(key1 > lowerBound, "key1 <= lowerBound") - XCTAssert(key1 < upperBound, "key1 >= upperBound") - XCTAssert(key2 > lowerBound, "key2 <= lowerBound") - XCTAssert(key2 < upperBound, "key2 >= upperBound") - - XCTAssert(key1 < key2, "key1 >= key2") - XCTAssert(key1.successor == key2, "key1.next != key2") - XCTAssert(key2.predecessor == key1, "key2.previous != key1") - } - - func testKeyValue() { - /*let basePath = "/tmp/postboxtest" - do { - try NSFileManager.defaultManager().removeItemAtPath(basePath) - } catch _ { } - - let box = SqliteValueBox(basePath: basePath) - box.transaction { transaction in - let key = ValueBoxKey(length: 4) - let value = WriteBuffer() - for i in 1 ... 100 { - key.setInt32(0, value: Int32(i)) - transaction.set("test", key: key, value: value) - } - } - - do { - box.transaction { transaction in - let lowerBound = ValueBoxKey(length: 4) - lowerBound.setInt32(0, value: 2) - let upperBound = ValueBoxKey(length: 4) - upperBound.setInt32(0, value: 99) - transaction.range("test", start: upperBound, end: lowerBound, values: { key, value in - print("\(key.getInt32(0))") - return true - }, limit: 10) - } - }*/ - } -} diff --git a/submodules/Postbox/PostboxTests/HoleOperationsVector1.json b/submodules/Postbox/PostboxTests/HoleOperationsVector1.json deleted file mode 100644 index 47bf326dde..0000000000 --- a/submodules/Postbox/PostboxTests/HoleOperationsVector1.json +++ /dev/null @@ -1 +0,0 @@ -[{"a":false,"l":256,"u":864},{"a":true,"l":144,"u":237},{"a":true,"l":23,"u":363},{"a":true,"l":258,"u":936},{"a":false,"l":227,"u":877},{"a":false,"l":29,"u":713},{"a":false,"l":306,"u":460},{"a":false,"l":21,"u":761},{"a":false,"l":367,"u":795},{"a":false,"l":534,"u":838},{"a":true,"l":185,"u":636},{"a":false,"l":426,"u":606},{"a":true,"l":77,"u":677},{"a":true,"l":332,"u":431},{"a":true,"l":34,"u":951},{"a":true,"l":205,"u":230},{"a":false,"l":298,"u":600},{"a":true,"l":197,"u":346},{"a":true,"l":125,"u":498},{"a":true,"l":336,"u":734},{"a":false,"l":380,"u":857},{"a":false,"l":201,"u":410},{"a":true,"l":609,"u":618},{"a":true,"l":380,"u":497},{"a":false,"l":408,"u":750},{"a":false,"l":135,"u":424},{"a":true,"l":165,"u":999},{"a":false,"l":159,"u":485},{"a":true,"l":735,"u":781},{"a":true,"l":318,"u":530},{"a":true,"l":512,"u":609},{"a":false,"l":331,"u":347},{"a":false,"l":777,"u":843},{"a":true,"l":635,"u":874},{"a":true,"l":177,"u":212},{"a":false,"l":337,"u":460},{"a":true,"l":119,"u":511},{"a":false,"l":727,"u":781},{"a":true,"l":64,"u":213},{"a":false,"l":44,"u":284},{"a":true,"l":56,"u":721},{"a":false,"l":22,"u":210},{"a":true,"l":592,"u":974},{"a":true,"l":520,"u":689},{"a":true,"l":313,"u":928},{"a":false,"l":359,"u":412},{"a":false,"l":644,"u":928},{"a":false,"l":656,"u":688},{"a":false,"l":23,"u":830},{"a":false,"l":724,"u":743},{"a":false,"l":263,"u":717},{"a":false,"l":279,"u":379},{"a":true,"l":104,"u":129},{"a":true,"l":554,"u":765},{"a":true,"l":200,"u":651},{"a":true,"l":19,"u":791},{"a":false,"l":448,"u":455},{"a":false,"l":90,"u":702},{"a":true,"l":188,"u":702},{"a":true,"l":616,"u":817},{"a":true,"l":828,"u":997},{"a":true,"l":155,"u":200},{"a":false,"l":594,"u":674},{"a":true,"l":20,"u":790},{"a":true,"l":328,"u":331},{"a":true,"l":192,"u":629},{"a":false,"l":118,"u":241},{"a":false,"l":865,"u":883},{"a":false,"l":599,"u":939},{"a":false,"l":585,"u":591},{"a":false,"l":72,"u":384},{"a":true,"l":657,"u":899},{"a":false,"l":85,"u":131},{"a":false,"l":496,"u":728},{"a":false,"l":706,"u":903},{"a":false,"l":207,"u":731},{"a":true,"l":31,"u":289},{"a":false,"l":579,"u":593},{"a":true,"l":269,"u":991},{"a":true,"l":197,"u":725},{"a":true,"l":115,"u":801},{"a":false,"l":294,"u":366},{"a":true,"l":147,"u":236},{"a":false,"l":966,"u":994},{"a":true,"l":288,"u":523},{"a":false,"l":366,"u":703},{"a":false,"l":20,"u":60},{"a":false,"l":118,"u":867},{"a":false,"l":144,"u":665},{"a":false,"l":25,"u":937},{"a":true,"l":567,"u":918},{"a":false,"l":197,"u":597},{"a":false,"l":27,"u":204},{"a":false,"l":597,"u":777},{"a":true,"l":638,"u":983},{"a":false,"l":59,"u":589},{"a":false,"l":144,"u":150},{"a":false,"l":463,"u":874},{"a":true,"l":279,"u":979},{"a":true,"l":202,"u":247},{"a":true,"l":78,"u":308},{"a":true,"l":228,"u":906},{"a":true,"l":73,"u":639},{"a":true,"l":382,"u":999},{"a":false,"l":240,"u":490},{"a":false,"l":124,"u":509},{"a":true,"l":482,"u":990},{"a":true,"l":137,"u":398},{"a":true,"l":837,"u":871},{"a":true,"l":63,"u":760},{"a":true,"l":144,"u":854},{"a":true,"l":180,"u":261},{"a":false,"l":167,"u":171},{"a":true,"l":534,"u":762},{"a":true,"l":461,"u":792},{"a":true,"l":21,"u":977},{"a":true,"l":718,"u":960},{"a":true,"l":311,"u":999},{"a":true,"l":184,"u":953},{"a":true,"l":191,"u":427},{"a":true,"l":543,"u":981},{"a":true,"l":108,"u":846},{"a":true,"l":167,"u":410},{"a":false,"l":181,"u":521},{"a":false,"l":204,"u":916},{"a":false,"l":221,"u":992},{"a":true,"l":51,"u":527},{"a":false,"l":159,"u":670},{"a":true,"l":357,"u":759},{"a":true,"l":135,"u":631},{"a":false,"l":20,"u":369},{"a":false,"l":183,"u":211},{"a":true,"l":459,"u":879},{"a":false,"l":478,"u":876},{"a":false,"l":314,"u":900},{"a":true,"l":121,"u":863},{"a":false,"l":336,"u":350},{"a":true,"l":278,"u":415},{"a":false,"l":884,"u":982},{"a":false,"l":221,"u":880},{"a":false,"l":5,"u":620},{"a":true,"l":353,"u":949},{"a":true,"l":310,"u":813},{"a":false,"l":399,"u":717},{"a":false,"l":264,"u":783},{"a":false,"l":506,"u":882},{"a":true,"l":215,"u":937},{"a":false,"l":114,"u":747},{"a":false,"l":61,"u":523},{"a":true,"l":387,"u":961},{"a":true,"l":408,"u":451},{"a":false,"l":247,"u":334},{"a":true,"l":153,"u":726},{"a":false,"l":209,"u":276},{"a":false,"l":338,"u":963},{"a":true,"l":234,"u":580},{"a":true,"l":686,"u":701},{"a":false,"l":47,"u":258},{"a":false,"l":137,"u":857},{"a":true,"l":809,"u":984},{"a":true,"l":254,"u":447},{"a":false,"l":208,"u":942},{"a":false,"l":676,"u":949},{"a":false,"l":438,"u":768},{"a":false,"l":79,"u":747},{"a":true,"l":109,"u":855},{"a":false,"l":239,"u":836},{"a":true,"l":430,"u":687},{"a":true,"l":180,"u":399},{"a":true,"l":93,"u":529},{"a":false,"l":754,"u":920},{"a":false,"l":285,"u":651},{"a":true,"l":38,"u":851},{"a":false,"l":118,"u":940},{"a":false,"l":603,"u":981},{"a":false,"l":186,"u":902},{"a":false,"l":721,"u":980},{"a":true,"l":200,"u":323},{"a":true,"l":715,"u":732},{"a":false,"l":12,"u":313},{"a":false,"l":317,"u":886},{"a":true,"l":390,"u":393},{"a":false,"l":18,"u":368},{"a":true,"l":33,"u":627},{"a":true,"l":436,"u":647},{"a":true,"l":394,"u":678},{"a":true,"l":143,"u":548},{"a":true,"l":482,"u":771},{"a":true,"l":535,"u":597},{"a":false,"l":36,"u":87},{"a":true,"l":328,"u":547},{"a":true,"l":250,"u":668},{"a":false,"l":1,"u":735},{"a":false,"l":50,"u":312},{"a":true,"l":379,"u":878},{"a":true,"l":118,"u":133},{"a":true,"l":494,"u":834},{"a":false,"l":193,"u":838},{"a":true,"l":36,"u":45},{"a":true,"l":41,"u":416},{"a":false,"l":673,"u":935},{"a":true,"l":170,"u":262},{"a":true,"l":725,"u":917},{"a":true,"l":453,"u":884},{"a":false,"l":416,"u":917},{"a":true,"l":468,"u":989},{"a":true,"l":777,"u":990},{"a":false,"l":112,"u":215},{"a":false,"l":602,"u":978},{"a":true,"l":635,"u":670},{"a":false,"l":683,"u":994},{"a":false,"l":213,"u":649},{"a":false,"l":101,"u":660},{"a":true,"l":413,"u":466},{"a":false,"l":35,"u":682},{"a":true,"l":67,"u":765},{"a":true,"l":58,"u":822},{"a":true,"l":103,"u":607},{"a":false,"l":303,"u":744},{"a":true,"l":438,"u":999},{"a":true,"l":149,"u":352},{"a":false,"l":172,"u":366},{"a":true,"l":392,"u":796},{"a":false,"l":680,"u":864},{"a":true,"l":248,"u":664},{"a":false,"l":547,"u":744},{"a":true,"l":504,"u":789},{"a":false,"l":143,"u":647},{"a":true,"l":448,"u":790},{"a":false,"l":195,"u":294},{"a":false,"l":129,"u":149},{"a":false,"l":664,"u":774},{"a":false,"l":328,"u":693},{"a":false,"l":231,"u":380},{"a":true,"l":370,"u":805},{"a":true,"l":95,"u":680},{"a":false,"l":660,"u":771},{"a":true,"l":608,"u":839},{"a":false,"l":265,"u":518},{"a":true,"l":364,"u":806},{"a":false,"l":633,"u":974},{"a":true,"l":272,"u":430},{"a":true,"l":435,"u":512},{"a":false,"l":438,"u":639},{"a":false,"l":306,"u":794},{"a":false,"l":296,"u":943},{"a":false,"l":304,"u":886},{"a":true,"l":18,"u":411},{"a":true,"l":540,"u":801},{"a":false,"l":15,"u":239},{"a":true,"l":137,"u":426},{"a":true,"l":658,"u":959},{"a":false,"l":476,"u":827},{"a":true,"l":671,"u":945},{"a":false,"l":307,"u":791},{"a":false,"l":159,"u":839},{"a":false,"l":704,"u":868},{"a":false,"l":43,"u":315},{"a":true,"l":132,"u":821},{"a":true,"l":200,"u":980},{"a":true,"l":360,"u":959},{"a":false,"l":67,"u":592},{"a":true,"l":275,"u":802},{"a":true,"l":344,"u":886},{"a":false,"l":87,"u":819},{"a":true,"l":191,"u":822},{"a":true,"l":86,"u":240},{"a":false,"l":341,"u":924},{"a":true,"l":160,"u":179},{"a":false,"l":236,"u":741},{"a":false,"l":884,"u":967},{"a":false,"l":69,"u":176},{"a":false,"l":293,"u":814},{"a":false,"l":272,"u":936},{"a":false,"l":164,"u":226},{"a":true,"l":619,"u":821},{"a":false,"l":800,"u":957},{"a":false,"l":298,"u":672},{"a":true,"l":138,"u":693},{"a":false,"l":211,"u":824},{"a":true,"l":643,"u":844},{"a":true,"l":271,"u":525},{"a":true,"l":161,"u":613},{"a":true,"l":43,"u":680},{"a":true,"l":575,"u":583},{"a":false,"l":3,"u":208},{"a":false,"l":243,"u":968},{"a":false,"l":342,"u":867},{"a":false,"l":806,"u":847},{"a":false,"l":177,"u":247},{"a":true,"l":825,"u":841},{"a":false,"l":445,"u":445},{"a":true,"l":252,"u":916},{"a":true,"l":502,"u":843},{"a":true,"l":255,"u":888},{"a":true,"l":25,"u":318},{"a":false,"l":78,"u":479},{"a":true,"l":521,"u":637},{"a":false,"l":214,"u":966},{"a":false,"l":211,"u":911},{"a":true,"l":27,"u":327},{"a":true,"l":295,"u":584},{"a":false,"l":701,"u":921},{"a":true,"l":452,"u":804},{"a":true,"l":191,"u":843},{"a":true,"l":54,"u":451},{"a":true,"l":32,"u":934},{"a":true,"l":125,"u":302},{"a":false,"l":380,"u":897},{"a":false,"l":24,"u":984},{"a":true,"l":358,"u":542},{"a":false,"l":415,"u":418},{"a":true,"l":464,"u":479},{"a":true,"l":768,"u":960},{"a":false,"l":592,"u":775},{"a":false,"l":246,"u":759},{"a":false,"l":169,"u":704},{"a":true,"l":290,"u":308},{"a":true,"l":173,"u":692},{"a":true,"l":121,"u":866},{"a":true,"l":246,"u":307},{"a":true,"l":25,"u":263},{"a":true,"l":125,"u":577},{"a":true,"l":74,"u":324},{"a":true,"l":115,"u":433},{"a":true,"l":491,"u":969},{"a":true,"l":630,"u":885},{"a":false,"l":458,"u":736},{"a":true,"l":810,"u":982},{"a":true,"l":548,"u":776},{"a":false,"l":903,"u":967},{"a":false,"l":57,"u":888},{"a":true,"l":367,"u":467},{"a":true,"l":168,"u":816},{"a":false,"l":18,"u":694},{"a":true,"l":22,"u":136},{"a":false,"l":353,"u":694},{"a":true,"l":148,"u":966},{"a":false,"l":188,"u":369},{"a":false,"l":185,"u":824},{"a":true,"l":757,"u":936},{"a":true,"l":199,"u":231},{"a":true,"l":499,"u":731},{"a":true,"l":566,"u":893},{"a":false,"l":161,"u":266},{"a":false,"l":69,"u":508},{"a":false,"l":473,"u":817},{"a":false,"l":117,"u":179},{"a":true,"l":79,"u":917},{"a":true,"l":261,"u":457},{"a":true,"l":530,"u":967},{"a":true,"l":130,"u":168},{"a":true,"l":124,"u":999},{"a":true,"l":171,"u":832},{"a":false,"l":118,"u":319},{"a":false,"l":21,"u":31},{"a":false,"l":128,"u":511},{"a":false,"l":151,"u":782},{"a":false,"l":8,"u":50},{"a":false,"l":67,"u":884},{"a":true,"l":62,"u":660},{"a":false,"l":517,"u":857},{"a":false,"l":634,"u":703},{"a":true,"l":207,"u":409},{"a":true,"l":35,"u":269},{"a":false,"l":533,"u":860},{"a":true,"l":88,"u":212},{"a":true,"l":258,"u":484},{"a":false,"l":195,"u":809},{"a":false,"l":253,"u":517},{"a":true,"l":744,"u":794},{"a":true,"l":544,"u":588},{"a":true,"l":179,"u":431},{"a":true,"l":898,"u":932},{"a":true,"l":112,"u":719},{"a":false,"l":170,"u":474},{"a":false,"l":130,"u":866},{"a":true,"l":26,"u":505},{"a":true,"l":188,"u":414},{"a":false,"l":484,"u":756},{"a":true,"l":586,"u":885},{"a":false,"l":634,"u":751},{"a":false,"l":31,"u":206},{"a":true,"l":613,"u":889},{"a":false,"l":150,"u":719},{"a":false,"l":323,"u":580},{"a":false,"l":31,"u":815},{"a":false,"l":209,"u":884},{"a":true,"l":426,"u":911},{"a":false,"l":479,"u":690},{"a":false,"l":89,"u":445},{"a":true,"l":430,"u":436},{"a":false,"l":47,"u":442},{"a":true,"l":552,"u":652},{"a":false,"l":482,"u":920},{"a":false,"l":680,"u":942},{"a":true,"l":161,"u":168},{"a":false,"l":294,"u":415},{"a":true,"l":117,"u":428},{"a":true,"l":87,"u":359},{"a":false,"l":105,"u":447},{"a":true,"l":497,"u":618},{"a":true,"l":58,"u":436},{"a":true,"l":537,"u":676},{"a":true,"l":605,"u":667},{"a":false,"l":146,"u":293},{"a":false,"l":93,"u":388},{"a":true,"l":94,"u":794},{"a":true,"l":181,"u":301},{"a":false,"l":298,"u":883},{"a":true,"l":787,"u":817},{"a":true,"l":124,"u":899},{"a":true,"l":128,"u":311},{"a":true,"l":260,"u":373},{"a":false,"l":220,"u":260},{"a":true,"l":810,"u":958},{"a":true,"l":407,"u":873},{"a":false,"l":226,"u":653},{"a":true,"l":362,"u":764},{"a":false,"l":892,"u":978},{"a":false,"l":479,"u":510},{"a":false,"l":453,"u":915},{"a":false,"l":349,"u":629},{"a":false,"l":449,"u":641},{"a":true,"l":145,"u":624},{"a":false,"l":431,"u":989},{"a":false,"l":103,"u":819},{"a":false,"l":316,"u":688},{"a":true,"l":508,"u":959},{"a":true,"l":34,"u":92},{"a":false,"l":22,"u":723},{"a":true,"l":101,"u":106},{"a":false,"l":604,"u":752},{"a":false,"l":866,"u":901},{"a":false,"l":26,"u":502},{"a":true,"l":254,"u":554},{"a":false,"l":33,"u":454},{"a":false,"l":449,"u":956},{"a":false,"l":62,"u":394},{"a":true,"l":144,"u":784},{"a":true,"l":597,"u":782},{"a":true,"l":204,"u":554},{"a":false,"l":260,"u":914},{"a":false,"l":795,"u":803},{"a":false,"l":459,"u":738},{"a":true,"l":512,"u":914},{"a":false,"l":613,"u":931},{"a":true,"l":289,"u":576},{"a":true,"l":179,"u":448},{"a":true,"l":424,"u":900},{"a":true,"l":215,"u":397},{"a":true,"l":81,"u":589},{"a":false,"l":459,"u":558},{"a":false,"l":109,"u":384},{"a":false,"l":188,"u":798},{"a":true,"l":133,"u":240},{"a":true,"l":756,"u":951},{"a":false,"l":113,"u":503},{"a":true,"l":351,"u":692},{"a":false,"l":554,"u":749},{"a":true,"l":508,"u":826},{"a":true,"l":450,"u":758},{"a":false,"l":857,"u":996},{"a":true,"l":204,"u":298},{"a":false,"l":768,"u":830},{"a":false,"l":720,"u":754},{"a":true,"l":123,"u":915},{"a":true,"l":21,"u":314},{"a":true,"l":1,"u":296},{"a":false,"l":636,"u":961},{"a":false,"l":538,"u":963},{"a":true,"l":312,"u":706},{"a":false,"l":223,"u":810},{"a":true,"l":236,"u":627},{"a":true,"l":385,"u":990},{"a":false,"l":683,"u":801},{"a":true,"l":426,"u":996},{"a":false,"l":259,"u":322},{"a":true,"l":735,"u":858},{"a":false,"l":29,"u":337},{"a":true,"l":148,"u":890},{"a":false,"l":486,"u":491},{"a":false,"l":34,"u":436},{"a":false,"l":158,"u":610},{"a":true,"l":350,"u":709},{"a":true,"l":584,"u":915},{"a":false,"l":482,"u":704},{"a":true,"l":11,"u":991},{"a":true,"l":824,"u":840},{"a":true,"l":13,"u":578},{"a":false,"l":243,"u":976},{"a":false,"l":193,"u":419},{"a":false,"l":529,"u":824},{"a":true,"l":403,"u":702},{"a":true,"l":166,"u":646},{"a":false,"l":187,"u":516},{"a":false,"l":824,"u":965},{"a":false,"l":518,"u":522},{"a":false,"l":116,"u":694},{"a":true,"l":146,"u":243},{"a":true,"l":151,"u":841},{"a":true,"l":463,"u":532},{"a":true,"l":556,"u":882},{"a":false,"l":113,"u":218},{"a":true,"l":331,"u":959},{"a":false,"l":533,"u":928},{"a":true,"l":61,"u":933},{"a":true,"l":385,"u":508},{"a":true,"l":876,"u":890},{"a":false,"l":486,"u":571},{"a":true,"l":95,"u":136},{"a":true,"l":147,"u":704},{"a":true,"l":323,"u":910},{"a":false,"l":217,"u":450},{"a":false,"l":98,"u":316},{"a":false,"l":259,"u":370},{"a":false,"l":245,"u":390},{"a":true,"l":312,"u":652},{"a":true,"l":522,"u":822},{"a":true,"l":375,"u":560},{"a":false,"l":778,"u":972},{"a":false,"l":276,"u":455},{"a":false,"l":22,"u":646},{"a":true,"l":697,"u":839},{"a":true,"l":208,"u":802},{"a":false,"l":865,"u":882},{"a":false,"l":106,"u":356},{"a":true,"l":842,"u":983},{"a":false,"l":68,"u":720},{"a":false,"l":38,"u":63},{"a":true,"l":274,"u":839},{"a":true,"l":165,"u":577},{"a":false,"l":272,"u":462},{"a":true,"l":289,"u":873},{"a":false,"l":75,"u":482},{"a":false,"l":85,"u":465},{"a":true,"l":582,"u":969},{"a":false,"l":328,"u":391},{"a":true,"l":130,"u":430},{"a":false,"l":360,"u":772},{"a":false,"l":3,"u":880},{"a":true,"l":69,"u":751},{"a":true,"l":388,"u":767},{"a":true,"l":4,"u":164},{"a":true,"l":133,"u":304},{"a":false,"l":73,"u":921},{"a":true,"l":618,"u":929},{"a":true,"l":29,"u":921},{"a":false,"l":782,"u":930},{"a":true,"l":3,"u":517},{"a":true,"l":337,"u":736},{"a":true,"l":176,"u":609},{"a":false,"l":545,"u":624},{"a":false,"l":235,"u":837},{"a":false,"l":83,"u":423},{"a":true,"l":505,"u":641},{"a":true,"l":641,"u":949},{"a":true,"l":180,"u":481},{"a":true,"l":728,"u":870},{"a":false,"l":121,"u":894},{"a":true,"l":294,"u":603},{"a":false,"l":62,"u":570},{"a":false,"l":472,"u":510},{"a":false,"l":218,"u":698},{"a":true,"l":801,"u":838},{"a":false,"l":718,"u":787},{"a":true,"l":71,"u":341},{"a":true,"l":309,"u":646},{"a":false,"l":139,"u":635},{"a":true,"l":893,"u":941},{"a":false,"l":150,"u":984},{"a":false,"l":754,"u":851},{"a":false,"l":509,"u":672},{"a":false,"l":48,"u":478},{"a":true,"l":660,"u":771},{"a":true,"l":137,"u":478},{"a":true,"l":421,"u":729},{"a":true,"l":132,"u":560},{"a":true,"l":180,"u":778},{"a":true,"l":737,"u":790},{"a":true,"l":175,"u":801},{"a":true,"l":201,"u":344},{"a":false,"l":293,"u":731},{"a":false,"l":8,"u":226},{"a":false,"l":489,"u":785},{"a":false,"l":450,"u":973},{"a":false,"l":442,"u":787},{"a":true,"l":550,"u":717},{"a":false,"l":257,"u":829},{"a":true,"l":772,"u":897},{"a":true,"l":402,"u":634},{"a":true,"l":417,"u":541},{"a":false,"l":272,"u":807},{"a":true,"l":25,"u":280},{"a":false,"l":2,"u":867},{"a":true,"l":207,"u":730},{"a":true,"l":44,"u":855},{"a":false,"l":503,"u":988},{"a":false,"l":489,"u":689},{"a":true,"l":718,"u":799},{"a":false,"l":385,"u":891},{"a":false,"l":212,"u":736},{"a":false,"l":679,"u":933},{"a":true,"l":534,"u":938},{"a":false,"l":184,"u":310},{"a":false,"l":259,"u":467},{"a":true,"l":237,"u":933},{"a":true,"l":121,"u":553},{"a":true,"l":148,"u":153},{"a":false,"l":506,"u":872},{"a":true,"l":684,"u":850},{"a":true,"l":524,"u":921},{"a":true,"l":51,"u":326},{"a":false,"l":443,"u":543},{"a":true,"l":663,"u":991},{"a":true,"l":96,"u":238},{"a":false,"l":58,"u":717},{"a":false,"l":262,"u":424},{"a":false,"l":18,"u":492},{"a":false,"l":358,"u":655},{"a":true,"l":88,"u":815},{"a":true,"l":482,"u":713},{"a":false,"l":201,"u":650},{"a":true,"l":363,"u":906},{"a":true,"l":397,"u":451},{"a":false,"l":16,"u":486},{"a":true,"l":299,"u":790},{"a":false,"l":419,"u":620},{"a":false,"l":278,"u":288},{"a":true,"l":679,"u":980},{"a":false,"l":671,"u":734},{"a":true,"l":99,"u":869},{"a":false,"l":220,"u":794},{"a":true,"l":229,"u":438},{"a":true,"l":430,"u":989},{"a":true,"l":734,"u":766},{"a":false,"l":366,"u":419},{"a":false,"l":76,"u":163},{"a":true,"l":355,"u":869},{"a":false,"l":74,"u":461},{"a":true,"l":220,"u":895},{"a":true,"l":161,"u":459},{"a":false,"l":348,"u":812},{"a":false,"l":92,"u":161},{"a":false,"l":343,"u":688},{"a":true,"l":706,"u":710},{"a":false,"l":326,"u":512},{"a":true,"l":618,"u":940},{"a":false,"l":859,"u":965},{"a":true,"l":17,"u":240},{"a":true,"l":54,"u":868},{"a":true,"l":625,"u":675},{"a":true,"l":266,"u":303},{"a":true,"l":678,"u":736},{"a":true,"l":186,"u":936},{"a":false,"l":194,"u":670},{"a":true,"l":54,"u":118},{"a":false,"l":180,"u":594},{"a":true,"l":184,"u":575},{"a":false,"l":603,"u":825},{"a":false,"l":185,"u":220},{"a":false,"l":88,"u":736},{"a":false,"l":333,"u":386},{"a":false,"l":10,"u":640},{"a":false,"l":287,"u":751},{"a":true,"l":687,"u":889},{"a":false,"l":163,"u":643},{"a":false,"l":4,"u":28},{"a":true,"l":22,"u":954},{"a":true,"l":18,"u":563},{"a":false,"l":66,"u":237},{"a":false,"l":428,"u":892},{"a":true,"l":152,"u":576},{"a":false,"l":98,"u":730},{"a":true,"l":327,"u":857},{"a":false,"l":337,"u":685},{"a":false,"l":316,"u":693},{"a":false,"l":221,"u":458},{"a":true,"l":364,"u":740},{"a":false,"l":499,"u":840},{"a":false,"l":225,"u":295},{"a":false,"l":143,"u":681},{"a":true,"l":138,"u":454},{"a":true,"l":79,"u":229},{"a":true,"l":434,"u":865},{"a":false,"l":175,"u":820},{"a":false,"l":390,"u":765},{"a":false,"l":357,"u":860},{"a":false,"l":152,"u":600},{"a":false,"l":321,"u":371},{"a":true,"l":263,"u":942},{"a":false,"l":359,"u":895},{"a":true,"l":515,"u":924},{"a":true,"l":427,"u":773},{"a":false,"l":470,"u":973},{"a":true,"l":239,"u":255},{"a":false,"l":678,"u":705},{"a":false,"l":373,"u":673},{"a":false,"l":458,"u":749},{"a":false,"l":257,"u":791},{"a":true,"l":403,"u":936},{"a":false,"l":23,"u":961},{"a":true,"l":209,"u":582},{"a":true,"l":27,"u":126},{"a":false,"l":140,"u":193},{"a":true,"l":375,"u":554},{"a":false,"l":314,"u":584},{"a":false,"l":581,"u":802},{"a":false,"l":139,"u":771},{"a":true,"l":584,"u":790},{"a":true,"l":449,"u":624},{"a":false,"l":119,"u":249},{"a":false,"l":494,"u":998},{"a":true,"l":299,"u":432},{"a":true,"l":310,"u":338},{"a":false,"l":254,"u":719},{"a":true,"l":227,"u":735},{"a":false,"l":126,"u":598},{"a":false,"l":349,"u":375},{"a":false,"l":452,"u":652},{"a":false,"l":33,"u":732},{"a":true,"l":739,"u":813},{"a":true,"l":871,"u":890},{"a":true,"l":884,"u":931},{"a":false,"l":64,"u":221},{"a":false,"l":452,"u":522},{"a":true,"l":718,"u":908},{"a":true,"l":521,"u":861},{"a":true,"l":216,"u":225},{"a":false,"l":332,"u":443},{"a":false,"l":444,"u":742},{"a":true,"l":762,"u":916},{"a":true,"l":671,"u":871},{"a":true,"l":271,"u":542},{"a":true,"l":16,"u":354},{"a":false,"l":23,"u":742},{"a":true,"l":64,"u":112},{"a":true,"l":470,"u":581},{"a":true,"l":614,"u":677},{"a":false,"l":170,"u":671},{"a":true,"l":417,"u":822},{"a":false,"l":439,"u":890},{"a":true,"l":253,"u":487},{"a":false,"l":310,"u":376},{"a":false,"l":319,"u":744},{"a":false,"l":327,"u":515},{"a":true,"l":322,"u":725},{"a":true,"l":209,"u":936},{"a":false,"l":627,"u":887},{"a":false,"l":189,"u":238},{"a":false,"l":637,"u":956},{"a":true,"l":502,"u":521},{"a":false,"l":512,"u":941},{"a":true,"l":617,"u":634},{"a":true,"l":222,"u":577},{"a":true,"l":259,"u":397},{"a":true,"l":23,"u":125},{"a":true,"l":52,"u":494},{"a":true,"l":312,"u":730},{"a":false,"l":725,"u":845},{"a":false,"l":624,"u":673},{"a":true,"l":420,"u":621},{"a":true,"l":616,"u":819},{"a":true,"l":119,"u":820},{"a":true,"l":671,"u":761},{"a":false,"l":254,"u":811},{"a":true,"l":232,"u":511},{"a":false,"l":34,"u":911},{"a":false,"l":425,"u":636},{"a":true,"l":77,"u":710},{"a":false,"l":324,"u":529},{"a":true,"l":388,"u":888},{"a":true,"l":179,"u":432},{"a":false,"l":108,"u":684},{"a":false,"l":223,"u":821},{"a":true,"l":205,"u":504},{"a":true,"l":346,"u":702},{"a":true,"l":300,"u":878},{"a":true,"l":894,"u":944},{"a":false,"l":374,"u":518},{"a":true,"l":191,"u":299},{"a":true,"l":207,"u":386},{"a":false,"l":668,"u":950},{"a":true,"l":246,"u":757},{"a":false,"l":858,"u":875},{"a":true,"l":19,"u":287},{"a":true,"l":107,"u":592},{"a":false,"l":327,"u":999},{"a":false,"l":194,"u":282},{"a":true,"l":33,"u":624},{"a":true,"l":642,"u":756},{"a":false,"l":1,"u":600},{"a":false,"l":648,"u":836},{"a":true,"l":93,"u":532},{"a":true,"l":413,"u":849},{"a":false,"l":209,"u":218},{"a":true,"l":442,"u":901},{"a":false,"l":207,"u":831},{"a":true,"l":777,"u":992},{"a":true,"l":329,"u":723},{"a":true,"l":120,"u":482},{"a":true,"l":583,"u":905},{"a":false,"l":181,"u":588},{"a":true,"l":603,"u":974},{"a":true,"l":532,"u":740},{"a":true,"l":539,"u":810},{"a":true,"l":549,"u":923},{"a":false,"l":210,"u":453},{"a":true,"l":572,"u":972},{"a":false,"l":212,"u":882},{"a":false,"l":242,"u":646},{"a":false,"l":483,"u":752},{"a":true,"l":290,"u":750},{"a":false,"l":80,"u":824},{"a":false,"l":11,"u":17},{"a":false,"l":324,"u":503},{"a":false,"l":47,"u":930},{"a":true,"l":91,"u":708},{"a":false,"l":458,"u":978},{"a":false,"l":49,"u":633},{"a":false,"l":434,"u":834},{"a":true,"l":72,"u":161},{"a":false,"l":295,"u":493},{"a":false,"l":122,"u":140},{"a":true,"l":318,"u":907},{"a":false,"l":660,"u":896},{"a":false,"l":22,"u":241},{"a":false,"l":687,"u":714},{"a":false,"l":294,"u":527},{"a":true,"l":30,"u":125},{"a":true,"l":303,"u":629},{"a":true,"l":1,"u":697},{"a":true,"l":709,"u":856},{"a":true,"l":3,"u":758},{"a":true,"l":632,"u":841},{"a":true,"l":140,"u":511},{"a":true,"l":555,"u":897},{"a":true,"l":499,"u":523},{"a":true,"l":3,"u":825},{"a":false,"l":24,"u":892},{"a":true,"l":159,"u":417},{"a":true,"l":802,"u":823},{"a":false,"l":127,"u":355},{"a":false,"l":414,"u":871},{"a":true,"l":237,"u":297},{"a":false,"l":389,"u":765},{"a":false,"l":28,"u":173},{"a":false,"l":29,"u":498},{"a":true,"l":358,"u":571},{"a":true,"l":33,"u":117},{"a":true,"l":9,"u":583},{"a":false,"l":13,"u":659},{"a":false,"l":534,"u":577},{"a":false,"l":5,"u":478},{"a":false,"l":190,"u":854},{"a":true,"l":687,"u":772},{"a":false,"l":271,"u":477},{"a":true,"l":587,"u":635},{"a":true,"l":244,"u":869},{"a":false,"l":26,"u":880},{"a":true,"l":135,"u":662},{"a":true,"l":594,"u":903},{"a":true,"l":43,"u":184},{"a":true,"l":346,"u":832},{"a":false,"l":517,"u":923},{"a":true,"l":427,"u":487},{"a":false,"l":155,"u":318},{"a":true,"l":70,"u":293},{"a":false,"l":171,"u":489},{"a":true,"l":786,"u":990},{"a":true,"l":34,"u":140},{"a":true,"l":12,"u":137},{"a":false,"l":116,"u":757},{"a":false,"l":132,"u":370},{"a":true,"l":82,"u":881},{"a":false,"l":496,"u":854},{"a":false,"l":889,"u":995},{"a":false,"l":183,"u":607},{"a":true,"l":950,"u":956},{"a":true,"l":274,"u":876},{"a":false,"l":806,"u":950},{"a":false,"l":533,"u":557},{"a":false,"l":328,"u":825},{"a":false,"l":164,"u":295},{"a":true,"l":421,"u":645},{"a":true,"l":898,"u":935},{"a":false,"l":688,"u":787},{"a":false,"l":703,"u":760},{"a":true,"l":784,"u":879},{"a":false,"l":91,"u":678},{"a":true,"l":47,"u":695},{"a":true,"l":686,"u":788},{"a":true,"l":389,"u":578},{"a":false,"l":627,"u":784},{"a":false,"l":453,"u":886},{"a":true,"l":108,"u":948},{"a":true,"l":448,"u":890},{"a":true,"l":681,"u":766},{"a":false,"l":384,"u":997},{"a":false,"l":637,"u":652},{"a":false,"l":245,"u":338},{"a":false,"l":737,"u":740},{"a":false,"l":131,"u":631},{"a":true,"l":354,"u":925},{"a":true,"l":317,"u":517},{"a":false,"l":893,"u":999},{"a":false,"l":547,"u":806},{"a":true,"l":61,"u":304},{"a":false,"l":97,"u":100},{"a":true,"l":100,"u":116},{"a":true,"l":520,"u":543},{"a":false,"l":582,"u":589},{"a":true,"l":367,"u":632},{"a":true,"l":267,"u":373},{"a":true,"l":87,"u":586},{"a":true,"l":424,"u":682},{"a":true,"l":179,"u":835},{"a":true,"l":19,"u":644},{"a":false,"l":283,"u":964},{"a":false,"l":209,"u":595},{"a":false,"l":400,"u":524},{"a":false,"l":49,"u":528},{"a":false,"l":167,"u":436},{"a":false,"l":200,"u":800},{"a":false,"l":326,"u":495},{"a":false,"l":446,"u":549},{"a":false,"l":882,"u":946},{"a":true,"l":738,"u":999},{"a":true,"l":447,"u":885},{"a":false,"l":478,"u":802},{"a":false,"l":414,"u":849},{"a":true,"l":227,"u":235},{"a":false,"l":516,"u":805},{"a":false,"l":126,"u":746},{"a":false,"l":765,"u":930},{"a":true,"l":159,"u":338},{"a":false,"l":160,"u":586},{"a":true,"l":252,"u":866},{"a":true,"l":311,"u":743},{"a":true,"l":319,"u":375},{"a":true,"l":308,"u":484},{"a":true,"l":42,"u":489},{"a":true,"l":53,"u":295},{"a":false,"l":66,"u":263},{"a":true,"l":289,"u":569},{"a":false,"l":27,"u":683},{"a":false,"l":526,"u":951},{"a":true,"l":506,"u":569},{"a":false,"l":63,"u":455},{"a":false,"l":305,"u":445},{"a":true,"l":591,"u":654},{"a":false,"l":67,"u":870},{"a":false,"l":932,"u":985},{"a":false,"l":556,"u":915},{"a":true,"l":533,"u":759},{"a":false,"l":102,"u":948},{"a":false,"l":120,"u":661},{"a":true,"l":399,"u":403},{"a":false,"l":54,"u":776},{"a":false,"l":308,"u":849},{"a":true,"l":764,"u":892},{"a":false,"l":12,"u":916},{"a":false,"l":167,"u":292},{"a":true,"l":63,"u":450},{"a":false,"l":69,"u":699},{"a":true,"l":78,"u":285},{"a":true,"l":419,"u":894},{"a":true,"l":291,"u":447},{"a":true,"l":300,"u":506},{"a":true,"l":282,"u":969},{"a":false,"l":25,"u":837},{"a":false,"l":84,"u":587},{"a":true,"l":333,"u":775},{"a":true,"l":502,"u":520},{"a":true,"l":131,"u":440},{"a":true,"l":288,"u":829},{"a":false,"l":770,"u":826},{"a":false,"l":410,"u":670},{"a":true,"l":178,"u":379},{"a":true,"l":702,"u":964},{"a":true,"l":167,"u":377},{"a":false,"l":316,"u":974},{"a":false,"l":261,"u":557},{"a":true,"l":109,"u":303},{"a":false,"l":192,"u":773},{"a":true,"l":265,"u":558},{"a":false,"l":308,"u":342},{"a":true,"l":215,"u":386},{"a":true,"l":785,"u":812},{"a":false,"l":771,"u":915},{"a":false,"l":355,"u":621},{"a":false,"l":500,"u":973},{"a":true,"l":488,"u":849},{"a":true,"l":280,"u":492},{"a":false,"l":516,"u":747},{"a":true,"l":147,"u":602},{"a":true,"l":553,"u":856},{"a":false,"l":310,"u":653},{"a":true,"l":71,"u":828},{"a":true,"l":84,"u":822},{"a":false,"l":110,"u":569},{"a":false,"l":260,"u":420},{"a":true,"l":588,"u":835},{"a":true,"l":161,"u":855},{"a":false,"l":550,"u":968},{"a":false,"l":99,"u":493},{"a":false,"l":66,"u":525},{"a":true,"l":386,"u":850},{"a":true,"l":454,"u":585},{"a":true,"l":618,"u":822},{"a":false,"l":172,"u":881},{"a":true,"l":101,"u":619},{"a":true,"l":331,"u":600},{"a":true,"l":568,"u":723},{"a":false,"l":7,"u":901},{"a":true,"l":318,"u":607},{"a":false,"l":598,"u":682},{"a":true,"l":108,"u":239},{"a":true,"l":287,"u":889},{"a":false,"l":255,"u":743},{"a":false,"l":18,"u":737},{"a":false,"l":233,"u":666},{"a":true,"l":283,"u":672},{"a":false,"l":116,"u":611},{"a":false,"l":270,"u":492},{"a":false,"l":338,"u":600},{"a":false,"l":138,"u":326},{"a":true,"l":9,"u":644},{"a":false,"l":1,"u":473},{"a":true,"l":377,"u":527},{"a":true,"l":184,"u":761},{"a":true,"l":49,"u":983},{"a":false,"l":265,"u":925},{"a":true,"l":448,"u":862},{"a":false,"l":111,"u":835},{"a":false,"l":23,"u":904},{"a":false,"l":227,"u":689},{"a":false,"l":261,"u":362},{"a":true,"l":550,"u":928},{"a":true,"l":487,"u":689},{"a":true,"l":353,"u":971},{"a":false,"l":47,"u":331},{"a":true,"l":147,"u":192},{"a":true,"l":112,"u":787},{"a":true,"l":521,"u":805},{"a":false,"l":12,"u":92},{"a":false,"l":642,"u":994},{"a":true,"l":207,"u":417},{"a":false,"l":108,"u":369},{"a":false,"l":52,"u":193},{"a":true,"l":544,"u":901},{"a":true,"l":208,"u":986},{"a":true,"l":20,"u":167},{"a":true,"l":648,"u":972},{"a":true,"l":113,"u":358},{"a":false,"l":22,"u":433},{"a":true,"l":536,"u":669},{"a":true,"l":23,"u":823},{"a":true,"l":908,"u":923},{"a":true,"l":445,"u":473},{"a":true,"l":156,"u":370},{"a":true,"l":435,"u":924},{"a":false,"l":737,"u":780},{"a":true,"l":451,"u":942},{"a":false,"l":210,"u":923},{"a":true,"l":456,"u":835},{"a":true,"l":321,"u":497},{"a":false,"l":554,"u":976},{"a":false,"l":45,"u":726},{"a":false,"l":214,"u":720},{"a":true,"l":1,"u":273},{"a":false,"l":186,"u":324},{"a":false,"l":123,"u":444},{"a":true,"l":152,"u":998},{"a":true,"l":51,"u":467},{"a":true,"l":690,"u":872},{"a":true,"l":694,"u":971},{"a":true,"l":386,"u":616},{"a":false,"l":312,"u":349},{"a":false,"l":102,"u":218},{"a":false,"l":571,"u":872},{"a":true,"l":640,"u":942},{"a":true,"l":372,"u":516},{"a":true,"l":692,"u":717},{"a":false,"l":434,"u":671},{"a":true,"l":401,"u":624},{"a":false,"l":375,"u":427},{"a":false,"l":314,"u":935},{"a":true,"l":159,"u":874},{"a":false,"l":429,"u":854},{"a":false,"l":339,"u":964},{"a":false,"l":551,"u":847},{"a":true,"l":887,"u":950},{"a":false,"l":38,"u":677},{"a":false,"l":412,"u":874},{"a":false,"l":454,"u":534},{"a":false,"l":315,"u":634},{"a":false,"l":308,"u":762},{"a":false,"l":113,"u":496},{"a":false,"l":116,"u":776},{"a":true,"l":474,"u":834},{"a":false,"l":599,"u":618},{"a":true,"l":885,"u":947},{"a":true,"l":721,"u":918},{"a":false,"l":37,"u":425},{"a":true,"l":33,"u":392},{"a":false,"l":13,"u":736},{"a":true,"l":477,"u":847},{"a":false,"l":567,"u":927},{"a":false,"l":169,"u":299},{"a":true,"l":480,"u":502},{"a":false,"l":261,"u":888},{"a":true,"l":262,"u":831},{"a":false,"l":355,"u":709},{"a":true,"l":83,"u":349},{"a":false,"l":60,"u":952},{"a":false,"l":434,"u":473},{"a":false,"l":12,"u":149},{"a":false,"l":21,"u":376},{"a":true,"l":162,"u":381},{"a":false,"l":54,"u":646},{"a":true,"l":15,"u":157},{"a":false,"l":279,"u":421},{"a":false,"l":344,"u":632},{"a":true,"l":316,"u":971},{"a":true,"l":168,"u":182},{"a":true,"l":717,"u":762},{"a":true,"l":166,"u":271},{"a":true,"l":463,"u":814},{"a":true,"l":404,"u":924},{"a":true,"l":1,"u":967},{"a":false,"l":742,"u":936},{"a":true,"l":454,"u":604},{"a":true,"l":432,"u":585},{"a":false,"l":317,"u":983},{"a":true,"l":173,"u":928},{"a":true,"l":114,"u":854},{"a":true,"l":13,"u":431},{"a":false,"l":9,"u":980},{"a":false,"l":129,"u":309},{"a":false,"l":374,"u":803},{"a":true,"l":330,"u":756},{"a":true,"l":251,"u":551},{"a":false,"l":105,"u":940},{"a":true,"l":3,"u":622},{"a":false,"l":196,"u":730},{"a":true,"l":375,"u":712},{"a":false,"l":409,"u":418},{"a":true,"l":652,"u":774},{"a":false,"l":37,"u":43},{"a":false,"l":413,"u":451},{"a":true,"l":308,"u":604},{"a":true,"l":449,"u":995},{"a":false,"l":447,"u":528},{"a":false,"l":54,"u":122},{"a":false,"l":77,"u":277},{"a":false,"l":88,"u":303},{"a":false,"l":60,"u":662},{"a":true,"l":139,"u":285},{"a":true,"l":18,"u":614},{"a":false,"l":539,"u":758},{"a":false,"l":145,"u":467},{"a":true,"l":569,"u":902},{"a":true,"l":103,"u":738},{"a":true,"l":393,"u":660},{"a":true,"l":446,"u":779},{"a":true,"l":255,"u":934},{"a":true,"l":61,"u":306},{"a":false,"l":422,"u":780},{"a":true,"l":664,"u":821},{"a":true,"l":509,"u":953},{"a":true,"l":329,"u":777},{"a":false,"l":602,"u":643},{"a":false,"l":219,"u":287},{"a":true,"l":63,"u":387},{"a":true,"l":212,"u":324},{"a":true,"l":505,"u":789},{"a":false,"l":153,"u":549},{"a":true,"l":649,"u":750},{"a":false,"l":378,"u":754},{"a":false,"l":409,"u":866},{"a":true,"l":25,"u":476},{"a":true,"l":130,"u":512},{"a":true,"l":538,"u":685},{"a":true,"l":544,"u":811},{"a":false,"l":97,"u":195},{"a":true,"l":260,"u":327},{"a":false,"l":570,"u":999},{"a":false,"l":98,"u":157},{"a":false,"l":704,"u":892},{"a":true,"l":736,"u":855},{"a":false,"l":758,"u":917},{"a":false,"l":506,"u":804},{"a":true,"l":569,"u":759},{"a":true,"l":312,"u":568},{"a":true,"l":533,"u":829},{"a":true,"l":270,"u":938},{"a":true,"l":109,"u":242},{"a":true,"l":185,"u":370},{"a":false,"l":390,"u":801},{"a":false,"l":38,"u":669},{"a":true,"l":37,"u":67},{"a":true,"l":40,"u":781},{"a":false,"l":496,"u":507},{"a":false,"l":575,"u":650},{"a":true,"l":461,"u":946},{"a":true,"l":70,"u":79},{"a":true,"l":148,"u":742},{"a":true,"l":122,"u":440},{"a":false,"l":393,"u":935},{"a":false,"l":217,"u":746},{"a":false,"l":74,"u":100},{"a":true,"l":646,"u":816},{"a":false,"l":158,"u":663},{"a":true,"l":325,"u":694},{"a":false,"l":79,"u":610},{"a":false,"l":359,"u":877},{"a":true,"l":641,"u":644},{"a":true,"l":83,"u":828},{"a":true,"l":599,"u":964},{"a":true,"l":301,"u":853},{"a":false,"l":342,"u":627},{"a":false,"l":657,"u":669},{"a":true,"l":555,"u":980},{"a":false,"l":38,"u":631},{"a":true,"l":20,"u":449},{"a":false,"l":77,"u":723},{"a":true,"l":71,"u":457},{"a":false,"l":45,"u":262},{"a":true,"l":87,"u":981},{"a":false,"l":40,"u":852},{"a":false,"l":114,"u":315},{"a":true,"l":146,"u":711},{"a":true,"l":332,"u":671},{"a":true,"l":619,"u":935},{"a":false,"l":188,"u":319},{"a":false,"l":664,"u":918},{"a":false,"l":331,"u":579},{"a":true,"l":490,"u":553},{"a":true,"l":313,"u":888},{"a":false,"l":614,"u":854},{"a":true,"l":323,"u":367},{"a":false,"l":457,"u":611},{"a":true,"l":162,"u":290},{"a":false,"l":189,"u":921},{"a":false,"l":80,"u":480},{"a":true,"l":738,"u":960},{"a":false,"l":317,"u":356},{"a":false,"l":749,"u":820},{"a":false,"l":635,"u":753},{"a":false,"l":22,"u":572},{"a":true,"l":471,"u":620},{"a":false,"l":867,"u":878},{"a":true,"l":176,"u":980},{"a":false,"l":295,"u":407},{"a":true,"l":608,"u":921},{"a":true,"l":648,"u":931},{"a":false,"l":668,"u":713},{"a":true,"l":438,"u":925},{"a":true,"l":45,"u":738},{"a":false,"l":327,"u":403},{"a":false,"l":920,"u":972},{"a":false,"l":314,"u":510},{"a":false,"l":503,"u":993},{"a":true,"l":348,"u":725},{"a":false,"l":264,"u":969},{"a":true,"l":194,"u":677},{"a":false,"l":607,"u":646},{"a":true,"l":145,"u":616},{"a":false,"l":224,"u":769},{"a":true,"l":170,"u":405},{"a":true,"l":397,"u":722},{"a":false,"l":201,"u":937},{"a":false,"l":633,"u":644},{"a":false,"l":16,"u":336},{"a":false,"l":32,"u":281},{"a":true,"l":533,"u":971},{"a":true,"l":230,"u":301},{"a":false,"l":344,"u":648},{"a":true,"l":575,"u":853},{"a":false,"l":301,"u":902},{"a":false,"l":395,"u":690},{"a":true,"l":387,"u":845},{"a":true,"l":275,"u":665},{"a":false,"l":340,"u":355},{"a":false,"l":454,"u":957},{"a":true,"l":218,"u":628},{"a":true,"l":91,"u":641},{"a":true,"l":94,"u":478},{"a":false,"l":297,"u":489},{"a":true,"l":335,"u":926},{"a":false,"l":1,"u":412},{"a":true,"l":34,"u":301},{"a":true,"l":84,"u":841},{"a":false,"l":615,"u":962},{"a":false,"l":768,"u":854},{"a":false,"l":456,"u":961},{"a":false,"l":165,"u":864},{"a":true,"l":51,"u":843},{"a":true,"l":9,"u":265},{"a":true,"l":82,"u":476},{"a":false,"l":97,"u":200},{"a":false,"l":270,"u":370},{"a":false,"l":297,"u":481},{"a":false,"l":117,"u":740},{"a":true,"l":403,"u":618},{"a":false,"l":493,"u":717},{"a":false,"l":175,"u":830},{"a":true,"l":352,"u":449},{"a":true,"l":397,"u":992},{"a":true,"l":799,"u":867},{"a":true,"l":242,"u":716},{"a":false,"l":82,"u":433},{"a":true,"l":435,"u":954},{"a":true,"l":130,"u":146},{"a":false,"l":344,"u":672},{"a":true,"l":284,"u":842},{"a":true,"l":83,"u":754},{"a":false,"l":341,"u":815},{"a":true,"l":403,"u":550},{"a":true,"l":74,"u":927},{"a":true,"l":706,"u":737},{"a":false,"l":725,"u":797},{"a":false,"l":145,"u":177},{"a":false,"l":205,"u":539},{"a":false,"l":21,"u":448},{"a":true,"l":196,"u":542},{"a":true,"l":139,"u":455},{"a":false,"l":608,"u":827},{"a":false,"l":260,"u":894},{"a":false,"l":96,"u":496},{"a":false,"l":179,"u":514},{"a":false,"l":247,"u":903},{"a":false,"l":405,"u":906},{"a":false,"l":23,"u":333},{"a":true,"l":62,"u":883},{"a":true,"l":591,"u":819},{"a":false,"l":704,"u":968},{"a":true,"l":341,"u":344},{"a":false,"l":781,"u":876},{"a":false,"l":257,"u":294},{"a":false,"l":254,"u":630},{"a":true,"l":41,"u":320},{"a":false,"l":154,"u":377},{"a":false,"l":555,"u":613},{"a":false,"l":466,"u":570},{"a":true,"l":23,"u":658},{"a":false,"l":248,"u":431},{"a":false,"l":223,"u":543},{"a":true,"l":5,"u":432},{"a":false,"l":390,"u":895},{"a":false,"l":342,"u":643},{"a":false,"l":109,"u":583},{"a":false,"l":136,"u":617},{"a":true,"l":587,"u":599},{"a":true,"l":108,"u":504},{"a":true,"l":286,"u":518},{"a":false,"l":486,"u":730},{"a":true,"l":260,"u":481},{"a":true,"l":406,"u":577},{"a":false,"l":749,"u":834},{"a":true,"l":394,"u":767},{"a":false,"l":538,"u":981},{"a":true,"l":9,"u":44},{"a":true,"l":598,"u":705},{"a":false,"l":607,"u":854},{"a":true,"l":280,"u":816},{"a":true,"l":323,"u":718},{"a":false,"l":78,"u":936},{"a":true,"l":271,"u":752},{"a":true,"l":136,"u":151},{"a":false,"l":206,"u":423},{"a":true,"l":19,"u":134},{"a":false,"l":453,"u":516},{"a":false,"l":435,"u":648},{"a":true,"l":851,"u":853},{"a":false,"l":28,"u":586},{"a":true,"l":379,"u":546},{"a":true,"l":74,"u":157},{"a":false,"l":330,"u":819},{"a":false,"l":716,"u":895},{"a":false,"l":112,"u":343},{"a":true,"l":23,"u":921},{"a":false,"l":180,"u":779},{"a":false,"l":633,"u":706},{"a":true,"l":157,"u":268},{"a":true,"l":302,"u":705},{"a":false,"l":246,"u":458},{"a":true,"l":260,"u":573},{"a":false,"l":287,"u":822},{"a":true,"l":221,"u":702},{"a":false,"l":30,"u":326},{"a":true,"l":449,"u":986},{"a":true,"l":403,"u":512},{"a":true,"l":160,"u":824},{"a":true,"l":378,"u":485},{"a":false,"l":83,"u":367},{"a":true,"l":665,"u":836},{"a":false,"l":782,"u":965},{"a":false,"l":568,"u":848},{"a":true,"l":376,"u":626},{"a":true,"l":234,"u":241},{"a":true,"l":585,"u":934},{"a":true,"l":141,"u":902},{"a":true,"l":722,"u":939},{"a":true,"l":58,"u":208},{"a":false,"l":352,"u":983},{"a":true,"l":547,"u":757},{"a":false,"l":406,"u":877},{"a":false,"l":67,"u":781},{"a":true,"l":203,"u":256},{"a":true,"l":636,"u":735},{"a":true,"l":356,"u":903},{"a":true,"l":449,"u":911},{"a":false,"l":382,"u":468},{"a":true,"l":421,"u":843},{"a":false,"l":345,"u":457},{"a":true,"l":669,"u":879},{"a":true,"l":13,"u":583},{"a":false,"l":447,"u":591},{"a":false,"l":491,"u":971},{"a":false,"l":231,"u":779},{"a":false,"l":548,"u":871},{"a":false,"l":467,"u":642},{"a":false,"l":490,"u":961},{"a":true,"l":285,"u":330},{"a":false,"l":566,"u":752},{"a":false,"l":7,"u":534},{"a":false,"l":274,"u":790},{"a":false,"l":529,"u":938},{"a":false,"l":483,"u":727},{"a":false,"l":363,"u":822},{"a":true,"l":199,"u":263},{"a":false,"l":151,"u":919},{"a":true,"l":535,"u":544},{"a":true,"l":600,"u":624},{"a":true,"l":46,"u":919},{"a":true,"l":574,"u":946},{"a":false,"l":234,"u":387},{"a":false,"l":215,"u":558},{"a":true,"l":299,"u":863},{"a":false,"l":184,"u":825},{"a":false,"l":410,"u":430},{"a":false,"l":119,"u":752},{"a":true,"l":157,"u":860},{"a":true,"l":541,"u":767},{"a":false,"l":148,"u":291},{"a":false,"l":461,"u":865},{"a":true,"l":176,"u":664},{"a":false,"l":474,"u":536},{"a":false,"l":400,"u":807},{"a":true,"l":203,"u":480},{"a":true,"l":754,"u":760},{"a":false,"l":274,"u":654},{"a":true,"l":627,"u":979},{"a":false,"l":194,"u":731},{"a":true,"l":394,"u":764},{"a":true,"l":9,"u":519},{"a":false,"l":354,"u":986},{"a":true,"l":57,"u":421},{"a":true,"l":48,"u":297},{"a":false,"l":95,"u":374},{"a":false,"l":219,"u":493},{"a":true,"l":508,"u":808},{"a":false,"l":191,"u":410},{"a":false,"l":360,"u":573},{"a":true,"l":168,"u":679},{"a":false,"l":426,"u":726},{"a":false,"l":725,"u":753},{"a":false,"l":161,"u":512},{"a":false,"l":97,"u":284},{"a":false,"l":405,"u":567},{"a":false,"l":724,"u":744},{"a":true,"l":128,"u":333},{"a":false,"l":42,"u":84},{"a":false,"l":316,"u":435},{"a":true,"l":378,"u":772},{"a":true,"l":338,"u":459},{"a":false,"l":401,"u":689},{"a":false,"l":66,"u":478},{"a":false,"l":108,"u":277},{"a":false,"l":362,"u":377},{"a":false,"l":139,"u":202},{"a":true,"l":128,"u":301},{"a":true,"l":535,"u":646},{"a":false,"l":249,"u":427},{"a":false,"l":140,"u":636},{"a":false,"l":167,"u":686},{"a":false,"l":101,"u":909},{"a":false,"l":6,"u":454},{"a":true,"l":799,"u":951},{"a":false,"l":89,"u":277},{"a":true,"l":65,"u":534},{"a":false,"l":276,"u":410},{"a":false,"l":235,"u":827},{"a":true,"l":146,"u":733},{"a":true,"l":51,"u":831},{"a":false,"l":553,"u":907},{"a":false,"l":299,"u":386},{"a":true,"l":82,"u":883},{"a":false,"l":176,"u":181},{"a":false,"l":302,"u":511},{"a":true,"l":639,"u":716},{"a":true,"l":373,"u":554},{"a":false,"l":630,"u":830},{"a":true,"l":533,"u":592},{"a":true,"l":642,"u":751},{"a":true,"l":420,"u":630},{"a":false,"l":463,"u":814},{"a":false,"l":286,"u":795},{"a":false,"l":57,"u":115},{"a":false,"l":282,"u":347},{"a":true,"l":459,"u":896},{"a":true,"l":142,"u":863},{"a":true,"l":367,"u":910},{"a":false,"l":516,"u":545},{"a":false,"l":318,"u":684},{"a":true,"l":574,"u":818},{"a":false,"l":98,"u":120},{"a":false,"l":112,"u":514},{"a":false,"l":307,"u":987},{"a":true,"l":549,"u":849},{"a":true,"l":622,"u":933},{"a":false,"l":593,"u":955},{"a":true,"l":425,"u":513},{"a":false,"l":264,"u":377},{"a":true,"l":70,"u":879},{"a":false,"l":499,"u":790},{"a":true,"l":386,"u":783},{"a":true,"l":190,"u":491},{"a":false,"l":88,"u":918},{"a":false,"l":713,"u":821},{"a":true,"l":199,"u":618},{"a":false,"l":788,"u":986},{"a":false,"l":166,"u":522},{"a":true,"l":624,"u":983},{"a":true,"l":162,"u":212},{"a":false,"l":808,"u":913},{"a":true,"l":209,"u":464},{"a":true,"l":407,"u":601},{"a":false,"l":144,"u":893},{"a":true,"l":441,"u":674},{"a":true,"l":896,"u":961},{"a":true,"l":457,"u":804},{"a":false,"l":397,"u":900},{"a":false,"l":271,"u":470},{"a":true,"l":40,"u":745},{"a":true,"l":241,"u":345},{"a":false,"l":162,"u":873},{"a":true,"l":85,"u":691},{"a":true,"l":595,"u":793},{"a":true,"l":274,"u":646},{"a":true,"l":766,"u":836},{"a":true,"l":422,"u":811},{"a":false,"l":691,"u":708},{"a":false,"l":29,"u":127},{"a":false,"l":17,"u":287},{"a":true,"l":573,"u":917},{"a":false,"l":236,"u":753},{"a":true,"l":112,"u":765},{"a":false,"l":29,"u":99},{"a":false,"l":275,"u":970},{"a":true,"l":643,"u":744},{"a":true,"l":471,"u":658},{"a":true,"l":26,"u":870},{"a":false,"l":261,"u":985},{"a":false,"l":82,"u":755},{"a":true,"l":606,"u":682},{"a":false,"l":466,"u":747},{"a":false,"l":350,"u":787},{"a":false,"l":296,"u":522},{"a":true,"l":864,"u":899},{"a":false,"l":471,"u":769},{"a":false,"l":466,"u":790},{"a":false,"l":114,"u":338},{"a":true,"l":96,"u":226},{"a":false,"l":363,"u":900},{"a":true,"l":649,"u":685},{"a":false,"l":340,"u":657},{"a":false,"l":722,"u":756},{"a":true,"l":387,"u":851},{"a":false,"l":36,"u":759},{"a":false,"l":112,"u":760},{"a":true,"l":175,"u":711},{"a":true,"l":365,"u":759},{"a":false,"l":142,"u":853},{"a":true,"l":740,"u":762},{"a":true,"l":320,"u":749},{"a":true,"l":351,"u":579},{"a":false,"l":149,"u":426},{"a":false,"l":578,"u":938},{"a":false,"l":582,"u":669},{"a":true,"l":804,"u":818},{"a":false,"l":377,"u":696},{"a":true,"l":258,"u":733},{"a":true,"l":780,"u":880},{"a":false,"l":1,"u":658},{"a":true,"l":345,"u":831},{"a":true,"l":430,"u":559},{"a":false,"l":205,"u":711},{"a":false,"l":788,"u":919},{"a":true,"l":302,"u":713},{"a":false,"l":395,"u":842},{"a":false,"l":281,"u":627},{"a":true,"l":187,"u":955},{"a":true,"l":185,"u":612},{"a":true,"l":531,"u":894},{"a":true,"l":222,"u":434},{"a":true,"l":887,"u":976},{"a":false,"l":278,"u":395},{"a":true,"l":319,"u":936},{"a":false,"l":536,"u":661},{"a":true,"l":176,"u":828},{"a":false,"l":154,"u":724},{"a":false,"l":331,"u":861},{"a":false,"l":820,"u":898},{"a":true,"l":577,"u":976},{"a":true,"l":130,"u":312},{"a":false,"l":93,"u":258},{"a":true,"l":139,"u":260},{"a":false,"l":443,"u":882},{"a":false,"l":200,"u":811},{"a":true,"l":636,"u":713},{"a":true,"l":592,"u":850},{"a":true,"l":26,"u":59},{"a":false,"l":631,"u":716},{"a":false,"l":153,"u":868},{"a":true,"l":143,"u":298},{"a":false,"l":187,"u":993},{"a":false,"l":739,"u":874},{"a":false,"l":484,"u":844},{"a":false,"l":554,"u":826},{"a":true,"l":544,"u":852},{"a":false,"l":144,"u":644},{"a":false,"l":388,"u":933},{"a":false,"l":789,"u":824},{"a":true,"l":290,"u":345},{"a":true,"l":254,"u":496},{"a":false,"l":59,"u":564},{"a":true,"l":331,"u":482},{"a":false,"l":548,"u":610},{"a":true,"l":348,"u":720},{"a":true,"l":479,"u":637},{"a":true,"l":216,"u":851},{"a":true,"l":79,"u":928},{"a":false,"l":358,"u":364},{"a":false,"l":98,"u":146},{"a":false,"l":740,"u":839},{"a":true,"l":35,"u":407},{"a":true,"l":12,"u":813},{"a":true,"l":154,"u":732},{"a":false,"l":203,"u":309},{"a":false,"l":466,"u":774},{"a":true,"l":374,"u":505},{"a":true,"l":344,"u":890},{"a":true,"l":618,"u":965},{"a":false,"l":375,"u":439},{"a":false,"l":547,"u":780},{"a":false,"l":629,"u":826},{"a":true,"l":102,"u":694},{"a":false,"l":592,"u":874},{"a":true,"l":216,"u":309},{"a":true,"l":281,"u":506},{"a":true,"l":206,"u":912},{"a":false,"l":114,"u":478},{"a":true,"l":126,"u":574},{"a":true,"l":391,"u":854},{"a":false,"l":191,"u":240},{"a":false,"l":458,"u":563},{"a":false,"l":282,"u":708},{"a":true,"l":75,"u":106},{"a":true,"l":470,"u":869},{"a":false,"l":152,"u":759},{"a":true,"l":717,"u":871},{"a":false,"l":124,"u":979},{"a":false,"l":724,"u":859},{"a":true,"l":345,"u":941},{"a":false,"l":191,"u":212},{"a":false,"l":721,"u":949},{"a":false,"l":355,"u":507},{"a":true,"l":250,"u":882},{"a":true,"l":315,"u":363},{"a":false,"l":472,"u":762},{"a":false,"l":548,"u":637},{"a":true,"l":43,"u":410},{"a":false,"l":737,"u":894},{"a":false,"l":604,"u":895},{"a":true,"l":416,"u":774},{"a":true,"l":829,"u":889},{"a":true,"l":19,"u":406},{"a":true,"l":292,"u":984},{"a":false,"l":695,"u":850},{"a":true,"l":5,"u":108},{"a":false,"l":240,"u":871},{"a":false,"l":110,"u":551},{"a":false,"l":114,"u":849},{"a":false,"l":437,"u":863},{"a":false,"l":449,"u":546},{"a":true,"l":341,"u":923},{"a":false,"l":268,"u":785},{"a":false,"l":884,"u":965},{"a":true,"l":388,"u":727},{"a":false,"l":608,"u":899},{"a":false,"l":343,"u":367},{"a":false,"l":167,"u":921},{"a":false,"l":771,"u":934},{"a":true,"l":528,"u":624},{"a":true,"l":244,"u":428},{"a":true,"l":34,"u":897},{"a":true,"l":639,"u":864},{"a":false,"l":445,"u":752},{"a":false,"l":505,"u":529},{"a":false,"l":88,"u":751},{"a":true,"l":222,"u":966},{"a":true,"l":71,"u":102},{"a":true,"l":393,"u":772},{"a":true,"l":737,"u":799},{"a":true,"l":539,"u":594},{"a":false,"l":707,"u":709},{"a":true,"l":152,"u":350},{"a":false,"l":690,"u":981},{"a":true,"l":184,"u":272},{"a":true,"l":185,"u":698},{"a":false,"l":456,"u":792},{"a":false,"l":137,"u":253},{"a":true,"l":497,"u":542},{"a":true,"l":269,"u":588},{"a":false,"l":207,"u":319},{"a":false,"l":365,"u":752},{"a":false,"l":320,"u":675},{"a":false,"l":604,"u":804},{"a":false,"l":281,"u":351},{"a":true,"l":108,"u":873},{"a":true,"l":277,"u":505},{"a":false,"l":152,"u":706},{"a":false,"l":893,"u":928},{"a":true,"l":171,"u":770},{"a":true,"l":428,"u":552},{"a":true,"l":174,"u":841},{"a":true,"l":233,"u":476},{"a":true,"l":16,"u":243},{"a":true,"l":50,"u":885},{"a":true,"l":608,"u":944},{"a":true,"l":140,"u":580},{"a":false,"l":365,"u":745},{"a":true,"l":4,"u":433},{"a":false,"l":115,"u":483},{"a":true,"l":600,"u":913},{"a":true,"l":132,"u":335},{"a":true,"l":308,"u":657},{"a":true,"l":8,"u":914},{"a":false,"l":574,"u":906},{"a":false,"l":101,"u":272},{"a":false,"l":157,"u":867},{"a":true,"l":779,"u":890},{"a":true,"l":51,"u":941},{"a":false,"l":191,"u":942},{"a":false,"l":200,"u":401},{"a":false,"l":195,"u":432},{"a":true,"l":467,"u":660},{"a":true,"l":783,"u":805},{"a":false,"l":165,"u":809},{"a":true,"l":157,"u":315},{"a":true,"l":203,"u":727},{"a":true,"l":531,"u":790},{"a":true,"l":27,"u":296},{"a":false,"l":256,"u":382},{"a":true,"l":188,"u":735},{"a":true,"l":150,"u":458},{"a":true,"l":290,"u":405},{"a":false,"l":884,"u":893},{"a":false,"l":532,"u":970},{"a":true,"l":213,"u":333},{"a":true,"l":48,"u":194},{"a":true,"l":361,"u":980},{"a":false,"l":415,"u":596},{"a":false,"l":88,"u":231},{"a":true,"l":100,"u":960},{"a":false,"l":572,"u":612},{"a":false,"l":126,"u":940},{"a":false,"l":512,"u":672},{"a":true,"l":450,"u":589},{"a":true,"l":222,"u":550},{"a":true,"l":849,"u":933},{"a":false,"l":569,"u":968},{"a":false,"l":32,"u":649},{"a":true,"l":372,"u":953},{"a":false,"l":388,"u":604},{"a":false,"l":483,"u":687},{"a":false,"l":441,"u":455},{"a":false,"l":15,"u":914},{"a":false,"l":149,"u":481},{"a":false,"l":431,"u":654},{"a":true,"l":527,"u":850},{"a":false,"l":299,"u":535},{"a":true,"l":555,"u":866},{"a":true,"l":520,"u":968},{"a":false,"l":333,"u":809},{"a":false,"l":899,"u":981},{"a":true,"l":777,"u":782},{"a":true,"l":677,"u":935},{"a":true,"l":153,"u":927},{"a":true,"l":607,"u":676},{"a":false,"l":232,"u":674},{"a":false,"l":261,"u":811},{"a":false,"l":622,"u":664},{"a":true,"l":669,"u":766},{"a":true,"l":237,"u":835},{"a":true,"l":147,"u":993},{"a":true,"l":447,"u":514},{"a":true,"l":345,"u":713},{"a":true,"l":555,"u":727},{"a":false,"l":793,"u":965},{"a":false,"l":669,"u":955},{"a":true,"l":189,"u":608},{"a":false,"l":89,"u":113},{"a":false,"l":127,"u":765},{"a":true,"l":21,"u":725},{"a":true,"l":396,"u":488},{"a":true,"l":681,"u":910},{"a":false,"l":577,"u":806},{"a":true,"l":162,"u":546},{"a":false,"l":116,"u":839},{"a":true,"l":478,"u":913},{"a":false,"l":559,"u":926},{"a":false,"l":65,"u":80},{"a":true,"l":269,"u":414},{"a":false,"l":284,"u":574},{"a":false,"l":298,"u":343},{"a":true,"l":430,"u":498},{"a":false,"l":249,"u":630},{"a":true,"l":292,"u":752},{"a":false,"l":571,"u":575},{"a":true,"l":891,"u":978},{"a":true,"l":649,"u":675},{"a":true,"l":224,"u":851},{"a":true,"l":397,"u":573},{"a":true,"l":531,"u":846},{"a":false,"l":619,"u":966},{"a":true,"l":352,"u":356},{"a":true,"l":397,"u":489},{"a":false,"l":240,"u":348},{"a":true,"l":24,"u":925},{"a":true,"l":42,"u":952},{"a":true,"l":451,"u":887},{"a":true,"l":361,"u":499},{"a":true,"l":785,"u":916},{"a":true,"l":442,"u":774},{"a":true,"l":630,"u":940},{"a":true,"l":430,"u":482},{"a":false,"l":281,"u":764},{"a":true,"l":546,"u":903},{"a":true,"l":128,"u":396},{"a":false,"l":696,"u":843},{"a":false,"l":623,"u":958},{"a":true,"l":219,"u":735},{"a":true,"l":126,"u":768},{"a":false,"l":616,"u":927},{"a":true,"l":563,"u":697},{"a":true,"l":200,"u":470},{"a":false,"l":119,"u":872},{"a":true,"l":305,"u":384},{"a":true,"l":471,"u":478},{"a":false,"l":6,"u":603},{"a":true,"l":49,"u":265},{"a":false,"l":250,"u":528},{"a":true,"l":419,"u":607},{"a":true,"l":595,"u":803},{"a":false,"l":238,"u":323},{"a":false,"l":86,"u":517},{"a":true,"l":98,"u":946},{"a":true,"l":98,"u":478},{"a":true,"l":328,"u":844},{"a":true,"l":616,"u":992},{"a":false,"l":629,"u":701},{"a":false,"l":436,"u":590},{"a":true,"l":44,"u":229},{"a":false,"l":133,"u":819},{"a":true,"l":358,"u":773},{"a":false,"l":145,"u":165},{"a":true,"l":320,"u":585},{"a":true,"l":473,"u":696},{"a":true,"l":444,"u":837},{"a":true,"l":212,"u":897},{"a":false,"l":172,"u":398},{"a":false,"l":504,"u":890},{"a":false,"l":86,"u":583},{"a":false,"l":351,"u":369},{"a":false,"l":551,"u":880},{"a":true,"l":51,"u":704},{"a":true,"l":530,"u":599},{"a":false,"l":44,"u":279},{"a":false,"l":504,"u":572},{"a":true,"l":339,"u":637},{"a":false,"l":397,"u":554},{"a":true,"l":44,"u":783},{"a":false,"l":405,"u":616},{"a":true,"l":82,"u":700},{"a":false,"l":377,"u":548},{"a":true,"l":94,"u":287},{"a":false,"l":406,"u":672},{"a":true,"l":24,"u":381},{"a":true,"l":134,"u":547},{"a":false,"l":1,"u":368},{"a":false,"l":510,"u":559},{"a":true,"l":214,"u":777},{"a":true,"l":27,"u":921},{"a":false,"l":821,"u":964},{"a":false,"l":239,"u":968},{"a":true,"l":459,"u":707},{"a":true,"l":230,"u":494},{"a":false,"l":134,"u":350},{"a":false,"l":563,"u":790},{"a":true,"l":582,"u":794},{"a":false,"l":340,"u":599},{"a":true,"l":253,"u":741},{"a":false,"l":442,"u":486},{"a":true,"l":144,"u":915},{"a":false,"l":738,"u":929},{"a":false,"l":421,"u":888},{"a":true,"l":103,"u":672},{"a":false,"l":33,"u":519},{"a":false,"l":145,"u":751},{"a":false,"l":622,"u":690},{"a":true,"l":177,"u":801},{"a":false,"l":597,"u":887},{"a":false,"l":462,"u":505},{"a":true,"l":6,"u":766},{"a":true,"l":638,"u":839},{"a":true,"l":155,"u":852},{"a":false,"l":714,"u":776},{"a":false,"l":25,"u":309},{"a":true,"l":454,"u":837},{"a":true,"l":186,"u":429},{"a":false,"l":699,"u":752},{"a":false,"l":4,"u":228},{"a":true,"l":566,"u":872},{"a":false,"l":615,"u":974},{"a":true,"l":148,"u":301},{"a":false,"l":424,"u":743},{"a":true,"l":46,"u":476},{"a":false,"l":440,"u":819},{"a":false,"l":187,"u":719},{"a":false,"l":225,"u":387},{"a":false,"l":221,"u":785},{"a":true,"l":70,"u":469},{"a":false,"l":149,"u":181},{"a":false,"l":414,"u":939},{"a":false,"l":345,"u":797},{"a":false,"l":728,"u":961},{"a":false,"l":142,"u":861},{"a":false,"l":298,"u":376},{"a":false,"l":542,"u":954},{"a":false,"l":77,"u":663},{"a":true,"l":427,"u":550},{"a":true,"l":253,"u":341},{"a":false,"l":592,"u":757},{"a":true,"l":157,"u":297},{"a":false,"l":608,"u":834},{"a":true,"l":40,"u":255},{"a":false,"l":380,"u":732},{"a":true,"l":414,"u":512},{"a":false,"l":431,"u":887},{"a":false,"l":451,"u":966},{"a":false,"l":843,"u":914},{"a":true,"l":38,"u":827},{"a":true,"l":149,"u":944},{"a":true,"l":595,"u":789},{"a":false,"l":512,"u":761},{"a":true,"l":416,"u":709},{"a":true,"l":120,"u":296},{"a":true,"l":237,"u":810},{"a":true,"l":652,"u":937},{"a":true,"l":224,"u":959},{"a":false,"l":94,"u":541},{"a":true,"l":782,"u":844},{"a":true,"l":26,"u":872},{"a":false,"l":452,"u":870},{"a":true,"l":888,"u":981},{"a":false,"l":267,"u":876},{"a":false,"l":234,"u":272},{"a":false,"l":69,"u":493},{"a":true,"l":104,"u":993},{"a":false,"l":68,"u":888},{"a":false,"l":371,"u":656},{"a":false,"l":456,"u":659},{"a":true,"l":88,"u":639},{"a":true,"l":174,"u":468},{"a":true,"l":737,"u":771},{"a":false,"l":394,"u":457},{"a":false,"l":232,"u":518},{"a":false,"l":430,"u":688},{"a":false,"l":185,"u":386},{"a":true,"l":244,"u":857},{"a":true,"l":640,"u":931},{"a":false,"l":37,"u":505},{"a":true,"l":147,"u":382},{"a":false,"l":186,"u":517},{"a":false,"l":10,"u":620},{"a":false,"l":64,"u":432},{"a":true,"l":454,"u":515},{"a":true,"l":6,"u":268},{"a":true,"l":52,"u":771},{"a":true,"l":13,"u":602},{"a":false,"l":550,"u":560},{"a":false,"l":35,"u":195},{"a":false,"l":202,"u":842},{"a":true,"l":688,"u":900},{"a":false,"l":479,"u":956},{"a":false,"l":148,"u":714},{"a":false,"l":367,"u":887},{"a":true,"l":256,"u":850},{"a":false,"l":488,"u":993},{"a":true,"l":754,"u":798},{"a":false,"l":600,"u":786},{"a":true,"l":137,"u":256},{"a":false,"l":43,"u":147},{"a":true,"l":228,"u":393},{"a":false,"l":75,"u":275},{"a":false,"l":642,"u":913},{"a":false,"l":94,"u":993},{"a":false,"l":153,"u":960},{"a":true,"l":588,"u":829},{"a":false,"l":73,"u":766},{"a":false,"l":634,"u":642},{"a":false,"l":176,"u":911},{"a":false,"l":149,"u":833},{"a":true,"l":304,"u":870},{"a":true,"l":175,"u":289},{"a":true,"l":39,"u":68},{"a":false,"l":28,"u":537},{"a":false,"l":135,"u":692},{"a":true,"l":278,"u":693},{"a":false,"l":169,"u":388},{"a":true,"l":807,"u":942},{"a":true,"l":431,"u":656},{"a":false,"l":700,"u":723},{"a":true,"l":310,"u":658},{"a":true,"l":385,"u":423},{"a":true,"l":151,"u":810},{"a":false,"l":315,"u":782},{"a":false,"l":424,"u":773},{"a":false,"l":757,"u":974},{"a":false,"l":644,"u":884},{"a":false,"l":501,"u":740},{"a":false,"l":868,"u":973},{"a":false,"l":268,"u":293},{"a":false,"l":121,"u":951},{"a":true,"l":174,"u":942},{"a":true,"l":626,"u":754},{"a":false,"l":68,"u":948},{"a":true,"l":111,"u":179},{"a":true,"l":587,"u":948},{"a":true,"l":341,"u":469},{"a":true,"l":376,"u":949},{"a":true,"l":369,"u":881},{"a":false,"l":700,"u":851},{"a":true,"l":644,"u":654},{"a":false,"l":302,"u":831},{"a":true,"l":627,"u":833},{"a":true,"l":579,"u":983},{"a":true,"l":145,"u":771},{"a":true,"l":440,"u":773},{"a":true,"l":738,"u":765},{"a":false,"l":396,"u":564},{"a":true,"l":215,"u":441},{"a":true,"l":571,"u":846},{"a":false,"l":3,"u":331},{"a":false,"l":232,"u":674},{"a":true,"l":219,"u":635},{"a":true,"l":135,"u":942},{"a":false,"l":169,"u":745},{"a":false,"l":351,"u":820},{"a":false,"l":146,"u":602},{"a":false,"l":36,"u":289},{"a":false,"l":401,"u":785},{"a":true,"l":132,"u":548},{"a":true,"l":851,"u":977},{"a":true,"l":76,"u":598},{"a":true,"l":42,"u":358},{"a":false,"l":223,"u":665},{"a":false,"l":302,"u":935},{"a":false,"l":144,"u":202},{"a":false,"l":103,"u":764},{"a":true,"l":5,"u":850},{"a":true,"l":31,"u":909},{"a":false,"l":591,"u":594},{"a":true,"l":219,"u":556},{"a":false,"l":266,"u":479},{"a":true,"l":59,"u":874},{"a":false,"l":494,"u":763},{"a":false,"l":233,"u":290},{"a":true,"l":80,"u":533},{"a":true,"l":720,"u":959},{"a":false,"l":199,"u":268},{"a":true,"l":292,"u":811},{"a":false,"l":484,"u":533},{"a":true,"l":427,"u":750},{"a":true,"l":451,"u":991},{"a":true,"l":857,"u":868},{"a":true,"l":238,"u":582},{"a":false,"l":185,"u":479},{"a":false,"l":6,"u":462},{"a":false,"l":527,"u":777},{"a":true,"l":165,"u":534},{"a":true,"l":436,"u":613},{"a":true,"l":123,"u":606},{"a":false,"l":749,"u":789},{"a":false,"l":193,"u":515},{"a":true,"l":688,"u":822},{"a":false,"l":143,"u":517},{"a":false,"l":752,"u":783},{"a":false,"l":207,"u":791},{"a":true,"l":178,"u":354},{"a":true,"l":405,"u":986},{"a":true,"l":191,"u":778},{"a":true,"l":329,"u":994},{"a":false,"l":696,"u":997},{"a":false,"l":14,"u":607},{"a":true,"l":648,"u":743},{"a":true,"l":360,"u":367},{"a":false,"l":255,"u":630},{"a":false,"l":6,"u":300},{"a":false,"l":502,"u":733},{"a":false,"l":50,"u":624},{"a":false,"l":761,"u":898},{"a":true,"l":150,"u":537},{"a":false,"l":118,"u":510},{"a":false,"l":266,"u":343},{"a":false,"l":261,"u":946},{"a":true,"l":371,"u":856},{"a":true,"l":93,"u":974},{"a":true,"l":45,"u":664},{"a":true,"l":412,"u":852},{"a":true,"l":520,"u":951},{"a":true,"l":379,"u":661},{"a":true,"l":442,"u":493},{"a":false,"l":67,"u":185},{"a":false,"l":157,"u":961},{"a":false,"l":250,"u":305},{"a":true,"l":492,"u":822},{"a":false,"l":681,"u":682},{"a":true,"l":782,"u":915},{"a":false,"l":126,"u":225},{"a":false,"l":78,"u":476},{"a":true,"l":497,"u":891},{"a":false,"l":206,"u":523},{"a":true,"l":590,"u":745},{"a":true,"l":509,"u":687},{"a":false,"l":206,"u":810},{"a":true,"l":215,"u":996},{"a":false,"l":45,"u":55},{"a":true,"l":237,"u":645},{"a":true,"l":109,"u":752},{"a":true,"l":92,"u":954},{"a":false,"l":253,"u":455},{"a":false,"l":413,"u":700},{"a":true,"l":514,"u":765},{"a":false,"l":261,"u":726},{"a":true,"l":673,"u":790},{"a":true,"l":332,"u":604},{"a":true,"l":613,"u":693},{"a":true,"l":62,"u":714},{"a":false,"l":538,"u":561},{"a":true,"l":456,"u":863},{"a":false,"l":179,"u":322},{"a":false,"l":592,"u":622},{"a":true,"l":102,"u":573},{"a":false,"l":50,"u":773},{"a":true,"l":375,"u":855},{"a":true,"l":173,"u":393},{"a":false,"l":687,"u":989},{"a":false,"l":25,"u":766},{"a":true,"l":805,"u":998},{"a":false,"l":167,"u":851},{"a":true,"l":307,"u":760},{"a":false,"l":317,"u":386},{"a":false,"l":150,"u":179},{"a":false,"l":381,"u":864},{"a":true,"l":776,"u":839},{"a":false,"l":79,"u":348},{"a":false,"l":148,"u":287},{"a":true,"l":21,"u":83},{"a":true,"l":255,"u":809},{"a":true,"l":527,"u":562},{"a":false,"l":221,"u":628},{"a":false,"l":57,"u":963},{"a":true,"l":66,"u":583},{"a":true,"l":289,"u":520},{"a":true,"l":139,"u":847},{"a":false,"l":7,"u":629},{"a":true,"l":221,"u":308},{"a":true,"l":42,"u":671},{"a":false,"l":661,"u":714},{"a":true,"l":213,"u":270},{"a":true,"l":425,"u":901},{"a":true,"l":131,"u":361},{"a":false,"l":9,"u":469},{"a":true,"l":485,"u":797},{"a":false,"l":410,"u":590},{"a":true,"l":251,"u":673},{"a":true,"l":682,"u":739},{"a":true,"l":69,"u":213},{"a":true,"l":158,"u":551},{"a":false,"l":324,"u":434},{"a":true,"l":5,"u":277},{"a":true,"l":244,"u":679},{"a":true,"l":352,"u":368},{"a":true,"l":617,"u":767},{"a":false,"l":97,"u":664},{"a":false,"l":365,"u":451},{"a":true,"l":60,"u":974},{"a":false,"l":91,"u":969},{"a":false,"l":293,"u":570},{"a":true,"l":185,"u":584},{"a":true,"l":176,"u":682},{"a":true,"l":193,"u":816},{"a":false,"l":91,"u":573},{"a":false,"l":305,"u":562},{"a":false,"l":93,"u":542},{"a":true,"l":372,"u":531},{"a":false,"l":666,"u":730},{"a":false,"l":38,"u":630},{"a":false,"l":390,"u":977},{"a":true,"l":54,"u":171},{"a":false,"l":308,"u":467},{"a":false,"l":121,"u":847},{"a":false,"l":254,"u":940},{"a":false,"l":109,"u":542},{"a":false,"l":87,"u":695},{"a":false,"l":177,"u":982},{"a":false,"l":449,"u":745},{"a":false,"l":492,"u":662},{"a":false,"l":471,"u":494},{"a":false,"l":248,"u":686},{"a":false,"l":646,"u":708},{"a":false,"l":140,"u":166},{"a":true,"l":456,"u":787},{"a":false,"l":50,"u":803},{"a":false,"l":382,"u":487},{"a":true,"l":431,"u":931},{"a":true,"l":95,"u":967},{"a":true,"l":362,"u":408},{"a":true,"l":47,"u":834},{"a":false,"l":65,"u":568},{"a":false,"l":654,"u":890},{"a":false,"l":43,"u":394},{"a":true,"l":405,"u":737},{"a":true,"l":577,"u":828},{"a":true,"l":201,"u":985},{"a":true,"l":194,"u":443},{"a":true,"l":344,"u":414},{"a":false,"l":170,"u":472},{"a":true,"l":247,"u":356},{"a":false,"l":525,"u":749},{"a":false,"l":104,"u":782},{"a":false,"l":384,"u":636},{"a":true,"l":95,"u":705},{"a":true,"l":556,"u":599},{"a":true,"l":35,"u":723},{"a":true,"l":130,"u":385},{"a":false,"l":469,"u":592},{"a":true,"l":134,"u":719},{"a":false,"l":304,"u":623},{"a":true,"l":149,"u":762},{"a":false,"l":545,"u":712},{"a":true,"l":56,"u":901},{"a":false,"l":306,"u":934},{"a":true,"l":378,"u":385},{"a":false,"l":340,"u":819},{"a":true,"l":383,"u":558},{"a":false,"l":209,"u":938},{"a":false,"l":429,"u":705},{"a":true,"l":332,"u":722},{"a":false,"l":594,"u":760},{"a":false,"l":820,"u":911},{"a":false,"l":579,"u":835},{"a":true,"l":235,"u":289},{"a":false,"l":838,"u":848},{"a":false,"l":25,"u":169},{"a":true,"l":204,"u":851},{"a":true,"l":548,"u":645},{"a":true,"l":274,"u":861},{"a":false,"l":517,"u":541},{"a":false,"l":95,"u":237},{"a":true,"l":686,"u":854},{"a":true,"l":191,"u":418},{"a":true,"l":414,"u":924},{"a":true,"l":890,"u":962},{"a":false,"l":790,"u":858},{"a":false,"l":235,"u":786},{"a":true,"l":631,"u":941},{"a":true,"l":552,"u":598},{"a":true,"l":306,"u":621},{"a":true,"l":353,"u":461},{"a":true,"l":701,"u":735},{"a":true,"l":118,"u":628},{"a":false,"l":133,"u":680},{"a":false,"l":279,"u":680},{"a":true,"l":488,"u":699},{"a":true,"l":209,"u":240},{"a":true,"l":57,"u":99},{"a":false,"l":146,"u":907},{"a":false,"l":326,"u":680},{"a":false,"l":207,"u":496},{"a":false,"l":233,"u":721},{"a":true,"l":684,"u":751},{"a":false,"l":498,"u":712},{"a":true,"l":8,"u":743},{"a":false,"l":369,"u":968},{"a":false,"l":101,"u":375},{"a":true,"l":656,"u":671},{"a":true,"l":16,"u":378},{"a":false,"l":176,"u":443},{"a":false,"l":277,"u":676},{"a":true,"l":726,"u":811},{"a":false,"l":408,"u":490},{"a":true,"l":76,"u":803},{"a":true,"l":43,"u":607},{"a":false,"l":243,"u":565},{"a":true,"l":856,"u":949},{"a":true,"l":153,"u":547},{"a":true,"l":535,"u":954},{"a":true,"l":353,"u":785},{"a":false,"l":101,"u":461},{"a":false,"l":11,"u":66},{"a":false,"l":194,"u":917},{"a":true,"l":415,"u":898},{"a":true,"l":89,"u":465},{"a":true,"l":817,"u":959},{"a":true,"l":477,"u":604},{"a":true,"l":132,"u":392},{"a":true,"l":172,"u":450},{"a":true,"l":96,"u":542},{"a":false,"l":437,"u":993},{"a":true,"l":425,"u":608},{"a":true,"l":691,"u":748},{"a":false,"l":202,"u":659},{"a":false,"l":251,"u":303},{"a":false,"l":322,"u":690},{"a":false,"l":316,"u":845},{"a":false,"l":503,"u":796},{"a":false,"l":683,"u":952},{"a":true,"l":244,"u":865},{"a":true,"l":456,"u":556},{"a":false,"l":667,"u":811},{"a":false,"l":472,"u":843},{"a":false,"l":30,"u":141},{"a":true,"l":648,"u":709},{"a":true,"l":155,"u":627},{"a":true,"l":151,"u":595},{"a":true,"l":294,"u":899},{"a":true,"l":489,"u":616},{"a":false,"l":451,"u":904},{"a":false,"l":38,"u":349},{"a":false,"l":599,"u":813},{"a":true,"l":648,"u":705},{"a":false,"l":48,"u":208},{"a":false,"l":89,"u":948},{"a":true,"l":166,"u":570},{"a":false,"l":220,"u":600},{"a":false,"l":284,"u":362},{"a":true,"l":76,"u":688},{"a":false,"l":338,"u":985},{"a":true,"l":741,"u":806},{"a":true,"l":252,"u":355},{"a":true,"l":125,"u":895},{"a":false,"l":35,"u":921},{"a":true,"l":24,"u":179},{"a":false,"l":38,"u":792},{"a":false,"l":104,"u":473},{"a":true,"l":74,"u":951},{"a":false,"l":395,"u":431},{"a":false,"l":694,"u":980},{"a":true,"l":56,"u":777},{"a":false,"l":131,"u":781},{"a":true,"l":2,"u":849},{"a":true,"l":471,"u":822},{"a":true,"l":693,"u":970},{"a":false,"l":579,"u":683},{"a":true,"l":385,"u":974},{"a":true,"l":453,"u":793},{"a":false,"l":426,"u":784},{"a":false,"l":128,"u":912},{"a":false,"l":1,"u":239},{"a":true,"l":512,"u":826},{"a":false,"l":384,"u":758},{"a":true,"l":839,"u":949},{"a":false,"l":648,"u":880},{"a":true,"l":709,"u":943},{"a":true,"l":833,"u":953},{"a":true,"l":113,"u":515},{"a":false,"l":69,"u":394},{"a":false,"l":84,"u":125},{"a":true,"l":49,"u":364},{"a":false,"l":696,"u":874},{"a":true,"l":116,"u":562},{"a":false,"l":154,"u":636},{"a":true,"l":96,"u":535},{"a":true,"l":204,"u":923},{"a":true,"l":558,"u":907},{"a":true,"l":555,"u":766},{"a":true,"l":50,"u":778},{"a":true,"l":494,"u":685},{"a":true,"l":32,"u":740},{"a":false,"l":149,"u":331},{"a":true,"l":19,"u":548},{"a":false,"l":204,"u":683},{"a":false,"l":227,"u":720},{"a":false,"l":95,"u":353},{"a":true,"l":566,"u":601},{"a":false,"l":71,"u":639},{"a":false,"l":1,"u":687},{"a":false,"l":112,"u":272},{"a":true,"l":285,"u":498},{"a":true,"l":589,"u":985},{"a":true,"l":244,"u":313},{"a":false,"l":571,"u":722},{"a":true,"l":376,"u":827},{"a":true,"l":930,"u":977},{"a":true,"l":852,"u":968},{"a":true,"l":777,"u":985},{"a":true,"l":412,"u":956},{"a":true,"l":682,"u":873},{"a":true,"l":414,"u":709},{"a":false,"l":81,"u":225},{"a":false,"l":198,"u":318},{"a":false,"l":452,"u":552},{"a":false,"l":193,"u":338},{"a":false,"l":136,"u":259},{"a":true,"l":445,"u":611},{"a":true,"l":186,"u":596},{"a":false,"l":267,"u":612},{"a":false,"l":27,"u":916},{"a":true,"l":797,"u":986},{"a":true,"l":494,"u":984},{"a":false,"l":246,"u":658},{"a":true,"l":130,"u":860},{"a":true,"l":63,"u":813},{"a":false,"l":303,"u":922},{"a":true,"l":419,"u":500},{"a":false,"l":245,"u":983},{"a":false,"l":214,"u":898},{"a":false,"l":155,"u":695},{"a":true,"l":432,"u":599},{"a":true,"l":239,"u":323},{"a":false,"l":707,"u":990},{"a":false,"l":125,"u":151},{"a":true,"l":239,"u":546},{"a":true,"l":714,"u":938},{"a":true,"l":397,"u":399},{"a":false,"l":493,"u":677},{"a":true,"l":305,"u":329},{"a":true,"l":374,"u":760},{"a":true,"l":430,"u":853},{"a":true,"l":155,"u":492},{"a":true,"l":429,"u":980},{"a":false,"l":98,"u":761},{"a":false,"l":277,"u":977},{"a":true,"l":210,"u":293},{"a":false,"l":787,"u":936},{"a":false,"l":47,"u":537},{"a":true,"l":272,"u":801},{"a":true,"l":45,"u":793},{"a":true,"l":275,"u":310},{"a":true,"l":217,"u":384},{"a":true,"l":16,"u":754},{"a":false,"l":103,"u":381},{"a":true,"l":960,"u":983},{"a":false,"l":3,"u":666},{"a":false,"l":211,"u":301},{"a":true,"l":275,"u":592},{"a":true,"l":259,"u":742},{"a":true,"l":753,"u":906},{"a":true,"l":55,"u":688},{"a":false,"l":171,"u":716},{"a":false,"l":166,"u":677},{"a":true,"l":712,"u":958},{"a":false,"l":213,"u":475},{"a":true,"l":410,"u":702},{"a":false,"l":167,"u":506},{"a":true,"l":23,"u":267},{"a":true,"l":385,"u":554},{"a":true,"l":721,"u":937},{"a":false,"l":327,"u":605},{"a":false,"l":84,"u":954},{"a":true,"l":152,"u":167},{"a":false,"l":42,"u":302},{"a":false,"l":824,"u":875},{"a":false,"l":25,"u":911},{"a":true,"l":61,"u":909},{"a":false,"l":208,"u":590},{"a":true,"l":534,"u":829},{"a":true,"l":259,"u":691},{"a":false,"l":551,"u":905},{"a":true,"l":337,"u":673},{"a":true,"l":95,"u":544},{"a":true,"l":109,"u":737},{"a":false,"l":522,"u":833},{"a":true,"l":5,"u":365},{"a":true,"l":551,"u":998},{"a":true,"l":436,"u":597},{"a":false,"l":231,"u":805},{"a":true,"l":232,"u":335},{"a":true,"l":288,"u":974},{"a":false,"l":485,"u":678},{"a":true,"l":331,"u":447},{"a":false,"l":235,"u":702},{"a":true,"l":351,"u":547},{"a":false,"l":645,"u":818},{"a":false,"l":769,"u":955},{"a":true,"l":136,"u":848},{"a":true,"l":689,"u":997},{"a":false,"l":486,"u":752},{"a":false,"l":96,"u":560},{"a":false,"l":60,"u":370},{"a":false,"l":222,"u":744},{"a":false,"l":132,"u":737},{"a":false,"l":52,"u":788},{"a":true,"l":228,"u":591},{"a":false,"l":581,"u":945},{"a":true,"l":580,"u":817},{"a":true,"l":24,"u":322},{"a":false,"l":315,"u":983},{"a":true,"l":62,"u":284},{"a":false,"l":649,"u":662},{"a":false,"l":585,"u":743},{"a":true,"l":159,"u":572},{"a":false,"l":102,"u":333},{"a":false,"l":244,"u":534},{"a":false,"l":667,"u":906},{"a":false,"l":763,"u":851},{"a":false,"l":245,"u":741},{"a":false,"l":600,"u":606},{"a":false,"l":9,"u":856},{"a":false,"l":169,"u":873},{"a":false,"l":196,"u":898},{"a":false,"l":174,"u":498},{"a":false,"l":310,"u":822},{"a":false,"l":592,"u":653},{"a":true,"l":728,"u":766},{"a":false,"l":670,"u":744},{"a":true,"l":782,"u":989},{"a":false,"l":596,"u":956},{"a":true,"l":188,"u":967},{"a":true,"l":409,"u":662},{"a":true,"l":618,"u":968},{"a":true,"l":243,"u":912},{"a":false,"l":179,"u":244},{"a":true,"l":223,"u":323},{"a":false,"l":599,"u":868},{"a":true,"l":265,"u":656},{"a":true,"l":390,"u":567},{"a":false,"l":751,"u":904},{"a":false,"l":195,"u":920},{"a":true,"l":809,"u":970},{"a":true,"l":2,"u":935},{"a":false,"l":225,"u":923},{"a":true,"l":208,"u":988},{"a":true,"l":546,"u":762},{"a":false,"l":557,"u":754},{"a":true,"l":380,"u":675},{"a":true,"l":296,"u":629},{"a":false,"l":571,"u":872},{"a":false,"l":614,"u":974},{"a":true,"l":40,"u":714},{"a":true,"l":217,"u":453},{"a":true,"l":529,"u":553},{"a":false,"l":275,"u":433},{"a":true,"l":331,"u":586},{"a":false,"l":192,"u":615},{"a":false,"l":430,"u":892},{"a":true,"l":65,"u":87},{"a":true,"l":203,"u":225},{"a":false,"l":55,"u":740},{"a":true,"l":218,"u":274},{"a":false,"l":536,"u":808},{"a":false,"l":700,"u":957},{"a":false,"l":144,"u":627},{"a":true,"l":65,"u":565},{"a":false,"l":375,"u":998},{"a":true,"l":105,"u":198},{"a":false,"l":144,"u":744},{"a":true,"l":216,"u":926},{"a":true,"l":388,"u":561},{"a":true,"l":703,"u":884},{"a":true,"l":601,"u":872},{"a":true,"l":236,"u":961},{"a":false,"l":679,"u":995},{"a":false,"l":750,"u":895},{"a":true,"l":502,"u":982},{"a":false,"l":63,"u":812},{"a":false,"l":521,"u":780},{"a":true,"l":148,"u":760},{"a":false,"l":361,"u":875},{"a":true,"l":356,"u":525},{"a":false,"l":713,"u":831},{"a":true,"l":277,"u":508},{"a":false,"l":185,"u":283},{"a":false,"l":283,"u":519},{"a":false,"l":464,"u":555},{"a":false,"l":109,"u":138},{"a":false,"l":519,"u":748},{"a":false,"l":353,"u":804},{"a":false,"l":536,"u":744},{"a":false,"l":579,"u":886},{"a":true,"l":475,"u":562},{"a":true,"l":786,"u":827},{"a":true,"l":236,"u":483},{"a":true,"l":352,"u":521},{"a":false,"l":123,"u":849},{"a":true,"l":816,"u":861},{"a":true,"l":650,"u":785},{"a":false,"l":239,"u":907},{"a":false,"l":177,"u":686},{"a":false,"l":298,"u":958},{"a":false,"l":504,"u":822},{"a":true,"l":252,"u":986},{"a":false,"l":653,"u":908},{"a":false,"l":682,"u":805},{"a":true,"l":812,"u":824},{"a":true,"l":70,"u":405},{"a":true,"l":170,"u":810},{"a":true,"l":143,"u":270},{"a":true,"l":83,"u":969},{"a":true,"l":304,"u":781},{"a":false,"l":471,"u":766},{"a":true,"l":722,"u":802},{"a":true,"l":403,"u":871},{"a":true,"l":77,"u":172},{"a":true,"l":63,"u":140},{"a":false,"l":282,"u":676},{"a":false,"l":215,"u":862},{"a":true,"l":421,"u":802},{"a":false,"l":304,"u":666},{"a":true,"l":291,"u":724},{"a":false,"l":847,"u":978},{"a":true,"l":328,"u":989},{"a":false,"l":56,"u":313},{"a":false,"l":176,"u":756},{"a":true,"l":742,"u":744},{"a":false,"l":20,"u":560},{"a":false,"l":100,"u":475},{"a":true,"l":166,"u":735},{"a":true,"l":275,"u":714},{"a":false,"l":123,"u":540},{"a":false,"l":367,"u":871},{"a":false,"l":626,"u":656},{"a":false,"l":183,"u":350},{"a":true,"l":145,"u":940},{"a":true,"l":290,"u":645},{"a":false,"l":204,"u":626},{"a":true,"l":40,"u":177},{"a":true,"l":553,"u":634},{"a":false,"l":145,"u":292},{"a":true,"l":899,"u":957},{"a":true,"l":252,"u":853},{"a":false,"l":630,"u":652},{"a":false,"l":230,"u":270},{"a":false,"l":285,"u":948},{"a":true,"l":100,"u":295},{"a":false,"l":167,"u":472},{"a":false,"l":254,"u":547},{"a":false,"l":552,"u":630},{"a":true,"l":583,"u":603},{"a":false,"l":236,"u":677},{"a":true,"l":645,"u":766},{"a":false,"l":180,"u":888},{"a":true,"l":606,"u":732},{"a":false,"l":322,"u":444},{"a":false,"l":356,"u":622},{"a":false,"l":305,"u":448},{"a":true,"l":197,"u":982},{"a":true,"l":463,"u":939},{"a":true,"l":406,"u":640},{"a":false,"l":625,"u":938},{"a":false,"l":218,"u":943},{"a":true,"l":289,"u":981},{"a":true,"l":60,"u":334},{"a":true,"l":119,"u":122},{"a":false,"l":277,"u":464},{"a":false,"l":638,"u":732},{"a":false,"l":267,"u":887},{"a":true,"l":13,"u":449},{"a":true,"l":6,"u":726},{"a":false,"l":745,"u":804},{"a":true,"l":156,"u":664},{"a":false,"l":380,"u":507},{"a":false,"l":106,"u":428},{"a":true,"l":290,"u":676},{"a":false,"l":179,"u":528},{"a":false,"l":463,"u":828},{"a":false,"l":114,"u":740},{"a":false,"l":380,"u":520},{"a":false,"l":80,"u":791},{"a":false,"l":67,"u":183},{"a":true,"l":11,"u":22},{"a":false,"l":90,"u":334},{"a":true,"l":361,"u":609},{"a":false,"l":217,"u":228},{"a":true,"l":141,"u":430},{"a":true,"l":596,"u":723},{"a":true,"l":582,"u":859},{"a":false,"l":369,"u":391},{"a":true,"l":147,"u":293},{"a":false,"l":154,"u":568},{"a":false,"l":64,"u":203},{"a":true,"l":73,"u":693},{"a":false,"l":47,"u":999},{"a":true,"l":459,"u":688},{"a":false,"l":524,"u":788},{"a":true,"l":195,"u":317},{"a":true,"l":216,"u":550},{"a":false,"l":155,"u":244},{"a":false,"l":194,"u":618},{"a":true,"l":107,"u":754},{"a":false,"l":118,"u":716},{"a":false,"l":321,"u":534},{"a":false,"l":10,"u":659},{"a":true,"l":712,"u":777},{"a":false,"l":303,"u":361},{"a":true,"l":211,"u":312},{"a":true,"l":195,"u":357},{"a":false,"l":181,"u":487},{"a":true,"l":1,"u":531},{"a":true,"l":687,"u":780},{"a":true,"l":79,"u":314},{"a":false,"l":177,"u":607},{"a":false,"l":773,"u":838},{"a":false,"l":674,"u":920},{"a":true,"l":628,"u":686},{"a":true,"l":809,"u":993},{"a":true,"l":154,"u":735},{"a":false,"l":438,"u":996},{"a":false,"l":157,"u":672},{"a":false,"l":147,"u":529},{"a":true,"l":201,"u":782},{"a":false,"l":738,"u":821},{"a":false,"l":4,"u":162},{"a":true,"l":11,"u":193},{"a":true,"l":663,"u":933},{"a":true,"l":682,"u":738},{"a":true,"l":35,"u":531},{"a":true,"l":365,"u":863},{"a":false,"l":108,"u":772},{"a":false,"l":811,"u":871},{"a":true,"l":262,"u":717},{"a":true,"l":45,"u":230},{"a":false,"l":368,"u":706},{"a":true,"l":874,"u":910},{"a":false,"l":19,"u":216},{"a":true,"l":832,"u":917},{"a":false,"l":369,"u":882},{"a":false,"l":109,"u":126},{"a":true,"l":94,"u":851},{"a":false,"l":428,"u":580},{"a":false,"l":200,"u":888},{"a":false,"l":841,"u":991},{"a":true,"l":25,"u":617},{"a":true,"l":38,"u":275},{"a":false,"l":95,"u":635},{"a":false,"l":368,"u":906},{"a":true,"l":511,"u":752},{"a":true,"l":781,"u":825},{"a":false,"l":277,"u":807},{"a":true,"l":664,"u":851},{"a":false,"l":199,"u":556},{"a":true,"l":140,"u":173},{"a":false,"l":136,"u":946},{"a":true,"l":266,"u":724},{"a":true,"l":43,"u":767},{"a":false,"l":306,"u":778},{"a":true,"l":213,"u":289},{"a":false,"l":145,"u":731},{"a":true,"l":791,"u":964},{"a":false,"l":347,"u":701},{"a":false,"l":33,"u":500},{"a":false,"l":320,"u":658},{"a":true,"l":418,"u":455},{"a":false,"l":169,"u":461},{"a":true,"l":27,"u":161},{"a":false,"l":778,"u":902},{"a":false,"l":368,"u":669},{"a":false,"l":605,"u":799},{"a":true,"l":160,"u":485},{"a":false,"l":623,"u":746},{"a":false,"l":550,"u":992},{"a":true,"l":353,"u":707},{"a":true,"l":191,"u":996},{"a":true,"l":245,"u":689},{"a":true,"l":722,"u":836},{"a":true,"l":466,"u":937},{"a":false,"l":720,"u":838},{"a":true,"l":157,"u":204},{"a":false,"l":119,"u":220},{"a":false,"l":191,"u":377},{"a":false,"l":888,"u":930},{"a":false,"l":70,"u":869},{"a":false,"l":813,"u":944},{"a":true,"l":165,"u":883},{"a":true,"l":575,"u":689},{"a":true,"l":248,"u":267},{"a":true,"l":706,"u":760},{"a":false,"l":200,"u":901},{"a":false,"l":202,"u":901},{"a":false,"l":491,"u":838},{"a":true,"l":172,"u":451},{"a":true,"l":89,"u":932},{"a":true,"l":1,"u":536},{"a":false,"l":84,"u":740},{"a":false,"l":223,"u":288},{"a":false,"l":209,"u":661},{"a":false,"l":4,"u":206},{"a":true,"l":657,"u":872},{"a":false,"l":418,"u":886},{"a":true,"l":446,"u":569},{"a":false,"l":810,"u":846},{"a":false,"l":812,"u":855},{"a":false,"l":646,"u":967},{"a":true,"l":216,"u":849},{"a":true,"l":219,"u":785},{"a":false,"l":82,"u":548},{"a":true,"l":444,"u":990},{"a":true,"l":516,"u":554},{"a":false,"l":168,"u":275},{"a":false,"l":415,"u":899},{"a":true,"l":304,"u":965},{"a":false,"l":464,"u":478},{"a":true,"l":35,"u":646},{"a":false,"l":196,"u":293},{"a":false,"l":155,"u":589},{"a":true,"l":341,"u":776},{"a":true,"l":348,"u":798},{"a":false,"l":70,"u":859},{"a":false,"l":509,"u":723},{"a":true,"l":375,"u":529},{"a":false,"l":683,"u":968},{"a":false,"l":46,"u":244},{"a":false,"l":151,"u":973},{"a":false,"l":356,"u":379},{"a":true,"l":735,"u":990},{"a":true,"l":691,"u":884},{"a":true,"l":68,"u":607},{"a":false,"l":301,"u":930},{"a":false,"l":284,"u":769},{"a":true,"l":11,"u":790},{"a":false,"l":40,"u":154},{"a":false,"l":123,"u":358},{"a":false,"l":326,"u":700},{"a":true,"l":387,"u":565},{"a":true,"l":101,"u":948},{"a":false,"l":304,"u":384},{"a":true,"l":180,"u":676},{"a":false,"l":370,"u":429},{"a":false,"l":407,"u":487},{"a":false,"l":90,"u":100},{"a":false,"l":774,"u":868},{"a":true,"l":165,"u":192},{"a":false,"l":145,"u":227},{"a":true,"l":167,"u":762},{"a":false,"l":660,"u":854},{"a":false,"l":204,"u":338},{"a":false,"l":66,"u":244},{"a":true,"l":739,"u":835},{"a":false,"l":338,"u":489},{"a":false,"l":160,"u":892},{"a":false,"l":259,"u":640},{"a":true,"l":550,"u":812},{"a":true,"l":262,"u":586},{"a":true,"l":265,"u":553},{"a":true,"l":277,"u":657},{"a":false,"l":670,"u":794},{"a":true,"l":505,"u":630},{"a":true,"l":326,"u":899},{"a":true,"l":15,"u":285},{"a":true,"l":294,"u":779},{"a":true,"l":80,"u":632},{"a":true,"l":419,"u":652},{"a":false,"l":135,"u":908},{"a":true,"l":660,"u":942},{"a":true,"l":41,"u":594},{"a":false,"l":80,"u":448},{"a":false,"l":89,"u":872},{"a":false,"l":73,"u":298},{"a":false,"l":154,"u":992},{"a":false,"l":646,"u":796},{"a":true,"l":284,"u":330},{"a":true,"l":578,"u":649},{"a":false,"l":571,"u":762},{"a":true,"l":835,"u":845},{"a":false,"l":103,"u":777},{"a":true,"l":41,"u":156},{"a":false,"l":88,"u":976},{"a":true,"l":386,"u":682},{"a":true,"l":557,"u":885},{"a":false,"l":34,"u":544},{"a":true,"l":144,"u":591},{"a":true,"l":250,"u":568},{"a":false,"l":225,"u":523},{"a":false,"l":390,"u":814},{"a":false,"l":755,"u":923},{"a":true,"l":84,"u":888},{"a":true,"l":349,"u":715},{"a":false,"l":109,"u":825},{"a":false,"l":355,"u":457},{"a":false,"l":55,"u":59},{"a":true,"l":244,"u":361},{"a":true,"l":84,"u":682},{"a":true,"l":589,"u":646},{"a":false,"l":4,"u":118},{"a":true,"l":8,"u":340},{"a":false,"l":478,"u":592},{"a":true,"l":676,"u":934},{"a":true,"l":224,"u":710},{"a":true,"l":539,"u":992},{"a":false,"l":301,"u":643},{"a":false,"l":3,"u":954},{"a":true,"l":81,"u":991},{"a":true,"l":88,"u":416},{"a":false,"l":269,"u":981},{"a":true,"l":305,"u":619},{"a":true,"l":73,"u":755},{"a":false,"l":644,"u":701},{"a":true,"l":15,"u":432},{"a":false,"l":46,"u":607},{"a":true,"l":370,"u":816},{"a":true,"l":321,"u":437},{"a":false,"l":130,"u":731},{"a":false,"l":507,"u":892},{"a":false,"l":98,"u":856},{"a":false,"l":206,"u":712},{"a":true,"l":51,"u":380},{"a":true,"l":420,"u":448},{"a":true,"l":642,"u":737},{"a":false,"l":222,"u":311},{"a":true,"l":776,"u":907},{"a":true,"l":249,"u":740},{"a":true,"l":163,"u":330},{"a":false,"l":70,"u":749},{"a":false,"l":635,"u":666},{"a":false,"l":351,"u":820},{"a":true,"l":322,"u":820},{"a":true,"l":171,"u":366},{"a":true,"l":254,"u":573},{"a":true,"l":274,"u":582},{"a":false,"l":361,"u":936},{"a":false,"l":491,"u":998},{"a":true,"l":16,"u":511},{"a":true,"l":424,"u":820},{"a":true,"l":107,"u":657},{"a":false,"l":716,"u":800},{"a":false,"l":157,"u":806},{"a":false,"l":254,"u":703},{"a":false,"l":10,"u":698},{"a":true,"l":398,"u":821},{"a":true,"l":151,"u":478},{"a":true,"l":251,"u":685},{"a":true,"l":130,"u":231},{"a":false,"l":326,"u":940},{"a":false,"l":598,"u":868},{"a":true,"l":671,"u":682},{"a":true,"l":129,"u":769},{"a":true,"l":529,"u":782},{"a":true,"l":317,"u":510},{"a":false,"l":250,"u":913},{"a":true,"l":368,"u":738},{"a":true,"l":32,"u":525},{"a":false,"l":674,"u":920},{"a":false,"l":713,"u":791},{"a":false,"l":23,"u":175},{"a":false,"l":583,"u":768},{"a":false,"l":40,"u":151},{"a":true,"l":257,"u":982},{"a":false,"l":190,"u":261},{"a":false,"l":381,"u":922},{"a":false,"l":43,"u":888},{"a":false,"l":73,"u":277},{"a":false,"l":362,"u":773},{"a":true,"l":95,"u":222},{"a":false,"l":30,"u":575},{"a":true,"l":462,"u":789},{"a":false,"l":760,"u":929},{"a":false,"l":351,"u":353},{"a":true,"l":364,"u":673},{"a":true,"l":413,"u":558},{"a":true,"l":268,"u":829},{"a":false,"l":71,"u":376},{"a":true,"l":218,"u":652},{"a":true,"l":126,"u":176},{"a":false,"l":404,"u":601},{"a":false,"l":566,"u":746},{"a":true,"l":317,"u":355},{"a":true,"l":325,"u":443},{"a":true,"l":82,"u":129},{"a":false,"l":107,"u":175},{"a":true,"l":91,"u":796},{"a":false,"l":296,"u":845},{"a":true,"l":243,"u":711},{"a":true,"l":191,"u":620},{"a":false,"l":101,"u":297},{"a":true,"l":396,"u":913},{"a":false,"l":633,"u":724},{"a":true,"l":244,"u":666},{"a":true,"l":87,"u":118},{"a":true,"l":228,"u":606},{"a":true,"l":75,"u":675},{"a":false,"l":256,"u":859},{"a":false,"l":118,"u":659},{"a":true,"l":837,"u":872},{"a":true,"l":110,"u":451},{"a":true,"l":593,"u":928},{"a":true,"l":147,"u":298},{"a":true,"l":168,"u":343},{"a":false,"l":188,"u":453},{"a":true,"l":471,"u":608},{"a":false,"l":207,"u":506},{"a":true,"l":170,"u":399},{"a":true,"l":252,"u":305},{"a":true,"l":11,"u":856},{"a":false,"l":224,"u":318},{"a":true,"l":976,"u":976},{"a":false,"l":693,"u":750},{"a":false,"l":318,"u":713},{"a":true,"l":61,"u":100},{"a":false,"l":461,"u":757},{"a":false,"l":169,"u":915},{"a":false,"l":247,"u":498},{"a":false,"l":310,"u":965},{"a":true,"l":701,"u":767},{"a":false,"l":273,"u":638},{"a":true,"l":393,"u":913},{"a":true,"l":574,"u":591},{"a":false,"l":94,"u":519},{"a":true,"l":292,"u":313},{"a":false,"l":103,"u":439},{"a":true,"l":350,"u":358},{"a":false,"l":679,"u":867},{"a":false,"l":312,"u":566},{"a":true,"l":186,"u":396},{"a":false,"l":393,"u":561},{"a":true,"l":681,"u":728},{"a":false,"l":199,"u":858},{"a":true,"l":25,"u":452},{"a":true,"l":90,"u":263},{"a":false,"l":252,"u":268},{"a":true,"l":437,"u":693},{"a":false,"l":65,"u":119},{"a":true,"l":147,"u":213},{"a":true,"l":596,"u":953},{"a":true,"l":411,"u":846},{"a":false,"l":260,"u":898},{"a":false,"l":35,"u":573},{"a":false,"l":830,"u":984},{"a":false,"l":71,"u":768},{"a":true,"l":430,"u":495},{"a":false,"l":67,"u":187},{"a":false,"l":11,"u":315},{"a":false,"l":886,"u":953},{"a":true,"l":175,"u":217},{"a":false,"l":186,"u":848},{"a":true,"l":186,"u":905},{"a":false,"l":127,"u":657},{"a":true,"l":346,"u":768},{"a":true,"l":47,"u":547},{"a":true,"l":41,"u":482},{"a":false,"l":569,"u":928},{"a":false,"l":464,"u":874},{"a":true,"l":454,"u":854},{"a":true,"l":731,"u":872},{"a":true,"l":358,"u":909},{"a":false,"l":584,"u":604},{"a":false,"l":519,"u":776},{"a":true,"l":852,"u":860},{"a":false,"l":97,"u":301},{"a":true,"l":596,"u":599},{"a":true,"l":758,"u":985},{"a":false,"l":416,"u":434},{"a":true,"l":411,"u":696},{"a":true,"l":183,"u":673},{"a":false,"l":290,"u":845},{"a":true,"l":224,"u":306},{"a":false,"l":413,"u":773},{"a":true,"l":217,"u":502},{"a":true,"l":736,"u":970},{"a":true,"l":150,"u":499},{"a":false,"l":648,"u":906},{"a":true,"l":195,"u":711},{"a":true,"l":32,"u":383},{"a":true,"l":793,"u":964},{"a":false,"l":790,"u":858},{"a":true,"l":306,"u":326},{"a":false,"l":460,"u":675},{"a":true,"l":22,"u":77},{"a":false,"l":227,"u":758},{"a":true,"l":652,"u":677},{"a":true,"l":623,"u":938},{"a":true,"l":460,"u":625},{"a":false,"l":728,"u":879},{"a":false,"l":769,"u":842},{"a":true,"l":157,"u":819},{"a":false,"l":607,"u":931},{"a":true,"l":705,"u":795},{"a":false,"l":549,"u":774},{"a":false,"l":579,"u":972},{"a":false,"l":514,"u":763},{"a":false,"l":71,"u":703},{"a":true,"l":193,"u":547},{"a":true,"l":171,"u":605},{"a":true,"l":107,"u":380},{"a":true,"l":73,"u":296},{"a":false,"l":655,"u":933},{"a":false,"l":127,"u":878},{"a":true,"l":743,"u":998},{"a":true,"l":29,"u":375},{"a":true,"l":518,"u":698},{"a":true,"l":464,"u":730},{"a":false,"l":68,"u":686},{"a":false,"l":170,"u":334},{"a":false,"l":826,"u":913},{"a":true,"l":209,"u":686},{"a":false,"l":629,"u":764},{"a":false,"l":674,"u":918},{"a":true,"l":61,"u":605},{"a":false,"l":589,"u":785},{"a":false,"l":722,"u":796},{"a":false,"l":310,"u":808},{"a":true,"l":160,"u":575},{"a":true,"l":286,"u":362},{"a":false,"l":737,"u":934},{"a":true,"l":109,"u":569},{"a":false,"l":130,"u":200},{"a":true,"l":876,"u":958},{"a":false,"l":70,"u":272},{"a":false,"l":133,"u":533},{"a":false,"l":76,"u":78},{"a":false,"l":56,"u":442},{"a":true,"l":24,"u":936},{"a":false,"l":188,"u":354},{"a":false,"l":313,"u":700},{"a":false,"l":182,"u":198},{"a":true,"l":340,"u":881},{"a":false,"l":921,"u":943},{"a":true,"l":207,"u":873},{"a":true,"l":387,"u":764},{"a":false,"l":121,"u":222},{"a":false,"l":358,"u":523},{"a":true,"l":190,"u":449},{"a":false,"l":489,"u":954},{"a":true,"l":332,"u":632},{"a":true,"l":21,"u":905},{"a":true,"l":170,"u":400},{"a":true,"l":79,"u":744},{"a":true,"l":922,"u":995},{"a":false,"l":360,"u":879},{"a":true,"l":487,"u":804},{"a":true,"l":384,"u":979},{"a":false,"l":329,"u":541},{"a":true,"l":289,"u":901},{"a":false,"l":393,"u":781},{"a":false,"l":65,"u":191},{"a":false,"l":433,"u":550},{"a":true,"l":603,"u":998},{"a":true,"l":288,"u":909},{"a":true,"l":58,"u":543},{"a":false,"l":16,"u":174},{"a":true,"l":158,"u":230},{"a":true,"l":1,"u":312},{"a":true,"l":346,"u":746},{"a":true,"l":176,"u":710},{"a":false,"l":115,"u":660},{"a":false,"l":613,"u":817},{"a":true,"l":167,"u":258},{"a":false,"l":133,"u":619},{"a":true,"l":148,"u":781},{"a":true,"l":654,"u":895},{"a":false,"l":187,"u":424},{"a":true,"l":206,"u":779},{"a":false,"l":110,"u":670},{"a":true,"l":405,"u":500},{"a":false,"l":83,"u":899},{"a":false,"l":118,"u":713},{"a":false,"l":478,"u":991},{"a":false,"l":182,"u":798},{"a":false,"l":562,"u":567},{"a":false,"l":139,"u":811},{"a":true,"l":544,"u":764},{"a":false,"l":429,"u":828},{"a":true,"l":738,"u":779},{"a":true,"l":834,"u":943},{"a":false,"l":1,"u":298},{"a":false,"l":304,"u":566},{"a":false,"l":347,"u":706},{"a":false,"l":1,"u":986},{"a":false,"l":133,"u":214},{"a":false,"l":882,"u":991},{"a":true,"l":79,"u":157},{"a":false,"l":28,"u":568},{"a":false,"l":710,"u":865},{"a":false,"l":124,"u":725},{"a":false,"l":554,"u":865},{"a":false,"l":151,"u":204},{"a":false,"l":237,"u":871},{"a":false,"l":347,"u":687},{"a":true,"l":833,"u":861},{"a":false,"l":8,"u":474},{"a":false,"l":548,"u":904},{"a":true,"l":149,"u":500},{"a":false,"l":535,"u":920},{"a":true,"l":554,"u":616},{"a":false,"l":261,"u":531},{"a":true,"l":278,"u":669},{"a":true,"l":401,"u":693},{"a":false,"l":715,"u":809},{"a":false,"l":574,"u":624},{"a":false,"l":492,"u":628},{"a":true,"l":29,"u":667},{"a":true,"l":108,"u":827},{"a":false,"l":769,"u":902},{"a":false,"l":592,"u":972},{"a":true,"l":117,"u":449},{"a":false,"l":1,"u":963},{"a":false,"l":246,"u":836},{"a":true,"l":359,"u":615},{"a":true,"l":411,"u":740},{"a":false,"l":207,"u":772},{"a":false,"l":166,"u":878},{"a":false,"l":126,"u":745},{"a":false,"l":137,"u":844},{"a":true,"l":41,"u":338},{"a":true,"l":83,"u":780},{"a":false,"l":214,"u":236},{"a":true,"l":203,"u":849},{"a":true,"l":313,"u":722},{"a":false,"l":341,"u":708},{"a":false,"l":300,"u":970},{"a":false,"l":275,"u":380},{"a":true,"l":144,"u":403},{"a":false,"l":50,"u":733},{"a":false,"l":47,"u":930},{"a":true,"l":586,"u":764},{"a":false,"l":365,"u":578},{"a":true,"l":95,"u":438},{"a":false,"l":130,"u":622},{"a":false,"l":139,"u":744},{"a":false,"l":612,"u":632},{"a":false,"l":281,"u":546},{"a":false,"l":679,"u":864},{"a":false,"l":168,"u":253},{"a":true,"l":137,"u":447},{"a":false,"l":481,"u":810},{"a":false,"l":365,"u":695},{"a":true,"l":59,"u":706},{"a":false,"l":790,"u":911},{"a":true,"l":188,"u":868},{"a":false,"l":351,"u":422},{"a":true,"l":526,"u":632},{"a":true,"l":304,"u":473},{"a":false,"l":768,"u":770},{"a":false,"l":132,"u":819},{"a":false,"l":699,"u":974},{"a":true,"l":342,"u":540},{"a":true,"l":51,"u":910},{"a":true,"l":597,"u":999},{"a":false,"l":306,"u":879},{"a":false,"l":120,"u":181},{"a":false,"l":351,"u":700},{"a":true,"l":251,"u":538},{"a":true,"l":567,"u":697},{"a":true,"l":396,"u":474},{"a":true,"l":726,"u":781},{"a":true,"l":541,"u":549},{"a":true,"l":423,"u":937},{"a":true,"l":563,"u":849},{"a":false,"l":56,"u":279},{"a":false,"l":163,"u":780},{"a":true,"l":575,"u":745},{"a":true,"l":121,"u":998},{"a":true,"l":251,"u":257},{"a":false,"l":2,"u":921},{"a":true,"l":794,"u":949},{"a":false,"l":48,"u":498},{"a":true,"l":335,"u":754},{"a":true,"l":469,"u":959},{"a":false,"l":228,"u":986},{"a":false,"l":390,"u":765},{"a":false,"l":29,"u":277},{"a":true,"l":366,"u":917},{"a":true,"l":105,"u":950},{"a":false,"l":11,"u":763},{"a":true,"l":213,"u":415},{"a":false,"l":101,"u":453},{"a":true,"l":717,"u":974},{"a":false,"l":567,"u":933},{"a":false,"l":172,"u":287},{"a":true,"l":437,"u":575},{"a":false,"l":525,"u":783},{"a":false,"l":513,"u":774},{"a":false,"l":33,"u":300},{"a":false,"l":830,"u":965},{"a":true,"l":45,"u":773},{"a":true,"l":1,"u":757},{"a":true,"l":696,"u":940},{"a":true,"l":242,"u":645},{"a":true,"l":130,"u":189},{"a":false,"l":471,"u":790},{"a":false,"l":184,"u":786},{"a":false,"l":51,"u":674},{"a":false,"l":292,"u":962},{"a":true,"l":706,"u":844},{"a":false,"l":491,"u":661},{"a":true,"l":272,"u":338},{"a":false,"l":79,"u":723},{"a":false,"l":1,"u":947},{"a":true,"l":612,"u":741},{"a":true,"l":1,"u":110},{"a":true,"l":713,"u":865},{"a":false,"l":779,"u":925},{"a":false,"l":663,"u":945},{"a":false,"l":154,"u":315},{"a":true,"l":24,"u":181},{"a":true,"l":205,"u":876},{"a":true,"l":167,"u":523},{"a":false,"l":787,"u":935},{"a":false,"l":457,"u":556},{"a":false,"l":478,"u":711},{"a":true,"l":81,"u":932},{"a":true,"l":260,"u":275},{"a":false,"l":362,"u":538},{"a":true,"l":109,"u":455},{"a":true,"l":16,"u":946},{"a":false,"l":586,"u":971},{"a":false,"l":613,"u":676},{"a":false,"l":259,"u":549},{"a":true,"l":484,"u":829},{"a":false,"l":662,"u":797},{"a":true,"l":251,"u":358},{"a":false,"l":10,"u":166},{"a":true,"l":651,"u":736},{"a":false,"l":396,"u":936},{"a":true,"l":285,"u":723},{"a":false,"l":416,"u":880},{"a":false,"l":143,"u":695},{"a":true,"l":361,"u":424},{"a":false,"l":308,"u":895},{"a":false,"l":301,"u":865},{"a":true,"l":23,"u":364},{"a":true,"l":95,"u":571},{"a":true,"l":7,"u":135},{"a":true,"l":167,"u":826},{"a":true,"l":499,"u":847},{"a":true,"l":108,"u":944},{"a":true,"l":687,"u":946},{"a":false,"l":107,"u":481},{"a":false,"l":850,"u":925},{"a":false,"l":413,"u":993},{"a":true,"l":39,"u":420},{"a":true,"l":169,"u":703},{"a":false,"l":18,"u":812},{"a":false,"l":124,"u":464},{"a":true,"l":552,"u":641},{"a":false,"l":131,"u":159},{"a":true,"l":325,"u":984},{"a":false,"l":165,"u":401},{"a":true,"l":185,"u":708},{"a":false,"l":531,"u":552},{"a":true,"l":241,"u":822},{"a":true,"l":240,"u":976},{"a":true,"l":723,"u":745},{"a":false,"l":440,"u":499},{"a":true,"l":344,"u":668},{"a":false,"l":595,"u":842},{"a":true,"l":322,"u":589},{"a":false,"l":101,"u":978},{"a":true,"l":35,"u":823},{"a":false,"l":45,"u":844},{"a":false,"l":550,"u":860},{"a":false,"l":561,"u":677},{"a":false,"l":134,"u":317},{"a":false,"l":127,"u":742},{"a":false,"l":216,"u":567},{"a":true,"l":530,"u":832},{"a":true,"l":386,"u":710},{"a":false,"l":487,"u":943},{"a":false,"l":292,"u":595},{"a":true,"l":12,"u":327},{"a":true,"l":436,"u":982},{"a":false,"l":27,"u":852},{"a":true,"l":191,"u":940},{"a":false,"l":478,"u":684},{"a":false,"l":381,"u":445},{"a":false,"l":406,"u":900},{"a":false,"l":280,"u":283},{"a":false,"l":132,"u":747},{"a":true,"l":439,"u":666},{"a":false,"l":536,"u":990},{"a":false,"l":864,"u":869},{"a":false,"l":638,"u":769},{"a":false,"l":166,"u":563},{"a":false,"l":254,"u":327},{"a":false,"l":23,"u":160},{"a":true,"l":24,"u":650},{"a":false,"l":223,"u":428},{"a":true,"l":150,"u":499},{"a":true,"l":254,"u":545},{"a":false,"l":62,"u":913},{"a":false,"l":128,"u":182},{"a":false,"l":619,"u":728},{"a":true,"l":180,"u":326},{"a":false,"l":326,"u":512},{"a":false,"l":159,"u":453},{"a":true,"l":604,"u":778},{"a":true,"l":397,"u":850},{"a":false,"l":303,"u":908},{"a":true,"l":157,"u":253},{"a":false,"l":179,"u":599},{"a":false,"l":287,"u":801},{"a":true,"l":134,"u":841},{"a":true,"l":437,"u":449},{"a":true,"l":727,"u":773},{"a":true,"l":65,"u":974},{"a":false,"l":519,"u":886},{"a":true,"l":176,"u":523},{"a":true,"l":812,"u":896},{"a":false,"l":412,"u":772},{"a":true,"l":727,"u":848},{"a":true,"l":707,"u":883},{"a":false,"l":279,"u":755},{"a":false,"l":495,"u":528},{"a":true,"l":365,"u":560},{"a":false,"l":469,"u":848},{"a":true,"l":50,"u":421},{"a":false,"l":538,"u":925},{"a":false,"l":719,"u":787},{"a":false,"l":530,"u":651},{"a":false,"l":701,"u":826},{"a":true,"l":694,"u":859},{"a":true,"l":543,"u":986},{"a":true,"l":70,"u":135},{"a":true,"l":58,"u":178},{"a":true,"l":544,"u":672},{"a":true,"l":363,"u":900},{"a":true,"l":231,"u":403},{"a":true,"l":897,"u":917},{"a":true,"l":750,"u":753},{"a":false,"l":219,"u":632},{"a":false,"l":548,"u":575},{"a":true,"l":2,"u":731},{"a":false,"l":549,"u":873},{"a":true,"l":107,"u":391},{"a":false,"l":491,"u":600},{"a":true,"l":276,"u":802},{"a":false,"l":94,"u":892},{"a":false,"l":2,"u":168},{"a":false,"l":403,"u":727},{"a":false,"l":34,"u":128},{"a":false,"l":674,"u":682},{"a":false,"l":205,"u":869},{"a":false,"l":218,"u":510},{"a":false,"l":509,"u":574},{"a":false,"l":645,"u":938},{"a":false,"l":11,"u":389},{"a":true,"l":104,"u":499},{"a":false,"l":111,"u":850},{"a":false,"l":247,"u":937},{"a":false,"l":479,"u":625},{"a":false,"l":81,"u":710},{"a":false,"l":652,"u":974},{"a":true,"l":199,"u":389},{"a":true,"l":56,"u":975},{"a":true,"l":531,"u":938},{"a":true,"l":550,"u":999},{"a":true,"l":273,"u":471},{"a":true,"l":442,"u":504},{"a":false,"l":516,"u":838},{"a":true,"l":135,"u":686},{"a":true,"l":156,"u":957},{"a":false,"l":482,"u":523},{"a":false,"l":199,"u":331},{"a":false,"l":49,"u":364},{"a":false,"l":939,"u":988},{"a":false,"l":26,"u":375},{"a":true,"l":400,"u":689},{"a":true,"l":119,"u":519},{"a":true,"l":449,"u":512},{"a":true,"l":219,"u":341},{"a":false,"l":249,"u":750},{"a":true,"l":162,"u":955},{"a":true,"l":141,"u":660},{"a":true,"l":520,"u":617},{"a":false,"l":205,"u":943},{"a":false,"l":30,"u":351},{"a":true,"l":98,"u":274},{"a":false,"l":123,"u":507},{"a":false,"l":310,"u":740},{"a":true,"l":39,"u":564},{"a":false,"l":226,"u":577},{"a":true,"l":622,"u":935},{"a":true,"l":123,"u":127},{"a":true,"l":362,"u":569},{"a":false,"l":70,"u":922},{"a":false,"l":462,"u":778},{"a":true,"l":132,"u":509},{"a":true,"l":724,"u":955},{"a":true,"l":515,"u":820},{"a":true,"l":671,"u":814},{"a":false,"l":17,"u":818},{"a":true,"l":126,"u":279},{"a":false,"l":228,"u":469},{"a":false,"l":464,"u":503},{"a":true,"l":279,"u":688},{"a":true,"l":624,"u":834},{"a":true,"l":693,"u":849},{"a":false,"l":644,"u":836},{"a":false,"l":206,"u":524},{"a":false,"l":394,"u":719},{"a":true,"l":288,"u":693},{"a":false,"l":503,"u":604},{"a":true,"l":875,"u":922},{"a":true,"l":98,"u":812},{"a":false,"l":13,"u":571},{"a":true,"l":96,"u":829},{"a":true,"l":563,"u":766},{"a":true,"l":311,"u":718},{"a":true,"l":220,"u":901},{"a":true,"l":532,"u":976},{"a":false,"l":147,"u":235},{"a":false,"l":199,"u":654},{"a":true,"l":587,"u":900},{"a":true,"l":91,"u":786},{"a":true,"l":19,"u":757},{"a":true,"l":3,"u":100},{"a":false,"l":486,"u":645},{"a":false,"l":388,"u":826},{"a":true,"l":365,"u":473},{"a":true,"l":110,"u":663},{"a":false,"l":52,"u":935},{"a":false,"l":603,"u":701},{"a":true,"l":198,"u":889},{"a":true,"l":508,"u":679},{"a":false,"l":272,"u":320},{"a":true,"l":10,"u":427},{"a":false,"l":265,"u":908},{"a":false,"l":49,"u":942},{"a":false,"l":95,"u":169},{"a":false,"l":490,"u":892},{"a":false,"l":858,"u":879},{"a":true,"l":93,"u":661},{"a":true,"l":262,"u":520},{"a":true,"l":547,"u":777},{"a":true,"l":328,"u":406},{"a":true,"l":533,"u":986},{"a":false,"l":7,"u":170},{"a":false,"l":179,"u":460},{"a":false,"l":121,"u":292},{"a":false,"l":261,"u":644},{"a":false,"l":568,"u":699},{"a":false,"l":744,"u":905},{"a":true,"l":104,"u":277},{"a":true,"l":682,"u":946},{"a":true,"l":520,"u":602},{"a":false,"l":448,"u":888},{"a":true,"l":413,"u":525},{"a":true,"l":192,"u":415},{"a":true,"l":20,"u":506},{"a":false,"l":394,"u":471},{"a":false,"l":291,"u":348},{"a":true,"l":135,"u":263},{"a":true,"l":405,"u":891},{"a":true,"l":784,"u":989},{"a":false,"l":64,"u":352},{"a":true,"l":92,"u":318},{"a":true,"l":121,"u":152},{"a":false,"l":615,"u":717},{"a":false,"l":804,"u":828},{"a":false,"l":450,"u":548},{"a":true,"l":705,"u":925},{"a":true,"l":193,"u":544},{"a":false,"l":154,"u":237},{"a":false,"l":309,"u":728},{"a":false,"l":402,"u":467},{"a":false,"l":332,"u":729},{"a":true,"l":168,"u":618},{"a":false,"l":161,"u":352},{"a":true,"l":26,"u":552},{"a":false,"l":166,"u":550},{"a":false,"l":658,"u":886},{"a":true,"l":266,"u":787},{"a":true,"l":931,"u":997},{"a":true,"l":265,"u":590},{"a":true,"l":173,"u":658},{"a":false,"l":249,"u":605},{"a":true,"l":484,"u":741},{"a":false,"l":562,"u":897},{"a":true,"l":210,"u":425},{"a":true,"l":132,"u":981},{"a":false,"l":408,"u":887},{"a":true,"l":394,"u":715},{"a":true,"l":677,"u":681},{"a":true,"l":31,"u":994},{"a":true,"l":315,"u":812},{"a":true,"l":123,"u":161},{"a":true,"l":80,"u":443},{"a":true,"l":217,"u":840},{"a":false,"l":219,"u":366},{"a":true,"l":397,"u":804},{"a":true,"l":19,"u":980},{"a":true,"l":355,"u":455},{"a":false,"l":407,"u":886},{"a":false,"l":228,"u":329},{"a":true,"l":624,"u":953},{"a":false,"l":36,"u":175},{"a":true,"l":131,"u":508},{"a":false,"l":146,"u":871},{"a":true,"l":208,"u":431},{"a":true,"l":180,"u":426},{"a":false,"l":278,"u":327},{"a":true,"l":376,"u":889},{"a":false,"l":216,"u":236},{"a":false,"l":640,"u":909},{"a":false,"l":92,"u":412},{"a":false,"l":876,"u":899},{"a":true,"l":146,"u":504},{"a":true,"l":331,"u":947},{"a":false,"l":755,"u":828},{"a":true,"l":586,"u":775},{"a":false,"l":497,"u":906},{"a":false,"l":15,"u":114},{"a":false,"l":487,"u":806},{"a":true,"l":54,"u":134},{"a":false,"l":362,"u":875},{"a":true,"l":195,"u":309},{"a":true,"l":556,"u":731},{"a":false,"l":565,"u":856},{"a":false,"l":196,"u":419},{"a":false,"l":463,"u":511},{"a":true,"l":143,"u":996},{"a":false,"l":490,"u":917},{"a":false,"l":375,"u":394},{"a":true,"l":42,"u":275},{"a":false,"l":463,"u":500},{"a":false,"l":134,"u":399},{"a":true,"l":684,"u":891},{"a":false,"l":529,"u":870},{"a":false,"l":551,"u":643},{"a":false,"l":301,"u":930},{"a":true,"l":530,"u":887},{"a":true,"l":604,"u":955},{"a":false,"l":180,"u":572},{"a":false,"l":942,"u":958},{"a":true,"l":96,"u":875},{"a":false,"l":1,"u":667},{"a":true,"l":50,"u":382},{"a":false,"l":62,"u":233},{"a":true,"l":60,"u":547},{"a":true,"l":95,"u":120},{"a":true,"l":22,"u":406},{"a":true,"l":295,"u":392},{"a":true,"l":246,"u":251},{"a":true,"l":454,"u":810},{"a":false,"l":23,"u":497},{"a":true,"l":509,"u":982},{"a":false,"l":2,"u":889},{"a":false,"l":300,"u":545},{"a":true,"l":175,"u":968},{"a":true,"l":54,"u":466},{"a":true,"l":311,"u":588},{"a":false,"l":289,"u":629},{"a":false,"l":269,"u":696},{"a":true,"l":324,"u":423},{"a":false,"l":291,"u":528},{"a":false,"l":739,"u":784},{"a":true,"l":32,"u":58},{"a":false,"l":262,"u":427},{"a":true,"l":406,"u":679},{"a":true,"l":344,"u":510},{"a":true,"l":173,"u":387},{"a":true,"l":70,"u":334},{"a":true,"l":227,"u":523},{"a":true,"l":243,"u":341},{"a":false,"l":609,"u":720},{"a":false,"l":108,"u":838},{"a":true,"l":49,"u":771},{"a":false,"l":235,"u":366},{"a":true,"l":355,"u":876},{"a":false,"l":452,"u":720},{"a":true,"l":366,"u":738},{"a":false,"l":118,"u":968},{"a":false,"l":191,"u":849},{"a":false,"l":85,"u":188},{"a":false,"l":483,"u":712},{"a":true,"l":344,"u":475},{"a":false,"l":129,"u":207},{"a":true,"l":447,"u":781},{"a":true,"l":11,"u":362},{"a":false,"l":208,"u":997},{"a":true,"l":176,"u":399},{"a":false,"l":653,"u":848},{"a":true,"l":350,"u":372},{"a":false,"l":383,"u":555},{"a":true,"l":377,"u":670},{"a":true,"l":679,"u":981},{"a":true,"l":782,"u":808},{"a":true,"l":368,"u":848},{"a":false,"l":114,"u":163},{"a":false,"l":86,"u":587},{"a":false,"l":240,"u":613},{"a":false,"l":145,"u":543},{"a":true,"l":491,"u":527},{"a":true,"l":445,"u":790},{"a":false,"l":143,"u":933},{"a":false,"l":58,"u":500},{"a":true,"l":285,"u":631},{"a":false,"l":347,"u":708},{"a":false,"l":124,"u":761},{"a":false,"l":8,"u":901},{"a":false,"l":542,"u":766},{"a":true,"l":64,"u":248},{"a":true,"l":620,"u":832},{"a":true,"l":407,"u":975},{"a":true,"l":97,"u":235},{"a":false,"l":397,"u":836},{"a":false,"l":612,"u":884},{"a":false,"l":368,"u":723},{"a":false,"l":293,"u":716},{"a":true,"l":410,"u":828},{"a":true,"l":360,"u":955},{"a":false,"l":30,"u":939},{"a":false,"l":418,"u":971},{"a":false,"l":146,"u":680},{"a":true,"l":368,"u":929},{"a":true,"l":532,"u":855},{"a":true,"l":45,"u":603},{"a":true,"l":295,"u":330},{"a":true,"l":203,"u":357},{"a":true,"l":243,"u":930},{"a":true,"l":137,"u":423},{"a":false,"l":97,"u":600},{"a":false,"l":416,"u":525},{"a":false,"l":647,"u":775},{"a":false,"l":300,"u":395},{"a":false,"l":811,"u":935},{"a":false,"l":394,"u":845},{"a":true,"l":170,"u":748},{"a":true,"l":73,"u":693},{"a":true,"l":630,"u":804},{"a":true,"l":294,"u":574},{"a":true,"l":476,"u":504},{"a":false,"l":468,"u":864},{"a":false,"l":299,"u":518},{"a":true,"l":104,"u":322},{"a":false,"l":331,"u":870},{"a":false,"l":448,"u":713},{"a":true,"l":895,"u":926},{"a":false,"l":867,"u":932},{"a":true,"l":871,"u":950},{"a":true,"l":177,"u":545},{"a":false,"l":462,"u":533},{"a":true,"l":630,"u":653},{"a":true,"l":243,"u":955},{"a":false,"l":216,"u":268},{"a":false,"l":288,"u":521},{"a":false,"l":501,"u":913},{"a":true,"l":556,"u":944},{"a":true,"l":85,"u":966},{"a":false,"l":740,"u":882},{"a":true,"l":144,"u":722},{"a":false,"l":253,"u":888},{"a":true,"l":58,"u":504},{"a":true,"l":374,"u":836},{"a":false,"l":618,"u":843},{"a":true,"l":36,"u":958},{"a":false,"l":508,"u":527},{"a":true,"l":525,"u":604},{"a":true,"l":294,"u":783},{"a":false,"l":31,"u":727},{"a":false,"l":37,"u":294},{"a":true,"l":172,"u":253},{"a":true,"l":276,"u":721},{"a":true,"l":489,"u":788},{"a":true,"l":125,"u":359},{"a":true,"l":68,"u":337},{"a":true,"l":542,"u":558},{"a":false,"l":306,"u":719},{"a":true,"l":8,"u":364},{"a":true,"l":352,"u":683},{"a":true,"l":37,"u":389},{"a":false,"l":751,"u":871},{"a":false,"l":422,"u":640},{"a":false,"l":425,"u":597},{"a":false,"l":187,"u":623},{"a":false,"l":154,"u":335},{"a":false,"l":384,"u":736},{"a":true,"l":306,"u":637},{"a":true,"l":167,"u":311},{"a":false,"l":413,"u":571},{"a":false,"l":306,"u":446},{"a":true,"l":302,"u":328},{"a":false,"l":445,"u":516},{"a":false,"l":419,"u":728},{"a":false,"l":693,"u":726},{"a":false,"l":683,"u":793},{"a":false,"l":579,"u":819},{"a":false,"l":129,"u":436},{"a":true,"l":245,"u":608},{"a":true,"l":85,"u":288},{"a":true,"l":35,"u":586},{"a":true,"l":192,"u":861},{"a":false,"l":525,"u":783},{"a":true,"l":302,"u":487},{"a":true,"l":726,"u":952},{"a":false,"l":641,"u":695},{"a":false,"l":209,"u":755},{"a":false,"l":20,"u":380},{"a":true,"l":352,"u":981},{"a":false,"l":284,"u":531},{"a":true,"l":427,"u":539},{"a":false,"l":786,"u":837},{"a":false,"l":46,"u":751},{"a":true,"l":458,"u":780},{"a":false,"l":585,"u":599},{"a":true,"l":49,"u":248},{"a":false,"l":64,"u":794},{"a":false,"l":108,"u":128},{"a":false,"l":182,"u":957},{"a":false,"l":452,"u":453},{"a":true,"l":471,"u":921},{"a":false,"l":682,"u":832},{"a":true,"l":279,"u":791},{"a":true,"l":143,"u":561},{"a":false,"l":368,"u":905},{"a":false,"l":787,"u":922},{"a":false,"l":137,"u":963},{"a":false,"l":666,"u":918},{"a":true,"l":832,"u":979},{"a":false,"l":164,"u":216},{"a":true,"l":585,"u":888},{"a":true,"l":350,"u":459},{"a":false,"l":127,"u":821},{"a":false,"l":661,"u":918},{"a":false,"l":413,"u":622},{"a":true,"l":38,"u":588},{"a":true,"l":162,"u":246},{"a":true,"l":798,"u":994},{"a":false,"l":91,"u":844},{"a":false,"l":725,"u":743},{"a":false,"l":32,"u":968},{"a":true,"l":172,"u":675},{"a":false,"l":113,"u":243},{"a":true,"l":385,"u":961},{"a":false,"l":156,"u":489},{"a":true,"l":60,"u":488},{"a":true,"l":40,"u":931},{"a":false,"l":57,"u":478},{"a":false,"l":776,"u":870},{"a":false,"l":25,"u":687},{"a":true,"l":23,"u":888},{"a":true,"l":363,"u":418},{"a":true,"l":191,"u":655},{"a":false,"l":2,"u":272},{"a":true,"l":732,"u":925},{"a":true,"l":296,"u":772},{"a":true,"l":648,"u":697},{"a":true,"l":613,"u":963},{"a":true,"l":139,"u":534},{"a":true,"l":605,"u":836},{"a":true,"l":901,"u":952},{"a":false,"l":234,"u":657},{"a":true,"l":357,"u":943},{"a":false,"l":489,"u":983},{"a":true,"l":784,"u":830},{"a":false,"l":728,"u":738},{"a":false,"l":200,"u":210},{"a":false,"l":577,"u":880},{"a":false,"l":194,"u":351},{"a":true,"l":137,"u":164},{"a":true,"l":4,"u":406},{"a":true,"l":58,"u":472},{"a":true,"l":235,"u":595},{"a":true,"l":657,"u":679},{"a":true,"l":432,"u":983},{"a":false,"l":147,"u":503},{"a":true,"l":95,"u":186},{"a":false,"l":51,"u":846},{"a":true,"l":791,"u":839},{"a":false,"l":526,"u":670},{"a":false,"l":921,"u":961},{"a":true,"l":411,"u":679},{"a":false,"l":359,"u":400},{"a":true,"l":230,"u":265},{"a":false,"l":777,"u":896},{"a":true,"l":327,"u":937},{"a":true,"l":71,"u":596},{"a":true,"l":582,"u":758},{"a":false,"l":315,"u":421},{"a":true,"l":369,"u":407},{"a":false,"l":234,"u":926},{"a":false,"l":335,"u":626},{"a":false,"l":118,"u":263},{"a":false,"l":355,"u":812},{"a":false,"l":253,"u":768},{"a":true,"l":264,"u":910},{"a":true,"l":452,"u":510},{"a":true,"l":255,"u":564},{"a":false,"l":261,"u":908},{"a":true,"l":53,"u":982},{"a":false,"l":287,"u":412},{"a":true,"l":647,"u":781},{"a":false,"l":200,"u":916},{"a":true,"l":534,"u":962},{"a":false,"l":226,"u":905},{"a":false,"l":809,"u":918},{"a":false,"l":188,"u":571},{"a":false,"l":330,"u":696},{"a":false,"l":77,"u":380},{"a":false,"l":385,"u":965},{"a":true,"l":495,"u":975},{"a":true,"l":185,"u":550},{"a":true,"l":320,"u":860},{"a":false,"l":242,"u":517},{"a":false,"l":296,"u":930},{"a":false,"l":455,"u":512},{"a":true,"l":670,"u":917},{"a":true,"l":88,"u":102},{"a":false,"l":22,"u":351},{"a":false,"l":99,"u":545},{"a":false,"l":68,"u":743},{"a":true,"l":356,"u":527},{"a":true,"l":69,"u":146},{"a":false,"l":454,"u":618},{"a":false,"l":233,"u":294},{"a":false,"l":632,"u":999},{"a":true,"l":258,"u":807},{"a":true,"l":170,"u":400},{"a":false,"l":159,"u":538},{"a":false,"l":448,"u":672},{"a":false,"l":579,"u":683},{"a":false,"l":319,"u":479},{"a":true,"l":402,"u":893},{"a":true,"l":141,"u":395},{"a":true,"l":574,"u":944},{"a":true,"l":395,"u":997},{"a":true,"l":253,"u":478},{"a":false,"l":917,"u":973},{"a":true,"l":130,"u":753},{"a":true,"l":56,"u":523},{"a":false,"l":776,"u":907},{"a":true,"l":600,"u":957},{"a":true,"l":285,"u":461},{"a":true,"l":310,"u":609},{"a":false,"l":511,"u":865},{"a":false,"l":239,"u":874},{"a":true,"l":152,"u":659},{"a":false,"l":135,"u":681},{"a":false,"l":143,"u":660},{"a":false,"l":319,"u":507},{"a":false,"l":687,"u":877},{"a":true,"l":84,"u":253},{"a":false,"l":269,"u":517},{"a":false,"l":579,"u":708},{"a":false,"l":34,"u":355},{"a":true,"l":81,"u":655},{"a":false,"l":468,"u":510},{"a":false,"l":565,"u":818},{"a":true,"l":684,"u":686},{"a":false,"l":756,"u":831},{"a":true,"l":500,"u":664},{"a":false,"l":650,"u":783},{"a":false,"l":361,"u":438},{"a":true,"l":87,"u":541},{"a":false,"l":451,"u":691},{"a":false,"l":505,"u":703},{"a":false,"l":44,"u":764},{"a":true,"l":787,"u":792},{"a":false,"l":124,"u":330},{"a":true,"l":32,"u":399},{"a":false,"l":278,"u":670},{"a":false,"l":294,"u":640},{"a":false,"l":165,"u":245},{"a":true,"l":19,"u":241},{"a":false,"l":110,"u":569},{"a":false,"l":222,"u":300},{"a":false,"l":237,"u":332},{"a":false,"l":466,"u":955},{"a":false,"l":360,"u":482},{"a":true,"l":679,"u":946},{"a":true,"l":62,"u":935},{"a":false,"l":340,"u":350},{"a":false,"l":148,"u":275},{"a":true,"l":171,"u":232},{"a":true,"l":95,"u":563},{"a":false,"l":89,"u":875},{"a":false,"l":115,"u":590},{"a":true,"l":606,"u":790},{"a":true,"l":138,"u":665},{"a":true,"l":360,"u":463},{"a":true,"l":522,"u":935},{"a":false,"l":573,"u":612},{"a":false,"l":583,"u":790},{"a":true,"l":147,"u":545},{"a":true,"l":331,"u":574},{"a":true,"l":284,"u":493},{"a":true,"l":689,"u":769},{"a":true,"l":577,"u":945},{"a":true,"l":331,"u":490},{"a":false,"l":370,"u":678},{"a":false,"l":231,"u":540},{"a":false,"l":71,"u":565},{"a":false,"l":29,"u":204},{"a":false,"l":599,"u":652},{"a":false,"l":24,"u":359},{"a":true,"l":316,"u":726},{"a":true,"l":310,"u":550},{"a":true,"l":478,"u":612},{"a":true,"l":476,"u":761},{"a":true,"l":100,"u":478},{"a":false,"l":108,"u":272},{"a":false,"l":153,"u":278},{"a":true,"l":218,"u":694},{"a":false,"l":152,"u":603},{"a":true,"l":652,"u":718},{"a":false,"l":467,"u":706},{"a":false,"l":124,"u":328},{"a":true,"l":516,"u":720},{"a":false,"l":378,"u":552},{"a":false,"l":358,"u":450},{"a":false,"l":441,"u":481},{"a":false,"l":245,"u":438},{"a":false,"l":188,"u":244},{"a":false,"l":21,"u":896},{"a":false,"l":414,"u":453},{"a":true,"l":523,"u":629},{"a":true,"l":77,"u":299},{"a":false,"l":23,"u":784},{"a":true,"l":49,"u":952},{"a":true,"l":569,"u":728},{"a":false,"l":144,"u":966},{"a":false,"l":64,"u":241},{"a":false,"l":266,"u":455},{"a":true,"l":302,"u":496},{"a":false,"l":108,"u":502},{"a":false,"l":216,"u":285},{"a":true,"l":359,"u":987},{"a":false,"l":185,"u":638},{"a":true,"l":251,"u":387},{"a":true,"l":411,"u":907},{"a":false,"l":617,"u":951},{"a":false,"l":136,"u":699},{"a":false,"l":411,"u":541},{"a":true,"l":297,"u":916},{"a":false,"l":360,"u":651},{"a":false,"l":282,"u":932},{"a":true,"l":76,"u":880},{"a":false,"l":724,"u":995},{"a":true,"l":304,"u":359},{"a":false,"l":211,"u":750},{"a":false,"l":187,"u":507},{"a":true,"l":437,"u":561},{"a":true,"l":361,"u":740},{"a":true,"l":216,"u":346},{"a":true,"l":197,"u":794},{"a":false,"l":764,"u":911},{"a":false,"l":114,"u":859},{"a":false,"l":478,"u":826},{"a":true,"l":747,"u":873},{"a":false,"l":387,"u":939},{"a":true,"l":620,"u":701},{"a":false,"l":261,"u":574},{"a":false,"l":671,"u":967},{"a":false,"l":597,"u":699},{"a":false,"l":246,"u":778},{"a":true,"l":409,"u":765},{"a":true,"l":265,"u":967},{"a":true,"l":293,"u":326},{"a":true,"l":150,"u":282},{"a":true,"l":574,"u":914},{"a":false,"l":636,"u":969},{"a":true,"l":222,"u":427},{"a":true,"l":315,"u":611},{"a":true,"l":407,"u":939},{"a":false,"l":84,"u":318},{"a":false,"l":762,"u":870},{"a":true,"l":220,"u":914},{"a":true,"l":211,"u":519},{"a":false,"l":195,"u":358},{"a":false,"l":26,"u":303},{"a":true,"l":34,"u":405},{"a":true,"l":360,"u":763},{"a":true,"l":200,"u":646},{"a":false,"l":233,"u":912},{"a":true,"l":392,"u":711},{"a":true,"l":111,"u":469},{"a":true,"l":252,"u":636},{"a":false,"l":172,"u":982},{"a":true,"l":368,"u":591},{"a":false,"l":282,"u":496},{"a":true,"l":74,"u":542},{"a":true,"l":191,"u":711},{"a":true,"l":411,"u":456},{"a":true,"l":395,"u":888},{"a":true,"l":49,"u":472},{"a":true,"l":483,"u":612},{"a":true,"l":104,"u":205},{"a":true,"l":176,"u":754},{"a":false,"l":71,"u":434},{"a":true,"l":278,"u":834},{"a":true,"l":88,"u":488},{"a":true,"l":306,"u":470},{"a":false,"l":319,"u":877},{"a":false,"l":161,"u":667},{"a":true,"l":863,"u":879},{"a":true,"l":98,"u":377},{"a":false,"l":404,"u":407},{"a":false,"l":150,"u":874},{"a":false,"l":217,"u":561},{"a":false,"l":404,"u":804},{"a":true,"l":393,"u":492},{"a":true,"l":87,"u":723},{"a":false,"l":907,"u":941},{"a":false,"l":214,"u":785},{"a":false,"l":239,"u":481},{"a":false,"l":254,"u":668},{"a":false,"l":24,"u":151},{"a":false,"l":234,"u":498},{"a":false,"l":328,"u":711},{"a":true,"l":13,"u":164},{"a":false,"l":550,"u":914},{"a":false,"l":7,"u":459},{"a":false,"l":108,"u":363},{"a":true,"l":597,"u":667},{"a":true,"l":496,"u":990},{"a":false,"l":171,"u":917},{"a":false,"l":145,"u":627},{"a":true,"l":736,"u":923},{"a":false,"l":352,"u":764},{"a":false,"l":102,"u":929},{"a":false,"l":216,"u":743},{"a":false,"l":258,"u":399},{"a":false,"l":19,"u":685},{"a":false,"l":285,"u":921},{"a":false,"l":549,"u":717},{"a":true,"l":368,"u":521},{"a":false,"l":128,"u":273},{"a":true,"l":271,"u":507},{"a":false,"l":658,"u":800},{"a":true,"l":56,"u":549},{"a":true,"l":205,"u":549},{"a":false,"l":408,"u":979},{"a":false,"l":31,"u":238},{"a":true,"l":262,"u":588},{"a":false,"l":435,"u":693},{"a":false,"l":147,"u":781},{"a":true,"l":6,"u":319},{"a":false,"l":517,"u":988},{"a":true,"l":85,"u":420},{"a":true,"l":295,"u":729},{"a":false,"l":105,"u":538},{"a":true,"l":295,"u":521},{"a":false,"l":554,"u":881},{"a":true,"l":175,"u":283},{"a":false,"l":139,"u":581},{"a":true,"l":764,"u":920},{"a":true,"l":105,"u":219},{"a":true,"l":541,"u":716},{"a":true,"l":492,"u":920},{"a":false,"l":264,"u":653},{"a":true,"l":45,"u":706},{"a":true,"l":141,"u":798},{"a":true,"l":372,"u":862},{"a":true,"l":631,"u":865},{"a":false,"l":20,"u":891},{"a":true,"l":202,"u":544},{"a":false,"l":484,"u":933},{"a":true,"l":871,"u":985},{"a":true,"l":711,"u":964},{"a":false,"l":354,"u":846},{"a":true,"l":40,"u":582},{"a":false,"l":848,"u":920},{"a":true,"l":34,"u":505},{"a":true,"l":174,"u":791},{"a":false,"l":394,"u":898},{"a":false,"l":533,"u":716},{"a":true,"l":277,"u":441},{"a":false,"l":452,"u":545},{"a":true,"l":532,"u":540},{"a":true,"l":361,"u":634},{"a":true,"l":424,"u":737},{"a":false,"l":334,"u":672},{"a":true,"l":577,"u":791},{"a":true,"l":149,"u":194},{"a":true,"l":652,"u":981},{"a":false,"l":329,"u":634},{"a":false,"l":653,"u":949},{"a":true,"l":850,"u":979},{"a":true,"l":136,"u":330},{"a":false,"l":255,"u":455},{"a":true,"l":772,"u":907},{"a":false,"l":653,"u":779},{"a":false,"l":829,"u":938},{"a":false,"l":142,"u":463},{"a":false,"l":160,"u":320},{"a":true,"l":606,"u":926},{"a":false,"l":120,"u":368},{"a":true,"l":606,"u":769},{"a":false,"l":125,"u":937},{"a":false,"l":460,"u":608},{"a":false,"l":117,"u":346},{"a":true,"l":476,"u":841},{"a":false,"l":75,"u":681},{"a":false,"l":378,"u":871},{"a":true,"l":42,"u":275},{"a":true,"l":104,"u":928},{"a":false,"l":23,"u":979},{"a":true,"l":149,"u":255},{"a":true,"l":88,"u":727},{"a":false,"l":108,"u":886},{"a":true,"l":670,"u":760},{"a":false,"l":967,"u":999},{"a":true,"l":136,"u":925},{"a":true,"l":90,"u":138},{"a":true,"l":38,"u":172},{"a":true,"l":357,"u":896},{"a":true,"l":245,"u":272},{"a":false,"l":250,"u":494},{"a":true,"l":763,"u":809},{"a":true,"l":178,"u":938},{"a":false,"l":32,"u":79},{"a":false,"l":771,"u":935},{"a":true,"l":401,"u":867},{"a":false,"l":70,"u":672},{"a":false,"l":506,"u":513},{"a":true,"l":179,"u":542},{"a":false,"l":695,"u":935},{"a":true,"l":372,"u":687},{"a":false,"l":371,"u":603},{"a":false,"l":320,"u":916},{"a":true,"l":267,"u":528},{"a":false,"l":44,"u":789},{"a":true,"l":602,"u":606},{"a":true,"l":486,"u":569},{"a":false,"l":182,"u":822},{"a":true,"l":669,"u":782},{"a":false,"l":168,"u":236},{"a":true,"l":714,"u":975},{"a":false,"l":608,"u":893},{"a":false,"l":838,"u":906},{"a":false,"l":663,"u":751},{"a":true,"l":104,"u":376},{"a":true,"l":913,"u":919},{"a":true,"l":581,"u":738},{"a":false,"l":109,"u":231},{"a":true,"l":231,"u":878},{"a":false,"l":127,"u":781},{"a":true,"l":493,"u":584},{"a":false,"l":741,"u":922},{"a":false,"l":25,"u":688},{"a":false,"l":321,"u":570},{"a":false,"l":259,"u":654},{"a":true,"l":151,"u":247},{"a":true,"l":72,"u":372},{"a":false,"l":355,"u":805},{"a":false,"l":502,"u":558},{"a":true,"l":231,"u":632},{"a":false,"l":172,"u":173},{"a":false,"l":503,"u":989},{"a":true,"l":300,"u":771},{"a":true,"l":169,"u":955},{"a":true,"l":292,"u":515},{"a":false,"l":340,"u":489},{"a":false,"l":695,"u":919},{"a":true,"l":198,"u":246},{"a":false,"l":187,"u":658},{"a":true,"l":189,"u":784},{"a":false,"l":272,"u":996},{"a":true,"l":208,"u":478},{"a":false,"l":256,"u":728},{"a":false,"l":720,"u":970},{"a":false,"l":152,"u":156},{"a":false,"l":202,"u":766},{"a":false,"l":455,"u":623},{"a":false,"l":489,"u":793},{"a":true,"l":54,"u":494},{"a":false,"l":141,"u":345},{"a":false,"l":70,"u":572},{"a":false,"l":683,"u":757},{"a":false,"l":500,"u":531},{"a":false,"l":169,"u":907},{"a":true,"l":83,"u":580},{"a":true,"l":774,"u":948},{"a":true,"l":489,"u":904},{"a":true,"l":353,"u":515},{"a":false,"l":101,"u":948},{"a":true,"l":562,"u":568},{"a":true,"l":24,"u":926},{"a":true,"l":388,"u":817},{"a":true,"l":17,"u":900},{"a":true,"l":42,"u":436},{"a":true,"l":360,"u":473},{"a":true,"l":44,"u":181},{"a":true,"l":435,"u":724},{"a":false,"l":69,"u":227},{"a":false,"l":828,"u":951},{"a":false,"l":668,"u":825},{"a":false,"l":111,"u":435},{"a":true,"l":267,"u":785},{"a":true,"l":326,"u":741},{"a":false,"l":192,"u":379},{"a":false,"l":173,"u":510},{"a":false,"l":674,"u":958},{"a":true,"l":550,"u":901},{"a":true,"l":820,"u":856},{"a":true,"l":434,"u":949},{"a":false,"l":830,"u":933},{"a":true,"l":529,"u":568},{"a":true,"l":620,"u":822},{"a":false,"l":520,"u":744},{"a":false,"l":254,"u":316},{"a":true,"l":196,"u":422},{"a":false,"l":287,"u":795},{"a":true,"l":628,"u":805},{"a":false,"l":100,"u":180},{"a":true,"l":282,"u":636},{"a":false,"l":950,"u":973},{"a":true,"l":89,"u":586},{"a":false,"l":233,"u":950},{"a":true,"l":307,"u":588},{"a":false,"l":463,"u":992},{"a":false,"l":806,"u":928},{"a":true,"l":374,"u":515},{"a":true,"l":410,"u":500},{"a":true,"l":400,"u":831},{"a":true,"l":442,"u":873},{"a":true,"l":363,"u":650},{"a":false,"l":446,"u":713},{"a":true,"l":210,"u":411},{"a":false,"l":143,"u":176},{"a":true,"l":293,"u":312},{"a":false,"l":182,"u":773},{"a":true,"l":385,"u":511},{"a":true,"l":185,"u":726},{"a":true,"l":618,"u":677},{"a":false,"l":172,"u":552},{"a":true,"l":83,"u":299},{"a":false,"l":211,"u":391},{"a":true,"l":567,"u":718},{"a":true,"l":411,"u":761},{"a":false,"l":43,"u":730},{"a":true,"l":268,"u":737},{"a":false,"l":209,"u":379},{"a":false,"l":394,"u":472},{"a":false,"l":404,"u":601},{"a":false,"l":556,"u":821},{"a":false,"l":196,"u":217},{"a":false,"l":631,"u":973},{"a":false,"l":99,"u":976},{"a":false,"l":155,"u":283},{"a":true,"l":262,"u":980},{"a":false,"l":135,"u":832},{"a":false,"l":347,"u":965},{"a":false,"l":162,"u":468},{"a":true,"l":112,"u":823},{"a":false,"l":170,"u":292},{"a":false,"l":717,"u":894},{"a":false,"l":299,"u":737},{"a":false,"l":208,"u":809},{"a":true,"l":106,"u":250},{"a":false,"l":114,"u":155},{"a":false,"l":109,"u":726},{"a":true,"l":164,"u":765},{"a":false,"l":207,"u":722},{"a":true,"l":556,"u":938},{"a":false,"l":200,"u":825},{"a":true,"l":322,"u":743},{"a":true,"l":202,"u":429},{"a":false,"l":528,"u":532},{"a":false,"l":578,"u":883},{"a":true,"l":232,"u":600},{"a":true,"l":410,"u":833},{"a":true,"l":136,"u":505},{"a":false,"l":466,"u":991},{"a":false,"l":428,"u":611},{"a":true,"l":36,"u":300},{"a":false,"l":160,"u":451},{"a":true,"l":203,"u":901},{"a":true,"l":321,"u":361},{"a":true,"l":156,"u":200},{"a":false,"l":100,"u":675},{"a":true,"l":365,"u":891},{"a":true,"l":620,"u":928},{"a":true,"l":162,"u":195},{"a":false,"l":269,"u":746},{"a":false,"l":38,"u":734},{"a":false,"l":81,"u":441},{"a":false,"l":124,"u":629},{"a":true,"l":421,"u":941},{"a":false,"l":305,"u":602},{"a":false,"l":547,"u":715},{"a":false,"l":513,"u":775},{"a":true,"l":11,"u":263},{"a":true,"l":840,"u":956},{"a":true,"l":414,"u":496},{"a":true,"l":55,"u":233},{"a":false,"l":317,"u":709},{"a":true,"l":960,"u":970},{"a":false,"l":409,"u":632},{"a":true,"l":281,"u":429},{"a":false,"l":669,"u":839},{"a":false,"l":99,"u":413},{"a":false,"l":334,"u":981},{"a":true,"l":190,"u":264},{"a":false,"l":817,"u":910},{"a":false,"l":509,"u":607},{"a":true,"l":474,"u":574},{"a":false,"l":262,"u":553},{"a":true,"l":14,"u":584},{"a":true,"l":199,"u":349},{"a":false,"l":282,"u":410},{"a":false,"l":423,"u":744},{"a":true,"l":533,"u":992},{"a":false,"l":167,"u":955},{"a":false,"l":346,"u":551},{"a":true,"l":7,"u":184},{"a":true,"l":317,"u":873},{"a":false,"l":732,"u":772},{"a":false,"l":93,"u":217},{"a":true,"l":369,"u":837},{"a":true,"l":242,"u":696},{"a":true,"l":210,"u":860},{"a":true,"l":155,"u":655},{"a":true,"l":14,"u":469},{"a":false,"l":658,"u":974},{"a":true,"l":640,"u":990},{"a":false,"l":346,"u":374},{"a":false,"l":358,"u":833},{"a":true,"l":257,"u":715},{"a":true,"l":462,"u":701},{"a":true,"l":707,"u":909},{"a":true,"l":601,"u":931},{"a":true,"l":214,"u":630},{"a":false,"l":109,"u":680},{"a":false,"l":288,"u":616},{"a":true,"l":487,"u":840},{"a":true,"l":80,"u":449},{"a":true,"l":71,"u":419},{"a":true,"l":620,"u":732},{"a":false,"l":81,"u":170},{"a":true,"l":629,"u":838},{"a":false,"l":278,"u":500},{"a":false,"l":178,"u":340},{"a":false,"l":99,"u":764},{"a":true,"l":102,"u":464},{"a":false,"l":200,"u":580},{"a":false,"l":39,"u":748},{"a":true,"l":481,"u":867},{"a":false,"l":355,"u":990},{"a":true,"l":60,"u":228},{"a":true,"l":221,"u":463},{"a":false,"l":74,"u":391},{"a":true,"l":116,"u":818},{"a":false,"l":97,"u":520},{"a":false,"l":778,"u":998},{"a":true,"l":388,"u":883},{"a":true,"l":25,"u":375},{"a":true,"l":264,"u":318},{"a":false,"l":194,"u":935},{"a":false,"l":123,"u":229},{"a":false,"l":534,"u":641},{"a":false,"l":350,"u":615},{"a":true,"l":218,"u":518},{"a":true,"l":154,"u":173},{"a":false,"l":177,"u":821},{"a":true,"l":496,"u":801},{"a":false,"l":29,"u":587},{"a":true,"l":34,"u":48},{"a":false,"l":140,"u":880},{"a":true,"l":218,"u":438},{"a":false,"l":383,"u":611},{"a":false,"l":93,"u":219},{"a":false,"l":370,"u":466},{"a":true,"l":541,"u":700},{"a":false,"l":97,"u":785},{"a":false,"l":68,"u":971},{"a":false,"l":238,"u":252},{"a":false,"l":808,"u":816},{"a":true,"l":651,"u":826},{"a":false,"l":609,"u":992},{"a":false,"l":119,"u":918},{"a":false,"l":230,"u":437},{"a":true,"l":210,"u":472},{"a":true,"l":823,"u":824},{"a":true,"l":114,"u":851},{"a":true,"l":111,"u":534},{"a":false,"l":100,"u":509},{"a":true,"l":178,"u":351},{"a":true,"l":133,"u":835},{"a":true,"l":78,"u":304},{"a":false,"l":491,"u":999},{"a":true,"l":8,"u":148},{"a":true,"l":9,"u":511},{"a":false,"l":822,"u":832},{"a":true,"l":19,"u":301},{"a":false,"l":37,"u":176},{"a":false,"l":111,"u":154},{"a":true,"l":76,"u":368},{"a":true,"l":405,"u":987},{"a":true,"l":782,"u":894},{"a":true,"l":25,"u":222},{"a":false,"l":361,"u":995},{"a":false,"l":376,"u":536},{"a":true,"l":289,"u":605},{"a":false,"l":148,"u":661},{"a":true,"l":266,"u":834},{"a":false,"l":214,"u":960},{"a":true,"l":250,"u":856},{"a":true,"l":203,"u":425},{"a":false,"l":654,"u":799},{"a":true,"l":525,"u":661},{"a":false,"l":740,"u":932},{"a":true,"l":512,"u":711},{"a":false,"l":206,"u":363},{"a":false,"l":318,"u":355},{"a":true,"l":595,"u":694},{"a":true,"l":459,"u":968},{"a":false,"l":358,"u":521},{"a":false,"l":480,"u":589},{"a":false,"l":101,"u":274},{"a":true,"l":420,"u":919},{"a":true,"l":113,"u":463},{"a":true,"l":83,"u":879},{"a":false,"l":330,"u":531},{"a":false,"l":16,"u":237},{"a":false,"l":580,"u":629},{"a":false,"l":21,"u":681},{"a":true,"l":46,"u":252},{"a":false,"l":77,"u":222},{"a":false,"l":510,"u":538},{"a":false,"l":410,"u":812},{"a":true,"l":539,"u":613},{"a":false,"l":72,"u":752},{"a":true,"l":217,"u":516},{"a":false,"l":769,"u":791},{"a":false,"l":796,"u":864},{"a":false,"l":748,"u":841},{"a":false,"l":262,"u":485},{"a":false,"l":397,"u":477},{"a":true,"l":118,"u":221},{"a":true,"l":919,"u":966},{"a":false,"l":113,"u":526},{"a":false,"l":47,"u":318},{"a":false,"l":411,"u":872},{"a":false,"l":132,"u":306},{"a":false,"l":33,"u":932},{"a":true,"l":152,"u":393},{"a":true,"l":3,"u":323},{"a":true,"l":635,"u":796},{"a":true,"l":314,"u":874},{"a":true,"l":235,"u":400},{"a":false,"l":192,"u":800},{"a":false,"l":221,"u":439},{"a":false,"l":410,"u":962},{"a":true,"l":386,"u":722},{"a":false,"l":4,"u":507},{"a":true,"l":664,"u":739},{"a":false,"l":500,"u":518},{"a":true,"l":587,"u":732},{"a":false,"l":269,"u":526},{"a":false,"l":141,"u":431},{"a":false,"l":17,"u":517},{"a":true,"l":282,"u":764},{"a":true,"l":328,"u":452},{"a":false,"l":203,"u":977},{"a":false,"l":82,"u":962},{"a":false,"l":259,"u":922},{"a":true,"l":252,"u":915},{"a":true,"l":766,"u":879},{"a":false,"l":215,"u":790},{"a":true,"l":127,"u":776},{"a":false,"l":103,"u":456},{"a":false,"l":197,"u":998},{"a":false,"l":186,"u":283},{"a":false,"l":337,"u":919},{"a":true,"l":352,"u":892},{"a":true,"l":466,"u":671},{"a":false,"l":102,"u":666},{"a":true,"l":558,"u":928},{"a":false,"l":183,"u":643},{"a":false,"l":430,"u":908},{"a":true,"l":196,"u":956},{"a":false,"l":449,"u":591},{"a":false,"l":386,"u":679},{"a":true,"l":766,"u":873},{"a":false,"l":811,"u":860},{"a":true,"l":107,"u":333},{"a":true,"l":559,"u":765},{"a":true,"l":844,"u":989},{"a":true,"l":2,"u":495},{"a":true,"l":721,"u":918},{"a":false,"l":395,"u":836},{"a":false,"l":114,"u":516},{"a":true,"l":497,"u":535},{"a":true,"l":35,"u":759},{"a":false,"l":250,"u":441},{"a":true,"l":385,"u":885},{"a":false,"l":632,"u":827},{"a":false,"l":505,"u":837},{"a":true,"l":646,"u":994},{"a":true,"l":374,"u":562},{"a":false,"l":632,"u":992},{"a":true,"l":13,"u":553},{"a":true,"l":293,"u":343},{"a":false,"l":9,"u":480},{"a":true,"l":152,"u":511},{"a":false,"l":376,"u":925},{"a":false,"l":233,"u":525},{"a":false,"l":309,"u":560},{"a":true,"l":60,"u":574},{"a":false,"l":494,"u":599},{"a":false,"l":724,"u":835},{"a":true,"l":514,"u":528},{"a":true,"l":79,"u":161},{"a":true,"l":45,"u":219},{"a":true,"l":290,"u":453},{"a":true,"l":195,"u":443},{"a":true,"l":228,"u":875},{"a":true,"l":312,"u":688},{"a":true,"l":759,"u":925},{"a":false,"l":659,"u":747},{"a":false,"l":777,"u":890},{"a":true,"l":490,"u":545},{"a":true,"l":571,"u":819},{"a":false,"l":281,"u":903},{"a":false,"l":86,"u":320},{"a":false,"l":462,"u":931},{"a":false,"l":166,"u":827},{"a":false,"l":649,"u":773},{"a":false,"l":424,"u":703},{"a":false,"l":310,"u":515},{"a":true,"l":162,"u":542},{"a":true,"l":489,"u":781},{"a":false,"l":223,"u":837},{"a":false,"l":123,"u":911},{"a":false,"l":328,"u":656},{"a":false,"l":429,"u":460},{"a":false,"l":559,"u":563},{"a":false,"l":176,"u":413},{"a":true,"l":226,"u":881},{"a":true,"l":418,"u":843},{"a":true,"l":208,"u":301},{"a":false,"l":876,"u":877},{"a":true,"l":931,"u":952},{"a":false,"l":139,"u":155},{"a":true,"l":81,"u":784},{"a":false,"l":333,"u":458},{"a":false,"l":454,"u":904},{"a":false,"l":547,"u":842},{"a":true,"l":342,"u":367},{"a":true,"l":387,"u":734},{"a":false,"l":42,"u":146},{"a":true,"l":142,"u":549},{"a":true,"l":495,"u":565},{"a":false,"l":422,"u":476},{"a":true,"l":331,"u":412},{"a":true,"l":691,"u":933},{"a":true,"l":493,"u":593},{"a":true,"l":484,"u":641},{"a":false,"l":52,"u":383},{"a":false,"l":26,"u":953},{"a":true,"l":390,"u":891},{"a":false,"l":872,"u":999},{"a":true,"l":221,"u":391},{"a":true,"l":391,"u":753},{"a":true,"l":183,"u":485},{"a":true,"l":246,"u":248},{"a":false,"l":284,"u":561},{"a":true,"l":100,"u":922},{"a":true,"l":359,"u":746},{"a":true,"l":36,"u":340},{"a":true,"l":289,"u":964},{"a":true,"l":218,"u":404},{"a":false,"l":526,"u":624},{"a":true,"l":438,"u":699},{"a":false,"l":287,"u":665},{"a":false,"l":596,"u":761},{"a":false,"l":629,"u":888},{"a":false,"l":132,"u":138},{"a":true,"l":8,"u":255},{"a":true,"l":481,"u":732},{"a":false,"l":515,"u":695},{"a":true,"l":348,"u":627},{"a":true,"l":244,"u":832},{"a":false,"l":868,"u":986},{"a":true,"l":31,"u":157},{"a":false,"l":206,"u":320},{"a":false,"l":15,"u":101},{"a":false,"l":446,"u":880},{"a":true,"l":804,"u":887},{"a":false,"l":565,"u":996},{"a":false,"l":145,"u":533},{"a":false,"l":293,"u":430},{"a":true,"l":712,"u":960},{"a":true,"l":56,"u":222},{"a":true,"l":14,"u":378},{"a":true,"l":599,"u":776},{"a":false,"l":2,"u":953},{"a":false,"l":111,"u":324},{"a":false,"l":556,"u":971},{"a":true,"l":194,"u":347},{"a":true,"l":469,"u":916},{"a":true,"l":596,"u":694},{"a":true,"l":422,"u":860},{"a":false,"l":99,"u":316},{"a":true,"l":146,"u":212},{"a":false,"l":696,"u":896},{"a":true,"l":658,"u":931},{"a":false,"l":163,"u":937},{"a":false,"l":49,"u":313},{"a":false,"l":554,"u":912},{"a":false,"l":130,"u":380},{"a":false,"l":185,"u":490},{"a":true,"l":242,"u":560},{"a":true,"l":406,"u":914},{"a":true,"l":417,"u":643},{"a":false,"l":483,"u":863},{"a":false,"l":780,"u":944},{"a":false,"l":192,"u":781},{"a":false,"l":115,"u":658},{"a":false,"l":465,"u":716},{"a":false,"l":443,"u":606},{"a":false,"l":117,"u":251},{"a":true,"l":215,"u":671},{"a":true,"l":306,"u":909},{"a":false,"l":439,"u":925},{"a":false,"l":595,"u":760},{"a":true,"l":509,"u":976},{"a":false,"l":101,"u":657},{"a":true,"l":85,"u":125},{"a":true,"l":137,"u":883},{"a":true,"l":139,"u":317},{"a":true,"l":584,"u":737},{"a":true,"l":219,"u":254},{"a":false,"l":71,"u":429},{"a":false,"l":173,"u":266},{"a":false,"l":34,"u":667},{"a":false,"l":724,"u":885},{"a":true,"l":623,"u":936},{"a":true,"l":509,"u":564},{"a":false,"l":60,"u":928},{"a":true,"l":221,"u":378},{"a":false,"l":576,"u":654},{"a":true,"l":159,"u":516},{"a":true,"l":574,"u":825},{"a":true,"l":276,"u":543},{"a":false,"l":261,"u":725},{"a":false,"l":283,"u":868},{"a":false,"l":292,"u":550},{"a":false,"l":763,"u":827},{"a":false,"l":559,"u":874},{"a":false,"l":770,"u":924},{"a":false,"l":60,"u":536},{"a":true,"l":469,"u":814},{"a":true,"l":334,"u":845},{"a":false,"l":236,"u":296},{"a":false,"l":347,"u":618},{"a":false,"l":44,"u":99},{"a":true,"l":207,"u":286},{"a":true,"l":657,"u":990},{"a":false,"l":312,"u":367},{"a":true,"l":47,"u":833},{"a":false,"l":633,"u":910},{"a":true,"l":108,"u":258},{"a":false,"l":290,"u":883},{"a":false,"l":222,"u":540},{"a":false,"l":108,"u":814},{"a":false,"l":120,"u":257},{"a":false,"l":607,"u":851},{"a":true,"l":331,"u":728},{"a":false,"l":7,"u":846},{"a":true,"l":439,"u":735},{"a":false,"l":252,"u":264},{"a":false,"l":39,"u":226},{"a":true,"l":48,"u":276},{"a":true,"l":672,"u":775},{"a":true,"l":106,"u":349},{"a":false,"l":632,"u":933},{"a":true,"l":214,"u":650},{"a":true,"l":385,"u":537},{"a":true,"l":361,"u":459},{"a":true,"l":215,"u":835},{"a":false,"l":212,"u":490},{"a":false,"l":680,"u":751},{"a":false,"l":328,"u":883},{"a":false,"l":702,"u":969},{"a":false,"l":194,"u":952},{"a":false,"l":334,"u":437},{"a":false,"l":141,"u":706},{"a":false,"l":191,"u":857},{"a":true,"l":432,"u":762},{"a":true,"l":125,"u":881},{"a":true,"l":703,"u":903},{"a":true,"l":63,"u":818},{"a":false,"l":458,"u":604},{"a":true,"l":192,"u":802},{"a":false,"l":105,"u":695},{"a":false,"l":258,"u":311},{"a":true,"l":274,"u":869},{"a":false,"l":552,"u":560},{"a":false,"l":1,"u":20},{"a":true,"l":356,"u":457},{"a":true,"l":530,"u":748},{"a":true,"l":211,"u":933},{"a":false,"l":103,"u":563},{"a":false,"l":495,"u":521},{"a":true,"l":587,"u":820},{"a":true,"l":63,"u":123},{"a":false,"l":339,"u":678},{"a":true,"l":268,"u":986},{"a":true,"l":485,"u":950},{"a":false,"l":841,"u":978},{"a":true,"l":509,"u":610},{"a":false,"l":259,"u":996},{"a":true,"l":445,"u":730},{"a":false,"l":31,"u":744},{"a":true,"l":270,"u":539},{"a":true,"l":218,"u":264},{"a":false,"l":551,"u":728},{"a":false,"l":344,"u":516},{"a":false,"l":599,"u":691},{"a":true,"l":725,"u":811},{"a":false,"l":156,"u":498},{"a":false,"l":37,"u":323},{"a":false,"l":530,"u":692},{"a":true,"l":168,"u":263},{"a":false,"l":187,"u":321},{"a":false,"l":23,"u":81},{"a":true,"l":186,"u":237},{"a":true,"l":154,"u":195},{"a":true,"l":190,"u":531},{"a":true,"l":387,"u":736},{"a":false,"l":396,"u":559},{"a":true,"l":489,"u":863},{"a":true,"l":474,"u":903},{"a":true,"l":406,"u":919},{"a":true,"l":70,"u":356},{"a":false,"l":197,"u":908},{"a":true,"l":482,"u":942},{"a":true,"l":918,"u":972},{"a":false,"l":55,"u":736},{"a":false,"l":640,"u":816},{"a":true,"l":238,"u":418},{"a":false,"l":366,"u":548},{"a":true,"l":227,"u":979},{"a":false,"l":40,"u":465},{"a":false,"l":639,"u":700},{"a":false,"l":188,"u":378},{"a":true,"l":670,"u":892},{"a":false,"l":425,"u":753},{"a":false,"l":433,"u":926},{"a":true,"l":139,"u":737},{"a":true,"l":159,"u":619},{"a":true,"l":52,"u":150},{"a":true,"l":309,"u":661},{"a":false,"l":85,"u":165},{"a":false,"l":172,"u":947},{"a":true,"l":276,"u":722},{"a":true,"l":408,"u":915},{"a":false,"l":322,"u":578},{"a":true,"l":692,"u":728},{"a":true,"l":270,"u":998},{"a":true,"l":299,"u":872},{"a":false,"l":537,"u":959},{"a":true,"l":18,"u":731},{"a":false,"l":481,"u":774},{"a":true,"l":118,"u":586},{"a":true,"l":76,"u":417},{"a":true,"l":331,"u":488},{"a":false,"l":503,"u":964},{"a":false,"l":101,"u":913},{"a":true,"l":12,"u":616},{"a":false,"l":496,"u":682},{"a":false,"l":658,"u":741},{"a":true,"l":657,"u":726},{"a":false,"l":393,"u":406},{"a":false,"l":256,"u":635},{"a":false,"l":169,"u":474},{"a":false,"l":200,"u":891},{"a":true,"l":213,"u":256},{"a":false,"l":738,"u":893},{"a":false,"l":365,"u":564},{"a":false,"l":167,"u":609},{"a":false,"l":518,"u":987},{"a":true,"l":647,"u":720},{"a":true,"l":536,"u":790},{"a":false,"l":268,"u":366},{"a":false,"l":434,"u":631},{"a":false,"l":259,"u":818},{"a":true,"l":307,"u":394},{"a":false,"l":352,"u":489},{"a":false,"l":369,"u":676},{"a":false,"l":459,"u":808},{"a":false,"l":871,"u":940},{"a":true,"l":363,"u":616},{"a":true,"l":438,"u":514},{"a":false,"l":178,"u":458},{"a":true,"l":100,"u":642},{"a":false,"l":15,"u":798},{"a":false,"l":112,"u":398},{"a":false,"l":182,"u":841},{"a":true,"l":258,"u":829},{"a":true,"l":16,"u":670},{"a":false,"l":368,"u":774},{"a":false,"l":682,"u":845},{"a":true,"l":116,"u":324},{"a":true,"l":132,"u":527},{"a":true,"l":809,"u":819},{"a":false,"l":253,"u":727},{"a":true,"l":477,"u":759},{"a":true,"l":206,"u":629},{"a":true,"l":576,"u":788},{"a":false,"l":4,"u":262},{"a":false,"l":84,"u":273},{"a":true,"l":510,"u":764},{"a":false,"l":148,"u":396},{"a":false,"l":368,"u":959},{"a":false,"l":408,"u":925},{"a":true,"l":156,"u":662},{"a":true,"l":612,"u":948},{"a":true,"l":129,"u":526},{"a":false,"l":613,"u":875},{"a":true,"l":144,"u":272},{"a":false,"l":500,"u":607},{"a":false,"l":535,"u":817},{"a":false,"l":433,"u":925},{"a":true,"l":13,"u":471},{"a":false,"l":388,"u":955},{"a":true,"l":411,"u":912},{"a":false,"l":348,"u":696},{"a":false,"l":284,"u":733},{"a":true,"l":697,"u":954},{"a":false,"l":106,"u":646},{"a":false,"l":219,"u":597},{"a":false,"l":113,"u":398},{"a":true,"l":114,"u":658},{"a":true,"l":166,"u":834},{"a":true,"l":37,"u":843},{"a":true,"l":359,"u":531},{"a":true,"l":288,"u":435},{"a":true,"l":413,"u":961},{"a":false,"l":730,"u":978},{"a":false,"l":434,"u":624},{"a":true,"l":946,"u":966},{"a":false,"l":840,"u":846},{"a":true,"l":902,"u":959},{"a":true,"l":765,"u":768},{"a":true,"l":257,"u":562},{"a":false,"l":534,"u":588},{"a":true,"l":354,"u":663},{"a":true,"l":81,"u":659},{"a":true,"l":81,"u":676},{"a":false,"l":466,"u":847},{"a":true,"l":418,"u":422},{"a":true,"l":605,"u":882},{"a":true,"l":74,"u":233},{"a":false,"l":221,"u":725},{"a":false,"l":527,"u":569},{"a":true,"l":262,"u":951},{"a":false,"l":760,"u":861},{"a":false,"l":15,"u":123},{"a":false,"l":178,"u":782},{"a":false,"l":367,"u":712},{"a":true,"l":319,"u":635},{"a":true,"l":539,"u":957},{"a":true,"l":916,"u":982},{"a":false,"l":463,"u":879},{"a":true,"l":88,"u":296},{"a":false,"l":812,"u":826},{"a":true,"l":79,"u":136},{"a":false,"l":502,"u":985},{"a":false,"l":518,"u":558},{"a":true,"l":368,"u":960},{"a":false,"l":113,"u":489},{"a":false,"l":462,"u":874},{"a":true,"l":43,"u":434},{"a":false,"l":277,"u":678},{"a":true,"l":377,"u":622},{"a":true,"l":367,"u":833},{"a":true,"l":80,"u":745},{"a":true,"l":373,"u":939},{"a":false,"l":237,"u":281},{"a":true,"l":695,"u":907},{"a":false,"l":374,"u":696},{"a":false,"l":278,"u":668},{"a":true,"l":294,"u":906},{"a":true,"l":46,"u":631},{"a":false,"l":694,"u":837},{"a":false,"l":236,"u":999},{"a":true,"l":69,"u":999},{"a":true,"l":117,"u":140},{"a":true,"l":149,"u":699},{"a":true,"l":129,"u":931},{"a":false,"l":95,"u":159},{"a":true,"l":203,"u":319},{"a":true,"l":690,"u":904},{"a":false,"l":9,"u":442},{"a":false,"l":801,"u":835},{"a":false,"l":412,"u":585},{"a":false,"l":434,"u":998},{"a":false,"l":789,"u":903},{"a":true,"l":604,"u":859},{"a":false,"l":599,"u":631},{"a":false,"l":179,"u":871},{"a":true,"l":526,"u":581},{"a":false,"l":86,"u":198},{"a":true,"l":193,"u":821},{"a":true,"l":877,"u":971},{"a":false,"l":565,"u":909},{"a":false,"l":410,"u":689},{"a":false,"l":494,"u":929},{"a":false,"l":34,"u":959},{"a":false,"l":63,"u":141},{"a":false,"l":74,"u":454},{"a":false,"l":347,"u":360},{"a":false,"l":203,"u":784},{"a":false,"l":562,"u":732},{"a":false,"l":728,"u":976},{"a":true,"l":117,"u":588},{"a":true,"l":3,"u":423},{"a":false,"l":149,"u":519},{"a":false,"l":779,"u":800},{"a":true,"l":143,"u":643},{"a":false,"l":144,"u":313},{"a":false,"l":2,"u":779},{"a":true,"l":214,"u":721},{"a":false,"l":17,"u":614},{"a":false,"l":551,"u":612},{"a":false,"l":541,"u":844},{"a":true,"l":680,"u":738},{"a":false,"l":457,"u":684},{"a":false,"l":29,"u":656},{"a":false,"l":839,"u":933},{"a":false,"l":268,"u":993},{"a":false,"l":383,"u":487},{"a":false,"l":225,"u":425},{"a":false,"l":21,"u":452},{"a":false,"l":673,"u":891},{"a":true,"l":432,"u":993},{"a":true,"l":87,"u":205},{"a":false,"l":102,"u":826},{"a":true,"l":9,"u":603},{"a":true,"l":358,"u":387},{"a":false,"l":411,"u":616},{"a":false,"l":557,"u":700},{"a":false,"l":198,"u":383},{"a":true,"l":713,"u":855},{"a":true,"l":496,"u":913},{"a":false,"l":351,"u":945},{"a":true,"l":394,"u":484},{"a":false,"l":163,"u":498},{"a":false,"l":264,"u":375},{"a":true,"l":315,"u":317},{"a":false,"l":121,"u":879},{"a":false,"l":78,"u":973},{"a":true,"l":308,"u":621},{"a":true,"l":231,"u":593},{"a":true,"l":400,"u":639},{"a":true,"l":646,"u":975},{"a":true,"l":175,"u":538},{"a":false,"l":400,"u":557},{"a":false,"l":357,"u":765},{"a":true,"l":377,"u":423},{"a":true,"l":158,"u":345},{"a":false,"l":232,"u":980},{"a":false,"l":670,"u":811},{"a":false,"l":908,"u":986},{"a":false,"l":92,"u":508},{"a":false,"l":394,"u":809},{"a":true,"l":237,"u":247},{"a":true,"l":78,"u":507},{"a":false,"l":533,"u":674},{"a":true,"l":308,"u":382},{"a":false,"l":332,"u":812},{"a":true,"l":931,"u":967},{"a":false,"l":595,"u":603},{"a":true,"l":769,"u":811},{"a":true,"l":374,"u":574},{"a":true,"l":4,"u":997},{"a":false,"l":318,"u":900},{"a":false,"l":281,"u":677},{"a":true,"l":320,"u":331},{"a":false,"l":690,"u":865},{"a":true,"l":269,"u":912},{"a":false,"l":59,"u":897},{"a":false,"l":93,"u":400},{"a":false,"l":302,"u":720},{"a":true,"l":104,"u":665},{"a":true,"l":775,"u":880},{"a":true,"l":83,"u":202},{"a":false,"l":79,"u":440},{"a":true,"l":61,"u":915},{"a":false,"l":613,"u":871},{"a":true,"l":229,"u":918},{"a":false,"l":203,"u":358},{"a":false,"l":107,"u":749},{"a":false,"l":182,"u":701},{"a":false,"l":122,"u":155},{"a":false,"l":46,"u":933},{"a":true,"l":372,"u":498},{"a":true,"l":309,"u":330},{"a":true,"l":329,"u":558},{"a":true,"l":356,"u":655},{"a":false,"l":869,"u":894},{"a":true,"l":550,"u":890},{"a":false,"l":63,"u":422},{"a":true,"l":102,"u":712},{"a":false,"l":446,"u":712},{"a":false,"l":6,"u":375},{"a":true,"l":332,"u":509},{"a":false,"l":290,"u":508},{"a":false,"l":437,"u":990},{"a":true,"l":863,"u":885},{"a":false,"l":31,"u":173},{"a":false,"l":600,"u":729},{"a":true,"l":160,"u":653},{"a":false,"l":40,"u":649},{"a":false,"l":30,"u":732},{"a":true,"l":80,"u":544},{"a":false,"l":388,"u":410},{"a":true,"l":390,"u":802},{"a":false,"l":373,"u":874},{"a":true,"l":267,"u":996},{"a":false,"l":750,"u":990},{"a":true,"l":817,"u":932},{"a":false,"l":705,"u":744},{"a":true,"l":202,"u":243},{"a":true,"l":469,"u":906},{"a":false,"l":67,"u":558},{"a":false,"l":169,"u":852},{"a":false,"l":139,"u":866},{"a":false,"l":404,"u":486},{"a":false,"l":172,"u":440},{"a":true,"l":182,"u":908},{"a":true,"l":657,"u":694},{"a":true,"l":590,"u":837},{"a":true,"l":269,"u":309},{"a":false,"l":141,"u":273},{"a":false,"l":250,"u":779},{"a":true,"l":4,"u":894},{"a":false,"l":70,"u":297},{"a":false,"l":63,"u":632},{"a":true,"l":107,"u":881},{"a":true,"l":657,"u":908},{"a":true,"l":534,"u":576},{"a":false,"l":82,"u":669},{"a":false,"l":7,"u":387},{"a":false,"l":137,"u":761},{"a":true,"l":653,"u":769},{"a":true,"l":128,"u":785},{"a":true,"l":249,"u":347},{"a":false,"l":589,"u":969},{"a":false,"l":549,"u":981},{"a":false,"l":163,"u":971},{"a":true,"l":500,"u":515},{"a":true,"l":332,"u":924},{"a":true,"l":527,"u":585},{"a":true,"l":103,"u":250},{"a":false,"l":877,"u":931},{"a":false,"l":408,"u":741},{"a":true,"l":162,"u":596},{"a":false,"l":640,"u":706},{"a":false,"l":406,"u":722},{"a":true,"l":667,"u":705},{"a":true,"l":53,"u":279},{"a":true,"l":912,"u":980},{"a":true,"l":24,"u":426},{"a":false,"l":17,"u":750},{"a":true,"l":87,"u":159},{"a":false,"l":471,"u":724},{"a":true,"l":246,"u":593},{"a":true,"l":624,"u":677},{"a":false,"l":310,"u":985},{"a":true,"l":113,"u":167},{"a":false,"l":270,"u":831},{"a":true,"l":394,"u":496},{"a":false,"l":458,"u":736},{"a":false,"l":551,"u":686},{"a":false,"l":530,"u":560},{"a":false,"l":199,"u":408},{"a":false,"l":133,"u":990},{"a":true,"l":259,"u":372},{"a":true,"l":230,"u":762},{"a":true,"l":58,"u":202},{"a":true,"l":690,"u":784},{"a":false,"l":364,"u":711},{"a":false,"l":418,"u":932},{"a":true,"l":67,"u":561},{"a":false,"l":80,"u":468},{"a":true,"l":185,"u":669},{"a":true,"l":223,"u":715},{"a":true,"l":603,"u":820},{"a":true,"l":92,"u":690},{"a":false,"l":212,"u":378},{"a":false,"l":470,"u":722},{"a":false,"l":330,"u":714},{"a":true,"l":529,"u":962},{"a":false,"l":297,"u":699},{"a":false,"l":344,"u":400},{"a":true,"l":255,"u":453},{"a":false,"l":177,"u":842},{"a":true,"l":290,"u":573},{"a":true,"l":554,"u":843},{"a":true,"l":520,"u":747},{"a":false,"l":504,"u":754},{"a":false,"l":449,"u":771},{"a":false,"l":744,"u":900},{"a":true,"l":118,"u":401},{"a":true,"l":140,"u":718},{"a":true,"l":501,"u":672},{"a":false,"l":25,"u":236},{"a":false,"l":427,"u":668},{"a":false,"l":182,"u":465},{"a":false,"l":17,"u":774},{"a":true,"l":27,"u":566},{"a":false,"l":58,"u":563},{"a":false,"l":744,"u":927},{"a":false,"l":250,"u":522},{"a":true,"l":403,"u":794},{"a":false,"l":831,"u":939},{"a":false,"l":451,"u":472},{"a":false,"l":476,"u":567},{"a":true,"l":502,"u":947},{"a":true,"l":318,"u":433},{"a":false,"l":567,"u":624},{"a":false,"l":423,"u":922},{"a":true,"l":229,"u":642},{"a":true,"l":533,"u":988},{"a":false,"l":14,"u":469},{"a":false,"l":302,"u":345},{"a":true,"l":108,"u":943},{"a":true,"l":113,"u":910},{"a":false,"l":474,"u":872},{"a":false,"l":144,"u":855},{"a":false,"l":36,"u":615},{"a":false,"l":144,"u":173},{"a":true,"l":110,"u":382},{"a":false,"l":760,"u":856},{"a":true,"l":804,"u":973},{"a":true,"l":605,"u":752},{"a":true,"l":40,"u":546},{"a":true,"l":482,"u":592},{"a":true,"l":20,"u":333},{"a":false,"l":119,"u":826},{"a":true,"l":464,"u":544},{"a":true,"l":761,"u":784},{"a":true,"l":352,"u":785},{"a":true,"l":41,"u":407},{"a":false,"l":369,"u":653},{"a":true,"l":113,"u":800},{"a":true,"l":673,"u":681},{"a":true,"l":857,"u":875},{"a":false,"l":502,"u":734},{"a":false,"l":622,"u":958},{"a":true,"l":145,"u":408},{"a":true,"l":756,"u":997},{"a":true,"l":18,"u":298},{"a":false,"l":184,"u":674},{"a":false,"l":160,"u":724},{"a":true,"l":535,"u":802},{"a":false,"l":508,"u":611},{"a":true,"l":401,"u":473},{"a":true,"l":507,"u":509},{"a":false,"l":208,"u":641},{"a":false,"l":538,"u":965},{"a":false,"l":50,"u":340},{"a":false,"l":161,"u":446},{"a":false,"l":65,"u":804},{"a":true,"l":604,"u":794},{"a":false,"l":271,"u":836},{"a":false,"l":354,"u":671},{"a":false,"l":16,"u":679},{"a":true,"l":592,"u":643},{"a":true,"l":718,"u":737},{"a":false,"l":277,"u":950},{"a":true,"l":646,"u":881},{"a":false,"l":248,"u":945},{"a":true,"l":567,"u":991},{"a":true,"l":672,"u":763},{"a":true,"l":35,"u":771},{"a":false,"l":659,"u":977},{"a":false,"l":520,"u":871},{"a":false,"l":816,"u":845},{"a":false,"l":516,"u":591},{"a":true,"l":625,"u":972},{"a":false,"l":607,"u":734},{"a":true,"l":106,"u":393},{"a":false,"l":91,"u":341},{"a":false,"l":791,"u":870},{"a":false,"l":77,"u":594},{"a":false,"l":614,"u":652},{"a":false,"l":206,"u":680},{"a":true,"l":59,"u":307},{"a":false,"l":674,"u":941},{"a":false,"l":417,"u":799},{"a":false,"l":567,"u":875},{"a":true,"l":598,"u":842},{"a":true,"l":500,"u":639},{"a":false,"l":217,"u":889},{"a":true,"l":94,"u":648},{"a":true,"l":812,"u":900},{"a":true,"l":95,"u":218},{"a":false,"l":14,"u":284},{"a":false,"l":476,"u":729},{"a":true,"l":213,"u":281},{"a":true,"l":299,"u":341},{"a":false,"l":453,"u":777},{"a":false,"l":171,"u":845},{"a":false,"l":159,"u":409},{"a":true,"l":771,"u":903},{"a":true,"l":673,"u":962},{"a":false,"l":782,"u":832},{"a":true,"l":624,"u":872},{"a":true,"l":334,"u":915},{"a":false,"l":517,"u":751},{"a":true,"l":392,"u":756},{"a":true,"l":613,"u":940},{"a":false,"l":220,"u":462},{"a":true,"l":368,"u":970},{"a":false,"l":88,"u":443},{"a":false,"l":63,"u":143},{"a":false,"l":444,"u":874},{"a":true,"l":214,"u":968},{"a":false,"l":685,"u":707},{"a":true,"l":128,"u":180},{"a":false,"l":440,"u":715},{"a":false,"l":107,"u":782},{"a":false,"l":144,"u":882},{"a":true,"l":846,"u":920},{"a":false,"l":97,"u":752},{"a":true,"l":578,"u":633},{"a":false,"l":147,"u":569},{"a":true,"l":256,"u":277},{"a":true,"l":267,"u":372},{"a":true,"l":706,"u":931},{"a":true,"l":621,"u":633},{"a":true,"l":316,"u":547},{"a":false,"l":762,"u":982},{"a":false,"l":526,"u":807},{"a":false,"l":935,"u":963},{"a":true,"l":809,"u":925},{"a":true,"l":178,"u":218},{"a":false,"l":40,"u":918},{"a":false,"l":231,"u":815},{"a":true,"l":3,"u":263},{"a":false,"l":136,"u":916},{"a":false,"l":328,"u":543},{"a":true,"l":518,"u":768},{"a":true,"l":9,"u":972},{"a":false,"l":312,"u":750},{"a":false,"l":268,"u":479},{"a":true,"l":93,"u":435},{"a":true,"l":192,"u":436},{"a":false,"l":712,"u":760},{"a":false,"l":28,"u":986},{"a":true,"l":486,"u":579},{"a":true,"l":146,"u":750},{"a":true,"l":398,"u":905},{"a":true,"l":177,"u":434},{"a":true,"l":44,"u":342},{"a":true,"l":634,"u":869},{"a":false,"l":161,"u":527},{"a":true,"l":961,"u":985},{"a":true,"l":408,"u":942},{"a":false,"l":453,"u":841},{"a":false,"l":40,"u":487},{"a":false,"l":642,"u":720},{"a":false,"l":32,"u":601},{"a":false,"l":119,"u":452},{"a":false,"l":252,"u":615},{"a":true,"l":387,"u":767},{"a":true,"l":4,"u":223},{"a":true,"l":512,"u":559},{"a":false,"l":17,"u":500},{"a":true,"l":116,"u":645},{"a":true,"l":58,"u":265},{"a":true,"l":500,"u":790},{"a":false,"l":52,"u":492},{"a":false,"l":433,"u":438},{"a":false,"l":737,"u":744},{"a":true,"l":278,"u":848},{"a":false,"l":35,"u":136},{"a":false,"l":739,"u":854},{"a":false,"l":714,"u":822},{"a":true,"l":588,"u":611},{"a":false,"l":99,"u":138},{"a":true,"l":23,"u":80},{"a":true,"l":227,"u":812},{"a":true,"l":58,"u":395},{"a":false,"l":226,"u":555},{"a":false,"l":536,"u":761},{"a":false,"l":374,"u":458},{"a":false,"l":459,"u":968},{"a":false,"l":817,"u":821},{"a":false,"l":62,"u":65},{"a":true,"l":302,"u":847},{"a":false,"l":275,"u":415},{"a":true,"l":221,"u":314},{"a":false,"l":330,"u":721},{"a":false,"l":50,"u":513},{"a":true,"l":571,"u":980},{"a":true,"l":164,"u":289},{"a":false,"l":374,"u":488},{"a":false,"l":479,"u":640},{"a":true,"l":66,"u":633},{"a":true,"l":173,"u":792},{"a":false,"l":177,"u":792},{"a":false,"l":100,"u":243},{"a":true,"l":135,"u":738},{"a":false,"l":507,"u":935},{"a":false,"l":9,"u":990},{"a":false,"l":693,"u":778},{"a":false,"l":312,"u":779},{"a":false,"l":734,"u":980},{"a":false,"l":320,"u":684},{"a":false,"l":250,"u":346},{"a":false,"l":273,"u":964},{"a":true,"l":727,"u":896},{"a":true,"l":313,"u":655},{"a":true,"l":220,"u":599},{"a":false,"l":47,"u":110},{"a":false,"l":527,"u":790},{"a":false,"l":270,"u":600},{"a":true,"l":767,"u":776},{"a":false,"l":121,"u":517},{"a":false,"l":83,"u":674},{"a":false,"l":241,"u":494},{"a":true,"l":733,"u":744},{"a":false,"l":413,"u":923},{"a":false,"l":539,"u":894},{"a":true,"l":91,"u":405},{"a":true,"l":83,"u":499},{"a":true,"l":267,"u":817},{"a":false,"l":226,"u":516},{"a":false,"l":160,"u":235},{"a":true,"l":144,"u":344},{"a":true,"l":509,"u":865},{"a":true,"l":150,"u":407},{"a":true,"l":873,"u":907},{"a":false,"l":431,"u":571},{"a":true,"l":161,"u":354},{"a":false,"l":415,"u":926},{"a":true,"l":404,"u":427},{"a":false,"l":609,"u":666},{"a":true,"l":251,"u":744},{"a":false,"l":401,"u":579},{"a":false,"l":20,"u":310},{"a":false,"l":155,"u":732},{"a":false,"l":119,"u":943},{"a":false,"l":532,"u":680},{"a":true,"l":328,"u":506},{"a":true,"l":184,"u":872},{"a":true,"l":348,"u":613},{"a":true,"l":260,"u":492},{"a":false,"l":51,"u":242},{"a":false,"l":6,"u":718},{"a":false,"l":29,"u":258},{"a":false,"l":690,"u":922},{"a":true,"l":151,"u":201},{"a":true,"l":150,"u":750},{"a":true,"l":172,"u":668},{"a":false,"l":702,"u":873},{"a":true,"l":920,"u":998},{"a":false,"l":600,"u":812},{"a":true,"l":650,"u":795},{"a":false,"l":592,"u":726},{"a":true,"l":42,"u":890},{"a":true,"l":444,"u":768},{"a":true,"l":568,"u":596},{"a":false,"l":11,"u":936},{"a":true,"l":587,"u":869},{"a":false,"l":415,"u":740},{"a":true,"l":68,"u":750},{"a":true,"l":801,"u":803},{"a":true,"l":13,"u":146},{"a":false,"l":741,"u":868},{"a":false,"l":473,"u":819},{"a":false,"l":820,"u":868},{"a":true,"l":160,"u":429},{"a":true,"l":277,"u":856},{"a":false,"l":251,"u":569},{"a":false,"l":544,"u":930},{"a":false,"l":516,"u":762},{"a":true,"l":106,"u":560},{"a":false,"l":204,"u":609},{"a":false,"l":649,"u":856},{"a":true,"l":21,"u":345},{"a":false,"l":700,"u":913},{"a":true,"l":47,"u":186},{"a":false,"l":43,"u":403},{"a":false,"l":321,"u":982},{"a":true,"l":149,"u":563},{"a":false,"l":262,"u":530},{"a":false,"l":41,"u":357},{"a":false,"l":346,"u":400},{"a":false,"l":373,"u":808},{"a":true,"l":211,"u":936},{"a":true,"l":655,"u":805},{"a":true,"l":553,"u":734},{"a":true,"l":325,"u":801},{"a":false,"l":633,"u":797},{"a":true,"l":692,"u":775},{"a":false,"l":474,"u":597},{"a":true,"l":293,"u":949},{"a":true,"l":263,"u":726},{"a":true,"l":287,"u":662},{"a":true,"l":696,"u":776},{"a":true,"l":681,"u":742},{"a":false,"l":477,"u":721},{"a":true,"l":809,"u":936},{"a":true,"l":389,"u":695},{"a":true,"l":136,"u":711},{"a":true,"l":574,"u":959},{"a":true,"l":268,"u":463},{"a":true,"l":32,"u":489},{"a":true,"l":422,"u":931},{"a":false,"l":296,"u":897},{"a":false,"l":838,"u":851},{"a":false,"l":181,"u":387},{"a":true,"l":510,"u":647},{"a":true,"l":471,"u":765},{"a":false,"l":31,"u":78},{"a":false,"l":178,"u":582},{"a":true,"l":544,"u":941},{"a":false,"l":181,"u":653},{"a":true,"l":571,"u":616},{"a":true,"l":744,"u":984},{"a":false,"l":538,"u":752},{"a":true,"l":157,"u":884},{"a":true,"l":84,"u":444},{"a":true,"l":552,"u":711},{"a":true,"l":18,"u":594},{"a":true,"l":272,"u":930},{"a":false,"l":564,"u":882},{"a":true,"l":125,"u":897},{"a":true,"l":167,"u":424},{"a":true,"l":758,"u":794},{"a":false,"l":227,"u":967},{"a":true,"l":16,"u":203},{"a":true,"l":190,"u":531},{"a":false,"l":511,"u":686},{"a":false,"l":607,"u":808},{"a":false,"l":90,"u":130},{"a":true,"l":344,"u":350},{"a":true,"l":127,"u":202},{"a":true,"l":503,"u":519},{"a":true,"l":292,"u":695},{"a":true,"l":246,"u":511},{"a":true,"l":578,"u":698},{"a":true,"l":104,"u":413},{"a":true,"l":106,"u":179},{"a":false,"l":241,"u":855},{"a":false,"l":186,"u":750},{"a":false,"l":161,"u":544},{"a":true,"l":257,"u":765},{"a":true,"l":184,"u":890},{"a":false,"l":242,"u":850},{"a":true,"l":76,"u":787},{"a":true,"l":568,"u":987},{"a":false,"l":425,"u":628},{"a":true,"l":332,"u":381},{"a":false,"l":621,"u":741},{"a":true,"l":398,"u":879},{"a":true,"l":644,"u":697},{"a":false,"l":589,"u":613},{"a":true,"l":377,"u":549},{"a":true,"l":72,"u":163},{"a":true,"l":606,"u":781},{"a":true,"l":93,"u":670},{"a":false,"l":3,"u":589},{"a":false,"l":252,"u":707},{"a":false,"l":138,"u":888},{"a":true,"l":536,"u":934},{"a":true,"l":403,"u":610},{"a":true,"l":260,"u":507},{"a":false,"l":653,"u":859},{"a":false,"l":603,"u":915},{"a":false,"l":615,"u":987},{"a":false,"l":16,"u":553},{"a":true,"l":145,"u":346},{"a":false,"l":353,"u":383},{"a":true,"l":355,"u":538},{"a":false,"l":511,"u":928},{"a":true,"l":153,"u":814},{"a":true,"l":220,"u":743},{"a":false,"l":430,"u":910},{"a":false,"l":107,"u":872},{"a":true,"l":98,"u":117},{"a":true,"l":181,"u":450},{"a":false,"l":649,"u":681},{"a":false,"l":662,"u":924},{"a":true,"l":120,"u":964},{"a":true,"l":466,"u":694},{"a":true,"l":343,"u":575},{"a":true,"l":57,"u":966},{"a":true,"l":607,"u":812},{"a":true,"l":266,"u":977},{"a":true,"l":515,"u":785},{"a":true,"l":402,"u":836},{"a":false,"l":460,"u":666},{"a":true,"l":341,"u":635},{"a":true,"l":402,"u":887},{"a":false,"l":306,"u":592},{"a":true,"l":81,"u":461},{"a":true,"l":244,"u":370},{"a":true,"l":194,"u":966},{"a":true,"l":38,"u":722},{"a":true,"l":144,"u":603},{"a":true,"l":604,"u":613},{"a":false,"l":897,"u":952},{"a":true,"l":412,"u":880},{"a":false,"l":251,"u":488},{"a":true,"l":211,"u":903},{"a":false,"l":255,"u":537},{"a":true,"l":62,"u":944},{"a":true,"l":99,"u":648},{"a":false,"l":128,"u":184},{"a":false,"l":133,"u":202},{"a":false,"l":49,"u":527},{"a":false,"l":422,"u":629},{"a":true,"l":536,"u":754},{"a":false,"l":673,"u":865},{"a":true,"l":737,"u":841},{"a":false,"l":74,"u":900},{"a":true,"l":626,"u":992},{"a":false,"l":61,"u":284},{"a":true,"l":119,"u":164},{"a":false,"l":896,"u":988},{"a":true,"l":526,"u":945},{"a":true,"l":607,"u":832},{"a":false,"l":28,"u":514},{"a":true,"l":252,"u":708},{"a":true,"l":976,"u":997},{"a":true,"l":553,"u":597},{"a":true,"l":130,"u":264},{"a":false,"l":32,"u":159},{"a":true,"l":392,"u":499},{"a":false,"l":246,"u":341},{"a":true,"l":346,"u":477},{"a":false,"l":316,"u":866},{"a":false,"l":674,"u":798},{"a":false,"l":419,"u":456},{"a":true,"l":96,"u":843},{"a":true,"l":687,"u":699},{"a":true,"l":368,"u":565},{"a":false,"l":153,"u":355},{"a":false,"l":209,"u":666},{"a":false,"l":83,"u":228},{"a":false,"l":603,"u":643},{"a":false,"l":611,"u":717},{"a":true,"l":95,"u":960},{"a":false,"l":418,"u":528},{"a":true,"l":49,"u":539},{"a":false,"l":253,"u":940},{"a":true,"l":613,"u":805},{"a":true,"l":698,"u":940},{"a":false,"l":356,"u":492},{"a":true,"l":424,"u":911},{"a":false,"l":441,"u":797},{"a":false,"l":56,"u":436},{"a":false,"l":137,"u":571},{"a":false,"l":841,"u":903},{"a":false,"l":552,"u":969},{"a":true,"l":166,"u":961},{"a":true,"l":773,"u":958},{"a":false,"l":766,"u":999},{"a":true,"l":343,"u":381},{"a":false,"l":875,"u":898},{"a":true,"l":81,"u":570},{"a":true,"l":384,"u":614},{"a":true,"l":265,"u":658},{"a":false,"l":674,"u":930},{"a":false,"l":70,"u":339},{"a":false,"l":28,"u":503},{"a":false,"l":503,"u":939},{"a":true,"l":528,"u":918},{"a":false,"l":525,"u":592},{"a":true,"l":405,"u":767},{"a":true,"l":37,"u":945},{"a":true,"l":445,"u":912},{"a":true,"l":835,"u":996},{"a":false,"l":464,"u":992},{"a":false,"l":435,"u":516},{"a":true,"l":38,"u":184},{"a":false,"l":23,"u":179},{"a":false,"l":418,"u":790},{"a":false,"l":546,"u":984},{"a":true,"l":203,"u":616},{"a":true,"l":253,"u":836},{"a":false,"l":194,"u":876},{"a":false,"l":559,"u":620},{"a":false,"l":423,"u":781},{"a":false,"l":516,"u":946},{"a":false,"l":385,"u":679},{"a":false,"l":214,"u":496},{"a":false,"l":362,"u":993},{"a":false,"l":556,"u":796},{"a":false,"l":141,"u":545},{"a":false,"l":867,"u":870},{"a":true,"l":740,"u":745},{"a":true,"l":871,"u":966},{"a":false,"l":18,"u":123},{"a":false,"l":277,"u":299},{"a":false,"l":488,"u":884},{"a":false,"l":285,"u":947},{"a":false,"l":287,"u":411},{"a":false,"l":67,"u":915},{"a":false,"l":134,"u":708},{"a":false,"l":328,"u":594},{"a":true,"l":115,"u":188},{"a":true,"l":55,"u":803},{"a":false,"l":433,"u":542},{"a":true,"l":661,"u":834},{"a":false,"l":197,"u":233},{"a":true,"l":790,"u":825},{"a":true,"l":102,"u":624},{"a":true,"l":290,"u":511},{"a":false,"l":492,"u":693},{"a":true,"l":287,"u":519},{"a":true,"l":146,"u":708},{"a":false,"l":501,"u":956},{"a":true,"l":138,"u":182},{"a":false,"l":114,"u":697},{"a":false,"l":361,"u":897},{"a":false,"l":15,"u":177},{"a":false,"l":914,"u":931},{"a":true,"l":466,"u":960},{"a":false,"l":59,"u":852},{"a":false,"l":483,"u":963},{"a":true,"l":800,"u":878},{"a":true,"l":609,"u":837},{"a":false,"l":8,"u":694},{"a":false,"l":313,"u":973},{"a":false,"l":274,"u":525},{"a":false,"l":87,"u":347},{"a":false,"l":71,"u":305},{"a":true,"l":17,"u":974},{"a":true,"l":614,"u":627},{"a":false,"l":330,"u":914},{"a":false,"l":39,"u":533},{"a":true,"l":383,"u":675},{"a":true,"l":40,"u":316},{"a":true,"l":622,"u":731},{"a":false,"l":690,"u":725},{"a":true,"l":661,"u":864},{"a":true,"l":127,"u":557},{"a":true,"l":395,"u":777},{"a":false,"l":379,"u":888},{"a":false,"l":112,"u":859},{"a":false,"l":380,"u":976},{"a":false,"l":93,"u":368},{"a":false,"l":99,"u":823},{"a":false,"l":904,"u":954},{"a":false,"l":619,"u":819},{"a":false,"l":399,"u":667},{"a":true,"l":127,"u":922},{"a":true,"l":485,"u":917},{"a":true,"l":1,"u":430},{"a":true,"l":272,"u":322},{"a":false,"l":434,"u":447},{"a":false,"l":812,"u":875},{"a":false,"l":506,"u":914},{"a":true,"l":248,"u":749},{"a":false,"l":560,"u":666},{"a":false,"l":54,"u":841},{"a":false,"l":778,"u":891},{"a":false,"l":395,"u":405},{"a":false,"l":683,"u":727},{"a":false,"l":542,"u":974},{"a":false,"l":21,"u":204},{"a":true,"l":33,"u":606},{"a":false,"l":483,"u":921},{"a":true,"l":447,"u":466},{"a":false,"l":731,"u":841},{"a":false,"l":355,"u":994},{"a":false,"l":12,"u":879},{"a":false,"l":689,"u":729},{"a":true,"l":835,"u":861},{"a":true,"l":25,"u":831},{"a":true,"l":9,"u":756},{"a":false,"l":203,"u":873},{"a":false,"l":511,"u":729},{"a":true,"l":673,"u":925},{"a":true,"l":353,"u":943},{"a":false,"l":147,"u":919},{"a":true,"l":300,"u":909},{"a":false,"l":456,"u":568},{"a":false,"l":769,"u":883},{"a":false,"l":65,"u":761},{"a":true,"l":211,"u":366},{"a":true,"l":112,"u":779},{"a":true,"l":54,"u":995},{"a":true,"l":513,"u":536},{"a":true,"l":229,"u":770},{"a":false,"l":264,"u":474},{"a":true,"l":47,"u":530},{"a":true,"l":375,"u":906},{"a":true,"l":207,"u":790},{"a":true,"l":810,"u":947},{"a":true,"l":148,"u":363},{"a":true,"l":764,"u":792},{"a":false,"l":738,"u":825},{"a":false,"l":205,"u":476},{"a":true,"l":208,"u":460},{"a":true,"l":367,"u":983},{"a":false,"l":178,"u":511},{"a":false,"l":273,"u":547},{"a":true,"l":475,"u":972},{"a":false,"l":513,"u":650},{"a":false,"l":368,"u":399},{"a":false,"l":565,"u":640},{"a":true,"l":63,"u":661},{"a":false,"l":547,"u":946},{"a":true,"l":119,"u":421},{"a":true,"l":88,"u":766},{"a":true,"l":277,"u":412},{"a":true,"l":331,"u":772},{"a":false,"l":178,"u":654},{"a":false,"l":198,"u":685},{"a":true,"l":577,"u":798},{"a":false,"l":589,"u":853},{"a":true,"l":209,"u":815},{"a":false,"l":586,"u":899},{"a":true,"l":668,"u":915},{"a":false,"l":136,"u":494},{"a":true,"l":112,"u":695},{"a":false,"l":124,"u":531},{"a":false,"l":444,"u":858},{"a":false,"l":540,"u":755},{"a":false,"l":791,"u":945},{"a":true,"l":94,"u":699},{"a":false,"l":181,"u":265},{"a":true,"l":703,"u":720},{"a":true,"l":433,"u":923},{"a":true,"l":444,"u":806},{"a":false,"l":197,"u":234},{"a":false,"l":4,"u":621},{"a":false,"l":654,"u":987},{"a":true,"l":411,"u":600},{"a":false,"l":145,"u":515},{"a":false,"l":56,"u":816},{"a":false,"l":5,"u":533},{"a":true,"l":370,"u":874},{"a":false,"l":828,"u":905},{"a":true,"l":266,"u":811},{"a":false,"l":408,"u":912},{"a":true,"l":485,"u":829},{"a":true,"l":897,"u":941},{"a":false,"l":485,"u":700},{"a":false,"l":657,"u":917},{"a":false,"l":254,"u":709},{"a":true,"l":25,"u":605},{"a":true,"l":378,"u":754},{"a":true,"l":145,"u":345},{"a":false,"l":801,"u":874},{"a":false,"l":661,"u":811},{"a":false,"l":541,"u":764},{"a":true,"l":45,"u":252},{"a":true,"l":45,"u":389},{"a":true,"l":261,"u":760},{"a":false,"l":253,"u":463},{"a":true,"l":167,"u":354},{"a":false,"l":212,"u":694},{"a":false,"l":77,"u":91},{"a":false,"l":130,"u":758},{"a":false,"l":634,"u":891},{"a":false,"l":165,"u":335},{"a":true,"l":641,"u":812},{"a":true,"l":392,"u":858},{"a":true,"l":2,"u":919},{"a":false,"l":161,"u":955},{"a":false,"l":478,"u":647},{"a":true,"l":905,"u":905},{"a":true,"l":73,"u":381},{"a":true,"l":379,"u":428},{"a":true,"l":381,"u":682},{"a":true,"l":82,"u":754},{"a":true,"l":266,"u":294},{"a":false,"l":347,"u":770},{"a":false,"l":407,"u":532},{"a":true,"l":154,"u":864},{"a":true,"l":326,"u":893},{"a":false,"l":392,"u":800},{"a":false,"l":470,"u":830},{"a":false,"l":875,"u":947},{"a":false,"l":291,"u":971},{"a":false,"l":100,"u":292},{"a":true,"l":296,"u":338},{"a":true,"l":278,"u":558},{"a":true,"l":627,"u":826},{"a":true,"l":57,"u":647},{"a":true,"l":89,"u":372},{"a":false,"l":537,"u":667},{"a":false,"l":337,"u":768},{"a":false,"l":586,"u":638},{"a":true,"l":69,"u":784},{"a":false,"l":150,"u":167},{"a":false,"l":127,"u":442},{"a":false,"l":310,"u":359},{"a":false,"l":243,"u":461},{"a":false,"l":76,"u":116},{"a":false,"l":183,"u":596},{"a":true,"l":764,"u":856},{"a":true,"l":722,"u":777},{"a":true,"l":163,"u":900},{"a":false,"l":344,"u":610},{"a":false,"l":152,"u":210},{"a":true,"l":523,"u":585},{"a":true,"l":355,"u":496},{"a":false,"l":878,"u":943},{"a":false,"l":44,"u":105},{"a":false,"l":916,"u":974},{"a":false,"l":339,"u":484},{"a":false,"l":137,"u":975},{"a":true,"l":245,"u":349},{"a":true,"l":722,"u":911},{"a":false,"l":597,"u":654},{"a":false,"l":610,"u":754},{"a":false,"l":2,"u":368},{"a":true,"l":939,"u":991},{"a":true,"l":197,"u":458},{"a":false,"l":1,"u":617},{"a":true,"l":36,"u":798},{"a":true,"l":189,"u":706},{"a":false,"l":117,"u":142},{"a":true,"l":539,"u":964},{"a":true,"l":572,"u":813},{"a":false,"l":591,"u":599},{"a":false,"l":880,"u":940},{"a":false,"l":198,"u":348},{"a":false,"l":419,"u":477},{"a":false,"l":25,"u":519},{"a":false,"l":107,"u":380},{"a":false,"l":626,"u":736},{"a":false,"l":401,"u":984},{"a":false,"l":439,"u":778},{"a":true,"l":279,"u":847},{"a":false,"l":79,"u":896},{"a":true,"l":65,"u":653},{"a":false,"l":339,"u":524},{"a":true,"l":351,"u":662},{"a":true,"l":774,"u":913},{"a":false,"l":235,"u":416},{"a":true,"l":27,"u":865},{"a":false,"l":138,"u":652},{"a":false,"l":780,"u":892},{"a":true,"l":618,"u":891},{"a":true,"l":285,"u":973},{"a":false,"l":80,"u":451},{"a":true,"l":645,"u":874},{"a":false,"l":245,"u":375},{"a":true,"l":409,"u":482},{"a":false,"l":683,"u":851},{"a":true,"l":654,"u":760},{"a":false,"l":270,"u":521},{"a":true,"l":145,"u":513},{"a":false,"l":108,"u":228},{"a":false,"l":210,"u":395},{"a":true,"l":518,"u":905},{"a":true,"l":368,"u":899},{"a":false,"l":731,"u":747},{"a":true,"l":624,"u":663},{"a":false,"l":878,"u":959},{"a":false,"l":503,"u":799},{"a":false,"l":134,"u":894},{"a":true,"l":367,"u":446},{"a":true,"l":25,"u":51},{"a":false,"l":94,"u":474},{"a":false,"l":404,"u":671},{"a":false,"l":437,"u":649},{"a":false,"l":863,"u":940},{"a":true,"l":82,"u":535},{"a":true,"l":601,"u":728},{"a":false,"l":463,"u":607},{"a":true,"l":60,"u":99},{"a":false,"l":329,"u":504},{"a":true,"l":211,"u":216},{"a":false,"l":455,"u":833},{"a":true,"l":471,"u":807},{"a":false,"l":601,"u":741},{"a":false,"l":42,"u":533},{"a":true,"l":106,"u":426},{"a":true,"l":185,"u":878},{"a":false,"l":761,"u":882},{"a":true,"l":93,"u":956},{"a":false,"l":668,"u":931},{"a":false,"l":29,"u":699},{"a":false,"l":349,"u":835},{"a":true,"l":443,"u":468},{"a":true,"l":267,"u":468},{"a":false,"l":484,"u":544},{"a":true,"l":507,"u":575},{"a":false,"l":279,"u":315},{"a":false,"l":245,"u":612},{"a":true,"l":523,"u":748},{"a":false,"l":291,"u":442},{"a":false,"l":651,"u":732},{"a":false,"l":206,"u":571},{"a":true,"l":857,"u":904},{"a":true,"l":272,"u":869},{"a":false,"l":211,"u":686},{"a":false,"l":91,"u":756},{"a":true,"l":653,"u":773},{"a":false,"l":495,"u":797},{"a":false,"l":76,"u":677},{"a":true,"l":551,"u":860},{"a":false,"l":102,"u":941},{"a":true,"l":105,"u":499},{"a":false,"l":212,"u":654},{"a":true,"l":418,"u":813},{"a":true,"l":570,"u":768},{"a":true,"l":328,"u":569},{"a":false,"l":188,"u":939},{"a":false,"l":331,"u":497},{"a":false,"l":339,"u":640},{"a":false,"l":780,"u":979},{"a":true,"l":165,"u":427},{"a":false,"l":179,"u":893},{"a":false,"l":133,"u":658},{"a":false,"l":811,"u":902},{"a":true,"l":166,"u":558},{"a":true,"l":300,"u":971},{"a":true,"l":622,"u":737},{"a":true,"l":345,"u":636},{"a":true,"l":120,"u":193},{"a":true,"l":63,"u":898},{"a":false,"l":299,"u":628},{"a":false,"l":386,"u":413},{"a":false,"l":628,"u":732},{"a":false,"l":236,"u":850},{"a":true,"l":108,"u":582},{"a":false,"l":299,"u":443},{"a":false,"l":755,"u":993},{"a":false,"l":423,"u":425},{"a":true,"l":359,"u":887},{"a":false,"l":393,"u":790},{"a":false,"l":522,"u":828},{"a":true,"l":162,"u":387},{"a":true,"l":146,"u":150},{"a":true,"l":141,"u":481},{"a":true,"l":154,"u":447},{"a":false,"l":13,"u":311},{"a":false,"l":170,"u":934},{"a":true,"l":304,"u":597},{"a":false,"l":178,"u":256},{"a":false,"l":891,"u":928},{"a":false,"l":603,"u":697},{"a":true,"l":342,"u":782},{"a":true,"l":336,"u":687},{"a":false,"l":499,"u":943},{"a":true,"l":237,"u":799},{"a":true,"l":512,"u":618},{"a":false,"l":512,"u":848},{"a":true,"l":636,"u":648},{"a":true,"l":154,"u":748},{"a":true,"l":11,"u":335},{"a":false,"l":37,"u":206},{"a":false,"l":299,"u":492},{"a":false,"l":679,"u":824},{"a":true,"l":682,"u":845},{"a":false,"l":115,"u":675},{"a":false,"l":115,"u":418},{"a":true,"l":385,"u":912},{"a":true,"l":276,"u":287},{"a":false,"l":107,"u":238},{"a":true,"l":446,"u":502},{"a":true,"l":326,"u":688},{"a":false,"l":176,"u":478},{"a":false,"l":138,"u":792},{"a":false,"l":468,"u":783},{"a":false,"l":88,"u":485},{"a":true,"l":580,"u":949},{"a":true,"l":691,"u":775},{"a":true,"l":419,"u":632},{"a":true,"l":352,"u":896},{"a":true,"l":414,"u":499},{"a":false,"l":59,"u":366},{"a":false,"l":2,"u":674},{"a":false,"l":743,"u":941},{"a":false,"l":414,"u":867},{"a":false,"l":245,"u":637},{"a":false,"l":201,"u":851},{"a":false,"l":69,"u":92},{"a":false,"l":619,"u":711},{"a":true,"l":284,"u":950},{"a":false,"l":94,"u":478},{"a":true,"l":683,"u":923},{"a":true,"l":129,"u":564},{"a":true,"l":220,"u":394},{"a":true,"l":324,"u":900},{"a":false,"l":479,"u":669},{"a":false,"l":374,"u":485},{"a":false,"l":248,"u":571},{"a":true,"l":425,"u":889},{"a":false,"l":739,"u":839},{"a":false,"l":164,"u":719},{"a":true,"l":569,"u":669},{"a":false,"l":440,"u":707},{"a":false,"l":539,"u":993},{"a":true,"l":592,"u":633},{"a":false,"l":932,"u":947},{"a":true,"l":577,"u":881},{"a":true,"l":287,"u":308},{"a":false,"l":326,"u":712},{"a":false,"l":305,"u":780},{"a":true,"l":250,"u":846},{"a":false,"l":148,"u":240},{"a":false,"l":672,"u":963},{"a":true,"l":40,"u":654},{"a":true,"l":221,"u":441},{"a":true,"l":95,"u":884},{"a":true,"l":486,"u":770},{"a":false,"l":211,"u":259},{"a":false,"l":92,"u":442},{"a":true,"l":166,"u":482},{"a":true,"l":82,"u":746},{"a":true,"l":105,"u":588},{"a":true,"l":391,"u":738},{"a":true,"l":822,"u":965},{"a":false,"l":555,"u":985},{"a":false,"l":639,"u":912},{"a":true,"l":207,"u":505},{"a":true,"l":350,"u":880},{"a":true,"l":119,"u":529},{"a":false,"l":108,"u":942},{"a":false,"l":121,"u":568},{"a":true,"l":344,"u":974},{"a":false,"l":619,"u":818},{"a":true,"l":20,"u":536},{"a":true,"l":3,"u":660},{"a":false,"l":609,"u":644},{"a":true,"l":289,"u":576},{"a":false,"l":124,"u":660},{"a":true,"l":780,"u":809},{"a":true,"l":23,"u":534},{"a":false,"l":526,"u":719},{"a":false,"l":14,"u":175},{"a":true,"l":617,"u":935},{"a":true,"l":21,"u":532},{"a":false,"l":621,"u":758},{"a":true,"l":147,"u":178},{"a":false,"l":35,"u":494},{"a":false,"l":303,"u":768},{"a":true,"l":121,"u":214},{"a":false,"l":495,"u":807},{"a":true,"l":625,"u":713},{"a":true,"l":36,"u":747},{"a":false,"l":231,"u":698},{"a":true,"l":597,"u":805},{"a":false,"l":387,"u":483},{"a":false,"l":516,"u":984},{"a":false,"l":817,"u":827},{"a":true,"l":186,"u":388},{"a":false,"l":366,"u":830},{"a":true,"l":332,"u":514},{"a":true,"l":391,"u":923},{"a":true,"l":869,"u":942},{"a":true,"l":389,"u":995},{"a":false,"l":564,"u":974},{"a":true,"l":368,"u":845},{"a":false,"l":44,"u":881},{"a":true,"l":236,"u":295},{"a":false,"l":276,"u":870},{"a":true,"l":327,"u":836},{"a":true,"l":21,"u":956},{"a":true,"l":512,"u":960},{"a":true,"l":568,"u":947},{"a":false,"l":233,"u":315},{"a":true,"l":483,"u":549},{"a":false,"l":53,"u":471},{"a":true,"l":419,"u":761},{"a":true,"l":171,"u":824},{"a":false,"l":74,"u":768},{"a":false,"l":604,"u":764},{"a":true,"l":79,"u":462},{"a":false,"l":453,"u":735},{"a":true,"l":706,"u":743},{"a":false,"l":246,"u":514},{"a":false,"l":378,"u":519},{"a":true,"l":642,"u":676},{"a":false,"l":248,"u":812},{"a":true,"l":161,"u":897},{"a":true,"l":216,"u":589},{"a":false,"l":479,"u":493},{"a":true,"l":609,"u":671},{"a":true,"l":758,"u":770},{"a":false,"l":420,"u":571},{"a":true,"l":824,"u":921},{"a":true,"l":88,"u":736},{"a":false,"l":116,"u":953},{"a":true,"l":123,"u":790},{"a":false,"l":101,"u":253},{"a":true,"l":243,"u":593},{"a":false,"l":30,"u":751},{"a":false,"l":333,"u":734},{"a":true,"l":496,"u":957},{"a":true,"l":575,"u":883},{"a":true,"l":140,"u":451},{"a":false,"l":268,"u":477},{"a":true,"l":338,"u":539},{"a":false,"l":239,"u":921},{"a":true,"l":63,"u":322},{"a":true,"l":526,"u":572},{"a":true,"l":297,"u":785},{"a":false,"l":87,"u":313},{"a":false,"l":93,"u":848},{"a":true,"l":125,"u":185},{"a":true,"l":447,"u":840},{"a":true,"l":121,"u":645},{"a":false,"l":259,"u":600},{"a":false,"l":92,"u":535},{"a":false,"l":201,"u":291},{"a":true,"l":693,"u":969},{"a":true,"l":29,"u":302},{"a":false,"l":415,"u":741},{"a":false,"l":218,"u":815},{"a":true,"l":685,"u":735},{"a":true,"l":42,"u":755},{"a":false,"l":35,"u":980},{"a":true,"l":155,"u":374},{"a":false,"l":496,"u":909},{"a":false,"l":234,"u":265},{"a":false,"l":709,"u":845},{"a":false,"l":15,"u":970},{"a":false,"l":426,"u":763},{"a":true,"l":676,"u":824},{"a":false,"l":319,"u":854},{"a":false,"l":131,"u":509},{"a":true,"l":242,"u":491},{"a":false,"l":151,"u":207},{"a":false,"l":306,"u":534},{"a":false,"l":15,"u":714},{"a":true,"l":339,"u":446},{"a":false,"l":6,"u":226},{"a":false,"l":523,"u":560},{"a":false,"l":326,"u":987},{"a":true,"l":316,"u":852},{"a":true,"l":175,"u":962},{"a":false,"l":137,"u":192},{"a":false,"l":219,"u":269},{"a":false,"l":538,"u":618},{"a":true,"l":297,"u":564},{"a":false,"l":460,"u":879},{"a":false,"l":608,"u":762},{"a":false,"l":255,"u":567},{"a":true,"l":239,"u":263},{"a":true,"l":34,"u":975},{"a":true,"l":263,"u":326},{"a":true,"l":156,"u":437},{"a":false,"l":636,"u":811},{"a":false,"l":614,"u":761},{"a":false,"l":15,"u":764},{"a":true,"l":316,"u":951},{"a":true,"l":425,"u":952},{"a":true,"l":611,"u":626},{"a":true,"l":413,"u":847},{"a":true,"l":12,"u":680},{"a":false,"l":427,"u":626},{"a":false,"l":102,"u":536},{"a":true,"l":483,"u":794},{"a":true,"l":370,"u":839},{"a":true,"l":67,"u":812},{"a":false,"l":197,"u":494},{"a":false,"l":356,"u":605},{"a":false,"l":8,"u":704},{"a":false,"l":237,"u":636},{"a":false,"l":515,"u":841},{"a":true,"l":500,"u":849},{"a":false,"l":30,"u":186},{"a":false,"l":62,"u":595},{"a":false,"l":269,"u":665},{"a":false,"l":326,"u":946},{"a":false,"l":477,"u":910},{"a":true,"l":429,"u":745},{"a":false,"l":235,"u":243},{"a":true,"l":59,"u":78},{"a":true,"l":19,"u":530},{"a":false,"l":853,"u":959},{"a":true,"l":261,"u":620},{"a":true,"l":423,"u":840},{"a":true,"l":338,"u":567},{"a":true,"l":240,"u":641},{"a":true,"l":444,"u":962},{"a":false,"l":201,"u":295},{"a":true,"l":970,"u":981},{"a":false,"l":776,"u":942},{"a":false,"l":500,"u":574},{"a":false,"l":131,"u":846},{"a":false,"l":159,"u":684},{"a":false,"l":38,"u":789},{"a":true,"l":656,"u":992},{"a":false,"l":14,"u":292},{"a":true,"l":481,"u":848},{"a":false,"l":415,"u":792},{"a":true,"l":32,"u":698},{"a":true,"l":891,"u":989},{"a":true,"l":67,"u":637},{"a":true,"l":102,"u":316},{"a":false,"l":390,"u":768},{"a":true,"l":64,"u":575},{"a":true,"l":814,"u":845},{"a":true,"l":61,"u":561},{"a":true,"l":483,"u":871},{"a":true,"l":514,"u":834},{"a":true,"l":135,"u":975},{"a":true,"l":387,"u":841},{"a":false,"l":426,"u":621},{"a":false,"l":409,"u":655},{"a":false,"l":539,"u":983},{"a":true,"l":613,"u":702},{"a":true,"l":2,"u":380},{"a":false,"l":508,"u":552},{"a":false,"l":9,"u":271},{"a":false,"l":215,"u":432},{"a":true,"l":173,"u":307},{"a":true,"l":55,"u":703},{"a":true,"l":275,"u":517},{"a":true,"l":65,"u":338},{"a":true,"l":448,"u":576},{"a":true,"l":44,"u":531},{"a":true,"l":61,"u":391},{"a":true,"l":31,"u":170},{"a":false,"l":88,"u":685},{"a":false,"l":547,"u":952},{"a":false,"l":68,"u":943},{"a":false,"l":34,"u":462},{"a":false,"l":431,"u":466},{"a":false,"l":502,"u":596},{"a":true,"l":541,"u":613},{"a":false,"l":472,"u":989},{"a":false,"l":441,"u":957},{"a":true,"l":64,"u":78},{"a":true,"l":130,"u":683},{"a":false,"l":238,"u":275},{"a":true,"l":143,"u":507},{"a":false,"l":824,"u":881},{"a":false,"l":178,"u":293},{"a":false,"l":227,"u":432},{"a":true,"l":333,"u":512},{"a":true,"l":208,"u":583},{"a":true,"l":63,"u":428},{"a":false,"l":711,"u":975},{"a":true,"l":367,"u":913},{"a":true,"l":525,"u":610},{"a":false,"l":874,"u":986},{"a":true,"l":500,"u":897},{"a":false,"l":36,"u":660},{"a":true,"l":113,"u":298},{"a":true,"l":481,"u":602},{"a":false,"l":196,"u":986},{"a":false,"l":2,"u":3},{"a":true,"l":149,"u":248},{"a":false,"l":25,"u":248},{"a":true,"l":6,"u":160},{"a":true,"l":513,"u":838},{"a":false,"l":610,"u":777},{"a":true,"l":793,"u":993},{"a":false,"l":18,"u":491},{"a":true,"l":146,"u":681},{"a":false,"l":29,"u":679},{"a":true,"l":798,"u":811},{"a":false,"l":765,"u":808},{"a":false,"l":464,"u":806},{"a":true,"l":526,"u":584},{"a":false,"l":521,"u":638},{"a":true,"l":195,"u":272},{"a":false,"l":316,"u":923},{"a":false,"l":399,"u":925},{"a":true,"l":344,"u":478},{"a":false,"l":579,"u":858},{"a":false,"l":377,"u":582},{"a":false,"l":598,"u":661},{"a":true,"l":605,"u":981},{"a":true,"l":627,"u":792},{"a":false,"l":646,"u":711},{"a":false,"l":84,"u":157},{"a":true,"l":710,"u":893},{"a":false,"l":399,"u":616},{"a":false,"l":37,"u":850},{"a":true,"l":186,"u":935},{"a":false,"l":279,"u":958},{"a":true,"l":32,"u":235},{"a":false,"l":502,"u":958},{"a":false,"l":520,"u":785},{"a":false,"l":385,"u":785},{"a":true,"l":823,"u":885},{"a":true,"l":396,"u":675},{"a":false,"l":819,"u":961},{"a":true,"l":659,"u":849},{"a":false,"l":217,"u":764},{"a":false,"l":308,"u":497},{"a":false,"l":531,"u":896},{"a":false,"l":552,"u":585},{"a":false,"l":178,"u":196},{"a":true,"l":719,"u":950},{"a":true,"l":434,"u":525},{"a":true,"l":345,"u":725},{"a":false,"l":575,"u":626},{"a":true,"l":174,"u":704},{"a":true,"l":7,"u":700},{"a":true,"l":742,"u":781},{"a":true,"l":83,"u":191},{"a":false,"l":54,"u":641},{"a":true,"l":229,"u":434},{"a":false,"l":408,"u":836},{"a":true,"l":83,"u":336},{"a":false,"l":201,"u":348},{"a":true,"l":193,"u":418},{"a":false,"l":38,"u":305},{"a":true,"l":129,"u":658},{"a":false,"l":43,"u":527},{"a":true,"l":62,"u":489},{"a":true,"l":11,"u":862},{"a":false,"l":68,"u":110},{"a":false,"l":109,"u":932},{"a":true,"l":4,"u":856},{"a":false,"l":675,"u":706},{"a":false,"l":122,"u":183},{"a":true,"l":602,"u":984},{"a":false,"l":93,"u":366},{"a":false,"l":213,"u":331},{"a":false,"l":316,"u":437},{"a":true,"l":729,"u":815},{"a":false,"l":339,"u":432},{"a":false,"l":602,"u":659},{"a":true,"l":316,"u":810},{"a":false,"l":258,"u":886},{"a":true,"l":510,"u":997},{"a":true,"l":390,"u":771},{"a":true,"l":566,"u":767},{"a":true,"l":287,"u":525},{"a":false,"l":168,"u":744},{"a":true,"l":51,"u":226},{"a":true,"l":681,"u":772},{"a":false,"l":218,"u":596},{"a":true,"l":446,"u":794},{"a":false,"l":52,"u":286},{"a":true,"l":60,"u":654},{"a":true,"l":238,"u":831},{"a":true,"l":134,"u":692},{"a":false,"l":548,"u":905},{"a":true,"l":353,"u":487},{"a":false,"l":587,"u":921},{"a":true,"l":973,"u":977},{"a":false,"l":477,"u":657},{"a":false,"l":575,"u":582},{"a":false,"l":231,"u":542},{"a":false,"l":832,"u":834},{"a":true,"l":523,"u":991},{"a":true,"l":462,"u":565},{"a":true,"l":367,"u":397},{"a":true,"l":201,"u":877},{"a":true,"l":504,"u":637},{"a":false,"l":577,"u":649},{"a":true,"l":131,"u":504},{"a":true,"l":367,"u":935},{"a":true,"l":424,"u":875},{"a":true,"l":27,"u":790},{"a":false,"l":227,"u":475},{"a":true,"l":327,"u":560},{"a":false,"l":824,"u":841},{"a":true,"l":324,"u":507},{"a":true,"l":110,"u":826},{"a":false,"l":400,"u":913},{"a":false,"l":468,"u":618},{"a":false,"l":25,"u":43},{"a":false,"l":66,"u":324},{"a":true,"l":762,"u":957},{"a":true,"l":212,"u":251},{"a":false,"l":204,"u":410},{"a":true,"l":184,"u":313},{"a":true,"l":807,"u":973},{"a":true,"l":166,"u":445},{"a":true,"l":471,"u":758},{"a":false,"l":25,"u":641},{"a":true,"l":247,"u":826},{"a":true,"l":704,"u":950},{"a":true,"l":639,"u":834},{"a":true,"l":454,"u":466},{"a":true,"l":394,"u":864},{"a":false,"l":743,"u":843},{"a":false,"l":672,"u":709},{"a":false,"l":312,"u":727},{"a":true,"l":46,"u":805},{"a":false,"l":207,"u":590},{"a":true,"l":486,"u":548},{"a":true,"l":456,"u":518},{"a":true,"l":226,"u":555},{"a":false,"l":687,"u":958},{"a":false,"l":162,"u":314},{"a":true,"l":28,"u":446},{"a":true,"l":315,"u":583},{"a":true,"l":14,"u":793},{"a":false,"l":235,"u":454},{"a":true,"l":290,"u":540},{"a":true,"l":290,"u":368},{"a":true,"l":694,"u":924},{"a":true,"l":550,"u":749},{"a":true,"l":875,"u":985},{"a":true,"l":348,"u":385},{"a":true,"l":419,"u":778},{"a":true,"l":720,"u":921},{"a":true,"l":271,"u":808},{"a":true,"l":269,"u":528},{"a":true,"l":268,"u":620},{"a":true,"l":709,"u":905},{"a":true,"l":485,"u":664},{"a":false,"l":199,"u":304},{"a":true,"l":394,"u":599},{"a":true,"l":658,"u":863},{"a":true,"l":218,"u":660},{"a":false,"l":204,"u":329},{"a":true,"l":379,"u":535},{"a":false,"l":325,"u":833},{"a":false,"l":375,"u":865},{"a":true,"l":195,"u":698},{"a":false,"l":468,"u":986},{"a":true,"l":469,"u":815},{"a":false,"l":864,"u":894},{"a":true,"l":97,"u":159},{"a":false,"l":447,"u":785},{"a":true,"l":793,"u":970},{"a":false,"l":708,"u":875},{"a":true,"l":89,"u":250},{"a":true,"l":152,"u":673},{"a":true,"l":460,"u":668},{"a":false,"l":346,"u":397},{"a":true,"l":328,"u":406},{"a":true,"l":83,"u":689},{"a":false,"l":50,"u":935},{"a":true,"l":62,"u":89},{"a":true,"l":149,"u":505},{"a":true,"l":413,"u":512},{"a":false,"l":690,"u":812},{"a":true,"l":782,"u":915},{"a":true,"l":601,"u":998},{"a":false,"l":263,"u":602},{"a":false,"l":83,"u":811},{"a":false,"l":73,"u":127},{"a":false,"l":751,"u":915},{"a":true,"l":79,"u":827},{"a":false,"l":264,"u":935},{"a":true,"l":557,"u":695},{"a":false,"l":135,"u":344},{"a":true,"l":148,"u":316},{"a":true,"l":360,"u":775},{"a":false,"l":116,"u":167},{"a":true,"l":425,"u":692},{"a":false,"l":169,"u":630},{"a":false,"l":511,"u":685},{"a":true,"l":185,"u":454},{"a":false,"l":693,"u":808},{"a":true,"l":35,"u":975},{"a":true,"l":85,"u":321},{"a":false,"l":840,"u":982},{"a":true,"l":333,"u":729},{"a":true,"l":291,"u":825},{"a":true,"l":103,"u":742},{"a":false,"l":321,"u":509},{"a":false,"l":581,"u":629},{"a":false,"l":256,"u":562},{"a":false,"l":43,"u":522},{"a":true,"l":200,"u":299},{"a":false,"l":348,"u":412},{"a":true,"l":333,"u":929},{"a":false,"l":470,"u":832},{"a":true,"l":896,"u":974},{"a":false,"l":325,"u":638},{"a":false,"l":263,"u":763},{"a":true,"l":538,"u":901},{"a":true,"l":299,"u":787},{"a":true,"l":287,"u":821},{"a":true,"l":16,"u":234},{"a":false,"l":13,"u":704},{"a":false,"l":555,"u":988},{"a":false,"l":888,"u":990},{"a":false,"l":225,"u":307},{"a":true,"l":81,"u":759},{"a":true,"l":213,"u":661},{"a":false,"l":33,"u":702},{"a":false,"l":176,"u":993},{"a":false,"l":136,"u":449},{"a":false,"l":346,"u":625},{"a":true,"l":211,"u":239},{"a":false,"l":270,"u":403},{"a":false,"l":65,"u":657},{"a":false,"l":430,"u":494},{"a":false,"l":32,"u":945},{"a":false,"l":113,"u":874},{"a":true,"l":374,"u":468},{"a":false,"l":23,"u":244},{"a":false,"l":35,"u":605},{"a":false,"l":440,"u":948},{"a":false,"l":648,"u":942},{"a":true,"l":494,"u":829},{"a":true,"l":196,"u":209},{"a":false,"l":83,"u":620},{"a":true,"l":539,"u":815},{"a":false,"l":149,"u":996},{"a":true,"l":870,"u":977},{"a":true,"l":142,"u":385},{"a":false,"l":183,"u":782},{"a":false,"l":251,"u":543},{"a":false,"l":327,"u":976},{"a":false,"l":186,"u":819},{"a":true,"l":207,"u":610},{"a":true,"l":218,"u":453},{"a":false,"l":545,"u":830},{"a":false,"l":383,"u":779},{"a":true,"l":235,"u":788},{"a":true,"l":632,"u":910},{"a":false,"l":262,"u":471},{"a":true,"l":931,"u":941},{"a":true,"l":93,"u":487},{"a":true,"l":234,"u":873},{"a":true,"l":45,"u":592},{"a":true,"l":491,"u":541},{"a":false,"l":214,"u":717},{"a":true,"l":337,"u":978},{"a":false,"l":218,"u":779},{"a":true,"l":35,"u":430},{"a":false,"l":186,"u":336},{"a":false,"l":673,"u":817},{"a":false,"l":348,"u":890},{"a":true,"l":83,"u":660},{"a":true,"l":221,"u":579},{"a":true,"l":895,"u":898},{"a":true,"l":68,"u":517},{"a":true,"l":271,"u":685},{"a":false,"l":382,"u":908},{"a":true,"l":210,"u":423},{"a":false,"l":193,"u":938},{"a":false,"l":36,"u":717},{"a":true,"l":582,"u":835},{"a":true,"l":54,"u":112},{"a":true,"l":394,"u":951},{"a":false,"l":490,"u":519},{"a":false,"l":845,"u":978},{"a":true,"l":354,"u":537},{"a":true,"l":389,"u":708},{"a":true,"l":59,"u":432},{"a":true,"l":307,"u":906},{"a":false,"l":44,"u":320},{"a":true,"l":283,"u":435},{"a":true,"l":200,"u":245},{"a":true,"l":183,"u":860},{"a":true,"l":93,"u":265},{"a":false,"l":307,"u":553},{"a":true,"l":559,"u":577},{"a":false,"l":14,"u":110},{"a":true,"l":419,"u":718},{"a":false,"l":280,"u":505},{"a":false,"l":18,"u":181},{"a":true,"l":174,"u":540},{"a":false,"l":1,"u":340},{"a":false,"l":86,"u":932},{"a":false,"l":2,"u":690},{"a":true,"l":40,"u":422},{"a":true,"l":6,"u":333},{"a":false,"l":454,"u":973},{"a":true,"l":171,"u":194},{"a":true,"l":519,"u":895},{"a":false,"l":359,"u":577},{"a":true,"l":607,"u":743},{"a":false,"l":129,"u":944},{"a":false,"l":819,"u":985},{"a":false,"l":13,"u":183},{"a":true,"l":455,"u":515},{"a":true,"l":294,"u":774},{"a":false,"l":470,"u":731},{"a":false,"l":483,"u":721},{"a":false,"l":89,"u":917},{"a":true,"l":120,"u":984},{"a":true,"l":169,"u":258},{"a":false,"l":6,"u":115},{"a":false,"l":395,"u":636},{"a":false,"l":306,"u":555},{"a":false,"l":23,"u":336},{"a":true,"l":211,"u":355},{"a":false,"l":342,"u":838},{"a":true,"l":198,"u":697},{"a":true,"l":213,"u":494},{"a":true,"l":495,"u":695},{"a":false,"l":17,"u":345},{"a":true,"l":379,"u":975},{"a":false,"l":653,"u":703},{"a":true,"l":340,"u":756},{"a":false,"l":186,"u":264},{"a":true,"l":393,"u":495},{"a":false,"l":244,"u":710},{"a":false,"l":343,"u":813},{"a":false,"l":165,"u":200},{"a":false,"l":555,"u":871},{"a":false,"l":135,"u":280},{"a":true,"l":460,"u":724},{"a":true,"l":221,"u":807},{"a":true,"l":50,"u":101},{"a":true,"l":689,"u":776},{"a":false,"l":11,"u":809},{"a":true,"l":173,"u":698},{"a":false,"l":496,"u":912},{"a":true,"l":219,"u":975},{"a":false,"l":184,"u":630},{"a":true,"l":160,"u":930},{"a":true,"l":149,"u":157},{"a":false,"l":118,"u":880},{"a":true,"l":286,"u":908},{"a":true,"l":155,"u":977},{"a":true,"l":356,"u":839},{"a":true,"l":324,"u":398},{"a":false,"l":171,"u":882},{"a":false,"l":352,"u":591},{"a":false,"l":59,"u":431},{"a":true,"l":20,"u":409},{"a":false,"l":219,"u":224},{"a":false,"l":296,"u":430},{"a":false,"l":47,"u":806},{"a":false,"l":129,"u":618},{"a":true,"l":615,"u":985},{"a":true,"l":90,"u":691},{"a":false,"l":731,"u":942},{"a":false,"l":261,"u":389},{"a":false,"l":89,"u":286},{"a":false,"l":351,"u":433},{"a":true,"l":72,"u":293},{"a":true,"l":63,"u":962},{"a":true,"l":333,"u":693},{"a":false,"l":182,"u":209},{"a":true,"l":760,"u":893},{"a":true,"l":420,"u":572},{"a":true,"l":489,"u":731},{"a":false,"l":650,"u":673},{"a":false,"l":77,"u":230},{"a":true,"l":30,"u":276},{"a":true,"l":693,"u":914},{"a":false,"l":48,"u":832},{"a":true,"l":111,"u":531},{"a":false,"l":124,"u":824},{"a":true,"l":119,"u":397},{"a":false,"l":224,"u":319},{"a":true,"l":36,"u":969},{"a":true,"l":265,"u":606},{"a":false,"l":42,"u":298},{"a":true,"l":181,"u":458},{"a":true,"l":571,"u":789},{"a":true,"l":43,"u":108},{"a":false,"l":691,"u":997},{"a":true,"l":59,"u":936},{"a":false,"l":517,"u":987},{"a":false,"l":146,"u":415},{"a":true,"l":53,"u":727},{"a":true,"l":385,"u":461},{"a":true,"l":542,"u":822},{"a":true,"l":400,"u":917},{"a":true,"l":71,"u":729},{"a":true,"l":555,"u":556},{"a":false,"l":398,"u":945},{"a":true,"l":171,"u":440},{"a":false,"l":23,"u":690},{"a":true,"l":37,"u":703},{"a":true,"l":91,"u":768},{"a":false,"l":322,"u":910},{"a":true,"l":535,"u":896},{"a":true,"l":219,"u":617},{"a":false,"l":37,"u":453},{"a":false,"l":777,"u":844},{"a":false,"l":390,"u":574},{"a":true,"l":253,"u":646},{"a":true,"l":145,"u":232},{"a":true,"l":474,"u":739},{"a":true,"l":325,"u":554},{"a":true,"l":43,"u":542},{"a":true,"l":824,"u":862},{"a":true,"l":567,"u":892},{"a":false,"l":105,"u":882},{"a":false,"l":548,"u":631},{"a":true,"l":628,"u":778},{"a":false,"l":115,"u":610},{"a":true,"l":911,"u":967},{"a":false,"l":27,"u":368},{"a":true,"l":746,"u":942},{"a":true,"l":209,"u":361},{"a":true,"l":303,"u":701},{"a":false,"l":75,"u":797},{"a":false,"l":349,"u":607},{"a":false,"l":54,"u":286},{"a":false,"l":21,"u":253},{"a":true,"l":242,"u":332},{"a":false,"l":445,"u":816},{"a":true,"l":759,"u":811},{"a":false,"l":117,"u":293},{"a":true,"l":721,"u":806},{"a":true,"l":761,"u":876},{"a":true,"l":563,"u":988},{"a":true,"l":123,"u":973},{"a":false,"l":779,"u":800},{"a":true,"l":48,"u":773},{"a":true,"l":707,"u":801},{"a":true,"l":433,"u":838},{"a":true,"l":363,"u":504},{"a":true,"l":226,"u":637},{"a":true,"l":46,"u":694},{"a":true,"l":823,"u":865},{"a":true,"l":130,"u":244},{"a":false,"l":436,"u":673},{"a":true,"l":106,"u":200},{"a":true,"l":99,"u":405},{"a":false,"l":208,"u":429},{"a":true,"l":436,"u":975},{"a":false,"l":80,"u":973},{"a":false,"l":765,"u":899},{"a":true,"l":30,"u":913},{"a":false,"l":14,"u":382},{"a":true,"l":15,"u":518},{"a":false,"l":919,"u":938},{"a":true,"l":222,"u":428},{"a":true,"l":248,"u":396},{"a":true,"l":36,"u":946},{"a":true,"l":566,"u":672},{"a":false,"l":49,"u":673},{"a":true,"l":639,"u":702},{"a":true,"l":271,"u":919},{"a":false,"l":475,"u":648},{"a":true,"l":2,"u":426},{"a":true,"l":54,"u":620},{"a":false,"l":348,"u":995},{"a":true,"l":266,"u":845},{"a":true,"l":126,"u":145},{"a":false,"l":130,"u":557},{"a":false,"l":590,"u":801},{"a":false,"l":521,"u":773},{"a":false,"l":302,"u":740},{"a":true,"l":83,"u":898},{"a":false,"l":252,"u":620},{"a":false,"l":244,"u":401},{"a":true,"l":395,"u":968},{"a":false,"l":80,"u":676},{"a":true,"l":271,"u":669},{"a":false,"l":757,"u":862},{"a":false,"l":322,"u":919},{"a":false,"l":506,"u":659},{"a":false,"l":245,"u":883},{"a":true,"l":329,"u":807},{"a":false,"l":245,"u":635},{"a":true,"l":408,"u":523},{"a":true,"l":146,"u":449},{"a":false,"l":331,"u":924},{"a":true,"l":198,"u":348},{"a":true,"l":478,"u":971},{"a":false,"l":352,"u":550},{"a":true,"l":72,"u":414},{"a":true,"l":69,"u":248},{"a":false,"l":505,"u":627},{"a":false,"l":61,"u":175},{"a":false,"l":141,"u":398},{"a":true,"l":373,"u":641},{"a":false,"l":50,"u":368},{"a":true,"l":144,"u":693},{"a":true,"l":49,"u":960},{"a":false,"l":160,"u":621},{"a":false,"l":328,"u":436},{"a":true,"l":127,"u":178},{"a":false,"l":662,"u":806},{"a":true,"l":358,"u":893},{"a":true,"l":271,"u":917},{"a":false,"l":413,"u":436},{"a":true,"l":471,"u":944},{"a":false,"l":455,"u":528},{"a":false,"l":594,"u":914},{"a":true,"l":907,"u":914},{"a":false,"l":515,"u":650},{"a":true,"l":304,"u":392},{"a":false,"l":163,"u":240},{"a":false,"l":147,"u":845},{"a":false,"l":477,"u":974},{"a":false,"l":2,"u":172},{"a":false,"l":29,"u":324},{"a":false,"l":597,"u":777},{"a":true,"l":113,"u":662},{"a":false,"l":28,"u":264},{"a":false,"l":43,"u":780},{"a":true,"l":10,"u":560},{"a":true,"l":559,"u":697},{"a":false,"l":720,"u":806},{"a":true,"l":268,"u":612},{"a":false,"l":157,"u":608},{"a":false,"l":668,"u":742},{"a":true,"l":44,"u":859},{"a":true,"l":301,"u":832},{"a":true,"l":180,"u":957},{"a":false,"l":579,"u":871},{"a":true,"l":474,"u":959},{"a":false,"l":533,"u":803},{"a":true,"l":508,"u":863},{"a":true,"l":824,"u":999},{"a":true,"l":258,"u":360},{"a":true,"l":107,"u":798},{"a":true,"l":392,"u":536},{"a":true,"l":103,"u":907},{"a":true,"l":153,"u":420},{"a":true,"l":351,"u":801},{"a":false,"l":263,"u":669},{"a":false,"l":360,"u":738},{"a":true,"l":468,"u":547},{"a":true,"l":386,"u":394},{"a":true,"l":842,"u":952},{"a":true,"l":370,"u":530},{"a":true,"l":238,"u":423},{"a":false,"l":451,"u":651},{"a":true,"l":312,"u":764},{"a":true,"l":275,"u":347},{"a":false,"l":127,"u":332},{"a":false,"l":197,"u":443},{"a":false,"l":394,"u":487},{"a":true,"l":559,"u":805},{"a":false,"l":679,"u":848},{"a":false,"l":199,"u":554},{"a":true,"l":433,"u":466},{"a":true,"l":49,"u":499},{"a":true,"l":35,"u":676},{"a":false,"l":425,"u":829},{"a":true,"l":154,"u":392},{"a":false,"l":841,"u":933},{"a":false,"l":339,"u":550},{"a":false,"l":541,"u":769},{"a":false,"l":154,"u":198},{"a":true,"l":295,"u":360},{"a":false,"l":618,"u":684},{"a":false,"l":126,"u":975},{"a":false,"l":8,"u":399},{"a":true,"l":390,"u":801},{"a":true,"l":533,"u":949},{"a":false,"l":240,"u":912},{"a":true,"l":514,"u":737},{"a":true,"l":119,"u":729},{"a":false,"l":547,"u":799},{"a":true,"l":306,"u":901},{"a":false,"l":848,"u":876},{"a":false,"l":95,"u":136},{"a":true,"l":602,"u":816},{"a":true,"l":127,"u":944},{"a":true,"l":621,"u":774},{"a":false,"l":50,"u":972},{"a":false,"l":98,"u":525},{"a":true,"l":640,"u":885},{"a":true,"l":544,"u":819},{"a":true,"l":581,"u":715},{"a":true,"l":605,"u":824},{"a":true,"l":22,"u":483},{"a":false,"l":461,"u":775},{"a":true,"l":16,"u":465},{"a":true,"l":231,"u":945},{"a":false,"l":278,"u":357},{"a":false,"l":777,"u":880},{"a":true,"l":638,"u":833},{"a":true,"l":302,"u":872},{"a":false,"l":416,"u":863},{"a":false,"l":163,"u":454},{"a":true,"l":329,"u":993},{"a":false,"l":232,"u":451},{"a":true,"l":634,"u":901},{"a":false,"l":637,"u":855},{"a":false,"l":588,"u":784},{"a":false,"l":307,"u":940},{"a":true,"l":399,"u":478},{"a":true,"l":219,"u":407},{"a":true,"l":9,"u":757},{"a":false,"l":417,"u":900},{"a":false,"l":49,"u":528},{"a":false,"l":448,"u":905},{"a":false,"l":559,"u":854},{"a":true,"l":400,"u":908},{"a":true,"l":687,"u":701},{"a":false,"l":628,"u":983},{"a":true,"l":318,"u":810},{"a":false,"l":223,"u":585},{"a":true,"l":664,"u":955},{"a":true,"l":530,"u":720},{"a":true,"l":318,"u":364},{"a":true,"l":354,"u":371},{"a":false,"l":700,"u":872},{"a":false,"l":131,"u":234},{"a":false,"l":760,"u":926},{"a":false,"l":654,"u":894},{"a":false,"l":162,"u":860},{"a":false,"l":627,"u":954},{"a":false,"l":485,"u":723},{"a":false,"l":15,"u":25},{"a":true,"l":190,"u":906},{"a":true,"l":125,"u":711},{"a":true,"l":283,"u":750},{"a":false,"l":1,"u":737},{"a":true,"l":654,"u":970},{"a":true,"l":747,"u":876},{"a":true,"l":831,"u":855},{"a":false,"l":444,"u":589},{"a":true,"l":572,"u":770},{"a":false,"l":337,"u":974},{"a":true,"l":150,"u":546},{"a":true,"l":624,"u":898},{"a":true,"l":451,"u":982},{"a":false,"l":325,"u":954},{"a":true,"l":604,"u":972},{"a":false,"l":130,"u":487},{"a":false,"l":7,"u":828},{"a":false,"l":720,"u":737},{"a":true,"l":11,"u":320},{"a":false,"l":800,"u":934},{"a":true,"l":245,"u":367},{"a":false,"l":60,"u":854},{"a":false,"l":258,"u":322},{"a":true,"l":420,"u":598},{"a":false,"l":565,"u":850},{"a":true,"l":323,"u":804},{"a":false,"l":759,"u":879},{"a":true,"l":184,"u":382},{"a":false,"l":411,"u":929},{"a":true,"l":633,"u":719},{"a":false,"l":346,"u":857},{"a":false,"l":485,"u":824},{"a":false,"l":988,"u":994},{"a":false,"l":1,"u":436},{"a":true,"l":158,"u":808},{"a":false,"l":444,"u":819},{"a":true,"l":233,"u":635},{"a":false,"l":550,"u":551},{"a":true,"l":50,"u":540},{"a":false,"l":794,"u":818},{"a":true,"l":325,"u":637},{"a":false,"l":273,"u":358},{"a":true,"l":32,"u":98},{"a":true,"l":341,"u":915},{"a":true,"l":315,"u":519},{"a":true,"l":44,"u":742},{"a":true,"l":678,"u":910},{"a":false,"l":42,"u":517},{"a":false,"l":161,"u":300},{"a":true,"l":307,"u":925},{"a":false,"l":471,"u":954},{"a":false,"l":867,"u":900},{"a":false,"l":266,"u":994},{"a":false,"l":48,"u":641},{"a":true,"l":514,"u":938},{"a":false,"l":565,"u":753},{"a":false,"l":2,"u":872},{"a":false,"l":867,"u":882},{"a":true,"l":519,"u":756},{"a":false,"l":378,"u":581},{"a":true,"l":26,"u":826},{"a":false,"l":307,"u":947},{"a":false,"l":32,"u":82},{"a":false,"l":926,"u":973},{"a":true,"l":307,"u":556},{"a":true,"l":437,"u":791},{"a":true,"l":281,"u":788},{"a":false,"l":218,"u":661},{"a":false,"l":154,"u":772},{"a":true,"l":621,"u":967},{"a":false,"l":400,"u":432},{"a":false,"l":405,"u":500},{"a":false,"l":52,"u":944},{"a":true,"l":68,"u":347},{"a":true,"l":549,"u":808},{"a":true,"l":522,"u":852},{"a":true,"l":685,"u":970},{"a":false,"l":55,"u":371},{"a":true,"l":389,"u":404},{"a":false,"l":548,"u":971},{"a":false,"l":108,"u":542},{"a":false,"l":165,"u":641},{"a":false,"l":262,"u":524},{"a":false,"l":309,"u":656},{"a":false,"l":98,"u":179},{"a":true,"l":206,"u":565},{"a":true,"l":86,"u":437},{"a":false,"l":343,"u":972},{"a":true,"l":746,"u":929},{"a":false,"l":619,"u":942},{"a":false,"l":212,"u":373},{"a":true,"l":643,"u":734},{"a":false,"l":879,"u":949},{"a":false,"l":230,"u":700},{"a":true,"l":111,"u":984},{"a":false,"l":177,"u":627},{"a":true,"l":226,"u":507},{"a":false,"l":98,"u":344},{"a":false,"l":318,"u":632},{"a":false,"l":737,"u":890},{"a":false,"l":56,"u":596},{"a":true,"l":481,"u":781},{"a":false,"l":173,"u":480},{"a":false,"l":461,"u":679},{"a":false,"l":172,"u":414},{"a":false,"l":191,"u":193},{"a":true,"l":410,"u":648},{"a":false,"l":291,"u":813},{"a":false,"l":238,"u":772},{"a":true,"l":489,"u":833},{"a":false,"l":416,"u":987},{"a":false,"l":322,"u":429},{"a":false,"l":87,"u":302},{"a":true,"l":603,"u":952},{"a":false,"l":443,"u":966},{"a":true,"l":470,"u":904},{"a":false,"l":30,"u":949},{"a":false,"l":829,"u":907},{"a":false,"l":213,"u":579},{"a":true,"l":375,"u":552},{"a":true,"l":113,"u":479},{"a":true,"l":149,"u":944},{"a":false,"l":630,"u":738},{"a":true,"l":120,"u":913},{"a":false,"l":172,"u":970},{"a":false,"l":424,"u":643},{"a":false,"l":259,"u":466},{"a":false,"l":198,"u":813},{"a":false,"l":248,"u":508},{"a":false,"l":47,"u":868},{"a":false,"l":364,"u":728},{"a":false,"l":86,"u":169},{"a":false,"l":162,"u":702},{"a":false,"l":200,"u":929},{"a":true,"l":37,"u":847},{"a":false,"l":296,"u":462},{"a":false,"l":36,"u":334},{"a":false,"l":331,"u":540},{"a":false,"l":315,"u":653},{"a":true,"l":114,"u":426},{"a":false,"l":481,"u":898},{"a":true,"l":35,"u":375},{"a":false,"l":205,"u":235},{"a":true,"l":102,"u":862},{"a":false,"l":606,"u":861},{"a":false,"l":331,"u":810},{"a":true,"l":400,"u":815},{"a":false,"l":20,"u":696},{"a":true,"l":185,"u":928},{"a":false,"l":244,"u":714},{"a":true,"l":266,"u":762},{"a":false,"l":257,"u":631},{"a":true,"l":221,"u":727},{"a":true,"l":473,"u":764},{"a":true,"l":646,"u":855},{"a":false,"l":313,"u":990},{"a":true,"l":651,"u":766},{"a":false,"l":19,"u":152},{"a":true,"l":221,"u":468},{"a":false,"l":628,"u":868},{"a":true,"l":857,"u":960},{"a":false,"l":358,"u":870},{"a":true,"l":335,"u":540},{"a":false,"l":783,"u":934},{"a":true,"l":111,"u":144},{"a":false,"l":256,"u":583},{"a":false,"l":70,"u":820},{"a":false,"l":394,"u":562},{"a":true,"l":613,"u":676},{"a":true,"l":192,"u":668},{"a":false,"l":249,"u":676},{"a":true,"l":688,"u":986},{"a":false,"l":336,"u":949},{"a":true,"l":430,"u":640},{"a":false,"l":202,"u":579},{"a":true,"l":468,"u":550},{"a":true,"l":199,"u":478},{"a":true,"l":390,"u":830},{"a":false,"l":374,"u":726},{"a":true,"l":237,"u":381},{"a":true,"l":297,"u":989},{"a":true,"l":279,"u":402},{"a":false,"l":177,"u":917},{"a":true,"l":67,"u":125},{"a":true,"l":7,"u":998},{"a":true,"l":94,"u":176},{"a":false,"l":287,"u":856},{"a":true,"l":556,"u":842},{"a":true,"l":617,"u":746},{"a":false,"l":81,"u":170},{"a":true,"l":710,"u":972},{"a":true,"l":594,"u":855},{"a":true,"l":452,"u":750},{"a":false,"l":41,"u":957},{"a":false,"l":359,"u":490},{"a":false,"l":718,"u":883},{"a":true,"l":148,"u":210},{"a":true,"l":256,"u":665},{"a":false,"l":39,"u":875},{"a":false,"l":67,"u":958},{"a":false,"l":392,"u":880},{"a":false,"l":244,"u":883},{"a":false,"l":252,"u":976},{"a":true,"l":16,"u":31},{"a":true,"l":552,"u":555},{"a":false,"l":359,"u":898},{"a":false,"l":477,"u":577},{"a":true,"l":229,"u":770},{"a":false,"l":286,"u":334},{"a":true,"l":156,"u":411},{"a":false,"l":606,"u":684},{"a":false,"l":371,"u":601},{"a":false,"l":315,"u":683},{"a":false,"l":411,"u":759},{"a":false,"l":130,"u":168},{"a":false,"l":367,"u":447},{"a":true,"l":835,"u":850},{"a":false,"l":122,"u":448},{"a":false,"l":742,"u":912},{"a":true,"l":747,"u":804},{"a":false,"l":609,"u":846},{"a":true,"l":460,"u":568},{"a":false,"l":59,"u":793},{"a":true,"l":677,"u":859},{"a":true,"l":258,"u":969},{"a":true,"l":201,"u":965},{"a":true,"l":28,"u":778},{"a":false,"l":32,"u":903},{"a":false,"l":153,"u":369},{"a":true,"l":269,"u":941},{"a":true,"l":431,"u":529},{"a":true,"l":444,"u":545},{"a":true,"l":140,"u":550},{"a":false,"l":362,"u":661},{"a":true,"l":174,"u":665},{"a":false,"l":51,"u":558},{"a":true,"l":183,"u":386},{"a":true,"l":8,"u":436},{"a":true,"l":330,"u":999},{"a":false,"l":106,"u":566},{"a":true,"l":181,"u":666},{"a":true,"l":495,"u":659},{"a":true,"l":759,"u":850},{"a":false,"l":245,"u":955},{"a":false,"l":80,"u":495},{"a":false,"l":424,"u":833},{"a":true,"l":13,"u":391},{"a":false,"l":61,"u":780},{"a":true,"l":629,"u":934},{"a":true,"l":793,"u":985},{"a":true,"l":16,"u":791},{"a":false,"l":366,"u":607},{"a":false,"l":130,"u":996},{"a":true,"l":51,"u":641},{"a":true,"l":456,"u":688},{"a":false,"l":380,"u":841},{"a":true,"l":13,"u":916},{"a":true,"l":368,"u":709},{"a":false,"l":469,"u":475},{"a":false,"l":229,"u":328},{"a":false,"l":493,"u":735},{"a":true,"l":122,"u":263},{"a":true,"l":354,"u":668},{"a":true,"l":637,"u":905},{"a":false,"l":94,"u":288},{"a":true,"l":171,"u":551},{"a":true,"l":582,"u":817},{"a":true,"l":722,"u":830},{"a":false,"l":445,"u":605},{"a":true,"l":254,"u":481},{"a":false,"l":517,"u":682},{"a":false,"l":20,"u":310},{"a":false,"l":236,"u":951},{"a":true,"l":312,"u":503},{"a":false,"l":56,"u":464},{"a":true,"l":521,"u":984},{"a":true,"l":455,"u":914},{"a":true,"l":408,"u":923},{"a":true,"l":804,"u":859},{"a":true,"l":214,"u":489},{"a":false,"l":193,"u":725},{"a":false,"l":693,"u":838},{"a":true,"l":159,"u":960},{"a":true,"l":790,"u":857},{"a":true,"l":87,"u":135},{"a":false,"l":138,"u":737},{"a":true,"l":74,"u":457},{"a":true,"l":452,"u":482},{"a":true,"l":140,"u":404},{"a":true,"l":241,"u":501},{"a":false,"l":363,"u":765},{"a":true,"l":661,"u":732},{"a":true,"l":543,"u":927},{"a":false,"l":44,"u":388},{"a":true,"l":561,"u":716},{"a":true,"l":604,"u":614},{"a":false,"l":362,"u":565},{"a":true,"l":12,"u":896},{"a":false,"l":772,"u":860},{"a":false,"l":155,"u":217},{"a":false,"l":548,"u":662},{"a":true,"l":577,"u":948},{"a":true,"l":370,"u":948},{"a":true,"l":295,"u":462},{"a":false,"l":353,"u":633},{"a":false,"l":371,"u":422},{"a":true,"l":375,"u":997},{"a":true,"l":195,"u":664},{"a":false,"l":440,"u":761},{"a":true,"l":19,"u":74},{"a":true,"l":191,"u":384},{"a":true,"l":663,"u":767},{"a":true,"l":295,"u":718},{"a":true,"l":250,"u":827},{"a":false,"l":377,"u":702},{"a":false,"l":272,"u":743},{"a":true,"l":158,"u":612},{"a":true,"l":13,"u":411},{"a":true,"l":452,"u":710},{"a":true,"l":453,"u":777},{"a":true,"l":496,"u":625},{"a":true,"l":195,"u":323},{"a":true,"l":271,"u":947},{"a":true,"l":77,"u":685},{"a":false,"l":37,"u":234},{"a":false,"l":700,"u":878},{"a":true,"l":645,"u":815},{"a":false,"l":36,"u":558},{"a":false,"l":317,"u":757},{"a":true,"l":704,"u":838},{"a":true,"l":41,"u":784},{"a":true,"l":35,"u":93},{"a":false,"l":188,"u":776},{"a":false,"l":36,"u":564},{"a":true,"l":476,"u":816},{"a":false,"l":390,"u":648},{"a":false,"l":62,"u":101},{"a":true,"l":63,"u":971},{"a":false,"l":588,"u":976},{"a":false,"l":11,"u":18},{"a":true,"l":58,"u":617},{"a":true,"l":145,"u":566},{"a":false,"l":109,"u":713},{"a":false,"l":509,"u":720},{"a":false,"l":210,"u":231},{"a":true,"l":887,"u":906},{"a":false,"l":74,"u":938},{"a":false,"l":168,"u":911},{"a":true,"l":210,"u":258},{"a":true,"l":538,"u":763},{"a":true,"l":394,"u":521},{"a":false,"l":247,"u":918},{"a":false,"l":315,"u":543},{"a":false,"l":389,"u":468},{"a":true,"l":92,"u":286},{"a":false,"l":310,"u":653},{"a":false,"l":205,"u":785},{"a":false,"l":819,"u":942},{"a":true,"l":210,"u":445},{"a":false,"l":308,"u":654},{"a":true,"l":120,"u":786},{"a":false,"l":762,"u":991},{"a":true,"l":673,"u":822},{"a":false,"l":411,"u":797},{"a":true,"l":478,"u":909},{"a":false,"l":113,"u":493},{"a":true,"l":209,"u":749},{"a":true,"l":473,"u":837},{"a":true,"l":494,"u":656},{"a":false,"l":421,"u":606},{"a":true,"l":439,"u":792},{"a":true,"l":618,"u":699},{"a":true,"l":45,"u":445},{"a":true,"l":385,"u":566},{"a":false,"l":673,"u":896},{"a":false,"l":485,"u":915},{"a":true,"l":436,"u":905},{"a":false,"l":78,"u":861},{"a":false,"l":135,"u":565},{"a":true,"l":228,"u":806},{"a":false,"l":479,"u":948},{"a":false,"l":578,"u":580},{"a":true,"l":660,"u":668},{"a":false,"l":34,"u":176},{"a":true,"l":531,"u":745},{"a":true,"l":420,"u":873},{"a":false,"l":263,"u":495},{"a":false,"l":10,"u":378},{"a":true,"l":75,"u":203},{"a":false,"l":41,"u":740},{"a":false,"l":647,"u":934},{"a":true,"l":143,"u":284},{"a":false,"l":344,"u":545},{"a":true,"l":350,"u":573},{"a":true,"l":78,"u":137},{"a":false,"l":12,"u":382},{"a":false,"l":202,"u":746},{"a":false,"l":666,"u":820},{"a":false,"l":145,"u":953},{"a":false,"l":295,"u":556},{"a":true,"l":538,"u":757},{"a":true,"l":876,"u":928},{"a":false,"l":188,"u":305},{"a":true,"l":12,"u":129},{"a":false,"l":200,"u":662},{"a":true,"l":689,"u":899},{"a":false,"l":322,"u":333},{"a":true,"l":454,"u":846},{"a":false,"l":222,"u":737},{"a":false,"l":538,"u":936},{"a":true,"l":313,"u":385},{"a":true,"l":174,"u":327},{"a":false,"l":179,"u":626},{"a":true,"l":561,"u":970},{"a":true,"l":653,"u":730},{"a":true,"l":50,"u":715},{"a":true,"l":574,"u":730},{"a":false,"l":380,"u":782},{"a":true,"l":387,"u":399},{"a":false,"l":681,"u":785},{"a":false,"l":656,"u":965},{"a":true,"l":614,"u":955},{"a":false,"l":601,"u":736},{"a":true,"l":394,"u":674},{"a":false,"l":664,"u":709},{"a":false,"l":543,"u":574},{"a":false,"l":191,"u":272},{"a":true,"l":394,"u":489},{"a":false,"l":305,"u":791},{"a":false,"l":576,"u":955},{"a":false,"l":13,"u":983},{"a":true,"l":26,"u":204},{"a":true,"l":220,"u":811},{"a":false,"l":385,"u":752},{"a":false,"l":3,"u":670},{"a":false,"l":546,"u":580},{"a":true,"l":56,"u":588},{"a":true,"l":354,"u":729},{"a":false,"l":78,"u":923},{"a":true,"l":139,"u":760},{"a":false,"l":507,"u":560},{"a":true,"l":917,"u":925},{"a":false,"l":542,"u":684},{"a":true,"l":30,"u":174},{"a":false,"l":250,"u":841},{"a":true,"l":64,"u":183},{"a":true,"l":325,"u":836},{"a":true,"l":479,"u":605},{"a":true,"l":731,"u":772},{"a":true,"l":223,"u":940},{"a":false,"l":202,"u":828},{"a":false,"l":365,"u":401},{"a":false,"l":115,"u":681},{"a":false,"l":720,"u":956},{"a":false,"l":183,"u":484},{"a":false,"l":255,"u":778},{"a":true,"l":327,"u":753},{"a":false,"l":711,"u":954},{"a":false,"l":540,"u":622},{"a":false,"l":744,"u":775},{"a":true,"l":180,"u":395},{"a":true,"l":724,"u":839},{"a":true,"l":879,"u":918},{"a":true,"l":111,"u":756},{"a":true,"l":354,"u":623},{"a":false,"l":436,"u":592},{"a":false,"l":773,"u":777},{"a":false,"l":177,"u":500},{"a":true,"l":427,"u":791},{"a":false,"l":201,"u":617},{"a":false,"l":231,"u":729},{"a":true,"l":337,"u":763},{"a":false,"l":470,"u":627},{"a":true,"l":7,"u":640},{"a":true,"l":185,"u":252},{"a":true,"l":209,"u":879},{"a":true,"l":723,"u":937},{"a":false,"l":688,"u":720},{"a":true,"l":620,"u":720},{"a":false,"l":129,"u":264},{"a":false,"l":707,"u":760},{"a":true,"l":84,"u":299},{"a":true,"l":809,"u":894},{"a":false,"l":332,"u":573},{"a":true,"l":85,"u":509},{"a":false,"l":240,"u":825},{"a":false,"l":192,"u":432},{"a":true,"l":581,"u":865},{"a":true,"l":180,"u":714},{"a":true,"l":71,"u":465},{"a":false,"l":443,"u":566},{"a":false,"l":288,"u":369},{"a":true,"l":185,"u":884},{"a":true,"l":77,"u":153},{"a":true,"l":52,"u":323},{"a":true,"l":431,"u":720},{"a":true,"l":246,"u":745},{"a":false,"l":548,"u":740},{"a":false,"l":470,"u":939},{"a":false,"l":569,"u":603},{"a":false,"l":427,"u":646},{"a":true,"l":701,"u":791},{"a":true,"l":294,"u":971},{"a":false,"l":426,"u":612},{"a":true,"l":185,"u":326},{"a":true,"l":673,"u":970},{"a":false,"l":218,"u":355},{"a":true,"l":268,"u":843},{"a":false,"l":600,"u":929},{"a":true,"l":251,"u":939},{"a":false,"l":450,"u":673},{"a":true,"l":195,"u":458},{"a":true,"l":591,"u":739},{"a":true,"l":196,"u":904},{"a":false,"l":702,"u":827},{"a":true,"l":316,"u":536},{"a":false,"l":154,"u":705},{"a":false,"l":362,"u":989},{"a":true,"l":603,"u":945},{"a":false,"l":273,"u":489},{"a":true,"l":492,"u":581},{"a":true,"l":260,"u":885},{"a":false,"l":120,"u":255},{"a":true,"l":819,"u":956},{"a":false,"l":771,"u":893},{"a":true,"l":448,"u":875},{"a":false,"l":149,"u":321},{"a":false,"l":425,"u":616},{"a":true,"l":339,"u":391},{"a":false,"l":150,"u":401},{"a":true,"l":927,"u":987},{"a":true,"l":146,"u":368},{"a":false,"l":843,"u":910},{"a":false,"l":142,"u":884},{"a":true,"l":139,"u":654},{"a":true,"l":101,"u":511},{"a":true,"l":242,"u":446},{"a":false,"l":110,"u":273},{"a":true,"l":328,"u":913},{"a":false,"l":556,"u":948},{"a":true,"l":171,"u":768},{"a":false,"l":176,"u":339},{"a":true,"l":54,"u":726},{"a":true,"l":102,"u":505},{"a":true,"l":675,"u":972},{"a":true,"l":379,"u":501},{"a":true,"l":796,"u":952},{"a":true,"l":201,"u":862},{"a":true,"l":271,"u":742},{"a":true,"l":190,"u":572},{"a":false,"l":469,"u":774},{"a":true,"l":282,"u":726},{"a":true,"l":112,"u":787},{"a":false,"l":598,"u":718},{"a":true,"l":240,"u":338},{"a":true,"l":231,"u":327},{"a":false,"l":301,"u":520},{"a":true,"l":247,"u":882},{"a":false,"l":472,"u":505},{"a":false,"l":385,"u":567},{"a":false,"l":323,"u":879},{"a":true,"l":181,"u":798},{"a":true,"l":385,"u":905},{"a":true,"l":492,"u":825},{"a":true,"l":43,"u":877},{"a":true,"l":152,"u":590},{"a":true,"l":258,"u":608},{"a":false,"l":133,"u":981},{"a":false,"l":148,"u":457},{"a":true,"l":53,"u":787},{"a":false,"l":111,"u":363},{"a":false,"l":213,"u":398},{"a":false,"l":212,"u":676},{"a":false,"l":462,"u":736},{"a":false,"l":115,"u":395},{"a":false,"l":118,"u":878},{"a":false,"l":20,"u":794},{"a":false,"l":340,"u":879},{"a":true,"l":291,"u":712},{"a":false,"l":164,"u":883},{"a":false,"l":875,"u":977},{"a":false,"l":97,"u":269},{"a":true,"l":812,"u":886},{"a":true,"l":225,"u":680},{"a":false,"l":345,"u":650},{"a":false,"l":561,"u":750},{"a":true,"l":32,"u":50},{"a":false,"l":245,"u":949},{"a":true,"l":48,"u":101},{"a":false,"l":61,"u":338},{"a":false,"l":46,"u":969},{"a":false,"l":88,"u":279},{"a":false,"l":7,"u":13},{"a":true,"l":515,"u":745},{"a":false,"l":245,"u":299},{"a":true,"l":177,"u":800},{"a":true,"l":325,"u":912},{"a":false,"l":845,"u":894},{"a":false,"l":479,"u":532},{"a":false,"l":425,"u":690},{"a":true,"l":264,"u":636},{"a":true,"l":157,"u":666},{"a":true,"l":692,"u":826},{"a":true,"l":11,"u":154},{"a":false,"l":102,"u":488},{"a":false,"l":224,"u":636},{"a":true,"l":377,"u":916},{"a":true,"l":21,"u":333},{"a":false,"l":183,"u":603},{"a":true,"l":116,"u":333},{"a":true,"l":595,"u":770},{"a":true,"l":830,"u":953},{"a":false,"l":164,"u":714},{"a":true,"l":296,"u":633},{"a":true,"l":598,"u":937},{"a":true,"l":416,"u":771},{"a":false,"l":44,"u":832},{"a":false,"l":803,"u":909},{"a":false,"l":431,"u":816},{"a":false,"l":40,"u":486},{"a":true,"l":284,"u":335},{"a":false,"l":111,"u":467},{"a":true,"l":815,"u":884},{"a":true,"l":370,"u":878},{"a":true,"l":10,"u":412},{"a":false,"l":213,"u":568},{"a":false,"l":365,"u":590},{"a":false,"l":388,"u":599},{"a":false,"l":53,"u":760},{"a":false,"l":571,"u":876},{"a":true,"l":805,"u":938},{"a":false,"l":64,"u":690},{"a":true,"l":385,"u":438},{"a":true,"l":206,"u":967},{"a":true,"l":243,"u":373},{"a":true,"l":643,"u":928},{"a":false,"l":307,"u":496},{"a":false,"l":84,"u":937},{"a":false,"l":499,"u":779},{"a":true,"l":694,"u":873},{"a":false,"l":54,"u":150},{"a":false,"l":25,"u":450},{"a":true,"l":304,"u":924},{"a":false,"l":95,"u":630},{"a":false,"l":276,"u":307},{"a":true,"l":193,"u":676},{"a":false,"l":119,"u":551},{"a":false,"l":228,"u":538},{"a":false,"l":68,"u":963},{"a":true,"l":510,"u":540},{"a":true,"l":192,"u":752},{"a":false,"l":442,"u":464},{"a":true,"l":302,"u":763},{"a":false,"l":168,"u":823},{"a":true,"l":61,"u":76},{"a":true,"l":15,"u":487},{"a":false,"l":489,"u":713},{"a":true,"l":428,"u":656},{"a":false,"l":757,"u":955},{"a":false,"l":759,"u":875},{"a":true,"l":649,"u":733},{"a":true,"l":254,"u":306},{"a":true,"l":299,"u":722},{"a":false,"l":77,"u":865},{"a":true,"l":341,"u":436},{"a":true,"l":408,"u":575},{"a":false,"l":89,"u":590},{"a":false,"l":124,"u":379},{"a":false,"l":752,"u":931},{"a":true,"l":223,"u":986},{"a":true,"l":174,"u":474},{"a":true,"l":204,"u":696},{"a":true,"l":712,"u":985},{"a":true,"l":45,"u":594},{"a":false,"l":171,"u":836},{"a":true,"l":554,"u":563},{"a":false,"l":45,"u":869},{"a":false,"l":909,"u":947},{"a":true,"l":205,"u":730},{"a":false,"l":420,"u":656},{"a":false,"l":318,"u":361},{"a":true,"l":471,"u":558},{"a":true,"l":45,"u":120},{"a":true,"l":317,"u":872},{"a":true,"l":237,"u":840},{"a":true,"l":340,"u":841},{"a":false,"l":585,"u":879},{"a":true,"l":93,"u":804},{"a":false,"l":325,"u":502},{"a":true,"l":742,"u":917},{"a":false,"l":826,"u":856},{"a":true,"l":468,"u":804},{"a":true,"l":625,"u":972},{"a":true,"l":676,"u":882},{"a":true,"l":561,"u":575},{"a":true,"l":451,"u":956},{"a":true,"l":660,"u":708},{"a":true,"l":408,"u":426},{"a":false,"l":307,"u":501},{"a":true,"l":180,"u":438},{"a":false,"l":311,"u":424},{"a":true,"l":156,"u":798},{"a":false,"l":391,"u":853},{"a":false,"l":769,"u":855},{"a":false,"l":167,"u":652},{"a":true,"l":427,"u":669},{"a":false,"l":767,"u":872},{"a":false,"l":273,"u":379},{"a":false,"l":764,"u":957},{"a":true,"l":258,"u":882},{"a":true,"l":352,"u":482},{"a":false,"l":401,"u":936},{"a":true,"l":440,"u":656},{"a":false,"l":259,"u":536},{"a":true,"l":543,"u":759},{"a":true,"l":186,"u":220},{"a":true,"l":176,"u":757},{"a":true,"l":684,"u":845},{"a":true,"l":517,"u":876},{"a":false,"l":213,"u":353},{"a":true,"l":883,"u":981},{"a":false,"l":166,"u":453},{"a":false,"l":335,"u":637},{"a":false,"l":10,"u":866},{"a":true,"l":572,"u":966},{"a":true,"l":447,"u":959},{"a":false,"l":553,"u":877},{"a":false,"l":52,"u":112},{"a":false,"l":260,"u":427},{"a":false,"l":784,"u":790},{"a":true,"l":224,"u":684},{"a":false,"l":590,"u":831},{"a":false,"l":226,"u":508},{"a":false,"l":372,"u":537},{"a":false,"l":95,"u":490},{"a":true,"l":519,"u":927},{"a":true,"l":263,"u":437},{"a":false,"l":882,"u":897},{"a":true,"l":117,"u":947},{"a":true,"l":318,"u":724},{"a":false,"l":426,"u":525},{"a":true,"l":40,"u":827},{"a":false,"l":418,"u":829},{"a":true,"l":281,"u":401},{"a":true,"l":397,"u":916},{"a":false,"l":223,"u":971},{"a":false,"l":110,"u":661},{"a":true,"l":196,"u":368},{"a":true,"l":549,"u":830},{"a":true,"l":257,"u":683},{"a":false,"l":622,"u":691},{"a":true,"l":204,"u":791},{"a":false,"l":934,"u":935},{"a":false,"l":757,"u":967},{"a":false,"l":322,"u":885},{"a":true,"l":135,"u":266},{"a":true,"l":59,"u":903},{"a":false,"l":395,"u":506},{"a":true,"l":885,"u":895},{"a":true,"l":103,"u":659},{"a":true,"l":142,"u":588},{"a":false,"l":203,"u":325},{"a":false,"l":109,"u":656},{"a":false,"l":410,"u":858},{"a":false,"l":264,"u":876},{"a":true,"l":37,"u":808},{"a":false,"l":560,"u":806},{"a":false,"l":87,"u":800},{"a":false,"l":603,"u":690},{"a":true,"l":1,"u":929},{"a":false,"l":694,"u":934},{"a":true,"l":196,"u":600},{"a":true,"l":449,"u":866},{"a":false,"l":626,"u":896},{"a":false,"l":412,"u":958},{"a":true,"l":345,"u":531},{"a":true,"l":250,"u":842},{"a":true,"l":183,"u":303},{"a":true,"l":145,"u":416},{"a":false,"l":437,"u":547},{"a":true,"l":498,"u":677},{"a":true,"l":449,"u":571},{"a":true,"l":349,"u":886},{"a":true,"l":246,"u":464},{"a":true,"l":378,"u":846},{"a":false,"l":687,"u":774},{"a":true,"l":143,"u":532},{"a":true,"l":882,"u":995},{"a":true,"l":584,"u":812},{"a":false,"l":192,"u":226},{"a":false,"l":656,"u":875},{"a":false,"l":335,"u":406},{"a":true,"l":752,"u":818},{"a":true,"l":1,"u":605},{"a":false,"l":303,"u":745},{"a":true,"l":575,"u":871},{"a":true,"l":222,"u":315},{"a":true,"l":620,"u":639},{"a":false,"l":542,"u":661},{"a":false,"l":527,"u":649},{"a":false,"l":533,"u":760},{"a":true,"l":43,"u":307},{"a":true,"l":383,"u":790},{"a":true,"l":538,"u":686},{"a":true,"l":252,"u":662},{"a":false,"l":175,"u":545},{"a":false,"l":591,"u":989},{"a":true,"l":317,"u":891},{"a":true,"l":154,"u":429},{"a":false,"l":791,"u":877},{"a":false,"l":94,"u":966},{"a":false,"l":156,"u":813},{"a":true,"l":112,"u":236},{"a":true,"l":805,"u":932},{"a":true,"l":616,"u":781},{"a":false,"l":388,"u":993},{"a":true,"l":8,"u":424},{"a":true,"l":76,"u":191},{"a":false,"l":366,"u":715},{"a":false,"l":263,"u":495},{"a":false,"l":484,"u":497},{"a":true,"l":290,"u":581},{"a":true,"l":636,"u":771},{"a":true,"l":536,"u":828},{"a":true,"l":227,"u":713},{"a":true,"l":351,"u":920},{"a":false,"l":9,"u":221},{"a":true,"l":123,"u":408},{"a":false,"l":451,"u":699},{"a":true,"l":832,"u":842},{"a":true,"l":145,"u":706},{"a":true,"l":525,"u":799},{"a":false,"l":216,"u":583},{"a":true,"l":24,"u":889},{"a":true,"l":567,"u":707},{"a":true,"l":160,"u":552},{"a":true,"l":707,"u":856},{"a":true,"l":506,"u":883},{"a":false,"l":345,"u":528},{"a":true,"l":217,"u":764},{"a":true,"l":529,"u":912},{"a":false,"l":955,"u":977},{"a":false,"l":280,"u":923},{"a":false,"l":775,"u":993},{"a":true,"l":278,"u":808},{"a":false,"l":81,"u":228},{"a":true,"l":148,"u":824},{"a":false,"l":370,"u":709},{"a":false,"l":41,"u":583},{"a":true,"l":245,"u":441},{"a":true,"l":231,"u":531},{"a":false,"l":449,"u":466},{"a":true,"l":610,"u":900},{"a":false,"l":414,"u":678},{"a":true,"l":144,"u":457},{"a":false,"l":161,"u":660},{"a":false,"l":23,"u":458},{"a":true,"l":418,"u":629},{"a":true,"l":9,"u":252},{"a":false,"l":85,"u":586},{"a":true,"l":283,"u":384},{"a":true,"l":254,"u":605},{"a":true,"l":636,"u":884},{"a":false,"l":286,"u":340},{"a":true,"l":1,"u":485},{"a":false,"l":63,"u":793},{"a":true,"l":145,"u":581},{"a":false,"l":831,"u":959},{"a":false,"l":738,"u":950},{"a":true,"l":119,"u":798},{"a":false,"l":325,"u":437},{"a":true,"l":18,"u":407},{"a":false,"l":175,"u":952},{"a":false,"l":625,"u":883},{"a":true,"l":551,"u":729},{"a":false,"l":6,"u":625},{"a":false,"l":335,"u":648},{"a":true,"l":220,"u":537},{"a":false,"l":160,"u":498},{"a":true,"l":155,"u":796},{"a":false,"l":166,"u":984},{"a":false,"l":259,"u":670},{"a":false,"l":59,"u":234},{"a":false,"l":135,"u":331},{"a":true,"l":743,"u":747},{"a":false,"l":176,"u":940},{"a":false,"l":206,"u":746},{"a":false,"l":428,"u":524},{"a":false,"l":45,"u":367},{"a":false,"l":74,"u":94},{"a":false,"l":402,"u":644},{"a":true,"l":418,"u":669},{"a":false,"l":372,"u":971},{"a":true,"l":493,"u":930},{"a":false,"l":9,"u":598},{"a":true,"l":84,"u":737},{"a":true,"l":935,"u":946},{"a":false,"l":231,"u":486},{"a":true,"l":444,"u":968},{"a":true,"l":262,"u":898},{"a":false,"l":85,"u":184},{"a":false,"l":381,"u":567},{"a":true,"l":708,"u":725},{"a":false,"l":273,"u":600},{"a":true,"l":308,"u":431},{"a":false,"l":146,"u":240},{"a":true,"l":241,"u":335},{"a":true,"l":231,"u":444},{"a":false,"l":210,"u":915},{"a":false,"l":343,"u":389},{"a":true,"l":33,"u":951},{"a":false,"l":420,"u":890},{"a":true,"l":83,"u":503},{"a":true,"l":596,"u":951},{"a":true,"l":715,"u":876},{"a":false,"l":19,"u":554},{"a":false,"l":735,"u":762},{"a":true,"l":434,"u":877},{"a":true,"l":98,"u":801},{"a":false,"l":75,"u":731},{"a":true,"l":259,"u":261},{"a":true,"l":217,"u":850},{"a":false,"l":73,"u":698},{"a":true,"l":685,"u":804},{"a":true,"l":637,"u":716},{"a":true,"l":781,"u":887},{"a":true,"l":124,"u":587},{"a":true,"l":424,"u":923},{"a":false,"l":498,"u":690},{"a":false,"l":721,"u":963},{"a":false,"l":405,"u":617},{"a":false,"l":202,"u":710},{"a":false,"l":594,"u":829},{"a":false,"l":374,"u":447},{"a":false,"l":240,"u":635},{"a":true,"l":712,"u":912},{"a":true,"l":222,"u":268},{"a":true,"l":381,"u":717},{"a":true,"l":3,"u":147},{"a":true,"l":471,"u":794},{"a":true,"l":710,"u":954},{"a":true,"l":235,"u":639},{"a":true,"l":183,"u":188},{"a":false,"l":347,"u":456},{"a":false,"l":189,"u":569},{"a":false,"l":333,"u":510},{"a":true,"l":158,"u":314},{"a":false,"l":76,"u":434},{"a":false,"l":349,"u":885},{"a":false,"l":734,"u":928},{"a":true,"l":258,"u":945},{"a":true,"l":318,"u":797},{"a":true,"l":341,"u":468},{"a":false,"l":101,"u":808},{"a":false,"l":309,"u":794},{"a":false,"l":488,"u":590},{"a":false,"l":289,"u":554},{"a":false,"l":140,"u":431},{"a":false,"l":333,"u":537},{"a":true,"l":14,"u":528},{"a":false,"l":537,"u":543},{"a":true,"l":59,"u":540},{"a":true,"l":179,"u":363},{"a":false,"l":478,"u":793},{"a":false,"l":122,"u":447},{"a":true,"l":49,"u":640},{"a":true,"l":16,"u":689},{"a":true,"l":31,"u":440},{"a":true,"l":311,"u":719},{"a":true,"l":673,"u":953},{"a":false,"l":27,"u":821},{"a":false,"l":530,"u":852},{"a":false,"l":607,"u":771},{"a":false,"l":189,"u":847},{"a":true,"l":665,"u":737},{"a":false,"l":342,"u":905},{"a":true,"l":58,"u":903},{"a":false,"l":507,"u":717},{"a":true,"l":842,"u":999},{"a":false,"l":552,"u":564},{"a":false,"l":482,"u":927},{"a":true,"l":213,"u":488},{"a":false,"l":357,"u":630},{"a":true,"l":400,"u":904},{"a":true,"l":318,"u":443},{"a":true,"l":259,"u":644},{"a":true,"l":253,"u":965},{"a":true,"l":757,"u":923},{"a":false,"l":548,"u":940},{"a":true,"l":133,"u":982},{"a":true,"l":347,"u":721},{"a":true,"l":103,"u":502},{"a":true,"l":19,"u":645},{"a":false,"l":639,"u":954},{"a":true,"l":797,"u":854},{"a":true,"l":582,"u":665},{"a":false,"l":61,"u":88},{"a":true,"l":476,"u":535},{"a":false,"l":351,"u":953},{"a":true,"l":119,"u":995},{"a":true,"l":33,"u":714},{"a":true,"l":292,"u":878},{"a":true,"l":264,"u":897},{"a":true,"l":396,"u":729},{"a":false,"l":121,"u":251},{"a":false,"l":126,"u":213},{"a":true,"l":116,"u":211},{"a":true,"l":94,"u":907},{"a":true,"l":18,"u":585},{"a":true,"l":682,"u":880},{"a":false,"l":55,"u":923},{"a":true,"l":339,"u":697},{"a":false,"l":421,"u":771},{"a":false,"l":258,"u":431},{"a":true,"l":530,"u":959},{"a":false,"l":34,"u":809},{"a":false,"l":186,"u":823},{"a":false,"l":353,"u":951},{"a":true,"l":92,"u":816},{"a":true,"l":137,"u":176},{"a":false,"l":691,"u":854},{"a":false,"l":252,"u":571},{"a":true,"l":383,"u":508},{"a":true,"l":621,"u":676},{"a":true,"l":233,"u":753},{"a":true,"l":432,"u":642},{"a":true,"l":189,"u":504},{"a":false,"l":339,"u":941},{"a":false,"l":513,"u":866},{"a":true,"l":403,"u":819},{"a":true,"l":471,"u":743},{"a":false,"l":169,"u":707},{"a":false,"l":119,"u":522},{"a":false,"l":509,"u":563},{"a":true,"l":280,"u":407},{"a":false,"l":252,"u":784},{"a":false,"l":651,"u":671},{"a":true,"l":201,"u":445},{"a":false,"l":161,"u":708},{"a":true,"l":226,"u":826},{"a":false,"l":70,"u":365},{"a":false,"l":144,"u":613},{"a":true,"l":219,"u":790},{"a":false,"l":1,"u":751},{"a":false,"l":96,"u":989},{"a":true,"l":406,"u":862},{"a":true,"l":134,"u":206},{"a":true,"l":529,"u":847},{"a":true,"l":804,"u":932},{"a":false,"l":151,"u":429},{"a":false,"l":347,"u":405},{"a":true,"l":383,"u":600},{"a":true,"l":16,"u":679},{"a":false,"l":131,"u":556},{"a":false,"l":300,"u":956},{"a":false,"l":7,"u":740},{"a":false,"l":141,"u":290},{"a":false,"l":149,"u":530},{"a":false,"l":322,"u":850},{"a":false,"l":78,"u":97},{"a":false,"l":766,"u":981},{"a":false,"l":184,"u":967},{"a":false,"l":365,"u":872},{"a":false,"l":504,"u":908},{"a":true,"l":107,"u":757},{"a":false,"l":600,"u":888},{"a":false,"l":369,"u":438},{"a":false,"l":578,"u":677},{"a":true,"l":287,"u":430},{"a":false,"l":211,"u":810},{"a":true,"l":684,"u":861},{"a":true,"l":364,"u":377},{"a":false,"l":439,"u":952},{"a":true,"l":520,"u":705},{"a":false,"l":42,"u":446},{"a":true,"l":108,"u":752},{"a":false,"l":171,"u":594},{"a":false,"l":790,"u":837},{"a":true,"l":106,"u":468},{"a":false,"l":117,"u":303},{"a":true,"l":511,"u":818},{"a":true,"l":379,"u":682},{"a":true,"l":381,"u":511},{"a":false,"l":84,"u":809},{"a":true,"l":620,"u":959},{"a":false,"l":14,"u":82},{"a":false,"l":707,"u":726},{"a":true,"l":110,"u":767},{"a":true,"l":156,"u":738},{"a":false,"l":122,"u":867},{"a":false,"l":141,"u":235},{"a":true,"l":677,"u":854},{"a":false,"l":399,"u":741},{"a":false,"l":117,"u":341},{"a":false,"l":288,"u":383},{"a":false,"l":98,"u":414},{"a":true,"l":156,"u":691},{"a":true,"l":419,"u":765},{"a":false,"l":560,"u":954},{"a":true,"l":605,"u":863},{"a":true,"l":485,"u":588},{"a":false,"l":127,"u":222},{"a":false,"l":547,"u":552},{"a":true,"l":384,"u":740},{"a":true,"l":46,"u":702},{"a":true,"l":28,"u":95},{"a":true,"l":414,"u":915},{"a":true,"l":347,"u":867},{"a":false,"l":490,"u":732},{"a":false,"l":760,"u":778},{"a":false,"l":620,"u":807},{"a":true,"l":111,"u":155},{"a":true,"l":389,"u":949},{"a":false,"l":262,"u":825},{"a":false,"l":582,"u":632},{"a":false,"l":325,"u":678},{"a":true,"l":182,"u":870},{"a":true,"l":313,"u":377},{"a":false,"l":448,"u":746},{"a":true,"l":66,"u":808},{"a":false,"l":263,"u":533},{"a":false,"l":359,"u":464},{"a":false,"l":61,"u":475},{"a":true,"l":282,"u":701},{"a":false,"l":146,"u":697},{"a":false,"l":21,"u":183},{"a":true,"l":594,"u":761},{"a":false,"l":452,"u":518},{"a":true,"l":257,"u":933},{"a":true,"l":327,"u":482},{"a":true,"l":113,"u":798},{"a":true,"l":61,"u":520},{"a":true,"l":323,"u":537},{"a":true,"l":260,"u":981},{"a":true,"l":28,"u":83},{"a":true,"l":334,"u":385},{"a":true,"l":865,"u":919},{"a":false,"l":664,"u":887},{"a":true,"l":272,"u":587},{"a":false,"l":220,"u":473},{"a":true,"l":9,"u":775},{"a":false,"l":284,"u":961},{"a":true,"l":711,"u":927},{"a":false,"l":429,"u":590},{"a":true,"l":701,"u":782},{"a":false,"l":565,"u":591},{"a":false,"l":52,"u":846},{"a":false,"l":214,"u":850},{"a":true,"l":880,"u":908},{"a":false,"l":438,"u":972},{"a":false,"l":466,"u":755},{"a":true,"l":384,"u":975},{"a":true,"l":656,"u":927},{"a":false,"l":147,"u":619},{"a":true,"l":75,"u":250},{"a":true,"l":285,"u":693},{"a":false,"l":57,"u":821},{"a":false,"l":417,"u":909},{"a":false,"l":478,"u":963},{"a":true,"l":3,"u":829},{"a":true,"l":689,"u":795},{"a":true,"l":197,"u":793},{"a":false,"l":32,"u":313},{"a":false,"l":19,"u":789},{"a":false,"l":31,"u":808},{"a":true,"l":56,"u":468},{"a":true,"l":499,"u":840},{"a":false,"l":384,"u":897},{"a":false,"l":187,"u":203},{"a":false,"l":161,"u":729},{"a":false,"l":36,"u":142},{"a":true,"l":814,"u":938},{"a":false,"l":611,"u":646},{"a":false,"l":409,"u":974},{"a":true,"l":172,"u":274},{"a":true,"l":298,"u":991},{"a":true,"l":95,"u":664},{"a":false,"l":453,"u":932},{"a":true,"l":88,"u":207},{"a":true,"l":670,"u":742},{"a":true,"l":90,"u":871},{"a":true,"l":195,"u":479},{"a":true,"l":491,"u":686},{"a":false,"l":743,"u":948},{"a":true,"l":401,"u":477},{"a":true,"l":126,"u":808},{"a":true,"l":429,"u":475},{"a":true,"l":356,"u":882},{"a":true,"l":439,"u":821},{"a":true,"l":59,"u":725},{"a":true,"l":326,"u":337},{"a":true,"l":108,"u":273},{"a":true,"l":686,"u":992},{"a":true,"l":150,"u":774},{"a":true,"l":218,"u":786},{"a":false,"l":464,"u":907},{"a":false,"l":287,"u":429},{"a":true,"l":171,"u":827},{"a":true,"l":15,"u":589},{"a":true,"l":791,"u":827},{"a":false,"l":666,"u":847},{"a":false,"l":168,"u":629},{"a":false,"l":158,"u":943},{"a":false,"l":659,"u":686},{"a":true,"l":340,"u":466},{"a":true,"l":282,"u":826},{"a":false,"l":66,"u":695},{"a":true,"l":196,"u":769},{"a":true,"l":49,"u":703},{"a":false,"l":169,"u":483},{"a":false,"l":7,"u":762},{"a":true,"l":820,"u":997},{"a":false,"l":130,"u":725},{"a":true,"l":150,"u":608},{"a":true,"l":485,"u":696},{"a":true,"l":429,"u":931},{"a":false,"l":425,"u":892},{"a":true,"l":24,"u":167},{"a":false,"l":328,"u":348},{"a":false,"l":6,"u":952},{"a":true,"l":397,"u":585},{"a":true,"l":796,"u":966},{"a":false,"l":121,"u":995},{"a":false,"l":344,"u":473},{"a":true,"l":434,"u":691},{"a":true,"l":35,"u":194},{"a":false,"l":529,"u":557},{"a":false,"l":177,"u":618},{"a":true,"l":190,"u":582},{"a":false,"l":268,"u":579},{"a":false,"l":440,"u":560},{"a":true,"l":92,"u":98},{"a":false,"l":209,"u":471},{"a":true,"l":229,"u":297},{"a":false,"l":322,"u":887},{"a":false,"l":196,"u":280},{"a":true,"l":334,"u":435},{"a":true,"l":132,"u":985},{"a":true,"l":257,"u":560},{"a":true,"l":235,"u":331},{"a":true,"l":125,"u":891},{"a":true,"l":389,"u":504},{"a":false,"l":108,"u":763},{"a":true,"l":722,"u":763},{"a":false,"l":454,"u":996},{"a":true,"l":253,"u":876},{"a":false,"l":107,"u":659},{"a":false,"l":326,"u":724},{"a":true,"l":18,"u":831},{"a":true,"l":682,"u":940},{"a":false,"l":283,"u":819},{"a":false,"l":299,"u":645},{"a":true,"l":333,"u":904},{"a":false,"l":498,"u":530},{"a":false,"l":901,"u":922},{"a":true,"l":46,"u":744},{"a":false,"l":19,"u":771},{"a":true,"l":247,"u":329},{"a":false,"l":245,"u":588},{"a":false,"l":453,"u":576},{"a":false,"l":432,"u":957},{"a":true,"l":434,"u":670},{"a":false,"l":824,"u":915},{"a":false,"l":503,"u":610},{"a":true,"l":392,"u":722},{"a":false,"l":832,"u":857},{"a":false,"l":43,"u":960},{"a":false,"l":395,"u":469},{"a":false,"l":404,"u":969},{"a":true,"l":374,"u":839},{"a":false,"l":485,"u":977},{"a":true,"l":203,"u":346},{"a":false,"l":19,"u":176},{"a":false,"l":55,"u":781},{"a":false,"l":296,"u":783},{"a":true,"l":459,"u":565},{"a":false,"l":20,"u":104},{"a":true,"l":83,"u":301},{"a":false,"l":612,"u":697},{"a":false,"l":819,"u":937},{"a":false,"l":316,"u":804},{"a":false,"l":178,"u":911},{"a":false,"l":428,"u":824},{"a":false,"l":421,"u":509},{"a":true,"l":86,"u":287},{"a":true,"l":437,"u":500},{"a":true,"l":393,"u":456},{"a":true,"l":30,"u":190},{"a":true,"l":181,"u":726},{"a":false,"l":667,"u":869},{"a":false,"l":123,"u":520},{"a":false,"l":363,"u":582},{"a":true,"l":142,"u":177},{"a":true,"l":400,"u":555},{"a":false,"l":429,"u":454},{"a":true,"l":363,"u":484},{"a":false,"l":318,"u":841},{"a":false,"l":667,"u":955},{"a":true,"l":44,"u":456},{"a":true,"l":526,"u":757},{"a":true,"l":94,"u":810},{"a":true,"l":500,"u":561},{"a":true,"l":800,"u":855},{"a":false,"l":121,"u":850},{"a":false,"l":549,"u":752},{"a":false,"l":492,"u":889},{"a":true,"l":620,"u":968},{"a":true,"l":332,"u":681},{"a":true,"l":530,"u":829},{"a":false,"l":661,"u":758},{"a":false,"l":321,"u":590},{"a":true,"l":513,"u":523},{"a":true,"l":182,"u":598},{"a":false,"l":678,"u":939},{"a":false,"l":641,"u":948},{"a":true,"l":55,"u":967},{"a":true,"l":228,"u":425},{"a":false,"l":381,"u":738},{"a":false,"l":101,"u":313},{"a":false,"l":240,"u":780},{"a":true,"l":125,"u":271},{"a":false,"l":354,"u":961},{"a":true,"l":229,"u":941},{"a":true,"l":581,"u":641},{"a":false,"l":292,"u":963},{"a":true,"l":74,"u":95},{"a":false,"l":274,"u":835},{"a":false,"l":239,"u":839},{"a":true,"l":557,"u":849},{"a":false,"l":89,"u":968},{"a":true,"l":540,"u":992},{"a":true,"l":176,"u":316},{"a":false,"l":444,"u":862},{"a":true,"l":551,"u":644},{"a":false,"l":526,"u":878},{"a":false,"l":6,"u":731},{"a":false,"l":632,"u":768},{"a":true,"l":164,"u":263},{"a":true,"l":92,"u":351},{"a":false,"l":382,"u":611},{"a":true,"l":388,"u":421},{"a":true,"l":491,"u":555},{"a":false,"l":436,"u":828},{"a":false,"l":211,"u":940},{"a":true,"l":806,"u":851},{"a":true,"l":831,"u":958},{"a":false,"l":785,"u":963},{"a":false,"l":550,"u":761},{"a":false,"l":104,"u":881},{"a":true,"l":164,"u":781},{"a":false,"l":145,"u":244},{"a":true,"l":259,"u":979},{"a":true,"l":298,"u":433},{"a":true,"l":74,"u":328},{"a":false,"l":81,"u":733},{"a":false,"l":168,"u":393},{"a":true,"l":146,"u":412},{"a":false,"l":323,"u":737},{"a":true,"l":22,"u":831},{"a":true,"l":100,"u":332},{"a":true,"l":859,"u":909},{"a":false,"l":380,"u":749},{"a":false,"l":683,"u":729},{"a":true,"l":403,"u":481},{"a":false,"l":654,"u":856},{"a":true,"l":401,"u":641},{"a":false,"l":650,"u":769},{"a":true,"l":234,"u":500},{"a":false,"l":46,"u":638},{"a":true,"l":461,"u":764},{"a":true,"l":282,"u":565},{"a":false,"l":309,"u":438},{"a":true,"l":138,"u":625},{"a":false,"l":258,"u":550},{"a":true,"l":150,"u":795},{"a":false,"l":606,"u":723},{"a":true,"l":22,"u":133},{"a":true,"l":304,"u":444},{"a":true,"l":18,"u":664},{"a":false,"l":494,"u":899},{"a":false,"l":302,"u":842},{"a":true,"l":461,"u":799},{"a":false,"l":413,"u":815},{"a":true,"l":223,"u":374},{"a":false,"l":221,"u":410},{"a":false,"l":332,"u":503},{"a":false,"l":217,"u":928},{"a":true,"l":703,"u":905},{"a":false,"l":237,"u":313},{"a":false,"l":142,"u":871},{"a":false,"l":339,"u":342},{"a":true,"l":589,"u":966},{"a":true,"l":829,"u":857},{"a":false,"l":865,"u":927},{"a":false,"l":527,"u":593},{"a":false,"l":677,"u":705},{"a":false,"l":617,"u":700},{"a":false,"l":189,"u":390},{"a":false,"l":696,"u":761},{"a":true,"l":192,"u":681},{"a":true,"l":105,"u":692},{"a":false,"l":608,"u":632},{"a":false,"l":150,"u":382},{"a":false,"l":345,"u":621},{"a":true,"l":140,"u":587},{"a":true,"l":824,"u":963},{"a":false,"l":258,"u":785},{"a":false,"l":450,"u":970},{"a":true,"l":125,"u":872},{"a":true,"l":578,"u":959},{"a":true,"l":244,"u":689},{"a":false,"l":104,"u":249},{"a":true,"l":303,"u":839},{"a":false,"l":3,"u":817},{"a":false,"l":98,"u":414},{"a":false,"l":124,"u":713},{"a":true,"l":88,"u":546},{"a":false,"l":27,"u":490},{"a":true,"l":584,"u":768},{"a":false,"l":383,"u":785},{"a":false,"l":79,"u":382},{"a":false,"l":897,"u":938},{"a":true,"l":82,"u":464},{"a":false,"l":49,"u":970},{"a":false,"l":158,"u":920},{"a":true,"l":22,"u":222},{"a":true,"l":519,"u":785},{"a":true,"l":427,"u":469},{"a":false,"l":534,"u":928},{"a":true,"l":205,"u":300},{"a":true,"l":760,"u":954},{"a":false,"l":528,"u":781},{"a":true,"l":62,"u":375},{"a":true,"l":256,"u":837},{"a":true,"l":190,"u":527},{"a":false,"l":722,"u":998},{"a":false,"l":1,"u":347},{"a":false,"l":94,"u":147},{"a":false,"l":106,"u":195},{"a":true,"l":62,"u":739},{"a":false,"l":86,"u":411},{"a":false,"l":64,"u":461},{"a":true,"l":686,"u":943},{"a":true,"l":108,"u":218},{"a":true,"l":161,"u":390},{"a":false,"l":60,"u":920},{"a":true,"l":71,"u":447},{"a":true,"l":358,"u":667},{"a":false,"l":558,"u":820},{"a":false,"l":137,"u":746},{"a":false,"l":527,"u":775},{"a":false,"l":433,"u":607},{"a":true,"l":41,"u":336},{"a":true,"l":976,"u":984},{"a":false,"l":642,"u":948},{"a":false,"l":438,"u":830},{"a":true,"l":510,"u":806},{"a":false,"l":167,"u":785},{"a":false,"l":250,"u":501},{"a":true,"l":52,"u":375},{"a":true,"l":276,"u":299},{"a":false,"l":926,"u":944},{"a":true,"l":780,"u":971},{"a":true,"l":515,"u":688},{"a":false,"l":247,"u":830},{"a":true,"l":629,"u":654},{"a":false,"l":395,"u":547},{"a":false,"l":129,"u":916},{"a":true,"l":807,"u":867},{"a":true,"l":276,"u":883},{"a":true,"l":575,"u":685},{"a":true,"l":567,"u":877},{"a":false,"l":541,"u":735},{"a":false,"l":90,"u":171},{"a":true,"l":46,"u":412},{"a":false,"l":16,"u":285},{"a":true,"l":187,"u":220},{"a":true,"l":389,"u":758},{"a":true,"l":690,"u":821},{"a":false,"l":535,"u":740},{"a":false,"l":336,"u":581},{"a":false,"l":162,"u":614},{"a":false,"l":220,"u":717},{"a":false,"l":43,"u":432},{"a":false,"l":569,"u":845},{"a":true,"l":379,"u":567},{"a":true,"l":30,"u":380},{"a":false,"l":139,"u":444},{"a":false,"l":207,"u":215},{"a":true,"l":261,"u":463},{"a":false,"l":882,"u":946},{"a":true,"l":847,"u":973},{"a":true,"l":394,"u":476},{"a":false,"l":264,"u":478},{"a":true,"l":231,"u":335},{"a":true,"l":547,"u":615},{"a":true,"l":707,"u":991},{"a":false,"l":60,"u":120},{"a":true,"l":655,"u":771},{"a":true,"l":10,"u":748},{"a":false,"l":9,"u":804},{"a":false,"l":182,"u":533},{"a":false,"l":611,"u":724},{"a":false,"l":623,"u":684},{"a":true,"l":11,"u":170},{"a":true,"l":183,"u":402},{"a":false,"l":605,"u":716},{"a":true,"l":743,"u":885},{"a":false,"l":231,"u":940},{"a":false,"l":351,"u":408},{"a":true,"l":585,"u":875},{"a":false,"l":643,"u":727},{"a":false,"l":301,"u":796},{"a":true,"l":218,"u":529},{"a":false,"l":488,"u":648},{"a":false,"l":74,"u":340},{"a":false,"l":195,"u":761},{"a":true,"l":392,"u":728},{"a":true,"l":171,"u":758},{"a":true,"l":308,"u":986},{"a":true,"l":441,"u":741},{"a":false,"l":15,"u":845},{"a":false,"l":73,"u":723},{"a":false,"l":720,"u":977},{"a":true,"l":734,"u":966},{"a":true,"l":149,"u":612},{"a":true,"l":641,"u":646},{"a":true,"l":77,"u":254},{"a":false,"l":434,"u":625},{"a":false,"l":582,"u":605},{"a":true,"l":344,"u":581},{"a":true,"l":50,"u":540},{"a":false,"l":169,"u":330},{"a":true,"l":187,"u":539},{"a":false,"l":186,"u":779},{"a":false,"l":335,"u":774},{"a":false,"l":210,"u":989},{"a":false,"l":334,"u":816},{"a":true,"l":658,"u":963},{"a":false,"l":325,"u":903},{"a":false,"l":266,"u":777},{"a":true,"l":402,"u":888},{"a":false,"l":284,"u":881},{"a":true,"l":235,"u":855},{"a":false,"l":125,"u":148},{"a":false,"l":272,"u":843},{"a":true,"l":41,"u":278},{"a":false,"l":75,"u":962},{"a":true,"l":645,"u":915},{"a":false,"l":94,"u":675},{"a":true,"l":346,"u":463},{"a":false,"l":395,"u":569},{"a":true,"l":59,"u":371},{"a":true,"l":327,"u":532},{"a":false,"l":312,"u":798},{"a":false,"l":135,"u":485},{"a":true,"l":383,"u":978},{"a":true,"l":67,"u":221},{"a":false,"l":110,"u":584},{"a":false,"l":202,"u":452},{"a":false,"l":70,"u":700},{"a":true,"l":545,"u":873},{"a":false,"l":55,"u":688},{"a":true,"l":53,"u":997},{"a":false,"l":9,"u":206},{"a":false,"l":606,"u":729},{"a":false,"l":367,"u":429},{"a":true,"l":680,"u":983},{"a":false,"l":435,"u":702},{"a":true,"l":463,"u":860},{"a":false,"l":42,"u":423},{"a":true,"l":470,"u":882},{"a":true,"l":399,"u":542},{"a":false,"l":186,"u":414},{"a":false,"l":244,"u":615},{"a":true,"l":346,"u":603},{"a":true,"l":87,"u":338},{"a":false,"l":328,"u":535},{"a":false,"l":47,"u":674},{"a":true,"l":452,"u":492},{"a":false,"l":177,"u":639},{"a":false,"l":799,"u":847},{"a":true,"l":58,"u":894},{"a":true,"l":337,"u":796},{"a":true,"l":139,"u":202},{"a":true,"l":462,"u":989},{"a":false,"l":181,"u":543},{"a":true,"l":499,"u":851},{"a":false,"l":4,"u":107},{"a":false,"l":244,"u":683},{"a":true,"l":518,"u":622},{"a":true,"l":242,"u":583},{"a":false,"l":680,"u":988},{"a":false,"l":352,"u":794},{"a":true,"l":95,"u":252},{"a":false,"l":36,"u":768},{"a":true,"l":396,"u":559},{"a":false,"l":487,"u":797},{"a":false,"l":402,"u":851},{"a":false,"l":72,"u":920},{"a":true,"l":646,"u":797},{"a":true,"l":389,"u":447},{"a":false,"l":698,"u":833},{"a":false,"l":3,"u":619},{"a":false,"l":162,"u":973},{"a":false,"l":565,"u":727},{"a":true,"l":283,"u":584},{"a":true,"l":287,"u":858},{"a":true,"l":13,"u":944},{"a":false,"l":512,"u":927},{"a":true,"l":167,"u":365},{"a":false,"l":696,"u":869},{"a":true,"l":14,"u":525},{"a":true,"l":428,"u":543},{"a":true,"l":194,"u":274},{"a":true,"l":254,"u":618},{"a":false,"l":208,"u":366},{"a":false,"l":219,"u":637},{"a":true,"l":784,"u":871},{"a":true,"l":506,"u":941},{"a":true,"l":142,"u":475},{"a":true,"l":367,"u":963},{"a":false,"l":272,"u":841},{"a":true,"l":99,"u":904},{"a":false,"l":183,"u":235},{"a":false,"l":253,"u":292},{"a":true,"l":83,"u":492},{"a":true,"l":60,"u":988},{"a":false,"l":337,"u":590},{"a":true,"l":404,"u":600},{"a":false,"l":489,"u":625},{"a":false,"l":541,"u":574},{"a":true,"l":241,"u":942},{"a":false,"l":571,"u":792},{"a":true,"l":102,"u":892},{"a":false,"l":379,"u":590},{"a":false,"l":144,"u":768},{"a":true,"l":339,"u":567},{"a":false,"l":9,"u":418},{"a":true,"l":44,"u":364},{"a":false,"l":37,"u":815},{"a":false,"l":195,"u":291},{"a":true,"l":502,"u":608},{"a":true,"l":459,"u":592},{"a":false,"l":523,"u":820},{"a":false,"l":561,"u":814},{"a":false,"l":662,"u":714},{"a":true,"l":421,"u":585},{"a":true,"l":733,"u":824},{"a":false,"l":120,"u":227},{"a":false,"l":102,"u":341},{"a":true,"l":98,"u":345},{"a":true,"l":459,"u":749},{"a":false,"l":811,"u":958},{"a":true,"l":24,"u":637},{"a":true,"l":292,"u":619},{"a":true,"l":572,"u":615},{"a":false,"l":170,"u":233},{"a":true,"l":204,"u":884},{"a":true,"l":215,"u":355},{"a":false,"l":144,"u":707},{"a":false,"l":27,"u":963},{"a":true,"l":68,"u":931},{"a":false,"l":216,"u":475},{"a":true,"l":159,"u":710},{"a":true,"l":402,"u":795},{"a":false,"l":346,"u":372},{"a":false,"l":456,"u":854},{"a":true,"l":297,"u":552},{"a":true,"l":69,"u":555},{"a":false,"l":2,"u":882},{"a":false,"l":580,"u":651},{"a":true,"l":214,"u":545},{"a":true,"l":26,"u":115},{"a":true,"l":643,"u":801},{"a":true,"l":917,"u":952},{"a":true,"l":177,"u":404},{"a":false,"l":94,"u":696},{"a":false,"l":421,"u":767},{"a":false,"l":630,"u":736},{"a":false,"l":124,"u":853},{"a":false,"l":499,"u":768},{"a":false,"l":280,"u":704},{"a":true,"l":215,"u":668},{"a":false,"l":269,"u":396},{"a":true,"l":58,"u":961},{"a":false,"l":253,"u":371},{"a":true,"l":11,"u":956},{"a":true,"l":107,"u":743},{"a":true,"l":100,"u":609},{"a":true,"l":888,"u":961},{"a":true,"l":218,"u":813},{"a":true,"l":345,"u":710},{"a":false,"l":9,"u":377},{"a":true,"l":58,"u":842},{"a":false,"l":407,"u":973},{"a":false,"l":167,"u":170},{"a":false,"l":225,"u":394},{"a":false,"l":109,"u":718},{"a":true,"l":283,"u":829},{"a":true,"l":96,"u":911},{"a":false,"l":43,"u":177},{"a":false,"l":162,"u":464},{"a":false,"l":297,"u":920},{"a":false,"l":549,"u":697},{"a":false,"l":668,"u":777},{"a":false,"l":835,"u":957},{"a":false,"l":61,"u":70},{"a":false,"l":164,"u":841},{"a":false,"l":305,"u":317},{"a":true,"l":484,"u":859},{"a":true,"l":291,"u":977},{"a":false,"l":45,"u":610},{"a":false,"l":328,"u":437},{"a":true,"l":170,"u":275},{"a":false,"l":378,"u":985},{"a":true,"l":333,"u":611},{"a":true,"l":569,"u":969},{"a":true,"l":343,"u":959},{"a":false,"l":162,"u":561},{"a":true,"l":245,"u":694},{"a":true,"l":423,"u":750},{"a":true,"l":335,"u":688},{"a":false,"l":579,"u":587},{"a":true,"l":193,"u":384},{"a":true,"l":346,"u":750},{"a":true,"l":273,"u":885},{"a":true,"l":484,"u":690},{"a":false,"l":104,"u":938},{"a":true,"l":129,"u":592},{"a":false,"l":353,"u":807},{"a":false,"l":149,"u":690},{"a":true,"l":761,"u":887},{"a":false,"l":568,"u":777},{"a":true,"l":295,"u":710},{"a":true,"l":346,"u":631},{"a":true,"l":360,"u":483},{"a":false,"l":833,"u":917},{"a":false,"l":10,"u":198},{"a":false,"l":376,"u":598},{"a":true,"l":364,"u":445},{"a":false,"l":48,"u":963},{"a":false,"l":690,"u":821},{"a":false,"l":271,"u":426},{"a":true,"l":179,"u":993},{"a":true,"l":169,"u":354},{"a":false,"l":685,"u":839},{"a":true,"l":639,"u":752},{"a":true,"l":377,"u":579},{"a":true,"l":142,"u":999},{"a":true,"l":80,"u":600},{"a":false,"l":474,"u":891},{"a":false,"l":268,"u":514},{"a":false,"l":247,"u":834},{"a":true,"l":32,"u":110},{"a":false,"l":270,"u":316},{"a":true,"l":154,"u":583},{"a":true,"l":182,"u":199},{"a":false,"l":475,"u":791},{"a":true,"l":358,"u":906},{"a":false,"l":849,"u":910},{"a":false,"l":422,"u":773},{"a":false,"l":135,"u":667},{"a":true,"l":684,"u":745},{"a":true,"l":763,"u":935},{"a":false,"l":123,"u":531},{"a":true,"l":377,"u":381},{"a":false,"l":60,"u":322},{"a":false,"l":750,"u":983},{"a":false,"l":47,"u":910},{"a":false,"l":278,"u":328},{"a":true,"l":431,"u":754},{"a":false,"l":21,"u":721},{"a":true,"l":88,"u":753},{"a":true,"l":828,"u":972},{"a":false,"l":171,"u":267},{"a":false,"l":4,"u":6},{"a":false,"l":492,"u":624},{"a":false,"l":318,"u":369},{"a":false,"l":593,"u":881},{"a":true,"l":120,"u":151},{"a":true,"l":67,"u":76},{"a":true,"l":762,"u":953},{"a":true,"l":294,"u":307},{"a":false,"l":238,"u":610},{"a":false,"l":398,"u":929},{"a":true,"l":668,"u":802},{"a":false,"l":69,"u":434},{"a":false,"l":169,"u":904},{"a":false,"l":136,"u":933},{"a":false,"l":142,"u":784},{"a":true,"l":797,"u":949},{"a":true,"l":254,"u":742},{"a":true,"l":200,"u":940},{"a":true,"l":539,"u":771},{"a":true,"l":158,"u":461},{"a":false,"l":16,"u":643},{"a":true,"l":666,"u":691},{"a":false,"l":255,"u":464},{"a":true,"l":210,"u":598},{"a":true,"l":943,"u":959},{"a":false,"l":575,"u":841},{"a":true,"l":241,"u":424},{"a":true,"l":299,"u":539},{"a":false,"l":482,"u":718},{"a":true,"l":599,"u":772},{"a":true,"l":113,"u":621},{"a":false,"l":123,"u":149},{"a":false,"l":916,"u":954},{"a":false,"l":169,"u":719},{"a":false,"l":638,"u":807},{"a":true,"l":615,"u":691},{"a":false,"l":524,"u":931},{"a":false,"l":657,"u":790},{"a":false,"l":175,"u":919},{"a":true,"l":497,"u":844},{"a":false,"l":533,"u":590},{"a":false,"l":65,"u":479},{"a":false,"l":584,"u":706},{"a":false,"l":177,"u":507},{"a":false,"l":48,"u":509},{"a":false,"l":259,"u":348},{"a":false,"l":77,"u":847},{"a":true,"l":3,"u":61},{"a":true,"l":47,"u":911},{"a":false,"l":365,"u":954},{"a":true,"l":309,"u":754},{"a":false,"l":429,"u":921},{"a":false,"l":235,"u":342},{"a":true,"l":509,"u":824},{"a":false,"l":36,"u":90},{"a":false,"l":62,"u":537},{"a":true,"l":574,"u":708},{"a":true,"l":299,"u":605},{"a":true,"l":97,"u":380},{"a":false,"l":16,"u":231},{"a":true,"l":695,"u":897},{"a":true,"l":855,"u":924},{"a":false,"l":7,"u":758},{"a":false,"l":160,"u":842},{"a":false,"l":659,"u":865},{"a":true,"l":714,"u":861},{"a":true,"l":88,"u":742},{"a":false,"l":437,"u":761},{"a":true,"l":202,"u":891},{"a":true,"l":56,"u":506},{"a":true,"l":246,"u":360},{"a":false,"l":456,"u":487},{"a":true,"l":558,"u":799},{"a":true,"l":705,"u":939},{"a":false,"l":790,"u":972},{"a":true,"l":545,"u":623},{"a":false,"l":696,"u":784},{"a":true,"l":314,"u":839},{"a":false,"l":463,"u":465},{"a":true,"l":176,"u":198},{"a":false,"l":422,"u":439},{"a":false,"l":55,"u":819},{"a":true,"l":225,"u":322},{"a":true,"l":53,"u":271},{"a":false,"l":842,"u":930},{"a":true,"l":225,"u":388},{"a":false,"l":6,"u":513},{"a":true,"l":232,"u":554},{"a":true,"l":160,"u":449},{"a":true,"l":9,"u":266},{"a":false,"l":257,"u":432},{"a":false,"l":28,"u":38},{"a":false,"l":254,"u":661},{"a":true,"l":487,"u":519},{"a":false,"l":135,"u":241},{"a":false,"l":249,"u":531},{"a":false,"l":199,"u":346},{"a":true,"l":243,"u":993},{"a":false,"l":187,"u":507},{"a":true,"l":414,"u":682},{"a":false,"l":488,"u":959},{"a":true,"l":349,"u":729},{"a":false,"l":156,"u":909},{"a":false,"l":238,"u":411},{"a":true,"l":152,"u":365},{"a":true,"l":13,"u":675},{"a":false,"l":412,"u":738},{"a":false,"l":404,"u":529},{"a":false,"l":450,"u":528},{"a":false,"l":167,"u":769},{"a":false,"l":881,"u":900},{"a":false,"l":206,"u":294},{"a":false,"l":95,"u":605},{"a":true,"l":676,"u":872},{"a":false,"l":223,"u":983},{"a":false,"l":29,"u":712},{"a":true,"l":208,"u":530},{"a":false,"l":70,"u":285},{"a":false,"l":72,"u":852},{"a":true,"l":450,"u":567},{"a":false,"l":325,"u":829},{"a":true,"l":116,"u":379},{"a":true,"l":780,"u":922},{"a":true,"l":758,"u":949},{"a":true,"l":480,"u":904},{"a":true,"l":373,"u":374},{"a":true,"l":342,"u":424},{"a":false,"l":771,"u":963},{"a":true,"l":67,"u":712},{"a":false,"l":237,"u":979},{"a":true,"l":26,"u":368},{"a":false,"l":32,"u":811},{"a":true,"l":173,"u":878},{"a":true,"l":77,"u":490},{"a":true,"l":833,"u":953},{"a":true,"l":30,"u":945},{"a":true,"l":596,"u":699},{"a":true,"l":500,"u":846},{"a":true,"l":229,"u":914},{"a":false,"l":368,"u":379},{"a":false,"l":63,"u":723},{"a":false,"l":93,"u":969},{"a":false,"l":752,"u":757},{"a":false,"l":190,"u":423},{"a":true,"l":279,"u":993},{"a":false,"l":694,"u":935},{"a":false,"l":26,"u":701},{"a":false,"l":413,"u":544},{"a":false,"l":27,"u":926},{"a":false,"l":120,"u":995},{"a":false,"l":501,"u":519},{"a":true,"l":306,"u":330},{"a":false,"l":229,"u":785},{"a":false,"l":2,"u":230},{"a":true,"l":212,"u":534},{"a":false,"l":471,"u":850},{"a":false,"l":79,"u":290},{"a":false,"l":181,"u":670},{"a":false,"l":47,"u":60},{"a":true,"l":212,"u":886},{"a":false,"l":762,"u":948},{"a":false,"l":180,"u":271},{"a":true,"l":163,"u":644},{"a":true,"l":600,"u":854},{"a":false,"l":40,"u":691},{"a":false,"l":341,"u":692},{"a":false,"l":687,"u":688},{"a":false,"l":30,"u":798},{"a":true,"l":358,"u":503},{"a":true,"l":851,"u":954},{"a":false,"l":2,"u":872},{"a":false,"l":526,"u":949},{"a":false,"l":200,"u":387},{"a":true,"l":452,"u":818},{"a":false,"l":760,"u":976},{"a":false,"l":8,"u":895},{"a":false,"l":286,"u":535},{"a":true,"l":69,"u":293},{"a":false,"l":519,"u":914},{"a":false,"l":116,"u":930},{"a":false,"l":48,"u":993},{"a":false,"l":792,"u":794},{"a":false,"l":636,"u":789},{"a":true,"l":4,"u":834},{"a":false,"l":7,"u":509},{"a":true,"l":194,"u":481},{"a":true,"l":533,"u":857},{"a":true,"l":59,"u":720},{"a":false,"l":81,"u":480},{"a":true,"l":69,"u":151},{"a":true,"l":86,"u":267},{"a":true,"l":446,"u":930},{"a":false,"l":866,"u":883},{"a":false,"l":504,"u":823},{"a":true,"l":753,"u":782},{"a":true,"l":20,"u":306},{"a":true,"l":4,"u":613},{"a":true,"l":212,"u":870},{"a":false,"l":256,"u":620},{"a":true,"l":556,"u":971},{"a":false,"l":65,"u":762},{"a":false,"l":911,"u":939},{"a":true,"l":735,"u":970},{"a":false,"l":237,"u":881},{"a":false,"l":16,"u":896},{"a":true,"l":103,"u":637},{"a":false,"l":654,"u":936},{"a":true,"l":441,"u":621},{"a":false,"l":664,"u":750},{"a":true,"l":93,"u":481},{"a":false,"l":119,"u":476},{"a":false,"l":332,"u":599},{"a":true,"l":210,"u":529},{"a":false,"l":114,"u":927},{"a":false,"l":268,"u":863},{"a":true,"l":696,"u":836},{"a":false,"l":421,"u":590},{"a":false,"l":506,"u":798},{"a":true,"l":34,"u":481},{"a":true,"l":83,"u":188},{"a":true,"l":687,"u":924},{"a":false,"l":248,"u":437},{"a":true,"l":330,"u":455},{"a":true,"l":148,"u":740},{"a":false,"l":119,"u":717},{"a":true,"l":475,"u":786},{"a":true,"l":546,"u":555},{"a":false,"l":289,"u":935},{"a":false,"l":714,"u":936},{"a":true,"l":82,"u":507},{"a":false,"l":565,"u":582},{"a":false,"l":201,"u":707},{"a":false,"l":112,"u":861},{"a":false,"l":156,"u":762},{"a":false,"l":48,"u":613},{"a":false,"l":130,"u":792},{"a":true,"l":46,"u":531},{"a":false,"l":785,"u":803},{"a":false,"l":230,"u":639},{"a":false,"l":130,"u":256},{"a":true,"l":72,"u":978},{"a":false,"l":354,"u":899},{"a":false,"l":95,"u":133},{"a":true,"l":326,"u":626},{"a":true,"l":228,"u":548},{"a":true,"l":300,"u":693},{"a":true,"l":792,"u":835},{"a":false,"l":416,"u":505},{"a":true,"l":306,"u":926},{"a":true,"l":331,"u":574},{"a":true,"l":678,"u":749},{"a":false,"l":551,"u":709},{"a":true,"l":4,"u":964},{"a":true,"l":455,"u":594},{"a":true,"l":870,"u":927},{"a":false,"l":93,"u":279},{"a":false,"l":381,"u":781},{"a":false,"l":309,"u":865},{"a":false,"l":140,"u":847},{"a":true,"l":303,"u":748},{"a":true,"l":647,"u":734},{"a":true,"l":421,"u":497},{"a":true,"l":587,"u":834},{"a":true,"l":43,"u":748},{"a":true,"l":396,"u":977},{"a":false,"l":186,"u":671},{"a":false,"l":608,"u":702},{"a":false,"l":647,"u":813},{"a":false,"l":339,"u":630},{"a":false,"l":389,"u":836},{"a":false,"l":803,"u":892},{"a":false,"l":167,"u":439},{"a":false,"l":125,"u":155},{"a":false,"l":541,"u":943},{"a":false,"l":280,"u":490},{"a":true,"l":193,"u":706},{"a":false,"l":123,"u":308},{"a":false,"l":503,"u":895},{"a":false,"l":468,"u":878},{"a":true,"l":364,"u":779},{"a":false,"l":803,"u":860},{"a":false,"l":171,"u":520},{"a":false,"l":284,"u":630},{"a":false,"l":23,"u":89},{"a":true,"l":82,"u":139},{"a":true,"l":193,"u":785},{"a":true,"l":82,"u":460},{"a":false,"l":568,"u":574},{"a":true,"l":110,"u":523},{"a":true,"l":1,"u":875},{"a":false,"l":194,"u":259},{"a":false,"l":64,"u":823},{"a":true,"l":392,"u":601},{"a":false,"l":555,"u":773},{"a":true,"l":168,"u":685},{"a":false,"l":567,"u":567},{"a":true,"l":498,"u":613},{"a":false,"l":307,"u":652},{"a":true,"l":97,"u":170},{"a":false,"l":417,"u":744},{"a":false,"l":84,"u":675},{"a":false,"l":264,"u":361},{"a":true,"l":162,"u":262},{"a":false,"l":660,"u":764},{"a":true,"l":399,"u":595},{"a":false,"l":607,"u":939},{"a":true,"l":349,"u":487},{"a":false,"l":553,"u":899},{"a":true,"l":202,"u":288},{"a":true,"l":96,"u":829},{"a":false,"l":201,"u":488},{"a":false,"l":22,"u":441},{"a":false,"l":605,"u":928},{"a":false,"l":132,"u":337},{"a":true,"l":355,"u":621},{"a":false,"l":735,"u":773},{"a":false,"l":343,"u":888},{"a":false,"l":316,"u":672},{"a":true,"l":47,"u":968},{"a":false,"l":2,"u":42},{"a":true,"l":667,"u":829},{"a":true,"l":61,"u":977},{"a":false,"l":596,"u":946},{"a":true,"l":455,"u":911},{"a":true,"l":10,"u":68},{"a":false,"l":154,"u":672},{"a":true,"l":26,"u":764},{"a":true,"l":98,"u":411},{"a":true,"l":659,"u":660},{"a":false,"l":405,"u":512},{"a":false,"l":609,"u":946},{"a":false,"l":186,"u":946},{"a":false,"l":555,"u":580},{"a":false,"l":810,"u":952},{"a":false,"l":91,"u":392},{"a":true,"l":126,"u":681},{"a":false,"l":563,"u":975},{"a":false,"l":153,"u":761},{"a":true,"l":92,"u":844},{"a":false,"l":138,"u":657},{"a":false,"l":195,"u":276},{"a":true,"l":175,"u":997},{"a":true,"l":197,"u":604},{"a":true,"l":112,"u":409},{"a":false,"l":603,"u":662},{"a":true,"l":352,"u":790},{"a":false,"l":540,"u":551},{"a":false,"l":165,"u":966},{"a":false,"l":798,"u":839},{"a":false,"l":143,"u":614},{"a":false,"l":176,"u":588},{"a":false,"l":258,"u":593},{"a":false,"l":551,"u":642},{"a":false,"l":55,"u":610},{"a":true,"l":569,"u":690},{"a":false,"l":225,"u":498},{"a":false,"l":521,"u":892},{"a":false,"l":41,"u":122},{"a":false,"l":301,"u":519},{"a":true,"l":250,"u":537},{"a":true,"l":110,"u":232},{"a":false,"l":642,"u":943},{"a":true,"l":119,"u":949},{"a":true,"l":194,"u":456},{"a":true,"l":27,"u":704},{"a":true,"l":166,"u":810},{"a":true,"l":138,"u":826},{"a":true,"l":236,"u":623},{"a":true,"l":94,"u":434},{"a":false,"l":158,"u":708},{"a":false,"l":53,"u":481},{"a":false,"l":382,"u":624},{"a":true,"l":140,"u":245},{"a":true,"l":618,"u":630},{"a":false,"l":3,"u":120},{"a":false,"l":366,"u":758},{"a":false,"l":348,"u":368},{"a":false,"l":177,"u":214},{"a":false,"l":526,"u":582},{"a":true,"l":212,"u":414},{"a":false,"l":186,"u":385},{"a":false,"l":445,"u":742},{"a":false,"l":316,"u":816},{"a":true,"l":149,"u":628},{"a":true,"l":117,"u":764},{"a":false,"l":291,"u":915},{"a":false,"l":305,"u":883},{"a":false,"l":63,"u":634},{"a":true,"l":35,"u":629},{"a":true,"l":117,"u":207},{"a":true,"l":835,"u":992},{"a":true,"l":617,"u":998},{"a":true,"l":313,"u":963},{"a":true,"l":438,"u":458},{"a":true,"l":608,"u":791},{"a":false,"l":218,"u":383},{"a":true,"l":74,"u":642},{"a":true,"l":662,"u":959},{"a":false,"l":391,"u":914},{"a":false,"l":640,"u":971},{"a":true,"l":235,"u":836},{"a":true,"l":299,"u":748},{"a":true,"l":120,"u":335},{"a":false,"l":734,"u":750},{"a":false,"l":83,"u":722},{"a":true,"l":151,"u":419},{"a":true,"l":109,"u":340},{"a":true,"l":146,"u":229},{"a":false,"l":480,"u":887},{"a":true,"l":14,"u":397},{"a":true,"l":362,"u":461},{"a":true,"l":84,"u":784},{"a":true,"l":277,"u":419},{"a":true,"l":276,"u":891},{"a":true,"l":428,"u":460},{"a":true,"l":62,"u":457},{"a":false,"l":142,"u":202},{"a":false,"l":44,"u":875},{"a":false,"l":549,"u":837},{"a":false,"l":856,"u":906},{"a":false,"l":144,"u":175},{"a":false,"l":241,"u":953},{"a":true,"l":632,"u":938},{"a":false,"l":265,"u":612},{"a":true,"l":108,"u":252},{"a":false,"l":145,"u":735},{"a":false,"l":533,"u":953},{"a":false,"l":109,"u":955},{"a":true,"l":162,"u":609},{"a":false,"l":351,"u":877},{"a":false,"l":111,"u":152},{"a":true,"l":172,"u":587},{"a":false,"l":365,"u":635},{"a":true,"l":156,"u":556},{"a":false,"l":107,"u":949},{"a":false,"l":74,"u":299},{"a":true,"l":536,"u":985},{"a":true,"l":206,"u":968},{"a":false,"l":577,"u":790},{"a":true,"l":239,"u":779},{"a":true,"l":181,"u":796},{"a":false,"l":84,"u":501},{"a":false,"l":661,"u":851},{"a":false,"l":619,"u":951},{"a":false,"l":554,"u":791},{"a":true,"l":844,"u":997},{"a":true,"l":795,"u":944},{"a":true,"l":14,"u":891},{"a":true,"l":240,"u":418},{"a":false,"l":753,"u":786},{"a":true,"l":225,"u":401},{"a":true,"l":121,"u":756},{"a":true,"l":268,"u":957},{"a":false,"l":141,"u":498},{"a":false,"l":423,"u":811},{"a":false,"l":422,"u":492},{"a":true,"l":103,"u":893},{"a":true,"l":1,"u":335},{"a":true,"l":514,"u":557},{"a":true,"l":90,"u":501},{"a":false,"l":466,"u":588},{"a":false,"l":40,"u":746},{"a":true,"l":376,"u":437},{"a":true,"l":76,"u":261},{"a":true,"l":308,"u":464},{"a":true,"l":190,"u":353},{"a":true,"l":145,"u":630},{"a":false,"l":693,"u":752},{"a":false,"l":149,"u":655},{"a":true,"l":275,"u":759},{"a":true,"l":421,"u":492},{"a":true,"l":128,"u":494},{"a":true,"l":926,"u":950},{"a":true,"l":91,"u":658},{"a":false,"l":98,"u":227},{"a":true,"l":105,"u":402},{"a":true,"l":870,"u":916},{"a":true,"l":285,"u":957},{"a":false,"l":38,"u":947},{"a":true,"l":502,"u":750},{"a":true,"l":612,"u":836},{"a":false,"l":153,"u":209},{"a":true,"l":484,"u":547},{"a":true,"l":440,"u":700},{"a":true,"l":239,"u":743},{"a":false,"l":696,"u":737},{"a":true,"l":388,"u":977},{"a":false,"l":385,"u":806},{"a":false,"l":701,"u":789},{"a":true,"l":17,"u":108},{"a":false,"l":44,"u":232},{"a":true,"l":298,"u":923},{"a":false,"l":665,"u":767},{"a":true,"l":457,"u":463},{"a":false,"l":323,"u":898},{"a":true,"l":414,"u":699},{"a":false,"l":513,"u":768},{"a":false,"l":21,"u":881},{"a":false,"l":448,"u":515},{"a":false,"l":346,"u":916},{"a":false,"l":672,"u":893},{"a":true,"l":111,"u":132},{"a":false,"l":775,"u":868},{"a":false,"l":485,"u":619},{"a":true,"l":126,"u":519},{"a":true,"l":9,"u":680},{"a":true,"l":224,"u":832},{"a":false,"l":234,"u":496},{"a":false,"l":423,"u":485},{"a":false,"l":53,"u":976},{"a":false,"l":414,"u":539},{"a":true,"l":873,"u":876},{"a":true,"l":416,"u":993},{"a":false,"l":169,"u":213},{"a":false,"l":320,"u":943},{"a":true,"l":342,"u":380},{"a":true,"l":459,"u":765},{"a":true,"l":279,"u":484},{"a":true,"l":712,"u":998},{"a":false,"l":652,"u":749},{"a":false,"l":474,"u":543},{"a":true,"l":393,"u":564},{"a":false,"l":873,"u":878},{"a":false,"l":447,"u":488},{"a":true,"l":15,"u":331},{"a":false,"l":710,"u":810},{"a":true,"l":80,"u":417},{"a":false,"l":56,"u":802},{"a":false,"l":13,"u":71},{"a":false,"l":742,"u":767},{"a":true,"l":372,"u":826},{"a":false,"l":56,"u":657},{"a":false,"l":55,"u":564},{"a":true,"l":308,"u":569},{"a":true,"l":59,"u":833},{"a":true,"l":44,"u":99},{"a":true,"l":286,"u":876},{"a":true,"l":143,"u":878},{"a":false,"l":116,"u":419},{"a":true,"l":249,"u":290},{"a":false,"l":239,"u":279},{"a":true,"l":62,"u":929},{"a":false,"l":523,"u":733},{"a":false,"l":364,"u":933},{"a":true,"l":261,"u":373},{"a":false,"l":195,"u":256},{"a":true,"l":137,"u":205},{"a":false,"l":135,"u":913},{"a":false,"l":747,"u":893},{"a":false,"l":52,"u":927},{"a":true,"l":581,"u":632},{"a":false,"l":738,"u":935},{"a":false,"l":665,"u":812},{"a":true,"l":56,"u":571},{"a":false,"l":259,"u":622},{"a":true,"l":603,"u":952},{"a":true,"l":235,"u":325},{"a":true,"l":597,"u":806},{"a":false,"l":850,"u":852},{"a":false,"l":143,"u":897},{"a":false,"l":93,"u":292},{"a":true,"l":130,"u":778},{"a":false,"l":636,"u":796},{"a":true,"l":127,"u":413},{"a":true,"l":126,"u":174},{"a":true,"l":694,"u":750},{"a":true,"l":766,"u":882},{"a":false,"l":352,"u":835},{"a":true,"l":397,"u":757},{"a":true,"l":185,"u":551},{"a":true,"l":218,"u":560},{"a":false,"l":466,"u":637},{"a":true,"l":123,"u":630},{"a":false,"l":145,"u":486},{"a":true,"l":300,"u":925},{"a":false,"l":397,"u":957},{"a":false,"l":519,"u":748},{"a":true,"l":293,"u":559},{"a":true,"l":292,"u":980},{"a":false,"l":87,"u":704},{"a":true,"l":471,"u":926},{"a":true,"l":446,"u":737},{"a":true,"l":109,"u":837},{"a":true,"l":210,"u":451},{"a":true,"l":624,"u":923},{"a":true,"l":423,"u":596},{"a":false,"l":8,"u":316},{"a":false,"l":49,"u":624},{"a":true,"l":500,"u":747},{"a":true,"l":541,"u":799},{"a":true,"l":160,"u":309},{"a":false,"l":111,"u":538},{"a":false,"l":131,"u":932},{"a":false,"l":726,"u":785},{"a":true,"l":890,"u":914},{"a":true,"l":901,"u":945},{"a":false,"l":205,"u":560},{"a":true,"l":974,"u":978},{"a":true,"l":94,"u":207},{"a":false,"l":10,"u":393},{"a":false,"l":248,"u":577},{"a":false,"l":26,"u":282},{"a":false,"l":220,"u":809},{"a":false,"l":94,"u":726},{"a":false,"l":832,"u":883},{"a":false,"l":465,"u":544},{"a":true,"l":300,"u":830},{"a":true,"l":428,"u":619},{"a":false,"l":846,"u":981},{"a":false,"l":41,"u":879},{"a":false,"l":854,"u":961},{"a":false,"l":675,"u":725},{"a":true,"l":39,"u":947},{"a":false,"l":424,"u":991},{"a":true,"l":129,"u":646},{"a":true,"l":240,"u":625},{"a":true,"l":259,"u":300},{"a":false,"l":32,"u":589},{"a":false,"l":593,"u":932},{"a":false,"l":109,"u":973},{"a":false,"l":504,"u":879},{"a":false,"l":276,"u":557},{"a":true,"l":21,"u":337},{"a":false,"l":95,"u":594},{"a":false,"l":127,"u":968},{"a":false,"l":335,"u":399},{"a":false,"l":380,"u":589},{"a":true,"l":79,"u":300},{"a":false,"l":363,"u":819},{"a":false,"l":393,"u":742},{"a":false,"l":599,"u":915},{"a":false,"l":65,"u":671},{"a":true,"l":25,"u":441},{"a":true,"l":556,"u":871},{"a":false,"l":33,"u":752},{"a":true,"l":123,"u":665},{"a":false,"l":4,"u":50},{"a":false,"l":457,"u":735},{"a":false,"l":6,"u":834},{"a":true,"l":557,"u":575},{"a":true,"l":473,"u":608},{"a":true,"l":547,"u":622},{"a":true,"l":212,"u":278},{"a":false,"l":519,"u":894},{"a":false,"l":389,"u":584},{"a":true,"l":863,"u":893},{"a":true,"l":40,"u":907},{"a":false,"l":354,"u":473},{"a":false,"l":69,"u":135},{"a":true,"l":310,"u":709},{"a":true,"l":237,"u":910},{"a":false,"l":363,"u":992},{"a":true,"l":278,"u":992},{"a":false,"l":287,"u":980},{"a":true,"l":523,"u":979},{"a":true,"l":552,"u":997},{"a":false,"l":796,"u":996},{"a":false,"l":94,"u":701},{"a":false,"l":462,"u":788},{"a":true,"l":418,"u":964},{"a":false,"l":101,"u":122},{"a":false,"l":107,"u":918},{"a":true,"l":436,"u":595},{"a":false,"l":377,"u":655},{"a":false,"l":220,"u":871},{"a":true,"l":185,"u":343},{"a":false,"l":109,"u":180},{"a":true,"l":99,"u":192},{"a":false,"l":388,"u":646},{"a":false,"l":234,"u":376},{"a":false,"l":20,"u":928},{"a":true,"l":522,"u":813},{"a":false,"l":162,"u":864},{"a":true,"l":463,"u":840},{"a":false,"l":522,"u":979},{"a":true,"l":182,"u":537},{"a":false,"l":321,"u":722},{"a":false,"l":223,"u":233},{"a":false,"l":736,"u":991},{"a":false,"l":208,"u":604},{"a":false,"l":42,"u":130},{"a":true,"l":90,"u":755},{"a":false,"l":376,"u":692},{"a":true,"l":561,"u":720},{"a":true,"l":57,"u":801},{"a":false,"l":498,"u":559},{"a":false,"l":659,"u":751},{"a":false,"l":102,"u":511},{"a":false,"l":141,"u":947},{"a":false,"l":415,"u":430},{"a":false,"l":2,"u":339},{"a":false,"l":283,"u":522},{"a":false,"l":275,"u":470},{"a":false,"l":250,"u":857},{"a":false,"l":215,"u":928},{"a":true,"l":911,"u":988},{"a":true,"l":261,"u":667},{"a":false,"l":304,"u":995},{"a":false,"l":491,"u":751},{"a":true,"l":886,"u":969},{"a":false,"l":466,"u":647},{"a":true,"l":273,"u":740},{"a":false,"l":333,"u":381},{"a":true,"l":162,"u":775},{"a":false,"l":96,"u":133},{"a":true,"l":37,"u":981},{"a":true,"l":757,"u":759},{"a":true,"l":179,"u":425},{"a":false,"l":486,"u":508},{"a":true,"l":842,"u":846},{"a":true,"l":514,"u":574},{"a":false,"l":446,"u":833},{"a":false,"l":605,"u":769},{"a":true,"l":375,"u":918},{"a":true,"l":212,"u":350},{"a":true,"l":478,"u":697},{"a":false,"l":749,"u":989},{"a":true,"l":112,"u":512},{"a":false,"l":157,"u":376},{"a":false,"l":272,"u":487},{"a":false,"l":557,"u":765},{"a":true,"l":584,"u":796},{"a":false,"l":291,"u":346},{"a":false,"l":381,"u":683},{"a":false,"l":131,"u":793},{"a":false,"l":299,"u":691},{"a":false,"l":5,"u":749},{"a":false,"l":126,"u":377},{"a":false,"l":384,"u":530},{"a":false,"l":264,"u":425},{"a":false,"l":783,"u":889},{"a":true,"l":682,"u":831},{"a":true,"l":136,"u":267},{"a":true,"l":544,"u":656},{"a":true,"l":61,"u":213},{"a":true,"l":249,"u":434},{"a":true,"l":236,"u":437},{"a":false,"l":73,"u":932},{"a":false,"l":482,"u":831},{"a":true,"l":108,"u":240},{"a":false,"l":639,"u":986},{"a":true,"l":99,"u":491},{"a":true,"l":99,"u":570},{"a":false,"l":603,"u":887},{"a":false,"l":21,"u":256},{"a":false,"l":283,"u":861},{"a":false,"l":97,"u":807},{"a":true,"l":431,"u":458},{"a":true,"l":500,"u":741},{"a":false,"l":682,"u":853},{"a":true,"l":514,"u":673},{"a":true,"l":829,"u":909},{"a":false,"l":602,"u":962},{"a":true,"l":878,"u":947},{"a":false,"l":751,"u":760},{"a":false,"l":388,"u":521},{"a":false,"l":566,"u":909},{"a":false,"l":88,"u":97},{"a":true,"l":362,"u":510},{"a":true,"l":727,"u":989},{"a":false,"l":145,"u":748},{"a":true,"l":85,"u":264},{"a":false,"l":645,"u":865},{"a":true,"l":96,"u":280},{"a":false,"l":300,"u":684},{"a":true,"l":426,"u":553},{"a":true,"l":427,"u":453},{"a":true,"l":171,"u":172},{"a":true,"l":609,"u":629},{"a":false,"l":879,"u":913},{"a":false,"l":276,"u":852},{"a":false,"l":127,"u":402},{"a":true,"l":46,"u":651},{"a":false,"l":52,"u":691},{"a":false,"l":274,"u":661},{"a":true,"l":381,"u":922},{"a":true,"l":746,"u":747},{"a":true,"l":158,"u":178},{"a":false,"l":180,"u":319},{"a":false,"l":322,"u":879},{"a":false,"l":125,"u":863},{"a":true,"l":138,"u":703},{"a":true,"l":204,"u":530},{"a":true,"l":197,"u":333},{"a":true,"l":195,"u":832},{"a":true,"l":360,"u":474},{"a":false,"l":54,"u":883},{"a":false,"l":168,"u":445},{"a":false,"l":419,"u":838},{"a":false,"l":721,"u":978},{"a":false,"l":337,"u":648},{"a":true,"l":296,"u":644},{"a":false,"l":648,"u":902},{"a":false,"l":790,"u":989},{"a":true,"l":14,"u":643},{"a":false,"l":848,"u":862},{"a":false,"l":75,"u":409},{"a":false,"l":306,"u":898},{"a":true,"l":21,"u":46},{"a":true,"l":132,"u":839},{"a":false,"l":118,"u":773},{"a":true,"l":118,"u":595},{"a":true,"l":713,"u":827},{"a":true,"l":210,"u":435},{"a":true,"l":320,"u":722},{"a":true,"l":41,"u":591},{"a":true,"l":745,"u":994},{"a":true,"l":516,"u":555},{"a":false,"l":319,"u":561},{"a":true,"l":357,"u":732},{"a":true,"l":148,"u":399},{"a":false,"l":595,"u":597},{"a":false,"l":651,"u":894},{"a":false,"l":523,"u":945},{"a":true,"l":335,"u":446},{"a":false,"l":72,"u":495},{"a":true,"l":211,"u":264},{"a":true,"l":1,"u":506},{"a":false,"l":11,"u":704},{"a":false,"l":210,"u":886},{"a":true,"l":357,"u":720},{"a":true,"l":480,"u":657},{"a":false,"l":300,"u":582},{"a":false,"l":12,"u":544},{"a":false,"l":117,"u":551},{"a":false,"l":554,"u":742},{"a":false,"l":144,"u":151},{"a":false,"l":177,"u":190},{"a":false,"l":311,"u":655},{"a":true,"l":205,"u":671},{"a":false,"l":534,"u":969},{"a":true,"l":560,"u":948},{"a":false,"l":380,"u":664},{"a":true,"l":628,"u":824},{"a":false,"l":34,"u":579},{"a":false,"l":588,"u":881},{"a":true,"l":67,"u":444},{"a":false,"l":771,"u":928},{"a":false,"l":530,"u":970},{"a":false,"l":557,"u":725},{"a":false,"l":68,"u":990},{"a":true,"l":437,"u":518},{"a":false,"l":4,"u":991},{"a":true,"l":147,"u":496},{"a":true,"l":210,"u":510},{"a":true,"l":450,"u":719},{"a":true,"l":385,"u":552},{"a":false,"l":181,"u":222},{"a":false,"l":523,"u":572},{"a":true,"l":458,"u":814},{"a":false,"l":248,"u":755},{"a":false,"l":407,"u":925},{"a":false,"l":586,"u":935},{"a":true,"l":439,"u":752},{"a":true,"l":500,"u":754},{"a":true,"l":380,"u":576},{"a":true,"l":770,"u":793},{"a":false,"l":109,"u":301},{"a":false,"l":533,"u":816},{"a":false,"l":430,"u":884},{"a":false,"l":364,"u":766},{"a":false,"l":119,"u":648},{"a":true,"l":259,"u":851},{"a":true,"l":492,"u":566},{"a":false,"l":124,"u":792},{"a":true,"l":310,"u":322},{"a":false,"l":525,"u":828},{"a":false,"l":16,"u":879},{"a":true,"l":55,"u":967},{"a":false,"l":705,"u":722},{"a":false,"l":154,"u":527},{"a":false,"l":688,"u":935},{"a":true,"l":301,"u":378},{"a":false,"l":5,"u":367},{"a":true,"l":54,"u":731},{"a":true,"l":34,"u":149},{"a":true,"l":612,"u":980},{"a":true,"l":126,"u":903},{"a":true,"l":161,"u":262},{"a":false,"l":683,"u":703},{"a":true,"l":451,"u":657},{"a":false,"l":238,"u":829},{"a":true,"l":546,"u":686},{"a":false,"l":866,"u":989},{"a":false,"l":600,"u":720},{"a":false,"l":349,"u":931},{"a":false,"l":91,"u":111},{"a":true,"l":28,"u":533},{"a":true,"l":855,"u":964},{"a":true,"l":701,"u":784},{"a":false,"l":419,"u":735},{"a":true,"l":467,"u":785},{"a":true,"l":807,"u":848},{"a":true,"l":94,"u":237},{"a":true,"l":92,"u":422},{"a":false,"l":75,"u":966},{"a":false,"l":342,"u":520},{"a":true,"l":59,"u":903},{"a":false,"l":436,"u":668},{"a":true,"l":573,"u":981},{"a":true,"l":481,"u":692},{"a":false,"l":346,"u":972},{"a":false,"l":666,"u":850},{"a":false,"l":15,"u":357},{"a":true,"l":107,"u":869},{"a":false,"l":434,"u":527},{"a":false,"l":114,"u":237},{"a":true,"l":750,"u":892},{"a":true,"l":431,"u":709},{"a":true,"l":463,"u":974},{"a":true,"l":751,"u":859},{"a":true,"l":413,"u":734},{"a":false,"l":763,"u":874},{"a":false,"l":338,"u":657},{"a":true,"l":852,"u":925},{"a":true,"l":46,"u":280},{"a":true,"l":407,"u":780},{"a":true,"l":625,"u":962},{"a":true,"l":329,"u":403},{"a":false,"l":455,"u":564},{"a":true,"l":528,"u":777},{"a":true,"l":138,"u":980},{"a":false,"l":544,"u":586},{"a":true,"l":344,"u":432},{"a":true,"l":805,"u":838},{"a":true,"l":213,"u":605},{"a":false,"l":822,"u":978},{"a":true,"l":647,"u":682},{"a":false,"l":486,"u":674},{"a":true,"l":227,"u":283},{"a":true,"l":759,"u":774},{"a":true,"l":942,"u":957},{"a":false,"l":356,"u":879},{"a":false,"l":534,"u":859},{"a":false,"l":505,"u":628},{"a":true,"l":289,"u":851},{"a":false,"l":795,"u":818},{"a":true,"l":308,"u":786},{"a":true,"l":461,"u":844},{"a":false,"l":475,"u":761},{"a":false,"l":34,"u":37},{"a":true,"l":84,"u":856},{"a":false,"l":159,"u":678},{"a":true,"l":4,"u":910},{"a":false,"l":704,"u":841},{"a":true,"l":492,"u":796},{"a":false,"l":399,"u":844},{"a":true,"l":423,"u":759},{"a":false,"l":352,"u":595},{"a":false,"l":151,"u":174},{"a":false,"l":23,"u":387},{"a":false,"l":407,"u":425},{"a":false,"l":197,"u":730},{"a":false,"l":365,"u":648},{"a":false,"l":613,"u":783},{"a":true,"l":211,"u":867},{"a":false,"l":466,"u":624},{"a":true,"l":30,"u":548},{"a":true,"l":320,"u":910},{"a":false,"l":151,"u":372},{"a":true,"l":571,"u":967},{"a":false,"l":927,"u":979},{"a":false,"l":16,"u":490},{"a":false,"l":432,"u":513},{"a":false,"l":95,"u":500},{"a":true,"l":357,"u":692},{"a":true,"l":340,"u":629},{"a":false,"l":575,"u":623},{"a":false,"l":243,"u":838},{"a":false,"l":652,"u":875},{"a":false,"l":482,"u":621},{"a":false,"l":668,"u":710},{"a":true,"l":542,"u":555},{"a":false,"l":427,"u":938},{"a":false,"l":190,"u":391},{"a":false,"l":214,"u":906},{"a":true,"l":51,"u":389},{"a":false,"l":282,"u":659},{"a":true,"l":156,"u":579},{"a":true,"l":217,"u":731},{"a":false,"l":190,"u":929},{"a":false,"l":100,"u":702},{"a":false,"l":581,"u":817},{"a":true,"l":183,"u":207},{"a":false,"l":333,"u":610},{"a":false,"l":424,"u":427},{"a":true,"l":17,"u":304},{"a":false,"l":530,"u":565},{"a":false,"l":130,"u":235},{"a":true,"l":190,"u":904},{"a":true,"l":59,"u":945},{"a":false,"l":537,"u":895},{"a":true,"l":779,"u":809},{"a":false,"l":560,"u":766},{"a":false,"l":425,"u":540},{"a":true,"l":516,"u":547},{"a":true,"l":209,"u":240},{"a":true,"l":531,"u":711},{"a":false,"l":87,"u":170},{"a":false,"l":156,"u":950},{"a":false,"l":523,"u":799},{"a":true,"l":116,"u":486},{"a":false,"l":564,"u":714},{"a":true,"l":796,"u":910},{"a":false,"l":257,"u":780},{"a":true,"l":173,"u":573},{"a":true,"l":63,"u":591},{"a":false,"l":279,"u":426},{"a":false,"l":654,"u":801},{"a":true,"l":532,"u":758},{"a":true,"l":224,"u":929},{"a":true,"l":257,"u":912},{"a":true,"l":425,"u":466},{"a":false,"l":192,"u":434},{"a":true,"l":638,"u":640},{"a":true,"l":864,"u":950},{"a":true,"l":281,"u":361},{"a":true,"l":421,"u":575},{"a":false,"l":3,"u":799},{"a":false,"l":487,"u":515},{"a":true,"l":453,"u":741},{"a":false,"l":269,"u":526},{"a":false,"l":176,"u":256},{"a":false,"l":19,"u":167},{"a":true,"l":449,"u":701},{"a":true,"l":100,"u":699},{"a":true,"l":267,"u":397},{"a":true,"l":131,"u":363},{"a":false,"l":774,"u":971},{"a":false,"l":112,"u":533},{"a":true,"l":370,"u":884},{"a":false,"l":325,"u":667},{"a":false,"l":116,"u":128},{"a":true,"l":182,"u":357},{"a":true,"l":5,"u":751},{"a":true,"l":121,"u":926},{"a":false,"l":63,"u":676},{"a":true,"l":265,"u":715},{"a":false,"l":244,"u":323},{"a":true,"l":722,"u":884},{"a":true,"l":291,"u":463},{"a":false,"l":106,"u":395},{"a":true,"l":319,"u":779},{"a":true,"l":377,"u":412},{"a":true,"l":58,"u":182},{"a":false,"l":714,"u":922},{"a":true,"l":197,"u":907},{"a":true,"l":40,"u":455},{"a":true,"l":72,"u":477},{"a":true,"l":80,"u":120},{"a":false,"l":490,"u":929},{"a":true,"l":265,"u":620},{"a":true,"l":601,"u":783},{"a":false,"l":744,"u":963},{"a":true,"l":597,"u":877},{"a":true,"l":35,"u":376},{"a":true,"l":607,"u":626},{"a":true,"l":694,"u":849},{"a":false,"l":833,"u":917},{"a":false,"l":426,"u":570},{"a":true,"l":717,"u":933},{"a":false,"l":70,"u":311},{"a":true,"l":233,"u":704},{"a":true,"l":1,"u":522},{"a":true,"l":52,"u":254},{"a":false,"l":117,"u":779},{"a":false,"l":712,"u":852},{"a":true,"l":8,"u":918},{"a":false,"l":118,"u":159},{"a":false,"l":74,"u":611},{"a":true,"l":376,"u":969},{"a":false,"l":213,"u":791},{"a":true,"l":347,"u":898},{"a":true,"l":20,"u":977},{"a":false,"l":167,"u":640},{"a":true,"l":856,"u":898},{"a":false,"l":768,"u":870},{"a":false,"l":440,"u":626},{"a":false,"l":162,"u":313},{"a":true,"l":92,"u":752},{"a":true,"l":79,"u":769},{"a":true,"l":516,"u":878},{"a":true,"l":494,"u":698},{"a":false,"l":81,"u":797},{"a":false,"l":482,"u":917},{"a":false,"l":19,"u":542},{"a":false,"l":182,"u":297},{"a":false,"l":242,"u":270},{"a":true,"l":92,"u":921},{"a":false,"l":523,"u":680},{"a":false,"l":717,"u":912},{"a":true,"l":542,"u":796},{"a":false,"l":791,"u":911},{"a":true,"l":47,"u":408},{"a":true,"l":102,"u":666},{"a":false,"l":22,"u":469},{"a":false,"l":242,"u":290},{"a":false,"l":397,"u":631},{"a":false,"l":164,"u":364},{"a":false,"l":387,"u":800},{"a":false,"l":678,"u":854},{"a":false,"l":20,"u":783},{"a":true,"l":357,"u":446},{"a":false,"l":113,"u":176},{"a":true,"l":291,"u":975},{"a":true,"l":251,"u":483},{"a":true,"l":14,"u":684},{"a":true,"l":545,"u":602},{"a":false,"l":621,"u":651},{"a":true,"l":193,"u":664},{"a":true,"l":485,"u":851},{"a":true,"l":253,"u":716},{"a":true,"l":278,"u":414},{"a":false,"l":69,"u":381},{"a":false,"l":166,"u":576},{"a":true,"l":370,"u":788},{"a":true,"l":325,"u":842},{"a":false,"l":548,"u":968},{"a":true,"l":317,"u":863},{"a":true,"l":16,"u":222},{"a":false,"l":73,"u":516},{"a":true,"l":642,"u":720},{"a":true,"l":522,"u":824},{"a":false,"l":467,"u":951},{"a":true,"l":139,"u":562},{"a":true,"l":211,"u":649},{"a":false,"l":1,"u":76},{"a":true,"l":66,"u":566},{"a":true,"l":349,"u":456},{"a":true,"l":30,"u":961},{"a":false,"l":187,"u":911},{"a":true,"l":196,"u":294},{"a":false,"l":517,"u":731},{"a":true,"l":784,"u":947},{"a":false,"l":162,"u":253},{"a":false,"l":859,"u":902},{"a":false,"l":148,"u":626},{"a":false,"l":137,"u":182},{"a":true,"l":340,"u":815},{"a":false,"l":824,"u":941},{"a":false,"l":232,"u":772},{"a":false,"l":11,"u":356},{"a":false,"l":581,"u":871},{"a":true,"l":253,"u":266},{"a":true,"l":107,"u":901},{"a":false,"l":109,"u":799},{"a":true,"l":473,"u":896},{"a":false,"l":11,"u":966},{"a":false,"l":18,"u":730},{"a":false,"l":464,"u":602},{"a":true,"l":538,"u":740},{"a":false,"l":128,"u":798},{"a":true,"l":476,"u":987},{"a":true,"l":378,"u":880},{"a":true,"l":131,"u":215},{"a":true,"l":432,"u":631},{"a":false,"l":145,"u":834},{"a":false,"l":166,"u":311},{"a":false,"l":720,"u":850},{"a":false,"l":232,"u":316},{"a":false,"l":251,"u":863},{"a":true,"l":275,"u":574},{"a":false,"l":354,"u":389},{"a":true,"l":49,"u":488},{"a":true,"l":160,"u":848},{"a":true,"l":223,"u":549},{"a":false,"l":828,"u":961},{"a":true,"l":163,"u":166},{"a":false,"l":120,"u":711},{"a":true,"l":880,"u":900},{"a":false,"l":456,"u":987},{"a":false,"l":458,"u":983},{"a":false,"l":352,"u":798},{"a":false,"l":583,"u":739},{"a":false,"l":592,"u":846},{"a":true,"l":468,"u":969},{"a":false,"l":146,"u":771},{"a":false,"l":832,"u":865},{"a":false,"l":96,"u":443},{"a":false,"l":435,"u":495},{"a":true,"l":491,"u":852},{"a":false,"l":474,"u":872},{"a":false,"l":411,"u":549},{"a":true,"l":101,"u":826},{"a":true,"l":200,"u":873},{"a":false,"l":8,"u":755},{"a":false,"l":423,"u":565},{"a":false,"l":251,"u":350},{"a":true,"l":514,"u":658},{"a":false,"l":541,"u":802},{"a":true,"l":514,"u":908},{"a":false,"l":298,"u":570},{"a":false,"l":394,"u":962},{"a":true,"l":196,"u":432},{"a":true,"l":442,"u":540},{"a":true,"l":464,"u":603},{"a":true,"l":107,"u":228},{"a":false,"l":390,"u":989},{"a":true,"l":254,"u":874},{"a":false,"l":752,"u":951},{"a":true,"l":567,"u":882},{"a":false,"l":661,"u":905},{"a":false,"l":737,"u":959},{"a":true,"l":67,"u":224},{"a":false,"l":519,"u":573},{"a":true,"l":443,"u":456},{"a":false,"l":461,"u":926},{"a":true,"l":280,"u":754},{"a":false,"l":95,"u":650},{"a":false,"l":159,"u":740},{"a":false,"l":139,"u":893},{"a":false,"l":272,"u":453},{"a":true,"l":731,"u":900},{"a":false,"l":98,"u":124},{"a":true,"l":327,"u":765},{"a":false,"l":65,"u":915},{"a":false,"l":860,"u":891},{"a":false,"l":510,"u":857},{"a":true,"l":188,"u":487},{"a":false,"l":500,"u":722},{"a":true,"l":922,"u":942},{"a":false,"l":513,"u":590},{"a":true,"l":565,"u":761},{"a":true,"l":688,"u":697},{"a":false,"l":358,"u":766},{"a":false,"l":96,"u":168},{"a":false,"l":280,"u":586},{"a":true,"l":183,"u":743},{"a":true,"l":639,"u":992},{"a":true,"l":66,"u":985},{"a":true,"l":446,"u":466},{"a":false,"l":445,"u":579},{"a":false,"l":256,"u":800},{"a":false,"l":762,"u":878},{"a":true,"l":250,"u":883},{"a":true,"l":880,"u":944},{"a":true,"l":537,"u":620},{"a":false,"l":423,"u":905},{"a":false,"l":209,"u":339},{"a":false,"l":85,"u":723},{"a":true,"l":174,"u":278},{"a":true,"l":185,"u":886},{"a":true,"l":382,"u":829},{"a":false,"l":215,"u":860},{"a":true,"l":63,"u":558},{"a":false,"l":600,"u":672},{"a":false,"l":310,"u":492},{"a":false,"l":860,"u":994},{"a":true,"l":379,"u":581},{"a":false,"l":412,"u":452},{"a":false,"l":285,"u":680},{"a":true,"l":175,"u":292},{"a":false,"l":272,"u":718},{"a":true,"l":467,"u":757},{"a":false,"l":418,"u":630},{"a":false,"l":156,"u":498},{"a":true,"l":817,"u":897},{"a":false,"l":441,"u":443},{"a":true,"l":423,"u":565},{"a":false,"l":76,"u":678},{"a":true,"l":639,"u":785},{"a":false,"l":478,"u":963},{"a":true,"l":361,"u":763},{"a":false,"l":74,"u":481},{"a":true,"l":331,"u":907},{"a":false,"l":575,"u":582},{"a":true,"l":348,"u":541},{"a":true,"l":1,"u":91},{"a":true,"l":656,"u":670},{"a":false,"l":357,"u":833},{"a":false,"l":254,"u":753},{"a":true,"l":132,"u":470},{"a":true,"l":482,"u":682},{"a":false,"l":492,"u":589},{"a":false,"l":17,"u":296},{"a":false,"l":603,"u":673},{"a":false,"l":760,"u":822},{"a":false,"l":191,"u":654},{"a":false,"l":799,"u":982},{"a":false,"l":8,"u":28},{"a":false,"l":464,"u":805},{"a":false,"l":645,"u":748},{"a":true,"l":739,"u":998},{"a":false,"l":814,"u":951},{"a":false,"l":50,"u":954},{"a":true,"l":765,"u":958},{"a":false,"l":76,"u":600},{"a":true,"l":148,"u":257},{"a":true,"l":83,"u":535},{"a":false,"l":468,"u":957},{"a":false,"l":186,"u":619},{"a":false,"l":115,"u":443},{"a":true,"l":31,"u":543},{"a":false,"l":427,"u":644},{"a":false,"l":183,"u":712},{"a":false,"l":854,"u":975},{"a":true,"l":422,"u":915},{"a":false,"l":258,"u":701},{"a":true,"l":77,"u":731},{"a":true,"l":606,"u":685},{"a":false,"l":305,"u":728},{"a":false,"l":403,"u":407},{"a":false,"l":458,"u":753},{"a":true,"l":651,"u":877},{"a":false,"l":662,"u":729},{"a":true,"l":95,"u":486},{"a":true,"l":67,"u":430},{"a":true,"l":217,"u":772},{"a":false,"l":663,"u":715},{"a":false,"l":481,"u":927},{"a":false,"l":66,"u":468},{"a":false,"l":45,"u":738},{"a":true,"l":210,"u":471},{"a":true,"l":240,"u":432},{"a":false,"l":139,"u":632},{"a":true,"l":194,"u":391},{"a":true,"l":712,"u":912},{"a":true,"l":227,"u":736},{"a":false,"l":113,"u":198},{"a":true,"l":313,"u":355},{"a":true,"l":727,"u":866},{"a":true,"l":393,"u":892},{"a":false,"l":103,"u":599},{"a":false,"l":229,"u":406},{"a":true,"l":800,"u":923},{"a":false,"l":630,"u":863},{"a":true,"l":311,"u":459},{"a":false,"l":721,"u":934},{"a":true,"l":679,"u":779},{"a":true,"l":43,"u":200},{"a":false,"l":54,"u":610},{"a":false,"l":612,"u":817},{"a":false,"l":122,"u":826},{"a":true,"l":294,"u":515},{"a":true,"l":267,"u":734},{"a":true,"l":259,"u":627},{"a":false,"l":306,"u":580},{"a":false,"l":272,"u":286},{"a":true,"l":53,"u":246},{"a":false,"l":333,"u":561},{"a":true,"l":133,"u":991},{"a":false,"l":89,"u":260},{"a":false,"l":16,"u":731},{"a":true,"l":235,"u":871},{"a":false,"l":101,"u":196},{"a":false,"l":733,"u":802},{"a":true,"l":491,"u":774},{"a":true,"l":238,"u":485},{"a":false,"l":476,"u":665},{"a":false,"l":727,"u":905},{"a":true,"l":28,"u":821},{"a":false,"l":157,"u":796},{"a":true,"l":484,"u":658},{"a":false,"l":628,"u":850},{"a":true,"l":588,"u":929},{"a":true,"l":599,"u":904},{"a":true,"l":125,"u":539},{"a":true,"l":156,"u":459},{"a":false,"l":302,"u":927},{"a":true,"l":29,"u":718},{"a":false,"l":523,"u":591},{"a":true,"l":170,"u":984},{"a":false,"l":548,"u":654},{"a":false,"l":429,"u":877},{"a":true,"l":74,"u":148},{"a":true,"l":146,"u":475},{"a":true,"l":153,"u":594},{"a":false,"l":519,"u":923},{"a":true,"l":246,"u":385},{"a":true,"l":723,"u":786},{"a":false,"l":33,"u":710},{"a":false,"l":101,"u":550},{"a":true,"l":281,"u":800},{"a":true,"l":834,"u":937},{"a":true,"l":176,"u":584},{"a":false,"l":457,"u":766},{"a":true,"l":632,"u":979},{"a":true,"l":443,"u":529},{"a":false,"l":205,"u":503},{"a":true,"l":702,"u":946},{"a":false,"l":280,"u":505},{"a":true,"l":89,"u":194},{"a":true,"l":264,"u":827},{"a":true,"l":539,"u":909},{"a":true,"l":15,"u":418},{"a":false,"l":294,"u":718},{"a":true,"l":79,"u":887},{"a":false,"l":613,"u":667},{"a":true,"l":359,"u":405},{"a":true,"l":274,"u":808},{"a":false,"l":359,"u":971},{"a":false,"l":112,"u":597},{"a":true,"l":47,"u":538},{"a":true,"l":309,"u":690},{"a":false,"l":892,"u":969},{"a":false,"l":492,"u":887},{"a":false,"l":560,"u":718},{"a":true,"l":338,"u":510},{"a":true,"l":64,"u":356},{"a":false,"l":163,"u":600},{"a":true,"l":819,"u":875},{"a":true,"l":215,"u":764},{"a":false,"l":18,"u":350},{"a":true,"l":99,"u":783},{"a":false,"l":421,"u":656},{"a":true,"l":273,"u":291},{"a":true,"l":121,"u":408},{"a":true,"l":135,"u":492},{"a":false,"l":32,"u":338},{"a":true,"l":271,"u":752},{"a":false,"l":361,"u":784},{"a":true,"l":402,"u":961},{"a":false,"l":438,"u":737},{"a":false,"l":313,"u":741},{"a":false,"l":448,"u":724},{"a":true,"l":469,"u":947},{"a":true,"l":157,"u":416},{"a":true,"l":160,"u":676},{"a":true,"l":179,"u":682},{"a":false,"l":6,"u":839},{"a":true,"l":277,"u":763},{"a":false,"l":194,"u":941},{"a":true,"l":654,"u":669},{"a":true,"l":369,"u":434},{"a":false,"l":492,"u":869},{"a":true,"l":71,"u":267},{"a":true,"l":502,"u":608},{"a":true,"l":178,"u":642},{"a":true,"l":745,"u":936},{"a":true,"l":261,"u":627},{"a":false,"l":583,"u":811},{"a":true,"l":544,"u":884},{"a":true,"l":434,"u":752},{"a":false,"l":173,"u":740},{"a":false,"l":440,"u":612},{"a":true,"l":22,"u":398},{"a":false,"l":489,"u":781},{"a":false,"l":172,"u":680},{"a":false,"l":269,"u":387},{"a":false,"l":319,"u":389},{"a":true,"l":201,"u":639},{"a":false,"l":124,"u":886},{"a":true,"l":261,"u":781},{"a":false,"l":61,"u":807},{"a":false,"l":22,"u":607},{"a":true,"l":391,"u":662},{"a":true,"l":791,"u":986},{"a":false,"l":661,"u":980},{"a":false,"l":33,"u":823},{"a":false,"l":97,"u":236},{"a":true,"l":482,"u":516},{"a":true,"l":321,"u":582},{"a":true,"l":234,"u":851},{"a":false,"l":350,"u":994},{"a":true,"l":444,"u":912},{"a":false,"l":329,"u":911},{"a":false,"l":532,"u":876},{"a":false,"l":652,"u":657},{"a":false,"l":385,"u":761},{"a":true,"l":94,"u":277},{"a":true,"l":72,"u":844},{"a":false,"l":303,"u":754},{"a":true,"l":212,"u":473},{"a":false,"l":85,"u":762},{"a":false,"l":182,"u":627},{"a":false,"l":134,"u":702},{"a":false,"l":13,"u":146},{"a":true,"l":199,"u":898},{"a":true,"l":413,"u":823},{"a":true,"l":227,"u":728},{"a":false,"l":328,"u":436},{"a":true,"l":343,"u":742},{"a":false,"l":271,"u":827},{"a":false,"l":377,"u":701},{"a":true,"l":367,"u":476},{"a":false,"l":9,"u":671},{"a":true,"l":130,"u":823},{"a":true,"l":6,"u":954},{"a":true,"l":161,"u":632},{"a":false,"l":115,"u":645},{"a":false,"l":709,"u":877},{"a":true,"l":60,"u":227},{"a":true,"l":303,"u":752},{"a":true,"l":303,"u":706},{"a":true,"l":292,"u":503},{"a":true,"l":199,"u":553},{"a":true,"l":300,"u":389},{"a":false,"l":745,"u":923},{"a":true,"l":365,"u":514},{"a":false,"l":178,"u":927},{"a":true,"l":54,"u":591},{"a":false,"l":209,"u":273},{"a":false,"l":121,"u":218},{"a":true,"l":56,"u":955},{"a":false,"l":55,"u":709},{"a":false,"l":186,"u":366},{"a":false,"l":44,"u":829},{"a":false,"l":239,"u":532},{"a":false,"l":102,"u":304},{"a":true,"l":122,"u":803},{"a":true,"l":118,"u":361},{"a":true,"l":15,"u":865},{"a":false,"l":261,"u":300},{"a":true,"l":249,"u":315},{"a":true,"l":229,"u":276},{"a":true,"l":724,"u":901},{"a":true,"l":500,"u":930},{"a":false,"l":600,"u":864},{"a":true,"l":663,"u":771},{"a":false,"l":705,"u":730},{"a":false,"l":413,"u":521},{"a":true,"l":436,"u":571},{"a":true,"l":18,"u":401},{"a":false,"l":418,"u":732},{"a":false,"l":418,"u":942},{"a":false,"l":525,"u":752},{"a":true,"l":3,"u":56},{"a":false,"l":287,"u":594},{"a":true,"l":146,"u":147},{"a":true,"l":563,"u":858},{"a":false,"l":36,"u":953},{"a":false,"l":21,"u":396},{"a":true,"l":473,"u":651},{"a":false,"l":42,"u":936},{"a":false,"l":87,"u":717},{"a":false,"l":395,"u":571},{"a":false,"l":442,"u":734},{"a":false,"l":575,"u":830},{"a":true,"l":849,"u":955},{"a":false,"l":636,"u":683},{"a":true,"l":195,"u":670},{"a":true,"l":206,"u":397},{"a":true,"l":57,"u":472},{"a":true,"l":230,"u":729},{"a":true,"l":531,"u":834},{"a":true,"l":51,"u":330},{"a":false,"l":528,"u":623},{"a":false,"l":221,"u":336},{"a":true,"l":43,"u":508},{"a":false,"l":611,"u":934},{"a":true,"l":188,"u":415},{"a":false,"l":153,"u":372},{"a":true,"l":170,"u":598},{"a":true,"l":40,"u":904},{"a":true,"l":265,"u":934},{"a":true,"l":199,"u":370},{"a":false,"l":338,"u":386},{"a":true,"l":795,"u":992},{"a":true,"l":223,"u":765},{"a":false,"l":747,"u":995},{"a":false,"l":370,"u":943},{"a":false,"l":391,"u":763},{"a":false,"l":381,"u":757},{"a":false,"l":45,"u":173},{"a":false,"l":540,"u":957},{"a":true,"l":289,"u":325},{"a":true,"l":642,"u":840},{"a":false,"l":476,"u":616},{"a":false,"l":59,"u":206},{"a":false,"l":169,"u":844},{"a":false,"l":533,"u":968},{"a":true,"l":159,"u":488},{"a":true,"l":513,"u":652},{"a":true,"l":413,"u":911},{"a":false,"l":511,"u":861},{"a":false,"l":674,"u":712},{"a":false,"l":781,"u":983},{"a":false,"l":399,"u":529},{"a":true,"l":278,"u":641},{"a":false,"l":344,"u":943},{"a":true,"l":169,"u":593},{"a":true,"l":564,"u":867},{"a":true,"l":559,"u":673},{"a":true,"l":86,"u":671},{"a":true,"l":486,"u":791},{"a":false,"l":74,"u":81},{"a":true,"l":230,"u":795},{"a":false,"l":9,"u":179},{"a":false,"l":457,"u":929},{"a":false,"l":49,"u":446},{"a":false,"l":171,"u":446},{"a":false,"l":96,"u":886},{"a":false,"l":137,"u":546},{"a":false,"l":378,"u":988},{"a":true,"l":418,"u":546},{"a":false,"l":437,"u":445},{"a":true,"l":859,"u":923},{"a":true,"l":204,"u":456},{"a":true,"l":340,"u":553},{"a":true,"l":513,"u":572},{"a":true,"l":275,"u":492},{"a":false,"l":181,"u":471},{"a":true,"l":46,"u":852},{"a":true,"l":321,"u":483},{"a":true,"l":15,"u":505},{"a":true,"l":228,"u":917},{"a":true,"l":140,"u":788},{"a":false,"l":612,"u":798},{"a":false,"l":178,"u":391},{"a":false,"l":144,"u":890},{"a":true,"l":49,"u":265},{"a":true,"l":868,"u":910},{"a":true,"l":347,"u":821},{"a":false,"l":397,"u":542},{"a":true,"l":624,"u":683},{"a":false,"l":116,"u":669},{"a":false,"l":249,"u":868},{"a":false,"l":150,"u":970},{"a":false,"l":159,"u":549},{"a":true,"l":65,"u":767},{"a":true,"l":532,"u":909},{"a":true,"l":430,"u":461},{"a":true,"l":404,"u":589},{"a":false,"l":34,"u":938},{"a":true,"l":420,"u":865},{"a":true,"l":423,"u":642},{"a":false,"l":656,"u":802},{"a":true,"l":213,"u":990},{"a":true,"l":58,"u":964},{"a":true,"l":165,"u":549},{"a":false,"l":135,"u":504},{"a":true,"l":624,"u":750},{"a":true,"l":224,"u":766},{"a":true,"l":283,"u":883},{"a":false,"l":26,"u":102},{"a":true,"l":194,"u":196},{"a":true,"l":95,"u":447},{"a":false,"l":177,"u":761},{"a":true,"l":337,"u":903},{"a":true,"l":130,"u":908},{"a":false,"l":150,"u":905},{"a":true,"l":229,"u":837},{"a":false,"l":160,"u":893},{"a":false,"l":84,"u":784},{"a":false,"l":69,"u":433},{"a":true,"l":527,"u":882},{"a":true,"l":253,"u":907},{"a":true,"l":580,"u":769},{"a":true,"l":605,"u":793},{"a":true,"l":476,"u":914},{"a":true,"l":169,"u":224},{"a":true,"l":266,"u":962},{"a":true,"l":490,"u":817},{"a":true,"l":928,"u":988},{"a":true,"l":34,"u":81},{"a":true,"l":384,"u":510},{"a":false,"l":289,"u":747},{"a":false,"l":680,"u":942},{"a":false,"l":523,"u":652},{"a":false,"l":101,"u":596},{"a":false,"l":645,"u":720},{"a":false,"l":598,"u":620},{"a":true,"l":234,"u":606},{"a":false,"l":82,"u":520},{"a":true,"l":437,"u":925},{"a":true,"l":148,"u":725},{"a":true,"l":47,"u":453},{"a":true,"l":533,"u":560},{"a":false,"l":36,"u":145},{"a":false,"l":170,"u":708},{"a":true,"l":72,"u":881},{"a":false,"l":223,"u":595},{"a":true,"l":741,"u":792},{"a":true,"l":43,"u":819},{"a":false,"l":71,"u":748},{"a":true,"l":18,"u":415},{"a":true,"l":126,"u":849},{"a":true,"l":895,"u":919},{"a":false,"l":641,"u":886},{"a":false,"l":277,"u":415},{"a":true,"l":250,"u":445},{"a":true,"l":27,"u":188},{"a":false,"l":888,"u":938},{"a":false,"l":2,"u":247},{"a":false,"l":539,"u":966},{"a":false,"l":204,"u":610},{"a":true,"l":779,"u":851},{"a":true,"l":366,"u":843},{"a":true,"l":8,"u":735},{"a":true,"l":253,"u":720},{"a":true,"l":514,"u":921},{"a":false,"l":55,"u":207},{"a":false,"l":95,"u":565},{"a":false,"l":540,"u":723},{"a":false,"l":117,"u":419},{"a":true,"l":1,"u":608},{"a":false,"l":312,"u":689},{"a":true,"l":34,"u":344},{"a":false,"l":724,"u":803},{"a":true,"l":484,"u":817},{"a":true,"l":328,"u":933},{"a":true,"l":643,"u":780},{"a":false,"l":866,"u":939},{"a":false,"l":3,"u":664},{"a":true,"l":450,"u":823},{"a":false,"l":714,"u":931},{"a":true,"l":36,"u":570},{"a":false,"l":345,"u":681},{"a":false,"l":74,"u":216},{"a":true,"l":292,"u":443},{"a":true,"l":745,"u":762},{"a":true,"l":649,"u":766},{"a":true,"l":458,"u":549},{"a":false,"l":45,"u":595},{"a":false,"l":256,"u":358},{"a":true,"l":290,"u":457},{"a":true,"l":409,"u":821},{"a":false,"l":550,"u":734},{"a":false,"l":248,"u":389},{"a":true,"l":388,"u":839},{"a":true,"l":56,"u":858},{"a":true,"l":638,"u":849},{"a":false,"l":41,"u":521},{"a":false,"l":252,"u":628},{"a":false,"l":786,"u":931},{"a":false,"l":678,"u":863},{"a":false,"l":300,"u":893},{"a":true,"l":56,"u":291},{"a":true,"l":425,"u":522},{"a":false,"l":197,"u":956},{"a":true,"l":460,"u":606},{"a":false,"l":398,"u":713},{"a":true,"l":325,"u":557},{"a":false,"l":25,"u":28},{"a":true,"l":38,"u":860},{"a":true,"l":198,"u":820},{"a":true,"l":428,"u":718},{"a":false,"l":102,"u":383},{"a":true,"l":52,"u":403},{"a":true,"l":331,"u":394},{"a":true,"l":790,"u":875},{"a":false,"l":215,"u":407},{"a":false,"l":379,"u":704},{"a":true,"l":53,"u":273},{"a":true,"l":520,"u":897},{"a":true,"l":509,"u":693},{"a":false,"l":575,"u":664},{"a":false,"l":143,"u":947},{"a":false,"l":140,"u":517},{"a":false,"l":453,"u":742},{"a":false,"l":408,"u":674},{"a":false,"l":747,"u":975},{"a":false,"l":205,"u":793},{"a":true,"l":396,"u":608},{"a":false,"l":22,"u":814},{"a":false,"l":509,"u":983},{"a":true,"l":26,"u":404},{"a":false,"l":308,"u":395},{"a":true,"l":86,"u":300},{"a":false,"l":123,"u":636},{"a":false,"l":294,"u":658},{"a":true,"l":195,"u":608},{"a":false,"l":281,"u":727},{"a":true,"l":305,"u":918},{"a":false,"l":294,"u":707},{"a":true,"l":76,"u":913},{"a":false,"l":402,"u":745},{"a":true,"l":214,"u":542},{"a":true,"l":141,"u":184},{"a":true,"l":484,"u":813},{"a":false,"l":680,"u":800},{"a":false,"l":69,"u":676},{"a":false,"l":541,"u":599},{"a":true,"l":349,"u":982},{"a":true,"l":237,"u":251},{"a":true,"l":335,"u":744},{"a":true,"l":930,"u":978},{"a":true,"l":510,"u":946},{"a":false,"l":744,"u":748},{"a":false,"l":193,"u":373},{"a":false,"l":313,"u":878},{"a":true,"l":32,"u":554},{"a":true,"l":66,"u":197},{"a":false,"l":365,"u":507},{"a":false,"l":20,"u":422},{"a":false,"l":51,"u":320},{"a":false,"l":476,"u":577},{"a":true,"l":824,"u":856},{"a":false,"l":262,"u":485},{"a":false,"l":21,"u":439},{"a":false,"l":720,"u":772},{"a":true,"l":102,"u":770},{"a":true,"l":439,"u":649},{"a":false,"l":12,"u":525},{"a":false,"l":210,"u":514},{"a":true,"l":702,"u":850},{"a":false,"l":445,"u":836},{"a":false,"l":233,"u":948},{"a":true,"l":103,"u":381},{"a":false,"l":471,"u":693},{"a":true,"l":545,"u":815},{"a":false,"l":61,"u":883},{"a":true,"l":601,"u":994},{"a":true,"l":653,"u":693},{"a":true,"l":136,"u":292},{"a":true,"l":233,"u":817},{"a":true,"l":237,"u":372},{"a":false,"l":278,"u":524},{"a":true,"l":2,"u":928},{"a":false,"l":334,"u":654},{"a":true,"l":255,"u":774},{"a":true,"l":135,"u":271},{"a":true,"l":433,"u":734},{"a":true,"l":318,"u":967},{"a":true,"l":371,"u":842},{"a":false,"l":823,"u":981},{"a":false,"l":155,"u":492},{"a":false,"l":449,"u":899},{"a":true,"l":789,"u":817},{"a":true,"l":239,"u":836},{"a":true,"l":7,"u":438},{"a":false,"l":502,"u":920},{"a":false,"l":628,"u":828},{"a":true,"l":195,"u":334},{"a":true,"l":618,"u":656},{"a":true,"l":414,"u":485},{"a":false,"l":861,"u":955},{"a":true,"l":192,"u":653},{"a":false,"l":382,"u":931},{"a":false,"l":322,"u":868},{"a":false,"l":537,"u":828},{"a":false,"l":11,"u":758},{"a":false,"l":215,"u":782},{"a":true,"l":406,"u":708},{"a":true,"l":448,"u":919},{"a":true,"l":406,"u":685},{"a":false,"l":631,"u":702},{"a":false,"l":332,"u":982},{"a":true,"l":477,"u":731},{"a":true,"l":677,"u":881},{"a":true,"l":879,"u":902},{"a":true,"l":885,"u":910},{"a":true,"l":61,"u":226},{"a":false,"l":839,"u":890},{"a":false,"l":361,"u":543},{"a":true,"l":348,"u":349},{"a":false,"l":19,"u":182},{"a":true,"l":172,"u":611},{"a":true,"l":717,"u":848},{"a":true,"l":208,"u":303},{"a":true,"l":248,"u":604},{"a":false,"l":342,"u":684},{"a":false,"l":351,"u":385},{"a":true,"l":83,"u":630},{"a":false,"l":610,"u":627},{"a":false,"l":636,"u":994},{"a":true,"l":287,"u":914},{"a":false,"l":479,"u":889},{"a":false,"l":610,"u":996},{"a":false,"l":253,"u":466},{"a":true,"l":341,"u":464},{"a":true,"l":521,"u":798},{"a":true,"l":309,"u":469},{"a":false,"l":18,"u":423},{"a":true,"l":681,"u":796},{"a":true,"l":683,"u":831},{"a":true,"l":490,"u":507},{"a":false,"l":208,"u":706},{"a":false,"l":339,"u":502},{"a":true,"l":383,"u":603},{"a":true,"l":231,"u":409},{"a":true,"l":265,"u":992},{"a":false,"l":214,"u":745},{"a":true,"l":43,"u":69},{"a":true,"l":105,"u":757},{"a":true,"l":720,"u":979},{"a":true,"l":337,"u":338},{"a":false,"l":29,"u":557},{"a":false,"l":322,"u":920},{"a":true,"l":126,"u":244},{"a":false,"l":730,"u":857},{"a":false,"l":80,"u":925},{"a":true,"l":493,"u":942},{"a":true,"l":268,"u":399},{"a":true,"l":95,"u":570},{"a":false,"l":15,"u":955},{"a":false,"l":29,"u":158},{"a":true,"l":490,"u":763},{"a":false,"l":702,"u":838},{"a":false,"l":374,"u":930},{"a":false,"l":455,"u":589},{"a":true,"l":322,"u":907},{"a":false,"l":421,"u":905},{"a":true,"l":782,"u":903},{"a":false,"l":266,"u":519},{"a":true,"l":71,"u":860},{"a":true,"l":376,"u":646},{"a":true,"l":196,"u":497},{"a":true,"l":118,"u":163},{"a":false,"l":680,"u":869},{"a":false,"l":708,"u":989},{"a":true,"l":236,"u":772},{"a":false,"l":669,"u":671},{"a":false,"l":537,"u":781},{"a":true,"l":61,"u":336},{"a":false,"l":316,"u":561},{"a":false,"l":253,"u":419},{"a":false,"l":383,"u":965},{"a":false,"l":662,"u":823},{"a":false,"l":666,"u":881},{"a":false,"l":4,"u":394},{"a":true,"l":128,"u":327},{"a":true,"l":512,"u":715},{"a":false,"l":202,"u":676},{"a":true,"l":99,"u":402},{"a":true,"l":176,"u":177},{"a":true,"l":156,"u":708},{"a":true,"l":54,"u":828},{"a":false,"l":173,"u":793},{"a":true,"l":227,"u":858},{"a":false,"l":513,"u":602},{"a":true,"l":377,"u":600},{"a":false,"l":544,"u":736},{"a":false,"l":198,"u":996},{"a":false,"l":399,"u":870},{"a":true,"l":398,"u":556},{"a":true,"l":643,"u":908},{"a":true,"l":9,"u":848},{"a":false,"l":725,"u":843},{"a":true,"l":109,"u":626},{"a":true,"l":200,"u":870},{"a":false,"l":795,"u":918},{"a":false,"l":245,"u":691},{"a":false,"l":394,"u":755},{"a":true,"l":145,"u":778},{"a":true,"l":317,"u":619},{"a":true,"l":441,"u":736},{"a":false,"l":92,"u":280},{"a":true,"l":541,"u":727},{"a":true,"l":348,"u":409},{"a":true,"l":567,"u":736},{"a":false,"l":38,"u":511},{"a":true,"l":135,"u":472},{"a":true,"l":190,"u":426},{"a":false,"l":455,"u":693},{"a":true,"l":470,"u":680},{"a":false,"l":255,"u":378},{"a":false,"l":522,"u":594},{"a":true,"l":289,"u":424},{"a":false,"l":230,"u":574},{"a":true,"l":830,"u":909},{"a":true,"l":388,"u":866},{"a":true,"l":837,"u":852},{"a":false,"l":6,"u":118},{"a":false,"l":225,"u":963},{"a":false,"l":578,"u":596},{"a":false,"l":129,"u":151},{"a":true,"l":9,"u":440},{"a":true,"l":52,"u":630},{"a":false,"l":106,"u":189},{"a":true,"l":558,"u":944},{"a":false,"l":395,"u":902},{"a":false,"l":71,"u":216},{"a":true,"l":348,"u":639},{"a":false,"l":191,"u":782},{"a":false,"l":358,"u":826},{"a":false,"l":151,"u":348},{"a":false,"l":520,"u":562},{"a":false,"l":703,"u":826},{"a":false,"l":136,"u":676},{"a":true,"l":873,"u":936},{"a":true,"l":589,"u":609},{"a":true,"l":414,"u":486},{"a":false,"l":171,"u":955},{"a":false,"l":134,"u":149},{"a":true,"l":364,"u":951},{"a":false,"l":248,"u":577},{"a":true,"l":188,"u":902},{"a":false,"l":53,"u":875},{"a":true,"l":538,"u":896},{"a":false,"l":622,"u":718},{"a":true,"l":157,"u":518},{"a":true,"l":274,"u":581},{"a":false,"l":97,"u":781},{"a":true,"l":306,"u":343},{"a":false,"l":44,"u":530},{"a":false,"l":306,"u":797},{"a":false,"l":220,"u":707},{"a":true,"l":346,"u":924},{"a":true,"l":436,"u":823},{"a":false,"l":387,"u":969},{"a":true,"l":128,"u":421},{"a":true,"l":38,"u":792},{"a":true,"l":284,"u":549},{"a":false,"l":334,"u":868},{"a":true,"l":572,"u":695},{"a":false,"l":476,"u":826},{"a":true,"l":486,"u":836},{"a":true,"l":244,"u":974},{"a":false,"l":480,"u":987},{"a":false,"l":452,"u":788},{"a":true,"l":611,"u":868},{"a":true,"l":52,"u":380},{"a":false,"l":496,"u":800},{"a":true,"l":586,"u":802},{"a":true,"l":84,"u":264},{"a":false,"l":206,"u":922},{"a":false,"l":616,"u":781},{"a":false,"l":834,"u":876},{"a":true,"l":280,"u":410},{"a":false,"l":424,"u":592},{"a":true,"l":252,"u":330},{"a":true,"l":601,"u":627},{"a":false,"l":88,"u":599},{"a":true,"l":244,"u":662},{"a":true,"l":162,"u":300},{"a":false,"l":48,"u":285},{"a":false,"l":425,"u":731},{"a":false,"l":235,"u":847},{"a":false,"l":148,"u":433},{"a":false,"l":264,"u":947},{"a":true,"l":163,"u":518},{"a":false,"l":493,"u":943},{"a":false,"l":793,"u":959},{"a":false,"l":215,"u":352},{"a":false,"l":161,"u":412},{"a":true,"l":35,"u":777},{"a":false,"l":242,"u":587},{"a":true,"l":309,"u":386},{"a":false,"l":453,"u":767},{"a":true,"l":73,"u":755},{"a":false,"l":387,"u":751},{"a":true,"l":161,"u":538},{"a":false,"l":122,"u":428},{"a":true,"l":482,"u":624},{"a":false,"l":704,"u":726},{"a":false,"l":89,"u":716},{"a":false,"l":431,"u":705},{"a":false,"l":22,"u":527},{"a":false,"l":663,"u":743},{"a":true,"l":41,"u":854},{"a":true,"l":222,"u":719},{"a":true,"l":3,"u":253},{"a":true,"l":204,"u":989},{"a":true,"l":23,"u":319},{"a":false,"l":554,"u":871},{"a":false,"l":769,"u":835},{"a":false,"l":588,"u":732},{"a":true,"l":179,"u":313},{"a":true,"l":761,"u":788},{"a":false,"l":347,"u":789},{"a":false,"l":48,"u":844},{"a":true,"l":259,"u":681},{"a":true,"l":443,"u":793},{"a":true,"l":496,"u":970},{"a":false,"l":239,"u":389},{"a":false,"l":375,"u":887},{"a":false,"l":188,"u":887},{"a":false,"l":632,"u":747},{"a":false,"l":267,"u":931},{"a":false,"l":337,"u":891},{"a":false,"l":58,"u":280},{"a":false,"l":121,"u":848},{"a":false,"l":490,"u":663},{"a":true,"l":497,"u":591},{"a":false,"l":227,"u":422},{"a":true,"l":79,"u":612},{"a":true,"l":680,"u":912},{"a":false,"l":326,"u":799},{"a":true,"l":151,"u":576},{"a":false,"l":214,"u":436},{"a":true,"l":223,"u":397},{"a":false,"l":144,"u":906},{"a":true,"l":17,"u":878},{"a":true,"l":372,"u":754},{"a":true,"l":159,"u":224},{"a":false,"l":114,"u":494},{"a":false,"l":507,"u":554},{"a":true,"l":73,"u":225},{"a":false,"l":190,"u":445},{"a":false,"l":54,"u":367},{"a":true,"l":448,"u":577},{"a":true,"l":203,"u":947},{"a":false,"l":346,"u":416},{"a":true,"l":573,"u":980},{"a":true,"l":49,"u":889},{"a":false,"l":353,"u":659},{"a":false,"l":305,"u":931},{"a":true,"l":200,"u":213},{"a":false,"l":52,"u":536},{"a":false,"l":144,"u":501},{"a":false,"l":303,"u":567},{"a":false,"l":460,"u":510},{"a":true,"l":672,"u":716},{"a":true,"l":236,"u":273},{"a":false,"l":944,"u":979},{"a":false,"l":508,"u":797},{"a":true,"l":263,"u":278},{"a":true,"l":179,"u":635},{"a":false,"l":58,"u":955},{"a":true,"l":614,"u":633},{"a":true,"l":244,"u":722},{"a":false,"l":267,"u":981},{"a":false,"l":328,"u":806},{"a":false,"l":363,"u":456},{"a":true,"l":4,"u":411},{"a":true,"l":105,"u":747},{"a":true,"l":646,"u":942},{"a":false,"l":57,"u":170},{"a":false,"l":499,"u":623},{"a":true,"l":136,"u":566},{"a":false,"l":61,"u":429},{"a":false,"l":591,"u":709},{"a":true,"l":339,"u":779},{"a":true,"l":759,"u":771},{"a":false,"l":518,"u":963},{"a":true,"l":426,"u":533},{"a":true,"l":164,"u":844},{"a":true,"l":251,"u":682},{"a":true,"l":296,"u":772},{"a":false,"l":624,"u":939},{"a":true,"l":743,"u":905},{"a":false,"l":744,"u":760},{"a":false,"l":295,"u":715},{"a":true,"l":467,"u":849},{"a":false,"l":71,"u":474},{"a":true,"l":239,"u":300},{"a":false,"l":110,"u":523},{"a":true,"l":580,"u":797},{"a":true,"l":42,"u":359},{"a":true,"l":212,"u":244},{"a":true,"l":563,"u":794},{"a":false,"l":27,"u":601},{"a":true,"l":812,"u":897},{"a":true,"l":230,"u":547},{"a":true,"l":510,"u":999},{"a":false,"l":423,"u":860},{"a":false,"l":655,"u":958},{"a":true,"l":638,"u":928},{"a":true,"l":436,"u":597},{"a":false,"l":554,"u":832},{"a":false,"l":152,"u":614},{"a":false,"l":794,"u":818},{"a":true,"l":176,"u":717},{"a":false,"l":254,"u":571},{"a":true,"l":118,"u":171},{"a":true,"l":84,"u":183},{"a":true,"l":187,"u":786},{"a":false,"l":485,"u":665},{"a":true,"l":593,"u":657},{"a":false,"l":71,"u":712},{"a":false,"l":129,"u":939},{"a":false,"l":648,"u":940},{"a":true,"l":433,"u":692},{"a":true,"l":53,"u":98},{"a":false,"l":314,"u":694},{"a":true,"l":295,"u":390},{"a":true,"l":631,"u":703},{"a":true,"l":196,"u":991},{"a":false,"l":188,"u":381},{"a":false,"l":213,"u":559},{"a":false,"l":18,"u":580},{"a":false,"l":529,"u":580},{"a":true,"l":507,"u":760},{"a":true,"l":774,"u":806},{"a":false,"l":390,"u":810},{"a":false,"l":675,"u":700},{"a":true,"l":203,"u":913},{"a":true,"l":31,"u":806},{"a":true,"l":62,"u":424},{"a":false,"l":24,"u":475},{"a":false,"l":345,"u":384},{"a":true,"l":625,"u":910},{"a":false,"l":284,"u":995},{"a":true,"l":158,"u":494},{"a":true,"l":17,"u":847},{"a":false,"l":235,"u":461},{"a":true,"l":287,"u":509},{"a":false,"l":403,"u":841},{"a":true,"l":498,"u":907},{"a":true,"l":20,"u":478},{"a":true,"l":153,"u":231},{"a":true,"l":235,"u":276},{"a":false,"l":346,"u":566},{"a":false,"l":26,"u":756},{"a":false,"l":371,"u":767},{"a":true,"l":57,"u":119},{"a":false,"l":169,"u":716},{"a":false,"l":14,"u":153},{"a":true,"l":649,"u":727},{"a":true,"l":348,"u":511},{"a":false,"l":356,"u":459},{"a":false,"l":473,"u":877},{"a":true,"l":443,"u":487},{"a":false,"l":565,"u":628},{"a":true,"l":180,"u":492},{"a":false,"l":327,"u":979},{"a":false,"l":433,"u":995},{"a":false,"l":694,"u":803},{"a":false,"l":146,"u":903},{"a":false,"l":315,"u":998},{"a":false,"l":686,"u":764},{"a":true,"l":160,"u":938},{"a":true,"l":491,"u":817},{"a":false,"l":123,"u":225},{"a":false,"l":220,"u":970},{"a":true,"l":186,"u":475},{"a":true,"l":237,"u":317},{"a":false,"l":482,"u":609},{"a":false,"l":402,"u":504},{"a":false,"l":183,"u":250},{"a":true,"l":471,"u":685},{"a":true,"l":576,"u":795},{"a":false,"l":422,"u":530},{"a":false,"l":159,"u":284},{"a":false,"l":858,"u":864},{"a":true,"l":85,"u":900},{"a":true,"l":99,"u":496},{"a":true,"l":348,"u":802},{"a":true,"l":313,"u":540},{"a":true,"l":235,"u":604},{"a":false,"l":99,"u":845},{"a":false,"l":99,"u":983},{"a":true,"l":810,"u":855},{"a":false,"l":105,"u":624},{"a":false,"l":728,"u":974},{"a":false,"l":18,"u":537},{"a":true,"l":69,"u":302},{"a":true,"l":3,"u":320},{"a":true,"l":477,"u":698},{"a":false,"l":213,"u":826},{"a":true,"l":316,"u":929},{"a":false,"l":28,"u":922},{"a":true,"l":22,"u":422},{"a":false,"l":136,"u":725},{"a":true,"l":1,"u":885},{"a":true,"l":40,"u":343},{"a":true,"l":801,"u":983},{"a":false,"l":298,"u":539},{"a":true,"l":114,"u":653},{"a":false,"l":101,"u":268}] diff --git a/submodules/Postbox/PostboxTests/HoleOperationsVector2.json b/submodules/Postbox/PostboxTests/HoleOperationsVector2.json deleted file mode 100644 index 515b602976..0000000000 --- a/submodules/Postbox/PostboxTests/HoleOperationsVector2.json +++ /dev/null @@ -1 +0,0 @@ -[{"u":300,"l":278,"s":1,"a":false},{"u":455,"l":418,"s":1,"a":false},{"u":505,"l":64,"s":0,"a":false},{"u":578,"l":106,"s":1,"a":true},{"u":603,"l":211,"s":1,"a":false},{"u":851,"l":562,"s":1,"a":true},{"u":666,"l":338,"s":0,"a":true},{"u":212,"l":198,"s":0,"a":true},{"u":757,"l":336,"s":1,"a":false},{"u":586,"l":130,"s":0,"a":false},{"u":620,"l":461,"s":0,"a":false},{"u":839,"l":802,"s":1,"a":true},{"u":649,"l":558,"s":1,"a":true},{"u":578,"l":261,"s":1,"a":true},{"u":323,"l":208,"s":1,"a":true},{"u":540,"l":443,"s":1,"a":true},{"u":810,"l":676,"s":1,"a":true},{"u":771,"l":246,"s":1,"a":false},{"u":517,"l":249,"s":1,"a":false},{"u":411,"l":323,"s":1,"a":false},{"u":543,"l":229,"s":1,"a":false},{"u":371,"l":60,"s":1,"a":true},{"u":953,"l":305,"s":1,"a":false},{"u":936,"l":629,"s":1,"a":true},{"u":595,"l":312,"s":1,"a":false},{"u":764,"l":198,"s":0,"a":false},{"u":560,"l":478,"s":0,"a":true},{"u":694,"l":378,"s":1,"a":true},{"u":398,"l":131,"s":1,"a":true},{"u":357,"l":118,"s":0,"a":true},{"u":509,"l":72,"s":0,"a":true},{"u":896,"l":69,"s":1,"a":true},{"u":467,"l":236,"s":0,"a":true},{"u":443,"l":308,"s":1,"a":false},{"u":708,"l":224,"s":1,"a":true},{"u":842,"l":749,"s":1,"a":false},{"u":461,"l":177,"s":1,"a":false},{"u":950,"l":945,"s":1,"a":true},{"u":528,"l":8,"s":1,"a":true},{"u":639,"l":491,"s":0,"a":true},{"u":33,"l":29,"s":0,"a":true},{"u":544,"l":7,"s":1,"a":false},{"u":854,"l":410,"s":1,"a":true},{"u":683,"l":468,"s":1,"a":false},{"u":990,"l":198,"s":1,"a":true},{"u":878,"l":751,"s":0,"a":false},{"u":651,"l":301,"s":1,"a":true},{"u":862,"l":596,"s":0,"a":true},{"u":309,"l":36,"s":0,"a":false},{"u":854,"l":626,"s":0,"a":false},{"u":488,"l":402,"s":0,"a":false},{"u":664,"l":569,"s":1,"a":true},{"u":344,"l":315,"s":1,"a":false},{"u":997,"l":670,"s":1,"a":true},{"u":916,"l":181,"s":0,"a":false},{"u":495,"l":390,"s":0,"a":false},{"u":584,"l":14,"s":1,"a":false},{"u":914,"l":506,"s":0,"a":false},{"u":640,"l":237,"s":0,"a":true},{"u":774,"l":346,"s":0,"a":false},{"u":940,"l":764,"s":1,"a":false},{"u":910,"l":605,"s":1,"a":false},{"u":826,"l":728,"s":0,"a":true},{"u":404,"l":391,"s":0,"a":false},{"u":465,"l":108,"s":1,"a":false},{"u":374,"l":173,"s":0,"a":true},{"u":541,"l":361,"s":1,"a":false},{"u":656,"l":121,"s":1,"a":true},{"u":761,"l":321,"s":0,"a":true},{"u":564,"l":522,"s":0,"a":true},{"u":703,"l":409,"s":1,"a":false},{"u":991,"l":399,"s":1,"a":true},{"u":757,"l":317,"s":1,"a":true},{"u":668,"l":239,"s":1,"a":true},{"u":237,"l":73,"s":1,"a":true},{"u":856,"l":604,"s":0,"a":true},{"u":727,"l":350,"s":1,"a":false},{"u":394,"l":201,"s":0,"a":true},{"u":763,"l":241,"s":0,"a":true},{"u":713,"l":22,"s":0,"a":false},{"u":522,"l":187,"s":1,"a":false},{"u":942,"l":186,"s":1,"a":false},{"u":654,"l":612,"s":0,"a":true},{"u":916,"l":115,"s":1,"a":true},{"u":459,"l":299,"s":0,"a":false},{"u":437,"l":360,"s":1,"a":false},{"u":993,"l":917,"s":1,"a":true},{"u":555,"l":148,"s":0,"a":true},{"u":953,"l":902,"s":0,"a":true},{"u":652,"l":9,"s":0,"a":true},{"u":764,"l":696,"s":0,"a":false},{"u":475,"l":99,"s":0,"a":false},{"u":720,"l":269,"s":0,"a":false},{"u":361,"l":240,"s":0,"a":true},{"u":911,"l":78,"s":0,"a":false},{"u":305,"l":82,"s":1,"a":false},{"u":855,"l":694,"s":0,"a":false},{"u":744,"l":672,"s":1,"a":true},{"u":850,"l":694,"s":1,"a":true},{"u":991,"l":208,"s":1,"a":false},{"u":309,"l":104,"s":1,"a":false},{"u":330,"l":4,"s":0,"a":true},{"u":750,"l":142,"s":1,"a":true},{"u":560,"l":154,"s":0,"a":true},{"u":359,"l":320,"s":0,"a":true},{"u":992,"l":240,"s":1,"a":true},{"u":364,"l":338,"s":0,"a":true},{"u":774,"l":689,"s":0,"a":false},{"u":218,"l":39,"s":1,"a":false},{"u":857,"l":822,"s":0,"a":true},{"u":877,"l":16,"s":0,"a":true},{"u":600,"l":511,"s":0,"a":false},{"u":946,"l":568,"s":0,"a":true},{"u":449,"l":96,"s":0,"a":false},{"u":304,"l":34,"s":1,"a":false},{"u":739,"l":394,"s":1,"a":false},{"u":880,"l":409,"s":1,"a":false},{"u":747,"l":564,"s":1,"a":true},{"u":501,"l":380,"s":1,"a":true},{"u":225,"l":207,"s":1,"a":false},{"u":363,"l":236,"s":0,"a":false},{"u":935,"l":876,"s":0,"a":false},{"u":545,"l":20,"s":0,"a":false},{"u":431,"l":189,"s":0,"a":false},{"u":934,"l":56,"s":1,"a":true},{"u":75,"l":35,"s":0,"a":true},{"u":635,"l":533,"s":1,"a":false},{"u":350,"l":109,"s":1,"a":false},{"u":766,"l":654,"s":1,"a":false},{"u":695,"l":1,"s":0,"a":false},{"u":855,"l":234,"s":1,"a":false},{"u":755,"l":271,"s":1,"a":false},{"u":831,"l":98,"s":1,"a":true},{"u":807,"l":311,"s":0,"a":true},{"u":923,"l":733,"s":1,"a":false},{"u":669,"l":352,"s":0,"a":true},{"u":989,"l":492,"s":0,"a":true},{"u":537,"l":232,"s":1,"a":false},{"u":898,"l":689,"s":0,"a":false},{"u":737,"l":117,"s":0,"a":false},{"u":510,"l":465,"s":1,"a":true},{"u":184,"l":117,"s":1,"a":false},{"u":813,"l":452,"s":0,"a":true},{"u":951,"l":517,"s":0,"a":false},{"u":862,"l":327,"s":1,"a":true},{"u":677,"l":215,"s":1,"a":false},{"u":757,"l":244,"s":0,"a":true},{"u":888,"l":341,"s":1,"a":true},{"u":967,"l":632,"s":0,"a":true},{"u":169,"l":89,"s":0,"a":false},{"u":330,"l":92,"s":0,"a":true},{"u":853,"l":447,"s":1,"a":false},{"u":361,"l":265,"s":1,"a":false},{"u":756,"l":247,"s":1,"a":false},{"u":964,"l":333,"s":0,"a":false},{"u":885,"l":624,"s":1,"a":false},{"u":902,"l":770,"s":1,"a":true},{"u":696,"l":692,"s":1,"a":false},{"u":946,"l":126,"s":1,"a":false},{"u":941,"l":500,"s":1,"a":true},{"u":543,"l":65,"s":1,"a":true},{"u":648,"l":464,"s":1,"a":false},{"u":824,"l":192,"s":0,"a":true},{"u":356,"l":108,"s":0,"a":false},{"u":649,"l":264,"s":1,"a":false},{"u":612,"l":131,"s":1,"a":false},{"u":979,"l":817,"s":0,"a":true},{"u":618,"l":261,"s":1,"a":false},{"u":656,"l":9,"s":0,"a":false},{"u":182,"l":24,"s":1,"a":false},{"u":750,"l":129,"s":1,"a":true},{"u":593,"l":482,"s":1,"a":false},{"u":952,"l":162,"s":0,"a":true},{"u":532,"l":255,"s":0,"a":false},{"u":843,"l":474,"s":1,"a":true},{"u":839,"l":354,"s":1,"a":false},{"u":609,"l":461,"s":0,"a":false},{"u":345,"l":225,"s":0,"a":false},{"u":865,"l":787,"s":0,"a":true},{"u":348,"l":327,"s":1,"a":true},{"u":985,"l":99,"s":1,"a":false},{"u":626,"l":106,"s":0,"a":false},{"u":376,"l":53,"s":1,"a":true},{"u":872,"l":320,"s":0,"a":true},{"u":629,"l":448,"s":0,"a":true},{"u":605,"l":208,"s":1,"a":false},{"u":941,"l":75,"s":1,"a":true},{"u":202,"l":148,"s":0,"a":true},{"u":514,"l":261,"s":0,"a":false},{"u":874,"l":847,"s":1,"a":false},{"u":580,"l":314,"s":1,"a":true},{"u":666,"l":151,"s":0,"a":true},{"u":850,"l":782,"s":1,"a":true},{"u":558,"l":451,"s":1,"a":true},{"u":913,"l":395,"s":1,"a":true},{"u":113,"l":107,"s":1,"a":false},{"u":937,"l":850,"s":0,"a":false},{"u":643,"l":363,"s":1,"a":true},{"u":489,"l":214,"s":0,"a":false},{"u":797,"l":74,"s":1,"a":false},{"u":986,"l":878,"s":1,"a":false},{"u":297,"l":188,"s":1,"a":true},{"u":411,"l":295,"s":0,"a":false},{"u":206,"l":29,"s":1,"a":false},{"u":960,"l":386,"s":0,"a":true},{"u":849,"l":647,"s":0,"a":false},{"u":876,"l":387,"s":0,"a":true},{"u":820,"l":744,"s":1,"a":true},{"u":779,"l":135,"s":1,"a":true},{"u":574,"l":482,"s":0,"a":true},{"u":962,"l":22,"s":0,"a":false},{"u":799,"l":186,"s":1,"a":true},{"u":577,"l":189,"s":0,"a":false},{"u":948,"l":8,"s":1,"a":false},{"u":713,"l":616,"s":1,"a":true},{"u":775,"l":104,"s":1,"a":false},{"u":644,"l":67,"s":1,"a":true},{"u":871,"l":117,"s":0,"a":false},{"u":498,"l":16,"s":1,"a":true},{"u":748,"l":109,"s":1,"a":true},{"u":773,"l":5,"s":1,"a":true},{"u":805,"l":641,"s":0,"a":false},{"u":714,"l":635,"s":0,"a":false},{"u":922,"l":581,"s":1,"a":true},{"u":558,"l":214,"s":1,"a":false},{"u":482,"l":481,"s":0,"a":false},{"u":442,"l":262,"s":0,"a":true},{"u":124,"l":122,"s":0,"a":true},{"u":988,"l":297,"s":1,"a":false},{"u":685,"l":336,"s":0,"a":true},{"u":928,"l":316,"s":0,"a":true},{"u":274,"l":48,"s":0,"a":true},{"u":944,"l":54,"s":1,"a":false},{"u":773,"l":357,"s":0,"a":true},{"u":489,"l":47,"s":0,"a":false},{"u":427,"l":95,"s":1,"a":false},{"u":553,"l":463,"s":1,"a":false},{"u":356,"l":188,"s":0,"a":false},{"u":764,"l":459,"s":1,"a":true},{"u":749,"l":501,"s":1,"a":false},{"u":47,"l":1,"s":1,"a":true},{"u":817,"l":154,"s":1,"a":false},{"u":810,"l":176,"s":1,"a":false},{"u":689,"l":651,"s":1,"a":false},{"u":783,"l":219,"s":0,"a":false},{"u":886,"l":40,"s":1,"a":true},{"u":739,"l":718,"s":1,"a":false},{"u":633,"l":546,"s":0,"a":false},{"u":343,"l":308,"s":1,"a":false},{"u":924,"l":508,"s":1,"a":false},{"u":632,"l":113,"s":1,"a":false},{"u":307,"l":68,"s":1,"a":false},{"u":764,"l":94,"s":1,"a":true},{"u":202,"l":21,"s":0,"a":false},{"u":767,"l":29,"s":0,"a":false},{"u":978,"l":970,"s":0,"a":true},{"u":905,"l":491,"s":0,"a":true},{"u":456,"l":122,"s":1,"a":true},{"u":278,"l":88,"s":0,"a":false},{"u":820,"l":652,"s":0,"a":true},{"u":693,"l":602,"s":0,"a":true},{"u":277,"l":18,"s":1,"a":true},{"u":291,"l":201,"s":0,"a":false},{"u":850,"l":424,"s":1,"a":false},{"u":652,"l":358,"s":1,"a":true},{"u":958,"l":507,"s":1,"a":true},{"u":406,"l":365,"s":0,"a":true},{"u":882,"l":508,"s":0,"a":true},{"u":359,"l":348,"s":1,"a":false},{"u":796,"l":673,"s":0,"a":false},{"u":991,"l":21,"s":1,"a":false},{"u":192,"l":22,"s":0,"a":true},{"u":543,"l":79,"s":1,"a":false},{"u":725,"l":432,"s":0,"a":true},{"u":217,"l":50,"s":0,"a":false},{"u":125,"l":70,"s":1,"a":false},{"u":760,"l":757,"s":1,"a":true},{"u":864,"l":642,"s":0,"a":true},{"u":750,"l":8,"s":1,"a":true},{"u":646,"l":564,"s":1,"a":false},{"u":751,"l":506,"s":1,"a":true},{"u":924,"l":412,"s":1,"a":false},{"u":825,"l":655,"s":0,"a":false},{"u":338,"l":157,"s":1,"a":false},{"u":869,"l":109,"s":1,"a":true},{"u":454,"l":345,"s":0,"a":false},{"u":991,"l":327,"s":1,"a":true},{"u":859,"l":747,"s":0,"a":false},{"u":923,"l":750,"s":0,"a":true},{"u":917,"l":661,"s":0,"a":true},{"u":663,"l":10,"s":1,"a":true},{"u":485,"l":224,"s":1,"a":false},{"u":748,"l":738,"s":1,"a":false},{"u":518,"l":264,"s":1,"a":true},{"u":735,"l":505,"s":0,"a":true},{"u":542,"l":94,"s":0,"a":false},{"u":576,"l":63,"s":1,"a":true},{"u":778,"l":165,"s":0,"a":true},{"u":943,"l":24,"s":0,"a":true},{"u":829,"l":130,"s":1,"a":true},{"u":862,"l":569,"s":1,"a":true},{"u":546,"l":41,"s":1,"a":true},{"u":320,"l":221,"s":1,"a":false},{"u":469,"l":235,"s":0,"a":false},{"u":495,"l":354,"s":0,"a":true},{"u":537,"l":520,"s":1,"a":true},{"u":850,"l":307,"s":1,"a":false},{"u":817,"l":31,"s":1,"a":true},{"u":728,"l":698,"s":0,"a":true},{"u":622,"l":301,"s":0,"a":true},{"u":919,"l":592,"s":0,"a":false},{"u":574,"l":374,"s":0,"a":true},{"u":445,"l":405,"s":1,"a":false},{"u":623,"l":372,"s":0,"a":true},{"u":943,"l":196,"s":1,"a":true},{"u":391,"l":149,"s":0,"a":false},{"u":766,"l":77,"s":1,"a":true},{"u":610,"l":522,"s":0,"a":false},{"u":984,"l":635,"s":0,"a":true},{"u":781,"l":571,"s":1,"a":true},{"u":975,"l":54,"s":0,"a":true},{"u":986,"l":908,"s":1,"a":true},{"u":998,"l":863,"s":0,"a":true},{"u":991,"l":24,"s":1,"a":true},{"u":979,"l":684,"s":0,"a":false},{"u":899,"l":643,"s":0,"a":true},{"u":887,"l":202,"s":0,"a":true},{"u":599,"l":152,"s":1,"a":true},{"u":922,"l":253,"s":0,"a":true},{"u":644,"l":79,"s":0,"a":true},{"u":252,"l":21,"s":0,"a":false},{"u":235,"l":67,"s":0,"a":false},{"u":7,"l":3,"s":0,"a":false},{"u":406,"l":36,"s":1,"a":false},{"u":907,"l":86,"s":0,"a":true},{"u":733,"l":726,"s":0,"a":false},{"u":691,"l":216,"s":0,"a":true},{"u":579,"l":517,"s":0,"a":true},{"u":837,"l":502,"s":0,"a":true},{"u":913,"l":690,"s":1,"a":true},{"u":845,"l":100,"s":0,"a":true},{"u":401,"l":343,"s":1,"a":true},{"u":972,"l":176,"s":0,"a":true},{"u":595,"l":147,"s":0,"a":false},{"u":863,"l":74,"s":0,"a":true},{"u":441,"l":64,"s":0,"a":true},{"u":759,"l":296,"s":1,"a":true},{"u":602,"l":137,"s":0,"a":false},{"u":951,"l":458,"s":1,"a":true},{"u":601,"l":19,"s":0,"a":true},{"u":648,"l":187,"s":1,"a":true},{"u":337,"l":254,"s":0,"a":false},{"u":914,"l":281,"s":0,"a":false},{"u":963,"l":670,"s":0,"a":false},{"u":446,"l":140,"s":1,"a":false},{"u":610,"l":520,"s":1,"a":false},{"u":806,"l":314,"s":1,"a":false},{"u":473,"l":396,"s":0,"a":true},{"u":957,"l":352,"s":1,"a":false},{"u":671,"l":290,"s":0,"a":false},{"u":315,"l":23,"s":1,"a":false},{"u":782,"l":236,"s":1,"a":true},{"u":701,"l":296,"s":1,"a":true},{"u":326,"l":87,"s":0,"a":true},{"u":660,"l":141,"s":1,"a":false},{"u":937,"l":344,"s":1,"a":true},{"u":888,"l":127,"s":0,"a":false},{"u":521,"l":349,"s":0,"a":true},{"u":856,"l":201,"s":0,"a":false},{"u":504,"l":183,"s":1,"a":true},{"u":83,"l":1,"s":1,"a":false},{"u":366,"l":162,"s":0,"a":false},{"u":870,"l":440,"s":0,"a":true},{"u":760,"l":51,"s":1,"a":true},{"u":459,"l":357,"s":1,"a":false},{"u":350,"l":292,"s":0,"a":false},{"u":436,"l":236,"s":1,"a":false},{"u":527,"l":504,"s":1,"a":false},{"u":739,"l":70,"s":1,"a":false},{"u":277,"l":238,"s":0,"a":false},{"u":572,"l":331,"s":1,"a":false},{"u":728,"l":552,"s":0,"a":false},{"u":956,"l":351,"s":0,"a":false},{"u":102,"l":66,"s":0,"a":true},{"u":805,"l":29,"s":0,"a":true},{"u":822,"l":325,"s":0,"a":false},{"u":269,"l":228,"s":0,"a":true},{"u":926,"l":181,"s":1,"a":true},{"u":208,"l":25,"s":1,"a":false},{"u":909,"l":803,"s":0,"a":false},{"u":669,"l":357,"s":0,"a":true},{"u":612,"l":130,"s":1,"a":false},{"u":731,"l":31,"s":1,"a":true},{"u":811,"l":757,"s":1,"a":false},{"u":864,"l":508,"s":1,"a":true},{"u":423,"l":58,"s":1,"a":false},{"u":513,"l":236,"s":0,"a":false},{"u":308,"l":95,"s":0,"a":true},{"u":509,"l":125,"s":1,"a":true},{"u":520,"l":237,"s":1,"a":true},{"u":648,"l":457,"s":0,"a":true},{"u":724,"l":188,"s":0,"a":false},{"u":695,"l":634,"s":1,"a":true},{"u":678,"l":607,"s":0,"a":false},{"u":494,"l":10,"s":0,"a":false},{"u":542,"l":294,"s":1,"a":true},{"u":930,"l":899,"s":1,"a":true},{"u":895,"l":338,"s":1,"a":false},{"u":941,"l":222,"s":1,"a":true},{"u":794,"l":654,"s":1,"a":true},{"u":523,"l":302,"s":1,"a":true},{"u":632,"l":440,"s":0,"a":false},{"u":243,"l":31,"s":1,"a":false},{"u":763,"l":595,"s":1,"a":false},{"u":822,"l":80,"s":0,"a":true},{"u":859,"l":302,"s":0,"a":false},{"u":684,"l":48,"s":1,"a":false},{"u":569,"l":19,"s":0,"a":false},{"u":999,"l":764,"s":0,"a":true},{"u":703,"l":619,"s":0,"a":false},{"u":910,"l":438,"s":1,"a":true},{"u":520,"l":121,"s":0,"a":true},{"u":629,"l":497,"s":0,"a":true},{"u":340,"l":282,"s":1,"a":true},{"u":20,"l":15,"s":0,"a":true},{"u":709,"l":381,"s":0,"a":false},{"u":202,"l":192,"s":0,"a":true},{"u":782,"l":336,"s":1,"a":true},{"u":389,"l":196,"s":1,"a":false},{"u":600,"l":546,"s":0,"a":true},{"u":731,"l":309,"s":1,"a":true},{"u":465,"l":429,"s":0,"a":true},{"u":512,"l":400,"s":0,"a":false},{"u":388,"l":234,"s":1,"a":false},{"u":883,"l":600,"s":0,"a":true},{"u":469,"l":8,"s":0,"a":true},{"u":954,"l":203,"s":1,"a":true},{"u":891,"l":729,"s":0,"a":true},{"u":902,"l":267,"s":1,"a":false},{"u":380,"l":370,"s":1,"a":true},{"u":755,"l":422,"s":0,"a":false},{"u":885,"l":760,"s":1,"a":false},{"u":832,"l":811,"s":0,"a":false},{"u":126,"l":65,"s":0,"a":false},{"u":456,"l":256,"s":0,"a":true},{"u":772,"l":592,"s":1,"a":true},{"u":550,"l":427,"s":0,"a":false},{"u":492,"l":171,"s":0,"a":true},{"u":665,"l":74,"s":1,"a":false},{"u":556,"l":428,"s":0,"a":false},{"u":278,"l":139,"s":0,"a":true},{"u":833,"l":413,"s":1,"a":true},{"u":97,"l":66,"s":1,"a":false},{"u":712,"l":94,"s":0,"a":false},{"u":791,"l":786,"s":0,"a":true},{"u":877,"l":431,"s":1,"a":false},{"u":505,"l":128,"s":1,"a":true},{"u":473,"l":108,"s":0,"a":false},{"u":637,"l":585,"s":1,"a":true},{"u":861,"l":663,"s":1,"a":false},{"u":801,"l":228,"s":0,"a":true},{"u":816,"l":250,"s":0,"a":false},{"u":880,"l":417,"s":0,"a":false},{"u":524,"l":54,"s":1,"a":true},{"u":898,"l":302,"s":1,"a":false},{"u":357,"l":202,"s":0,"a":false},{"u":877,"l":503,"s":1,"a":true},{"u":161,"l":133,"s":0,"a":false},{"u":443,"l":178,"s":0,"a":false},{"u":288,"l":32,"s":0,"a":true},{"u":833,"l":56,"s":1,"a":false},{"u":492,"l":37,"s":0,"a":true},{"u":497,"l":43,"s":1,"a":true},{"u":884,"l":58,"s":0,"a":true},{"u":742,"l":548,"s":1,"a":true},{"u":972,"l":610,"s":0,"a":true},{"u":868,"l":178,"s":1,"a":false},{"u":504,"l":34,"s":0,"a":false},{"u":826,"l":701,"s":0,"a":false},{"u":967,"l":650,"s":1,"a":true},{"u":756,"l":91,"s":1,"a":true},{"u":822,"l":544,"s":1,"a":false},{"u":966,"l":516,"s":0,"a":false},{"u":144,"l":58,"s":0,"a":true},{"u":523,"l":82,"s":0,"a":true},{"u":725,"l":636,"s":1,"a":true},{"u":707,"l":95,"s":0,"a":true},{"u":896,"l":462,"s":1,"a":true},{"u":564,"l":388,"s":1,"a":true},{"u":880,"l":200,"s":0,"a":false},{"u":786,"l":186,"s":1,"a":false},{"u":765,"l":316,"s":1,"a":false},{"u":976,"l":481,"s":1,"a":true},{"u":960,"l":473,"s":0,"a":true},{"u":431,"l":299,"s":1,"a":true},{"u":274,"l":200,"s":0,"a":false},{"u":522,"l":223,"s":1,"a":false},{"u":816,"l":746,"s":0,"a":false},{"u":292,"l":60,"s":0,"a":true},{"u":275,"l":196,"s":0,"a":true},{"u":747,"l":561,"s":0,"a":false},{"u":942,"l":435,"s":0,"a":true},{"u":462,"l":391,"s":1,"a":true},{"u":837,"l":609,"s":0,"a":false},{"u":727,"l":568,"s":0,"a":false},{"u":599,"l":296,"s":1,"a":false},{"u":960,"l":97,"s":1,"a":true},{"u":930,"l":588,"s":0,"a":false},{"u":846,"l":103,"s":1,"a":true},{"u":779,"l":133,"s":1,"a":true},{"u":796,"l":259,"s":0,"a":true},{"u":993,"l":70,"s":0,"a":true},{"u":733,"l":192,"s":1,"a":false},{"u":661,"l":639,"s":1,"a":true},{"u":732,"l":667,"s":0,"a":true},{"u":551,"l":517,"s":1,"a":true},{"u":817,"l":433,"s":1,"a":false},{"u":593,"l":195,"s":1,"a":true},{"u":175,"l":43,"s":0,"a":true},{"u":735,"l":70,"s":0,"a":true},{"u":795,"l":239,"s":0,"a":true},{"u":949,"l":416,"s":0,"a":true},{"u":775,"l":112,"s":1,"a":false},{"u":230,"l":180,"s":1,"a":false},{"u":809,"l":364,"s":1,"a":true},{"u":445,"l":417,"s":1,"a":false},{"u":957,"l":883,"s":0,"a":false},{"u":896,"l":217,"s":0,"a":true},{"u":756,"l":397,"s":1,"a":false},{"u":338,"l":2,"s":1,"a":false},{"u":381,"l":47,"s":1,"a":true},{"u":233,"l":104,"s":0,"a":false},{"u":634,"l":607,"s":0,"a":false},{"u":823,"l":52,"s":0,"a":true},{"u":368,"l":189,"s":1,"a":false},{"u":699,"l":528,"s":0,"a":false},{"u":366,"l":252,"s":1,"a":true},{"u":859,"l":122,"s":1,"a":true},{"u":628,"l":465,"s":1,"a":false},{"u":698,"l":561,"s":0,"a":true},{"u":747,"l":23,"s":1,"a":true},{"u":611,"l":373,"s":1,"a":true},{"u":643,"l":150,"s":0,"a":true},{"u":834,"l":352,"s":1,"a":false},{"u":382,"l":324,"s":1,"a":false},{"u":616,"l":61,"s":1,"a":false},{"u":586,"l":263,"s":1,"a":true},{"u":535,"l":275,"s":0,"a":true},{"u":541,"l":175,"s":1,"a":true},{"u":890,"l":181,"s":0,"a":false},{"u":781,"l":449,"s":0,"a":true},{"u":405,"l":126,"s":0,"a":false},{"u":799,"l":708,"s":0,"a":true},{"u":524,"l":128,"s":1,"a":false},{"u":715,"l":474,"s":0,"a":true},{"u":719,"l":107,"s":1,"a":true},{"u":634,"l":53,"s":1,"a":false},{"u":599,"l":596,"s":1,"a":false},{"u":484,"l":122,"s":1,"a":true},{"u":747,"l":324,"s":1,"a":true},{"u":761,"l":539,"s":1,"a":false},{"u":970,"l":197,"s":0,"a":true},{"u":902,"l":9,"s":1,"a":true},{"u":763,"l":148,"s":1,"a":false},{"u":287,"l":13,"s":1,"a":true},{"u":589,"l":257,"s":0,"a":true},{"u":489,"l":401,"s":0,"a":false},{"u":354,"l":348,"s":1,"a":true},{"u":689,"l":366,"s":1,"a":true},{"u":691,"l":104,"s":0,"a":false},{"u":836,"l":562,"s":1,"a":false},{"u":814,"l":325,"s":0,"a":false},{"u":434,"l":239,"s":1,"a":false},{"u":256,"l":146,"s":1,"a":true},{"u":762,"l":484,"s":1,"a":false},{"u":932,"l":857,"s":1,"a":false},{"u":169,"l":34,"s":0,"a":true},{"u":671,"l":70,"s":0,"a":false},{"u":254,"l":220,"s":1,"a":true},{"u":724,"l":65,"s":0,"a":false},{"u":918,"l":545,"s":1,"a":false},{"u":410,"l":184,"s":1,"a":false},{"u":472,"l":445,"s":1,"a":false},{"u":196,"l":91,"s":1,"a":true},{"u":88,"l":4,"s":0,"a":false},{"u":663,"l":132,"s":0,"a":false},{"u":877,"l":455,"s":0,"a":true},{"u":770,"l":541,"s":1,"a":false},{"u":952,"l":711,"s":1,"a":true},{"u":643,"l":286,"s":0,"a":true},{"u":896,"l":80,"s":0,"a":false},{"u":469,"l":393,"s":1,"a":false},{"u":781,"l":236,"s":0,"a":false},{"u":121,"l":82,"s":0,"a":false},{"u":574,"l":500,"s":0,"a":true},{"u":594,"l":357,"s":1,"a":false},{"u":931,"l":99,"s":0,"a":true},{"u":461,"l":167,"s":0,"a":false},{"u":565,"l":148,"s":0,"a":true},{"u":343,"l":142,"s":0,"a":false},{"u":907,"l":368,"s":0,"a":true},{"u":868,"l":848,"s":1,"a":true},{"u":980,"l":455,"s":1,"a":true},{"u":177,"l":44,"s":0,"a":false},{"u":446,"l":27,"s":1,"a":false},{"u":709,"l":382,"s":1,"a":true},{"u":746,"l":77,"s":1,"a":false},{"u":833,"l":399,"s":1,"a":false},{"u":944,"l":485,"s":1,"a":false},{"u":507,"l":294,"s":1,"a":false},{"u":513,"l":222,"s":1,"a":false},{"u":518,"l":12,"s":0,"a":false},{"u":531,"l":335,"s":1,"a":false},{"u":741,"l":295,"s":1,"a":false},{"u":767,"l":390,"s":0,"a":false},{"u":269,"l":110,"s":0,"a":false},{"u":594,"l":288,"s":0,"a":true},{"u":739,"l":419,"s":0,"a":true},{"u":504,"l":67,"s":0,"a":true},{"u":899,"l":484,"s":1,"a":false},{"u":398,"l":385,"s":0,"a":true},{"u":487,"l":270,"s":1,"a":false},{"u":803,"l":685,"s":1,"a":true},{"u":399,"l":370,"s":1,"a":true},{"u":399,"l":273,"s":1,"a":true},{"u":972,"l":734,"s":0,"a":true},{"u":568,"l":426,"s":1,"a":true},{"u":654,"l":185,"s":0,"a":true},{"u":891,"l":158,"s":0,"a":false},{"u":463,"l":450,"s":1,"a":true},{"u":793,"l":752,"s":1,"a":false},{"u":639,"l":30,"s":0,"a":true},{"u":511,"l":115,"s":1,"a":true},{"u":562,"l":142,"s":1,"a":false},{"u":446,"l":381,"s":1,"a":true},{"u":666,"l":383,"s":1,"a":true},{"u":503,"l":73,"s":1,"a":true},{"u":979,"l":899,"s":1,"a":true},{"u":779,"l":687,"s":0,"a":true},{"u":689,"l":187,"s":1,"a":true},{"u":604,"l":53,"s":0,"a":true},{"u":152,"l":18,"s":1,"a":false},{"u":530,"l":138,"s":1,"a":false},{"u":864,"l":698,"s":1,"a":false},{"u":176,"l":175,"s":1,"a":true},{"u":747,"l":672,"s":1,"a":true},{"u":777,"l":119,"s":1,"a":false},{"u":934,"l":628,"s":0,"a":true},{"u":670,"l":155,"s":1,"a":true},{"u":845,"l":297,"s":0,"a":true},{"u":867,"l":595,"s":0,"a":false},{"u":710,"l":338,"s":0,"a":true},{"u":836,"l":643,"s":0,"a":true},{"u":800,"l":415,"s":0,"a":true},{"u":987,"l":415,"s":1,"a":true},{"u":476,"l":159,"s":0,"a":false},{"u":690,"l":191,"s":1,"a":true},{"u":699,"l":351,"s":1,"a":false},{"u":961,"l":250,"s":0,"a":true},{"u":929,"l":777,"s":0,"a":true},{"u":964,"l":785,"s":0,"a":true},{"u":903,"l":645,"s":1,"a":false},{"u":669,"l":573,"s":1,"a":true},{"u":556,"l":406,"s":0,"a":false},{"u":734,"l":703,"s":0,"a":true},{"u":654,"l":140,"s":0,"a":false},{"u":334,"l":312,"s":1,"a":false},{"u":752,"l":452,"s":1,"a":true},{"u":860,"l":567,"s":1,"a":false},{"u":964,"l":271,"s":0,"a":false},{"u":419,"l":209,"s":1,"a":true},{"u":798,"l":752,"s":1,"a":true},{"u":390,"l":93,"s":0,"a":false},{"u":952,"l":590,"s":0,"a":true},{"u":952,"l":638,"s":0,"a":true},{"u":949,"l":527,"s":1,"a":true},{"u":303,"l":1,"s":0,"a":false},{"u":720,"l":595,"s":0,"a":true},{"u":599,"l":394,"s":0,"a":true},{"u":882,"l":202,"s":1,"a":true},{"u":102,"l":92,"s":0,"a":false},{"u":839,"l":490,"s":0,"a":true},{"u":744,"l":712,"s":1,"a":true},{"u":847,"l":545,"s":1,"a":true},{"u":916,"l":206,"s":1,"a":true},{"u":120,"l":63,"s":0,"a":false},{"u":931,"l":465,"s":0,"a":true},{"u":791,"l":51,"s":1,"a":true},{"u":976,"l":163,"s":1,"a":true},{"u":854,"l":796,"s":1,"a":false},{"u":456,"l":226,"s":0,"a":false},{"u":547,"l":186,"s":1,"a":true},{"u":859,"l":311,"s":1,"a":false},{"u":578,"l":360,"s":0,"a":true},{"u":970,"l":55,"s":0,"a":true},{"u":985,"l":559,"s":0,"a":true},{"u":232,"l":81,"s":0,"a":false},{"u":801,"l":342,"s":1,"a":true},{"u":924,"l":276,"s":1,"a":false},{"u":727,"l":654,"s":1,"a":true},{"u":728,"l":679,"s":1,"a":false},{"u":558,"l":535,"s":1,"a":false},{"u":890,"l":649,"s":1,"a":false},{"u":477,"l":356,"s":1,"a":true},{"u":848,"l":741,"s":0,"a":false},{"u":887,"l":268,"s":0,"a":false},{"u":392,"l":221,"s":1,"a":false},{"u":525,"l":76,"s":1,"a":false},{"u":802,"l":93,"s":1,"a":false},{"u":976,"l":170,"s":0,"a":false},{"u":729,"l":682,"s":0,"a":true},{"u":818,"l":633,"s":0,"a":false},{"u":473,"l":450,"s":0,"a":false},{"u":866,"l":238,"s":0,"a":false},{"u":764,"l":298,"s":1,"a":false},{"u":858,"l":769,"s":0,"a":false},{"u":886,"l":140,"s":0,"a":false},{"u":693,"l":566,"s":0,"a":true},{"u":872,"l":278,"s":1,"a":false},{"u":940,"l":872,"s":0,"a":true},{"u":602,"l":387,"s":0,"a":false},{"u":875,"l":59,"s":0,"a":true},{"u":421,"l":107,"s":0,"a":false},{"u":544,"l":239,"s":1,"a":true},{"u":975,"l":599,"s":1,"a":false},{"u":991,"l":981,"s":0,"a":true},{"u":500,"l":397,"s":1,"a":false},{"u":438,"l":435,"s":1,"a":false},{"u":888,"l":307,"s":1,"a":true},{"u":691,"l":595,"s":1,"a":true},{"u":942,"l":306,"s":1,"a":false},{"u":661,"l":332,"s":0,"a":false},{"u":403,"l":32,"s":0,"a":false},{"u":640,"l":273,"s":0,"a":false},{"u":723,"l":172,"s":1,"a":false},{"u":248,"l":29,"s":0,"a":true},{"u":278,"l":198,"s":1,"a":true},{"u":199,"l":82,"s":0,"a":true},{"u":860,"l":104,"s":0,"a":true},{"u":737,"l":445,"s":0,"a":true},{"u":354,"l":297,"s":1,"a":true},{"u":209,"l":172,"s":1,"a":false},{"u":571,"l":62,"s":0,"a":true},{"u":560,"l":310,"s":1,"a":false},{"u":927,"l":518,"s":1,"a":true},{"u":419,"l":419,"s":0,"a":true},{"u":910,"l":501,"s":0,"a":true},{"u":143,"l":60,"s":1,"a":false},{"u":472,"l":376,"s":1,"a":true},{"u":538,"l":122,"s":1,"a":true},{"u":274,"l":20,"s":0,"a":false},{"u":610,"l":535,"s":1,"a":false},{"u":920,"l":638,"s":1,"a":true},{"u":541,"l":499,"s":0,"a":true},{"u":425,"l":23,"s":0,"a":false},{"u":822,"l":807,"s":0,"a":false},{"u":930,"l":486,"s":1,"a":true},{"u":964,"l":19,"s":1,"a":true},{"u":662,"l":556,"s":0,"a":true},{"u":796,"l":689,"s":0,"a":false},{"u":545,"l":239,"s":1,"a":false},{"u":710,"l":369,"s":1,"a":false},{"u":763,"l":39,"s":0,"a":true},{"u":831,"l":740,"s":0,"a":false},{"u":920,"l":73,"s":0,"a":true},{"u":451,"l":238,"s":1,"a":true},{"u":597,"l":215,"s":0,"a":true},{"u":974,"l":538,"s":1,"a":true},{"u":615,"l":293,"s":0,"a":true},{"u":737,"l":267,"s":1,"a":true},{"u":929,"l":321,"s":1,"a":false},{"u":317,"l":74,"s":1,"a":false},{"u":506,"l":202,"s":0,"a":false},{"u":607,"l":51,"s":1,"a":false},{"u":416,"l":58,"s":0,"a":true},{"u":538,"l":369,"s":0,"a":true},{"u":87,"l":74,"s":1,"a":false},{"u":909,"l":250,"s":0,"a":true},{"u":997,"l":214,"s":1,"a":false},{"u":775,"l":664,"s":0,"a":false},{"u":905,"l":433,"s":0,"a":false},{"u":947,"l":220,"s":1,"a":true},{"u":627,"l":171,"s":1,"a":false},{"u":844,"l":358,"s":1,"a":true},{"u":378,"l":138,"s":1,"a":true},{"u":725,"l":279,"s":1,"a":false},{"u":629,"l":292,"s":0,"a":true},{"u":700,"l":92,"s":0,"a":false},{"u":707,"l":57,"s":0,"a":false},{"u":577,"l":116,"s":0,"a":true},{"u":708,"l":390,"s":0,"a":true},{"u":838,"l":627,"s":1,"a":true},{"u":824,"l":365,"s":0,"a":true},{"u":504,"l":90,"s":0,"a":true},{"u":927,"l":461,"s":0,"a":false},{"u":682,"l":657,"s":1,"a":true},{"u":733,"l":464,"s":1,"a":false},{"u":946,"l":489,"s":1,"a":false},{"u":206,"l":109,"s":1,"a":true},{"u":918,"l":643,"s":0,"a":false},{"u":907,"l":475,"s":0,"a":false},{"u":651,"l":355,"s":1,"a":true},{"u":340,"l":322,"s":1,"a":false},{"u":260,"l":24,"s":0,"a":true},{"u":456,"l":63,"s":1,"a":true},{"u":465,"l":428,"s":1,"a":false},{"u":199,"l":27,"s":1,"a":true},{"u":317,"l":120,"s":1,"a":false},{"u":491,"l":176,"s":1,"a":false},{"u":661,"l":210,"s":0,"a":true},{"u":147,"l":25,"s":1,"a":false},{"u":599,"l":507,"s":0,"a":true},{"u":933,"l":283,"s":1,"a":false},{"u":821,"l":706,"s":1,"a":false},{"u":517,"l":455,"s":1,"a":true},{"u":199,"l":70,"s":0,"a":true},{"u":380,"l":64,"s":1,"a":false},{"u":453,"l":375,"s":1,"a":true},{"u":739,"l":730,"s":0,"a":true},{"u":64,"l":28,"s":1,"a":false},{"u":762,"l":637,"s":1,"a":true},{"u":955,"l":28,"s":1,"a":true},{"u":743,"l":739,"s":1,"a":false},{"u":807,"l":59,"s":1,"a":true},{"u":763,"l":610,"s":1,"a":true},{"u":848,"l":163,"s":0,"a":false},{"u":477,"l":257,"s":1,"a":true},{"u":362,"l":158,"s":0,"a":false},{"u":450,"l":20,"s":1,"a":true},{"u":745,"l":430,"s":1,"a":false},{"u":617,"l":90,"s":1,"a":true},{"u":853,"l":317,"s":0,"a":false},{"u":371,"l":122,"s":1,"a":false},{"u":748,"l":495,"s":0,"a":true},{"u":588,"l":120,"s":0,"a":true},{"u":621,"l":252,"s":1,"a":false},{"u":442,"l":99,"s":0,"a":false},{"u":844,"l":637,"s":1,"a":false},{"u":696,"l":188,"s":1,"a":false},{"u":886,"l":723,"s":0,"a":false},{"u":258,"l":8,"s":0,"a":false},{"u":880,"l":590,"s":0,"a":true},{"u":806,"l":398,"s":0,"a":false},{"u":517,"l":198,"s":1,"a":true},{"u":732,"l":259,"s":0,"a":true},{"u":555,"l":261,"s":0,"a":true},{"u":595,"l":5,"s":0,"a":false},{"u":632,"l":216,"s":1,"a":false},{"u":296,"l":51,"s":0,"a":true},{"u":790,"l":481,"s":0,"a":false},{"u":902,"l":244,"s":1,"a":false},{"u":948,"l":424,"s":1,"a":false},{"u":968,"l":510,"s":1,"a":true},{"u":605,"l":593,"s":0,"a":false},{"u":942,"l":502,"s":0,"a":true},{"u":556,"l":262,"s":0,"a":false},{"u":894,"l":660,"s":1,"a":true},{"u":563,"l":253,"s":0,"a":true},{"u":430,"l":120,"s":1,"a":false},{"u":657,"l":128,"s":0,"a":false},{"u":825,"l":503,"s":1,"a":false},{"u":286,"l":47,"s":0,"a":false},{"u":783,"l":449,"s":1,"a":true},{"u":661,"l":330,"s":0,"a":true},{"u":651,"l":33,"s":0,"a":false},{"u":738,"l":152,"s":0,"a":false},{"u":441,"l":32,"s":0,"a":true},{"u":716,"l":81,"s":0,"a":true},{"u":929,"l":227,"s":0,"a":true},{"u":881,"l":131,"s":0,"a":false},{"u":328,"l":114,"s":0,"a":true},{"u":884,"l":127,"s":0,"a":true},{"u":659,"l":576,"s":0,"a":false},{"u":602,"l":90,"s":1,"a":false},{"u":665,"l":340,"s":0,"a":true},{"u":948,"l":321,"s":0,"a":true},{"u":136,"l":76,"s":0,"a":true},{"u":782,"l":532,"s":1,"a":true},{"u":632,"l":63,"s":1,"a":true},{"u":667,"l":297,"s":1,"a":false},{"u":101,"l":51,"s":1,"a":true},{"u":642,"l":41,"s":0,"a":false},{"u":804,"l":683,"s":0,"a":false},{"u":442,"l":324,"s":1,"a":true},{"u":668,"l":506,"s":1,"a":true},{"u":403,"l":316,"s":1,"a":false},{"u":546,"l":134,"s":0,"a":true},{"u":862,"l":855,"s":1,"a":true},{"u":606,"l":203,"s":0,"a":true},{"u":583,"l":24,"s":0,"a":true},{"u":974,"l":216,"s":0,"a":true},{"u":322,"l":146,"s":0,"a":true},{"u":883,"l":53,"s":1,"a":false},{"u":553,"l":178,"s":0,"a":true},{"u":378,"l":255,"s":0,"a":false},{"u":697,"l":3,"s":0,"a":false},{"u":900,"l":148,"s":0,"a":true},{"u":367,"l":324,"s":1,"a":false},{"u":789,"l":358,"s":0,"a":true},{"u":795,"l":512,"s":1,"a":true},{"u":588,"l":392,"s":1,"a":false},{"u":352,"l":104,"s":0,"a":false},{"u":688,"l":445,"s":1,"a":true},{"u":381,"l":287,"s":0,"a":true},{"u":182,"l":8,"s":0,"a":true},{"u":313,"l":97,"s":0,"a":false},{"u":912,"l":259,"s":0,"a":true},{"u":265,"l":243,"s":0,"a":true},{"u":765,"l":448,"s":1,"a":false},{"u":560,"l":341,"s":1,"a":true},{"u":442,"l":257,"s":1,"a":false},{"u":456,"l":359,"s":0,"a":true},{"u":803,"l":678,"s":1,"a":true},{"u":641,"l":63,"s":1,"a":true},{"u":956,"l":111,"s":0,"a":false},{"u":691,"l":463,"s":0,"a":false},{"u":590,"l":27,"s":1,"a":true},{"u":956,"l":729,"s":0,"a":true},{"u":245,"l":167,"s":1,"a":true},{"u":967,"l":337,"s":1,"a":false},{"u":807,"l":168,"s":1,"a":true},{"u":272,"l":231,"s":0,"a":true},{"u":618,"l":228,"s":0,"a":true},{"u":686,"l":214,"s":1,"a":true},{"u":888,"l":833,"s":1,"a":true},{"u":482,"l":131,"s":1,"a":false},{"u":340,"l":276,"s":1,"a":true},{"u":674,"l":223,"s":0,"a":false},{"u":990,"l":941,"s":0,"a":true},{"u":274,"l":111,"s":1,"a":true},{"u":931,"l":648,"s":1,"a":false},{"u":968,"l":795,"s":1,"a":true},{"u":835,"l":226,"s":0,"a":false},{"u":845,"l":18,"s":1,"a":true},{"u":505,"l":360,"s":1,"a":false},{"u":623,"l":416,"s":0,"a":true},{"u":173,"l":138,"s":0,"a":true},{"u":717,"l":285,"s":0,"a":true},{"u":918,"l":275,"s":0,"a":true},{"u":298,"l":92,"s":1,"a":true},{"u":420,"l":384,"s":0,"a":true},{"u":93,"l":41,"s":1,"a":false},{"u":435,"l":363,"s":0,"a":false},{"u":372,"l":73,"s":1,"a":true},{"u":960,"l":489,"s":0,"a":false},{"u":319,"l":310,"s":0,"a":true},{"u":705,"l":90,"s":0,"a":true},{"u":926,"l":698,"s":0,"a":true},{"u":843,"l":278,"s":1,"a":false},{"u":527,"l":259,"s":1,"a":false},{"u":417,"l":191,"s":0,"a":false},{"u":651,"l":182,"s":0,"a":true},{"u":89,"l":50,"s":1,"a":true},{"u":921,"l":788,"s":1,"a":false},{"u":571,"l":341,"s":1,"a":true},{"u":534,"l":299,"s":0,"a":true},{"u":981,"l":432,"s":1,"a":false},{"u":647,"l":596,"s":1,"a":false},{"u":837,"l":358,"s":0,"a":false},{"u":732,"l":373,"s":0,"a":false},{"u":809,"l":253,"s":0,"a":true},{"u":309,"l":296,"s":1,"a":true},{"u":385,"l":84,"s":1,"a":true},{"u":417,"l":413,"s":0,"a":false},{"u":563,"l":426,"s":0,"a":true},{"u":806,"l":604,"s":0,"a":true},{"u":792,"l":563,"s":1,"a":true},{"u":862,"l":518,"s":1,"a":true},{"u":500,"l":33,"s":0,"a":false},{"u":601,"l":337,"s":1,"a":true},{"u":707,"l":577,"s":1,"a":true},{"u":915,"l":703,"s":0,"a":true},{"u":446,"l":341,"s":1,"a":false},{"u":830,"l":181,"s":1,"a":false},{"u":765,"l":137,"s":1,"a":true},{"u":728,"l":617,"s":1,"a":true},{"u":942,"l":714,"s":1,"a":true},{"u":17,"l":15,"s":0,"a":false},{"u":431,"l":1,"s":1,"a":false},{"u":822,"l":461,"s":1,"a":true},{"u":943,"l":648,"s":0,"a":true},{"u":263,"l":85,"s":1,"a":false},{"u":138,"l":58,"s":1,"a":false},{"u":971,"l":819,"s":0,"a":false},{"u":439,"l":371,"s":1,"a":false},{"u":559,"l":191,"s":1,"a":false},{"u":653,"l":641,"s":1,"a":false},{"u":673,"l":109,"s":0,"a":true},{"u":268,"l":251,"s":1,"a":false},{"u":630,"l":335,"s":0,"a":false},{"u":744,"l":110,"s":1,"a":true},{"u":992,"l":84,"s":0,"a":true},{"u":870,"l":448,"s":0,"a":false},{"u":322,"l":269,"s":1,"a":false},{"u":835,"l":779,"s":1,"a":true},{"u":402,"l":384,"s":0,"a":true},{"u":413,"l":358,"s":1,"a":true},{"u":307,"l":132,"s":0,"a":true},{"u":734,"l":136,"s":0,"a":true},{"u":845,"l":668,"s":0,"a":false},{"u":812,"l":737,"s":1,"a":false},{"u":400,"l":225,"s":0,"a":true},{"u":729,"l":468,"s":1,"a":false},{"u":668,"l":331,"s":0,"a":true},{"u":744,"l":183,"s":1,"a":false},{"u":571,"l":68,"s":1,"a":false},{"u":985,"l":677,"s":1,"a":false},{"u":872,"l":266,"s":1,"a":false},{"u":308,"l":209,"s":0,"a":false},{"u":623,"l":43,"s":0,"a":false},{"u":460,"l":341,"s":0,"a":true},{"u":592,"l":383,"s":0,"a":false},{"u":735,"l":455,"s":1,"a":false},{"u":622,"l":211,"s":1,"a":true},{"u":325,"l":184,"s":1,"a":true},{"u":934,"l":393,"s":1,"a":false},{"u":360,"l":138,"s":1,"a":true},{"u":785,"l":393,"s":1,"a":false},{"u":257,"l":105,"s":0,"a":true},{"u":68,"l":61,"s":0,"a":true},{"u":869,"l":252,"s":1,"a":true},{"u":704,"l":156,"s":1,"a":true},{"u":347,"l":175,"s":1,"a":false},{"u":597,"l":261,"s":1,"a":true},{"u":578,"l":134,"s":0,"a":true},{"u":624,"l":401,"s":0,"a":true},{"u":231,"l":218,"s":0,"a":false},{"u":228,"l":94,"s":1,"a":true},{"u":404,"l":101,"s":0,"a":false},{"u":814,"l":576,"s":0,"a":false},{"u":500,"l":3,"s":1,"a":false},{"u":366,"l":64,"s":0,"a":true},{"u":550,"l":407,"s":0,"a":false},{"u":940,"l":27,"s":0,"a":true},{"u":836,"l":660,"s":1,"a":true},{"u":826,"l":469,"s":0,"a":true},{"u":328,"l":202,"s":0,"a":true},{"u":844,"l":104,"s":1,"a":true},{"u":954,"l":768,"s":0,"a":false},{"u":945,"l":910,"s":0,"a":true},{"u":839,"l":222,"s":1,"a":true},{"u":744,"l":56,"s":1,"a":false},{"u":759,"l":287,"s":0,"a":true},{"u":390,"l":278,"s":1,"a":false},{"u":904,"l":107,"s":0,"a":true},{"u":626,"l":156,"s":0,"a":true},{"u":44,"l":10,"s":1,"a":true},{"u":581,"l":90,"s":0,"a":true},{"u":134,"l":69,"s":1,"a":false},{"u":459,"l":161,"s":1,"a":false},{"u":688,"l":54,"s":1,"a":false},{"u":838,"l":653,"s":1,"a":false},{"u":560,"l":532,"s":1,"a":false},{"u":944,"l":217,"s":0,"a":false},{"u":612,"l":398,"s":0,"a":false},{"u":284,"l":222,"s":1,"a":true},{"u":586,"l":170,"s":0,"a":true},{"u":580,"l":95,"s":1,"a":true},{"u":95,"l":44,"s":1,"a":false},{"u":333,"l":46,"s":1,"a":true},{"u":635,"l":474,"s":1,"a":true},{"u":827,"l":114,"s":0,"a":false},{"u":485,"l":235,"s":1,"a":true},{"u":410,"l":305,"s":1,"a":true},{"u":636,"l":612,"s":0,"a":false},{"u":654,"l":113,"s":1,"a":false},{"u":798,"l":48,"s":1,"a":false},{"u":385,"l":71,"s":1,"a":true},{"u":989,"l":222,"s":0,"a":false},{"u":884,"l":160,"s":0,"a":false},{"u":907,"l":190,"s":0,"a":false},{"u":964,"l":274,"s":0,"a":true},{"u":802,"l":198,"s":0,"a":true},{"u":536,"l":516,"s":1,"a":true},{"u":370,"l":137,"s":1,"a":true},{"u":326,"l":151,"s":1,"a":true},{"u":913,"l":231,"s":1,"a":false},{"u":213,"l":63,"s":0,"a":false},{"u":356,"l":125,"s":1,"a":true},{"u":982,"l":759,"s":1,"a":true},{"u":653,"l":306,"s":0,"a":false},{"u":259,"l":206,"s":0,"a":true},{"u":832,"l":249,"s":0,"a":false},{"u":345,"l":33,"s":0,"a":true},{"u":683,"l":64,"s":0,"a":true},{"u":471,"l":99,"s":0,"a":false},{"u":886,"l":514,"s":1,"a":true},{"u":503,"l":234,"s":0,"a":true},{"u":141,"l":110,"s":0,"a":false},{"u":472,"l":471,"s":1,"a":false},{"u":702,"l":690,"s":1,"a":true},{"u":72,"l":70,"s":1,"a":true},{"u":842,"l":303,"s":1,"a":false},{"u":644,"l":174,"s":1,"a":true},{"u":182,"l":82,"s":0,"a":true},{"u":957,"l":16,"s":1,"a":true},{"u":580,"l":278,"s":0,"a":false},{"u":659,"l":471,"s":1,"a":true},{"u":472,"l":375,"s":0,"a":false},{"u":303,"l":150,"s":1,"a":false},{"u":799,"l":716,"s":0,"a":true},{"u":807,"l":575,"s":1,"a":true},{"u":907,"l":429,"s":1,"a":true},{"u":836,"l":306,"s":0,"a":true},{"u":364,"l":345,"s":1,"a":false},{"u":919,"l":167,"s":1,"a":false},{"u":905,"l":77,"s":1,"a":true},{"u":871,"l":472,"s":0,"a":true},{"u":525,"l":193,"s":1,"a":false},{"u":581,"l":471,"s":0,"a":true},{"u":625,"l":101,"s":0,"a":true},{"u":947,"l":468,"s":0,"a":false},{"u":983,"l":587,"s":1,"a":false},{"u":690,"l":574,"s":1,"a":false},{"u":916,"l":256,"s":1,"a":true},{"u":357,"l":183,"s":0,"a":false},{"u":159,"l":58,"s":0,"a":false},{"u":913,"l":168,"s":0,"a":false},{"u":771,"l":677,"s":0,"a":false},{"u":914,"l":88,"s":0,"a":false},{"u":224,"l":223,"s":1,"a":true},{"u":381,"l":13,"s":0,"a":true},{"u":776,"l":486,"s":1,"a":true},{"u":675,"l":341,"s":0,"a":false},{"u":941,"l":116,"s":1,"a":false},{"u":878,"l":583,"s":0,"a":false},{"u":943,"l":551,"s":1,"a":true},{"u":90,"l":33,"s":0,"a":false},{"u":840,"l":541,"s":0,"a":true},{"u":834,"l":172,"s":1,"a":true},{"u":168,"l":44,"s":1,"a":false},{"u":719,"l":146,"s":0,"a":false},{"u":376,"l":4,"s":1,"a":true},{"u":430,"l":372,"s":0,"a":false},{"u":635,"l":555,"s":0,"a":true},{"u":736,"l":106,"s":1,"a":true},{"u":674,"l":150,"s":0,"a":true},{"u":899,"l":334,"s":0,"a":true},{"u":680,"l":55,"s":0,"a":true},{"u":653,"l":284,"s":1,"a":false},{"u":715,"l":185,"s":0,"a":false},{"u":181,"l":168,"s":1,"a":true},{"u":140,"l":71,"s":1,"a":true},{"u":902,"l":784,"s":1,"a":false},{"u":489,"l":117,"s":0,"a":false},{"u":871,"l":121,"s":0,"a":true},{"u":812,"l":784,"s":1,"a":false},{"u":927,"l":561,"s":1,"a":false},{"u":642,"l":16,"s":0,"a":true},{"u":933,"l":635,"s":1,"a":false},{"u":926,"l":369,"s":0,"a":true},{"u":570,"l":513,"s":0,"a":false},{"u":984,"l":595,"s":1,"a":true},{"u":990,"l":879,"s":0,"a":false},{"u":644,"l":185,"s":1,"a":true},{"u":673,"l":76,"s":0,"a":false},{"u":990,"l":188,"s":1,"a":true},{"u":365,"l":264,"s":0,"a":true},{"u":686,"l":32,"s":0,"a":false},{"u":703,"l":645,"s":0,"a":true},{"u":682,"l":593,"s":0,"a":false},{"u":835,"l":458,"s":0,"a":false},{"u":732,"l":645,"s":0,"a":false},{"u":727,"l":438,"s":0,"a":false},{"u":466,"l":459,"s":1,"a":false},{"u":809,"l":588,"s":0,"a":false},{"u":818,"l":351,"s":1,"a":true},{"u":557,"l":215,"s":0,"a":false},{"u":928,"l":560,"s":1,"a":true},{"u":202,"l":39,"s":1,"a":false},{"u":902,"l":644,"s":0,"a":false},{"u":897,"l":532,"s":1,"a":true},{"u":403,"l":208,"s":0,"a":true},{"u":527,"l":304,"s":0,"a":false},{"u":878,"l":331,"s":1,"a":true},{"u":200,"l":70,"s":0,"a":false},{"u":594,"l":12,"s":0,"a":true},{"u":773,"l":329,"s":0,"a":false},{"u":884,"l":48,"s":0,"a":true},{"u":659,"l":305,"s":0,"a":false},{"u":871,"l":865,"s":1,"a":false},{"u":474,"l":105,"s":0,"a":false},{"u":512,"l":384,"s":1,"a":true},{"u":179,"l":160,"s":0,"a":false},{"u":907,"l":606,"s":1,"a":true},{"u":548,"l":188,"s":1,"a":false},{"u":574,"l":190,"s":1,"a":true},{"u":419,"l":255,"s":0,"a":false},{"u":988,"l":533,"s":1,"a":false},{"u":301,"l":234,"s":1,"a":false},{"u":351,"l":107,"s":0,"a":false},{"u":823,"l":711,"s":1,"a":true},{"u":713,"l":662,"s":1,"a":true},{"u":883,"l":390,"s":1,"a":true},{"u":782,"l":90,"s":0,"a":true},{"u":963,"l":56,"s":1,"a":true},{"u":396,"l":231,"s":1,"a":true},{"u":415,"l":138,"s":0,"a":true},{"u":980,"l":463,"s":1,"a":true},{"u":952,"l":659,"s":1,"a":false},{"u":462,"l":376,"s":0,"a":true},{"u":223,"l":93,"s":0,"a":true},{"u":500,"l":418,"s":0,"a":true},{"u":922,"l":490,"s":0,"a":true},{"u":478,"l":194,"s":0,"a":true},{"u":880,"l":815,"s":0,"a":true},{"u":535,"l":417,"s":1,"a":false},{"u":948,"l":771,"s":1,"a":false},{"u":454,"l":12,"s":1,"a":true},{"u":172,"l":106,"s":1,"a":false},{"u":776,"l":251,"s":1,"a":false},{"u":809,"l":345,"s":0,"a":true},{"u":814,"l":119,"s":0,"a":true},{"u":823,"l":124,"s":1,"a":true},{"u":947,"l":756,"s":1,"a":true},{"u":425,"l":191,"s":1,"a":true},{"u":750,"l":403,"s":0,"a":false},{"u":885,"l":498,"s":0,"a":false},{"u":940,"l":762,"s":0,"a":true},{"u":356,"l":106,"s":1,"a":false},{"u":887,"l":377,"s":0,"a":false},{"u":935,"l":902,"s":0,"a":false},{"u":638,"l":398,"s":1,"a":true},{"u":719,"l":308,"s":0,"a":true},{"u":776,"l":395,"s":1,"a":false},{"u":334,"l":168,"s":1,"a":false},{"u":792,"l":212,"s":1,"a":true},{"u":382,"l":157,"s":0,"a":true},{"u":628,"l":285,"s":0,"a":true},{"u":747,"l":166,"s":1,"a":false},{"u":913,"l":704,"s":1,"a":true},{"u":614,"l":35,"s":1,"a":false},{"u":932,"l":379,"s":1,"a":false},{"u":395,"l":34,"s":1,"a":false},{"u":417,"l":149,"s":0,"a":true},{"u":779,"l":105,"s":1,"a":true},{"u":382,"l":183,"s":1,"a":false},{"u":984,"l":671,"s":0,"a":false},{"u":920,"l":451,"s":1,"a":false},{"u":629,"l":536,"s":0,"a":true},{"u":504,"l":347,"s":1,"a":true},{"u":660,"l":240,"s":1,"a":true},{"u":942,"l":310,"s":0,"a":true},{"u":740,"l":590,"s":0,"a":true},{"u":915,"l":482,"s":1,"a":false},{"u":882,"l":559,"s":1,"a":true},{"u":502,"l":72,"s":0,"a":false},{"u":713,"l":708,"s":0,"a":true},{"u":423,"l":202,"s":0,"a":true},{"u":816,"l":390,"s":1,"a":false},{"u":780,"l":10,"s":0,"a":true},{"u":578,"l":34,"s":0,"a":true},{"u":826,"l":604,"s":1,"a":false},{"u":942,"l":897,"s":1,"a":true},{"u":623,"l":320,"s":0,"a":true},{"u":984,"l":319,"s":1,"a":false},{"u":652,"l":157,"s":0,"a":false},{"u":513,"l":184,"s":1,"a":false},{"u":838,"l":579,"s":1,"a":true},{"u":747,"l":411,"s":0,"a":false},{"u":965,"l":357,"s":0,"a":false},{"u":872,"l":406,"s":0,"a":true},{"u":657,"l":334,"s":1,"a":true},{"u":501,"l":142,"s":0,"a":true},{"u":694,"l":287,"s":1,"a":false},{"u":808,"l":755,"s":1,"a":false},{"u":204,"l":26,"s":0,"a":true},{"u":400,"l":390,"s":0,"a":true},{"u":428,"l":410,"s":1,"a":true},{"u":308,"l":197,"s":0,"a":false},{"u":368,"l":11,"s":1,"a":true},{"u":851,"l":832,"s":0,"a":false},{"u":432,"l":299,"s":1,"a":false},{"u":747,"l":305,"s":0,"a":false},{"u":949,"l":892,"s":1,"a":false},{"u":656,"l":198,"s":1,"a":false},{"u":712,"l":261,"s":1,"a":false},{"u":778,"l":93,"s":1,"a":true},{"u":629,"l":185,"s":1,"a":false},{"u":369,"l":278,"s":1,"a":true},{"u":568,"l":464,"s":1,"a":false},{"u":717,"l":458,"s":0,"a":false},{"u":613,"l":441,"s":0,"a":false},{"u":639,"l":191,"s":1,"a":false},{"u":559,"l":372,"s":0,"a":true},{"u":753,"l":251,"s":1,"a":true},{"u":798,"l":324,"s":1,"a":true},{"u":985,"l":875,"s":1,"a":false},{"u":970,"l":697,"s":1,"a":false},{"u":265,"l":106,"s":0,"a":true},{"u":65,"l":47,"s":0,"a":false},{"u":354,"l":304,"s":0,"a":true},{"u":672,"l":110,"s":1,"a":false},{"u":748,"l":684,"s":1,"a":true},{"u":430,"l":129,"s":1,"a":true},{"u":899,"l":676,"s":1,"a":false},{"u":870,"l":601,"s":0,"a":true},{"u":737,"l":205,"s":0,"a":true},{"u":645,"l":429,"s":1,"a":true},{"u":764,"l":539,"s":1,"a":true},{"u":997,"l":320,"s":1,"a":false},{"u":625,"l":57,"s":1,"a":true},{"u":805,"l":449,"s":0,"a":true},{"u":838,"l":139,"s":1,"a":true},{"u":555,"l":325,"s":0,"a":true},{"u":428,"l":6,"s":1,"a":false},{"u":669,"l":571,"s":1,"a":false},{"u":688,"l":216,"s":1,"a":false},{"u":459,"l":307,"s":1,"a":true},{"u":716,"l":249,"s":0,"a":false},{"u":639,"l":409,"s":0,"a":false},{"u":526,"l":287,"s":0,"a":false},{"u":434,"l":165,"s":1,"a":true},{"u":481,"l":150,"s":1,"a":true},{"u":783,"l":123,"s":0,"a":false},{"u":864,"l":529,"s":1,"a":true},{"u":733,"l":374,"s":0,"a":true},{"u":589,"l":58,"s":1,"a":false},{"u":625,"l":383,"s":0,"a":false},{"u":463,"l":459,"s":1,"a":false},{"u":398,"l":166,"s":0,"a":false},{"u":781,"l":472,"s":0,"a":false},{"u":611,"l":160,"s":1,"a":false},{"u":919,"l":676,"s":0,"a":false},{"u":601,"l":334,"s":0,"a":true},{"u":936,"l":785,"s":0,"a":false},{"u":805,"l":760,"s":0,"a":true},{"u":592,"l":436,"s":1,"a":false},{"u":547,"l":183,"s":0,"a":true},{"u":983,"l":114,"s":1,"a":true},{"u":984,"l":572,"s":1,"a":false},{"u":350,"l":116,"s":0,"a":false},{"u":706,"l":164,"s":0,"a":true},{"u":884,"l":627,"s":0,"a":false},{"u":751,"l":84,"s":0,"a":false},{"u":534,"l":458,"s":1,"a":false},{"u":781,"l":482,"s":1,"a":true},{"u":161,"l":109,"s":0,"a":true},{"u":862,"l":281,"s":1,"a":false},{"u":963,"l":394,"s":0,"a":false},{"u":644,"l":381,"s":1,"a":true},{"u":458,"l":59,"s":0,"a":true},{"u":989,"l":398,"s":1,"a":false},{"u":723,"l":228,"s":0,"a":false},{"u":655,"l":261,"s":0,"a":true},{"u":748,"l":75,"s":1,"a":false},{"u":766,"l":505,"s":0,"a":true},{"u":744,"l":696,"s":0,"a":true},{"u":783,"l":745,"s":0,"a":true},{"u":930,"l":794,"s":1,"a":false},{"u":533,"l":79,"s":0,"a":true},{"u":374,"l":82,"s":1,"a":false},{"u":411,"l":325,"s":1,"a":false},{"u":234,"l":89,"s":1,"a":true},{"u":514,"l":332,"s":1,"a":false},{"u":897,"l":887,"s":0,"a":true},{"u":979,"l":715,"s":1,"a":false},{"u":618,"l":303,"s":0,"a":true},{"u":605,"l":358,"s":1,"a":true},{"u":422,"l":390,"s":1,"a":false},{"u":404,"l":178,"s":0,"a":false},{"u":884,"l":632,"s":1,"a":false},{"u":457,"l":83,"s":1,"a":true},{"u":512,"l":133,"s":1,"a":true},{"u":481,"l":319,"s":0,"a":true},{"u":703,"l":188,"s":0,"a":true},{"u":304,"l":104,"s":1,"a":true},{"u":73,"l":6,"s":0,"a":false},{"u":618,"l":43,"s":0,"a":false},{"u":695,"l":72,"s":0,"a":true},{"u":541,"l":315,"s":1,"a":false},{"u":318,"l":99,"s":1,"a":true},{"u":706,"l":133,"s":1,"a":false},{"u":453,"l":201,"s":1,"a":false},{"u":171,"l":132,"s":1,"a":false},{"u":596,"l":25,"s":1,"a":true},{"u":979,"l":553,"s":1,"a":true},{"u":931,"l":387,"s":1,"a":false},{"u":660,"l":32,"s":0,"a":false},{"u":688,"l":576,"s":0,"a":false},{"u":861,"l":777,"s":1,"a":true},{"u":849,"l":152,"s":0,"a":true},{"u":437,"l":362,"s":0,"a":true},{"u":938,"l":522,"s":1,"a":true},{"u":931,"l":111,"s":1,"a":false},{"u":977,"l":449,"s":1,"a":true},{"u":645,"l":309,"s":0,"a":true},{"u":714,"l":609,"s":0,"a":true},{"u":790,"l":441,"s":1,"a":true},{"u":982,"l":489,"s":1,"a":false},{"u":941,"l":35,"s":0,"a":false},{"u":669,"l":20,"s":1,"a":true},{"u":926,"l":532,"s":0,"a":false},{"u":879,"l":517,"s":1,"a":true},{"u":824,"l":689,"s":1,"a":true},{"u":314,"l":294,"s":0,"a":true},{"u":943,"l":292,"s":0,"a":true},{"u":974,"l":964,"s":1,"a":true},{"u":939,"l":486,"s":1,"a":true},{"u":602,"l":287,"s":1,"a":false},{"u":192,"l":142,"s":1,"a":true},{"u":888,"l":455,"s":1,"a":false},{"u":833,"l":636,"s":0,"a":false},{"u":516,"l":23,"s":0,"a":true},{"u":643,"l":640,"s":1,"a":false},{"u":505,"l":449,"s":0,"a":false},{"u":866,"l":764,"s":0,"a":true},{"u":608,"l":223,"s":1,"a":true},{"u":715,"l":369,"s":1,"a":true},{"u":346,"l":168,"s":1,"a":true},{"u":754,"l":144,"s":0,"a":true},{"u":825,"l":538,"s":1,"a":false},{"u":780,"l":659,"s":1,"a":false},{"u":632,"l":272,"s":0,"a":true},{"u":922,"l":512,"s":0,"a":false},{"u":843,"l":281,"s":1,"a":true},{"u":607,"l":17,"s":1,"a":false},{"u":414,"l":282,"s":0,"a":false},{"u":915,"l":801,"s":0,"a":false},{"u":905,"l":249,"s":0,"a":true},{"u":776,"l":296,"s":0,"a":false},{"u":740,"l":437,"s":1,"a":false},{"u":237,"l":218,"s":1,"a":true},{"u":198,"l":65,"s":0,"a":false},{"u":752,"l":720,"s":0,"a":false},{"u":429,"l":334,"s":1,"a":true},{"u":452,"l":174,"s":0,"a":true},{"u":944,"l":466,"s":1,"a":false},{"u":707,"l":389,"s":0,"a":false},{"u":993,"l":920,"s":1,"a":false},{"u":426,"l":415,"s":0,"a":true},{"u":787,"l":190,"s":0,"a":true},{"u":981,"l":923,"s":1,"a":true},{"u":213,"l":151,"s":1,"a":false},{"u":778,"l":270,"s":1,"a":false},{"u":751,"l":592,"s":1,"a":true},{"u":528,"l":156,"s":1,"a":true},{"u":693,"l":530,"s":1,"a":false},{"u":81,"l":39,"s":1,"a":true},{"u":89,"l":7,"s":1,"a":false},{"u":849,"l":758,"s":1,"a":false},{"u":540,"l":468,"s":0,"a":true},{"u":668,"l":510,"s":0,"a":false},{"u":655,"l":646,"s":0,"a":true},{"u":416,"l":410,"s":1,"a":false},{"u":904,"l":816,"s":0,"a":true},{"u":652,"l":54,"s":0,"a":true},{"u":689,"l":546,"s":1,"a":true},{"u":154,"l":141,"s":0,"a":false},{"u":373,"l":1,"s":0,"a":false},{"u":881,"l":704,"s":0,"a":false},{"u":720,"l":246,"s":1,"a":true},{"u":968,"l":309,"s":0,"a":true},{"u":568,"l":533,"s":0,"a":false},{"u":944,"l":782,"s":0,"a":true},{"u":210,"l":144,"s":0,"a":true},{"u":157,"l":11,"s":0,"a":true},{"u":819,"l":650,"s":1,"a":false},{"u":429,"l":147,"s":1,"a":false},{"u":875,"l":112,"s":1,"a":false},{"u":795,"l":266,"s":1,"a":true},{"u":401,"l":9,"s":0,"a":true},{"u":917,"l":650,"s":1,"a":true},{"u":897,"l":793,"s":0,"a":false},{"u":883,"l":43,"s":0,"a":true},{"u":930,"l":260,"s":1,"a":true},{"u":972,"l":39,"s":0,"a":true},{"u":957,"l":685,"s":0,"a":true},{"u":573,"l":41,"s":1,"a":true},{"u":159,"l":88,"s":1,"a":true},{"u":992,"l":613,"s":0,"a":false},{"u":913,"l":887,"s":1,"a":true},{"u":409,"l":391,"s":0,"a":true},{"u":814,"l":22,"s":0,"a":false},{"u":877,"l":294,"s":0,"a":false},{"u":660,"l":377,"s":1,"a":true},{"u":555,"l":137,"s":0,"a":true},{"u":238,"l":147,"s":1,"a":true},{"u":155,"l":124,"s":1,"a":false},{"u":909,"l":400,"s":0,"a":false},{"u":748,"l":416,"s":1,"a":true},{"u":791,"l":725,"s":1,"a":false},{"u":588,"l":412,"s":1,"a":true},{"u":668,"l":241,"s":1,"a":false},{"u":870,"l":728,"s":1,"a":true},{"u":206,"l":61,"s":0,"a":false},{"u":526,"l":401,"s":0,"a":false},{"u":689,"l":556,"s":0,"a":false},{"u":989,"l":108,"s":0,"a":true},{"u":961,"l":167,"s":1,"a":true},{"u":674,"l":40,"s":0,"a":true},{"u":846,"l":97,"s":0,"a":false},{"u":590,"l":495,"s":0,"a":false},{"u":812,"l":215,"s":0,"a":false},{"u":927,"l":178,"s":1,"a":true},{"u":604,"l":440,"s":1,"a":false},{"u":809,"l":551,"s":1,"a":true},{"u":798,"l":377,"s":0,"a":false},{"u":898,"l":130,"s":0,"a":false},{"u":411,"l":409,"s":0,"a":true},{"u":999,"l":228,"s":1,"a":false},{"u":784,"l":565,"s":1,"a":false},{"u":389,"l":379,"s":0,"a":false},{"u":559,"l":250,"s":1,"a":false},{"u":993,"l":617,"s":0,"a":true},{"u":712,"l":678,"s":1,"a":true},{"u":532,"l":197,"s":0,"a":true},{"u":158,"l":18,"s":0,"a":false},{"u":855,"l":269,"s":0,"a":true},{"u":519,"l":510,"s":1,"a":true},{"u":736,"l":395,"s":0,"a":true},{"u":219,"l":162,"s":1,"a":false},{"u":607,"l":39,"s":0,"a":true},{"u":811,"l":699,"s":0,"a":false},{"u":712,"l":106,"s":1,"a":true},{"u":775,"l":25,"s":1,"a":true},{"u":749,"l":204,"s":0,"a":false},{"u":689,"l":112,"s":0,"a":false},{"u":855,"l":57,"s":0,"a":false},{"u":652,"l":109,"s":0,"a":false},{"u":675,"l":544,"s":0,"a":false},{"u":920,"l":163,"s":0,"a":true},{"u":617,"l":353,"s":0,"a":true},{"u":926,"l":727,"s":1,"a":true},{"u":777,"l":214,"s":1,"a":true},{"u":333,"l":251,"s":1,"a":false},{"u":429,"l":131,"s":0,"a":false},{"u":914,"l":770,"s":1,"a":false},{"u":618,"l":266,"s":1,"a":true},{"u":636,"l":40,"s":1,"a":false},{"u":382,"l":369,"s":1,"a":false},{"u":824,"l":17,"s":1,"a":true},{"u":433,"l":336,"s":0,"a":false},{"u":487,"l":456,"s":0,"a":false},{"u":995,"l":716,"s":0,"a":true},{"u":840,"l":32,"s":0,"a":false},{"u":333,"l":292,"s":1,"a":false},{"u":235,"l":47,"s":1,"a":true},{"u":860,"l":326,"s":0,"a":true},{"u":530,"l":302,"s":1,"a":true},{"u":549,"l":244,"s":1,"a":false},{"u":739,"l":546,"s":0,"a":true},{"u":211,"l":68,"s":1,"a":true},{"u":414,"l":191,"s":0,"a":false},{"u":641,"l":490,"s":0,"a":false},{"u":309,"l":61,"s":1,"a":false},{"u":688,"l":509,"s":1,"a":true},{"u":988,"l":759,"s":0,"a":true},{"u":752,"l":599,"s":1,"a":false},{"u":598,"l":90,"s":1,"a":true},{"u":657,"l":546,"s":1,"a":true},{"u":309,"l":79,"s":1,"a":true},{"u":971,"l":520,"s":1,"a":true},{"u":509,"l":209,"s":1,"a":true},{"u":181,"l":34,"s":0,"a":false},{"u":985,"l":708,"s":1,"a":true},{"u":925,"l":336,"s":0,"a":true},{"u":813,"l":61,"s":1,"a":true},{"u":875,"l":825,"s":1,"a":false},{"u":80,"l":17,"s":0,"a":false},{"u":260,"l":237,"s":0,"a":true},{"u":299,"l":31,"s":1,"a":true},{"u":417,"l":97,"s":0,"a":false},{"u":382,"l":239,"s":1,"a":false},{"u":657,"l":271,"s":1,"a":false},{"u":915,"l":75,"s":1,"a":false},{"u":741,"l":566,"s":1,"a":true},{"u":790,"l":786,"s":0,"a":false},{"u":856,"l":3,"s":0,"a":true},{"u":941,"l":222,"s":1,"a":false},{"u":899,"l":177,"s":1,"a":true},{"u":775,"l":393,"s":0,"a":false},{"u":7,"l":4,"s":1,"a":true},{"u":885,"l":856,"s":1,"a":true},{"u":860,"l":725,"s":1,"a":true},{"u":779,"l":206,"s":0,"a":true},{"u":311,"l":141,"s":1,"a":true},{"u":916,"l":609,"s":1,"a":true},{"u":848,"l":45,"s":1,"a":false},{"u":256,"l":178,"s":0,"a":true},{"u":386,"l":1,"s":1,"a":false},{"u":541,"l":475,"s":1,"a":true},{"u":257,"l":121,"s":0,"a":false},{"u":893,"l":468,"s":1,"a":true},{"u":523,"l":386,"s":1,"a":false},{"u":386,"l":348,"s":1,"a":false},{"u":364,"l":309,"s":0,"a":true},{"u":713,"l":208,"s":0,"a":false},{"u":832,"l":823,"s":1,"a":false},{"u":609,"l":454,"s":0,"a":false},{"u":870,"l":111,"s":1,"a":false},{"u":316,"l":101,"s":1,"a":false},{"u":758,"l":393,"s":0,"a":false},{"u":999,"l":805,"s":0,"a":false},{"u":299,"l":254,"s":0,"a":false},{"u":768,"l":322,"s":0,"a":false},{"u":787,"l":504,"s":0,"a":false},{"u":854,"l":356,"s":0,"a":false},{"u":819,"l":236,"s":0,"a":false},{"u":768,"l":338,"s":1,"a":true},{"u":100,"l":34,"s":0,"a":false},{"u":815,"l":713,"s":0,"a":false},{"u":765,"l":459,"s":0,"a":false},{"u":618,"l":428,"s":1,"a":true},{"u":999,"l":281,"s":0,"a":false},{"u":588,"l":352,"s":0,"a":false},{"u":260,"l":127,"s":0,"a":false},{"u":502,"l":128,"s":0,"a":true},{"u":977,"l":333,"s":1,"a":false},{"u":290,"l":27,"s":0,"a":true},{"u":569,"l":190,"s":0,"a":true},{"u":819,"l":403,"s":0,"a":true},{"u":757,"l":592,"s":1,"a":true},{"u":823,"l":420,"s":0,"a":true},{"u":715,"l":611,"s":0,"a":false},{"u":786,"l":189,"s":0,"a":true},{"u":801,"l":739,"s":1,"a":false},{"u":287,"l":12,"s":1,"a":false},{"u":999,"l":603,"s":0,"a":true},{"u":780,"l":262,"s":1,"a":false},{"u":250,"l":77,"s":1,"a":true},{"u":366,"l":96,"s":1,"a":true},{"u":677,"l":164,"s":0,"a":true},{"u":558,"l":48,"s":0,"a":false},{"u":923,"l":770,"s":0,"a":true},{"u":922,"l":793,"s":0,"a":false},{"u":655,"l":557,"s":0,"a":false},{"u":978,"l":787,"s":1,"a":true},{"u":986,"l":88,"s":0,"a":false},{"u":794,"l":755,"s":1,"a":false},{"u":117,"l":27,"s":1,"a":true},{"u":709,"l":515,"s":0,"a":false},{"u":954,"l":917,"s":1,"a":true},{"u":721,"l":122,"s":0,"a":true},{"u":393,"l":70,"s":1,"a":true},{"u":944,"l":95,"s":0,"a":true},{"u":689,"l":580,"s":0,"a":false},{"u":375,"l":37,"s":1,"a":true},{"u":334,"l":270,"s":1,"a":true},{"u":741,"l":315,"s":0,"a":false},{"u":951,"l":599,"s":1,"a":false},{"u":816,"l":168,"s":0,"a":false},{"u":793,"l":591,"s":1,"a":false},{"u":461,"l":225,"s":0,"a":true},{"u":471,"l":49,"s":1,"a":false},{"u":965,"l":950,"s":1,"a":false},{"u":880,"l":239,"s":0,"a":true},{"u":422,"l":117,"s":1,"a":true},{"u":976,"l":618,"s":0,"a":false},{"u":199,"l":148,"s":0,"a":true},{"u":446,"l":8,"s":1,"a":false},{"u":265,"l":264,"s":1,"a":true},{"u":581,"l":546,"s":1,"a":false},{"u":602,"l":508,"s":1,"a":true},{"u":936,"l":546,"s":1,"a":false},{"u":666,"l":580,"s":1,"a":false},{"u":520,"l":91,"s":1,"a":false},{"u":366,"l":32,"s":1,"a":true},{"u":930,"l":685,"s":0,"a":true},{"u":411,"l":156,"s":1,"a":false},{"u":482,"l":434,"s":0,"a":false},{"u":949,"l":121,"s":1,"a":true},{"u":691,"l":305,"s":0,"a":false},{"u":520,"l":420,"s":1,"a":false},{"u":642,"l":324,"s":0,"a":false},{"u":524,"l":172,"s":0,"a":false},{"u":289,"l":211,"s":1,"a":true},{"u":911,"l":377,"s":1,"a":true},{"u":724,"l":149,"s":1,"a":true},{"u":935,"l":161,"s":1,"a":false},{"u":868,"l":821,"s":1,"a":false},{"u":869,"l":672,"s":1,"a":false},{"u":636,"l":284,"s":1,"a":true},{"u":989,"l":45,"s":1,"a":false},{"u":343,"l":258,"s":0,"a":true},{"u":687,"l":650,"s":0,"a":false},{"u":556,"l":1,"s":0,"a":true},{"u":760,"l":72,"s":1,"a":true},{"u":916,"l":833,"s":1,"a":false},{"u":91,"l":86,"s":1,"a":false},{"u":384,"l":362,"s":1,"a":true},{"u":440,"l":427,"s":0,"a":false},{"u":895,"l":489,"s":0,"a":true},{"u":230,"l":98,"s":0,"a":false},{"u":579,"l":467,"s":0,"a":true},{"u":323,"l":11,"s":0,"a":false},{"u":175,"l":146,"s":1,"a":true},{"u":784,"l":216,"s":1,"a":false},{"u":574,"l":198,"s":1,"a":true},{"u":845,"l":556,"s":1,"a":true},{"u":625,"l":608,"s":1,"a":true},{"u":851,"l":795,"s":1,"a":false},{"u":327,"l":222,"s":1,"a":true},{"u":352,"l":229,"s":0,"a":false},{"u":768,"l":162,"s":1,"a":true},{"u":917,"l":374,"s":0,"a":false},{"u":758,"l":235,"s":0,"a":false},{"u":600,"l":378,"s":1,"a":false},{"u":619,"l":245,"s":1,"a":false},{"u":825,"l":9,"s":1,"a":true},{"u":385,"l":297,"s":1,"a":false},{"u":591,"l":494,"s":1,"a":false},{"u":185,"l":78,"s":0,"a":false},{"u":697,"l":324,"s":1,"a":false},{"u":780,"l":739,"s":1,"a":false},{"u":667,"l":451,"s":0,"a":false},{"u":886,"l":337,"s":1,"a":false},{"u":929,"l":141,"s":0,"a":false},{"u":492,"l":135,"s":1,"a":true},{"u":555,"l":411,"s":0,"a":true},{"u":864,"l":620,"s":0,"a":false},{"u":214,"l":12,"s":1,"a":true},{"u":847,"l":42,"s":1,"a":false},{"u":766,"l":114,"s":0,"a":true},{"u":113,"l":100,"s":1,"a":true},{"u":436,"l":96,"s":1,"a":true},{"u":798,"l":770,"s":0,"a":true},{"u":585,"l":129,"s":1,"a":true},{"u":473,"l":379,"s":1,"a":false},{"u":724,"l":316,"s":1,"a":false},{"u":773,"l":633,"s":1,"a":true},{"u":596,"l":36,"s":1,"a":true},{"u":603,"l":332,"s":1,"a":false},{"u":636,"l":279,"s":0,"a":true},{"u":456,"l":112,"s":0,"a":true},{"u":300,"l":243,"s":0,"a":false},{"u":869,"l":138,"s":1,"a":true},{"u":535,"l":287,"s":1,"a":true},{"u":675,"l":206,"s":1,"a":true},{"u":354,"l":337,"s":1,"a":true},{"u":760,"l":226,"s":1,"a":false},{"u":571,"l":526,"s":0,"a":true},{"u":533,"l":193,"s":1,"a":true},{"u":798,"l":175,"s":1,"a":false},{"u":941,"l":66,"s":1,"a":false},{"u":790,"l":778,"s":1,"a":false},{"u":959,"l":626,"s":0,"a":true},{"u":464,"l":399,"s":1,"a":false},{"u":268,"l":265,"s":0,"a":true},{"u":961,"l":646,"s":0,"a":false},{"u":396,"l":370,"s":1,"a":true},{"u":665,"l":497,"s":0,"a":true},{"u":654,"l":637,"s":1,"a":true},{"u":544,"l":87,"s":1,"a":true},{"u":869,"l":839,"s":0,"a":false},{"u":273,"l":248,"s":1,"a":true},{"u":439,"l":322,"s":1,"a":false},{"u":271,"l":211,"s":1,"a":true},{"u":951,"l":190,"s":1,"a":false},{"u":946,"l":822,"s":1,"a":true},{"u":972,"l":845,"s":1,"a":true},{"u":119,"l":12,"s":0,"a":false},{"u":929,"l":125,"s":0,"a":true},{"u":600,"l":481,"s":0,"a":false},{"u":247,"l":138,"s":0,"a":false},{"u":968,"l":772,"s":0,"a":true},{"u":352,"l":325,"s":1,"a":true},{"u":585,"l":500,"s":1,"a":false},{"u":751,"l":287,"s":1,"a":false},{"u":377,"l":300,"s":0,"a":true},{"u":865,"l":131,"s":0,"a":false},{"u":919,"l":633,"s":1,"a":false},{"u":851,"l":75,"s":0,"a":false},{"u":878,"l":873,"s":1,"a":false},{"u":246,"l":189,"s":0,"a":false},{"u":535,"l":446,"s":0,"a":false},{"u":74,"l":27,"s":1,"a":true},{"u":750,"l":646,"s":1,"a":false},{"u":917,"l":277,"s":1,"a":true},{"u":888,"l":779,"s":0,"a":false},{"u":475,"l":273,"s":1,"a":true},{"u":563,"l":11,"s":1,"a":true},{"u":382,"l":173,"s":0,"a":true},{"u":725,"l":543,"s":0,"a":false},{"u":807,"l":215,"s":0,"a":true},{"u":591,"l":258,"s":1,"a":false},{"u":859,"l":579,"s":0,"a":true},{"u":253,"l":123,"s":1,"a":true},{"u":906,"l":856,"s":1,"a":true},{"u":609,"l":64,"s":1,"a":true},{"u":816,"l":227,"s":0,"a":false},{"u":875,"l":525,"s":0,"a":true},{"u":843,"l":629,"s":0,"a":false},{"u":767,"l":461,"s":0,"a":true},{"u":859,"l":652,"s":1,"a":true},{"u":769,"l":307,"s":0,"a":true},{"u":680,"l":381,"s":0,"a":true},{"u":912,"l":773,"s":1,"a":false},{"u":829,"l":565,"s":0,"a":true},{"u":942,"l":52,"s":1,"a":true},{"u":284,"l":146,"s":1,"a":true},{"u":399,"l":356,"s":0,"a":false},{"u":625,"l":585,"s":0,"a":true},{"u":896,"l":662,"s":0,"a":false},{"u":320,"l":49,"s":0,"a":true},{"u":288,"l":152,"s":1,"a":true},{"u":150,"l":61,"s":0,"a":true},{"u":329,"l":315,"s":1,"a":true},{"u":738,"l":573,"s":0,"a":false},{"u":477,"l":51,"s":1,"a":true},{"u":724,"l":46,"s":0,"a":true},{"u":835,"l":131,"s":1,"a":false},{"u":690,"l":211,"s":1,"a":true},{"u":707,"l":395,"s":0,"a":true},{"u":813,"l":217,"s":0,"a":true},{"u":128,"l":99,"s":1,"a":true},{"u":488,"l":17,"s":1,"a":true},{"u":863,"l":192,"s":0,"a":true},{"u":715,"l":669,"s":0,"a":true},{"u":628,"l":331,"s":1,"a":true},{"u":453,"l":341,"s":1,"a":true},{"u":975,"l":116,"s":0,"a":false},{"u":426,"l":342,"s":0,"a":false},{"u":526,"l":107,"s":1,"a":true},{"u":622,"l":618,"s":0,"a":false},{"u":541,"l":200,"s":0,"a":true},{"u":948,"l":60,"s":1,"a":false},{"u":540,"l":453,"s":1,"a":true},{"u":565,"l":528,"s":1,"a":true},{"u":864,"l":716,"s":1,"a":false},{"u":805,"l":584,"s":0,"a":false},{"u":967,"l":17,"s":1,"a":false},{"u":743,"l":410,"s":0,"a":true},{"u":370,"l":101,"s":1,"a":false},{"u":757,"l":377,"s":1,"a":true},{"u":979,"l":249,"s":0,"a":true},{"u":784,"l":142,"s":0,"a":true},{"u":367,"l":65,"s":1,"a":false},{"u":427,"l":34,"s":0,"a":true},{"u":641,"l":182,"s":0,"a":false},{"u":544,"l":282,"s":0,"a":true},{"u":826,"l":751,"s":1,"a":true},{"u":543,"l":324,"s":1,"a":false},{"u":713,"l":487,"s":1,"a":false},{"u":970,"l":796,"s":0,"a":true},{"u":415,"l":265,"s":1,"a":false},{"u":874,"l":440,"s":0,"a":true},{"u":671,"l":524,"s":0,"a":false},{"u":697,"l":97,"s":1,"a":false},{"u":722,"l":707,"s":0,"a":true},{"u":286,"l":139,"s":1,"a":false},{"u":911,"l":696,"s":0,"a":true},{"u":308,"l":64,"s":1,"a":true},{"u":484,"l":61,"s":0,"a":false},{"u":778,"l":553,"s":0,"a":true},{"u":843,"l":164,"s":0,"a":true},{"u":130,"l":114,"s":1,"a":false},{"u":922,"l":912,"s":1,"a":false},{"u":831,"l":420,"s":1,"a":false},{"u":588,"l":581,"s":0,"a":false},{"u":318,"l":70,"s":0,"a":true},{"u":918,"l":48,"s":0,"a":true},{"u":539,"l":322,"s":1,"a":true},{"u":437,"l":325,"s":1,"a":true},{"u":213,"l":105,"s":0,"a":true},{"u":852,"l":61,"s":0,"a":false},{"u":691,"l":641,"s":1,"a":false},{"u":202,"l":151,"s":0,"a":false},{"u":867,"l":111,"s":1,"a":false},{"u":908,"l":400,"s":0,"a":true},{"u":502,"l":145,"s":0,"a":true},{"u":762,"l":212,"s":0,"a":true},{"u":829,"l":502,"s":0,"a":true},{"u":595,"l":460,"s":1,"a":true},{"u":199,"l":57,"s":1,"a":true},{"u":204,"l":172,"s":0,"a":true},{"u":822,"l":721,"s":1,"a":true},{"u":156,"l":72,"s":1,"a":true},{"u":313,"l":276,"s":0,"a":true},{"u":420,"l":303,"s":1,"a":false},{"u":261,"l":95,"s":1,"a":false},{"u":480,"l":18,"s":0,"a":false},{"u":600,"l":563,"s":0,"a":true},{"u":960,"l":31,"s":1,"a":true},{"u":270,"l":104,"s":0,"a":true},{"u":866,"l":449,"s":1,"a":false},{"u":588,"l":6,"s":1,"a":true},{"u":671,"l":393,"s":1,"a":true},{"u":536,"l":291,"s":0,"a":false},{"u":992,"l":830,"s":0,"a":false},{"u":826,"l":699,"s":0,"a":false},{"u":887,"l":626,"s":1,"a":true},{"u":259,"l":141,"s":0,"a":true},{"u":731,"l":485,"s":1,"a":true},{"u":476,"l":159,"s":1,"a":true},{"u":759,"l":299,"s":0,"a":false},{"u":826,"l":67,"s":0,"a":true},{"u":782,"l":40,"s":0,"a":true},{"u":801,"l":377,"s":1,"a":true},{"u":454,"l":179,"s":1,"a":true},{"u":900,"l":117,"s":1,"a":false},{"u":228,"l":154,"s":1,"a":true},{"u":990,"l":811,"s":1,"a":false},{"u":522,"l":30,"s":0,"a":false},{"u":617,"l":151,"s":0,"a":true},{"u":485,"l":255,"s":0,"a":false},{"u":865,"l":8,"s":1,"a":true},{"u":803,"l":100,"s":0,"a":true},{"u":635,"l":358,"s":1,"a":true},{"u":437,"l":86,"s":0,"a":false},{"u":833,"l":575,"s":1,"a":true},{"u":213,"l":129,"s":0,"a":false},{"u":474,"l":74,"s":0,"a":true},{"u":953,"l":459,"s":0,"a":false},{"u":739,"l":401,"s":0,"a":true},{"u":992,"l":417,"s":1,"a":false},{"u":759,"l":505,"s":0,"a":false},{"u":885,"l":599,"s":0,"a":true},{"u":909,"l":790,"s":0,"a":true},{"u":829,"l":59,"s":1,"a":true},{"u":948,"l":496,"s":0,"a":false},{"u":855,"l":135,"s":1,"a":false},{"u":743,"l":8,"s":0,"a":false},{"u":554,"l":489,"s":0,"a":true},{"u":563,"l":558,"s":0,"a":false},{"u":669,"l":355,"s":0,"a":false},{"u":967,"l":642,"s":1,"a":false},{"u":972,"l":290,"s":1,"a":false},{"u":911,"l":66,"s":1,"a":true},{"u":666,"l":300,"s":0,"a":true},{"u":725,"l":145,"s":1,"a":false},{"u":937,"l":438,"s":0,"a":true},{"u":207,"l":166,"s":1,"a":true},{"u":517,"l":130,"s":0,"a":true},{"u":639,"l":199,"s":0,"a":false},{"u":770,"l":589,"s":1,"a":false},{"u":963,"l":406,"s":0,"a":true},{"u":354,"l":40,"s":0,"a":false},{"u":987,"l":181,"s":1,"a":true},{"u":618,"l":546,"s":1,"a":true},{"u":858,"l":763,"s":1,"a":false},{"u":978,"l":208,"s":1,"a":false},{"u":248,"l":142,"s":1,"a":false},{"u":919,"l":891,"s":1,"a":false},{"u":714,"l":227,"s":1,"a":true},{"u":834,"l":97,"s":1,"a":false},{"u":319,"l":279,"s":0,"a":false},{"u":876,"l":808,"s":0,"a":false},{"u":506,"l":359,"s":1,"a":true},{"u":578,"l":35,"s":0,"a":false},{"u":558,"l":521,"s":0,"a":false},{"u":531,"l":525,"s":0,"a":false},{"u":992,"l":539,"s":1,"a":false},{"u":690,"l":136,"s":1,"a":false},{"u":937,"l":927,"s":0,"a":false},{"u":270,"l":97,"s":0,"a":true},{"u":287,"l":278,"s":1,"a":false},{"u":501,"l":439,"s":1,"a":true},{"u":725,"l":428,"s":1,"a":false},{"u":809,"l":795,"s":0,"a":true},{"u":538,"l":338,"s":1,"a":true},{"u":798,"l":483,"s":0,"a":false},{"u":933,"l":541,"s":1,"a":true},{"u":730,"l":145,"s":1,"a":true},{"u":735,"l":352,"s":0,"a":false},{"u":912,"l":20,"s":1,"a":false},{"u":815,"l":30,"s":1,"a":false},{"u":880,"l":709,"s":1,"a":false},{"u":652,"l":439,"s":0,"a":true},{"u":813,"l":529,"s":1,"a":false},{"u":895,"l":3,"s":1,"a":true},{"u":964,"l":573,"s":0,"a":true},{"u":523,"l":231,"s":1,"a":false},{"u":862,"l":526,"s":1,"a":true},{"u":595,"l":514,"s":0,"a":true},{"u":724,"l":154,"s":0,"a":false},{"u":234,"l":186,"s":0,"a":true},{"u":646,"l":200,"s":0,"a":false},{"u":407,"l":306,"s":0,"a":true},{"u":863,"l":604,"s":0,"a":false},{"u":846,"l":122,"s":1,"a":true},{"u":984,"l":30,"s":0,"a":false},{"u":831,"l":74,"s":1,"a":true},{"u":704,"l":462,"s":0,"a":true},{"u":554,"l":361,"s":1,"a":true},{"u":849,"l":349,"s":0,"a":false},{"u":428,"l":163,"s":1,"a":true},{"u":821,"l":730,"s":0,"a":true},{"u":374,"l":219,"s":1,"a":true},{"u":933,"l":923,"s":1,"a":true},{"u":967,"l":590,"s":0,"a":false},{"u":700,"l":608,"s":1,"a":false},{"u":768,"l":537,"s":0,"a":false},{"u":696,"l":666,"s":0,"a":false},{"u":892,"l":480,"s":1,"a":true},{"u":606,"l":218,"s":0,"a":false},{"u":659,"l":115,"s":1,"a":false},{"u":919,"l":870,"s":0,"a":true},{"u":751,"l":393,"s":1,"a":false},{"u":650,"l":565,"s":0,"a":true},{"u":810,"l":229,"s":1,"a":false},{"u":831,"l":459,"s":1,"a":true},{"u":780,"l":76,"s":1,"a":true},{"u":485,"l":450,"s":1,"a":false},{"u":760,"l":490,"s":0,"a":true},{"u":879,"l":156,"s":0,"a":false},{"u":727,"l":281,"s":0,"a":true},{"u":420,"l":396,"s":1,"a":false},{"u":147,"l":138,"s":1,"a":true},{"u":898,"l":587,"s":1,"a":true},{"u":645,"l":495,"s":0,"a":false},{"u":296,"l":71,"s":1,"a":false},{"u":759,"l":74,"s":1,"a":true},{"u":470,"l":251,"s":1,"a":false},{"u":538,"l":54,"s":1,"a":false},{"u":822,"l":239,"s":0,"a":false},{"u":969,"l":775,"s":0,"a":true},{"u":424,"l":62,"s":1,"a":true},{"u":763,"l":347,"s":0,"a":false},{"u":426,"l":234,"s":1,"a":false},{"u":321,"l":258,"s":0,"a":false},{"u":360,"l":171,"s":1,"a":false},{"u":470,"l":378,"s":0,"a":false},{"u":774,"l":447,"s":0,"a":false},{"u":751,"l":391,"s":0,"a":false},{"u":269,"l":92,"s":0,"a":false},{"u":135,"l":58,"s":0,"a":true},{"u":625,"l":251,"s":1,"a":false},{"u":834,"l":615,"s":0,"a":true},{"u":827,"l":761,"s":1,"a":false},{"u":784,"l":52,"s":1,"a":true},{"u":863,"l":82,"s":1,"a":true},{"u":158,"l":145,"s":1,"a":false},{"u":287,"l":51,"s":1,"a":false},{"u":680,"l":576,"s":1,"a":true},{"u":822,"l":105,"s":1,"a":false},{"u":769,"l":109,"s":0,"a":true},{"u":877,"l":813,"s":0,"a":false},{"u":951,"l":935,"s":0,"a":true},{"u":973,"l":116,"s":0,"a":true},{"u":979,"l":37,"s":0,"a":false},{"u":627,"l":318,"s":1,"a":true},{"u":756,"l":706,"s":0,"a":false},{"u":742,"l":591,"s":0,"a":false},{"u":885,"l":142,"s":0,"a":true},{"u":515,"l":491,"s":1,"a":true},{"u":785,"l":580,"s":1,"a":false},{"u":756,"l":517,"s":1,"a":false},{"u":643,"l":232,"s":1,"a":true},{"u":759,"l":184,"s":0,"a":false},{"u":543,"l":126,"s":0,"a":false},{"u":980,"l":776,"s":1,"a":false},{"u":825,"l":105,"s":1,"a":true},{"u":718,"l":619,"s":0,"a":true},{"u":550,"l":513,"s":1,"a":false},{"u":589,"l":146,"s":1,"a":false},{"u":671,"l":246,"s":1,"a":false},{"u":275,"l":271,"s":1,"a":true},{"u":809,"l":157,"s":1,"a":false},{"u":937,"l":72,"s":1,"a":false},{"u":943,"l":813,"s":0,"a":true},{"u":282,"l":215,"s":1,"a":false},{"u":808,"l":364,"s":1,"a":true},{"u":975,"l":347,"s":0,"a":false},{"u":984,"l":496,"s":1,"a":false},{"u":799,"l":579,"s":1,"a":true},{"u":752,"l":106,"s":1,"a":false},{"u":474,"l":205,"s":0,"a":true},{"u":662,"l":335,"s":1,"a":true},{"u":858,"l":157,"s":0,"a":false},{"u":593,"l":14,"s":0,"a":false},{"u":649,"l":383,"s":1,"a":true},{"u":707,"l":277,"s":0,"a":true},{"u":623,"l":31,"s":1,"a":false},{"u":276,"l":129,"s":1,"a":false},{"u":862,"l":137,"s":0,"a":false},{"u":855,"l":431,"s":0,"a":false},{"u":991,"l":186,"s":1,"a":false},{"u":548,"l":293,"s":0,"a":false},{"u":837,"l":368,"s":1,"a":true},{"u":425,"l":92,"s":0,"a":false},{"u":741,"l":501,"s":0,"a":true},{"u":602,"l":32,"s":1,"a":false},{"u":929,"l":106,"s":0,"a":false},{"u":255,"l":26,"s":0,"a":false},{"u":907,"l":640,"s":1,"a":false},{"u":789,"l":528,"s":1,"a":true},{"u":968,"l":532,"s":0,"a":true},{"u":758,"l":318,"s":0,"a":true},{"u":370,"l":250,"s":1,"a":true},{"u":766,"l":581,"s":0,"a":false},{"u":401,"l":148,"s":0,"a":false},{"u":429,"l":390,"s":1,"a":false},{"u":729,"l":116,"s":0,"a":false},{"u":902,"l":230,"s":1,"a":false},{"u":836,"l":395,"s":0,"a":false},{"u":643,"l":241,"s":1,"a":true},{"u":822,"l":157,"s":0,"a":true},{"u":853,"l":488,"s":1,"a":false},{"u":612,"l":135,"s":1,"a":false},{"u":581,"l":337,"s":0,"a":false},{"u":249,"l":148,"s":0,"a":false},{"u":323,"l":205,"s":1,"a":false},{"u":925,"l":899,"s":0,"a":false},{"u":679,"l":66,"s":1,"a":false},{"u":969,"l":762,"s":1,"a":true},{"u":941,"l":881,"s":0,"a":false},{"u":967,"l":721,"s":0,"a":false},{"u":499,"l":188,"s":0,"a":false},{"u":922,"l":531,"s":1,"a":false},{"u":568,"l":97,"s":0,"a":false},{"u":894,"l":80,"s":1,"a":true},{"u":680,"l":530,"s":1,"a":false},{"u":263,"l":105,"s":0,"a":false},{"u":173,"l":124,"s":1,"a":false},{"u":608,"l":331,"s":0,"a":true},{"u":923,"l":408,"s":0,"a":false},{"u":72,"l":13,"s":1,"a":false},{"u":557,"l":258,"s":0,"a":true},{"u":611,"l":257,"s":1,"a":false},{"u":908,"l":373,"s":1,"a":true},{"u":942,"l":177,"s":1,"a":false},{"u":484,"l":320,"s":0,"a":false},{"u":973,"l":2,"s":1,"a":false},{"u":573,"l":240,"s":1,"a":true},{"u":943,"l":15,"s":0,"a":true},{"u":178,"l":61,"s":1,"a":true},{"u":667,"l":407,"s":1,"a":false},{"u":943,"l":635,"s":0,"a":false},{"u":989,"l":357,"s":1,"a":true},{"u":495,"l":185,"s":1,"a":false},{"u":905,"l":28,"s":0,"a":true},{"u":800,"l":719,"s":0,"a":false},{"u":889,"l":826,"s":0,"a":true},{"u":300,"l":41,"s":0,"a":true},{"u":695,"l":374,"s":1,"a":true},{"u":938,"l":92,"s":1,"a":true},{"u":491,"l":76,"s":0,"a":false},{"u":598,"l":180,"s":0,"a":false},{"u":254,"l":243,"s":0,"a":false},{"u":786,"l":102,"s":1,"a":false},{"u":609,"l":93,"s":0,"a":false},{"u":627,"l":395,"s":0,"a":false},{"u":758,"l":209,"s":0,"a":false},{"u":671,"l":256,"s":0,"a":true},{"u":502,"l":263,"s":1,"a":true},{"u":842,"l":840,"s":0,"a":true},{"u":986,"l":175,"s":0,"a":true},{"u":735,"l":474,"s":0,"a":true},{"u":824,"l":133,"s":0,"a":false},{"u":507,"l":152,"s":1,"a":false},{"u":649,"l":110,"s":1,"a":true},{"u":835,"l":281,"s":1,"a":false},{"u":568,"l":151,"s":0,"a":true},{"u":401,"l":400,"s":0,"a":false},{"u":588,"l":327,"s":1,"a":true},{"u":894,"l":772,"s":1,"a":true},{"u":978,"l":211,"s":0,"a":false},{"u":764,"l":613,"s":1,"a":true},{"u":981,"l":553,"s":0,"a":true},{"u":447,"l":37,"s":0,"a":false},{"u":796,"l":259,"s":1,"a":true},{"u":973,"l":806,"s":1,"a":false},{"u":985,"l":373,"s":1,"a":false},{"u":971,"l":197,"s":0,"a":true},{"u":594,"l":431,"s":0,"a":true},{"u":628,"l":250,"s":1,"a":false},{"u":725,"l":13,"s":1,"a":false},{"u":330,"l":261,"s":1,"a":true},{"u":805,"l":447,"s":1,"a":false},{"u":843,"l":137,"s":0,"a":false},{"u":580,"l":510,"s":0,"a":true},{"u":710,"l":417,"s":0,"a":false},{"u":829,"l":157,"s":1,"a":true},{"u":439,"l":368,"s":0,"a":true},{"u":815,"l":749,"s":1,"a":false},{"u":880,"l":658,"s":0,"a":true},{"u":971,"l":775,"s":0,"a":false},{"u":953,"l":90,"s":1,"a":true},{"u":966,"l":53,"s":1,"a":false},{"u":928,"l":481,"s":0,"a":false},{"u":952,"l":332,"s":1,"a":true},{"u":122,"l":114,"s":0,"a":false},{"u":587,"l":60,"s":0,"a":false},{"u":90,"l":18,"s":0,"a":true},{"u":627,"l":286,"s":0,"a":false},{"u":918,"l":450,"s":1,"a":false},{"u":876,"l":432,"s":0,"a":true},{"u":740,"l":387,"s":1,"a":false},{"u":987,"l":548,"s":0,"a":false},{"u":854,"l":204,"s":1,"a":true},{"u":537,"l":225,"s":0,"a":true},{"u":865,"l":340,"s":1,"a":false},{"u":243,"l":74,"s":1,"a":true},{"u":763,"l":685,"s":0,"a":true},{"u":209,"l":48,"s":0,"a":true},{"u":481,"l":206,"s":1,"a":false},{"u":872,"l":555,"s":0,"a":true},{"u":971,"l":194,"s":1,"a":true},{"u":391,"l":186,"s":0,"a":false},{"u":936,"l":873,"s":0,"a":true},{"u":220,"l":107,"s":0,"a":true},{"u":420,"l":160,"s":1,"a":true},{"u":711,"l":404,"s":0,"a":false},{"u":917,"l":166,"s":1,"a":true},{"u":440,"l":124,"s":0,"a":true},{"u":814,"l":372,"s":1,"a":false},{"u":616,"l":561,"s":0,"a":true},{"u":446,"l":203,"s":1,"a":true},{"u":443,"l":374,"s":1,"a":false},{"u":871,"l":594,"s":0,"a":false},{"u":897,"l":422,"s":0,"a":true},{"u":740,"l":156,"s":0,"a":true},{"u":374,"l":367,"s":0,"a":false},{"u":619,"l":517,"s":1,"a":true},{"u":612,"l":185,"s":0,"a":false},{"u":246,"l":168,"s":1,"a":true},{"u":985,"l":426,"s":1,"a":true},{"u":931,"l":79,"s":0,"a":false},{"u":296,"l":225,"s":1,"a":false},{"u":716,"l":532,"s":0,"a":true},{"u":864,"l":68,"s":1,"a":false},{"u":251,"l":135,"s":0,"a":true},{"u":997,"l":712,"s":0,"a":false},{"u":819,"l":766,"s":0,"a":true},{"u":949,"l":872,"s":0,"a":true},{"u":984,"l":698,"s":0,"a":true},{"u":602,"l":140,"s":0,"a":true},{"u":854,"l":473,"s":0,"a":false},{"u":408,"l":119,"s":1,"a":false},{"u":899,"l":840,"s":0,"a":false},{"u":860,"l":377,"s":0,"a":true},{"u":875,"l":285,"s":1,"a":true},{"u":883,"l":215,"s":1,"a":true},{"u":726,"l":457,"s":0,"a":true},{"u":826,"l":124,"s":0,"a":true},{"u":323,"l":86,"s":1,"a":true},{"u":362,"l":123,"s":0,"a":true},{"u":997,"l":491,"s":0,"a":true},{"u":883,"l":92,"s":1,"a":false},{"u":576,"l":313,"s":0,"a":true},{"u":698,"l":355,"s":1,"a":true},{"u":591,"l":339,"s":0,"a":false},{"u":809,"l":744,"s":1,"a":false},{"u":985,"l":154,"s":1,"a":false},{"u":402,"l":296,"s":1,"a":false},{"u":419,"l":170,"s":0,"a":false},{"u":742,"l":125,"s":0,"a":false},{"u":382,"l":379,"s":0,"a":false},{"u":432,"l":126,"s":1,"a":false},{"u":763,"l":8,"s":0,"a":true},{"u":893,"l":81,"s":1,"a":true},{"u":926,"l":715,"s":0,"a":false},{"u":878,"l":240,"s":1,"a":true},{"u":801,"l":472,"s":0,"a":false},{"u":574,"l":304,"s":1,"a":false},{"u":813,"l":676,"s":0,"a":true},{"u":369,"l":143,"s":0,"a":true},{"u":965,"l":155,"s":0,"a":true},{"u":833,"l":357,"s":0,"a":false},{"u":949,"l":161,"s":1,"a":true},{"u":987,"l":240,"s":0,"a":true},{"u":988,"l":610,"s":1,"a":true},{"u":606,"l":224,"s":1,"a":true},{"u":557,"l":6,"s":1,"a":true},{"u":930,"l":149,"s":1,"a":true},{"u":529,"l":430,"s":1,"a":false},{"u":651,"l":370,"s":0,"a":true},{"u":606,"l":74,"s":0,"a":false},{"u":938,"l":904,"s":0,"a":true},{"u":789,"l":306,"s":1,"a":true},{"u":781,"l":23,"s":0,"a":false},{"u":418,"l":380,"s":0,"a":false},{"u":791,"l":54,"s":1,"a":true},{"u":989,"l":232,"s":1,"a":false},{"u":987,"l":142,"s":1,"a":true},{"u":773,"l":82,"s":1,"a":false},{"u":746,"l":232,"s":1,"a":true},{"u":387,"l":86,"s":0,"a":true},{"u":734,"l":722,"s":1,"a":false},{"u":950,"l":822,"s":0,"a":true},{"u":343,"l":214,"s":1,"a":true},{"u":660,"l":149,"s":1,"a":true},{"u":798,"l":129,"s":1,"a":false},{"u":307,"l":103,"s":1,"a":false},{"u":697,"l":459,"s":0,"a":false},{"u":901,"l":812,"s":1,"a":true},{"u":270,"l":136,"s":0,"a":true},{"u":501,"l":384,"s":0,"a":false},{"u":882,"l":393,"s":0,"a":false},{"u":979,"l":237,"s":0,"a":false},{"u":622,"l":324,"s":1,"a":true},{"u":661,"l":110,"s":1,"a":true},{"u":607,"l":314,"s":1,"a":true},{"u":718,"l":662,"s":1,"a":false},{"u":761,"l":685,"s":0,"a":false},{"u":427,"l":328,"s":0,"a":false},{"u":931,"l":246,"s":0,"a":false},{"u":277,"l":19,"s":1,"a":false},{"u":544,"l":364,"s":1,"a":false},{"u":166,"l":102,"s":1,"a":true},{"u":805,"l":685,"s":1,"a":false},{"u":879,"l":7,"s":1,"a":true},{"u":214,"l":193,"s":0,"a":true},{"u":127,"l":102,"s":0,"a":true},{"u":470,"l":289,"s":1,"a":true},{"u":633,"l":297,"s":1,"a":false},{"u":611,"l":569,"s":0,"a":true},{"u":719,"l":419,"s":1,"a":true},{"u":845,"l":737,"s":0,"a":false},{"u":877,"l":292,"s":0,"a":false},{"u":704,"l":621,"s":0,"a":false},{"u":872,"l":479,"s":1,"a":true},{"u":856,"l":378,"s":1,"a":false},{"u":817,"l":733,"s":1,"a":true},{"u":319,"l":49,"s":1,"a":true},{"u":374,"l":293,"s":1,"a":false},{"u":984,"l":444,"s":1,"a":true},{"u":550,"l":55,"s":0,"a":false},{"u":554,"l":450,"s":1,"a":true},{"u":780,"l":213,"s":1,"a":false},{"u":960,"l":677,"s":1,"a":true},{"u":725,"l":80,"s":1,"a":false},{"u":983,"l":494,"s":0,"a":false},{"u":613,"l":318,"s":0,"a":true},{"u":360,"l":217,"s":1,"a":true},{"u":592,"l":468,"s":1,"a":false},{"u":975,"l":720,"s":1,"a":false},{"u":838,"l":36,"s":0,"a":true},{"u":451,"l":54,"s":1,"a":true},{"u":413,"l":96,"s":0,"a":true},{"u":404,"l":377,"s":0,"a":true},{"u":671,"l":466,"s":0,"a":true},{"u":511,"l":375,"s":1,"a":true},{"u":846,"l":244,"s":1,"a":true},{"u":869,"l":151,"s":1,"a":true},{"u":867,"l":861,"s":0,"a":true},{"u":392,"l":352,"s":0,"a":false},{"u":823,"l":122,"s":0,"a":false},{"u":398,"l":22,"s":1,"a":false},{"u":692,"l":597,"s":0,"a":true},{"u":827,"l":20,"s":0,"a":true},{"u":593,"l":220,"s":1,"a":true},{"u":983,"l":706,"s":0,"a":false},{"u":930,"l":648,"s":0,"a":true},{"u":440,"l":82,"s":1,"a":true},{"u":856,"l":283,"s":0,"a":true},{"u":499,"l":22,"s":1,"a":false},{"u":939,"l":28,"s":1,"a":true},{"u":546,"l":535,"s":0,"a":true},{"u":667,"l":243,"s":1,"a":false},{"u":976,"l":779,"s":1,"a":false},{"u":459,"l":115,"s":1,"a":false},{"u":253,"l":208,"s":1,"a":true},{"u":276,"l":111,"s":0,"a":false},{"u":868,"l":272,"s":1,"a":true},{"u":207,"l":51,"s":1,"a":false},{"u":950,"l":688,"s":0,"a":true},{"u":890,"l":198,"s":0,"a":true},{"u":408,"l":9,"s":0,"a":false},{"u":470,"l":90,"s":1,"a":true},{"u":800,"l":275,"s":1,"a":true},{"u":167,"l":15,"s":0,"a":false},{"u":328,"l":139,"s":1,"a":false},{"u":998,"l":364,"s":0,"a":false},{"u":429,"l":127,"s":1,"a":false},{"u":767,"l":129,"s":1,"a":true},{"u":889,"l":679,"s":0,"a":true},{"u":235,"l":163,"s":1,"a":false},{"u":766,"l":680,"s":1,"a":true},{"u":522,"l":357,"s":0,"a":true},{"u":208,"l":78,"s":0,"a":false},{"u":468,"l":343,"s":0,"a":true},{"u":811,"l":184,"s":1,"a":true},{"u":524,"l":357,"s":1,"a":true},{"u":469,"l":52,"s":1,"a":false},{"u":965,"l":291,"s":0,"a":true},{"u":777,"l":194,"s":0,"a":false},{"u":295,"l":63,"s":1,"a":true},{"u":911,"l":577,"s":1,"a":true},{"u":874,"l":521,"s":0,"a":true},{"u":681,"l":236,"s":0,"a":false},{"u":729,"l":539,"s":1,"a":false},{"u":758,"l":609,"s":1,"a":false},{"u":398,"l":317,"s":1,"a":true},{"u":891,"l":572,"s":1,"a":false},{"u":390,"l":125,"s":1,"a":true},{"u":299,"l":200,"s":0,"a":false},{"u":712,"l":669,"s":0,"a":false},{"u":523,"l":185,"s":1,"a":true},{"u":629,"l":456,"s":0,"a":false},{"u":650,"l":597,"s":1,"a":true},{"u":832,"l":140,"s":0,"a":false},{"u":960,"l":411,"s":1,"a":true},{"u":854,"l":365,"s":1,"a":false},{"u":828,"l":813,"s":1,"a":true},{"u":819,"l":645,"s":1,"a":true},{"u":559,"l":478,"s":1,"a":false},{"u":281,"l":278,"s":0,"a":false},{"u":783,"l":141,"s":0,"a":false},{"u":789,"l":654,"s":1,"a":false},{"u":514,"l":61,"s":1,"a":true},{"u":306,"l":224,"s":0,"a":false},{"u":738,"l":96,"s":1,"a":false},{"u":583,"l":106,"s":1,"a":true},{"u":746,"l":117,"s":1,"a":false},{"u":705,"l":298,"s":0,"a":true},{"u":995,"l":685,"s":1,"a":false},{"u":913,"l":880,"s":0,"a":false},{"u":617,"l":594,"s":0,"a":true},{"u":185,"l":179,"s":1,"a":true},{"u":361,"l":189,"s":1,"a":true},{"u":707,"l":393,"s":0,"a":true},{"u":284,"l":90,"s":1,"a":true},{"u":457,"l":79,"s":0,"a":true},{"u":735,"l":644,"s":0,"a":true},{"u":811,"l":285,"s":1,"a":true},{"u":812,"l":355,"s":0,"a":false},{"u":850,"l":127,"s":0,"a":true},{"u":542,"l":83,"s":0,"a":true},{"u":255,"l":45,"s":1,"a":true},{"u":475,"l":215,"s":1,"a":true},{"u":481,"l":204,"s":0,"a":true},{"u":101,"l":65,"s":0,"a":true},{"u":966,"l":874,"s":1,"a":true},{"u":848,"l":550,"s":0,"a":false},{"u":524,"l":505,"s":0,"a":false},{"u":832,"l":342,"s":1,"a":false},{"u":500,"l":184,"s":0,"a":false},{"u":773,"l":726,"s":1,"a":false},{"u":444,"l":228,"s":1,"a":true},{"u":425,"l":382,"s":0,"a":true},{"u":963,"l":748,"s":0,"a":true},{"u":977,"l":243,"s":0,"a":false},{"u":830,"l":80,"s":0,"a":false},{"u":880,"l":143,"s":1,"a":false},{"u":813,"l":350,"s":1,"a":true},{"u":920,"l":47,"s":0,"a":false},{"u":467,"l":288,"s":0,"a":false},{"u":778,"l":595,"s":0,"a":false},{"u":806,"l":271,"s":0,"a":true},{"u":830,"l":599,"s":0,"a":true},{"u":485,"l":120,"s":0,"a":false},{"u":574,"l":441,"s":1,"a":true},{"u":649,"l":568,"s":0,"a":false},{"u":786,"l":603,"s":0,"a":true},{"u":532,"l":180,"s":1,"a":true},{"u":677,"l":30,"s":1,"a":true},{"u":634,"l":136,"s":1,"a":false},{"u":574,"l":13,"s":0,"a":false},{"u":547,"l":391,"s":1,"a":false},{"u":634,"l":297,"s":1,"a":false},{"u":159,"l":29,"s":0,"a":false},{"u":138,"l":23,"s":0,"a":true},{"u":980,"l":247,"s":0,"a":false},{"u":343,"l":142,"s":0,"a":false},{"u":563,"l":375,"s":1,"a":true},{"u":938,"l":859,"s":1,"a":true},{"u":603,"l":74,"s":0,"a":false},{"u":543,"l":425,"s":1,"a":false},{"u":461,"l":233,"s":1,"a":true},{"u":831,"l":84,"s":1,"a":true},{"u":855,"l":305,"s":0,"a":false},{"u":592,"l":302,"s":0,"a":false},{"u":976,"l":677,"s":0,"a":true},{"u":136,"l":71,"s":0,"a":true},{"u":633,"l":184,"s":1,"a":false},{"u":889,"l":621,"s":1,"a":true},{"u":944,"l":543,"s":0,"a":true},{"u":619,"l":605,"s":0,"a":false},{"u":612,"l":365,"s":1,"a":true},{"u":291,"l":272,"s":0,"a":true},{"u":382,"l":151,"s":0,"a":false},{"u":738,"l":104,"s":1,"a":false},{"u":903,"l":316,"s":1,"a":true},{"u":220,"l":32,"s":1,"a":false},{"u":720,"l":139,"s":1,"a":false},{"u":483,"l":146,"s":1,"a":true},{"u":206,"l":53,"s":1,"a":false},{"u":733,"l":569,"s":1,"a":true},{"u":715,"l":181,"s":1,"a":true},{"u":873,"l":605,"s":0,"a":false},{"u":812,"l":440,"s":1,"a":true},{"u":358,"l":257,"s":0,"a":true},{"u":759,"l":285,"s":0,"a":false},{"u":619,"l":597,"s":0,"a":false},{"u":882,"l":83,"s":0,"a":false},{"u":667,"l":474,"s":1,"a":true},{"u":238,"l":44,"s":0,"a":false},{"u":727,"l":571,"s":0,"a":false},{"u":402,"l":235,"s":1,"a":false},{"u":453,"l":393,"s":0,"a":true},{"u":700,"l":86,"s":0,"a":true},{"u":930,"l":91,"s":1,"a":true},{"u":899,"l":589,"s":1,"a":false},{"u":858,"l":26,"s":1,"a":true},{"u":809,"l":96,"s":1,"a":true},{"u":800,"l":112,"s":0,"a":true},{"u":997,"l":762,"s":0,"a":true},{"u":814,"l":507,"s":1,"a":false},{"u":601,"l":424,"s":0,"a":false},{"u":927,"l":405,"s":0,"a":true},{"u":713,"l":637,"s":1,"a":true},{"u":799,"l":447,"s":0,"a":false},{"u":623,"l":23,"s":0,"a":false},{"u":874,"l":334,"s":1,"a":true},{"u":934,"l":570,"s":1,"a":false},{"u":598,"l":419,"s":1,"a":false},{"u":891,"l":521,"s":0,"a":false},{"u":481,"l":182,"s":0,"a":true},{"u":595,"l":507,"s":1,"a":true},{"u":678,"l":621,"s":1,"a":false},{"u":509,"l":41,"s":0,"a":false},{"u":627,"l":67,"s":1,"a":false},{"u":947,"l":858,"s":1,"a":false},{"u":797,"l":475,"s":0,"a":true},{"u":934,"l":434,"s":0,"a":true},{"u":710,"l":371,"s":1,"a":false},{"u":756,"l":459,"s":0,"a":false},{"u":226,"l":162,"s":1,"a":false},{"u":460,"l":313,"s":1,"a":false},{"u":326,"l":132,"s":1,"a":false},{"u":937,"l":249,"s":1,"a":false},{"u":968,"l":232,"s":1,"a":true},{"u":998,"l":358,"s":0,"a":false},{"u":857,"l":357,"s":1,"a":false},{"u":385,"l":357,"s":1,"a":true},{"u":431,"l":284,"s":1,"a":false},{"u":136,"l":100,"s":1,"a":true},{"u":525,"l":13,"s":0,"a":false},{"u":817,"l":127,"s":1,"a":true},{"u":956,"l":667,"s":1,"a":true},{"u":972,"l":21,"s":0,"a":false},{"u":658,"l":294,"s":1,"a":false},{"u":872,"l":368,"s":0,"a":false},{"u":976,"l":750,"s":0,"a":false},{"u":354,"l":283,"s":1,"a":true},{"u":952,"l":862,"s":0,"a":true},{"u":297,"l":117,"s":1,"a":true},{"u":380,"l":216,"s":0,"a":false},{"u":571,"l":469,"s":1,"a":false},{"u":360,"l":99,"s":0,"a":false},{"u":996,"l":276,"s":1,"a":false},{"u":960,"l":457,"s":1,"a":false},{"u":942,"l":937,"s":1,"a":false},{"u":833,"l":568,"s":0,"a":false},{"u":754,"l":383,"s":0,"a":false},{"u":931,"l":734,"s":0,"a":true},{"u":757,"l":564,"s":0,"a":true},{"u":175,"l":13,"s":1,"a":true},{"u":434,"l":85,"s":1,"a":false},{"u":673,"l":541,"s":1,"a":false},{"u":948,"l":620,"s":0,"a":true},{"u":807,"l":196,"s":0,"a":true},{"u":406,"l":331,"s":1,"a":true},{"u":784,"l":607,"s":1,"a":true},{"u":670,"l":232,"s":1,"a":true},{"u":319,"l":124,"s":0,"a":false},{"u":999,"l":829,"s":1,"a":true},{"u":955,"l":567,"s":0,"a":true},{"u":358,"l":161,"s":0,"a":true},{"u":934,"l":586,"s":0,"a":false},{"u":482,"l":191,"s":0,"a":false},{"u":934,"l":816,"s":0,"a":false},{"u":103,"l":37,"s":1,"a":false},{"u":523,"l":88,"s":1,"a":true},{"u":615,"l":345,"s":0,"a":false},{"u":321,"l":63,"s":0,"a":false},{"u":896,"l":614,"s":1,"a":false},{"u":601,"l":46,"s":0,"a":false},{"u":405,"l":259,"s":0,"a":true},{"u":122,"l":51,"s":0,"a":false},{"u":983,"l":542,"s":0,"a":true},{"u":624,"l":506,"s":1,"a":false},{"u":698,"l":436,"s":0,"a":true},{"u":950,"l":413,"s":0,"a":true},{"u":307,"l":167,"s":1,"a":true},{"u":598,"l":133,"s":0,"a":false},{"u":946,"l":840,"s":1,"a":false},{"u":737,"l":449,"s":0,"a":false},{"u":622,"l":14,"s":0,"a":false},{"u":717,"l":89,"s":1,"a":false},{"u":783,"l":324,"s":0,"a":false},{"u":487,"l":359,"s":1,"a":true},{"u":898,"l":459,"s":1,"a":false},{"u":660,"l":639,"s":1,"a":false},{"u":851,"l":673,"s":0,"a":true},{"u":813,"l":727,"s":1,"a":false},{"u":997,"l":526,"s":0,"a":true},{"u":747,"l":205,"s":0,"a":false},{"u":537,"l":405,"s":1,"a":true},{"u":341,"l":239,"s":0,"a":false},{"u":692,"l":166,"s":1,"a":false},{"u":951,"l":211,"s":1,"a":true},{"u":683,"l":64,"s":0,"a":false},{"u":385,"l":218,"s":0,"a":true},{"u":975,"l":693,"s":0,"a":false},{"u":548,"l":337,"s":0,"a":true},{"u":941,"l":824,"s":1,"a":false},{"u":991,"l":778,"s":0,"a":false},{"u":533,"l":137,"s":1,"a":true},{"u":100,"l":62,"s":1,"a":false},{"u":624,"l":18,"s":1,"a":true},{"u":987,"l":219,"s":1,"a":true},{"u":562,"l":337,"s":0,"a":true},{"u":521,"l":163,"s":0,"a":true},{"u":550,"l":324,"s":0,"a":true},{"u":500,"l":197,"s":1,"a":false},{"u":758,"l":406,"s":0,"a":true},{"u":108,"l":94,"s":0,"a":true},{"u":858,"l":201,"s":0,"a":false},{"u":415,"l":322,"s":0,"a":false},{"u":748,"l":510,"s":1,"a":true},{"u":975,"l":260,"s":0,"a":false},{"u":986,"l":975,"s":0,"a":false},{"u":150,"l":98,"s":1,"a":true},{"u":999,"l":872,"s":0,"a":false},{"u":998,"l":520,"s":0,"a":false},{"u":905,"l":904,"s":1,"a":false},{"u":994,"l":969,"s":0,"a":false},{"u":302,"l":244,"s":1,"a":false},{"u":218,"l":215,"s":1,"a":true},{"u":312,"l":232,"s":0,"a":false},{"u":634,"l":563,"s":0,"a":true},{"u":799,"l":756,"s":0,"a":false},{"u":723,"l":596,"s":1,"a":true},{"u":895,"l":278,"s":0,"a":false},{"u":164,"l":109,"s":0,"a":true},{"u":796,"l":298,"s":1,"a":true},{"u":353,"l":28,"s":0,"a":false},{"u":210,"l":84,"s":0,"a":false},{"u":740,"l":70,"s":0,"a":true},{"u":252,"l":69,"s":0,"a":true},{"u":276,"l":209,"s":0,"a":true},{"u":536,"l":122,"s":0,"a":true},{"u":388,"l":339,"s":0,"a":false},{"u":628,"l":499,"s":0,"a":false},{"u":474,"l":188,"s":0,"a":true},{"u":531,"l":291,"s":0,"a":true},{"u":711,"l":397,"s":1,"a":false},{"u":903,"l":653,"s":1,"a":false},{"u":453,"l":363,"s":0,"a":true},{"u":290,"l":148,"s":0,"a":true},{"u":577,"l":489,"s":0,"a":false},{"u":949,"l":742,"s":0,"a":false},{"u":902,"l":898,"s":1,"a":false},{"u":803,"l":20,"s":0,"a":false},{"u":930,"l":810,"s":1,"a":true},{"u":812,"l":137,"s":0,"a":false},{"u":886,"l":772,"s":0,"a":true},{"u":986,"l":595,"s":0,"a":false},{"u":668,"l":58,"s":1,"a":true},{"u":943,"l":93,"s":1,"a":true},{"u":303,"l":165,"s":0,"a":true},{"u":691,"l":482,"s":0,"a":true},{"u":792,"l":685,"s":0,"a":true},{"u":690,"l":614,"s":0,"a":true},{"u":668,"l":591,"s":1,"a":true},{"u":572,"l":354,"s":1,"a":false},{"u":938,"l":420,"s":1,"a":true},{"u":981,"l":319,"s":0,"a":false},{"u":297,"l":293,"s":0,"a":false},{"u":960,"l":159,"s":1,"a":true},{"u":983,"l":914,"s":1,"a":true},{"u":809,"l":750,"s":1,"a":true},{"u":674,"l":241,"s":0,"a":true},{"u":864,"l":65,"s":1,"a":false},{"u":893,"l":411,"s":1,"a":true},{"u":973,"l":847,"s":1,"a":true},{"u":502,"l":109,"s":1,"a":false},{"u":890,"l":91,"s":0,"a":true},{"u":962,"l":386,"s":0,"a":true},{"u":812,"l":638,"s":0,"a":false},{"u":867,"l":56,"s":1,"a":false},{"u":510,"l":240,"s":0,"a":false},{"u":946,"l":917,"s":1,"a":true},{"u":665,"l":320,"s":1,"a":true},{"u":242,"l":119,"s":1,"a":false},{"u":518,"l":102,"s":1,"a":false},{"u":298,"l":57,"s":0,"a":true},{"u":936,"l":96,"s":1,"a":true},{"u":622,"l":59,"s":1,"a":true},{"u":374,"l":231,"s":1,"a":false},{"u":743,"l":717,"s":0,"a":true},{"u":758,"l":574,"s":0,"a":false},{"u":971,"l":909,"s":1,"a":true},{"u":972,"l":502,"s":1,"a":true},{"u":917,"l":201,"s":0,"a":true},{"u":988,"l":507,"s":1,"a":true},{"u":841,"l":792,"s":0,"a":false},{"u":612,"l":479,"s":0,"a":true},{"u":952,"l":235,"s":0,"a":false},{"u":979,"l":485,"s":1,"a":false},{"u":731,"l":532,"s":0,"a":false},{"u":703,"l":165,"s":1,"a":true},{"u":944,"l":369,"s":1,"a":false},{"u":786,"l":465,"s":1,"a":false},{"u":731,"l":131,"s":0,"a":false},{"u":381,"l":115,"s":0,"a":true},{"u":474,"l":102,"s":0,"a":true},{"u":619,"l":88,"s":1,"a":false},{"u":669,"l":503,"s":1,"a":false},{"u":32,"l":24,"s":1,"a":false},{"u":271,"l":167,"s":1,"a":true},{"u":850,"l":571,"s":0,"a":false},{"u":423,"l":369,"s":1,"a":false},{"u":856,"l":335,"s":0,"a":false},{"u":913,"l":242,"s":1,"a":true},{"u":668,"l":280,"s":0,"a":true},{"u":329,"l":138,"s":1,"a":false},{"u":737,"l":127,"s":0,"a":true},{"u":885,"l":329,"s":1,"a":true},{"u":480,"l":192,"s":0,"a":false},{"u":613,"l":401,"s":1,"a":true},{"u":690,"l":567,"s":0,"a":true},{"u":408,"l":374,"s":0,"a":true},{"u":527,"l":200,"s":0,"a":true},{"u":658,"l":253,"s":0,"a":true},{"u":605,"l":333,"s":0,"a":true},{"u":713,"l":646,"s":1,"a":false},{"u":382,"l":61,"s":1,"a":false},{"u":752,"l":628,"s":1,"a":false},{"u":860,"l":93,"s":0,"a":true},{"u":801,"l":106,"s":0,"a":true},{"u":452,"l":87,"s":0,"a":true},{"u":639,"l":339,"s":1,"a":true},{"u":770,"l":293,"s":0,"a":false},{"u":582,"l":382,"s":0,"a":true},{"u":516,"l":484,"s":0,"a":false},{"u":965,"l":666,"s":1,"a":false},{"u":517,"l":200,"s":1,"a":false},{"u":950,"l":21,"s":0,"a":false},{"u":906,"l":154,"s":0,"a":true},{"u":553,"l":137,"s":1,"a":false},{"u":941,"l":273,"s":1,"a":false},{"u":488,"l":312,"s":0,"a":false},{"u":923,"l":690,"s":0,"a":true},{"u":723,"l":279,"s":1,"a":false},{"u":893,"l":189,"s":1,"a":true},{"u":816,"l":256,"s":1,"a":false},{"u":429,"l":135,"s":1,"a":true},{"u":588,"l":30,"s":0,"a":false},{"u":574,"l":19,"s":1,"a":true},{"u":694,"l":45,"s":1,"a":false},{"u":664,"l":531,"s":1,"a":true},{"u":479,"l":23,"s":0,"a":false},{"u":593,"l":341,"s":0,"a":true},{"u":365,"l":255,"s":0,"a":true},{"u":966,"l":10,"s":1,"a":false},{"u":537,"l":281,"s":0,"a":true},{"u":949,"l":627,"s":0,"a":false},{"u":836,"l":272,"s":0,"a":true},{"u":273,"l":112,"s":1,"a":false},{"u":622,"l":415,"s":0,"a":true},{"u":698,"l":94,"s":1,"a":true},{"u":116,"l":47,"s":1,"a":false},{"u":460,"l":72,"s":0,"a":false},{"u":696,"l":546,"s":1,"a":true},{"u":873,"l":42,"s":0,"a":true},{"u":628,"l":479,"s":0,"a":false},{"u":564,"l":361,"s":0,"a":true},{"u":627,"l":116,"s":1,"a":false},{"u":308,"l":141,"s":1,"a":true},{"u":342,"l":12,"s":0,"a":false},{"u":741,"l":451,"s":1,"a":false},{"u":361,"l":238,"s":0,"a":true},{"u":938,"l":498,"s":0,"a":true},{"u":716,"l":115,"s":1,"a":true},{"u":701,"l":480,"s":0,"a":true},{"u":904,"l":672,"s":1,"a":false},{"u":991,"l":217,"s":1,"a":true},{"u":978,"l":145,"s":1,"a":true},{"u":371,"l":150,"s":0,"a":true},{"u":945,"l":796,"s":1,"a":true},{"u":706,"l":371,"s":0,"a":true},{"u":409,"l":1,"s":1,"a":false},{"u":871,"l":458,"s":1,"a":false},{"u":862,"l":210,"s":1,"a":true},{"u":891,"l":447,"s":1,"a":true},{"u":833,"l":93,"s":0,"a":true},{"u":640,"l":23,"s":0,"a":false},{"u":181,"l":84,"s":1,"a":true},{"u":573,"l":177,"s":1,"a":true},{"u":772,"l":589,"s":1,"a":false},{"u":820,"l":726,"s":0,"a":false},{"u":639,"l":52,"s":0,"a":false},{"u":687,"l":330,"s":0,"a":true},{"u":347,"l":137,"s":1,"a":false},{"u":693,"l":292,"s":0,"a":false},{"u":803,"l":446,"s":1,"a":false},{"u":935,"l":409,"s":1,"a":true},{"u":590,"l":192,"s":0,"a":true},{"u":524,"l":166,"s":1,"a":true},{"u":418,"l":12,"s":0,"a":true},{"u":248,"l":53,"s":0,"a":false},{"u":680,"l":40,"s":1,"a":false},{"u":588,"l":189,"s":1,"a":true},{"u":116,"l":84,"s":0,"a":false},{"u":380,"l":270,"s":0,"a":true},{"u":987,"l":476,"s":0,"a":true},{"u":315,"l":223,"s":1,"a":true},{"u":365,"l":303,"s":0,"a":true},{"u":950,"l":656,"s":1,"a":false},{"u":167,"l":1,"s":0,"a":true},{"u":980,"l":70,"s":1,"a":false},{"u":975,"l":457,"s":0,"a":false},{"u":903,"l":757,"s":1,"a":true},{"u":893,"l":604,"s":0,"a":true},{"u":655,"l":84,"s":0,"a":true},{"u":931,"l":913,"s":0,"a":true},{"u":377,"l":273,"s":0,"a":false},{"u":447,"l":375,"s":0,"a":true},{"u":396,"l":287,"s":0,"a":true},{"u":671,"l":440,"s":1,"a":false},{"u":877,"l":108,"s":0,"a":false},{"u":965,"l":606,"s":1,"a":true},{"u":564,"l":470,"s":1,"a":true},{"u":182,"l":114,"s":1,"a":false},{"u":779,"l":700,"s":0,"a":true},{"u":622,"l":56,"s":1,"a":false},{"u":11,"l":4,"s":1,"a":true},{"u":970,"l":827,"s":1,"a":false},{"u":854,"l":389,"s":1,"a":true},{"u":722,"l":285,"s":1,"a":true},{"u":954,"l":245,"s":1,"a":false},{"u":963,"l":61,"s":0,"a":false},{"u":790,"l":772,"s":1,"a":true},{"u":145,"l":57,"s":1,"a":false},{"u":705,"l":252,"s":0,"a":false},{"u":949,"l":251,"s":0,"a":false},{"u":716,"l":378,"s":1,"a":false},{"u":857,"l":432,"s":1,"a":false},{"u":98,"l":52,"s":0,"a":true},{"u":819,"l":364,"s":0,"a":true},{"u":984,"l":236,"s":0,"a":true},{"u":861,"l":535,"s":0,"a":true},{"u":860,"l":169,"s":0,"a":true},{"u":557,"l":479,"s":1,"a":false},{"u":955,"l":466,"s":1,"a":false},{"u":529,"l":28,"s":0,"a":false},{"u":410,"l":70,"s":1,"a":false},{"u":947,"l":14,"s":0,"a":false},{"u":856,"l":303,"s":1,"a":false},{"u":815,"l":303,"s":1,"a":true},{"u":587,"l":346,"s":1,"a":false},{"u":710,"l":320,"s":0,"a":false},{"u":946,"l":722,"s":0,"a":true},{"u":972,"l":331,"s":1,"a":true},{"u":498,"l":29,"s":0,"a":true},{"u":584,"l":149,"s":1,"a":false},{"u":799,"l":234,"s":0,"a":false},{"u":513,"l":195,"s":0,"a":true},{"u":873,"l":187,"s":1,"a":true},{"u":954,"l":801,"s":1,"a":false},{"u":335,"l":195,"s":0,"a":false},{"u":806,"l":797,"s":0,"a":true},{"u":840,"l":143,"s":0,"a":true},{"u":946,"l":919,"s":1,"a":true},{"u":958,"l":575,"s":1,"a":false},{"u":859,"l":64,"s":1,"a":false},{"u":755,"l":485,"s":0,"a":false},{"u":286,"l":252,"s":0,"a":true},{"u":591,"l":413,"s":1,"a":false},{"u":881,"l":309,"s":0,"a":false},{"u":680,"l":99,"s":0,"a":true},{"u":865,"l":150,"s":0,"a":false},{"u":935,"l":492,"s":0,"a":false},{"u":896,"l":645,"s":1,"a":false},{"u":431,"l":174,"s":0,"a":false},{"u":962,"l":666,"s":0,"a":true},{"u":819,"l":194,"s":1,"a":false},{"u":619,"l":210,"s":1,"a":true},{"u":312,"l":230,"s":0,"a":false},{"u":747,"l":138,"s":0,"a":true},{"u":850,"l":835,"s":0,"a":false},{"u":712,"l":381,"s":1,"a":true},{"u":628,"l":528,"s":0,"a":true},{"u":974,"l":917,"s":0,"a":true},{"u":286,"l":105,"s":1,"a":true},{"u":782,"l":656,"s":0,"a":false},{"u":906,"l":320,"s":1,"a":false},{"u":757,"l":736,"s":0,"a":false},{"u":544,"l":207,"s":1,"a":true},{"u":736,"l":150,"s":0,"a":true},{"u":441,"l":220,"s":0,"a":true},{"u":355,"l":107,"s":1,"a":true},{"u":185,"l":50,"s":1,"a":true},{"u":412,"l":376,"s":0,"a":false},{"u":539,"l":450,"s":1,"a":true},{"u":525,"l":387,"s":0,"a":false},{"u":817,"l":158,"s":1,"a":true},{"u":828,"l":558,"s":0,"a":true},{"u":855,"l":576,"s":0,"a":false},{"u":168,"l":151,"s":1,"a":false},{"u":234,"l":205,"s":1,"a":true},{"u":596,"l":448,"s":0,"a":true},{"u":964,"l":887,"s":0,"a":false},{"u":869,"l":770,"s":0,"a":true},{"u":636,"l":308,"s":1,"a":false},{"u":354,"l":11,"s":1,"a":true},{"u":954,"l":527,"s":0,"a":false},{"u":575,"l":90,"s":1,"a":true},{"u":477,"l":442,"s":0,"a":true},{"u":842,"l":122,"s":0,"a":false},{"u":157,"l":129,"s":0,"a":false},{"u":529,"l":476,"s":1,"a":true},{"u":277,"l":54,"s":0,"a":true},{"u":890,"l":146,"s":1,"a":true},{"u":252,"l":250,"s":1,"a":false},{"u":984,"l":978,"s":1,"a":false},{"u":108,"l":71,"s":0,"a":false},{"u":328,"l":232,"s":1,"a":true},{"u":188,"l":186,"s":0,"a":true},{"u":875,"l":111,"s":0,"a":true},{"u":394,"l":372,"s":1,"a":false},{"u":559,"l":432,"s":1,"a":true},{"u":336,"l":85,"s":0,"a":false},{"u":695,"l":54,"s":0,"a":true},{"u":184,"l":33,"s":0,"a":false},{"u":464,"l":410,"s":1,"a":true},{"u":407,"l":126,"s":0,"a":true},{"u":420,"l":12,"s":1,"a":true},{"u":593,"l":126,"s":1,"a":false},{"u":407,"l":151,"s":0,"a":false},{"u":603,"l":289,"s":0,"a":true},{"u":664,"l":274,"s":1,"a":false},{"u":380,"l":353,"s":1,"a":true},{"u":397,"l":362,"s":1,"a":false},{"u":591,"l":337,"s":1,"a":false},{"u":908,"l":271,"s":1,"a":true},{"u":916,"l":21,"s":0,"a":false},{"u":278,"l":182,"s":0,"a":true},{"u":633,"l":484,"s":0,"a":false},{"u":765,"l":637,"s":1,"a":false},{"u":897,"l":539,"s":0,"a":true},{"u":963,"l":441,"s":1,"a":false},{"u":902,"l":47,"s":1,"a":true},{"u":980,"l":818,"s":0,"a":false},{"u":905,"l":144,"s":1,"a":false},{"u":716,"l":551,"s":0,"a":true},{"u":849,"l":60,"s":0,"a":true},{"u":497,"l":333,"s":0,"a":true},{"u":801,"l":46,"s":0,"a":true},{"u":709,"l":410,"s":1,"a":true},{"u":553,"l":442,"s":1,"a":false},{"u":927,"l":312,"s":0,"a":false},{"u":438,"l":216,"s":0,"a":true},{"u":492,"l":297,"s":0,"a":false},{"u":785,"l":669,"s":0,"a":false},{"u":886,"l":745,"s":0,"a":false},{"u":870,"l":49,"s":1,"a":true},{"u":852,"l":749,"s":1,"a":false},{"u":735,"l":378,"s":0,"a":true},{"u":805,"l":435,"s":1,"a":true},{"u":850,"l":319,"s":0,"a":false},{"u":982,"l":883,"s":1,"a":true},{"u":989,"l":417,"s":0,"a":true},{"u":922,"l":868,"s":1,"a":true},{"u":311,"l":244,"s":0,"a":true},{"u":861,"l":502,"s":0,"a":true},{"u":703,"l":458,"s":1,"a":false},{"u":729,"l":422,"s":1,"a":true},{"u":707,"l":411,"s":1,"a":false},{"u":535,"l":473,"s":0,"a":true},{"u":460,"l":260,"s":1,"a":true},{"u":670,"l":303,"s":1,"a":true},{"u":593,"l":25,"s":0,"a":true},{"u":820,"l":279,"s":1,"a":true},{"u":356,"l":79,"s":0,"a":false},{"u":801,"l":344,"s":1,"a":true},{"u":584,"l":153,"s":1,"a":true},{"u":957,"l":302,"s":1,"a":false},{"u":976,"l":375,"s":0,"a":true},{"u":604,"l":317,"s":0,"a":true},{"u":501,"l":227,"s":1,"a":true},{"u":308,"l":286,"s":1,"a":true},{"u":970,"l":342,"s":0,"a":true},{"u":735,"l":274,"s":1,"a":false},{"u":834,"l":104,"s":0,"a":false},{"u":835,"l":575,"s":0,"a":true},{"u":386,"l":164,"s":0,"a":false},{"u":492,"l":306,"s":0,"a":true},{"u":564,"l":190,"s":1,"a":true},{"u":942,"l":848,"s":0,"a":false},{"u":775,"l":258,"s":0,"a":false},{"u":631,"l":345,"s":1,"a":false},{"u":585,"l":269,"s":1,"a":true},{"u":238,"l":123,"s":0,"a":true},{"u":855,"l":280,"s":1,"a":false},{"u":252,"l":167,"s":0,"a":false},{"u":743,"l":125,"s":1,"a":false},{"u":959,"l":453,"s":1,"a":true},{"u":492,"l":472,"s":1,"a":true},{"u":919,"l":48,"s":0,"a":false},{"u":882,"l":87,"s":0,"a":true},{"u":679,"l":400,"s":0,"a":true},{"u":315,"l":58,"s":0,"a":false},{"u":494,"l":143,"s":0,"a":true},{"u":295,"l":212,"s":0,"a":false},{"u":792,"l":7,"s":0,"a":false},{"u":354,"l":191,"s":1,"a":false},{"u":987,"l":897,"s":0,"a":true},{"u":649,"l":268,"s":1,"a":true},{"u":457,"l":146,"s":1,"a":false},{"u":962,"l":313,"s":0,"a":true},{"u":842,"l":457,"s":1,"a":false},{"u":937,"l":89,"s":1,"a":false},{"u":923,"l":154,"s":0,"a":true},{"u":973,"l":601,"s":1,"a":false},{"u":614,"l":66,"s":1,"a":false},{"u":991,"l":432,"s":1,"a":true},{"u":332,"l":47,"s":1,"a":true},{"u":742,"l":683,"s":0,"a":false},{"u":980,"l":155,"s":0,"a":true},{"u":176,"l":15,"s":0,"a":true},{"u":217,"l":120,"s":1,"a":true},{"u":743,"l":690,"s":1,"a":false},{"u":289,"l":88,"s":1,"a":false},{"u":853,"l":416,"s":1,"a":false},{"u":356,"l":144,"s":1,"a":false},{"u":411,"l":369,"s":1,"a":false},{"u":929,"l":273,"s":1,"a":true},{"u":769,"l":686,"s":0,"a":true},{"u":510,"l":375,"s":0,"a":false},{"u":437,"l":254,"s":1,"a":true},{"u":577,"l":167,"s":0,"a":false},{"u":782,"l":775,"s":0,"a":true},{"u":675,"l":607,"s":0,"a":true},{"u":927,"l":120,"s":0,"a":false},{"u":887,"l":678,"s":1,"a":true},{"u":398,"l":30,"s":0,"a":false},{"u":651,"l":593,"s":1,"a":false},{"u":504,"l":330,"s":1,"a":true},{"u":251,"l":70,"s":0,"a":false},{"u":883,"l":23,"s":0,"a":false},{"u":993,"l":503,"s":0,"a":true},{"u":590,"l":350,"s":1,"a":true},{"u":736,"l":144,"s":1,"a":false},{"u":866,"l":602,"s":0,"a":true},{"u":708,"l":293,"s":1,"a":false},{"u":737,"l":620,"s":1,"a":true},{"u":814,"l":622,"s":0,"a":false},{"u":234,"l":22,"s":1,"a":false},{"u":512,"l":1,"s":0,"a":true},{"u":578,"l":527,"s":0,"a":false},{"u":746,"l":640,"s":0,"a":true},{"u":975,"l":208,"s":0,"a":false},{"u":805,"l":119,"s":1,"a":true},{"u":866,"l":735,"s":0,"a":false},{"u":380,"l":366,"s":1,"a":true},{"u":710,"l":403,"s":0,"a":true},{"u":822,"l":194,"s":0,"a":true},{"u":814,"l":172,"s":1,"a":true},{"u":740,"l":334,"s":0,"a":true},{"u":289,"l":105,"s":1,"a":false},{"u":759,"l":614,"s":0,"a":false},{"u":731,"l":153,"s":1,"a":false},{"u":926,"l":795,"s":1,"a":true},{"u":970,"l":891,"s":1,"a":false},{"u":966,"l":61,"s":1,"a":false},{"u":997,"l":378,"s":0,"a":false},{"u":995,"l":147,"s":0,"a":false},{"u":449,"l":352,"s":1,"a":false},{"u":494,"l":466,"s":1,"a":false},{"u":113,"l":82,"s":1,"a":false},{"u":514,"l":33,"s":1,"a":true},{"u":918,"l":671,"s":0,"a":false},{"u":830,"l":563,"s":0,"a":false},{"u":213,"l":47,"s":0,"a":true},{"u":405,"l":2,"s":1,"a":true},{"u":599,"l":298,"s":0,"a":true},{"u":617,"l":258,"s":0,"a":true},{"u":391,"l":8,"s":0,"a":true},{"u":626,"l":483,"s":1,"a":false},{"u":720,"l":60,"s":1,"a":false},{"u":922,"l":560,"s":0,"a":false},{"u":892,"l":353,"s":0,"a":false},{"u":866,"l":457,"s":0,"a":true},{"u":868,"l":363,"s":0,"a":true},{"u":622,"l":508,"s":1,"a":true},{"u":266,"l":264,"s":0,"a":false},{"u":688,"l":629,"s":0,"a":true},{"u":892,"l":157,"s":0,"a":false},{"u":317,"l":315,"s":0,"a":true},{"u":891,"l":361,"s":0,"a":true},{"u":912,"l":243,"s":1,"a":true},{"u":790,"l":416,"s":0,"a":false},{"u":872,"l":755,"s":1,"a":false},{"u":243,"l":30,"s":0,"a":true},{"u":512,"l":302,"s":1,"a":false},{"u":243,"l":132,"s":1,"a":true},{"u":667,"l":234,"s":0,"a":true},{"u":270,"l":234,"s":1,"a":false},{"u":552,"l":315,"s":0,"a":true},{"u":777,"l":457,"s":1,"a":true},{"u":140,"l":57,"s":1,"a":false},{"u":898,"l":679,"s":0,"a":false},{"u":826,"l":533,"s":1,"a":true},{"u":800,"l":406,"s":1,"a":true},{"u":771,"l":592,"s":0,"a":true},{"u":578,"l":328,"s":0,"a":false},{"u":805,"l":457,"s":1,"a":true},{"u":524,"l":405,"s":1,"a":true},{"u":475,"l":340,"s":1,"a":true},{"u":797,"l":425,"s":1,"a":true},{"u":846,"l":238,"s":0,"a":true},{"u":896,"l":380,"s":0,"a":true},{"u":900,"l":583,"s":0,"a":false},{"u":446,"l":284,"s":1,"a":false},{"u":791,"l":9,"s":1,"a":false},{"u":618,"l":264,"s":0,"a":false},{"u":719,"l":439,"s":1,"a":true},{"u":995,"l":926,"s":0,"a":false},{"u":678,"l":414,"s":1,"a":true},{"u":461,"l":288,"s":1,"a":true},{"u":107,"l":99,"s":1,"a":true},{"u":358,"l":152,"s":1,"a":false},{"u":915,"l":509,"s":1,"a":true},{"u":799,"l":776,"s":0,"a":true},{"u":807,"l":135,"s":1,"a":true},{"u":873,"l":619,"s":0,"a":false},{"u":795,"l":32,"s":1,"a":false},{"u":379,"l":166,"s":0,"a":true},{"u":632,"l":189,"s":1,"a":true},{"u":457,"l":369,"s":1,"a":false},{"u":372,"l":125,"s":1,"a":false},{"u":391,"l":8,"s":0,"a":false},{"u":429,"l":77,"s":0,"a":false},{"u":583,"l":66,"s":1,"a":true},{"u":369,"l":233,"s":0,"a":true},{"u":723,"l":480,"s":0,"a":false},{"u":811,"l":527,"s":0,"a":false},{"u":521,"l":474,"s":1,"a":false},{"u":751,"l":587,"s":1,"a":true},{"u":626,"l":150,"s":0,"a":false},{"u":576,"l":336,"s":0,"a":true},{"u":524,"l":127,"s":1,"a":true},{"u":759,"l":756,"s":1,"a":true},{"u":228,"l":76,"s":0,"a":false},{"u":976,"l":55,"s":0,"a":true},{"u":635,"l":581,"s":0,"a":true},{"u":666,"l":286,"s":1,"a":false},{"u":855,"l":419,"s":0,"a":false},{"u":409,"l":350,"s":1,"a":true},{"u":402,"l":246,"s":0,"a":true},{"u":614,"l":521,"s":1,"a":false},{"u":536,"l":433,"s":1,"a":true},{"u":667,"l":349,"s":0,"a":false},{"u":479,"l":123,"s":0,"a":true},{"u":512,"l":327,"s":1,"a":false},{"u":310,"l":20,"s":1,"a":true},{"u":933,"l":710,"s":0,"a":false},{"u":663,"l":635,"s":1,"a":true},{"u":890,"l":402,"s":1,"a":false},{"u":308,"l":47,"s":0,"a":false},{"u":509,"l":254,"s":1,"a":true},{"u":821,"l":509,"s":1,"a":false},{"u":194,"l":192,"s":1,"a":true},{"u":684,"l":94,"s":0,"a":false},{"u":495,"l":27,"s":0,"a":true},{"u":639,"l":527,"s":1,"a":false},{"u":904,"l":351,"s":0,"a":true},{"u":725,"l":446,"s":0,"a":false},{"u":844,"l":307,"s":1,"a":true},{"u":482,"l":237,"s":1,"a":false},{"u":818,"l":31,"s":0,"a":true},{"u":937,"l":607,"s":1,"a":false},{"u":727,"l":45,"s":1,"a":false},{"u":639,"l":253,"s":1,"a":true},{"u":775,"l":698,"s":0,"a":false},{"u":298,"l":187,"s":0,"a":false},{"u":937,"l":610,"s":0,"a":false},{"u":510,"l":151,"s":1,"a":false},{"u":887,"l":845,"s":0,"a":false},{"u":662,"l":554,"s":1,"a":false},{"u":731,"l":590,"s":1,"a":false},{"u":719,"l":305,"s":1,"a":true},{"u":963,"l":571,"s":1,"a":true},{"u":220,"l":218,"s":0,"a":true},{"u":712,"l":124,"s":1,"a":false},{"u":974,"l":949,"s":1,"a":false},{"u":413,"l":121,"s":0,"a":false},{"u":569,"l":365,"s":0,"a":false},{"u":441,"l":213,"s":1,"a":true},{"u":492,"l":401,"s":1,"a":false},{"u":252,"l":18,"s":1,"a":true},{"u":588,"l":404,"s":0,"a":false},{"u":986,"l":980,"s":1,"a":false},{"u":970,"l":46,"s":0,"a":false},{"u":809,"l":716,"s":0,"a":true},{"u":754,"l":81,"s":0,"a":false},{"u":719,"l":125,"s":1,"a":true},{"u":839,"l":8,"s":0,"a":true},{"u":749,"l":164,"s":0,"a":false},{"u":700,"l":646,"s":1,"a":false},{"u":978,"l":349,"s":1,"a":true},{"u":864,"l":628,"s":0,"a":false},{"u":794,"l":577,"s":1,"a":true},{"u":509,"l":97,"s":0,"a":false},{"u":647,"l":295,"s":0,"a":false},{"u":679,"l":114,"s":0,"a":true},{"u":676,"l":368,"s":1,"a":false},{"u":678,"l":352,"s":0,"a":true},{"u":435,"l":149,"s":1,"a":false},{"u":837,"l":379,"s":1,"a":false},{"u":734,"l":513,"s":1,"a":true},{"u":692,"l":114,"s":0,"a":true},{"u":901,"l":366,"s":0,"a":true},{"u":678,"l":341,"s":1,"a":true},{"u":460,"l":20,"s":0,"a":true},{"u":820,"l":29,"s":0,"a":false},{"u":744,"l":487,"s":1,"a":false},{"u":922,"l":244,"s":1,"a":false},{"u":395,"l":1,"s":1,"a":false},{"u":886,"l":47,"s":0,"a":true},{"u":866,"l":657,"s":0,"a":true},{"u":559,"l":276,"s":0,"a":true},{"u":741,"l":367,"s":1,"a":true},{"u":543,"l":57,"s":1,"a":true},{"u":590,"l":127,"s":0,"a":true},{"u":614,"l":41,"s":1,"a":false},{"u":701,"l":520,"s":1,"a":true},{"u":946,"l":787,"s":0,"a":false},{"u":840,"l":752,"s":1,"a":false},{"u":127,"l":17,"s":1,"a":false},{"u":617,"l":252,"s":0,"a":false},{"u":867,"l":419,"s":1,"a":false},{"u":712,"l":414,"s":0,"a":false},{"u":942,"l":208,"s":0,"a":false},{"u":537,"l":528,"s":0,"a":true},{"u":624,"l":24,"s":0,"a":false},{"u":694,"l":395,"s":1,"a":false},{"u":753,"l":247,"s":1,"a":false},{"u":381,"l":168,"s":0,"a":true},{"u":310,"l":176,"s":0,"a":false},{"u":494,"l":283,"s":0,"a":false},{"u":956,"l":417,"s":0,"a":true},{"u":976,"l":934,"s":1,"a":true},{"u":390,"l":270,"s":1,"a":false},{"u":571,"l":3,"s":0,"a":true},{"u":962,"l":379,"s":1,"a":true},{"u":630,"l":487,"s":1,"a":true},{"u":750,"l":730,"s":0,"a":false},{"u":430,"l":35,"s":1,"a":true},{"u":883,"l":782,"s":0,"a":true},{"u":870,"l":707,"s":0,"a":false},{"u":582,"l":85,"s":1,"a":false},{"u":829,"l":12,"s":0,"a":true},{"u":388,"l":257,"s":1,"a":true},{"u":997,"l":512,"s":0,"a":false},{"u":644,"l":104,"s":0,"a":true},{"u":866,"l":212,"s":0,"a":false},{"u":645,"l":153,"s":1,"a":false},{"u":968,"l":845,"s":0,"a":true},{"u":517,"l":27,"s":0,"a":true},{"u":986,"l":20,"s":0,"a":true},{"u":795,"l":335,"s":0,"a":false},{"u":481,"l":429,"s":1,"a":true},{"u":120,"l":32,"s":0,"a":false},{"u":661,"l":579,"s":0,"a":false},{"u":873,"l":628,"s":1,"a":true},{"u":906,"l":791,"s":1,"a":true},{"u":734,"l":546,"s":0,"a":false},{"u":602,"l":240,"s":0,"a":true},{"u":485,"l":385,"s":0,"a":true},{"u":459,"l":114,"s":0,"a":false},{"u":677,"l":646,"s":0,"a":false},{"u":776,"l":634,"s":0,"a":false},{"u":576,"l":248,"s":1,"a":false},{"u":851,"l":633,"s":1,"a":false},{"u":428,"l":72,"s":1,"a":false},{"u":776,"l":603,"s":0,"a":true},{"u":630,"l":218,"s":1,"a":false},{"u":453,"l":433,"s":1,"a":true},{"u":133,"l":17,"s":1,"a":false},{"u":519,"l":196,"s":0,"a":false},{"u":874,"l":707,"s":0,"a":false},{"u":386,"l":319,"s":1,"a":false},{"u":713,"l":386,"s":1,"a":true},{"u":471,"l":200,"s":1,"a":false},{"u":744,"l":592,"s":1,"a":true},{"u":742,"l":664,"s":1,"a":false},{"u":645,"l":314,"s":1,"a":true},{"u":361,"l":124,"s":0,"a":true},{"u":787,"l":316,"s":0,"a":true},{"u":462,"l":247,"s":1,"a":true},{"u":700,"l":38,"s":1,"a":false},{"u":79,"l":28,"s":1,"a":false},{"u":961,"l":814,"s":0,"a":true},{"u":960,"l":475,"s":1,"a":true},{"u":434,"l":369,"s":0,"a":true},{"u":658,"l":470,"s":0,"a":true},{"u":663,"l":344,"s":0,"a":true},{"u":704,"l":642,"s":1,"a":false},{"u":731,"l":457,"s":0,"a":true},{"u":362,"l":247,"s":1,"a":false},{"u":400,"l":213,"s":1,"a":true},{"u":325,"l":317,"s":1,"a":true},{"u":791,"l":33,"s":1,"a":false},{"u":790,"l":444,"s":1,"a":true},{"u":563,"l":213,"s":0,"a":true},{"u":804,"l":167,"s":0,"a":true},{"u":777,"l":91,"s":1,"a":true},{"u":551,"l":175,"s":1,"a":false},{"u":975,"l":24,"s":0,"a":false},{"u":529,"l":200,"s":0,"a":false},{"u":955,"l":333,"s":0,"a":true},{"u":774,"l":236,"s":1,"a":false},{"u":402,"l":58,"s":0,"a":true},{"u":868,"l":859,"s":1,"a":true},{"u":835,"l":605,"s":0,"a":false},{"u":354,"l":101,"s":1,"a":false},{"u":642,"l":532,"s":0,"a":false},{"u":327,"l":259,"s":1,"a":true},{"u":282,"l":98,"s":1,"a":false},{"u":934,"l":913,"s":0,"a":true},{"u":980,"l":262,"s":1,"a":true},{"u":606,"l":502,"s":1,"a":true},{"u":928,"l":567,"s":1,"a":false},{"u":587,"l":562,"s":0,"a":true},{"u":382,"l":173,"s":1,"a":true},{"u":231,"l":50,"s":0,"a":true},{"u":775,"l":175,"s":0,"a":false},{"u":819,"l":505,"s":1,"a":false},{"u":644,"l":641,"s":0,"a":true},{"u":243,"l":123,"s":1,"a":false},{"u":698,"l":605,"s":1,"a":true},{"u":424,"l":199,"s":1,"a":false},{"u":589,"l":155,"s":0,"a":true},{"u":699,"l":167,"s":0,"a":true},{"u":911,"l":813,"s":1,"a":false},{"u":826,"l":793,"s":1,"a":false},{"u":776,"l":313,"s":0,"a":false},{"u":621,"l":262,"s":0,"a":false},{"u":973,"l":603,"s":1,"a":false},{"u":892,"l":472,"s":1,"a":false},{"u":887,"l":616,"s":1,"a":true},{"u":665,"l":585,"s":0,"a":true},{"u":572,"l":82,"s":1,"a":true},{"u":213,"l":197,"s":0,"a":false},{"u":588,"l":411,"s":1,"a":true},{"u":799,"l":498,"s":1,"a":false},{"u":683,"l":558,"s":1,"a":true},{"u":854,"l":677,"s":0,"a":false},{"u":951,"l":291,"s":1,"a":true},{"u":855,"l":135,"s":1,"a":false},{"u":961,"l":474,"s":1,"a":true},{"u":720,"l":120,"s":0,"a":false},{"u":843,"l":646,"s":0,"a":false},{"u":772,"l":41,"s":0,"a":false},{"u":83,"l":62,"s":0,"a":true},{"u":659,"l":496,"s":0,"a":true},{"u":422,"l":261,"s":0,"a":false},{"u":899,"l":304,"s":1,"a":true},{"u":596,"l":414,"s":1,"a":true},{"u":528,"l":517,"s":1,"a":false},{"u":927,"l":380,"s":0,"a":false},{"u":841,"l":234,"s":1,"a":true},{"u":309,"l":211,"s":1,"a":true},{"u":869,"l":62,"s":1,"a":false},{"u":625,"l":534,"s":1,"a":true},{"u":548,"l":264,"s":1,"a":false},{"u":871,"l":793,"s":0,"a":false},{"u":958,"l":884,"s":0,"a":true},{"u":865,"l":838,"s":1,"a":false},{"u":752,"l":675,"s":1,"a":false},{"u":749,"l":349,"s":1,"a":true},{"u":766,"l":366,"s":0,"a":false},{"u":627,"l":506,"s":0,"a":false},{"u":244,"l":167,"s":0,"a":false},{"u":650,"l":215,"s":1,"a":false},{"u":801,"l":541,"s":1,"a":false},{"u":622,"l":118,"s":0,"a":true},{"u":864,"l":521,"s":1,"a":true},{"u":238,"l":210,"s":1,"a":true},{"u":917,"l":733,"s":0,"a":false},{"u":989,"l":908,"s":0,"a":false},{"u":658,"l":405,"s":0,"a":true},{"u":527,"l":321,"s":0,"a":false},{"u":937,"l":470,"s":1,"a":true},{"u":432,"l":160,"s":0,"a":false},{"u":232,"l":180,"s":1,"a":false},{"u":643,"l":320,"s":0,"a":false},{"u":412,"l":140,"s":1,"a":true},{"u":638,"l":471,"s":0,"a":true},{"u":257,"l":80,"s":0,"a":true},{"u":757,"l":86,"s":1,"a":false},{"u":309,"l":1,"s":0,"a":true},{"u":912,"l":438,"s":0,"a":false},{"u":870,"l":547,"s":1,"a":true},{"u":274,"l":242,"s":0,"a":true},{"u":616,"l":459,"s":1,"a":false},{"u":681,"l":502,"s":0,"a":true},{"u":730,"l":424,"s":1,"a":false},{"u":806,"l":646,"s":1,"a":true},{"u":658,"l":388,"s":0,"a":true},{"u":640,"l":352,"s":0,"a":false},{"u":967,"l":189,"s":0,"a":true},{"u":901,"l":472,"s":1,"a":false},{"u":387,"l":243,"s":1,"a":true},{"u":197,"l":48,"s":0,"a":true},{"u":244,"l":68,"s":0,"a":false},{"u":249,"l":131,"s":1,"a":true},{"u":672,"l":346,"s":0,"a":false},{"u":698,"l":214,"s":0,"a":false},{"u":736,"l":324,"s":0,"a":true},{"u":606,"l":35,"s":0,"a":true},{"u":967,"l":930,"s":1,"a":false},{"u":521,"l":258,"s":1,"a":true},{"u":684,"l":347,"s":0,"a":false},{"u":858,"l":384,"s":1,"a":true},{"u":965,"l":521,"s":1,"a":false},{"u":917,"l":636,"s":0,"a":true},{"u":785,"l":647,"s":0,"a":false},{"u":578,"l":531,"s":0,"a":true},{"u":336,"l":30,"s":0,"a":false},{"u":785,"l":342,"s":1,"a":true},{"u":350,"l":34,"s":1,"a":true},{"u":592,"l":196,"s":1,"a":false},{"u":848,"l":256,"s":1,"a":true},{"u":757,"l":739,"s":0,"a":true},{"u":732,"l":407,"s":1,"a":false},{"u":435,"l":146,"s":1,"a":true},{"u":671,"l":117,"s":1,"a":false},{"u":394,"l":148,"s":0,"a":true},{"u":760,"l":593,"s":0,"a":false},{"u":541,"l":499,"s":0,"a":false},{"u":897,"l":217,"s":0,"a":true},{"u":506,"l":273,"s":0,"a":false},{"u":977,"l":372,"s":1,"a":false},{"u":734,"l":138,"s":1,"a":true},{"u":787,"l":179,"s":0,"a":false},{"u":354,"l":242,"s":0,"a":true},{"u":663,"l":487,"s":1,"a":true},{"u":706,"l":332,"s":1,"a":true},{"u":442,"l":307,"s":0,"a":false},{"u":491,"l":204,"s":1,"a":true},{"u":868,"l":336,"s":1,"a":false},{"u":910,"l":406,"s":0,"a":true},{"u":574,"l":104,"s":0,"a":true},{"u":841,"l":673,"s":0,"a":true},{"u":886,"l":495,"s":1,"a":true},{"u":352,"l":331,"s":1,"a":true},{"u":986,"l":42,"s":1,"a":true},{"u":810,"l":542,"s":1,"a":true},{"u":256,"l":4,"s":0,"a":false},{"u":631,"l":28,"s":0,"a":true},{"u":910,"l":848,"s":0,"a":false},{"u":452,"l":242,"s":1,"a":true},{"u":575,"l":288,"s":1,"a":true},{"u":874,"l":45,"s":0,"a":true},{"u":604,"l":561,"s":1,"a":true},{"u":845,"l":288,"s":0,"a":true},{"u":900,"l":214,"s":1,"a":false},{"u":943,"l":645,"s":1,"a":false},{"u":933,"l":7,"s":1,"a":true},{"u":945,"l":273,"s":1,"a":true},{"u":814,"l":511,"s":1,"a":true},{"u":887,"l":450,"s":1,"a":false},{"u":438,"l":267,"s":0,"a":false},{"u":684,"l":350,"s":0,"a":true},{"u":329,"l":231,"s":1,"a":true},{"u":721,"l":715,"s":1,"a":false},{"u":859,"l":679,"s":0,"a":true},{"u":495,"l":419,"s":0,"a":false},{"u":780,"l":7,"s":1,"a":true},{"u":916,"l":302,"s":1,"a":false},{"u":600,"l":113,"s":1,"a":true},{"u":913,"l":238,"s":1,"a":true},{"u":675,"l":407,"s":1,"a":false},{"u":627,"l":136,"s":1,"a":true},{"u":955,"l":771,"s":0,"a":true},{"u":798,"l":154,"s":1,"a":false},{"u":748,"l":199,"s":1,"a":true},{"u":270,"l":260,"s":0,"a":false},{"u":574,"l":343,"s":0,"a":true},{"u":668,"l":140,"s":1,"a":false},{"u":885,"l":677,"s":0,"a":true},{"u":807,"l":721,"s":0,"a":false},{"u":638,"l":222,"s":1,"a":true},{"u":846,"l":322,"s":1,"a":true},{"u":672,"l":467,"s":0,"a":false},{"u":238,"l":109,"s":0,"a":true},{"u":959,"l":744,"s":0,"a":true},{"u":837,"l":355,"s":0,"a":false},{"u":953,"l":492,"s":1,"a":false},{"u":755,"l":525,"s":0,"a":false},{"u":367,"l":64,"s":1,"a":true},{"u":933,"l":479,"s":0,"a":false},{"u":751,"l":184,"s":0,"a":false},{"u":833,"l":39,"s":1,"a":false},{"u":766,"l":614,"s":0,"a":true},{"u":839,"l":192,"s":0,"a":false},{"u":810,"l":496,"s":1,"a":true},{"u":927,"l":577,"s":1,"a":false},{"u":536,"l":166,"s":0,"a":false},{"u":611,"l":286,"s":0,"a":false},{"u":452,"l":101,"s":1,"a":false},{"u":831,"l":370,"s":0,"a":true},{"u":758,"l":344,"s":1,"a":true},{"u":805,"l":296,"s":0,"a":false},{"u":627,"l":452,"s":0,"a":false},{"u":640,"l":457,"s":1,"a":true},{"u":566,"l":398,"s":0,"a":false},{"u":389,"l":221,"s":1,"a":true},{"u":444,"l":194,"s":1,"a":true},{"u":745,"l":39,"s":0,"a":false},{"u":968,"l":724,"s":0,"a":false},{"u":529,"l":470,"s":0,"a":false},{"u":668,"l":273,"s":0,"a":false},{"u":375,"l":149,"s":1,"a":false},{"u":869,"l":525,"s":0,"a":false},{"u":947,"l":723,"s":1,"a":false},{"u":520,"l":362,"s":1,"a":false},{"u":656,"l":580,"s":0,"a":true},{"u":980,"l":539,"s":0,"a":true},{"u":439,"l":263,"s":0,"a":false},{"u":409,"l":407,"s":0,"a":true},{"u":317,"l":201,"s":1,"a":false},{"u":846,"l":383,"s":1,"a":false},{"u":388,"l":315,"s":0,"a":true},{"u":503,"l":335,"s":0,"a":false},{"u":714,"l":210,"s":1,"a":false},{"u":844,"l":743,"s":1,"a":true},{"u":650,"l":150,"s":1,"a":false},{"u":964,"l":67,"s":0,"a":false},{"u":972,"l":350,"s":1,"a":false},{"u":185,"l":96,"s":0,"a":true},{"u":892,"l":341,"s":1,"a":true},{"u":462,"l":48,"s":1,"a":true},{"u":733,"l":355,"s":0,"a":false},{"u":975,"l":196,"s":1,"a":true},{"u":980,"l":26,"s":1,"a":true},{"u":399,"l":309,"s":0,"a":true},{"u":495,"l":493,"s":0,"a":false},{"u":956,"l":588,"s":1,"a":false},{"u":991,"l":66,"s":1,"a":false},{"u":333,"l":294,"s":0,"a":false},{"u":814,"l":619,"s":1,"a":false},{"u":901,"l":601,"s":1,"a":false},{"u":530,"l":178,"s":0,"a":true},{"u":263,"l":2,"s":1,"a":false},{"u":444,"l":117,"s":0,"a":false},{"u":311,"l":68,"s":1,"a":false},{"u":662,"l":124,"s":1,"a":false},{"u":544,"l":166,"s":1,"a":true},{"u":949,"l":232,"s":0,"a":false},{"u":142,"l":25,"s":1,"a":false},{"u":260,"l":211,"s":0,"a":false},{"u":764,"l":330,"s":1,"a":true},{"u":588,"l":179,"s":0,"a":true},{"u":766,"l":595,"s":0,"a":false},{"u":667,"l":25,"s":0,"a":true},{"u":812,"l":473,"s":0,"a":false},{"u":763,"l":609,"s":0,"a":false},{"u":932,"l":309,"s":1,"a":true},{"u":605,"l":8,"s":0,"a":true},{"u":318,"l":173,"s":0,"a":false},{"u":409,"l":71,"s":0,"a":false},{"u":754,"l":205,"s":1,"a":false},{"u":953,"l":856,"s":0,"a":false},{"u":648,"l":177,"s":0,"a":true},{"u":494,"l":190,"s":1,"a":true},{"u":440,"l":138,"s":0,"a":true},{"u":646,"l":136,"s":0,"a":false},{"u":943,"l":493,"s":0,"a":false},{"u":857,"l":80,"s":1,"a":false},{"u":956,"l":818,"s":1,"a":true},{"u":629,"l":558,"s":0,"a":true},{"u":634,"l":527,"s":0,"a":true},{"u":931,"l":82,"s":1,"a":true},{"u":172,"l":123,"s":1,"a":true},{"u":985,"l":201,"s":1,"a":false},{"u":249,"l":50,"s":1,"a":true},{"u":957,"l":634,"s":0,"a":false},{"u":915,"l":799,"s":1,"a":true},{"u":628,"l":218,"s":1,"a":false},{"u":994,"l":780,"s":1,"a":true},{"u":980,"l":577,"s":1,"a":true},{"u":400,"l":113,"s":0,"a":false},{"u":324,"l":190,"s":1,"a":true},{"u":321,"l":289,"s":1,"a":true},{"u":226,"l":222,"s":1,"a":false},{"u":343,"l":228,"s":1,"a":false},{"u":658,"l":37,"s":1,"a":true},{"u":642,"l":400,"s":0,"a":false},{"u":970,"l":173,"s":0,"a":false},{"u":786,"l":699,"s":1,"a":true},{"u":729,"l":615,"s":1,"a":false},{"u":881,"l":420,"s":0,"a":true},{"u":548,"l":108,"s":0,"a":true},{"u":722,"l":289,"s":1,"a":true},{"u":495,"l":197,"s":0,"a":true},{"u":951,"l":738,"s":0,"a":true},{"u":993,"l":150,"s":0,"a":false},{"u":618,"l":138,"s":0,"a":true},{"u":457,"l":346,"s":1,"a":false},{"u":671,"l":535,"s":0,"a":false},{"u":888,"l":312,"s":1,"a":false},{"u":720,"l":122,"s":0,"a":false},{"u":569,"l":164,"s":1,"a":true},{"u":866,"l":137,"s":1,"a":true},{"u":952,"l":38,"s":1,"a":true},{"u":911,"l":135,"s":1,"a":false},{"u":604,"l":531,"s":1,"a":true},{"u":560,"l":308,"s":1,"a":false},{"u":744,"l":484,"s":0,"a":false},{"u":695,"l":374,"s":1,"a":false},{"u":879,"l":107,"s":0,"a":false},{"u":960,"l":557,"s":1,"a":false},{"u":357,"l":198,"s":1,"a":false},{"u":814,"l":463,"s":0,"a":true},{"u":666,"l":562,"s":1,"a":false},{"u":405,"l":393,"s":1,"a":true},{"u":302,"l":178,"s":1,"a":true},{"u":871,"l":150,"s":1,"a":false},{"u":513,"l":174,"s":1,"a":true},{"u":140,"l":43,"s":1,"a":false},{"u":969,"l":148,"s":0,"a":true},{"u":976,"l":583,"s":1,"a":true},{"u":844,"l":270,"s":1,"a":true},{"u":365,"l":258,"s":1,"a":false},{"u":679,"l":150,"s":1,"a":false},{"u":771,"l":96,"s":0,"a":false},{"u":971,"l":209,"s":1,"a":true},{"u":522,"l":129,"s":0,"a":true},{"u":704,"l":441,"s":1,"a":true},{"u":719,"l":465,"s":1,"a":false},{"u":646,"l":525,"s":0,"a":true},{"u":541,"l":237,"s":1,"a":false},{"u":138,"l":105,"s":1,"a":false},{"u":164,"l":155,"s":1,"a":false},{"u":521,"l":158,"s":1,"a":true},{"u":587,"l":69,"s":0,"a":true},{"u":926,"l":452,"s":1,"a":false},{"u":528,"l":404,"s":1,"a":true},{"u":259,"l":134,"s":1,"a":true},{"u":589,"l":511,"s":0,"a":false},{"u":418,"l":395,"s":1,"a":true},{"u":842,"l":783,"s":1,"a":false},{"u":640,"l":303,"s":0,"a":false},{"u":911,"l":240,"s":0,"a":true},{"u":566,"l":505,"s":1,"a":true},{"u":845,"l":844,"s":0,"a":false},{"u":395,"l":245,"s":1,"a":true},{"u":670,"l":135,"s":1,"a":true},{"u":386,"l":123,"s":1,"a":false},{"u":588,"l":115,"s":0,"a":false},{"u":619,"l":398,"s":0,"a":false},{"u":735,"l":614,"s":0,"a":false},{"u":416,"l":390,"s":0,"a":false},{"u":468,"l":292,"s":0,"a":false},{"u":690,"l":232,"s":1,"a":true},{"u":422,"l":59,"s":1,"a":true},{"u":739,"l":351,"s":0,"a":true},{"u":849,"l":752,"s":0,"a":false},{"u":711,"l":707,"s":1,"a":true},{"u":939,"l":444,"s":1,"a":true},{"u":836,"l":790,"s":1,"a":false},{"u":932,"l":828,"s":0,"a":false},{"u":491,"l":349,"s":1,"a":true},{"u":467,"l":235,"s":0,"a":true},{"u":892,"l":555,"s":1,"a":false},{"u":604,"l":118,"s":0,"a":false},{"u":403,"l":239,"s":1,"a":true},{"u":831,"l":666,"s":1,"a":true},{"u":264,"l":218,"s":0,"a":false},{"u":857,"l":102,"s":0,"a":false},{"u":376,"l":61,"s":1,"a":false},{"u":863,"l":778,"s":1,"a":false},{"u":554,"l":191,"s":1,"a":true},{"u":597,"l":482,"s":0,"a":true},{"u":866,"l":42,"s":0,"a":false},{"u":703,"l":82,"s":0,"a":true},{"u":781,"l":311,"s":1,"a":true},{"u":654,"l":296,"s":0,"a":false},{"u":989,"l":121,"s":0,"a":true},{"u":136,"l":118,"s":1,"a":false},{"u":936,"l":817,"s":1,"a":false},{"u":818,"l":244,"s":1,"a":false},{"u":880,"l":828,"s":0,"a":true},{"u":410,"l":171,"s":0,"a":true},{"u":991,"l":951,"s":0,"a":false},{"u":655,"l":306,"s":0,"a":true},{"u":915,"l":754,"s":0,"a":false},{"u":839,"l":407,"s":0,"a":true},{"u":693,"l":407,"s":1,"a":true},{"u":995,"l":227,"s":0,"a":true},{"u":570,"l":296,"s":1,"a":true},{"u":869,"l":261,"s":1,"a":true},{"u":439,"l":148,"s":0,"a":false},{"u":598,"l":220,"s":1,"a":true},{"u":933,"l":428,"s":1,"a":false},{"u":859,"l":115,"s":1,"a":false},{"u":505,"l":383,"s":0,"a":true},{"u":759,"l":672,"s":0,"a":false},{"u":413,"l":229,"s":1,"a":false},{"u":819,"l":621,"s":0,"a":false},{"u":651,"l":317,"s":0,"a":true},{"u":968,"l":60,"s":1,"a":false},{"u":956,"l":299,"s":1,"a":false},{"u":340,"l":202,"s":1,"a":false},{"u":949,"l":932,"s":1,"a":true},{"u":450,"l":65,"s":0,"a":false},{"u":698,"l":170,"s":0,"a":true},{"u":564,"l":126,"s":0,"a":false},{"u":892,"l":411,"s":1,"a":true},{"u":665,"l":620,"s":1,"a":false},{"u":981,"l":787,"s":0,"a":true},{"u":747,"l":386,"s":1,"a":true},{"u":302,"l":198,"s":1,"a":true},{"u":730,"l":318,"s":1,"a":false},{"u":543,"l":308,"s":0,"a":false},{"u":620,"l":72,"s":1,"a":false},{"u":961,"l":684,"s":0,"a":false},{"u":655,"l":514,"s":0,"a":false},{"u":962,"l":892,"s":1,"a":true},{"u":606,"l":594,"s":0,"a":false},{"u":569,"l":131,"s":1,"a":false},{"u":804,"l":539,"s":0,"a":false},{"u":815,"l":541,"s":1,"a":false},{"u":515,"l":43,"s":0,"a":false},{"u":390,"l":216,"s":0,"a":true},{"u":855,"l":143,"s":1,"a":true},{"u":801,"l":194,"s":1,"a":false},{"u":996,"l":753,"s":1,"a":true},{"u":957,"l":326,"s":1,"a":true},{"u":508,"l":21,"s":0,"a":false},{"u":474,"l":327,"s":0,"a":true},{"u":870,"l":104,"s":0,"a":false},{"u":904,"l":221,"s":1,"a":false},{"u":585,"l":381,"s":1,"a":true},{"u":646,"l":281,"s":1,"a":false},{"u":597,"l":589,"s":1,"a":true},{"u":573,"l":382,"s":1,"a":false},{"u":842,"l":221,"s":1,"a":true},{"u":337,"l":219,"s":1,"a":false},{"u":666,"l":544,"s":1,"a":true},{"u":629,"l":485,"s":1,"a":false},{"u":616,"l":498,"s":1,"a":false},{"u":469,"l":259,"s":1,"a":true},{"u":541,"l":305,"s":1,"a":false},{"u":615,"l":96,"s":1,"a":true},{"u":885,"l":207,"s":1,"a":false},{"u":976,"l":81,"s":0,"a":false},{"u":953,"l":166,"s":1,"a":false},{"u":931,"l":881,"s":1,"a":true},{"u":809,"l":245,"s":1,"a":false},{"u":514,"l":222,"s":0,"a":false},{"u":764,"l":480,"s":0,"a":true},{"u":547,"l":303,"s":1,"a":true},{"u":790,"l":343,"s":0,"a":true},{"u":434,"l":229,"s":0,"a":false},{"u":862,"l":361,"s":0,"a":false},{"u":566,"l":116,"s":0,"a":false},{"u":539,"l":16,"s":0,"a":true},{"u":195,"l":109,"s":0,"a":true},{"u":374,"l":256,"s":0,"a":true},{"u":940,"l":537,"s":0,"a":false},{"u":885,"l":868,"s":1,"a":true},{"u":720,"l":352,"s":0,"a":true},{"u":697,"l":91,"s":1,"a":true},{"u":959,"l":579,"s":1,"a":false},{"u":826,"l":208,"s":1,"a":false},{"u":812,"l":580,"s":1,"a":true},{"u":532,"l":254,"s":1,"a":false},{"u":415,"l":140,"s":0,"a":false},{"u":246,"l":125,"s":1,"a":false},{"u":955,"l":76,"s":1,"a":false},{"u":625,"l":582,"s":1,"a":false},{"u":759,"l":228,"s":0,"a":true},{"u":955,"l":716,"s":0,"a":false},{"u":142,"l":2,"s":0,"a":true},{"u":790,"l":556,"s":0,"a":true},{"u":839,"l":768,"s":0,"a":true},{"u":712,"l":386,"s":0,"a":false},{"u":395,"l":303,"s":1,"a":false},{"u":781,"l":776,"s":0,"a":true},{"u":805,"l":326,"s":0,"a":true},{"u":752,"l":676,"s":0,"a":false},{"u":775,"l":182,"s":0,"a":true},{"u":372,"l":269,"s":1,"a":false},{"u":687,"l":312,"s":1,"a":false},{"u":696,"l":438,"s":0,"a":true},{"u":737,"l":617,"s":1,"a":false},{"u":717,"l":166,"s":1,"a":false},{"u":412,"l":166,"s":1,"a":false},{"u":498,"l":178,"s":0,"a":true},{"u":970,"l":519,"s":0,"a":false},{"u":254,"l":210,"s":0,"a":true},{"u":740,"l":701,"s":1,"a":false},{"u":720,"l":407,"s":0,"a":true},{"u":647,"l":453,"s":0,"a":false},{"u":743,"l":130,"s":1,"a":true},{"u":774,"l":207,"s":0,"a":false},{"u":328,"l":323,"s":1,"a":true},{"u":671,"l":359,"s":0,"a":true},{"u":648,"l":49,"s":1,"a":false},{"u":864,"l":297,"s":1,"a":true},{"u":730,"l":204,"s":1,"a":false},{"u":436,"l":33,"s":1,"a":false},{"u":739,"l":66,"s":0,"a":true},{"u":684,"l":632,"s":1,"a":false},{"u":794,"l":728,"s":0,"a":false},{"u":641,"l":85,"s":0,"a":false},{"u":321,"l":84,"s":0,"a":false},{"u":995,"l":466,"s":1,"a":true},{"u":181,"l":63,"s":1,"a":true},{"u":239,"l":126,"s":0,"a":false},{"u":376,"l":193,"s":1,"a":false},{"u":173,"l":39,"s":0,"a":true},{"u":157,"l":137,"s":0,"a":false},{"u":505,"l":169,"s":1,"a":true},{"u":785,"l":322,"s":0,"a":true},{"u":741,"l":454,"s":1,"a":true},{"u":586,"l":94,"s":1,"a":true},{"u":963,"l":57,"s":0,"a":false},{"u":762,"l":443,"s":1,"a":false},{"u":970,"l":693,"s":1,"a":true},{"u":617,"l":554,"s":1,"a":true},{"u":830,"l":523,"s":1,"a":false},{"u":517,"l":270,"s":1,"a":true},{"u":742,"l":432,"s":1,"a":true},{"u":504,"l":248,"s":0,"a":true},{"u":964,"l":51,"s":0,"a":false},{"u":993,"l":886,"s":0,"a":false},{"u":832,"l":582,"s":1,"a":true},{"u":921,"l":392,"s":1,"a":true},{"u":877,"l":191,"s":1,"a":false},{"u":898,"l":730,"s":0,"a":false},{"u":692,"l":3,"s":0,"a":true},{"u":898,"l":743,"s":0,"a":true},{"u":985,"l":469,"s":1,"a":false},{"u":456,"l":61,"s":1,"a":false},{"u":87,"l":33,"s":1,"a":false},{"u":935,"l":23,"s":1,"a":false},{"u":374,"l":350,"s":0,"a":true},{"u":224,"l":149,"s":1,"a":false},{"u":590,"l":284,"s":0,"a":false},{"u":265,"l":107,"s":1,"a":true},{"u":794,"l":698,"s":1,"a":false},{"u":883,"l":67,"s":0,"a":true},{"u":542,"l":38,"s":1,"a":true},{"u":637,"l":140,"s":0,"a":true},{"u":657,"l":296,"s":1,"a":false},{"u":759,"l":396,"s":0,"a":false},{"u":728,"l":179,"s":1,"a":true},{"u":195,"l":40,"s":0,"a":true},{"u":607,"l":391,"s":0,"a":false},{"u":872,"l":182,"s":0,"a":true},{"u":954,"l":386,"s":1,"a":false},{"u":739,"l":340,"s":1,"a":false},{"u":892,"l":110,"s":0,"a":false},{"u":567,"l":137,"s":1,"a":true},{"u":358,"l":109,"s":1,"a":false},{"u":727,"l":525,"s":1,"a":false},{"u":597,"l":262,"s":1,"a":true},{"u":646,"l":439,"s":1,"a":false},{"u":775,"l":659,"s":1,"a":true},{"u":858,"l":22,"s":0,"a":false},{"u":921,"l":426,"s":1,"a":false},{"u":517,"l":77,"s":1,"a":true},{"u":614,"l":60,"s":1,"a":true},{"u":959,"l":934,"s":0,"a":true},{"u":606,"l":183,"s":0,"a":false},{"u":243,"l":52,"s":0,"a":true},{"u":386,"l":292,"s":1,"a":true},{"u":852,"l":516,"s":1,"a":true},{"u":582,"l":431,"s":0,"a":false},{"u":325,"l":258,"s":1,"a":true},{"u":623,"l":245,"s":1,"a":false},{"u":985,"l":52,"s":1,"a":true},{"u":912,"l":303,"s":1,"a":false},{"u":600,"l":299,"s":1,"a":true},{"u":834,"l":158,"s":1,"a":false},{"u":793,"l":18,"s":1,"a":true},{"u":639,"l":562,"s":0,"a":true},{"u":198,"l":114,"s":0,"a":true},{"u":996,"l":441,"s":0,"a":true},{"u":739,"l":32,"s":0,"a":true},{"u":227,"l":178,"s":1,"a":false},{"u":845,"l":123,"s":0,"a":false},{"u":875,"l":312,"s":0,"a":false},{"u":840,"l":613,"s":0,"a":true},{"u":793,"l":463,"s":0,"a":false},{"u":709,"l":629,"s":0,"a":false},{"u":722,"l":435,"s":1,"a":false},{"u":45,"l":20,"s":1,"a":false},{"u":874,"l":229,"s":0,"a":false},{"u":434,"l":71,"s":1,"a":true},{"u":988,"l":885,"s":1,"a":true},{"u":189,"l":76,"s":1,"a":true},{"u":655,"l":129,"s":0,"a":true},{"u":861,"l":122,"s":0,"a":true},{"u":466,"l":388,"s":0,"a":false},{"u":202,"l":56,"s":1,"a":true},{"u":356,"l":37,"s":1,"a":true},{"u":769,"l":247,"s":1,"a":true},{"u":608,"l":572,"s":0,"a":false},{"u":766,"l":446,"s":1,"a":true},{"u":299,"l":107,"s":0,"a":true},{"u":488,"l":24,"s":1,"a":true},{"u":923,"l":863,"s":1,"a":false},{"u":965,"l":741,"s":1,"a":false},{"u":854,"l":627,"s":1,"a":true},{"u":597,"l":388,"s":0,"a":false},{"u":607,"l":591,"s":1,"a":false},{"u":528,"l":291,"s":0,"a":true},{"u":959,"l":160,"s":1,"a":false},{"u":461,"l":95,"s":1,"a":true},{"u":640,"l":240,"s":1,"a":false},{"u":899,"l":425,"s":1,"a":false},{"u":782,"l":504,"s":1,"a":false},{"u":615,"l":466,"s":1,"a":false},{"u":911,"l":786,"s":0,"a":false},{"u":176,"l":25,"s":1,"a":false},{"u":817,"l":115,"s":0,"a":true},{"u":347,"l":115,"s":0,"a":true},{"u":635,"l":489,"s":0,"a":true},{"u":782,"l":670,"s":1,"a":true},{"u":970,"l":11,"s":0,"a":true},{"u":531,"l":110,"s":0,"a":true},{"u":556,"l":212,"s":0,"a":false},{"u":972,"l":940,"s":1,"a":false},{"u":488,"l":15,"s":1,"a":false},{"u":957,"l":174,"s":0,"a":false},{"u":819,"l":305,"s":1,"a":false},{"u":376,"l":94,"s":0,"a":true},{"u":951,"l":462,"s":0,"a":false},{"u":993,"l":700,"s":1,"a":false},{"u":928,"l":701,"s":0,"a":true},{"u":941,"l":148,"s":0,"a":true},{"u":685,"l":425,"s":1,"a":true},{"u":199,"l":53,"s":0,"a":false},{"u":725,"l":108,"s":0,"a":true},{"u":312,"l":183,"s":1,"a":true},{"u":826,"l":104,"s":0,"a":false},{"u":713,"l":468,"s":0,"a":false},{"u":847,"l":654,"s":0,"a":true},{"u":583,"l":25,"s":0,"a":false},{"u":484,"l":385,"s":0,"a":false},{"u":625,"l":522,"s":1,"a":false},{"u":830,"l":233,"s":0,"a":true},{"u":226,"l":40,"s":0,"a":true},{"u":935,"l":443,"s":1,"a":false},{"u":145,"l":77,"s":0,"a":false},{"u":565,"l":405,"s":0,"a":true},{"u":937,"l":887,"s":0,"a":false},{"u":442,"l":250,"s":1,"a":false},{"u":486,"l":409,"s":1,"a":true},{"u":727,"l":569,"s":0,"a":true},{"u":484,"l":102,"s":1,"a":false},{"u":653,"l":626,"s":1,"a":false},{"u":274,"l":161,"s":0,"a":true},{"u":952,"l":129,"s":0,"a":false},{"u":573,"l":70,"s":0,"a":false},{"u":489,"l":360,"s":0,"a":true},{"u":999,"l":493,"s":1,"a":false},{"u":529,"l":386,"s":1,"a":true},{"u":878,"l":37,"s":1,"a":false},{"u":262,"l":102,"s":0,"a":true},{"u":808,"l":446,"s":0,"a":false},{"u":519,"l":344,"s":0,"a":false},{"u":839,"l":94,"s":0,"a":false},{"u":496,"l":20,"s":0,"a":true},{"u":924,"l":544,"s":1,"a":true},{"u":923,"l":656,"s":1,"a":true},{"u":606,"l":446,"s":0,"a":false},{"u":950,"l":487,"s":0,"a":true},{"u":687,"l":217,"s":1,"a":false},{"u":745,"l":474,"s":0,"a":false},{"u":634,"l":565,"s":1,"a":true},{"u":167,"l":65,"s":0,"a":false},{"u":500,"l":434,"s":1,"a":false},{"u":855,"l":288,"s":1,"a":false},{"u":551,"l":226,"s":0,"a":false},{"u":405,"l":69,"s":0,"a":false},{"u":412,"l":370,"s":1,"a":false},{"u":604,"l":203,"s":1,"a":false},{"u":703,"l":40,"s":1,"a":false},{"u":975,"l":242,"s":0,"a":true},{"u":961,"l":11,"s":1,"a":false},{"u":739,"l":48,"s":1,"a":false},{"u":913,"l":253,"s":0,"a":true},{"u":278,"l":211,"s":0,"a":false},{"u":897,"l":514,"s":0,"a":false},{"u":864,"l":763,"s":0,"a":false},{"u":569,"l":159,"s":1,"a":true},{"u":662,"l":590,"s":0,"a":false},{"u":638,"l":497,"s":1,"a":true},{"u":986,"l":276,"s":0,"a":true},{"u":992,"l":810,"s":0,"a":true},{"u":813,"l":596,"s":0,"a":true},{"u":407,"l":12,"s":0,"a":true},{"u":810,"l":370,"s":1,"a":true},{"u":738,"l":430,"s":0,"a":false},{"u":947,"l":879,"s":0,"a":true},{"u":115,"l":46,"s":0,"a":false},{"u":932,"l":873,"s":1,"a":true},{"u":72,"l":30,"s":1,"a":true},{"u":964,"l":77,"s":0,"a":false},{"u":758,"l":452,"s":1,"a":false},{"u":846,"l":441,"s":0,"a":false},{"u":748,"l":708,"s":1,"a":false},{"u":626,"l":371,"s":1,"a":true},{"u":362,"l":191,"s":1,"a":true},{"u":325,"l":186,"s":0,"a":true},{"u":866,"l":70,"s":1,"a":false},{"u":489,"l":231,"s":1,"a":false},{"u":399,"l":368,"s":0,"a":false},{"u":974,"l":199,"s":0,"a":false},{"u":285,"l":17,"s":1,"a":false},{"u":736,"l":648,"s":0,"a":false},{"u":598,"l":436,"s":0,"a":false},{"u":370,"l":77,"s":1,"a":false},{"u":814,"l":788,"s":1,"a":false},{"u":504,"l":45,"s":0,"a":true},{"u":839,"l":478,"s":0,"a":false},{"u":631,"l":114,"s":0,"a":false},{"u":944,"l":696,"s":0,"a":false},{"u":545,"l":13,"s":1,"a":true},{"u":430,"l":345,"s":0,"a":false},{"u":588,"l":308,"s":0,"a":false},{"u":876,"l":313,"s":1,"a":true},{"u":483,"l":294,"s":0,"a":true},{"u":526,"l":25,"s":1,"a":true},{"u":987,"l":878,"s":1,"a":false},{"u":937,"l":736,"s":1,"a":true},{"u":601,"l":143,"s":0,"a":true},{"u":828,"l":754,"s":1,"a":false},{"u":351,"l":210,"s":1,"a":false},{"u":501,"l":497,"s":0,"a":false},{"u":324,"l":224,"s":1,"a":false},{"u":474,"l":378,"s":0,"a":true},{"u":945,"l":132,"s":0,"a":true},{"u":883,"l":865,"s":1,"a":false},{"u":785,"l":339,"s":1,"a":true},{"u":989,"l":456,"s":0,"a":true},{"u":564,"l":436,"s":0,"a":false},{"u":47,"l":35,"s":0,"a":true},{"u":586,"l":92,"s":1,"a":true},{"u":993,"l":706,"s":1,"a":false},{"u":496,"l":448,"s":1,"a":true},{"u":860,"l":393,"s":0,"a":true},{"u":665,"l":49,"s":0,"a":true},{"u":972,"l":795,"s":1,"a":true},{"u":799,"l":603,"s":0,"a":true},{"u":685,"l":277,"s":0,"a":true},{"u":920,"l":171,"s":0,"a":true},{"u":665,"l":90,"s":0,"a":false},{"u":933,"l":551,"s":1,"a":false},{"u":925,"l":584,"s":0,"a":true},{"u":729,"l":681,"s":0,"a":false},{"u":786,"l":437,"s":0,"a":false},{"u":461,"l":274,"s":1,"a":true},{"u":524,"l":343,"s":1,"a":false},{"u":878,"l":254,"s":0,"a":false},{"u":990,"l":33,"s":0,"a":false},{"u":405,"l":135,"s":0,"a":false},{"u":433,"l":234,"s":1,"a":true},{"u":994,"l":745,"s":0,"a":true},{"u":665,"l":246,"s":0,"a":false},{"u":824,"l":439,"s":0,"a":true},{"u":979,"l":26,"s":1,"a":false},{"u":573,"l":40,"s":0,"a":false},{"u":959,"l":512,"s":0,"a":true},{"u":985,"l":751,"s":0,"a":false},{"u":391,"l":165,"s":1,"a":false},{"u":198,"l":153,"s":1,"a":false},{"u":879,"l":539,"s":1,"a":false},{"u":931,"l":207,"s":1,"a":true},{"u":659,"l":595,"s":1,"a":false},{"u":802,"l":695,"s":1,"a":false},{"u":499,"l":24,"s":0,"a":true},{"u":815,"l":150,"s":0,"a":true},{"u":857,"l":391,"s":1,"a":false},{"u":791,"l":334,"s":1,"a":false},{"u":824,"l":368,"s":0,"a":false},{"u":894,"l":356,"s":1,"a":true},{"u":916,"l":436,"s":0,"a":true},{"u":718,"l":137,"s":1,"a":false},{"u":103,"l":95,"s":1,"a":true},{"u":735,"l":110,"s":1,"a":false},{"u":934,"l":812,"s":0,"a":true},{"u":938,"l":292,"s":1,"a":true},{"u":967,"l":457,"s":1,"a":true},{"u":721,"l":476,"s":1,"a":true},{"u":537,"l":246,"s":0,"a":false},{"u":699,"l":150,"s":1,"a":false},{"u":927,"l":853,"s":1,"a":false},{"u":902,"l":330,"s":1,"a":true},{"u":993,"l":223,"s":1,"a":false},{"u":935,"l":382,"s":0,"a":true},{"u":313,"l":85,"s":1,"a":false},{"u":217,"l":139,"s":1,"a":false},{"u":407,"l":284,"s":0,"a":true},{"u":689,"l":57,"s":0,"a":false},{"u":352,"l":230,"s":0,"a":false},{"u":432,"l":114,"s":1,"a":false},{"u":744,"l":545,"s":1,"a":true},{"u":645,"l":587,"s":1,"a":true},{"u":439,"l":68,"s":0,"a":false},{"u":199,"l":57,"s":0,"a":true},{"u":653,"l":487,"s":0,"a":true},{"u":887,"l":633,"s":0,"a":true},{"u":784,"l":391,"s":1,"a":false},{"u":778,"l":676,"s":1,"a":true},{"u":331,"l":68,"s":0,"a":true},{"u":824,"l":411,"s":0,"a":true},{"u":996,"l":552,"s":1,"a":false},{"u":791,"l":42,"s":1,"a":false},{"u":897,"l":201,"s":1,"a":false},{"u":887,"l":739,"s":1,"a":false},{"u":772,"l":155,"s":0,"a":false},{"u":758,"l":110,"s":0,"a":true},{"u":700,"l":295,"s":0,"a":false},{"u":614,"l":448,"s":0,"a":true},{"u":261,"l":156,"s":1,"a":true},{"u":529,"l":306,"s":0,"a":false},{"u":570,"l":290,"s":0,"a":false},{"u":841,"l":551,"s":1,"a":true},{"u":878,"l":5,"s":0,"a":true},{"u":573,"l":90,"s":1,"a":false},{"u":389,"l":287,"s":1,"a":false},{"u":193,"l":109,"s":1,"a":true},{"u":883,"l":845,"s":0,"a":false},{"u":107,"l":86,"s":1,"a":true},{"u":743,"l":118,"s":0,"a":true},{"u":999,"l":224,"s":0,"a":true},{"u":872,"l":4,"s":1,"a":false},{"u":469,"l":87,"s":1,"a":true},{"u":261,"l":40,"s":1,"a":false},{"u":603,"l":97,"s":1,"a":true},{"u":837,"l":826,"s":1,"a":false},{"u":702,"l":343,"s":0,"a":false},{"u":457,"l":283,"s":0,"a":true},{"u":224,"l":173,"s":1,"a":false},{"u":315,"l":149,"s":0,"a":true},{"u":607,"l":529,"s":0,"a":false},{"u":449,"l":210,"s":1,"a":true},{"u":816,"l":379,"s":1,"a":false},{"u":657,"l":580,"s":0,"a":true},{"u":430,"l":381,"s":0,"a":true},{"u":608,"l":276,"s":1,"a":false},{"u":278,"l":55,"s":0,"a":false},{"u":218,"l":83,"s":0,"a":false},{"u":930,"l":609,"s":1,"a":true},{"u":346,"l":256,"s":1,"a":false},{"u":508,"l":191,"s":0,"a":false},{"u":368,"l":144,"s":1,"a":true},{"u":898,"l":323,"s":1,"a":true},{"u":428,"l":272,"s":0,"a":true},{"u":603,"l":446,"s":0,"a":true},{"u":814,"l":78,"s":0,"a":false},{"u":131,"l":128,"s":1,"a":true},{"u":905,"l":167,"s":1,"a":true},{"u":198,"l":38,"s":0,"a":false},{"u":434,"l":386,"s":0,"a":true},{"u":554,"l":321,"s":1,"a":true},{"u":552,"l":485,"s":1,"a":true},{"u":327,"l":266,"s":0,"a":false},{"u":872,"l":557,"s":1,"a":false},{"u":967,"l":328,"s":0,"a":false},{"u":990,"l":357,"s":1,"a":true},{"u":376,"l":145,"s":1,"a":false},{"u":892,"l":86,"s":1,"a":true},{"u":778,"l":362,"s":1,"a":true},{"u":735,"l":165,"s":0,"a":true},{"u":821,"l":44,"s":1,"a":true},{"u":397,"l":353,"s":1,"a":true},{"u":868,"l":135,"s":1,"a":false},{"u":781,"l":398,"s":1,"a":false},{"u":854,"l":211,"s":1,"a":true},{"u":886,"l":587,"s":1,"a":true},{"u":923,"l":684,"s":1,"a":false},{"u":924,"l":199,"s":1,"a":false},{"u":773,"l":199,"s":1,"a":false},{"u":960,"l":928,"s":0,"a":false},{"u":205,"l":110,"s":0,"a":true},{"u":463,"l":232,"s":1,"a":true},{"u":555,"l":375,"s":1,"a":false},{"u":909,"l":119,"s":1,"a":true},{"u":684,"l":412,"s":0,"a":false},{"u":930,"l":410,"s":1,"a":false},{"u":953,"l":859,"s":1,"a":true},{"u":302,"l":275,"s":0,"a":false},{"u":755,"l":199,"s":0,"a":false},{"u":696,"l":617,"s":0,"a":true},{"u":692,"l":298,"s":1,"a":true},{"u":599,"l":450,"s":0,"a":true},{"u":389,"l":77,"s":1,"a":false},{"u":548,"l":59,"s":1,"a":true},{"u":710,"l":24,"s":0,"a":false},{"u":898,"l":52,"s":0,"a":false},{"u":509,"l":92,"s":1,"a":true},{"u":727,"l":142,"s":1,"a":true},{"u":353,"l":293,"s":1,"a":false},{"u":579,"l":87,"s":0,"a":false},{"u":96,"l":59,"s":0,"a":false},{"u":167,"l":136,"s":0,"a":false},{"u":482,"l":333,"s":1,"a":true},{"u":718,"l":83,"s":0,"a":true},{"u":713,"l":55,"s":1,"a":true},{"u":947,"l":141,"s":0,"a":false},{"u":812,"l":513,"s":0,"a":true},{"u":801,"l":481,"s":1,"a":false},{"u":841,"l":721,"s":0,"a":true},{"u":917,"l":803,"s":1,"a":false},{"u":299,"l":262,"s":1,"a":false},{"u":446,"l":427,"s":1,"a":false},{"u":915,"l":664,"s":0,"a":true},{"u":603,"l":375,"s":0,"a":false},{"u":394,"l":131,"s":0,"a":false},{"u":973,"l":258,"s":1,"a":true},{"u":356,"l":88,"s":0,"a":false},{"u":904,"l":550,"s":0,"a":false},{"u":982,"l":964,"s":1,"a":true},{"u":864,"l":171,"s":0,"a":true},{"u":901,"l":812,"s":0,"a":true},{"u":596,"l":373,"s":1,"a":true},{"u":476,"l":411,"s":0,"a":false},{"u":532,"l":148,"s":1,"a":true},{"u":628,"l":431,"s":1,"a":false},{"u":507,"l":88,"s":1,"a":false},{"u":837,"l":418,"s":1,"a":false},{"u":241,"l":178,"s":1,"a":true},{"u":928,"l":117,"s":1,"a":true},{"u":630,"l":79,"s":0,"a":true},{"u":795,"l":646,"s":0,"a":true},{"u":674,"l":622,"s":1,"a":true},{"u":635,"l":634,"s":1,"a":true},{"u":427,"l":368,"s":1,"a":false},{"u":668,"l":473,"s":0,"a":true},{"u":828,"l":527,"s":1,"a":false},{"u":768,"l":150,"s":0,"a":false},{"u":668,"l":361,"s":0,"a":true},{"u":981,"l":246,"s":1,"a":true},{"u":995,"l":947,"s":0,"a":false},{"u":978,"l":412,"s":1,"a":true},{"u":555,"l":502,"s":1,"a":true},{"u":772,"l":457,"s":0,"a":true},{"u":856,"l":728,"s":0,"a":true},{"u":404,"l":263,"s":1,"a":true},{"u":636,"l":208,"s":0,"a":false},{"u":252,"l":209,"s":0,"a":false},{"u":986,"l":830,"s":1,"a":false},{"u":979,"l":43,"s":1,"a":false},{"u":907,"l":168,"s":1,"a":true},{"u":512,"l":91,"s":0,"a":false},{"u":608,"l":335,"s":1,"a":false},{"u":188,"l":43,"s":0,"a":false},{"u":909,"l":652,"s":1,"a":false},{"u":995,"l":151,"s":0,"a":false},{"u":764,"l":745,"s":0,"a":true},{"u":872,"l":114,"s":0,"a":true},{"u":823,"l":811,"s":1,"a":false},{"u":790,"l":361,"s":1,"a":true},{"u":818,"l":727,"s":1,"a":false},{"u":819,"l":1,"s":1,"a":true},{"u":673,"l":151,"s":1,"a":true},{"u":659,"l":314,"s":0,"a":false},{"u":982,"l":113,"s":1,"a":true},{"u":862,"l":397,"s":0,"a":true},{"u":490,"l":423,"s":1,"a":true},{"u":597,"l":558,"s":0,"a":false},{"u":974,"l":236,"s":1,"a":true},{"u":275,"l":262,"s":0,"a":true},{"u":687,"l":597,"s":1,"a":true},{"u":150,"l":53,"s":0,"a":false},{"u":814,"l":347,"s":1,"a":false},{"u":228,"l":103,"s":0,"a":true},{"u":761,"l":472,"s":0,"a":true},{"u":584,"l":398,"s":0,"a":false},{"u":568,"l":315,"s":1,"a":true},{"u":911,"l":273,"s":1,"a":false},{"u":802,"l":610,"s":1,"a":false},{"u":562,"l":348,"s":1,"a":true},{"u":815,"l":640,"s":1,"a":true},{"u":296,"l":53,"s":0,"a":true},{"u":524,"l":210,"s":1,"a":true},{"u":326,"l":266,"s":1,"a":true},{"u":994,"l":47,"s":1,"a":false},{"u":514,"l":403,"s":0,"a":true},{"u":949,"l":178,"s":0,"a":true},{"u":969,"l":140,"s":0,"a":true},{"u":811,"l":522,"s":1,"a":false},{"u":166,"l":123,"s":0,"a":true},{"u":579,"l":398,"s":1,"a":true},{"u":858,"l":720,"s":1,"a":true},{"u":641,"l":629,"s":0,"a":true},{"u":690,"l":598,"s":0,"a":false},{"u":816,"l":613,"s":1,"a":false},{"u":308,"l":54,"s":0,"a":false},{"u":139,"l":5,"s":0,"a":true},{"u":705,"l":360,"s":1,"a":true},{"u":521,"l":334,"s":1,"a":false},{"u":544,"l":268,"s":1,"a":false},{"u":828,"l":248,"s":1,"a":false},{"u":674,"l":104,"s":1,"a":true},{"u":965,"l":311,"s":1,"a":false},{"u":830,"l":20,"s":1,"a":false},{"u":401,"l":354,"s":0,"a":true},{"u":194,"l":26,"s":0,"a":false},{"u":32,"l":5,"s":1,"a":true},{"u":516,"l":471,"s":1,"a":true},{"u":535,"l":390,"s":0,"a":false},{"u":87,"l":86,"s":0,"a":true},{"u":850,"l":332,"s":1,"a":true},{"u":698,"l":576,"s":0,"a":true},{"u":906,"l":854,"s":1,"a":false},{"u":718,"l":118,"s":1,"a":false},{"u":470,"l":317,"s":0,"a":true},{"u":970,"l":132,"s":1,"a":true},{"u":842,"l":703,"s":0,"a":true},{"u":853,"l":610,"s":0,"a":false},{"u":787,"l":575,"s":1,"a":true},{"u":768,"l":348,"s":0,"a":false},{"u":979,"l":155,"s":0,"a":false},{"u":900,"l":861,"s":0,"a":false},{"u":508,"l":414,"s":1,"a":false},{"u":117,"l":53,"s":0,"a":true},{"u":131,"l":58,"s":1,"a":false},{"u":232,"l":207,"s":0,"a":false},{"u":683,"l":176,"s":1,"a":false},{"u":947,"l":527,"s":0,"a":false},{"u":577,"l":483,"s":0,"a":true},{"u":897,"l":802,"s":0,"a":false},{"u":667,"l":334,"s":0,"a":true},{"u":602,"l":366,"s":1,"a":false},{"u":885,"l":22,"s":0,"a":true},{"u":977,"l":501,"s":1,"a":true},{"u":990,"l":674,"s":1,"a":false},{"u":553,"l":67,"s":1,"a":false},{"u":811,"l":676,"s":1,"a":true},{"u":743,"l":45,"s":1,"a":false},{"u":666,"l":197,"s":1,"a":false},{"u":437,"l":409,"s":1,"a":true},{"u":98,"l":24,"s":1,"a":false},{"u":771,"l":68,"s":1,"a":false},{"u":709,"l":438,"s":0,"a":true},{"u":594,"l":115,"s":1,"a":false},{"u":435,"l":258,"s":1,"a":false},{"u":580,"l":559,"s":0,"a":true},{"u":724,"l":491,"s":0,"a":false},{"u":593,"l":33,"s":0,"a":false},{"u":549,"l":78,"s":0,"a":false},{"u":878,"l":502,"s":1,"a":true},{"u":766,"l":288,"s":0,"a":false},{"u":949,"l":239,"s":0,"a":false},{"u":361,"l":318,"s":1,"a":false},{"u":736,"l":604,"s":1,"a":false},{"u":996,"l":638,"s":1,"a":false},{"u":757,"l":144,"s":0,"a":false},{"u":775,"l":180,"s":1,"a":false},{"u":753,"l":58,"s":1,"a":false},{"u":932,"l":930,"s":1,"a":false},{"u":239,"l":145,"s":1,"a":true},{"u":822,"l":748,"s":1,"a":false},{"u":614,"l":21,"s":1,"a":false},{"u":192,"l":42,"s":0,"a":true},{"u":931,"l":909,"s":1,"a":false},{"u":396,"l":287,"s":1,"a":false},{"u":524,"l":315,"s":1,"a":false},{"u":331,"l":144,"s":1,"a":false},{"u":488,"l":49,"s":1,"a":false},{"u":395,"l":107,"s":0,"a":false},{"u":203,"l":69,"s":1,"a":true},{"u":533,"l":384,"s":0,"a":true},{"u":790,"l":311,"s":0,"a":false},{"u":652,"l":154,"s":1,"a":false},{"u":388,"l":173,"s":1,"a":false},{"u":573,"l":558,"s":1,"a":true},{"u":837,"l":617,"s":1,"a":true},{"u":170,"l":82,"s":1,"a":true},{"u":130,"l":59,"s":0,"a":false},{"u":483,"l":266,"s":0,"a":false},{"u":478,"l":223,"s":1,"a":false},{"u":978,"l":336,"s":1,"a":true},{"u":756,"l":80,"s":0,"a":true},{"u":597,"l":449,"s":1,"a":true},{"u":704,"l":420,"s":1,"a":true},{"u":533,"l":202,"s":0,"a":false},{"u":872,"l":218,"s":0,"a":false},{"u":895,"l":330,"s":1,"a":false},{"u":727,"l":512,"s":0,"a":false},{"u":688,"l":191,"s":0,"a":true},{"u":981,"l":142,"s":0,"a":true},{"u":225,"l":121,"s":1,"a":true},{"u":581,"l":419,"s":0,"a":true},{"u":610,"l":242,"s":0,"a":true},{"u":973,"l":381,"s":0,"a":false},{"u":677,"l":474,"s":0,"a":true},{"u":939,"l":395,"s":1,"a":true},{"u":927,"l":281,"s":1,"a":false},{"u":986,"l":361,"s":0,"a":false},{"u":964,"l":704,"s":1,"a":false},{"u":965,"l":477,"s":0,"a":false},{"u":479,"l":268,"s":0,"a":false},{"u":901,"l":460,"s":0,"a":true},{"u":570,"l":511,"s":0,"a":false},{"u":875,"l":864,"s":0,"a":false},{"u":889,"l":365,"s":1,"a":true},{"u":957,"l":271,"s":0,"a":true},{"u":981,"l":297,"s":0,"a":true},{"u":846,"l":528,"s":0,"a":false},{"u":723,"l":164,"s":0,"a":true},{"u":366,"l":360,"s":1,"a":false},{"u":852,"l":93,"s":1,"a":true},{"u":128,"l":20,"s":1,"a":true},{"u":759,"l":39,"s":1,"a":true},{"u":644,"l":172,"s":0,"a":true},{"u":835,"l":129,"s":0,"a":true},{"u":533,"l":218,"s":0,"a":false},{"u":303,"l":294,"s":0,"a":false},{"u":555,"l":103,"s":0,"a":false},{"u":935,"l":447,"s":1,"a":false},{"u":982,"l":866,"s":1,"a":false},{"u":820,"l":202,"s":1,"a":false},{"u":780,"l":372,"s":0,"a":true},{"u":315,"l":256,"s":0,"a":false},{"u":968,"l":417,"s":1,"a":false},{"u":978,"l":143,"s":1,"a":true},{"u":542,"l":112,"s":0,"a":true},{"u":692,"l":314,"s":0,"a":true},{"u":716,"l":185,"s":0,"a":false},{"u":836,"l":767,"s":0,"a":false},{"u":820,"l":397,"s":1,"a":true},{"u":956,"l":123,"s":0,"a":true},{"u":695,"l":186,"s":1,"a":true},{"u":847,"l":686,"s":0,"a":true},{"u":678,"l":435,"s":0,"a":false},{"u":500,"l":293,"s":0,"a":true},{"u":614,"l":41,"s":1,"a":true},{"u":461,"l":375,"s":0,"a":true},{"u":733,"l":551,"s":0,"a":true},{"u":370,"l":115,"s":1,"a":false},{"u":520,"l":253,"s":1,"a":true},{"u":919,"l":548,"s":1,"a":false},{"u":317,"l":224,"s":1,"a":false},{"u":874,"l":673,"s":1,"a":false},{"u":701,"l":224,"s":0,"a":false},{"u":505,"l":76,"s":1,"a":false},{"u":217,"l":123,"s":0,"a":false},{"u":846,"l":616,"s":1,"a":true},{"u":855,"l":561,"s":1,"a":false},{"u":900,"l":402,"s":1,"a":true},{"u":602,"l":14,"s":0,"a":false},{"u":902,"l":860,"s":1,"a":false},{"u":502,"l":313,"s":1,"a":false},{"u":858,"l":462,"s":1,"a":true},{"u":906,"l":182,"s":0,"a":false},{"u":971,"l":263,"s":1,"a":false},{"u":678,"l":668,"s":1,"a":true},{"u":478,"l":49,"s":1,"a":false},{"u":512,"l":322,"s":0,"a":false},{"u":437,"l":384,"s":1,"a":true},{"u":316,"l":38,"s":1,"a":true},{"u":952,"l":834,"s":1,"a":false},{"u":554,"l":28,"s":1,"a":false},{"u":440,"l":243,"s":0,"a":false},{"u":434,"l":421,"s":1,"a":true},{"u":848,"l":795,"s":0,"a":true},{"u":915,"l":428,"s":1,"a":true},{"u":819,"l":346,"s":0,"a":false},{"u":621,"l":456,"s":0,"a":true},{"u":520,"l":500,"s":1,"a":false},{"u":989,"l":966,"s":1,"a":false},{"u":806,"l":204,"s":0,"a":true},{"u":240,"l":94,"s":0,"a":true},{"u":354,"l":20,"s":1,"a":false},{"u":277,"l":215,"s":1,"a":true},{"u":790,"l":600,"s":1,"a":false},{"u":671,"l":317,"s":0,"a":true},{"u":332,"l":278,"s":1,"a":true},{"u":228,"l":63,"s":0,"a":true},{"u":980,"l":638,"s":0,"a":true},{"u":819,"l":549,"s":0,"a":true},{"u":284,"l":195,"s":1,"a":true},{"u":364,"l":290,"s":1,"a":false},{"u":177,"l":112,"s":0,"a":false},{"u":724,"l":495,"s":0,"a":false},{"u":857,"l":386,"s":1,"a":false},{"u":546,"l":339,"s":0,"a":true},{"u":975,"l":804,"s":0,"a":false},{"u":933,"l":714,"s":0,"a":false},{"u":936,"l":375,"s":1,"a":true},{"u":826,"l":7,"s":1,"a":false},{"u":726,"l":176,"s":0,"a":true},{"u":731,"l":504,"s":1,"a":false},{"u":955,"l":954,"s":0,"a":true},{"u":294,"l":92,"s":0,"a":true},{"u":202,"l":86,"s":0,"a":true},{"u":928,"l":837,"s":1,"a":false},{"u":472,"l":212,"s":1,"a":true},{"u":729,"l":149,"s":0,"a":false},{"u":441,"l":64,"s":0,"a":false},{"u":158,"l":25,"s":1,"a":false},{"u":906,"l":789,"s":1,"a":false},{"u":746,"l":382,"s":1,"a":true},{"u":589,"l":587,"s":1,"a":false},{"u":527,"l":254,"s":0,"a":false},{"u":984,"l":348,"s":0,"a":false},{"u":161,"l":1,"s":0,"a":true},{"u":201,"l":7,"s":0,"a":false},{"u":860,"l":124,"s":1,"a":false},{"u":386,"l":370,"s":0,"a":true},{"u":518,"l":507,"s":1,"a":true},{"u":886,"l":96,"s":0,"a":true},{"u":280,"l":12,"s":0,"a":true},{"u":517,"l":364,"s":1,"a":true},{"u":916,"l":282,"s":0,"a":false},{"u":640,"l":202,"s":1,"a":true},{"u":882,"l":545,"s":0,"a":false},{"u":522,"l":7,"s":1,"a":false},{"u":918,"l":459,"s":0,"a":true},{"u":580,"l":467,"s":1,"a":true},{"u":813,"l":187,"s":1,"a":false},{"u":788,"l":127,"s":1,"a":false},{"u":770,"l":111,"s":1,"a":false},{"u":451,"l":121,"s":1,"a":false},{"u":620,"l":393,"s":1,"a":true},{"u":702,"l":36,"s":1,"a":false},{"u":710,"l":491,"s":1,"a":true},{"u":746,"l":556,"s":1,"a":true},{"u":975,"l":944,"s":1,"a":true},{"u":811,"l":4,"s":1,"a":true},{"u":64,"l":25,"s":0,"a":false},{"u":406,"l":16,"s":1,"a":true},{"u":729,"l":535,"s":1,"a":true},{"u":806,"l":166,"s":1,"a":true},{"u":566,"l":534,"s":1,"a":true},{"u":796,"l":332,"s":0,"a":true},{"u":588,"l":259,"s":0,"a":false},{"u":635,"l":220,"s":1,"a":false},{"u":780,"l":159,"s":0,"a":true},{"u":948,"l":654,"s":1,"a":true},{"u":354,"l":345,"s":0,"a":false},{"u":648,"l":408,"s":0,"a":true},{"u":854,"l":269,"s":0,"a":true},{"u":941,"l":710,"s":0,"a":true},{"u":507,"l":289,"s":0,"a":true},{"u":656,"l":255,"s":1,"a":false},{"u":35,"l":32,"s":1,"a":true},{"u":358,"l":328,"s":1,"a":false},{"u":426,"l":35,"s":1,"a":true},{"u":986,"l":950,"s":0,"a":false},{"u":462,"l":209,"s":0,"a":false},{"u":706,"l":11,"s":0,"a":true},{"u":838,"l":271,"s":0,"a":true},{"u":282,"l":125,"s":1,"a":false},{"u":713,"l":524,"s":1,"a":true},{"u":330,"l":110,"s":0,"a":true},{"u":908,"l":57,"s":0,"a":true},{"u":953,"l":91,"s":1,"a":false},{"u":864,"l":299,"s":1,"a":false},{"u":659,"l":305,"s":1,"a":true},{"u":504,"l":337,"s":0,"a":true},{"u":788,"l":591,"s":0,"a":true},{"u":958,"l":274,"s":0,"a":true},{"u":603,"l":2,"s":1,"a":false},{"u":735,"l":665,"s":0,"a":false},{"u":952,"l":797,"s":1,"a":true},{"u":829,"l":37,"s":1,"a":true},{"u":891,"l":890,"s":0,"a":true},{"u":982,"l":99,"s":0,"a":true},{"u":950,"l":334,"s":1,"a":true},{"u":892,"l":344,"s":0,"a":true},{"u":892,"l":214,"s":0,"a":false},{"u":649,"l":334,"s":1,"a":false},{"u":707,"l":118,"s":0,"a":false},{"u":942,"l":235,"s":0,"a":true},{"u":529,"l":317,"s":0,"a":true},{"u":634,"l":513,"s":1,"a":true},{"u":619,"l":496,"s":1,"a":true},{"u":886,"l":451,"s":0,"a":true},{"u":170,"l":60,"s":0,"a":true},{"u":834,"l":39,"s":1,"a":true},{"u":831,"l":497,"s":0,"a":true},{"u":880,"l":699,"s":1,"a":true},{"u":859,"l":853,"s":0,"a":true},{"u":925,"l":721,"s":1,"a":true},{"u":706,"l":45,"s":0,"a":false},{"u":924,"l":100,"s":0,"a":false},{"u":319,"l":258,"s":1,"a":true},{"u":243,"l":109,"s":1,"a":false},{"u":910,"l":202,"s":1,"a":true},{"u":919,"l":838,"s":1,"a":false},{"u":684,"l":147,"s":0,"a":false},{"u":962,"l":765,"s":1,"a":true},{"u":949,"l":623,"s":0,"a":false},{"u":448,"l":446,"s":0,"a":false},{"u":151,"l":34,"s":0,"a":true},{"u":810,"l":132,"s":1,"a":false},{"u":278,"l":228,"s":0,"a":true},{"u":874,"l":144,"s":0,"a":false},{"u":821,"l":708,"s":0,"a":true},{"u":319,"l":258,"s":1,"a":false},{"u":550,"l":400,"s":0,"a":true},{"u":818,"l":129,"s":0,"a":true},{"u":422,"l":219,"s":0,"a":false},{"u":916,"l":58,"s":0,"a":false},{"u":836,"l":190,"s":0,"a":true},{"u":863,"l":377,"s":0,"a":false},{"u":825,"l":54,"s":0,"a":false},{"u":436,"l":23,"s":0,"a":false},{"u":214,"l":119,"s":1,"a":true},{"u":452,"l":413,"s":0,"a":false},{"u":495,"l":320,"s":1,"a":true},{"u":819,"l":112,"s":0,"a":true},{"u":871,"l":442,"s":1,"a":true},{"u":833,"l":185,"s":0,"a":true},{"u":323,"l":144,"s":1,"a":true},{"u":755,"l":424,"s":0,"a":false},{"u":586,"l":73,"s":1,"a":true},{"u":397,"l":375,"s":0,"a":false},{"u":51,"l":47,"s":1,"a":true},{"u":399,"l":236,"s":0,"a":true},{"u":631,"l":451,"s":0,"a":true},{"u":544,"l":372,"s":0,"a":true},{"u":384,"l":374,"s":1,"a":false},{"u":574,"l":498,"s":0,"a":true},{"u":399,"l":266,"s":0,"a":false},{"u":676,"l":673,"s":0,"a":false},{"u":278,"l":185,"s":1,"a":false},{"u":431,"l":86,"s":1,"a":true},{"u":312,"l":112,"s":1,"a":false},{"u":306,"l":282,"s":0,"a":false},{"u":757,"l":391,"s":1,"a":true},{"u":476,"l":280,"s":1,"a":true},{"u":706,"l":704,"s":0,"a":true},{"u":601,"l":571,"s":0,"a":false},{"u":795,"l":766,"s":1,"a":true},{"u":121,"l":55,"s":0,"a":false},{"u":654,"l":418,"s":1,"a":true},{"u":259,"l":137,"s":1,"a":false},{"u":385,"l":71,"s":1,"a":false},{"u":765,"l":755,"s":1,"a":true},{"u":981,"l":681,"s":1,"a":false},{"u":48,"l":6,"s":1,"a":false},{"u":641,"l":72,"s":1,"a":true},{"u":943,"l":123,"s":1,"a":true},{"u":624,"l":178,"s":0,"a":false},{"u":659,"l":280,"s":1,"a":false},{"u":358,"l":132,"s":1,"a":true},{"u":627,"l":450,"s":1,"a":false},{"u":584,"l":413,"s":0,"a":false},{"u":882,"l":639,"s":1,"a":true},{"u":837,"l":155,"s":1,"a":true},{"u":504,"l":269,"s":0,"a":true},{"u":645,"l":478,"s":1,"a":false},{"u":977,"l":926,"s":1,"a":false},{"u":811,"l":369,"s":0,"a":true},{"u":469,"l":51,"s":1,"a":true},{"u":892,"l":328,"s":1,"a":false},{"u":999,"l":652,"s":1,"a":true},{"u":952,"l":97,"s":1,"a":false},{"u":945,"l":665,"s":0,"a":true},{"u":860,"l":184,"s":1,"a":true},{"u":869,"l":109,"s":0,"a":true},{"u":558,"l":523,"s":0,"a":true},{"u":666,"l":481,"s":0,"a":false},{"u":892,"l":216,"s":0,"a":true},{"u":301,"l":226,"s":0,"a":false},{"u":450,"l":250,"s":1,"a":false},{"u":777,"l":771,"s":0,"a":true},{"u":602,"l":222,"s":0,"a":true},{"u":826,"l":582,"s":1,"a":false},{"u":524,"l":294,"s":0,"a":false},{"u":855,"l":768,"s":1,"a":true},{"u":677,"l":399,"s":0,"a":false},{"u":491,"l":174,"s":0,"a":false},{"u":618,"l":237,"s":1,"a":false},{"u":456,"l":236,"s":0,"a":false},{"u":524,"l":145,"s":0,"a":true},{"u":675,"l":530,"s":1,"a":false},{"u":913,"l":484,"s":1,"a":false},{"u":932,"l":734,"s":1,"a":false},{"u":193,"l":102,"s":0,"a":false},{"u":977,"l":934,"s":1,"a":true},{"u":426,"l":276,"s":1,"a":false},{"u":284,"l":85,"s":1,"a":false},{"u":586,"l":107,"s":1,"a":true},{"u":942,"l":281,"s":0,"a":false},{"u":984,"l":112,"s":1,"a":true},{"u":486,"l":156,"s":0,"a":false},{"u":982,"l":161,"s":1,"a":true},{"u":562,"l":390,"s":0,"a":false},{"u":123,"l":94,"s":0,"a":true},{"u":390,"l":163,"s":0,"a":true},{"u":644,"l":5,"s":1,"a":false},{"u":647,"l":221,"s":0,"a":false},{"u":531,"l":241,"s":1,"a":true},{"u":585,"l":578,"s":0,"a":false},{"u":665,"l":423,"s":1,"a":false},{"u":919,"l":599,"s":0,"a":false},{"u":742,"l":45,"s":0,"a":false},{"u":235,"l":104,"s":1,"a":true},{"u":334,"l":81,"s":0,"a":true},{"u":588,"l":421,"s":0,"a":false},{"u":479,"l":168,"s":1,"a":true},{"u":528,"l":343,"s":1,"a":true},{"u":531,"l":369,"s":0,"a":true},{"u":570,"l":276,"s":0,"a":true},{"u":753,"l":366,"s":1,"a":false},{"u":796,"l":733,"s":1,"a":false},{"u":440,"l":308,"s":0,"a":false},{"u":609,"l":347,"s":1,"a":false},{"u":657,"l":623,"s":1,"a":false},{"u":802,"l":473,"s":1,"a":false},{"u":951,"l":162,"s":0,"a":false},{"u":555,"l":121,"s":0,"a":true},{"u":734,"l":326,"s":1,"a":true},{"u":994,"l":129,"s":0,"a":false},{"u":704,"l":551,"s":0,"a":false},{"u":900,"l":421,"s":1,"a":false},{"u":760,"l":190,"s":1,"a":true},{"u":640,"l":11,"s":0,"a":false},{"u":305,"l":263,"s":0,"a":true},{"u":678,"l":454,"s":0,"a":false},{"u":851,"l":424,"s":1,"a":false},{"u":661,"l":575,"s":0,"a":false},{"u":751,"l":265,"s":1,"a":false},{"u":525,"l":203,"s":0,"a":true},{"u":554,"l":208,"s":1,"a":true},{"u":877,"l":55,"s":1,"a":true},{"u":797,"l":580,"s":0,"a":false},{"u":785,"l":15,"s":1,"a":true},{"u":391,"l":44,"s":1,"a":true},{"u":432,"l":349,"s":0,"a":true},{"u":797,"l":571,"s":0,"a":false},{"u":504,"l":4,"s":1,"a":true},{"u":382,"l":185,"s":0,"a":false},{"u":834,"l":108,"s":0,"a":false},{"u":986,"l":683,"s":1,"a":false},{"u":931,"l":529,"s":1,"a":false},{"u":260,"l":149,"s":0,"a":false},{"u":946,"l":712,"s":0,"a":true},{"u":713,"l":147,"s":0,"a":true},{"u":973,"l":228,"s":1,"a":false},{"u":649,"l":560,"s":0,"a":false},{"u":999,"l":883,"s":0,"a":true},{"u":678,"l":488,"s":1,"a":true},{"u":878,"l":666,"s":0,"a":false},{"u":737,"l":70,"s":0,"a":true},{"u":687,"l":313,"s":0,"a":false},{"u":289,"l":119,"s":1,"a":true},{"u":598,"l":346,"s":0,"a":true},{"u":644,"l":140,"s":0,"a":false},{"u":864,"l":52,"s":0,"a":true},{"u":311,"l":34,"s":1,"a":true},{"u":605,"l":436,"s":1,"a":true},{"u":588,"l":523,"s":0,"a":true},{"u":938,"l":535,"s":1,"a":false},{"u":806,"l":320,"s":1,"a":false},{"u":852,"l":496,"s":0,"a":true},{"u":596,"l":375,"s":0,"a":true},{"u":996,"l":974,"s":0,"a":false},{"u":651,"l":233,"s":0,"a":true},{"u":681,"l":196,"s":0,"a":true},{"u":975,"l":723,"s":0,"a":false},{"u":729,"l":479,"s":0,"a":true},{"u":856,"l":735,"s":0,"a":true},{"u":876,"l":447,"s":0,"a":true},{"u":774,"l":390,"s":0,"a":false},{"u":603,"l":155,"s":1,"a":false},{"u":853,"l":537,"s":1,"a":false},{"u":639,"l":494,"s":1,"a":true},{"u":892,"l":678,"s":1,"a":false},{"u":670,"l":264,"s":0,"a":false},{"u":788,"l":282,"s":1,"a":false},{"u":873,"l":253,"s":1,"a":false},{"u":704,"l":627,"s":1,"a":false},{"u":941,"l":506,"s":1,"a":true},{"u":537,"l":512,"s":1,"a":true},{"u":972,"l":218,"s":0,"a":true},{"u":889,"l":472,"s":1,"a":false},{"u":576,"l":343,"s":1,"a":true},{"u":764,"l":186,"s":1,"a":false},{"u":934,"l":343,"s":0,"a":true},{"u":261,"l":43,"s":0,"a":false},{"u":665,"l":100,"s":1,"a":true},{"u":404,"l":231,"s":0,"a":true},{"u":419,"l":223,"s":0,"a":true},{"u":164,"l":68,"s":1,"a":true},{"u":856,"l":72,"s":0,"a":false},{"u":793,"l":628,"s":0,"a":true},{"u":777,"l":202,"s":1,"a":true},{"u":715,"l":615,"s":0,"a":true},{"u":837,"l":527,"s":0,"a":true},{"u":850,"l":518,"s":0,"a":true},{"u":677,"l":125,"s":1,"a":false},{"u":608,"l":543,"s":0,"a":true},{"u":941,"l":15,"s":1,"a":false},{"u":374,"l":200,"s":0,"a":true},{"u":28,"l":19,"s":1,"a":false},{"u":907,"l":798,"s":1,"a":true},{"u":697,"l":520,"s":0,"a":true},{"u":815,"l":791,"s":1,"a":false},{"u":625,"l":434,"s":1,"a":false},{"u":957,"l":462,"s":1,"a":true},{"u":842,"l":427,"s":1,"a":false},{"u":879,"l":807,"s":1,"a":false},{"u":263,"l":145,"s":1,"a":false},{"u":838,"l":302,"s":0,"a":false},{"u":598,"l":36,"s":0,"a":true},{"u":740,"l":154,"s":0,"a":true},{"u":440,"l":98,"s":0,"a":true},{"u":401,"l":278,"s":1,"a":false},{"u":717,"l":37,"s":0,"a":false},{"u":986,"l":531,"s":1,"a":true},{"u":907,"l":579,"s":0,"a":true},{"u":771,"l":499,"s":0,"a":true},{"u":299,"l":64,"s":1,"a":false},{"u":349,"l":87,"s":0,"a":false},{"u":503,"l":274,"s":1,"a":true},{"u":559,"l":443,"s":0,"a":true},{"u":697,"l":201,"s":1,"a":false},{"u":927,"l":926,"s":1,"a":true},{"u":585,"l":165,"s":0,"a":true},{"u":351,"l":232,"s":1,"a":false},{"u":923,"l":282,"s":1,"a":false},{"u":910,"l":583,"s":0,"a":true},{"u":746,"l":631,"s":0,"a":true},{"u":807,"l":804,"s":0,"a":true},{"u":392,"l":40,"s":1,"a":false},{"u":945,"l":565,"s":0,"a":false},{"u":309,"l":176,"s":1,"a":false},{"u":891,"l":825,"s":0,"a":true},{"u":707,"l":156,"s":0,"a":false},{"u":473,"l":43,"s":1,"a":false},{"u":618,"l":90,"s":1,"a":false},{"u":581,"l":489,"s":0,"a":false},{"u":974,"l":628,"s":0,"a":true},{"u":637,"l":107,"s":0,"a":true},{"u":883,"l":873,"s":1,"a":false},{"u":713,"l":185,"s":1,"a":true},{"u":361,"l":293,"s":1,"a":false},{"u":308,"l":123,"s":1,"a":true},{"u":475,"l":206,"s":1,"a":false},{"u":280,"l":49,"s":0,"a":false},{"u":760,"l":3,"s":1,"a":true},{"u":842,"l":556,"s":1,"a":false},{"u":738,"l":620,"s":1,"a":false},{"u":276,"l":96,"s":0,"a":false},{"u":836,"l":738,"s":1,"a":true},{"u":562,"l":24,"s":1,"a":false},{"u":463,"l":175,"s":1,"a":true},{"u":889,"l":186,"s":1,"a":true},{"u":878,"l":588,"s":0,"a":false},{"u":768,"l":227,"s":1,"a":false},{"u":835,"l":499,"s":1,"a":false},{"u":246,"l":11,"s":1,"a":false},{"u":659,"l":50,"s":1,"a":false},{"u":625,"l":521,"s":0,"a":true},{"u":998,"l":201,"s":0,"a":false},{"u":672,"l":351,"s":1,"a":true},{"u":732,"l":465,"s":1,"a":true},{"u":786,"l":261,"s":0,"a":true},{"u":512,"l":79,"s":0,"a":false},{"u":889,"l":837,"s":0,"a":true},{"u":907,"l":380,"s":1,"a":true},{"u":760,"l":594,"s":0,"a":false},{"u":676,"l":510,"s":0,"a":true},{"u":320,"l":87,"s":0,"a":true},{"u":372,"l":342,"s":1,"a":false},{"u":861,"l":603,"s":0,"a":true},{"u":799,"l":729,"s":1,"a":true},{"u":465,"l":457,"s":0,"a":true},{"u":522,"l":101,"s":1,"a":false},{"u":891,"l":236,"s":0,"a":false},{"u":783,"l":167,"s":1,"a":false},{"u":476,"l":406,"s":0,"a":false},{"u":492,"l":246,"s":0,"a":false},{"u":310,"l":122,"s":1,"a":true},{"u":629,"l":152,"s":0,"a":false},{"u":302,"l":268,"s":0,"a":false},{"u":637,"l":86,"s":0,"a":true},{"u":529,"l":207,"s":0,"a":false},{"u":592,"l":113,"s":1,"a":true},{"u":950,"l":742,"s":1,"a":false},{"u":308,"l":145,"s":1,"a":false},{"u":285,"l":2,"s":0,"a":true},{"u":717,"l":46,"s":1,"a":true},{"u":373,"l":162,"s":0,"a":true},{"u":342,"l":45,"s":1,"a":true},{"u":937,"l":605,"s":1,"a":true},{"u":612,"l":447,"s":1,"a":true},{"u":900,"l":97,"s":1,"a":true},{"u":490,"l":245,"s":0,"a":false},{"u":848,"l":443,"s":0,"a":true},{"u":389,"l":279,"s":1,"a":false},{"u":843,"l":177,"s":1,"a":false},{"u":702,"l":398,"s":1,"a":false},{"u":535,"l":345,"s":0,"a":true},{"u":919,"l":162,"s":1,"a":false},{"u":359,"l":126,"s":0,"a":false},{"u":915,"l":893,"s":1,"a":false},{"u":653,"l":371,"s":0,"a":false},{"u":264,"l":27,"s":0,"a":false},{"u":305,"l":56,"s":1,"a":true},{"u":431,"l":279,"s":1,"a":false},{"u":753,"l":221,"s":0,"a":false},{"u":985,"l":913,"s":1,"a":false},{"u":836,"l":761,"s":0,"a":true},{"u":532,"l":299,"s":0,"a":false},{"u":879,"l":686,"s":0,"a":false},{"u":730,"l":687,"s":1,"a":true},{"u":808,"l":528,"s":1,"a":true},{"u":637,"l":375,"s":0,"a":false},{"u":762,"l":54,"s":0,"a":false},{"u":573,"l":442,"s":0,"a":true},{"u":637,"l":497,"s":1,"a":false},{"u":976,"l":360,"s":0,"a":true},{"u":896,"l":385,"s":0,"a":true},{"u":616,"l":377,"s":1,"a":false},{"u":917,"l":49,"s":0,"a":false},{"u":713,"l":688,"s":1,"a":false},{"u":415,"l":252,"s":1,"a":true},{"u":800,"l":50,"s":0,"a":true},{"u":475,"l":253,"s":1,"a":false},{"u":872,"l":291,"s":0,"a":false},{"u":166,"l":37,"s":0,"a":false},{"u":301,"l":216,"s":1,"a":false},{"u":787,"l":514,"s":1,"a":true},{"u":905,"l":574,"s":0,"a":false},{"u":694,"l":269,"s":0,"a":false},{"u":335,"l":306,"s":0,"a":true},{"u":805,"l":39,"s":1,"a":false},{"u":488,"l":206,"s":0,"a":false},{"u":229,"l":149,"s":0,"a":false},{"u":281,"l":259,"s":0,"a":true},{"u":504,"l":287,"s":0,"a":true},{"u":868,"l":113,"s":1,"a":true},{"u":706,"l":687,"s":1,"a":false},{"u":881,"l":863,"s":0,"a":true},{"u":623,"l":550,"s":0,"a":true},{"u":886,"l":156,"s":0,"a":true},{"u":599,"l":140,"s":0,"a":false},{"u":982,"l":830,"s":0,"a":true},{"u":459,"l":324,"s":0,"a":false},{"u":981,"l":70,"s":1,"a":false},{"u":988,"l":13,"s":0,"a":false},{"u":580,"l":270,"s":1,"a":true},{"u":221,"l":201,"s":0,"a":false},{"u":252,"l":183,"s":1,"a":false},{"u":433,"l":297,"s":0,"a":true},{"u":966,"l":644,"s":0,"a":false},{"u":948,"l":165,"s":0,"a":true},{"u":760,"l":97,"s":0,"a":true},{"u":428,"l":170,"s":1,"a":true},{"u":981,"l":498,"s":0,"a":true},{"u":946,"l":129,"s":0,"a":false},{"u":56,"l":5,"s":0,"a":true},{"u":988,"l":779,"s":1,"a":false},{"u":513,"l":87,"s":0,"a":false},{"u":843,"l":805,"s":1,"a":true},{"u":905,"l":1,"s":1,"a":true},{"u":533,"l":165,"s":1,"a":true},{"u":848,"l":109,"s":0,"a":false},{"u":738,"l":452,"s":0,"a":true},{"u":525,"l":263,"s":1,"a":false},{"u":791,"l":462,"s":0,"a":false},{"u":893,"l":362,"s":0,"a":false},{"u":746,"l":690,"s":1,"a":false},{"u":974,"l":309,"s":1,"a":false},{"u":770,"l":109,"s":0,"a":false},{"u":451,"l":313,"s":1,"a":true},{"u":436,"l":212,"s":0,"a":true},{"u":316,"l":294,"s":0,"a":true},{"u":648,"l":359,"s":1,"a":false},{"u":517,"l":445,"s":0,"a":true},{"u":886,"l":667,"s":0,"a":false},{"u":169,"l":167,"s":1,"a":true},{"u":797,"l":740,"s":0,"a":false},{"u":203,"l":159,"s":1,"a":false},{"u":346,"l":118,"s":0,"a":false},{"u":686,"l":418,"s":0,"a":true},{"u":491,"l":288,"s":1,"a":true},{"u":659,"l":654,"s":0,"a":false},{"u":901,"l":18,"s":0,"a":false},{"u":649,"l":507,"s":1,"a":true},{"u":888,"l":30,"s":0,"a":false},{"u":719,"l":53,"s":0,"a":false},{"u":312,"l":166,"s":0,"a":false},{"u":636,"l":250,"s":1,"a":true},{"u":942,"l":940,"s":1,"a":false},{"u":151,"l":123,"s":0,"a":false},{"u":694,"l":561,"s":0,"a":true},{"u":679,"l":75,"s":0,"a":true},{"u":791,"l":700,"s":0,"a":false},{"u":540,"l":378,"s":1,"a":false},{"u":652,"l":473,"s":1,"a":true},{"u":933,"l":306,"s":1,"a":true},{"u":722,"l":677,"s":0,"a":false},{"u":624,"l":95,"s":0,"a":false},{"u":596,"l":282,"s":1,"a":false},{"u":998,"l":372,"s":1,"a":true},{"u":937,"l":839,"s":0,"a":false},{"u":984,"l":921,"s":0,"a":false},{"u":827,"l":411,"s":1,"a":true},{"u":622,"l":264,"s":0,"a":true},{"u":624,"l":201,"s":0,"a":true},{"u":770,"l":213,"s":0,"a":false},{"u":833,"l":183,"s":0,"a":false},{"u":930,"l":30,"s":1,"a":true},{"u":998,"l":107,"s":1,"a":false},{"u":851,"l":616,"s":1,"a":true},{"u":497,"l":173,"s":0,"a":true},{"u":222,"l":208,"s":0,"a":true},{"u":930,"l":401,"s":1,"a":false},{"u":904,"l":53,"s":1,"a":false},{"u":724,"l":683,"s":1,"a":true},{"u":710,"l":516,"s":1,"a":true},{"u":354,"l":61,"s":1,"a":true},{"u":458,"l":227,"s":0,"a":false},{"u":776,"l":396,"s":1,"a":false},{"u":968,"l":331,"s":1,"a":true},{"u":602,"l":276,"s":0,"a":true},{"u":520,"l":424,"s":1,"a":true},{"u":964,"l":150,"s":0,"a":true},{"u":784,"l":20,"s":1,"a":true},{"u":767,"l":243,"s":1,"a":false},{"u":82,"l":5,"s":1,"a":true},{"u":900,"l":822,"s":1,"a":false},{"u":581,"l":68,"s":0,"a":true},{"u":711,"l":151,"s":0,"a":false},{"u":581,"l":490,"s":0,"a":true},{"u":894,"l":203,"s":0,"a":true},{"u":909,"l":736,"s":1,"a":false},{"u":868,"l":388,"s":1,"a":true},{"u":855,"l":583,"s":1,"a":false},{"u":708,"l":113,"s":0,"a":true},{"u":842,"l":818,"s":0,"a":false},{"u":764,"l":441,"s":1,"a":true},{"u":433,"l":55,"s":0,"a":false},{"u":856,"l":732,"s":0,"a":false},{"u":548,"l":520,"s":0,"a":true},{"u":639,"l":142,"s":0,"a":false},{"u":179,"l":18,"s":1,"a":false},{"u":535,"l":205,"s":0,"a":true},{"u":922,"l":794,"s":0,"a":false},{"u":764,"l":263,"s":1,"a":false},{"u":878,"l":630,"s":1,"a":false},{"u":928,"l":704,"s":1,"a":false},{"u":468,"l":175,"s":0,"a":false},{"u":914,"l":883,"s":1,"a":false},{"u":779,"l":190,"s":1,"a":true},{"u":452,"l":207,"s":1,"a":false},{"u":373,"l":253,"s":1,"a":true},{"u":670,"l":296,"s":0,"a":false},{"u":794,"l":680,"s":1,"a":true},{"u":732,"l":32,"s":1,"a":false},{"u":449,"l":384,"s":1,"a":true},{"u":351,"l":13,"s":0,"a":true},{"u":701,"l":211,"s":0,"a":false},{"u":218,"l":186,"s":0,"a":false},{"u":180,"l":75,"s":0,"a":true},{"u":587,"l":118,"s":1,"a":false},{"u":859,"l":127,"s":0,"a":false},{"u":706,"l":91,"s":0,"a":false},{"u":365,"l":243,"s":1,"a":true},{"u":513,"l":171,"s":0,"a":true},{"u":748,"l":116,"s":1,"a":false},{"u":567,"l":271,"s":1,"a":true},{"u":751,"l":510,"s":1,"a":true},{"u":647,"l":623,"s":1,"a":false},{"u":970,"l":8,"s":1,"a":true},{"u":730,"l":62,"s":1,"a":true},{"u":428,"l":350,"s":0,"a":true},{"u":805,"l":319,"s":0,"a":false},{"u":674,"l":607,"s":0,"a":true},{"u":498,"l":324,"s":0,"a":true},{"u":988,"l":524,"s":0,"a":true},{"u":610,"l":329,"s":0,"a":false},{"u":643,"l":381,"s":1,"a":false},{"u":105,"l":20,"s":1,"a":false},{"u":385,"l":261,"s":1,"a":false},{"u":605,"l":302,"s":0,"a":false},{"u":869,"l":767,"s":0,"a":true},{"u":876,"l":40,"s":1,"a":true},{"u":571,"l":72,"s":0,"a":false},{"u":811,"l":161,"s":0,"a":false},{"u":202,"l":52,"s":0,"a":false},{"u":909,"l":816,"s":0,"a":false},{"u":923,"l":726,"s":0,"a":false},{"u":576,"l":342,"s":1,"a":true},{"u":547,"l":301,"s":1,"a":false},{"u":85,"l":18,"s":0,"a":false},{"u":443,"l":2,"s":0,"a":false},{"u":678,"l":173,"s":1,"a":false},{"u":959,"l":852,"s":1,"a":false},{"u":435,"l":119,"s":1,"a":false},{"u":178,"l":37,"s":1,"a":false},{"u":987,"l":1,"s":0,"a":true},{"u":535,"l":268,"s":0,"a":true},{"u":674,"l":92,"s":0,"a":false},{"u":245,"l":137,"s":1,"a":true},{"u":919,"l":431,"s":0,"a":false},{"u":754,"l":164,"s":0,"a":true},{"u":795,"l":497,"s":0,"a":false},{"u":992,"l":272,"s":1,"a":true},{"u":775,"l":614,"s":1,"a":false},{"u":75,"l":39,"s":0,"a":false},{"u":269,"l":102,"s":1,"a":true},{"u":667,"l":588,"s":0,"a":true},{"u":781,"l":434,"s":0,"a":false},{"u":469,"l":55,"s":1,"a":false},{"u":324,"l":225,"s":0,"a":true},{"u":484,"l":237,"s":0,"a":true},{"u":663,"l":266,"s":0,"a":true},{"u":952,"l":833,"s":0,"a":false},{"u":806,"l":598,"s":0,"a":false},{"u":587,"l":179,"s":1,"a":false},{"u":539,"l":27,"s":1,"a":false},{"u":744,"l":576,"s":1,"a":false},{"u":609,"l":494,"s":0,"a":false},{"u":653,"l":418,"s":1,"a":true},{"u":902,"l":840,"s":0,"a":true},{"u":818,"l":497,"s":0,"a":false},{"u":823,"l":101,"s":1,"a":false},{"u":813,"l":799,"s":1,"a":false},{"u":920,"l":827,"s":0,"a":false},{"u":677,"l":56,"s":0,"a":true},{"u":477,"l":260,"s":1,"a":false},{"u":998,"l":809,"s":1,"a":true},{"u":857,"l":177,"s":0,"a":true},{"u":272,"l":30,"s":0,"a":false},{"u":954,"l":100,"s":1,"a":false},{"u":651,"l":390,"s":1,"a":true},{"u":725,"l":260,"s":1,"a":false},{"u":123,"l":25,"s":0,"a":true},{"u":571,"l":232,"s":1,"a":false},{"u":629,"l":362,"s":0,"a":true},{"u":962,"l":765,"s":1,"a":false},{"u":819,"l":702,"s":1,"a":true},{"u":904,"l":703,"s":1,"a":true},{"u":415,"l":139,"s":0,"a":true},{"u":930,"l":188,"s":0,"a":false},{"u":832,"l":406,"s":1,"a":false},{"u":722,"l":534,"s":1,"a":true},{"u":984,"l":852,"s":1,"a":true},{"u":959,"l":318,"s":1,"a":true},{"u":578,"l":571,"s":1,"a":false},{"u":646,"l":341,"s":1,"a":true},{"u":449,"l":123,"s":1,"a":true},{"u":841,"l":292,"s":0,"a":false},{"u":148,"l":96,"s":0,"a":true},{"u":583,"l":547,"s":1,"a":false},{"u":395,"l":373,"s":0,"a":false},{"u":964,"l":479,"s":0,"a":false},{"u":928,"l":121,"s":0,"a":false},{"u":738,"l":189,"s":1,"a":false},{"u":973,"l":375,"s":0,"a":true},{"u":402,"l":330,"s":1,"a":false},{"u":972,"l":435,"s":1,"a":false},{"u":800,"l":44,"s":1,"a":true},{"u":836,"l":689,"s":0,"a":true},{"u":584,"l":407,"s":1,"a":false},{"u":575,"l":332,"s":0,"a":false},{"u":758,"l":707,"s":1,"a":false},{"u":912,"l":862,"s":0,"a":false},{"u":500,"l":337,"s":1,"a":true},{"u":629,"l":12,"s":0,"a":true},{"u":410,"l":262,"s":1,"a":true},{"u":901,"l":29,"s":1,"a":false},{"u":601,"l":89,"s":0,"a":false},{"u":666,"l":60,"s":0,"a":false},{"u":515,"l":500,"s":0,"a":false},{"u":303,"l":234,"s":1,"a":false},{"u":997,"l":305,"s":0,"a":true},{"u":698,"l":76,"s":0,"a":false},{"u":662,"l":5,"s":0,"a":false},{"u":478,"l":112,"s":0,"a":true},{"u":844,"l":413,"s":1,"a":true},{"u":735,"l":460,"s":0,"a":true},{"u":583,"l":269,"s":0,"a":false},{"u":941,"l":732,"s":0,"a":true},{"u":709,"l":13,"s":1,"a":true},{"u":801,"l":105,"s":1,"a":true},{"u":907,"l":691,"s":1,"a":true},{"u":812,"l":581,"s":0,"a":true},{"u":689,"l":558,"s":1,"a":false},{"u":735,"l":299,"s":0,"a":true},{"u":768,"l":757,"s":1,"a":false},{"u":991,"l":359,"s":1,"a":true},{"u":703,"l":213,"s":0,"a":true},{"u":732,"l":260,"s":0,"a":false},{"u":262,"l":220,"s":0,"a":true},{"u":809,"l":299,"s":1,"a":true},{"u":663,"l":257,"s":1,"a":true},{"u":632,"l":38,"s":1,"a":true},{"u":781,"l":65,"s":0,"a":true},{"u":858,"l":628,"s":1,"a":true},{"u":945,"l":929,"s":1,"a":false},{"u":487,"l":30,"s":0,"a":false},{"u":751,"l":506,"s":0,"a":true},{"u":892,"l":239,"s":1,"a":false},{"u":996,"l":158,"s":1,"a":false},{"u":928,"l":729,"s":0,"a":true},{"u":345,"l":72,"s":1,"a":true},{"u":901,"l":513,"s":1,"a":true},{"u":808,"l":530,"s":0,"a":true},{"u":820,"l":315,"s":0,"a":false},{"u":844,"l":333,"s":0,"a":false},{"u":785,"l":28,"s":1,"a":true},{"u":607,"l":478,"s":0,"a":true},{"u":606,"l":123,"s":0,"a":true},{"u":768,"l":128,"s":0,"a":true},{"u":636,"l":425,"s":0,"a":true},{"u":173,"l":125,"s":1,"a":false},{"u":805,"l":429,"s":0,"a":true},{"u":697,"l":234,"s":0,"a":true},{"u":879,"l":705,"s":1,"a":false},{"u":838,"l":310,"s":1,"a":true},{"u":547,"l":95,"s":0,"a":true},{"u":590,"l":382,"s":1,"a":true},{"u":895,"l":248,"s":0,"a":true},{"u":353,"l":295,"s":0,"a":false},{"u":294,"l":191,"s":0,"a":true},{"u":921,"l":380,"s":0,"a":false},{"u":411,"l":57,"s":0,"a":true},{"u":603,"l":120,"s":1,"a":false},{"u":640,"l":331,"s":0,"a":true},{"u":823,"l":55,"s":1,"a":false},{"u":806,"l":686,"s":0,"a":false},{"u":843,"l":306,"s":0,"a":true},{"u":933,"l":503,"s":1,"a":true},{"u":613,"l":85,"s":0,"a":true},{"u":259,"l":6,"s":0,"a":false},{"u":155,"l":61,"s":1,"a":true},{"u":877,"l":474,"s":1,"a":true},{"u":559,"l":180,"s":1,"a":false},{"u":730,"l":251,"s":1,"a":false},{"u":888,"l":623,"s":1,"a":false},{"u":96,"l":94,"s":1,"a":false},{"u":604,"l":446,"s":1,"a":true},{"u":236,"l":170,"s":0,"a":true},{"u":896,"l":228,"s":1,"a":true},{"u":865,"l":721,"s":1,"a":true},{"u":146,"l":40,"s":0,"a":false},{"u":776,"l":672,"s":0,"a":true},{"u":707,"l":1,"s":1,"a":true},{"u":861,"l":683,"s":0,"a":false},{"u":746,"l":296,"s":0,"a":true},{"u":961,"l":185,"s":0,"a":false},{"u":889,"l":577,"s":1,"a":true},{"u":838,"l":470,"s":0,"a":false},{"u":793,"l":23,"s":1,"a":false},{"u":996,"l":245,"s":1,"a":false},{"u":959,"l":47,"s":1,"a":false},{"u":356,"l":76,"s":1,"a":false},{"u":661,"l":396,"s":0,"a":true},{"u":479,"l":427,"s":1,"a":true},{"u":355,"l":177,"s":1,"a":true},{"u":43,"l":2,"s":1,"a":false},{"u":881,"l":738,"s":0,"a":false},{"u":602,"l":51,"s":1,"a":true},{"u":667,"l":463,"s":1,"a":true},{"u":928,"l":743,"s":1,"a":false},{"u":860,"l":156,"s":0,"a":true},{"u":871,"l":516,"s":1,"a":true},{"u":800,"l":166,"s":0,"a":false},{"u":901,"l":879,"s":1,"a":false},{"u":811,"l":696,"s":0,"a":true},{"u":773,"l":648,"s":0,"a":false},{"u":852,"l":698,"s":0,"a":false},{"u":732,"l":294,"s":0,"a":true},{"u":376,"l":71,"s":0,"a":false},{"u":899,"l":244,"s":0,"a":true},{"u":674,"l":487,"s":1,"a":true},{"u":800,"l":212,"s":1,"a":false},{"u":618,"l":365,"s":1,"a":true},{"u":663,"l":607,"s":0,"a":true},{"u":956,"l":797,"s":0,"a":false},{"u":137,"l":2,"s":1,"a":true},{"u":887,"l":346,"s":0,"a":true},{"u":614,"l":473,"s":0,"a":true},{"u":929,"l":441,"s":0,"a":false},{"u":587,"l":288,"s":1,"a":true},{"u":452,"l":296,"s":1,"a":true},{"u":897,"l":511,"s":0,"a":true},{"u":724,"l":520,"s":0,"a":true},{"u":582,"l":179,"s":1,"a":false},{"u":955,"l":690,"s":0,"a":false},{"u":340,"l":285,"s":1,"a":true},{"u":966,"l":922,"s":0,"a":false},{"u":62,"l":43,"s":1,"a":false},{"u":803,"l":561,"s":0,"a":false},{"u":873,"l":523,"s":0,"a":true},{"u":694,"l":282,"s":1,"a":false},{"u":636,"l":247,"s":0,"a":false},{"u":790,"l":13,"s":1,"a":true},{"u":795,"l":174,"s":0,"a":false},{"u":373,"l":341,"s":1,"a":false},{"u":896,"l":534,"s":0,"a":false},{"u":581,"l":158,"s":1,"a":false},{"u":604,"l":113,"s":0,"a":true},{"u":646,"l":131,"s":0,"a":false},{"u":868,"l":159,"s":1,"a":false},{"u":311,"l":209,"s":1,"a":true},{"u":512,"l":410,"s":0,"a":true},{"u":730,"l":116,"s":1,"a":true},{"u":495,"l":217,"s":0,"a":true},{"u":600,"l":127,"s":1,"a":true},{"u":425,"l":356,"s":0,"a":false},{"u":810,"l":747,"s":0,"a":false},{"u":788,"l":629,"s":0,"a":false},{"u":968,"l":933,"s":0,"a":false},{"u":444,"l":175,"s":0,"a":false},{"u":799,"l":99,"s":0,"a":true},{"u":939,"l":414,"s":1,"a":true},{"u":627,"l":239,"s":1,"a":true},{"u":743,"l":119,"s":1,"a":false},{"u":607,"l":577,"s":0,"a":true},{"u":133,"l":122,"s":1,"a":false},{"u":980,"l":779,"s":1,"a":true},{"u":776,"l":512,"s":0,"a":false},{"u":252,"l":244,"s":0,"a":true},{"u":613,"l":508,"s":1,"a":true},{"u":777,"l":411,"s":1,"a":false},{"u":534,"l":182,"s":1,"a":true},{"u":648,"l":108,"s":0,"a":true},{"u":887,"l":27,"s":0,"a":false},{"u":359,"l":317,"s":0,"a":false},{"u":590,"l":147,"s":1,"a":true},{"u":778,"l":457,"s":0,"a":true},{"u":649,"l":515,"s":0,"a":true},{"u":821,"l":316,"s":1,"a":true},{"u":441,"l":115,"s":0,"a":false},{"u":613,"l":19,"s":1,"a":true},{"u":602,"l":320,"s":1,"a":false},{"u":874,"l":861,"s":1,"a":false},{"u":750,"l":406,"s":0,"a":true},{"u":493,"l":243,"s":1,"a":true},{"u":735,"l":422,"s":1,"a":false},{"u":386,"l":384,"s":0,"a":true},{"u":917,"l":493,"s":1,"a":true},{"u":672,"l":286,"s":1,"a":false},{"u":479,"l":333,"s":0,"a":false},{"u":962,"l":268,"s":1,"a":false},{"u":404,"l":197,"s":0,"a":false},{"u":569,"l":362,"s":1,"a":true},{"u":572,"l":139,"s":1,"a":true},{"u":894,"l":737,"s":0,"a":false},{"u":796,"l":473,"s":1,"a":true},{"u":384,"l":227,"s":0,"a":false},{"u":954,"l":375,"s":0,"a":false},{"u":626,"l":124,"s":0,"a":true},{"u":599,"l":48,"s":0,"a":true},{"u":840,"l":351,"s":1,"a":false},{"u":435,"l":275,"s":1,"a":false},{"u":818,"l":310,"s":1,"a":true},{"u":254,"l":47,"s":0,"a":true},{"u":735,"l":545,"s":0,"a":true},{"u":665,"l":592,"s":1,"a":false},{"u":618,"l":399,"s":0,"a":false},{"u":568,"l":530,"s":0,"a":true},{"u":656,"l":651,"s":0,"a":false},{"u":761,"l":337,"s":0,"a":false},{"u":601,"l":70,"s":0,"a":true},{"u":762,"l":18,"s":1,"a":true},{"u":624,"l":425,"s":1,"a":false},{"u":666,"l":158,"s":1,"a":true},{"u":727,"l":322,"s":1,"a":false},{"u":959,"l":115,"s":0,"a":false},{"u":319,"l":14,"s":0,"a":false},{"u":772,"l":746,"s":0,"a":true},{"u":678,"l":214,"s":1,"a":false},{"u":515,"l":246,"s":0,"a":false},{"u":534,"l":511,"s":1,"a":false},{"u":628,"l":132,"s":0,"a":false},{"u":971,"l":663,"s":1,"a":true},{"u":437,"l":127,"s":0,"a":false},{"u":720,"l":541,"s":0,"a":false},{"u":864,"l":429,"s":0,"a":false},{"u":913,"l":348,"s":0,"a":true},{"u":119,"l":86,"s":0,"a":false},{"u":991,"l":235,"s":1,"a":false},{"u":491,"l":314,"s":1,"a":false},{"u":860,"l":165,"s":0,"a":false},{"u":700,"l":666,"s":0,"a":false},{"u":973,"l":614,"s":0,"a":false},{"u":775,"l":542,"s":1,"a":false},{"u":788,"l":488,"s":0,"a":false},{"u":988,"l":92,"s":0,"a":false},{"u":668,"l":147,"s":0,"a":true},{"u":853,"l":552,"s":1,"a":true},{"u":509,"l":57,"s":0,"a":false},{"u":467,"l":191,"s":0,"a":true},{"u":685,"l":619,"s":1,"a":true},{"u":622,"l":181,"s":1,"a":false},{"u":956,"l":400,"s":0,"a":false},{"u":919,"l":270,"s":0,"a":true},{"u":322,"l":254,"s":1,"a":true},{"u":648,"l":635,"s":1,"a":false},{"u":781,"l":559,"s":1,"a":false},{"u":960,"l":881,"s":0,"a":true},{"u":311,"l":165,"s":0,"a":false},{"u":406,"l":7,"s":1,"a":false},{"u":399,"l":129,"s":0,"a":true},{"u":610,"l":189,"s":1,"a":true},{"u":844,"l":818,"s":0,"a":true},{"u":521,"l":76,"s":0,"a":false},{"u":299,"l":78,"s":0,"a":false},{"u":895,"l":617,"s":1,"a":true},{"u":530,"l":407,"s":1,"a":false},{"u":976,"l":588,"s":1,"a":false},{"u":422,"l":359,"s":1,"a":false},{"u":939,"l":253,"s":0,"a":true},{"u":830,"l":480,"s":0,"a":false},{"u":513,"l":46,"s":1,"a":true},{"u":924,"l":649,"s":1,"a":false},{"u":472,"l":373,"s":1,"a":true},{"u":783,"l":348,"s":1,"a":true},{"u":628,"l":147,"s":1,"a":false},{"u":984,"l":687,"s":0,"a":false},{"u":804,"l":521,"s":0,"a":false},{"u":911,"l":194,"s":1,"a":false},{"u":800,"l":146,"s":0,"a":true},{"u":606,"l":537,"s":0,"a":true},{"u":558,"l":46,"s":1,"a":true},{"u":965,"l":749,"s":0,"a":true},{"u":389,"l":284,"s":0,"a":false},{"u":136,"l":32,"s":1,"a":false},{"u":692,"l":513,"s":1,"a":true},{"u":944,"l":194,"s":0,"a":true},{"u":700,"l":229,"s":0,"a":false},{"u":531,"l":285,"s":0,"a":true},{"u":555,"l":7,"s":0,"a":true},{"u":565,"l":283,"s":1,"a":false},{"u":455,"l":193,"s":1,"a":true},{"u":537,"l":491,"s":1,"a":true},{"u":997,"l":688,"s":0,"a":false},{"u":854,"l":320,"s":1,"a":true},{"u":400,"l":140,"s":0,"a":true},{"u":776,"l":127,"s":1,"a":false},{"u":899,"l":764,"s":0,"a":false},{"u":851,"l":372,"s":0,"a":true},{"u":527,"l":227,"s":0,"a":true},{"u":320,"l":158,"s":0,"a":false},{"u":938,"l":194,"s":0,"a":true},{"u":587,"l":410,"s":0,"a":false},{"u":573,"l":79,"s":1,"a":true},{"u":366,"l":26,"s":0,"a":false},{"u":723,"l":118,"s":1,"a":true},{"u":629,"l":343,"s":1,"a":false},{"u":438,"l":159,"s":0,"a":false},{"u":489,"l":337,"s":1,"a":true},{"u":990,"l":360,"s":1,"a":false},{"u":452,"l":419,"s":0,"a":false},{"u":526,"l":5,"s":1,"a":true},{"u":848,"l":429,"s":1,"a":true},{"u":659,"l":100,"s":0,"a":true},{"u":416,"l":387,"s":1,"a":false},{"u":993,"l":714,"s":1,"a":true},{"u":399,"l":173,"s":0,"a":true},{"u":605,"l":370,"s":1,"a":true},{"u":648,"l":581,"s":1,"a":false},{"u":633,"l":481,"s":0,"a":true},{"u":848,"l":733,"s":0,"a":false},{"u":903,"l":700,"s":0,"a":true},{"u":858,"l":831,"s":0,"a":false},{"u":657,"l":199,"s":0,"a":false},{"u":931,"l":260,"s":1,"a":true},{"u":971,"l":447,"s":0,"a":true},{"u":774,"l":203,"s":0,"a":true},{"u":928,"l":703,"s":0,"a":false},{"u":855,"l":571,"s":0,"a":false},{"u":688,"l":259,"s":1,"a":false},{"u":533,"l":270,"s":0,"a":false},{"u":710,"l":643,"s":0,"a":true},{"u":920,"l":883,"s":1,"a":true},{"u":784,"l":318,"s":1,"a":false},{"u":664,"l":172,"s":0,"a":false},{"u":907,"l":538,"s":0,"a":true},{"u":945,"l":554,"s":1,"a":false},{"u":955,"l":798,"s":0,"a":false},{"u":608,"l":126,"s":0,"a":true},{"u":644,"l":169,"s":0,"a":false},{"u":957,"l":649,"s":1,"a":true},{"u":900,"l":177,"s":1,"a":false},{"u":568,"l":153,"s":0,"a":true},{"u":667,"l":133,"s":1,"a":true},{"u":919,"l":715,"s":0,"a":true},{"u":700,"l":69,"s":0,"a":true},{"u":605,"l":484,"s":1,"a":false},{"u":818,"l":293,"s":0,"a":true},{"u":580,"l":503,"s":1,"a":true},{"u":919,"l":899,"s":1,"a":false},{"u":657,"l":563,"s":0,"a":true},{"u":230,"l":65,"s":0,"a":true},{"u":394,"l":282,"s":1,"a":false},{"u":971,"l":11,"s":0,"a":true},{"u":609,"l":80,"s":1,"a":false},{"u":854,"l":23,"s":1,"a":false},{"u":865,"l":579,"s":1,"a":false},{"u":461,"l":413,"s":1,"a":true},{"u":708,"l":400,"s":0,"a":false},{"u":499,"l":2,"s":1,"a":false},{"u":926,"l":576,"s":1,"a":true},{"u":721,"l":75,"s":0,"a":false},{"u":981,"l":263,"s":0,"a":true},{"u":950,"l":581,"s":1,"a":true},{"u":618,"l":140,"s":1,"a":true},{"u":736,"l":477,"s":0,"a":true},{"u":105,"l":84,"s":1,"a":false},{"u":900,"l":863,"s":1,"a":false},{"u":854,"l":366,"s":0,"a":true},{"u":728,"l":526,"s":1,"a":true},{"u":939,"l":96,"s":1,"a":true},{"u":845,"l":581,"s":0,"a":true},{"u":901,"l":772,"s":0,"a":true},{"u":529,"l":129,"s":0,"a":true},{"u":841,"l":246,"s":1,"a":false},{"u":111,"l":21,"s":0,"a":true},{"u":466,"l":222,"s":0,"a":true},{"u":614,"l":149,"s":0,"a":true},{"u":660,"l":275,"s":1,"a":false},{"u":546,"l":202,"s":1,"a":false},{"u":892,"l":418,"s":1,"a":false},{"u":608,"l":10,"s":1,"a":false},{"u":581,"l":481,"s":1,"a":false},{"u":661,"l":44,"s":1,"a":true},{"u":600,"l":580,"s":1,"a":true},{"u":765,"l":63,"s":1,"a":false},{"u":865,"l":483,"s":1,"a":false},{"u":908,"l":763,"s":1,"a":false},{"u":514,"l":199,"s":0,"a":false},{"u":825,"l":792,"s":1,"a":false},{"u":717,"l":212,"s":1,"a":false},{"u":625,"l":363,"s":0,"a":false},{"u":468,"l":220,"s":0,"a":true},{"u":907,"l":604,"s":0,"a":true},{"u":530,"l":139,"s":1,"a":false},{"u":888,"l":527,"s":0,"a":false},{"u":234,"l":74,"s":0,"a":true},{"u":509,"l":42,"s":0,"a":false},{"u":538,"l":103,"s":0,"a":false},{"u":666,"l":54,"s":1,"a":true},{"u":559,"l":406,"s":1,"a":false},{"u":932,"l":163,"s":0,"a":false},{"u":195,"l":67,"s":0,"a":true},{"u":954,"l":691,"s":0,"a":true},{"u":694,"l":308,"s":1,"a":false},{"u":750,"l":240,"s":0,"a":false},{"u":916,"l":145,"s":0,"a":true},{"u":430,"l":160,"s":1,"a":true},{"u":970,"l":462,"s":1,"a":false},{"u":916,"l":133,"s":0,"a":false},{"u":998,"l":892,"s":1,"a":false},{"u":902,"l":129,"s":1,"a":true},{"u":154,"l":55,"s":1,"a":true},{"u":516,"l":349,"s":1,"a":false},{"u":983,"l":971,"s":0,"a":false},{"u":970,"l":159,"s":1,"a":true},{"u":698,"l":368,"s":1,"a":true},{"u":707,"l":628,"s":0,"a":false},{"u":859,"l":643,"s":1,"a":true},{"u":742,"l":137,"s":1,"a":false},{"u":896,"l":343,"s":0,"a":true},{"u":389,"l":73,"s":1,"a":false},{"u":748,"l":204,"s":0,"a":true},{"u":533,"l":490,"s":0,"a":false},{"u":933,"l":521,"s":0,"a":false},{"u":499,"l":357,"s":1,"a":false},{"u":829,"l":327,"s":0,"a":true},{"u":820,"l":598,"s":1,"a":false},{"u":891,"l":701,"s":0,"a":false},{"u":869,"l":738,"s":1,"a":false},{"u":493,"l":427,"s":0,"a":false},{"u":889,"l":160,"s":0,"a":true},{"u":480,"l":107,"s":0,"a":true},{"u":520,"l":121,"s":1,"a":false},{"u":754,"l":718,"s":1,"a":false},{"u":111,"l":98,"s":1,"a":true},{"u":325,"l":265,"s":0,"a":true},{"u":696,"l":561,"s":0,"a":false},{"u":976,"l":808,"s":1,"a":true},{"u":849,"l":706,"s":0,"a":false},{"u":862,"l":54,"s":0,"a":true},{"u":682,"l":169,"s":0,"a":false},{"u":777,"l":290,"s":1,"a":true},{"u":691,"l":614,"s":1,"a":false},{"u":999,"l":995,"s":1,"a":false},{"u":952,"l":744,"s":1,"a":false},{"u":989,"l":299,"s":0,"a":false},{"u":864,"l":196,"s":0,"a":true},{"u":463,"l":411,"s":0,"a":false},{"u":740,"l":93,"s":1,"a":false},{"u":817,"l":41,"s":1,"a":false},{"u":506,"l":384,"s":1,"a":true},{"u":854,"l":574,"s":0,"a":true},{"u":585,"l":560,"s":1,"a":false},{"u":350,"l":92,"s":1,"a":true},{"u":320,"l":320,"s":0,"a":false},{"u":712,"l":664,"s":0,"a":true},{"u":639,"l":494,"s":1,"a":true},{"u":964,"l":511,"s":0,"a":false},{"u":604,"l":109,"s":0,"a":true},{"u":566,"l":102,"s":1,"a":true},{"u":767,"l":155,"s":0,"a":true},{"u":436,"l":213,"s":1,"a":true},{"u":115,"l":101,"s":1,"a":true},{"u":328,"l":213,"s":0,"a":true},{"u":643,"l":126,"s":0,"a":false},{"u":782,"l":745,"s":1,"a":false},{"u":641,"l":47,"s":0,"a":false},{"u":810,"l":37,"s":1,"a":true},{"u":410,"l":117,"s":1,"a":true},{"u":775,"l":388,"s":1,"a":false},{"u":977,"l":34,"s":1,"a":true},{"u":746,"l":493,"s":0,"a":false},{"u":997,"l":565,"s":0,"a":false},{"u":656,"l":91,"s":0,"a":true},{"u":500,"l":126,"s":0,"a":false},{"u":830,"l":799,"s":0,"a":false},{"u":617,"l":563,"s":0,"a":false},{"u":707,"l":617,"s":1,"a":false},{"u":916,"l":62,"s":0,"a":true},{"u":788,"l":130,"s":1,"a":true},{"u":637,"l":612,"s":1,"a":false},{"u":815,"l":767,"s":1,"a":true},{"u":867,"l":278,"s":0,"a":true},{"u":660,"l":241,"s":1,"a":true},{"u":807,"l":528,"s":0,"a":false},{"u":778,"l":687,"s":1,"a":true},{"u":679,"l":226,"s":0,"a":true},{"u":769,"l":212,"s":1,"a":true},{"u":675,"l":475,"s":0,"a":true},{"u":794,"l":87,"s":1,"a":true},{"u":999,"l":952,"s":1,"a":false},{"u":331,"l":289,"s":1,"a":true},{"u":506,"l":12,"s":1,"a":false},{"u":782,"l":128,"s":0,"a":true},{"u":540,"l":400,"s":1,"a":false},{"u":980,"l":943,"s":0,"a":true},{"u":375,"l":227,"s":1,"a":false},{"u":105,"l":88,"s":1,"a":false},{"u":981,"l":449,"s":1,"a":true},{"u":895,"l":799,"s":0,"a":true},{"u":615,"l":99,"s":1,"a":false},{"u":841,"l":707,"s":0,"a":false},{"u":518,"l":26,"s":1,"a":false},{"u":228,"l":160,"s":1,"a":true},{"u":752,"l":58,"s":0,"a":false},{"u":964,"l":14,"s":0,"a":true},{"u":496,"l":216,"s":1,"a":false},{"u":138,"l":41,"s":1,"a":true},{"u":895,"l":409,"s":1,"a":true},{"u":995,"l":334,"s":0,"a":false},{"u":250,"l":132,"s":0,"a":true},{"u":574,"l":385,"s":0,"a":false},{"u":534,"l":286,"s":0,"a":true},{"u":764,"l":183,"s":1,"a":false},{"u":634,"l":552,"s":1,"a":true},{"u":998,"l":621,"s":0,"a":false},{"u":662,"l":333,"s":0,"a":true},{"u":270,"l":174,"s":0,"a":true},{"u":664,"l":42,"s":1,"a":false},{"u":995,"l":38,"s":1,"a":false},{"u":917,"l":204,"s":1,"a":true},{"u":569,"l":309,"s":0,"a":true},{"u":719,"l":669,"s":0,"a":false},{"u":673,"l":239,"s":0,"a":false},{"u":980,"l":339,"s":1,"a":false},{"u":851,"l":729,"s":1,"a":false},{"u":953,"l":844,"s":0,"a":false},{"u":950,"l":224,"s":1,"a":true},{"u":420,"l":18,"s":1,"a":true},{"u":839,"l":670,"s":0,"a":false},{"u":854,"l":256,"s":1,"a":false},{"u":745,"l":89,"s":1,"a":false},{"u":834,"l":446,"s":1,"a":true},{"u":644,"l":59,"s":0,"a":true},{"u":496,"l":255,"s":0,"a":false},{"u":396,"l":325,"s":0,"a":false},{"u":112,"l":7,"s":1,"a":false},{"u":795,"l":497,"s":1,"a":false},{"u":670,"l":653,"s":1,"a":true},{"u":598,"l":52,"s":0,"a":false},{"u":793,"l":244,"s":0,"a":false},{"u":975,"l":829,"s":0,"a":true},{"u":575,"l":50,"s":1,"a":true},{"u":960,"l":99,"s":1,"a":true},{"u":261,"l":140,"s":0,"a":false},{"u":693,"l":115,"s":0,"a":true},{"u":266,"l":3,"s":0,"a":false},{"u":573,"l":256,"s":1,"a":true},{"u":310,"l":247,"s":0,"a":false},{"u":550,"l":277,"s":1,"a":false},{"u":745,"l":415,"s":1,"a":true},{"u":947,"l":563,"s":1,"a":false},{"u":189,"l":68,"s":0,"a":false},{"u":857,"l":680,"s":1,"a":false},{"u":851,"l":636,"s":0,"a":false},{"u":979,"l":879,"s":1,"a":true},{"u":463,"l":19,"s":0,"a":true},{"u":567,"l":361,"s":1,"a":true},{"u":711,"l":342,"s":0,"a":true},{"u":677,"l":366,"s":0,"a":true},{"u":699,"l":23,"s":1,"a":false},{"u":304,"l":59,"s":0,"a":false},{"u":703,"l":15,"s":1,"a":false},{"u":974,"l":669,"s":0,"a":false},{"u":428,"l":289,"s":0,"a":false},{"u":505,"l":46,"s":1,"a":true},{"u":646,"l":128,"s":0,"a":false},{"u":720,"l":220,"s":1,"a":true},{"u":731,"l":319,"s":0,"a":false},{"u":698,"l":657,"s":0,"a":true},{"u":501,"l":110,"s":1,"a":false},{"u":774,"l":468,"s":0,"a":false},{"u":390,"l":345,"s":0,"a":false},{"u":364,"l":189,"s":1,"a":true},{"u":560,"l":546,"s":1,"a":false},{"u":675,"l":442,"s":0,"a":false},{"u":409,"l":284,"s":0,"a":true},{"u":709,"l":435,"s":0,"a":false},{"u":610,"l":383,"s":1,"a":false},{"u":908,"l":399,"s":1,"a":false},{"u":873,"l":137,"s":1,"a":true},{"u":891,"l":115,"s":1,"a":false},{"u":524,"l":309,"s":0,"a":true},{"u":499,"l":322,"s":0,"a":false},{"u":530,"l":124,"s":1,"a":false},{"u":919,"l":740,"s":0,"a":true},{"u":687,"l":586,"s":0,"a":true},{"u":446,"l":431,"s":0,"a":false},{"u":868,"l":164,"s":1,"a":false},{"u":894,"l":66,"s":1,"a":false},{"u":824,"l":659,"s":0,"a":false},{"u":994,"l":194,"s":1,"a":false},{"u":389,"l":250,"s":0,"a":true},{"u":711,"l":244,"s":0,"a":false},{"u":359,"l":225,"s":1,"a":true},{"u":343,"l":246,"s":0,"a":false},{"u":162,"l":115,"s":1,"a":true},{"u":522,"l":130,"s":0,"a":false},{"u":319,"l":231,"s":0,"a":true},{"u":870,"l":176,"s":1,"a":false},{"u":892,"l":589,"s":0,"a":false},{"u":901,"l":787,"s":1,"a":false},{"u":524,"l":361,"s":1,"a":false},{"u":297,"l":192,"s":0,"a":true},{"u":704,"l":676,"s":1,"a":true},{"u":479,"l":67,"s":0,"a":true},{"u":770,"l":110,"s":1,"a":false},{"u":784,"l":526,"s":0,"a":false},{"u":882,"l":858,"s":0,"a":true},{"u":796,"l":595,"s":1,"a":true},{"u":259,"l":87,"s":0,"a":false},{"u":709,"l":97,"s":1,"a":true},{"u":697,"l":163,"s":1,"a":true},{"u":693,"l":82,"s":1,"a":true},{"u":782,"l":75,"s":0,"a":false},{"u":562,"l":63,"s":0,"a":false},{"u":967,"l":567,"s":1,"a":false},{"u":877,"l":220,"s":1,"a":true},{"u":607,"l":78,"s":0,"a":false},{"u":642,"l":284,"s":1,"a":true},{"u":838,"l":163,"s":1,"a":false},{"u":403,"l":234,"s":0,"a":false},{"u":769,"l":378,"s":0,"a":true},{"u":708,"l":425,"s":1,"a":true},{"u":269,"l":101,"s":1,"a":false},{"u":445,"l":395,"s":1,"a":true},{"u":363,"l":14,"s":1,"a":false},{"u":627,"l":415,"s":0,"a":true},{"u":794,"l":486,"s":0,"a":false},{"u":907,"l":704,"s":0,"a":true},{"u":642,"l":605,"s":0,"a":true},{"u":400,"l":148,"s":0,"a":true},{"u":913,"l":662,"s":0,"a":true},{"u":48,"l":9,"s":1,"a":false},{"u":800,"l":68,"s":1,"a":false},{"u":619,"l":331,"s":1,"a":true},{"u":996,"l":873,"s":1,"a":false},{"u":730,"l":720,"s":1,"a":false},{"u":313,"l":32,"s":1,"a":true},{"u":812,"l":768,"s":1,"a":false},{"u":752,"l":327,"s":1,"a":true},{"u":682,"l":65,"s":1,"a":false},{"u":571,"l":403,"s":0,"a":false},{"u":913,"l":563,"s":1,"a":false},{"u":911,"l":634,"s":0,"a":false},{"u":938,"l":508,"s":1,"a":false},{"u":752,"l":251,"s":0,"a":true},{"u":678,"l":348,"s":0,"a":true},{"u":842,"l":69,"s":0,"a":true},{"u":549,"l":167,"s":1,"a":false},{"u":975,"l":644,"s":1,"a":false},{"u":838,"l":789,"s":0,"a":false},{"u":742,"l":56,"s":1,"a":false},{"u":660,"l":653,"s":0,"a":false},{"u":222,"l":205,"s":0,"a":false},{"u":893,"l":116,"s":1,"a":true},{"u":801,"l":628,"s":1,"a":true},{"u":987,"l":464,"s":0,"a":false},{"u":559,"l":544,"s":1,"a":true},{"u":124,"l":73,"s":0,"a":true},{"u":934,"l":99,"s":1,"a":false},{"u":417,"l":164,"s":1,"a":true},{"u":597,"l":334,"s":1,"a":false},{"u":458,"l":458,"s":0,"a":true},{"u":712,"l":413,"s":1,"a":false},{"u":478,"l":258,"s":0,"a":false},{"u":886,"l":337,"s":1,"a":false},{"u":464,"l":312,"s":1,"a":false},{"u":323,"l":173,"s":1,"a":true},{"u":982,"l":494,"s":0,"a":true},{"u":812,"l":623,"s":0,"a":false},{"u":476,"l":98,"s":0,"a":true},{"u":906,"l":872,"s":0,"a":false},{"u":639,"l":9,"s":1,"a":true},{"u":819,"l":335,"s":0,"a":false},{"u":940,"l":425,"s":1,"a":true},{"u":803,"l":769,"s":0,"a":false},{"u":850,"l":764,"s":0,"a":false},{"u":911,"l":477,"s":0,"a":true},{"u":701,"l":543,"s":1,"a":false},{"u":892,"l":49,"s":1,"a":false},{"u":949,"l":34,"s":1,"a":true},{"u":95,"l":70,"s":1,"a":true},{"u":693,"l":647,"s":0,"a":false},{"u":667,"l":189,"s":0,"a":true},{"u":127,"l":65,"s":0,"a":true},{"u":900,"l":168,"s":0,"a":true},{"u":555,"l":239,"s":1,"a":true},{"u":340,"l":150,"s":1,"a":true},{"u":870,"l":136,"s":0,"a":false},{"u":799,"l":643,"s":1,"a":true},{"u":280,"l":80,"s":0,"a":false},{"u":587,"l":555,"s":0,"a":false},{"u":866,"l":749,"s":0,"a":true},{"u":404,"l":105,"s":1,"a":true},{"u":754,"l":225,"s":0,"a":false},{"u":812,"l":612,"s":0,"a":false},{"u":422,"l":317,"s":1,"a":true},{"u":932,"l":110,"s":1,"a":true},{"u":150,"l":12,"s":1,"a":true},{"u":775,"l":553,"s":1,"a":false},{"u":899,"l":411,"s":0,"a":false},{"u":504,"l":66,"s":1,"a":false},{"u":356,"l":258,"s":0,"a":true},{"u":660,"l":424,"s":1,"a":true},{"u":87,"l":15,"s":0,"a":false},{"u":754,"l":290,"s":0,"a":true},{"u":401,"l":315,"s":0,"a":true},{"u":248,"l":135,"s":0,"a":true},{"u":778,"l":262,"s":0,"a":true},{"u":737,"l":274,"s":0,"a":false},{"u":945,"l":550,"s":0,"a":false},{"u":967,"l":745,"s":1,"a":true},{"u":545,"l":216,"s":1,"a":false},{"u":881,"l":873,"s":0,"a":true},{"u":128,"l":42,"s":0,"a":true},{"u":775,"l":102,"s":0,"a":true},{"u":910,"l":3,"s":1,"a":true},{"u":932,"l":147,"s":0,"a":true},{"u":743,"l":512,"s":1,"a":false},{"u":973,"l":353,"s":1,"a":true},{"u":712,"l":677,"s":0,"a":false},{"u":738,"l":180,"s":0,"a":true},{"u":577,"l":342,"s":0,"a":true},{"u":654,"l":553,"s":1,"a":true},{"u":890,"l":518,"s":0,"a":true},{"u":452,"l":328,"s":1,"a":false},{"u":901,"l":511,"s":0,"a":true},{"u":890,"l":138,"s":1,"a":false},{"u":116,"l":53,"s":1,"a":false},{"u":924,"l":277,"s":0,"a":false},{"u":700,"l":642,"s":0,"a":true},{"u":994,"l":671,"s":0,"a":false},{"u":829,"l":200,"s":1,"a":false},{"u":796,"l":405,"s":1,"a":false},{"u":396,"l":109,"s":0,"a":true},{"u":693,"l":577,"s":0,"a":true},{"u":354,"l":217,"s":0,"a":true},{"u":889,"l":120,"s":0,"a":true},{"u":708,"l":407,"s":1,"a":true},{"u":904,"l":358,"s":1,"a":true},{"u":378,"l":119,"s":1,"a":false},{"u":770,"l":649,"s":0,"a":false},{"u":895,"l":761,"s":0,"a":true},{"u":762,"l":264,"s":0,"a":true},{"u":183,"l":17,"s":0,"a":true},{"u":392,"l":191,"s":1,"a":false},{"u":910,"l":829,"s":0,"a":false},{"u":688,"l":61,"s":1,"a":false},{"u":906,"l":573,"s":0,"a":true},{"u":342,"l":318,"s":1,"a":false},{"u":880,"l":573,"s":0,"a":false},{"u":775,"l":504,"s":0,"a":false},{"u":992,"l":373,"s":0,"a":false},{"u":924,"l":268,"s":0,"a":true},{"u":584,"l":95,"s":1,"a":true},{"u":731,"l":199,"s":1,"a":true},{"u":743,"l":301,"s":1,"a":false},{"u":819,"l":336,"s":1,"a":true},{"u":97,"l":11,"s":1,"a":false},{"u":793,"l":569,"s":0,"a":false},{"u":77,"l":60,"s":1,"a":false},{"u":935,"l":640,"s":0,"a":true},{"u":158,"l":104,"s":0,"a":true},{"u":905,"l":180,"s":1,"a":true},{"u":925,"l":670,"s":1,"a":true},{"u":476,"l":121,"s":1,"a":false},{"u":738,"l":192,"s":1,"a":true},{"u":824,"l":672,"s":1,"a":false},{"u":246,"l":84,"s":0,"a":true},{"u":981,"l":384,"s":0,"a":true},{"u":850,"l":576,"s":0,"a":false},{"u":471,"l":25,"s":1,"a":true},{"u":618,"l":517,"s":0,"a":true},{"u":947,"l":324,"s":0,"a":false},{"u":304,"l":112,"s":0,"a":false},{"u":667,"l":456,"s":1,"a":true},{"u":941,"l":126,"s":1,"a":false},{"u":430,"l":262,"s":0,"a":false},{"u":981,"l":589,"s":1,"a":false},{"u":940,"l":393,"s":0,"a":true},{"u":745,"l":587,"s":0,"a":false},{"u":859,"l":794,"s":1,"a":false},{"u":881,"l":478,"s":1,"a":true},{"u":944,"l":390,"s":1,"a":false},{"u":819,"l":737,"s":0,"a":false},{"u":38,"l":36,"s":0,"a":true},{"u":638,"l":181,"s":0,"a":false},{"u":944,"l":357,"s":1,"a":true},{"u":506,"l":67,"s":0,"a":true},{"u":672,"l":63,"s":0,"a":true},{"u":842,"l":668,"s":0,"a":false},{"u":950,"l":945,"s":0,"a":false},{"u":670,"l":256,"s":1,"a":false},{"u":995,"l":224,"s":0,"a":false},{"u":908,"l":842,"s":0,"a":true},{"u":224,"l":218,"s":0,"a":false},{"u":525,"l":114,"s":1,"a":true},{"u":935,"l":431,"s":0,"a":false},{"u":647,"l":609,"s":0,"a":true},{"u":930,"l":159,"s":0,"a":true},{"u":644,"l":354,"s":0,"a":false},{"u":703,"l":442,"s":1,"a":true},{"u":794,"l":728,"s":0,"a":true},{"u":942,"l":136,"s":1,"a":false},{"u":962,"l":354,"s":0,"a":true},{"u":949,"l":782,"s":1,"a":false},{"u":814,"l":742,"s":1,"a":false},{"u":518,"l":26,"s":0,"a":true},{"u":330,"l":322,"s":0,"a":true},{"u":346,"l":81,"s":1,"a":true},{"u":839,"l":773,"s":0,"a":true},{"u":796,"l":154,"s":1,"a":true},{"u":793,"l":621,"s":0,"a":true},{"u":914,"l":110,"s":1,"a":true},{"u":884,"l":222,"s":0,"a":false},{"u":955,"l":268,"s":1,"a":true},{"u":828,"l":62,"s":1,"a":true},{"u":950,"l":269,"s":1,"a":false},{"u":554,"l":64,"s":1,"a":true},{"u":879,"l":466,"s":1,"a":true},{"u":218,"l":86,"s":0,"a":false},{"u":631,"l":353,"s":1,"a":false},{"u":631,"l":444,"s":1,"a":true},{"u":780,"l":202,"s":0,"a":false},{"u":675,"l":14,"s":0,"a":false},{"u":346,"l":1,"s":1,"a":false},{"u":812,"l":299,"s":0,"a":true},{"u":900,"l":301,"s":1,"a":true},{"u":706,"l":589,"s":0,"a":false},{"u":694,"l":480,"s":0,"a":true},{"u":763,"l":705,"s":0,"a":true},{"u":744,"l":378,"s":0,"a":true},{"u":846,"l":590,"s":0,"a":false},{"u":791,"l":124,"s":0,"a":true},{"u":313,"l":16,"s":1,"a":true},{"u":914,"l":351,"s":1,"a":false},{"u":900,"l":334,"s":0,"a":true},{"u":203,"l":112,"s":0,"a":false},{"u":608,"l":353,"s":1,"a":false},{"u":875,"l":154,"s":1,"a":false},{"u":284,"l":130,"s":1,"a":true},{"u":760,"l":219,"s":0,"a":false},{"u":485,"l":53,"s":1,"a":true},{"u":468,"l":42,"s":1,"a":true},{"u":501,"l":223,"s":1,"a":true},{"u":656,"l":58,"s":0,"a":true},{"u":880,"l":340,"s":0,"a":false},{"u":987,"l":780,"s":0,"a":false},{"u":411,"l":221,"s":1,"a":true},{"u":631,"l":548,"s":0,"a":true},{"u":535,"l":55,"s":0,"a":false},{"u":568,"l":120,"s":0,"a":false},{"u":160,"l":21,"s":1,"a":false},{"u":547,"l":30,"s":1,"a":false},{"u":246,"l":152,"s":1,"a":true},{"u":657,"l":337,"s":0,"a":false},{"u":487,"l":417,"s":1,"a":false},{"u":709,"l":346,"s":0,"a":false},{"u":807,"l":138,"s":0,"a":false},{"u":732,"l":323,"s":0,"a":true},{"u":870,"l":92,"s":1,"a":false},{"u":747,"l":426,"s":1,"a":false},{"u":495,"l":67,"s":1,"a":false},{"u":789,"l":521,"s":1,"a":false},{"u":844,"l":360,"s":0,"a":false},{"u":910,"l":797,"s":1,"a":true},{"u":959,"l":289,"s":0,"a":false},{"u":585,"l":98,"s":1,"a":true},{"u":891,"l":289,"s":1,"a":true},{"u":915,"l":716,"s":0,"a":false},{"u":398,"l":341,"s":0,"a":true},{"u":939,"l":557,"s":1,"a":false},{"u":792,"l":386,"s":1,"a":false},{"u":913,"l":245,"s":0,"a":false},{"u":221,"l":10,"s":0,"a":true},{"u":925,"l":49,"s":1,"a":false},{"u":891,"l":149,"s":1,"a":false},{"u":545,"l":497,"s":0,"a":false},{"u":415,"l":68,"s":1,"a":false},{"u":954,"l":742,"s":0,"a":true},{"u":884,"l":78,"s":0,"a":false},{"u":352,"l":323,"s":0,"a":true},{"u":988,"l":277,"s":0,"a":true},{"u":992,"l":190,"s":1,"a":true},{"u":473,"l":443,"s":0,"a":true},{"u":437,"l":200,"s":0,"a":true},{"u":938,"l":200,"s":1,"a":false},{"u":938,"l":154,"s":0,"a":true},{"u":452,"l":372,"s":0,"a":false},{"u":701,"l":529,"s":0,"a":true},{"u":636,"l":279,"s":1,"a":false},{"u":407,"l":159,"s":1,"a":false},{"u":652,"l":498,"s":0,"a":false},{"u":687,"l":83,"s":0,"a":true},{"u":772,"l":424,"s":0,"a":true},{"u":518,"l":344,"s":1,"a":false},{"u":237,"l":30,"s":1,"a":false},{"u":921,"l":599,"s":1,"a":true},{"u":387,"l":352,"s":1,"a":false},{"u":468,"l":39,"s":1,"a":false},{"u":731,"l":133,"s":0,"a":false},{"u":338,"l":151,"s":0,"a":true},{"u":716,"l":224,"s":0,"a":false},{"u":616,"l":585,"s":0,"a":true},{"u":405,"l":186,"s":0,"a":false},{"u":180,"l":67,"s":0,"a":false},{"u":396,"l":158,"s":0,"a":false},{"u":814,"l":24,"s":1,"a":true},{"u":986,"l":469,"s":1,"a":true},{"u":808,"l":39,"s":1,"a":false},{"u":867,"l":824,"s":1,"a":true},{"u":807,"l":320,"s":0,"a":true},{"u":839,"l":146,"s":0,"a":false},{"u":245,"l":60,"s":1,"a":false},{"u":964,"l":288,"s":0,"a":false},{"u":756,"l":303,"s":1,"a":false},{"u":866,"l":226,"s":1,"a":false},{"u":627,"l":310,"s":1,"a":true},{"u":900,"l":16,"s":0,"a":false},{"u":794,"l":354,"s":0,"a":true},{"u":983,"l":277,"s":1,"a":true},{"u":976,"l":493,"s":1,"a":false},{"u":789,"l":652,"s":1,"a":true},{"u":478,"l":163,"s":1,"a":true},{"u":903,"l":814,"s":0,"a":true},{"u":372,"l":188,"s":1,"a":true},{"u":831,"l":222,"s":0,"a":false},{"u":991,"l":697,"s":0,"a":false},{"u":909,"l":628,"s":0,"a":false},{"u":426,"l":287,"s":0,"a":true},{"u":955,"l":255,"s":0,"a":false},{"u":657,"l":445,"s":0,"a":false},{"u":850,"l":453,"s":1,"a":false},{"u":562,"l":371,"s":1,"a":false},{"u":863,"l":315,"s":0,"a":false},{"u":778,"l":68,"s":0,"a":true},{"u":540,"l":380,"s":1,"a":false},{"u":329,"l":86,"s":1,"a":false},{"u":946,"l":653,"s":0,"a":false},{"u":626,"l":193,"s":1,"a":false},{"u":948,"l":905,"s":1,"a":false},{"u":784,"l":688,"s":1,"a":false},{"u":690,"l":58,"s":0,"a":true},{"u":896,"l":620,"s":0,"a":false},{"u":968,"l":98,"s":1,"a":true},{"u":597,"l":485,"s":0,"a":true},{"u":630,"l":477,"s":0,"a":false},{"u":577,"l":301,"s":1,"a":true},{"u":378,"l":358,"s":0,"a":false},{"u":357,"l":316,"s":1,"a":false},{"u":323,"l":85,"s":1,"a":true},{"u":235,"l":11,"s":1,"a":false},{"u":447,"l":161,"s":0,"a":true},{"u":158,"l":109,"s":0,"a":false},{"u":357,"l":311,"s":1,"a":false},{"u":411,"l":350,"s":1,"a":false},{"u":612,"l":539,"s":0,"a":false},{"u":591,"l":414,"s":1,"a":false},{"u":808,"l":702,"s":0,"a":false},{"u":924,"l":268,"s":0,"a":true},{"u":309,"l":158,"s":0,"a":true},{"u":708,"l":391,"s":1,"a":false},{"u":427,"l":194,"s":1,"a":false},{"u":787,"l":705,"s":1,"a":false},{"u":999,"l":75,"s":1,"a":false},{"u":885,"l":709,"s":0,"a":false},{"u":840,"l":224,"s":0,"a":true},{"u":550,"l":87,"s":0,"a":true},{"u":862,"l":824,"s":0,"a":false},{"u":377,"l":250,"s":0,"a":false},{"u":730,"l":328,"s":0,"a":true},{"u":923,"l":769,"s":1,"a":true},{"u":838,"l":137,"s":1,"a":false},{"u":663,"l":618,"s":0,"a":false},{"u":95,"l":1,"s":0,"a":false},{"u":679,"l":282,"s":0,"a":true},{"u":994,"l":775,"s":1,"a":false},{"u":411,"l":118,"s":0,"a":false},{"u":676,"l":81,"s":0,"a":false},{"u":965,"l":60,"s":1,"a":true},{"u":948,"l":47,"s":1,"a":false},{"u":749,"l":608,"s":1,"a":false},{"u":502,"l":242,"s":1,"a":true},{"u":858,"l":641,"s":1,"a":true},{"u":796,"l":222,"s":0,"a":true},{"u":790,"l":493,"s":0,"a":false},{"u":357,"l":190,"s":1,"a":false},{"u":959,"l":222,"s":0,"a":false},{"u":601,"l":288,"s":0,"a":true},{"u":957,"l":396,"s":0,"a":true},{"u":727,"l":64,"s":1,"a":true},{"u":747,"l":243,"s":1,"a":false},{"u":256,"l":69,"s":1,"a":false},{"u":730,"l":543,"s":1,"a":false},{"u":698,"l":664,"s":1,"a":false},{"u":951,"l":668,"s":1,"a":true},{"u":588,"l":171,"s":1,"a":false},{"u":573,"l":131,"s":0,"a":false},{"u":691,"l":510,"s":0,"a":true},{"u":906,"l":678,"s":0,"a":false},{"u":642,"l":256,"s":0,"a":false},{"u":890,"l":388,"s":1,"a":false},{"u":955,"l":869,"s":1,"a":true},{"u":155,"l":10,"s":0,"a":false},{"u":927,"l":495,"s":0,"a":true},{"u":415,"l":351,"s":0,"a":false},{"u":884,"l":380,"s":0,"a":false},{"u":569,"l":511,"s":0,"a":false},{"u":348,"l":73,"s":0,"a":true},{"u":822,"l":681,"s":1,"a":false},{"u":641,"l":108,"s":0,"a":false},{"u":554,"l":467,"s":1,"a":true},{"u":713,"l":613,"s":0,"a":false},{"u":956,"l":435,"s":1,"a":false},{"u":453,"l":128,"s":1,"a":true},{"u":417,"l":411,"s":0,"a":true},{"u":875,"l":297,"s":1,"a":false},{"u":723,"l":626,"s":0,"a":true},{"u":486,"l":372,"s":1,"a":true},{"u":728,"l":578,"s":1,"a":true},{"u":984,"l":295,"s":0,"a":false},{"u":368,"l":356,"s":1,"a":true},{"u":692,"l":280,"s":1,"a":true},{"u":817,"l":564,"s":1,"a":true},{"u":815,"l":604,"s":1,"a":true},{"u":320,"l":310,"s":0,"a":true},{"u":627,"l":379,"s":1,"a":true},{"u":874,"l":612,"s":0,"a":true},{"u":767,"l":587,"s":1,"a":true},{"u":441,"l":230,"s":1,"a":true},{"u":410,"l":230,"s":1,"a":false},{"u":768,"l":644,"s":1,"a":true},{"u":321,"l":285,"s":1,"a":false},{"u":723,"l":68,"s":1,"a":true},{"u":723,"l":115,"s":0,"a":false},{"u":511,"l":393,"s":1,"a":false},{"u":101,"l":44,"s":0,"a":false},{"u":371,"l":98,"s":1,"a":false},{"u":918,"l":661,"s":0,"a":false},{"u":982,"l":536,"s":1,"a":true},{"u":505,"l":293,"s":1,"a":false},{"u":911,"l":715,"s":0,"a":true},{"u":942,"l":531,"s":0,"a":false},{"u":709,"l":90,"s":0,"a":false},{"u":968,"l":254,"s":1,"a":true},{"u":929,"l":696,"s":0,"a":false},{"u":691,"l":575,"s":0,"a":true},{"u":342,"l":176,"s":1,"a":false},{"u":518,"l":313,"s":0,"a":false},{"u":419,"l":205,"s":0,"a":false},{"u":722,"l":643,"s":0,"a":false},{"u":224,"l":221,"s":1,"a":true},{"u":882,"l":529,"s":0,"a":true},{"u":936,"l":628,"s":0,"a":true},{"u":779,"l":203,"s":1,"a":false},{"u":620,"l":541,"s":0,"a":false},{"u":208,"l":139,"s":1,"a":true},{"u":641,"l":477,"s":1,"a":true},{"u":633,"l":383,"s":1,"a":false},{"u":383,"l":250,"s":0,"a":true},{"u":597,"l":551,"s":0,"a":false},{"u":639,"l":583,"s":0,"a":true},{"u":998,"l":862,"s":0,"a":false},{"u":675,"l":433,"s":1,"a":true},{"u":525,"l":350,"s":1,"a":false},{"u":980,"l":935,"s":0,"a":true},{"u":929,"l":574,"s":0,"a":false},{"u":442,"l":441,"s":1,"a":true},{"u":175,"l":1,"s":0,"a":true},{"u":557,"l":4,"s":1,"a":true},{"u":107,"l":81,"s":0,"a":false},{"u":894,"l":61,"s":0,"a":true},{"u":662,"l":523,"s":1,"a":true},{"u":971,"l":634,"s":1,"a":false},{"u":706,"l":525,"s":1,"a":true},{"u":989,"l":481,"s":1,"a":true},{"u":443,"l":151,"s":0,"a":true},{"u":923,"l":526,"s":1,"a":true},{"u":645,"l":430,"s":1,"a":true},{"u":889,"l":404,"s":0,"a":false},{"u":622,"l":293,"s":1,"a":true},{"u":798,"l":494,"s":0,"a":false},{"u":381,"l":156,"s":0,"a":false},{"u":818,"l":697,"s":0,"a":false},{"u":646,"l":481,"s":0,"a":false},{"u":900,"l":533,"s":1,"a":false},{"u":133,"l":123,"s":0,"a":true},{"u":949,"l":278,"s":1,"a":true},{"u":860,"l":756,"s":0,"a":false},{"u":350,"l":20,"s":0,"a":true},{"u":767,"l":42,"s":1,"a":false},{"u":872,"l":648,"s":1,"a":true},{"u":902,"l":110,"s":1,"a":false},{"u":583,"l":296,"s":0,"a":true},{"u":275,"l":157,"s":1,"a":true},{"u":842,"l":204,"s":1,"a":false},{"u":679,"l":38,"s":0,"a":false},{"u":946,"l":755,"s":0,"a":true},{"u":544,"l":235,"s":0,"a":false},{"u":321,"l":178,"s":1,"a":true},{"u":689,"l":387,"s":0,"a":true},{"u":888,"l":781,"s":1,"a":false},{"u":173,"l":1,"s":1,"a":false},{"u":459,"l":288,"s":1,"a":false},{"u":606,"l":552,"s":1,"a":false},{"u":446,"l":61,"s":1,"a":false},{"u":848,"l":400,"s":1,"a":false},{"u":762,"l":563,"s":1,"a":true},{"u":883,"l":749,"s":1,"a":false},{"u":854,"l":482,"s":1,"a":false},{"u":561,"l":504,"s":1,"a":true},{"u":889,"l":104,"s":0,"a":true},{"u":455,"l":124,"s":0,"a":false},{"u":850,"l":225,"s":0,"a":true},{"u":496,"l":313,"s":1,"a":true},{"u":658,"l":531,"s":0,"a":true},{"u":940,"l":426,"s":1,"a":false},{"u":924,"l":662,"s":1,"a":false},{"u":498,"l":309,"s":0,"a":true},{"u":293,"l":51,"s":1,"a":false},{"u":883,"l":411,"s":1,"a":true},{"u":876,"l":802,"s":1,"a":true},{"u":594,"l":267,"s":1,"a":false},{"u":497,"l":27,"s":0,"a":true},{"u":740,"l":378,"s":1,"a":false},{"u":899,"l":585,"s":0,"a":false},{"u":777,"l":457,"s":1,"a":true},{"u":922,"l":590,"s":1,"a":false},{"u":146,"l":105,"s":0,"a":true},{"u":871,"l":383,"s":0,"a":false},{"u":862,"l":143,"s":0,"a":true},{"u":331,"l":137,"s":1,"a":true},{"u":808,"l":98,"s":0,"a":false},{"u":909,"l":410,"s":1,"a":false},{"u":908,"l":658,"s":0,"a":false},{"u":543,"l":252,"s":0,"a":true},{"u":338,"l":185,"s":0,"a":false},{"u":500,"l":489,"s":1,"a":false},{"u":482,"l":313,"s":0,"a":true},{"u":66,"l":10,"s":1,"a":false},{"u":100,"l":91,"s":1,"a":true},{"u":352,"l":310,"s":1,"a":true},{"u":574,"l":453,"s":1,"a":false},{"u":759,"l":313,"s":1,"a":false},{"u":891,"l":202,"s":1,"a":true},{"u":438,"l":251,"s":0,"a":false},{"u":821,"l":175,"s":0,"a":false},{"u":636,"l":538,"s":1,"a":false},{"u":239,"l":96,"s":0,"a":false},{"u":502,"l":156,"s":0,"a":false},{"u":213,"l":12,"s":1,"a":false},{"u":957,"l":594,"s":0,"a":false},{"u":860,"l":233,"s":1,"a":false},{"u":360,"l":259,"s":1,"a":true},{"u":781,"l":355,"s":0,"a":true},{"u":957,"l":606,"s":1,"a":false},{"u":779,"l":565,"s":0,"a":true},{"u":870,"l":321,"s":0,"a":true},{"u":421,"l":290,"s":0,"a":true},{"u":568,"l":257,"s":0,"a":true},{"u":834,"l":38,"s":1,"a":false},{"u":376,"l":324,"s":1,"a":false},{"u":556,"l":99,"s":1,"a":true},{"u":993,"l":14,"s":0,"a":true},{"u":970,"l":66,"s":0,"a":false},{"u":842,"l":201,"s":1,"a":true},{"u":969,"l":561,"s":1,"a":false},{"u":275,"l":54,"s":0,"a":false},{"u":690,"l":389,"s":0,"a":false},{"u":636,"l":209,"s":0,"a":false},{"u":469,"l":79,"s":0,"a":false},{"u":174,"l":25,"s":1,"a":false},{"u":639,"l":351,"s":1,"a":true},{"u":922,"l":680,"s":1,"a":true},{"u":511,"l":275,"s":0,"a":true},{"u":589,"l":300,"s":1,"a":false},{"u":248,"l":154,"s":0,"a":true},{"u":991,"l":247,"s":0,"a":false},{"u":511,"l":230,"s":0,"a":false},{"u":309,"l":94,"s":1,"a":false},{"u":343,"l":47,"s":0,"a":false},{"u":660,"l":35,"s":1,"a":false},{"u":900,"l":839,"s":0,"a":true},{"u":773,"l":411,"s":0,"a":true},{"u":807,"l":563,"s":0,"a":true},{"u":482,"l":183,"s":0,"a":true},{"u":958,"l":48,"s":1,"a":true},{"u":732,"l":541,"s":1,"a":true},{"u":499,"l":60,"s":0,"a":false},{"u":939,"l":377,"s":0,"a":true},{"u":157,"l":23,"s":0,"a":false},{"u":845,"l":493,"s":1,"a":false},{"u":860,"l":647,"s":0,"a":true},{"u":554,"l":489,"s":1,"a":false},{"u":762,"l":653,"s":0,"a":false},{"u":779,"l":684,"s":0,"a":true},{"u":411,"l":140,"s":0,"a":false},{"u":784,"l":768,"s":0,"a":true},{"u":475,"l":452,"s":0,"a":false},{"u":824,"l":116,"s":1,"a":true},{"u":381,"l":159,"s":1,"a":true},{"u":589,"l":577,"s":1,"a":false},{"u":889,"l":613,"s":1,"a":false},{"u":382,"l":11,"s":1,"a":false},{"u":749,"l":495,"s":1,"a":true},{"u":612,"l":414,"s":1,"a":false},{"u":568,"l":437,"s":0,"a":true},{"u":146,"l":59,"s":0,"a":false},{"u":717,"l":513,"s":0,"a":false},{"u":140,"l":28,"s":0,"a":true},{"u":331,"l":279,"s":0,"a":false},{"u":930,"l":508,"s":0,"a":false},{"u":705,"l":553,"s":0,"a":false},{"u":419,"l":186,"s":1,"a":false},{"u":983,"l":716,"s":1,"a":false},{"u":371,"l":217,"s":0,"a":true},{"u":89,"l":18,"s":1,"a":false},{"u":390,"l":17,"s":0,"a":true},{"u":904,"l":508,"s":0,"a":true},{"u":682,"l":189,"s":0,"a":false},{"u":909,"l":789,"s":0,"a":false},{"u":681,"l":234,"s":0,"a":false},{"u":640,"l":630,"s":1,"a":true},{"u":808,"l":800,"s":1,"a":true},{"u":183,"l":12,"s":1,"a":false},{"u":174,"l":103,"s":0,"a":true},{"u":467,"l":102,"s":0,"a":false},{"u":789,"l":780,"s":0,"a":false},{"u":883,"l":756,"s":1,"a":true},{"u":759,"l":447,"s":1,"a":true},{"u":911,"l":571,"s":0,"a":false},{"u":473,"l":362,"s":0,"a":false},{"u":745,"l":663,"s":0,"a":true},{"u":898,"l":890,"s":1,"a":false},{"u":455,"l":307,"s":1,"a":false},{"u":875,"l":42,"s":0,"a":false},{"u":611,"l":238,"s":1,"a":false},{"u":520,"l":224,"s":0,"a":false},{"u":996,"l":231,"s":1,"a":false},{"u":492,"l":26,"s":0,"a":false},{"u":174,"l":32,"s":1,"a":false},{"u":936,"l":331,"s":0,"a":false},{"u":680,"l":472,"s":0,"a":false},{"u":726,"l":482,"s":1,"a":false},{"u":459,"l":158,"s":0,"a":false},{"u":846,"l":139,"s":1,"a":true},{"u":549,"l":133,"s":1,"a":false},{"u":458,"l":266,"s":1,"a":true},{"u":959,"l":146,"s":0,"a":false},{"u":822,"l":622,"s":1,"a":false},{"u":121,"l":17,"s":0,"a":false},{"u":565,"l":288,"s":1,"a":true},{"u":302,"l":127,"s":0,"a":false},{"u":474,"l":76,"s":1,"a":true},{"u":683,"l":617,"s":0,"a":true},{"u":689,"l":636,"s":0,"a":false},{"u":987,"l":952,"s":1,"a":true},{"u":913,"l":84,"s":0,"a":true},{"u":803,"l":100,"s":1,"a":false},{"u":815,"l":319,"s":0,"a":false},{"u":605,"l":119,"s":0,"a":true},{"u":945,"l":82,"s":1,"a":false},{"u":573,"l":54,"s":1,"a":true},{"u":936,"l":95,"s":1,"a":false},{"u":640,"l":105,"s":0,"a":true},{"u":306,"l":127,"s":0,"a":false},{"u":550,"l":37,"s":0,"a":false},{"u":565,"l":172,"s":1,"a":true},{"u":312,"l":182,"s":0,"a":false},{"u":629,"l":368,"s":1,"a":false},{"u":826,"l":495,"s":0,"a":false},{"u":642,"l":415,"s":0,"a":true},{"u":716,"l":537,"s":0,"a":true},{"u":702,"l":43,"s":0,"a":false},{"u":670,"l":76,"s":0,"a":false},{"u":837,"l":555,"s":0,"a":false},{"u":747,"l":508,"s":1,"a":false},{"u":186,"l":129,"s":0,"a":true},{"u":688,"l":192,"s":1,"a":false},{"u":812,"l":63,"s":0,"a":false},{"u":711,"l":257,"s":0,"a":false},{"u":162,"l":76,"s":0,"a":true},{"u":829,"l":583,"s":1,"a":true},{"u":863,"l":340,"s":1,"a":false},{"u":551,"l":255,"s":0,"a":false},{"u":991,"l":93,"s":1,"a":true},{"u":632,"l":476,"s":0,"a":false},{"u":505,"l":314,"s":1,"a":false},{"u":629,"l":340,"s":1,"a":true},{"u":187,"l":77,"s":1,"a":true},{"u":348,"l":45,"s":0,"a":false},{"u":808,"l":374,"s":1,"a":false},{"u":668,"l":177,"s":0,"a":true},{"u":235,"l":160,"s":0,"a":false},{"u":503,"l":358,"s":1,"a":true},{"u":636,"l":28,"s":1,"a":false},{"u":542,"l":482,"s":1,"a":false},{"u":621,"l":319,"s":0,"a":false},{"u":963,"l":94,"s":1,"a":false},{"u":751,"l":12,"s":0,"a":false},{"u":842,"l":356,"s":1,"a":false},{"u":704,"l":70,"s":1,"a":false},{"u":677,"l":8,"s":1,"a":true},{"u":484,"l":406,"s":0,"a":true},{"u":750,"l":390,"s":0,"a":false},{"u":520,"l":316,"s":1,"a":false},{"u":905,"l":325,"s":1,"a":true},{"u":994,"l":232,"s":0,"a":false},{"u":533,"l":75,"s":0,"a":true},{"u":869,"l":350,"s":0,"a":false},{"u":755,"l":533,"s":1,"a":true},{"u":663,"l":101,"s":1,"a":true},{"u":912,"l":86,"s":0,"a":true},{"u":373,"l":360,"s":0,"a":true},{"u":595,"l":384,"s":1,"a":true},{"u":733,"l":674,"s":0,"a":false},{"u":713,"l":602,"s":0,"a":false},{"u":869,"l":328,"s":1,"a":false},{"u":838,"l":141,"s":0,"a":false},{"u":619,"l":300,"s":1,"a":true},{"u":818,"l":88,"s":0,"a":false},{"u":676,"l":325,"s":0,"a":true},{"u":935,"l":874,"s":0,"a":true},{"u":699,"l":55,"s":1,"a":false},{"u":853,"l":782,"s":0,"a":false},{"u":799,"l":581,"s":1,"a":true},{"u":459,"l":387,"s":0,"a":true},{"u":882,"l":459,"s":0,"a":true},{"u":848,"l":704,"s":1,"a":false},{"u":375,"l":148,"s":0,"a":false},{"u":484,"l":276,"s":1,"a":false},{"u":576,"l":362,"s":1,"a":true},{"u":244,"l":61,"s":1,"a":false},{"u":286,"l":99,"s":1,"a":true},{"u":280,"l":62,"s":0,"a":true},{"u":797,"l":413,"s":0,"a":true},{"u":882,"l":342,"s":0,"a":true},{"u":865,"l":402,"s":0,"a":true},{"u":801,"l":719,"s":0,"a":true},{"u":785,"l":459,"s":1,"a":true},{"u":275,"l":131,"s":1,"a":true},{"u":784,"l":480,"s":1,"a":false},{"u":303,"l":210,"s":0,"a":true},{"u":556,"l":231,"s":0,"a":true},{"u":638,"l":186,"s":1,"a":false},{"u":695,"l":153,"s":1,"a":false},{"u":950,"l":943,"s":1,"a":true},{"u":865,"l":210,"s":0,"a":false},{"u":637,"l":498,"s":1,"a":true},{"u":474,"l":457,"s":0,"a":false},{"u":978,"l":600,"s":1,"a":true},{"u":118,"l":1,"s":0,"a":true},{"u":571,"l":412,"s":0,"a":false},{"u":640,"l":596,"s":1,"a":true},{"u":361,"l":2,"s":1,"a":true},{"u":913,"l":774,"s":1,"a":false},{"u":698,"l":410,"s":0,"a":false},{"u":775,"l":680,"s":1,"a":false},{"u":638,"l":629,"s":0,"a":false},{"u":593,"l":310,"s":0,"a":false},{"u":415,"l":361,"s":0,"a":false},{"u":430,"l":217,"s":0,"a":true},{"u":825,"l":58,"s":1,"a":true},{"u":453,"l":266,"s":0,"a":true},{"u":421,"l":364,"s":1,"a":false},{"u":254,"l":82,"s":0,"a":false},{"u":925,"l":46,"s":0,"a":true},{"u":676,"l":308,"s":1,"a":false},{"u":821,"l":130,"s":0,"a":true},{"u":762,"l":253,"s":0,"a":false},{"u":799,"l":138,"s":0,"a":true},{"u":537,"l":87,"s":1,"a":true},{"u":371,"l":21,"s":1,"a":false},{"u":859,"l":444,"s":1,"a":false},{"u":564,"l":293,"s":1,"a":true},{"u":940,"l":864,"s":0,"a":false},{"u":689,"l":148,"s":0,"a":false},{"u":424,"l":125,"s":1,"a":false},{"u":386,"l":13,"s":0,"a":true},{"u":798,"l":26,"s":0,"a":false},{"u":827,"l":686,"s":1,"a":true},{"u":868,"l":41,"s":1,"a":true},{"u":425,"l":265,"s":1,"a":false},{"u":257,"l":249,"s":1,"a":false},{"u":766,"l":559,"s":1,"a":true},{"u":529,"l":363,"s":0,"a":true},{"u":536,"l":67,"s":0,"a":true},{"u":272,"l":247,"s":0,"a":true},{"u":506,"l":199,"s":1,"a":true},{"u":486,"l":302,"s":1,"a":false},{"u":805,"l":170,"s":1,"a":false},{"u":501,"l":313,"s":1,"a":true},{"u":755,"l":243,"s":1,"a":false},{"u":652,"l":632,"s":1,"a":false},{"u":701,"l":146,"s":1,"a":false},{"u":789,"l":8,"s":0,"a":false},{"u":800,"l":539,"s":1,"a":true},{"u":109,"l":55,"s":1,"a":true},{"u":637,"l":62,"s":1,"a":false},{"u":485,"l":419,"s":1,"a":false},{"u":841,"l":196,"s":1,"a":true},{"u":831,"l":223,"s":0,"a":true},{"u":807,"l":575,"s":0,"a":true},{"u":653,"l":381,"s":1,"a":true},{"u":973,"l":358,"s":0,"a":true},{"u":988,"l":770,"s":0,"a":true},{"u":501,"l":134,"s":0,"a":true},{"u":959,"l":895,"s":0,"a":false},{"u":867,"l":621,"s":0,"a":false},{"u":551,"l":98,"s":0,"a":true},{"u":385,"l":284,"s":0,"a":true},{"u":822,"l":771,"s":0,"a":false},{"u":654,"l":456,"s":0,"a":true},{"u":285,"l":239,"s":1,"a":false},{"u":519,"l":429,"s":1,"a":true},{"u":841,"l":384,"s":0,"a":false},{"u":757,"l":200,"s":1,"a":true},{"u":607,"l":424,"s":0,"a":true},{"u":301,"l":86,"s":1,"a":false},{"u":854,"l":222,"s":0,"a":false},{"u":971,"l":173,"s":0,"a":false},{"u":351,"l":67,"s":1,"a":true},{"u":726,"l":298,"s":1,"a":true},{"u":885,"l":537,"s":0,"a":true},{"u":391,"l":257,"s":1,"a":false},{"u":842,"l":738,"s":0,"a":true},{"u":882,"l":99,"s":0,"a":false},{"u":617,"l":79,"s":0,"a":false},{"u":880,"l":859,"s":0,"a":false},{"u":545,"l":455,"s":0,"a":true},{"u":880,"l":478,"s":1,"a":false},{"u":592,"l":587,"s":0,"a":true},{"u":676,"l":207,"s":1,"a":true},{"u":603,"l":531,"s":0,"a":false},{"u":786,"l":651,"s":1,"a":true},{"u":741,"l":113,"s":1,"a":true},{"u":247,"l":183,"s":0,"a":false},{"u":639,"l":623,"s":0,"a":false},{"u":138,"l":10,"s":1,"a":true},{"u":998,"l":521,"s":0,"a":false},{"u":530,"l":89,"s":1,"a":true},{"u":849,"l":688,"s":1,"a":true},{"u":483,"l":410,"s":0,"a":true},{"u":916,"l":621,"s":0,"a":false},{"u":799,"l":233,"s":1,"a":false},{"u":999,"l":441,"s":1,"a":true},{"u":648,"l":271,"s":0,"a":false},{"u":935,"l":459,"s":1,"a":false},{"u":702,"l":445,"s":0,"a":true},{"u":851,"l":259,"s":0,"a":false},{"u":849,"l":811,"s":0,"a":false},{"u":460,"l":201,"s":1,"a":true},{"u":851,"l":365,"s":0,"a":true},{"u":938,"l":148,"s":0,"a":false},{"u":910,"l":432,"s":0,"a":true},{"u":399,"l":51,"s":1,"a":false},{"u":862,"l":767,"s":0,"a":true},{"u":593,"l":442,"s":1,"a":false},{"u":674,"l":606,"s":0,"a":true},{"u":757,"l":322,"s":1,"a":false},{"u":406,"l":403,"s":0,"a":false},{"u":697,"l":293,"s":1,"a":false},{"u":874,"l":859,"s":1,"a":false},{"u":846,"l":311,"s":0,"a":false},{"u":974,"l":838,"s":0,"a":false},{"u":482,"l":269,"s":0,"a":true},{"u":760,"l":6,"s":1,"a":false},{"u":625,"l":560,"s":1,"a":false},{"u":772,"l":603,"s":1,"a":true},{"u":619,"l":468,"s":1,"a":false},{"u":895,"l":427,"s":1,"a":true},{"u":580,"l":186,"s":0,"a":true},{"u":944,"l":239,"s":0,"a":true},{"u":483,"l":402,"s":0,"a":false},{"u":962,"l":577,"s":0,"a":true},{"u":268,"l":118,"s":0,"a":true},{"u":965,"l":211,"s":1,"a":true},{"u":624,"l":534,"s":1,"a":false},{"u":644,"l":512,"s":1,"a":true},{"u":361,"l":243,"s":0,"a":false},{"u":640,"l":1,"s":1,"a":false},{"u":877,"l":548,"s":0,"a":true},{"u":629,"l":300,"s":0,"a":false},{"u":936,"l":836,"s":1,"a":false},{"u":563,"l":89,"s":1,"a":true},{"u":545,"l":307,"s":0,"a":true},{"u":321,"l":219,"s":1,"a":true},{"u":982,"l":538,"s":1,"a":false},{"u":312,"l":243,"s":1,"a":false},{"u":834,"l":661,"s":1,"a":true},{"u":557,"l":395,"s":0,"a":false},{"u":610,"l":357,"s":1,"a":false},{"u":786,"l":470,"s":1,"a":false},{"u":994,"l":762,"s":1,"a":false},{"u":896,"l":863,"s":1,"a":true},{"u":583,"l":25,"s":1,"a":false},{"u":944,"l":248,"s":0,"a":false},{"u":690,"l":559,"s":1,"a":true},{"u":659,"l":548,"s":0,"a":true},{"u":876,"l":782,"s":1,"a":false},{"u":436,"l":82,"s":0,"a":true},{"u":495,"l":216,"s":1,"a":false},{"u":982,"l":690,"s":0,"a":false},{"u":564,"l":554,"s":1,"a":false},{"u":894,"l":183,"s":0,"a":true},{"u":783,"l":133,"s":0,"a":false},{"u":852,"l":32,"s":1,"a":false},{"u":628,"l":177,"s":0,"a":false},{"u":548,"l":489,"s":1,"a":false},{"u":954,"l":323,"s":1,"a":true},{"u":881,"l":18,"s":0,"a":false},{"u":540,"l":496,"s":0,"a":true},{"u":272,"l":265,"s":1,"a":false},{"u":439,"l":85,"s":1,"a":false},{"u":618,"l":418,"s":0,"a":false},{"u":144,"l":66,"s":0,"a":true},{"u":765,"l":316,"s":1,"a":false},{"u":979,"l":881,"s":1,"a":true},{"u":796,"l":37,"s":1,"a":true},{"u":420,"l":47,"s":1,"a":false},{"u":661,"l":175,"s":1,"a":false},{"u":649,"l":204,"s":1,"a":true},{"u":861,"l":398,"s":1,"a":false},{"u":935,"l":47,"s":1,"a":true},{"u":258,"l":177,"s":1,"a":true},{"u":541,"l":307,"s":1,"a":true},{"u":960,"l":216,"s":1,"a":false},{"u":238,"l":20,"s":1,"a":true},{"u":369,"l":49,"s":0,"a":false},{"u":959,"l":878,"s":0,"a":true},{"u":692,"l":262,"s":1,"a":false},{"u":373,"l":134,"s":1,"a":false},{"u":919,"l":643,"s":1,"a":true},{"u":666,"l":328,"s":1,"a":false},{"u":588,"l":506,"s":1,"a":false},{"u":487,"l":430,"s":0,"a":false},{"u":515,"l":68,"s":0,"a":true},{"u":790,"l":425,"s":0,"a":true},{"u":499,"l":168,"s":0,"a":false},{"u":689,"l":661,"s":0,"a":false},{"u":778,"l":343,"s":0,"a":true},{"u":783,"l":444,"s":0,"a":false},{"u":815,"l":162,"s":0,"a":true},{"u":487,"l":16,"s":0,"a":true},{"u":611,"l":151,"s":1,"a":false},{"u":228,"l":161,"s":0,"a":false},{"u":893,"l":551,"s":0,"a":false},{"u":320,"l":296,"s":1,"a":false},{"u":687,"l":549,"s":1,"a":false},{"u":778,"l":593,"s":0,"a":false},{"u":558,"l":180,"s":0,"a":true},{"u":327,"l":130,"s":1,"a":false},{"u":805,"l":295,"s":0,"a":false},{"u":957,"l":472,"s":0,"a":true},{"u":282,"l":136,"s":1,"a":true},{"u":270,"l":131,"s":1,"a":true},{"u":554,"l":133,"s":1,"a":false},{"u":964,"l":322,"s":1,"a":false},{"u":622,"l":572,"s":0,"a":true},{"u":536,"l":513,"s":1,"a":true},{"u":732,"l":130,"s":0,"a":true},{"u":934,"l":11,"s":0,"a":true},{"u":826,"l":51,"s":1,"a":false},{"u":437,"l":4,"s":1,"a":true},{"u":726,"l":365,"s":0,"a":true},{"u":654,"l":601,"s":1,"a":true},{"u":901,"l":309,"s":1,"a":false},{"u":483,"l":429,"s":0,"a":false},{"u":394,"l":111,"s":1,"a":false},{"u":258,"l":2,"s":0,"a":true},{"u":745,"l":481,"s":0,"a":false},{"u":776,"l":742,"s":1,"a":true},{"u":272,"l":185,"s":1,"a":false},{"u":897,"l":573,"s":1,"a":false},{"u":172,"l":166,"s":0,"a":true},{"u":559,"l":318,"s":1,"a":true},{"u":575,"l":531,"s":0,"a":true},{"u":717,"l":153,"s":0,"a":false},{"u":705,"l":435,"s":0,"a":true},{"u":887,"l":36,"s":1,"a":true},{"u":512,"l":204,"s":1,"a":true},{"u":523,"l":162,"s":1,"a":true},{"u":886,"l":195,"s":0,"a":true},{"u":759,"l":196,"s":0,"a":false},{"u":753,"l":277,"s":0,"a":true},{"u":611,"l":234,"s":0,"a":false},{"u":885,"l":631,"s":1,"a":true},{"u":327,"l":316,"s":1,"a":false},{"u":363,"l":280,"s":1,"a":true},{"u":702,"l":294,"s":1,"a":true},{"u":709,"l":204,"s":1,"a":false},{"u":343,"l":227,"s":1,"a":true},{"u":483,"l":358,"s":1,"a":true},{"u":274,"l":157,"s":0,"a":true},{"u":857,"l":601,"s":0,"a":true},{"u":924,"l":75,"s":1,"a":true},{"u":475,"l":286,"s":0,"a":false},{"u":866,"l":548,"s":0,"a":true},{"u":894,"l":34,"s":0,"a":true},{"u":993,"l":888,"s":0,"a":false},{"u":762,"l":421,"s":1,"a":false},{"u":838,"l":472,"s":1,"a":true},{"u":99,"l":11,"s":1,"a":false},{"u":240,"l":159,"s":1,"a":true},{"u":999,"l":905,"s":0,"a":true},{"u":788,"l":451,"s":0,"a":false},{"u":808,"l":173,"s":0,"a":true},{"u":663,"l":289,"s":0,"a":false},{"u":962,"l":911,"s":1,"a":true},{"u":645,"l":350,"s":0,"a":true},{"u":799,"l":642,"s":1,"a":false},{"u":558,"l":117,"s":0,"a":true},{"u":990,"l":8,"s":0,"a":true},{"u":802,"l":386,"s":0,"a":false},{"u":829,"l":501,"s":0,"a":false},{"u":732,"l":83,"s":1,"a":true},{"u":773,"l":575,"s":0,"a":false},{"u":576,"l":141,"s":1,"a":false},{"u":181,"l":181,"s":0,"a":true},{"u":136,"l":61,"s":1,"a":false},{"u":831,"l":188,"s":1,"a":false},{"u":302,"l":72,"s":0,"a":true},{"u":682,"l":608,"s":0,"a":false},{"u":167,"l":121,"s":1,"a":true},{"u":925,"l":519,"s":0,"a":false},{"u":762,"l":408,"s":0,"a":false},{"u":497,"l":125,"s":1,"a":false},{"u":252,"l":3,"s":1,"a":true},{"u":534,"l":142,"s":0,"a":false},{"u":923,"l":701,"s":1,"a":false},{"u":545,"l":85,"s":1,"a":true},{"u":128,"l":116,"s":0,"a":true},{"u":786,"l":345,"s":1,"a":true},{"u":748,"l":557,"s":0,"a":false},{"u":862,"l":597,"s":0,"a":false},{"u":731,"l":101,"s":1,"a":false},{"u":254,"l":237,"s":0,"a":true},{"u":934,"l":637,"s":1,"a":true},{"u":530,"l":46,"s":1,"a":true},{"u":832,"l":6,"s":0,"a":false},{"u":392,"l":287,"s":1,"a":false},{"u":362,"l":105,"s":1,"a":true},{"u":966,"l":498,"s":0,"a":false},{"u":797,"l":81,"s":1,"a":true},{"u":655,"l":259,"s":0,"a":true},{"u":649,"l":275,"s":0,"a":true},{"u":990,"l":229,"s":1,"a":true},{"u":885,"l":84,"s":0,"a":true},{"u":671,"l":287,"s":1,"a":false},{"u":483,"l":134,"s":0,"a":false},{"u":703,"l":88,"s":1,"a":false},{"u":998,"l":282,"s":0,"a":false},{"u":987,"l":356,"s":0,"a":false},{"u":531,"l":345,"s":1,"a":false},{"u":462,"l":216,"s":1,"a":false},{"u":426,"l":123,"s":1,"a":true},{"u":304,"l":217,"s":1,"a":true},{"u":881,"l":825,"s":1,"a":false},{"u":608,"l":561,"s":0,"a":false},{"u":595,"l":558,"s":0,"a":false},{"u":590,"l":53,"s":0,"a":true},{"u":920,"l":45,"s":1,"a":true},{"u":950,"l":652,"s":0,"a":false},{"u":333,"l":69,"s":1,"a":false},{"u":709,"l":94,"s":0,"a":true},{"u":494,"l":18,"s":0,"a":false},{"u":863,"l":439,"s":1,"a":false},{"u":576,"l":547,"s":0,"a":true},{"u":992,"l":460,"s":1,"a":true},{"u":685,"l":163,"s":1,"a":true},{"u":352,"l":204,"s":0,"a":true},{"u":902,"l":551,"s":0,"a":true},{"u":740,"l":176,"s":0,"a":false},{"u":421,"l":47,"s":1,"a":false},{"u":252,"l":206,"s":0,"a":false},{"u":540,"l":346,"s":1,"a":false},{"u":629,"l":491,"s":0,"a":true},{"u":883,"l":687,"s":1,"a":true},{"u":994,"l":817,"s":0,"a":false},{"u":895,"l":463,"s":1,"a":true},{"u":944,"l":583,"s":1,"a":false},{"u":683,"l":244,"s":1,"a":true},{"u":905,"l":864,"s":0,"a":true},{"u":927,"l":72,"s":1,"a":true},{"u":544,"l":175,"s":1,"a":false},{"u":807,"l":202,"s":0,"a":true},{"u":676,"l":120,"s":0,"a":true},{"u":468,"l":7,"s":0,"a":true},{"u":194,"l":52,"s":1,"a":true},{"u":362,"l":113,"s":1,"a":false},{"u":822,"l":49,"s":1,"a":true},{"u":204,"l":112,"s":1,"a":false},{"u":943,"l":187,"s":1,"a":true},{"u":550,"l":437,"s":1,"a":true},{"u":912,"l":183,"s":0,"a":true},{"u":623,"l":524,"s":1,"a":false},{"u":962,"l":283,"s":1,"a":true},{"u":679,"l":203,"s":0,"a":true},{"u":278,"l":133,"s":0,"a":false},{"u":762,"l":131,"s":1,"a":false},{"u":281,"l":94,"s":0,"a":true},{"u":900,"l":98,"s":1,"a":false},{"u":801,"l":554,"s":0,"a":true},{"u":479,"l":328,"s":1,"a":false},{"u":910,"l":37,"s":1,"a":true},{"u":903,"l":192,"s":0,"a":false},{"u":606,"l":153,"s":0,"a":true},{"u":166,"l":1,"s":0,"a":true},{"u":757,"l":348,"s":0,"a":false},{"u":413,"l":351,"s":1,"a":false},{"u":493,"l":274,"s":0,"a":true},{"u":685,"l":343,"s":1,"a":false},{"u":646,"l":303,"s":1,"a":false},{"u":584,"l":13,"s":1,"a":true},{"u":912,"l":781,"s":1,"a":false},{"u":844,"l":407,"s":0,"a":true},{"u":961,"l":42,"s":0,"a":true},{"u":837,"l":261,"s":1,"a":false},{"u":793,"l":110,"s":1,"a":true},{"u":740,"l":664,"s":1,"a":false},{"u":913,"l":286,"s":1,"a":false},{"u":789,"l":51,"s":0,"a":false},{"u":112,"l":33,"s":0,"a":true},{"u":696,"l":511,"s":1,"a":false},{"u":738,"l":191,"s":0,"a":true},{"u":549,"l":194,"s":1,"a":false},{"u":351,"l":277,"s":0,"a":false},{"u":696,"l":280,"s":1,"a":false},{"u":747,"l":524,"s":0,"a":false},{"u":783,"l":295,"s":0,"a":true},{"u":357,"l":144,"s":1,"a":true},{"u":266,"l":146,"s":0,"a":false},{"u":418,"l":271,"s":0,"a":true},{"u":818,"l":372,"s":1,"a":true},{"u":942,"l":573,"s":1,"a":false},{"u":442,"l":17,"s":0,"a":false},{"u":744,"l":385,"s":0,"a":false},{"u":821,"l":447,"s":1,"a":true},{"u":802,"l":292,"s":0,"a":false},{"u":456,"l":50,"s":0,"a":true},{"u":998,"l":959,"s":0,"a":false},{"u":539,"l":173,"s":1,"a":false},{"u":853,"l":592,"s":1,"a":true},{"u":867,"l":529,"s":1,"a":true},{"u":835,"l":630,"s":0,"a":true},{"u":371,"l":51,"s":0,"a":false},{"u":908,"l":897,"s":0,"a":false},{"u":439,"l":28,"s":1,"a":true},{"u":740,"l":122,"s":0,"a":true},{"u":330,"l":19,"s":0,"a":false},{"u":444,"l":67,"s":1,"a":false},{"u":690,"l":223,"s":0,"a":false},{"u":844,"l":134,"s":0,"a":false},{"u":868,"l":808,"s":1,"a":false},{"u":405,"l":22,"s":1,"a":false},{"u":562,"l":180,"s":0,"a":false},{"u":717,"l":22,"s":0,"a":false},{"u":493,"l":36,"s":1,"a":false},{"u":571,"l":549,"s":1,"a":true},{"u":951,"l":598,"s":0,"a":true},{"u":747,"l":690,"s":0,"a":false},{"u":839,"l":404,"s":0,"a":false},{"u":833,"l":287,"s":1,"a":false},{"u":624,"l":519,"s":0,"a":true},{"u":390,"l":1,"s":0,"a":false},{"u":961,"l":756,"s":0,"a":false},{"u":976,"l":795,"s":0,"a":false},{"u":890,"l":254,"s":1,"a":true},{"u":795,"l":216,"s":0,"a":false},{"u":891,"l":145,"s":1,"a":true},{"u":869,"l":275,"s":1,"a":false},{"u":672,"l":640,"s":1,"a":false},{"u":988,"l":413,"s":1,"a":false},{"u":699,"l":208,"s":1,"a":true},{"u":941,"l":15,"s":0,"a":true},{"u":364,"l":173,"s":0,"a":true},{"u":470,"l":384,"s":1,"a":false},{"u":737,"l":452,"s":0,"a":false},{"u":814,"l":467,"s":1,"a":false},{"u":963,"l":227,"s":0,"a":true},{"u":274,"l":48,"s":1,"a":false},{"u":973,"l":122,"s":0,"a":true},{"u":317,"l":123,"s":0,"a":false},{"u":986,"l":788,"s":0,"a":false},{"u":594,"l":254,"s":1,"a":false},{"u":889,"l":321,"s":1,"a":false},{"u":788,"l":120,"s":0,"a":true},{"u":539,"l":230,"s":0,"a":false},{"u":831,"l":105,"s":0,"a":true},{"u":569,"l":188,"s":0,"a":false},{"u":545,"l":208,"s":0,"a":false},{"u":416,"l":320,"s":1,"a":true},{"u":154,"l":119,"s":0,"a":true},{"u":771,"l":81,"s":0,"a":true},{"u":782,"l":501,"s":0,"a":true},{"u":582,"l":310,"s":0,"a":true},{"u":877,"l":59,"s":0,"a":false},{"u":313,"l":65,"s":0,"a":false},{"u":811,"l":562,"s":0,"a":true},{"u":581,"l":197,"s":0,"a":true},{"u":268,"l":117,"s":0,"a":false},{"u":601,"l":472,"s":0,"a":true},{"u":676,"l":293,"s":0,"a":true},{"u":644,"l":38,"s":0,"a":true},{"u":726,"l":201,"s":1,"a":true},{"u":944,"l":764,"s":1,"a":true},{"u":879,"l":88,"s":0,"a":false},{"u":427,"l":349,"s":1,"a":false},{"u":504,"l":200,"s":1,"a":false},{"u":887,"l":552,"s":1,"a":true},{"u":860,"l":356,"s":1,"a":false},{"u":801,"l":539,"s":0,"a":true},{"u":801,"l":266,"s":1,"a":true},{"u":344,"l":55,"s":1,"a":true},{"u":692,"l":97,"s":1,"a":false},{"u":651,"l":638,"s":1,"a":true},{"u":610,"l":141,"s":1,"a":true},{"u":821,"l":30,"s":1,"a":false},{"u":774,"l":156,"s":1,"a":false},{"u":793,"l":673,"s":0,"a":false},{"u":543,"l":224,"s":0,"a":false},{"u":617,"l":180,"s":0,"a":true},{"u":746,"l":476,"s":0,"a":false},{"u":855,"l":74,"s":1,"a":true},{"u":639,"l":485,"s":1,"a":false},{"u":709,"l":282,"s":1,"a":false},{"u":550,"l":431,"s":1,"a":false},{"u":876,"l":50,"s":0,"a":true},{"u":913,"l":22,"s":1,"a":true},{"u":399,"l":48,"s":0,"a":false},{"u":635,"l":509,"s":0,"a":false},{"u":941,"l":311,"s":1,"a":false},{"u":769,"l":649,"s":0,"a":false},{"u":702,"l":80,"s":1,"a":true},{"u":914,"l":10,"s":1,"a":false},{"u":916,"l":307,"s":0,"a":false},{"u":985,"l":654,"s":1,"a":true},{"u":756,"l":409,"s":1,"a":true},{"u":718,"l":464,"s":0,"a":false},{"u":913,"l":466,"s":1,"a":false},{"u":284,"l":196,"s":1,"a":true},{"u":999,"l":51,"s":1,"a":true},{"u":952,"l":512,"s":0,"a":false},{"u":506,"l":229,"s":0,"a":true},{"u":107,"l":38,"s":0,"a":true},{"u":972,"l":855,"s":0,"a":true},{"u":440,"l":23,"s":1,"a":true},{"u":412,"l":274,"s":0,"a":false},{"u":256,"l":223,"s":1,"a":true},{"u":979,"l":419,"s":1,"a":false},{"u":977,"l":90,"s":1,"a":true},{"u":940,"l":264,"s":0,"a":true},{"u":830,"l":796,"s":1,"a":false},{"u":643,"l":182,"s":1,"a":true},{"u":683,"l":647,"s":0,"a":false},{"u":889,"l":90,"s":1,"a":false},{"u":242,"l":100,"s":1,"a":false},{"u":792,"l":348,"s":1,"a":true},{"u":677,"l":164,"s":0,"a":true},{"u":430,"l":5,"s":1,"a":false},{"u":953,"l":797,"s":0,"a":false},{"u":766,"l":419,"s":1,"a":false},{"u":906,"l":333,"s":0,"a":false},{"u":564,"l":308,"s":0,"a":false},{"u":552,"l":121,"s":1,"a":true},{"u":786,"l":135,"s":0,"a":false},{"u":799,"l":640,"s":0,"a":true},{"u":496,"l":225,"s":0,"a":true},{"u":937,"l":580,"s":0,"a":true},{"u":623,"l":451,"s":1,"a":false},{"u":122,"l":14,"s":1,"a":false},{"u":277,"l":66,"s":1,"a":true},{"u":195,"l":97,"s":1,"a":true},{"u":445,"l":410,"s":1,"a":false},{"u":801,"l":186,"s":0,"a":true},{"u":446,"l":170,"s":1,"a":true},{"u":313,"l":269,"s":0,"a":true},{"u":825,"l":686,"s":1,"a":false},{"u":995,"l":774,"s":1,"a":false},{"u":888,"l":722,"s":1,"a":false},{"u":800,"l":751,"s":1,"a":false},{"u":769,"l":382,"s":0,"a":false},{"u":971,"l":760,"s":1,"a":false},{"u":193,"l":174,"s":0,"a":true},{"u":622,"l":178,"s":0,"a":true},{"u":289,"l":166,"s":0,"a":false},{"u":768,"l":209,"s":0,"a":true},{"u":402,"l":284,"s":0,"a":true},{"u":465,"l":393,"s":1,"a":false},{"u":913,"l":756,"s":0,"a":true},{"u":935,"l":380,"s":0,"a":true},{"u":239,"l":237,"s":1,"a":true},{"u":923,"l":848,"s":1,"a":true},{"u":632,"l":196,"s":0,"a":true},{"u":813,"l":61,"s":1,"a":false},{"u":196,"l":149,"s":1,"a":true},{"u":525,"l":297,"s":0,"a":false},{"u":517,"l":507,"s":0,"a":true},{"u":186,"l":77,"s":0,"a":false},{"u":668,"l":492,"s":0,"a":false},{"u":747,"l":62,"s":1,"a":true},{"u":153,"l":138,"s":0,"a":false},{"u":629,"l":232,"s":0,"a":false},{"u":664,"l":391,"s":1,"a":false},{"u":921,"l":41,"s":0,"a":false},{"u":651,"l":540,"s":1,"a":false},{"u":703,"l":238,"s":1,"a":false},{"u":776,"l":70,"s":0,"a":false},{"u":852,"l":752,"s":0,"a":true},{"u":314,"l":35,"s":0,"a":true},{"u":641,"l":616,"s":1,"a":true},{"u":421,"l":262,"s":1,"a":true},{"u":130,"l":77,"s":1,"a":false},{"u":890,"l":814,"s":1,"a":false},{"u":892,"l":402,"s":1,"a":false},{"u":352,"l":197,"s":1,"a":false},{"u":858,"l":454,"s":0,"a":false},{"u":687,"l":379,"s":0,"a":true},{"u":412,"l":80,"s":1,"a":false},{"u":426,"l":267,"s":0,"a":true},{"u":752,"l":406,"s":0,"a":false},{"u":599,"l":423,"s":1,"a":true},{"u":950,"l":773,"s":0,"a":false},{"u":896,"l":10,"s":0,"a":false},{"u":887,"l":21,"s":1,"a":true},{"u":580,"l":246,"s":0,"a":true},{"u":943,"l":181,"s":0,"a":true},{"u":535,"l":366,"s":1,"a":true},{"u":904,"l":583,"s":1,"a":true},{"u":521,"l":54,"s":0,"a":true},{"u":703,"l":408,"s":0,"a":true},{"u":276,"l":41,"s":1,"a":true},{"u":404,"l":250,"s":0,"a":true},{"u":968,"l":559,"s":1,"a":false},{"u":611,"l":306,"s":0,"a":true},{"u":981,"l":692,"s":1,"a":true},{"u":902,"l":542,"s":0,"a":true},{"u":346,"l":60,"s":0,"a":false},{"u":539,"l":42,"s":0,"a":false},{"u":242,"l":32,"s":1,"a":false},{"u":837,"l":700,"s":0,"a":false},{"u":798,"l":318,"s":1,"a":false},{"u":216,"l":90,"s":1,"a":true},{"u":910,"l":258,"s":0,"a":false},{"u":773,"l":526,"s":0,"a":true},{"u":978,"l":90,"s":1,"a":true},{"u":740,"l":381,"s":0,"a":true},{"u":601,"l":58,"s":0,"a":false},{"u":716,"l":327,"s":0,"a":true},{"u":155,"l":20,"s":1,"a":true},{"u":864,"l":267,"s":0,"a":false},{"u":802,"l":615,"s":1,"a":false},{"u":357,"l":222,"s":1,"a":true},{"u":949,"l":345,"s":1,"a":true},{"u":731,"l":95,"s":0,"a":false},{"u":929,"l":65,"s":0,"a":false},{"u":621,"l":574,"s":1,"a":false},{"u":876,"l":794,"s":1,"a":false},{"u":897,"l":715,"s":0,"a":false},{"u":498,"l":49,"s":1,"a":false},{"u":925,"l":286,"s":0,"a":true},{"u":935,"l":10,"s":0,"a":false},{"u":768,"l":518,"s":0,"a":false},{"u":388,"l":80,"s":1,"a":true},{"u":684,"l":484,"s":0,"a":true},{"u":854,"l":656,"s":0,"a":true},{"u":806,"l":710,"s":0,"a":true},{"u":574,"l":185,"s":1,"a":true},{"u":966,"l":463,"s":0,"a":false},{"u":858,"l":272,"s":1,"a":true},{"u":484,"l":405,"s":1,"a":false},{"u":257,"l":35,"s":0,"a":true},{"u":962,"l":196,"s":1,"a":true},{"u":736,"l":444,"s":0,"a":true},{"u":981,"l":927,"s":1,"a":false},{"u":513,"l":295,"s":1,"a":true},{"u":783,"l":487,"s":0,"a":false},{"u":785,"l":144,"s":1,"a":true},{"u":872,"l":472,"s":1,"a":true},{"u":961,"l":595,"s":1,"a":false},{"u":695,"l":35,"s":1,"a":true},{"u":173,"l":92,"s":1,"a":true},{"u":642,"l":501,"s":1,"a":false},{"u":947,"l":660,"s":1,"a":true},{"u":664,"l":260,"s":1,"a":true},{"u":989,"l":334,"s":0,"a":false},{"u":681,"l":373,"s":1,"a":false},{"u":894,"l":161,"s":1,"a":true},{"u":703,"l":31,"s":0,"a":false},{"u":99,"l":99,"s":1,"a":false},{"u":936,"l":675,"s":1,"a":false},{"u":970,"l":341,"s":1,"a":false},{"u":358,"l":48,"s":1,"a":true},{"u":815,"l":259,"s":0,"a":false},{"u":455,"l":183,"s":0,"a":true},{"u":787,"l":179,"s":0,"a":false},{"u":755,"l":430,"s":1,"a":false},{"u":114,"l":66,"s":0,"a":false},{"u":730,"l":593,"s":1,"a":true},{"u":427,"l":5,"s":0,"a":false},{"u":960,"l":216,"s":0,"a":true},{"u":449,"l":297,"s":0,"a":true},{"u":970,"l":967,"s":1,"a":true},{"u":975,"l":406,"s":1,"a":false},{"u":840,"l":367,"s":0,"a":true},{"u":999,"l":964,"s":0,"a":true},{"u":639,"l":12,"s":1,"a":true},{"u":891,"l":820,"s":1,"a":false},{"u":229,"l":191,"s":0,"a":false},{"u":924,"l":42,"s":1,"a":true},{"u":685,"l":187,"s":1,"a":true},{"u":862,"l":623,"s":0,"a":false},{"u":604,"l":471,"s":0,"a":true},{"u":610,"l":6,"s":0,"a":false},{"u":836,"l":341,"s":1,"a":false},{"u":833,"l":494,"s":0,"a":false},{"u":712,"l":310,"s":0,"a":true},{"u":383,"l":201,"s":1,"a":true},{"u":665,"l":494,"s":1,"a":true},{"u":308,"l":52,"s":0,"a":true},{"u":913,"l":362,"s":1,"a":false},{"u":657,"l":515,"s":1,"a":true},{"u":932,"l":595,"s":0,"a":true},{"u":806,"l":404,"s":0,"a":false},{"u":662,"l":367,"s":1,"a":true},{"u":898,"l":12,"s":0,"a":true},{"u":751,"l":659,"s":1,"a":false},{"u":444,"l":89,"s":1,"a":false},{"u":879,"l":747,"s":1,"a":false},{"u":625,"l":207,"s":0,"a":true},{"u":877,"l":629,"s":1,"a":false},{"u":578,"l":203,"s":1,"a":false},{"u":904,"l":395,"s":0,"a":true},{"u":557,"l":12,"s":1,"a":false},{"u":979,"l":526,"s":0,"a":false},{"u":632,"l":587,"s":0,"a":false},{"u":893,"l":276,"s":0,"a":true},{"u":990,"l":159,"s":1,"a":false},{"u":269,"l":125,"s":0,"a":true},{"u":444,"l":400,"s":1,"a":true},{"u":799,"l":772,"s":1,"a":false},{"u":809,"l":461,"s":1,"a":true},{"u":812,"l":255,"s":0,"a":false},{"u":860,"l":546,"s":0,"a":false},{"u":979,"l":257,"s":1,"a":true},{"u":471,"l":390,"s":0,"a":false},{"u":943,"l":369,"s":0,"a":false},{"u":843,"l":812,"s":1,"a":false},{"u":991,"l":204,"s":1,"a":true},{"u":555,"l":267,"s":0,"a":true},{"u":725,"l":220,"s":0,"a":true},{"u":395,"l":151,"s":1,"a":false},{"u":755,"l":525,"s":1,"a":false},{"u":375,"l":30,"s":1,"a":false},{"u":702,"l":9,"s":1,"a":true},{"u":723,"l":296,"s":0,"a":false},{"u":838,"l":422,"s":0,"a":false},{"u":613,"l":120,"s":1,"a":false},{"u":706,"l":602,"s":0,"a":false},{"u":910,"l":608,"s":0,"a":false},{"u":332,"l":94,"s":0,"a":false},{"u":863,"l":795,"s":1,"a":true},{"u":135,"l":50,"s":1,"a":false},{"u":960,"l":292,"s":1,"a":false},{"u":808,"l":698,"s":1,"a":true},{"u":803,"l":395,"s":0,"a":false},{"u":745,"l":366,"s":1,"a":false},{"u":920,"l":800,"s":1,"a":false},{"u":911,"l":811,"s":1,"a":true},{"u":658,"l":69,"s":1,"a":true},{"u":652,"l":383,"s":1,"a":false},{"u":608,"l":420,"s":0,"a":false},{"u":987,"l":436,"s":0,"a":true},{"u":583,"l":522,"s":0,"a":false},{"u":765,"l":107,"s":0,"a":true},{"u":421,"l":16,"s":1,"a":true},{"u":424,"l":371,"s":0,"a":true},{"u":892,"l":366,"s":1,"a":true},{"u":679,"l":20,"s":1,"a":true},{"u":610,"l":83,"s":0,"a":false},{"u":391,"l":317,"s":1,"a":true},{"u":800,"l":273,"s":1,"a":false},{"u":730,"l":419,"s":0,"a":false},{"u":700,"l":43,"s":1,"a":false},{"u":686,"l":106,"s":0,"a":true},{"u":308,"l":56,"s":1,"a":false},{"u":965,"l":702,"s":0,"a":true},{"u":856,"l":364,"s":1,"a":true},{"u":390,"l":146,"s":1,"a":false},{"u":860,"l":286,"s":0,"a":false},{"u":678,"l":32,"s":0,"a":true},{"u":925,"l":823,"s":0,"a":true},{"u":400,"l":57,"s":1,"a":false},{"u":735,"l":705,"s":0,"a":true},{"u":576,"l":165,"s":1,"a":false},{"u":936,"l":616,"s":1,"a":true},{"u":165,"l":147,"s":1,"a":true},{"u":940,"l":488,"s":1,"a":true},{"u":733,"l":378,"s":0,"a":true},{"u":453,"l":431,"s":1,"a":true},{"u":651,"l":46,"s":1,"a":true},{"u":656,"l":89,"s":0,"a":false},{"u":761,"l":9,"s":0,"a":false},{"u":335,"l":181,"s":0,"a":false},{"u":752,"l":557,"s":0,"a":false},{"u":846,"l":232,"s":0,"a":true},{"u":974,"l":818,"s":1,"a":true},{"u":49,"l":7,"s":0,"a":false},{"u":864,"l":166,"s":1,"a":false},{"u":761,"l":59,"s":0,"a":false},{"u":518,"l":470,"s":1,"a":false},{"u":517,"l":67,"s":1,"a":false},{"u":750,"l":300,"s":1,"a":true},{"u":244,"l":12,"s":1,"a":false},{"u":602,"l":212,"s":1,"a":true},{"u":787,"l":121,"s":1,"a":false},{"u":940,"l":505,"s":1,"a":false},{"u":370,"l":55,"s":0,"a":false},{"u":728,"l":666,"s":0,"a":true},{"u":198,"l":43,"s":1,"a":false},{"u":912,"l":32,"s":1,"a":true},{"u":203,"l":63,"s":1,"a":false},{"u":964,"l":336,"s":1,"a":false},{"u":863,"l":552,"s":0,"a":false},{"u":662,"l":415,"s":0,"a":false},{"u":891,"l":719,"s":0,"a":true},{"u":900,"l":836,"s":1,"a":true},{"u":532,"l":286,"s":0,"a":true},{"u":485,"l":42,"s":0,"a":true},{"u":854,"l":831,"s":0,"a":false},{"u":969,"l":123,"s":1,"a":true},{"u":638,"l":36,"s":0,"a":true},{"u":961,"l":756,"s":0,"a":true},{"u":619,"l":184,"s":1,"a":true},{"u":721,"l":353,"s":0,"a":false},{"u":432,"l":168,"s":0,"a":false},{"u":593,"l":190,"s":1,"a":true},{"u":160,"l":50,"s":1,"a":false},{"u":894,"l":260,"s":0,"a":true},{"u":929,"l":411,"s":0,"a":true},{"u":993,"l":242,"s":1,"a":false},{"u":540,"l":422,"s":0,"a":true},{"u":494,"l":231,"s":1,"a":true},{"u":666,"l":6,"s":1,"a":false},{"u":857,"l":351,"s":1,"a":false},{"u":626,"l":497,"s":1,"a":true},{"u":886,"l":634,"s":0,"a":false},{"u":798,"l":201,"s":0,"a":false},{"u":961,"l":434,"s":0,"a":false},{"u":395,"l":165,"s":0,"a":false},{"u":877,"l":789,"s":1,"a":false},{"u":819,"l":773,"s":1,"a":true},{"u":527,"l":516,"s":1,"a":false},{"u":713,"l":468,"s":0,"a":true},{"u":785,"l":384,"s":0,"a":false},{"u":905,"l":138,"s":0,"a":false},{"u":560,"l":196,"s":0,"a":false},{"u":631,"l":401,"s":1,"a":true},{"u":654,"l":559,"s":0,"a":true},{"u":892,"l":549,"s":0,"a":true},{"u":563,"l":354,"s":1,"a":false},{"u":463,"l":137,"s":0,"a":true},{"u":594,"l":318,"s":1,"a":false},{"u":982,"l":125,"s":1,"a":false},{"u":820,"l":462,"s":0,"a":true},{"u":593,"l":166,"s":0,"a":false},{"u":649,"l":91,"s":1,"a":false},{"u":956,"l":316,"s":0,"a":false},{"u":184,"l":15,"s":0,"a":false},{"u":867,"l":824,"s":0,"a":false},{"u":673,"l":15,"s":1,"a":true},{"u":957,"l":278,"s":1,"a":false},{"u":242,"l":82,"s":0,"a":true},{"u":224,"l":172,"s":1,"a":false},{"u":521,"l":70,"s":1,"a":false},{"u":791,"l":663,"s":1,"a":false},{"u":672,"l":131,"s":0,"a":false},{"u":771,"l":300,"s":1,"a":true},{"u":653,"l":516,"s":1,"a":false},{"u":696,"l":583,"s":0,"a":false},{"u":436,"l":39,"s":0,"a":false},{"u":640,"l":354,"s":0,"a":true},{"u":694,"l":28,"s":1,"a":false},{"u":147,"l":58,"s":0,"a":false},{"u":690,"l":428,"s":1,"a":true},{"u":271,"l":218,"s":0,"a":true},{"u":995,"l":958,"s":1,"a":false},{"u":968,"l":96,"s":1,"a":true},{"u":758,"l":674,"s":1,"a":true},{"u":800,"l":291,"s":0,"a":true},{"u":959,"l":715,"s":0,"a":false},{"u":618,"l":513,"s":0,"a":true},{"u":901,"l":866,"s":1,"a":false},{"u":764,"l":405,"s":0,"a":true},{"u":379,"l":187,"s":1,"a":false},{"u":353,"l":193,"s":1,"a":false},{"u":432,"l":343,"s":0,"a":false},{"u":504,"l":186,"s":1,"a":true},{"u":270,"l":242,"s":0,"a":true},{"u":407,"l":123,"s":1,"a":false},{"u":444,"l":117,"s":0,"a":true},{"u":782,"l":688,"s":1,"a":true},{"u":923,"l":495,"s":0,"a":true},{"u":464,"l":428,"s":1,"a":false},{"u":574,"l":447,"s":1,"a":true},{"u":781,"l":110,"s":0,"a":false},{"u":661,"l":222,"s":1,"a":true},{"u":958,"l":451,"s":0,"a":false},{"u":816,"l":585,"s":1,"a":false},{"u":368,"l":272,"s":0,"a":false},{"u":371,"l":291,"s":0,"a":false},{"u":576,"l":329,"s":1,"a":true},{"u":715,"l":78,"s":0,"a":false},{"u":40,"l":31,"s":0,"a":false},{"u":344,"l":196,"s":1,"a":false},{"u":401,"l":82,"s":1,"a":true},{"u":885,"l":387,"s":0,"a":true},{"u":978,"l":920,"s":1,"a":false},{"u":821,"l":771,"s":0,"a":false},{"u":994,"l":426,"s":0,"a":false},{"u":768,"l":283,"s":1,"a":false},{"u":676,"l":123,"s":1,"a":false},{"u":851,"l":510,"s":1,"a":true},{"u":179,"l":70,"s":0,"a":true},{"u":894,"l":577,"s":1,"a":false},{"u":524,"l":66,"s":1,"a":true},{"u":869,"l":704,"s":1,"a":false},{"u":699,"l":222,"s":1,"a":true},{"u":907,"l":129,"s":0,"a":true},{"u":633,"l":387,"s":0,"a":false},{"u":299,"l":201,"s":0,"a":true},{"u":348,"l":9,"s":0,"a":false},{"u":445,"l":44,"s":1,"a":false},{"u":559,"l":549,"s":1,"a":false},{"u":697,"l":152,"s":0,"a":false},{"u":487,"l":113,"s":0,"a":true},{"u":622,"l":176,"s":1,"a":false},{"u":987,"l":317,"s":1,"a":false},{"u":691,"l":364,"s":1,"a":false},{"u":874,"l":154,"s":0,"a":false},{"u":124,"l":113,"s":0,"a":false},{"u":724,"l":24,"s":1,"a":true},{"u":573,"l":334,"s":0,"a":true},{"u":913,"l":597,"s":1,"a":true},{"u":637,"l":227,"s":0,"a":false},{"u":698,"l":379,"s":0,"a":false},{"u":840,"l":60,"s":1,"a":true},{"u":736,"l":666,"s":1,"a":true},{"u":705,"l":116,"s":0,"a":true},{"u":972,"l":905,"s":1,"a":true},{"u":318,"l":205,"s":1,"a":true},{"u":784,"l":76,"s":0,"a":false},{"u":844,"l":315,"s":1,"a":false},{"u":755,"l":87,"s":1,"a":false},{"u":713,"l":366,"s":1,"a":false},{"u":727,"l":95,"s":1,"a":true},{"u":668,"l":291,"s":0,"a":false},{"u":513,"l":404,"s":1,"a":true},{"u":627,"l":174,"s":0,"a":true},{"u":199,"l":52,"s":1,"a":false},{"u":743,"l":517,"s":0,"a":false},{"u":456,"l":381,"s":1,"a":true},{"u":826,"l":8,"s":1,"a":true},{"u":855,"l":693,"s":1,"a":true},{"u":596,"l":286,"s":1,"a":false},{"u":754,"l":549,"s":1,"a":true},{"u":839,"l":830,"s":0,"a":true},{"u":659,"l":486,"s":1,"a":false},{"u":706,"l":313,"s":1,"a":true},{"u":576,"l":14,"s":1,"a":true},{"u":699,"l":439,"s":0,"a":false},{"u":112,"l":102,"s":1,"a":true},{"u":114,"l":83,"s":0,"a":true},{"u":880,"l":77,"s":1,"a":false},{"u":751,"l":121,"s":0,"a":true},{"u":843,"l":258,"s":0,"a":false},{"u":987,"l":112,"s":1,"a":false},{"u":761,"l":676,"s":0,"a":false},{"u":481,"l":162,"s":1,"a":true},{"u":371,"l":260,"s":0,"a":false},{"u":664,"l":242,"s":0,"a":true},{"u":890,"l":324,"s":1,"a":false},{"u":775,"l":302,"s":0,"a":true},{"u":806,"l":195,"s":1,"a":false},{"u":758,"l":428,"s":0,"a":true},{"u":438,"l":2,"s":0,"a":false},{"u":880,"l":252,"s":1,"a":true},{"u":687,"l":546,"s":0,"a":true},{"u":844,"l":814,"s":0,"a":false},{"u":764,"l":668,"s":0,"a":true},{"u":905,"l":861,"s":1,"a":false},{"u":974,"l":733,"s":1,"a":true},{"u":485,"l":416,"s":0,"a":false},{"u":810,"l":751,"s":0,"a":false},{"u":484,"l":467,"s":1,"a":false},{"u":883,"l":101,"s":0,"a":false},{"u":781,"l":366,"s":0,"a":true},{"u":884,"l":271,"s":0,"a":true},{"u":942,"l":891,"s":0,"a":false},{"u":599,"l":416,"s":1,"a":false},{"u":809,"l":474,"s":0,"a":false},{"u":376,"l":26,"s":0,"a":true},{"u":493,"l":410,"s":0,"a":false},{"u":316,"l":123,"s":1,"a":false},{"u":881,"l":681,"s":0,"a":true},{"u":581,"l":314,"s":0,"a":true},{"u":772,"l":272,"s":1,"a":true},{"u":758,"l":531,"s":0,"a":true},{"u":333,"l":272,"s":0,"a":false},{"u":965,"l":3,"s":0,"a":false},{"u":275,"l":189,"s":1,"a":false},{"u":623,"l":473,"s":0,"a":true},{"u":716,"l":122,"s":1,"a":false},{"u":705,"l":409,"s":1,"a":true},{"u":249,"l":71,"s":1,"a":true},{"u":162,"l":80,"s":1,"a":false},{"u":876,"l":709,"s":0,"a":true},{"u":905,"l":740,"s":0,"a":true},{"u":916,"l":858,"s":1,"a":true},{"u":649,"l":137,"s":1,"a":false},{"u":191,"l":87,"s":0,"a":false},{"u":281,"l":81,"s":1,"a":false},{"u":859,"l":711,"s":0,"a":true},{"u":974,"l":869,"s":1,"a":true},{"u":365,"l":257,"s":1,"a":true},{"u":384,"l":12,"s":0,"a":true},{"u":697,"l":579,"s":1,"a":true},{"u":532,"l":358,"s":0,"a":true},{"u":727,"l":146,"s":0,"a":false},{"u":982,"l":348,"s":1,"a":false},{"u":613,"l":65,"s":1,"a":true},{"u":701,"l":243,"s":1,"a":true},{"u":992,"l":441,"s":0,"a":true},{"u":654,"l":605,"s":0,"a":false},{"u":491,"l":64,"s":0,"a":true},{"u":526,"l":400,"s":0,"a":false},{"u":893,"l":735,"s":1,"a":false},{"u":913,"l":362,"s":1,"a":false},{"u":222,"l":85,"s":1,"a":true},{"u":924,"l":734,"s":0,"a":true},{"u":917,"l":462,"s":0,"a":false},{"u":191,"l":49,"s":1,"a":false},{"u":919,"l":155,"s":1,"a":false},{"u":997,"l":499,"s":0,"a":false},{"u":894,"l":760,"s":0,"a":false},{"u":978,"l":787,"s":0,"a":false},{"u":829,"l":209,"s":0,"a":false},{"u":687,"l":644,"s":1,"a":false},{"u":682,"l":398,"s":0,"a":false},{"u":607,"l":70,"s":0,"a":false},{"u":268,"l":216,"s":0,"a":true},{"u":931,"l":159,"s":1,"a":true},{"u":223,"l":46,"s":0,"a":false},{"u":449,"l":333,"s":1,"a":true},{"u":900,"l":402,"s":0,"a":true},{"u":959,"l":887,"s":0,"a":false},{"u":678,"l":113,"s":1,"a":false},{"u":430,"l":287,"s":1,"a":true},{"u":471,"l":461,"s":1,"a":false},{"u":944,"l":712,"s":0,"a":true},{"u":592,"l":360,"s":1,"a":false},{"u":683,"l":511,"s":0,"a":false},{"u":123,"l":14,"s":0,"a":true},{"u":832,"l":660,"s":1,"a":true},{"u":454,"l":85,"s":0,"a":false},{"u":362,"l":188,"s":0,"a":true},{"u":932,"l":287,"s":0,"a":false},{"u":412,"l":254,"s":0,"a":false},{"u":933,"l":197,"s":0,"a":false},{"u":635,"l":178,"s":0,"a":false},{"u":708,"l":673,"s":1,"a":false},{"u":859,"l":113,"s":1,"a":false},{"u":745,"l":309,"s":1,"a":true},{"u":400,"l":387,"s":0,"a":false},{"u":404,"l":53,"s":0,"a":false},{"u":738,"l":536,"s":0,"a":false},{"u":577,"l":256,"s":0,"a":true},{"u":595,"l":98,"s":1,"a":true},{"u":857,"l":252,"s":1,"a":true},{"u":966,"l":570,"s":0,"a":false},{"u":484,"l":269,"s":1,"a":false},{"u":593,"l":10,"s":1,"a":false},{"u":717,"l":55,"s":1,"a":true},{"u":813,"l":382,"s":0,"a":false},{"u":239,"l":34,"s":0,"a":true},{"u":966,"l":141,"s":1,"a":false},{"u":756,"l":258,"s":0,"a":true},{"u":374,"l":43,"s":1,"a":false},{"u":944,"l":84,"s":1,"a":true},{"u":903,"l":742,"s":0,"a":false},{"u":425,"l":252,"s":0,"a":true},{"u":307,"l":296,"s":0,"a":true},{"u":597,"l":441,"s":0,"a":true},{"u":976,"l":698,"s":1,"a":false},{"u":674,"l":167,"s":1,"a":true},{"u":751,"l":635,"s":1,"a":true},{"u":583,"l":406,"s":1,"a":true},{"u":489,"l":167,"s":0,"a":true},{"u":894,"l":139,"s":1,"a":false},{"u":567,"l":83,"s":0,"a":true},{"u":739,"l":420,"s":1,"a":true},{"u":875,"l":435,"s":0,"a":false},{"u":836,"l":206,"s":1,"a":false},{"u":741,"l":63,"s":0,"a":false},{"u":404,"l":120,"s":1,"a":true},{"u":792,"l":718,"s":0,"a":true},{"u":835,"l":721,"s":1,"a":false},{"u":947,"l":337,"s":0,"a":false},{"u":893,"l":118,"s":1,"a":true},{"u":758,"l":224,"s":0,"a":true},{"u":989,"l":500,"s":0,"a":true},{"u":643,"l":176,"s":1,"a":true},{"u":976,"l":789,"s":0,"a":false},{"u":688,"l":399,"s":0,"a":true},{"u":148,"l":118,"s":0,"a":true},{"u":871,"l":261,"s":1,"a":false},{"u":944,"l":882,"s":0,"a":true},{"u":718,"l":650,"s":0,"a":true},{"u":491,"l":467,"s":1,"a":false},{"u":353,"l":214,"s":0,"a":false},{"u":883,"l":376,"s":1,"a":true},{"u":402,"l":372,"s":0,"a":false},{"u":609,"l":522,"s":1,"a":true},{"u":554,"l":25,"s":1,"a":false},{"u":879,"l":782,"s":0,"a":true},{"u":477,"l":250,"s":1,"a":false},{"u":949,"l":334,"s":0,"a":true},{"u":983,"l":950,"s":1,"a":false},{"u":791,"l":92,"s":0,"a":false},{"u":828,"l":93,"s":1,"a":false},{"u":770,"l":488,"s":0,"a":false},{"u":813,"l":790,"s":0,"a":true},{"u":650,"l":604,"s":0,"a":true},{"u":523,"l":114,"s":1,"a":true},{"u":777,"l":566,"s":0,"a":false},{"u":807,"l":468,"s":0,"a":false},{"u":743,"l":80,"s":1,"a":true},{"u":959,"l":2,"s":0,"a":false},{"u":905,"l":368,"s":0,"a":true},{"u":900,"l":161,"s":1,"a":true},{"u":970,"l":581,"s":1,"a":true},{"u":525,"l":273,"s":0,"a":true},{"u":940,"l":833,"s":1,"a":true},{"u":797,"l":603,"s":0,"a":false},{"u":978,"l":343,"s":0,"a":false},{"u":814,"l":293,"s":1,"a":true},{"u":962,"l":668,"s":0,"a":true},{"u":849,"l":298,"s":0,"a":true},{"u":703,"l":203,"s":0,"a":false},{"u":232,"l":181,"s":1,"a":true},{"u":572,"l":256,"s":0,"a":true},{"u":852,"l":296,"s":1,"a":true},{"u":573,"l":22,"s":0,"a":false},{"u":398,"l":280,"s":0,"a":false},{"u":947,"l":743,"s":0,"a":false},{"u":952,"l":691,"s":0,"a":true},{"u":129,"l":110,"s":1,"a":false},{"u":625,"l":94,"s":0,"a":true},{"u":629,"l":346,"s":0,"a":false},{"u":972,"l":181,"s":0,"a":true},{"u":840,"l":124,"s":0,"a":true},{"u":570,"l":264,"s":1,"a":false},{"u":774,"l":691,"s":1,"a":false},{"u":392,"l":347,"s":0,"a":false},{"u":518,"l":268,"s":1,"a":false},{"u":630,"l":35,"s":1,"a":false},{"u":829,"l":708,"s":0,"a":false},{"u":998,"l":637,"s":0,"a":true},{"u":421,"l":117,"s":1,"a":false},{"u":799,"l":566,"s":1,"a":false},{"u":154,"l":137,"s":0,"a":true},{"u":755,"l":443,"s":0,"a":true},{"u":828,"l":610,"s":0,"a":false},{"u":231,"l":195,"s":0,"a":true},{"u":594,"l":266,"s":0,"a":true},{"u":767,"l":182,"s":0,"a":true},{"u":861,"l":576,"s":1,"a":false},{"u":827,"l":191,"s":0,"a":true},{"u":200,"l":97,"s":1,"a":true},{"u":588,"l":225,"s":1,"a":true},{"u":590,"l":580,"s":1,"a":true},{"u":966,"l":663,"s":0,"a":false},{"u":552,"l":279,"s":1,"a":true},{"u":601,"l":163,"s":1,"a":true},{"u":660,"l":151,"s":0,"a":true},{"u":537,"l":275,"s":1,"a":false},{"u":549,"l":271,"s":1,"a":false},{"u":893,"l":537,"s":0,"a":false},{"u":340,"l":185,"s":1,"a":false},{"u":402,"l":399,"s":1,"a":false},{"u":85,"l":72,"s":0,"a":true},{"u":719,"l":93,"s":1,"a":true},{"u":393,"l":346,"s":1,"a":true},{"u":568,"l":432,"s":0,"a":false},{"u":615,"l":555,"s":1,"a":true},{"u":921,"l":647,"s":0,"a":true},{"u":797,"l":144,"s":0,"a":false},{"u":803,"l":176,"s":0,"a":true},{"u":889,"l":696,"s":0,"a":false},{"u":289,"l":107,"s":1,"a":true},{"u":894,"l":434,"s":1,"a":false},{"u":982,"l":853,"s":1,"a":false},{"u":884,"l":122,"s":0,"a":false},{"u":794,"l":643,"s":1,"a":true},{"u":221,"l":74,"s":1,"a":true},{"u":960,"l":447,"s":1,"a":false},{"u":523,"l":144,"s":1,"a":true},{"u":759,"l":284,"s":0,"a":false},{"u":659,"l":273,"s":1,"a":true},{"u":774,"l":7,"s":0,"a":true},{"u":634,"l":591,"s":0,"a":false},{"u":816,"l":486,"s":1,"a":false},{"u":460,"l":46,"s":0,"a":true},{"u":859,"l":274,"s":1,"a":true},{"u":251,"l":10,"s":0,"a":true},{"u":674,"l":310,"s":1,"a":false},{"u":651,"l":238,"s":0,"a":true},{"u":689,"l":564,"s":1,"a":false},{"u":812,"l":382,"s":0,"a":true},{"u":324,"l":17,"s":1,"a":true},{"u":826,"l":421,"s":0,"a":false},{"u":658,"l":62,"s":0,"a":true},{"u":366,"l":262,"s":0,"a":true},{"u":924,"l":404,"s":0,"a":true},{"u":261,"l":84,"s":0,"a":false},{"u":991,"l":950,"s":0,"a":false},{"u":386,"l":285,"s":1,"a":false},{"u":573,"l":34,"s":0,"a":false},{"u":732,"l":451,"s":1,"a":true},{"u":203,"l":138,"s":0,"a":true},{"u":735,"l":336,"s":0,"a":false},{"u":333,"l":105,"s":1,"a":true},{"u":679,"l":466,"s":0,"a":true},{"u":885,"l":389,"s":0,"a":true},{"u":737,"l":315,"s":1,"a":false},{"u":746,"l":617,"s":1,"a":false},{"u":838,"l":569,"s":1,"a":false},{"u":661,"l":586,"s":1,"a":true},{"u":917,"l":868,"s":1,"a":false},{"u":862,"l":272,"s":1,"a":false},{"u":478,"l":31,"s":0,"a":false},{"u":885,"l":234,"s":0,"a":false},{"u":962,"l":225,"s":1,"a":false},{"u":385,"l":78,"s":1,"a":false},{"u":744,"l":187,"s":0,"a":true},{"u":956,"l":909,"s":1,"a":false},{"u":964,"l":751,"s":0,"a":false},{"u":431,"l":374,"s":0,"a":false},{"u":747,"l":560,"s":1,"a":false},{"u":923,"l":111,"s":1,"a":true},{"u":887,"l":79,"s":0,"a":false},{"u":175,"l":162,"s":0,"a":false},{"u":934,"l":402,"s":0,"a":false},{"u":851,"l":164,"s":0,"a":true},{"u":695,"l":510,"s":1,"a":false},{"u":465,"l":246,"s":0,"a":true},{"u":391,"l":288,"s":1,"a":true},{"u":922,"l":725,"s":1,"a":false},{"u":559,"l":114,"s":1,"a":false},{"u":759,"l":622,"s":1,"a":true},{"u":701,"l":629,"s":1,"a":true},{"u":838,"l":604,"s":1,"a":true},{"u":648,"l":18,"s":1,"a":false},{"u":650,"l":244,"s":1,"a":false},{"u":449,"l":315,"s":1,"a":false},{"u":469,"l":83,"s":1,"a":true},{"u":532,"l":419,"s":1,"a":true},{"u":845,"l":177,"s":1,"a":true},{"u":776,"l":662,"s":0,"a":false},{"u":674,"l":184,"s":1,"a":true},{"u":767,"l":144,"s":1,"a":false},{"u":431,"l":82,"s":1,"a":true},{"u":519,"l":193,"s":0,"a":true},{"u":728,"l":436,"s":0,"a":true},{"u":302,"l":157,"s":1,"a":false},{"u":121,"l":51,"s":0,"a":false},{"u":986,"l":814,"s":0,"a":false},{"u":380,"l":129,"s":0,"a":true},{"u":962,"l":508,"s":1,"a":false},{"u":884,"l":257,"s":1,"a":false},{"u":644,"l":536,"s":0,"a":true},{"u":339,"l":96,"s":0,"a":false},{"u":467,"l":412,"s":1,"a":false},{"u":851,"l":265,"s":1,"a":true},{"u":862,"l":328,"s":1,"a":false},{"u":695,"l":502,"s":0,"a":true},{"u":714,"l":331,"s":1,"a":false},{"u":897,"l":455,"s":0,"a":false},{"u":949,"l":234,"s":1,"a":true},{"u":312,"l":257,"s":1,"a":false},{"u":929,"l":492,"s":1,"a":true},{"u":631,"l":366,"s":1,"a":false},{"u":691,"l":232,"s":0,"a":false},{"u":151,"l":102,"s":0,"a":true},{"u":957,"l":230,"s":0,"a":true},{"u":690,"l":270,"s":0,"a":true},{"u":876,"l":586,"s":1,"a":true},{"u":957,"l":61,"s":1,"a":true},{"u":753,"l":135,"s":0,"a":true},{"u":803,"l":137,"s":0,"a":false},{"u":597,"l":287,"s":0,"a":false},{"u":436,"l":221,"s":0,"a":true},{"u":870,"l":713,"s":1,"a":false},{"u":617,"l":432,"s":0,"a":true},{"u":720,"l":172,"s":0,"a":false},{"u":930,"l":44,"s":0,"a":true},{"u":688,"l":133,"s":0,"a":true},{"u":160,"l":80,"s":1,"a":false},{"u":550,"l":224,"s":1,"a":true},{"u":548,"l":454,"s":1,"a":true},{"u":932,"l":176,"s":0,"a":true},{"u":553,"l":473,"s":1,"a":true},{"u":828,"l":137,"s":1,"a":false},{"u":794,"l":434,"s":1,"a":false},{"u":594,"l":36,"s":1,"a":true},{"u":361,"l":325,"s":1,"a":false},{"u":629,"l":519,"s":1,"a":false},{"u":217,"l":151,"s":0,"a":false},{"u":757,"l":639,"s":0,"a":false},{"u":938,"l":525,"s":1,"a":false},{"u":810,"l":257,"s":1,"a":true},{"u":837,"l":649,"s":0,"a":false},{"u":613,"l":95,"s":1,"a":true},{"u":646,"l":257,"s":1,"a":true},{"u":802,"l":750,"s":0,"a":false},{"u":842,"l":425,"s":1,"a":false},{"u":846,"l":514,"s":1,"a":false},{"u":562,"l":253,"s":1,"a":false},{"u":603,"l":414,"s":0,"a":false},{"u":663,"l":509,"s":1,"a":true},{"u":466,"l":452,"s":1,"a":false},{"u":934,"l":744,"s":0,"a":false},{"u":638,"l":293,"s":1,"a":false},{"u":689,"l":511,"s":1,"a":false},{"u":326,"l":320,"s":0,"a":false},{"u":467,"l":90,"s":0,"a":false},{"u":875,"l":695,"s":1,"a":false},{"u":567,"l":474,"s":0,"a":true},{"u":867,"l":764,"s":0,"a":false},{"u":411,"l":236,"s":0,"a":true},{"u":765,"l":732,"s":0,"a":true},{"u":976,"l":311,"s":1,"a":true},{"u":887,"l":428,"s":0,"a":false},{"u":161,"l":116,"s":0,"a":true},{"u":785,"l":542,"s":1,"a":true},{"u":157,"l":54,"s":0,"a":true},{"u":869,"l":310,"s":1,"a":true},{"u":826,"l":653,"s":0,"a":true},{"u":502,"l":160,"s":0,"a":false},{"u":563,"l":246,"s":0,"a":true},{"u":839,"l":736,"s":1,"a":false},{"u":996,"l":577,"s":1,"a":false},{"u":957,"l":241,"s":1,"a":false},{"u":774,"l":628,"s":1,"a":true},{"u":829,"l":417,"s":1,"a":true},{"u":886,"l":586,"s":0,"a":false},{"u":877,"l":614,"s":0,"a":false},{"u":845,"l":714,"s":0,"a":false},{"u":798,"l":793,"s":1,"a":true},{"u":804,"l":728,"s":0,"a":true},{"u":513,"l":78,"s":1,"a":true},{"u":224,"l":154,"s":0,"a":true},{"u":970,"l":132,"s":1,"a":false},{"u":713,"l":414,"s":0,"a":true},{"u":927,"l":295,"s":1,"a":true},{"u":640,"l":484,"s":0,"a":true},{"u":855,"l":63,"s":0,"a":false},{"u":624,"l":331,"s":0,"a":false},{"u":654,"l":377,"s":0,"a":false},{"u":708,"l":375,"s":0,"a":true},{"u":621,"l":324,"s":0,"a":false},{"u":816,"l":736,"s":1,"a":true},{"u":850,"l":543,"s":0,"a":true},{"u":590,"l":326,"s":0,"a":false},{"u":749,"l":273,"s":1,"a":true},{"u":893,"l":683,"s":1,"a":true},{"u":472,"l":42,"s":1,"a":false},{"u":962,"l":798,"s":1,"a":true},{"u":959,"l":306,"s":0,"a":true},{"u":460,"l":40,"s":0,"a":true},{"u":872,"l":250,"s":1,"a":true},{"u":299,"l":7,"s":0,"a":false},{"u":495,"l":354,"s":0,"a":true},{"u":155,"l":100,"s":1,"a":false},{"u":750,"l":108,"s":0,"a":true},{"u":992,"l":131,"s":1,"a":true},{"u":295,"l":286,"s":1,"a":true},{"u":335,"l":245,"s":0,"a":true},{"u":773,"l":233,"s":1,"a":true},{"u":492,"l":229,"s":0,"a":false},{"u":908,"l":814,"s":1,"a":false},{"u":405,"l":257,"s":1,"a":false},{"u":440,"l":89,"s":0,"a":false},{"u":349,"l":324,"s":0,"a":false},{"u":330,"l":234,"s":1,"a":true},{"u":690,"l":595,"s":0,"a":false},{"u":982,"l":761,"s":1,"a":true},{"u":817,"l":565,"s":0,"a":true},{"u":836,"l":351,"s":0,"a":false},{"u":718,"l":180,"s":1,"a":false},{"u":830,"l":98,"s":0,"a":false},{"u":917,"l":574,"s":0,"a":false},{"u":761,"l":388,"s":0,"a":true},{"u":637,"l":524,"s":0,"a":true},{"u":640,"l":457,"s":0,"a":false},{"u":537,"l":5,"s":0,"a":false},{"u":684,"l":132,"s":0,"a":true},{"u":439,"l":61,"s":1,"a":true},{"u":988,"l":896,"s":1,"a":false},{"u":594,"l":331,"s":0,"a":true},{"u":761,"l":738,"s":1,"a":true},{"u":523,"l":243,"s":1,"a":false},{"u":547,"l":40,"s":1,"a":false},{"u":611,"l":493,"s":1,"a":true},{"u":568,"l":452,"s":1,"a":true},{"u":463,"l":120,"s":1,"a":true},{"u":900,"l":61,"s":0,"a":true},{"u":687,"l":49,"s":0,"a":true},{"u":923,"l":524,"s":0,"a":false},{"u":750,"l":481,"s":1,"a":false},{"u":964,"l":953,"s":1,"a":true},{"u":267,"l":164,"s":1,"a":true},{"u":308,"l":89,"s":0,"a":false},{"u":598,"l":272,"s":0,"a":true},{"u":711,"l":90,"s":1,"a":false},{"u":884,"l":615,"s":1,"a":true},{"u":570,"l":49,"s":1,"a":true},{"u":826,"l":3,"s":1,"a":true},{"u":837,"l":528,"s":0,"a":true},{"u":635,"l":8,"s":0,"a":false},{"u":779,"l":60,"s":1,"a":true},{"u":558,"l":308,"s":0,"a":true},{"u":644,"l":342,"s":1,"a":false},{"u":870,"l":719,"s":1,"a":false},{"u":835,"l":165,"s":1,"a":true},{"u":572,"l":25,"s":1,"a":false},{"u":870,"l":828,"s":0,"a":true},{"u":976,"l":881,"s":1,"a":false},{"u":903,"l":597,"s":0,"a":true},{"u":937,"l":511,"s":0,"a":false},{"u":435,"l":68,"s":1,"a":true},{"u":899,"l":641,"s":0,"a":false},{"u":597,"l":249,"s":1,"a":true},{"u":354,"l":200,"s":0,"a":false},{"u":579,"l":189,"s":0,"a":true},{"u":947,"l":309,"s":1,"a":false},{"u":599,"l":297,"s":0,"a":true},{"u":533,"l":121,"s":0,"a":true},{"u":966,"l":603,"s":1,"a":false},{"u":166,"l":149,"s":1,"a":true},{"u":787,"l":475,"s":0,"a":false},{"u":459,"l":387,"s":1,"a":false},{"u":612,"l":19,"s":0,"a":true},{"u":343,"l":158,"s":0,"a":false},{"u":751,"l":737,"s":0,"a":false},{"u":960,"l":420,"s":1,"a":false},{"u":640,"l":563,"s":1,"a":true},{"u":185,"l":17,"s":0,"a":true},{"u":674,"l":535,"s":1,"a":true},{"u":768,"l":720,"s":0,"a":false},{"u":604,"l":513,"s":1,"a":true},{"u":109,"l":3,"s":0,"a":true},{"u":952,"l":244,"s":1,"a":true},{"u":689,"l":679,"s":0,"a":false},{"u":808,"l":432,"s":1,"a":true},{"u":602,"l":135,"s":1,"a":true},{"u":749,"l":671,"s":0,"a":true},{"u":527,"l":1,"s":1,"a":true},{"u":418,"l":44,"s":0,"a":true},{"u":699,"l":369,"s":0,"a":false},{"u":383,"l":261,"s":1,"a":false},{"u":110,"l":4,"s":1,"a":false},{"u":585,"l":152,"s":0,"a":true},{"u":876,"l":692,"s":0,"a":false},{"u":760,"l":759,"s":0,"a":true},{"u":628,"l":551,"s":1,"a":true},{"u":740,"l":713,"s":0,"a":true},{"u":883,"l":526,"s":0,"a":true},{"u":828,"l":167,"s":0,"a":false},{"u":836,"l":712,"s":1,"a":false},{"u":687,"l":482,"s":1,"a":true},{"u":247,"l":47,"s":0,"a":true},{"u":495,"l":113,"s":1,"a":true},{"u":806,"l":682,"s":1,"a":false},{"u":688,"l":8,"s":1,"a":true},{"u":747,"l":631,"s":0,"a":true},{"u":558,"l":216,"s":0,"a":false},{"u":982,"l":969,"s":1,"a":true},{"u":829,"l":410,"s":1,"a":true},{"u":995,"l":304,"s":1,"a":false},{"u":902,"l":55,"s":1,"a":false},{"u":663,"l":570,"s":1,"a":false},{"u":903,"l":338,"s":1,"a":true},{"u":571,"l":77,"s":1,"a":false},{"u":903,"l":93,"s":1,"a":true},{"u":705,"l":427,"s":0,"a":true},{"u":374,"l":146,"s":1,"a":false},{"u":155,"l":66,"s":1,"a":false},{"u":734,"l":732,"s":0,"a":false},{"u":716,"l":215,"s":1,"a":false},{"u":293,"l":208,"s":1,"a":true},{"u":958,"l":464,"s":0,"a":true},{"u":881,"l":442,"s":1,"a":false},{"u":249,"l":131,"s":1,"a":true},{"u":253,"l":1,"s":1,"a":false},{"u":456,"l":225,"s":0,"a":false},{"u":589,"l":226,"s":0,"a":true},{"u":343,"l":5,"s":0,"a":false},{"u":904,"l":741,"s":0,"a":false},{"u":279,"l":16,"s":1,"a":true},{"u":383,"l":369,"s":1,"a":true},{"u":775,"l":216,"s":1,"a":false},{"u":938,"l":195,"s":0,"a":false},{"u":901,"l":456,"s":0,"a":true},{"u":552,"l":310,"s":1,"a":true},{"u":230,"l":75,"s":1,"a":true},{"u":679,"l":280,"s":1,"a":false},{"u":895,"l":708,"s":1,"a":false},{"u":841,"l":252,"s":1,"a":true},{"u":596,"l":142,"s":0,"a":false},{"u":664,"l":130,"s":1,"a":true},{"u":603,"l":319,"s":0,"a":false},{"u":535,"l":464,"s":1,"a":true},{"u":618,"l":327,"s":1,"a":false},{"u":881,"l":431,"s":0,"a":false},{"u":842,"l":196,"s":0,"a":false},{"u":909,"l":801,"s":1,"a":false},{"u":836,"l":734,"s":1,"a":false},{"u":367,"l":163,"s":1,"a":false},{"u":549,"l":10,"s":0,"a":false},{"u":463,"l":269,"s":0,"a":false},{"u":722,"l":337,"s":1,"a":true},{"u":640,"l":544,"s":1,"a":true},{"u":938,"l":232,"s":0,"a":false},{"u":307,"l":87,"s":0,"a":false},{"u":847,"l":730,"s":1,"a":false},{"u":720,"l":296,"s":1,"a":false},{"u":532,"l":287,"s":0,"a":false},{"u":864,"l":771,"s":1,"a":false},{"u":555,"l":250,"s":0,"a":false},{"u":812,"l":212,"s":0,"a":false},{"u":816,"l":48,"s":1,"a":false},{"u":760,"l":395,"s":0,"a":false},{"u":713,"l":404,"s":1,"a":true},{"u":568,"l":201,"s":0,"a":true},{"u":464,"l":433,"s":0,"a":false},{"u":967,"l":832,"s":1,"a":false},{"u":623,"l":305,"s":1,"a":true},{"u":486,"l":131,"s":1,"a":false},{"u":861,"l":483,"s":0,"a":true},{"u":981,"l":245,"s":1,"a":true},{"u":823,"l":99,"s":0,"a":true},{"u":317,"l":204,"s":1,"a":true},{"u":387,"l":85,"s":0,"a":false},{"u":628,"l":462,"s":1,"a":true},{"u":825,"l":642,"s":0,"a":false},{"u":364,"l":39,"s":0,"a":true},{"u":865,"l":273,"s":1,"a":false},{"u":611,"l":39,"s":0,"a":true},{"u":303,"l":39,"s":0,"a":false},{"u":651,"l":491,"s":0,"a":true},{"u":167,"l":162,"s":0,"a":false},{"u":706,"l":353,"s":0,"a":false},{"u":715,"l":143,"s":1,"a":false},{"u":587,"l":192,"s":0,"a":true},{"u":349,"l":232,"s":1,"a":true},{"u":122,"l":5,"s":0,"a":true},{"u":512,"l":363,"s":1,"a":true},{"u":731,"l":395,"s":1,"a":false},{"u":364,"l":147,"s":0,"a":false},{"u":582,"l":98,"s":0,"a":true},{"u":932,"l":179,"s":0,"a":true},{"u":140,"l":99,"s":0,"a":false},{"u":833,"l":237,"s":0,"a":false},{"u":731,"l":480,"s":1,"a":true},{"u":701,"l":61,"s":0,"a":true},{"u":831,"l":318,"s":1,"a":false},{"u":754,"l":633,"s":0,"a":false},{"u":544,"l":121,"s":1,"a":false},{"u":771,"l":604,"s":1,"a":false},{"u":933,"l":408,"s":1,"a":true},{"u":912,"l":653,"s":1,"a":true},{"u":854,"l":700,"s":0,"a":false},{"u":953,"l":30,"s":0,"a":false},{"u":809,"l":671,"s":1,"a":false},{"u":985,"l":288,"s":1,"a":true},{"u":588,"l":170,"s":1,"a":false},{"u":923,"l":597,"s":0,"a":true},{"u":698,"l":190,"s":1,"a":false},{"u":860,"l":843,"s":1,"a":true},{"u":862,"l":696,"s":1,"a":false},{"u":429,"l":190,"s":1,"a":true},{"u":505,"l":101,"s":0,"a":false},{"u":605,"l":161,"s":0,"a":true},{"u":135,"l":57,"s":0,"a":false},{"u":428,"l":258,"s":0,"a":false},{"u":546,"l":542,"s":0,"a":true},{"u":851,"l":57,"s":1,"a":true},{"u":823,"l":524,"s":0,"a":false},{"u":511,"l":381,"s":1,"a":true},{"u":990,"l":16,"s":1,"a":false},{"u":509,"l":184,"s":1,"a":true},{"u":919,"l":717,"s":1,"a":true},{"u":940,"l":472,"s":0,"a":false},{"u":658,"l":56,"s":1,"a":false},{"u":820,"l":328,"s":1,"a":true},{"u":635,"l":140,"s":1,"a":false},{"u":963,"l":761,"s":1,"a":true},{"u":982,"l":680,"s":1,"a":true},{"u":543,"l":379,"s":0,"a":false},{"u":897,"l":430,"s":0,"a":true},{"u":742,"l":389,"s":0,"a":true},{"u":637,"l":438,"s":0,"a":false},{"u":690,"l":351,"s":0,"a":true},{"u":929,"l":606,"s":1,"a":true},{"u":709,"l":511,"s":1,"a":false},{"u":184,"l":104,"s":1,"a":true},{"u":519,"l":251,"s":0,"a":true},{"u":717,"l":420,"s":0,"a":true},{"u":828,"l":739,"s":0,"a":false},{"u":732,"l":70,"s":1,"a":false},{"u":948,"l":729,"s":0,"a":false},{"u":284,"l":232,"s":1,"a":true},{"u":379,"l":279,"s":0,"a":true},{"u":382,"l":18,"s":0,"a":false},{"u":190,"l":62,"s":0,"a":false},{"u":859,"l":616,"s":0,"a":true},{"u":793,"l":563,"s":1,"a":true},{"u":777,"l":320,"s":0,"a":false},{"u":442,"l":110,"s":0,"a":false},{"u":596,"l":502,"s":0,"a":true},{"u":651,"l":434,"s":0,"a":true},{"u":955,"l":194,"s":1,"a":true},{"u":593,"l":411,"s":0,"a":true},{"u":821,"l":744,"s":0,"a":false},{"u":602,"l":128,"s":1,"a":false},{"u":145,"l":58,"s":1,"a":true},{"u":706,"l":390,"s":1,"a":true},{"u":953,"l":187,"s":0,"a":true},{"u":626,"l":481,"s":1,"a":false},{"u":652,"l":207,"s":0,"a":true},{"u":772,"l":677,"s":1,"a":false},{"u":906,"l":580,"s":1,"a":true},{"u":281,"l":36,"s":1,"a":false},{"u":120,"l":15,"s":0,"a":true},{"u":562,"l":243,"s":0,"a":true},{"u":995,"l":916,"s":1,"a":true},{"u":899,"l":755,"s":1,"a":false},{"u":573,"l":337,"s":1,"a":true},{"u":866,"l":300,"s":1,"a":true},{"u":966,"l":550,"s":1,"a":true},{"u":765,"l":740,"s":1,"a":true},{"u":851,"l":292,"s":1,"a":true},{"u":933,"l":489,"s":0,"a":true},{"u":971,"l":505,"s":0,"a":true},{"u":800,"l":111,"s":0,"a":true},{"u":519,"l":255,"s":1,"a":false},{"u":620,"l":131,"s":0,"a":false},{"u":926,"l":20,"s":0,"a":false},{"u":669,"l":205,"s":1,"a":false},{"u":461,"l":364,"s":0,"a":false},{"u":986,"l":488,"s":0,"a":true},{"u":638,"l":480,"s":0,"a":true},{"u":860,"l":391,"s":0,"a":true},{"u":491,"l":214,"s":0,"a":true},{"u":528,"l":307,"s":0,"a":false},{"u":660,"l":405,"s":1,"a":false},{"u":944,"l":719,"s":0,"a":false},{"u":671,"l":152,"s":0,"a":false},{"u":720,"l":296,"s":1,"a":true},{"u":813,"l":593,"s":1,"a":true},{"u":946,"l":506,"s":0,"a":true},{"u":565,"l":286,"s":0,"a":true},{"u":568,"l":200,"s":0,"a":true},{"u":788,"l":81,"s":1,"a":false},{"u":825,"l":653,"s":0,"a":true},{"u":966,"l":108,"s":1,"a":true},{"u":290,"l":124,"s":1,"a":true},{"u":705,"l":24,"s":0,"a":false},{"u":580,"l":309,"s":0,"a":false},{"u":895,"l":540,"s":0,"a":false},{"u":594,"l":178,"s":1,"a":true},{"u":664,"l":144,"s":0,"a":true},{"u":949,"l":626,"s":1,"a":true},{"u":260,"l":129,"s":1,"a":true},{"u":756,"l":56,"s":0,"a":false},{"u":265,"l":180,"s":1,"a":true},{"u":822,"l":481,"s":0,"a":false},{"u":650,"l":213,"s":0,"a":false},{"u":574,"l":525,"s":1,"a":true},{"u":602,"l":95,"s":0,"a":false},{"u":981,"l":343,"s":0,"a":false},{"u":567,"l":517,"s":0,"a":false},{"u":617,"l":296,"s":1,"a":true},{"u":608,"l":176,"s":0,"a":true},{"u":330,"l":225,"s":1,"a":false},{"u":89,"l":46,"s":1,"a":true},{"u":984,"l":764,"s":1,"a":false},{"u":716,"l":572,"s":0,"a":true},{"u":273,"l":142,"s":1,"a":true},{"u":879,"l":564,"s":0,"a":true},{"u":741,"l":191,"s":1,"a":true},{"u":279,"l":251,"s":0,"a":false},{"u":377,"l":239,"s":0,"a":true},{"u":996,"l":984,"s":1,"a":false},{"u":605,"l":515,"s":0,"a":false},{"u":748,"l":721,"s":1,"a":false},{"u":208,"l":199,"s":0,"a":true},{"u":889,"l":689,"s":0,"a":true},{"u":319,"l":302,"s":1,"a":true},{"u":571,"l":348,"s":1,"a":true},{"u":728,"l":163,"s":1,"a":true},{"u":520,"l":170,"s":1,"a":false},{"u":619,"l":390,"s":0,"a":true},{"u":405,"l":96,"s":1,"a":true},{"u":646,"l":382,"s":1,"a":true},{"u":344,"l":340,"s":0,"a":true},{"u":931,"l":512,"s":0,"a":true},{"u":848,"l":316,"s":1,"a":true},{"u":334,"l":152,"s":0,"a":true},{"u":811,"l":348,"s":1,"a":true},{"u":324,"l":51,"s":0,"a":true},{"u":552,"l":283,"s":0,"a":false},{"u":235,"l":146,"s":0,"a":true},{"u":997,"l":584,"s":1,"a":false},{"u":970,"l":926,"s":1,"a":false},{"u":929,"l":407,"s":1,"a":false},{"u":999,"l":438,"s":1,"a":true},{"u":552,"l":68,"s":0,"a":false},{"u":744,"l":413,"s":0,"a":true},{"u":895,"l":245,"s":1,"a":false},{"u":977,"l":695,"s":0,"a":true},{"u":907,"l":662,"s":1,"a":true},{"u":554,"l":254,"s":1,"a":true},{"u":207,"l":136,"s":0,"a":false},{"u":803,"l":291,"s":1,"a":false},{"u":827,"l":7,"s":1,"a":true},{"u":839,"l":303,"s":1,"a":false},{"u":977,"l":843,"s":1,"a":true},{"u":860,"l":717,"s":0,"a":false},{"u":813,"l":80,"s":0,"a":false},{"u":678,"l":317,"s":1,"a":true},{"u":986,"l":693,"s":0,"a":true},{"u":630,"l":275,"s":1,"a":false},{"u":608,"l":166,"s":0,"a":false},{"u":369,"l":264,"s":0,"a":true},{"u":749,"l":244,"s":0,"a":false},{"u":802,"l":251,"s":0,"a":true},{"u":536,"l":8,"s":0,"a":true},{"u":982,"l":148,"s":0,"a":false},{"u":511,"l":287,"s":0,"a":true},{"u":830,"l":667,"s":1,"a":false},{"u":941,"l":835,"s":0,"a":false},{"u":842,"l":521,"s":1,"a":false},{"u":166,"l":88,"s":1,"a":false},{"u":904,"l":49,"s":1,"a":false},{"u":899,"l":671,"s":1,"a":false},{"u":986,"l":511,"s":0,"a":true},{"u":992,"l":258,"s":1,"a":false},{"u":103,"l":66,"s":1,"a":false},{"u":426,"l":338,"s":1,"a":true},{"u":641,"l":571,"s":0,"a":true},{"u":537,"l":377,"s":1,"a":false},{"u":597,"l":319,"s":1,"a":false},{"u":827,"l":661,"s":0,"a":true},{"u":324,"l":96,"s":1,"a":true},{"u":325,"l":285,"s":1,"a":false},{"u":544,"l":531,"s":1,"a":false},{"u":813,"l":14,"s":1,"a":false},{"u":683,"l":362,"s":0,"a":false},{"u":532,"l":132,"s":1,"a":false},{"u":992,"l":651,"s":0,"a":false},{"u":889,"l":491,"s":1,"a":false},{"u":886,"l":495,"s":1,"a":false},{"u":932,"l":679,"s":0,"a":true},{"u":758,"l":733,"s":0,"a":false},{"u":570,"l":52,"s":1,"a":true},{"u":398,"l":23,"s":1,"a":true},{"u":955,"l":770,"s":0,"a":false},{"u":907,"l":568,"s":1,"a":false},{"u":321,"l":73,"s":0,"a":false},{"u":961,"l":897,"s":1,"a":true},{"u":836,"l":220,"s":1,"a":true},{"u":602,"l":133,"s":1,"a":false},{"u":748,"l":374,"s":1,"a":true},{"u":925,"l":35,"s":1,"a":false},{"u":866,"l":589,"s":0,"a":false},{"u":996,"l":386,"s":1,"a":true},{"u":707,"l":113,"s":1,"a":true},{"u":477,"l":258,"s":1,"a":false},{"u":955,"l":432,"s":0,"a":true},{"u":906,"l":93,"s":0,"a":false},{"u":897,"l":225,"s":1,"a":false},{"u":742,"l":410,"s":0,"a":true},{"u":418,"l":4,"s":1,"a":true},{"u":309,"l":79,"s":0,"a":true},{"u":774,"l":380,"s":0,"a":false},{"u":819,"l":598,"s":0,"a":false},{"u":857,"l":86,"s":1,"a":false},{"u":658,"l":413,"s":1,"a":false},{"u":289,"l":80,"s":1,"a":true},{"u":606,"l":539,"s":0,"a":true},{"u":536,"l":386,"s":0,"a":false},{"u":534,"l":173,"s":1,"a":true},{"u":971,"l":43,"s":0,"a":true},{"u":661,"l":657,"s":1,"a":true},{"u":978,"l":879,"s":1,"a":false},{"u":549,"l":335,"s":1,"a":false},{"u":578,"l":397,"s":1,"a":false},{"u":846,"l":98,"s":1,"a":false},{"u":299,"l":90,"s":0,"a":true},{"u":746,"l":606,"s":0,"a":true},{"u":979,"l":96,"s":0,"a":true},{"u":960,"l":916,"s":0,"a":false},{"u":642,"l":447,"s":0,"a":false},{"u":662,"l":68,"s":0,"a":false},{"u":573,"l":551,"s":0,"a":true},{"u":905,"l":378,"s":1,"a":false},{"u":901,"l":159,"s":0,"a":true},{"u":317,"l":308,"s":1,"a":false},{"u":554,"l":270,"s":0,"a":true},{"u":867,"l":689,"s":0,"a":false},{"u":798,"l":463,"s":0,"a":false},{"u":908,"l":793,"s":1,"a":false},{"u":427,"l":279,"s":0,"a":false},{"u":345,"l":331,"s":1,"a":false},{"u":927,"l":497,"s":1,"a":false},{"u":955,"l":540,"s":0,"a":false},{"u":667,"l":185,"s":1,"a":true},{"u":689,"l":550,"s":1,"a":true},{"u":853,"l":409,"s":1,"a":false},{"u":971,"l":671,"s":0,"a":true},{"u":352,"l":7,"s":0,"a":true},{"u":690,"l":76,"s":0,"a":true},{"u":718,"l":298,"s":0,"a":true},{"u":646,"l":290,"s":1,"a":false},{"u":374,"l":20,"s":0,"a":true},{"u":802,"l":66,"s":1,"a":false},{"u":628,"l":148,"s":0,"a":false},{"u":510,"l":101,"s":0,"a":false},{"u":714,"l":386,"s":1,"a":false},{"u":593,"l":17,"s":1,"a":false},{"u":678,"l":119,"s":1,"a":true},{"u":900,"l":653,"s":0,"a":false},{"u":792,"l":778,"s":1,"a":false},{"u":496,"l":211,"s":1,"a":false},{"u":674,"l":499,"s":1,"a":true},{"u":566,"l":89,"s":1,"a":true},{"u":982,"l":940,"s":0,"a":true},{"u":260,"l":173,"s":0,"a":true},{"u":754,"l":720,"s":0,"a":false},{"u":837,"l":555,"s":1,"a":false},{"u":747,"l":297,"s":1,"a":true},{"u":462,"l":8,"s":1,"a":false},{"u":994,"l":579,"s":1,"a":false},{"u":660,"l":258,"s":1,"a":false},{"u":428,"l":39,"s":0,"a":true},{"u":894,"l":450,"s":0,"a":true},{"u":229,"l":145,"s":1,"a":true},{"u":948,"l":551,"s":1,"a":false},{"u":465,"l":20,"s":1,"a":true},{"u":998,"l":683,"s":1,"a":false},{"u":939,"l":129,"s":0,"a":true},{"u":924,"l":156,"s":0,"a":false},{"u":354,"l":223,"s":1,"a":true},{"u":885,"l":757,"s":0,"a":true},{"u":928,"l":901,"s":1,"a":true},{"u":582,"l":441,"s":0,"a":true},{"u":734,"l":371,"s":1,"a":true},{"u":754,"l":580,"s":1,"a":false},{"u":867,"l":493,"s":0,"a":true},{"u":142,"l":26,"s":1,"a":false},{"u":414,"l":275,"s":1,"a":false},{"u":193,"l":14,"s":1,"a":true},{"u":952,"l":506,"s":1,"a":true},{"u":794,"l":594,"s":0,"a":false},{"u":957,"l":743,"s":0,"a":false},{"u":767,"l":550,"s":1,"a":false},{"u":411,"l":203,"s":0,"a":false},{"u":995,"l":537,"s":0,"a":true},{"u":818,"l":309,"s":1,"a":false},{"u":819,"l":482,"s":1,"a":false},{"u":550,"l":79,"s":1,"a":true},{"u":955,"l":478,"s":0,"a":true},{"u":228,"l":221,"s":1,"a":true},{"u":286,"l":261,"s":0,"a":true},{"u":577,"l":218,"s":0,"a":true},{"u":832,"l":587,"s":1,"a":true},{"u":787,"l":554,"s":1,"a":true},{"u":611,"l":188,"s":0,"a":false},{"u":964,"l":629,"s":1,"a":false},{"u":135,"l":35,"s":1,"a":true},{"u":532,"l":522,"s":0,"a":true},{"u":814,"l":137,"s":0,"a":false},{"u":987,"l":897,"s":1,"a":false},{"u":897,"l":611,"s":0,"a":true},{"u":374,"l":225,"s":1,"a":true},{"u":702,"l":68,"s":1,"a":true},{"u":283,"l":26,"s":1,"a":true},{"u":922,"l":210,"s":0,"a":true},{"u":235,"l":126,"s":1,"a":false},{"u":163,"l":65,"s":0,"a":false},{"u":910,"l":498,"s":0,"a":false},{"u":381,"l":246,"s":0,"a":false},{"u":238,"l":105,"s":1,"a":false},{"u":289,"l":4,"s":1,"a":true},{"u":969,"l":919,"s":0,"a":true},{"u":384,"l":82,"s":0,"a":true},{"u":471,"l":121,"s":0,"a":false},{"u":839,"l":271,"s":0,"a":false},{"u":944,"l":78,"s":1,"a":false},{"u":453,"l":116,"s":1,"a":false},{"u":282,"l":165,"s":1,"a":true},{"u":896,"l":780,"s":0,"a":true},{"u":489,"l":33,"s":1,"a":false},{"u":796,"l":11,"s":0,"a":false},{"u":370,"l":319,"s":1,"a":true},{"u":538,"l":135,"s":1,"a":false},{"u":681,"l":427,"s":0,"a":false},{"u":258,"l":215,"s":0,"a":true},{"u":979,"l":829,"s":0,"a":false},{"u":375,"l":291,"s":1,"a":false},{"u":611,"l":413,"s":1,"a":true},{"u":915,"l":202,"s":0,"a":true},{"u":818,"l":488,"s":0,"a":true},{"u":884,"l":526,"s":1,"a":false},{"u":579,"l":176,"s":0,"a":false},{"u":735,"l":489,"s":0,"a":false},{"u":903,"l":607,"s":0,"a":false},{"u":783,"l":668,"s":1,"a":false},{"u":768,"l":590,"s":1,"a":true},{"u":985,"l":30,"s":1,"a":false},{"u":171,"l":40,"s":0,"a":true},{"u":799,"l":558,"s":0,"a":true},{"u":692,"l":175,"s":1,"a":false},{"u":945,"l":293,"s":1,"a":false},{"u":824,"l":163,"s":0,"a":false},{"u":409,"l":286,"s":1,"a":false},{"u":657,"l":512,"s":1,"a":false},{"u":775,"l":596,"s":1,"a":false},{"u":914,"l":87,"s":1,"a":false},{"u":868,"l":670,"s":1,"a":true},{"u":612,"l":295,"s":1,"a":true},{"u":231,"l":89,"s":0,"a":false},{"u":587,"l":568,"s":1,"a":true},{"u":672,"l":130,"s":0,"a":false},{"u":449,"l":19,"s":1,"a":true},{"u":749,"l":317,"s":0,"a":true},{"u":491,"l":80,"s":1,"a":false},{"u":856,"l":666,"s":1,"a":false},{"u":662,"l":433,"s":1,"a":true},{"u":370,"l":193,"s":0,"a":false},{"u":552,"l":191,"s":0,"a":false},{"u":673,"l":192,"s":0,"a":false},{"u":300,"l":32,"s":1,"a":true},{"u":858,"l":568,"s":0,"a":true},{"u":778,"l":628,"s":0,"a":true},{"u":160,"l":28,"s":1,"a":false},{"u":820,"l":768,"s":1,"a":false},{"u":766,"l":533,"s":1,"a":true},{"u":247,"l":68,"s":1,"a":false},{"u":537,"l":444,"s":1,"a":true},{"u":772,"l":37,"s":0,"a":false},{"u":846,"l":655,"s":1,"a":false},{"u":15,"l":6,"s":0,"a":true},{"u":914,"l":700,"s":1,"a":true},{"u":794,"l":578,"s":1,"a":true},{"u":821,"l":113,"s":1,"a":true},{"u":421,"l":26,"s":1,"a":false},{"u":565,"l":324,"s":0,"a":false},{"u":417,"l":381,"s":0,"a":true},{"u":755,"l":525,"s":1,"a":true},{"u":831,"l":487,"s":1,"a":true},{"u":677,"l":436,"s":1,"a":false},{"u":800,"l":763,"s":0,"a":false},{"u":500,"l":74,"s":1,"a":true},{"u":559,"l":191,"s":0,"a":false},{"u":670,"l":290,"s":0,"a":true},{"u":430,"l":76,"s":1,"a":false},{"u":748,"l":571,"s":0,"a":true},{"u":630,"l":340,"s":1,"a":false},{"u":771,"l":76,"s":1,"a":true},{"u":820,"l":27,"s":0,"a":false},{"u":867,"l":752,"s":1,"a":true},{"u":903,"l":832,"s":1,"a":false},{"u":669,"l":581,"s":1,"a":true},{"u":852,"l":599,"s":0,"a":true},{"u":742,"l":600,"s":1,"a":true},{"u":958,"l":523,"s":0,"a":true},{"u":873,"l":735,"s":1,"a":false},{"u":355,"l":73,"s":1,"a":true},{"u":651,"l":569,"s":1,"a":true},{"u":897,"l":194,"s":0,"a":true},{"u":782,"l":80,"s":0,"a":true},{"u":899,"l":545,"s":1,"a":true},{"u":488,"l":261,"s":1,"a":false},{"u":653,"l":92,"s":0,"a":true},{"u":560,"l":198,"s":0,"a":false},{"u":684,"l":350,"s":1,"a":false},{"u":282,"l":207,"s":0,"a":true},{"u":442,"l":23,"s":0,"a":false},{"u":268,"l":183,"s":1,"a":true},{"u":660,"l":12,"s":1,"a":true},{"u":344,"l":52,"s":0,"a":false},{"u":421,"l":262,"s":0,"a":true},{"u":921,"l":778,"s":1,"a":true},{"u":364,"l":47,"s":1,"a":true},{"u":966,"l":743,"s":1,"a":true},{"u":214,"l":39,"s":1,"a":false},{"u":805,"l":803,"s":1,"a":false},{"u":419,"l":62,"s":1,"a":false},{"u":809,"l":787,"s":1,"a":true},{"u":899,"l":656,"s":1,"a":true},{"u":540,"l":349,"s":0,"a":false},{"u":491,"l":116,"s":0,"a":true},{"u":881,"l":175,"s":1,"a":true},{"u":744,"l":259,"s":0,"a":false},{"u":243,"l":28,"s":0,"a":true},{"u":647,"l":208,"s":0,"a":false},{"u":134,"l":96,"s":1,"a":true},{"u":718,"l":477,"s":1,"a":false},{"u":857,"l":334,"s":0,"a":true},{"u":243,"l":222,"s":0,"a":false},{"u":368,"l":153,"s":1,"a":true},{"u":249,"l":107,"s":1,"a":false},{"u":711,"l":339,"s":0,"a":true},{"u":34,"l":28,"s":0,"a":false},{"u":908,"l":312,"s":0,"a":true},{"u":862,"l":738,"s":1,"a":true},{"u":714,"l":554,"s":0,"a":true},{"u":946,"l":332,"s":0,"a":true},{"u":871,"l":802,"s":1,"a":false},{"u":638,"l":473,"s":1,"a":true},{"u":628,"l":471,"s":1,"a":false},{"u":833,"l":481,"s":1,"a":false},{"u":493,"l":345,"s":1,"a":false},{"u":576,"l":8,"s":1,"a":true},{"u":691,"l":350,"s":0,"a":false},{"u":705,"l":413,"s":0,"a":true},{"u":602,"l":396,"s":0,"a":false},{"u":296,"l":281,"s":1,"a":true},{"u":628,"l":438,"s":0,"a":false},{"u":458,"l":442,"s":1,"a":false},{"u":529,"l":373,"s":1,"a":true},{"u":676,"l":45,"s":0,"a":true},{"u":883,"l":43,"s":1,"a":false},{"u":975,"l":742,"s":1,"a":true},{"u":717,"l":86,"s":1,"a":true},{"u":953,"l":32,"s":1,"a":true},{"u":988,"l":56,"s":1,"a":true},{"u":616,"l":169,"s":0,"a":true},{"u":829,"l":604,"s":1,"a":false},{"u":386,"l":192,"s":0,"a":false},{"u":914,"l":779,"s":1,"a":true},{"u":570,"l":546,"s":0,"a":false},{"u":857,"l":683,"s":1,"a":false},{"u":650,"l":67,"s":1,"a":false},{"u":449,"l":180,"s":1,"a":false},{"u":452,"l":376,"s":0,"a":true},{"u":609,"l":308,"s":0,"a":false},{"u":819,"l":208,"s":1,"a":false},{"u":679,"l":207,"s":1,"a":true},{"u":613,"l":536,"s":1,"a":true},{"u":474,"l":175,"s":0,"a":true},{"u":408,"l":42,"s":1,"a":false},{"u":926,"l":474,"s":1,"a":false},{"u":806,"l":297,"s":0,"a":false},{"u":724,"l":477,"s":0,"a":false},{"u":791,"l":334,"s":0,"a":false},{"u":842,"l":101,"s":1,"a":false},{"u":340,"l":271,"s":1,"a":true},{"u":139,"l":68,"s":1,"a":true},{"u":625,"l":145,"s":1,"a":true},{"u":614,"l":109,"s":0,"a":false},{"u":543,"l":153,"s":1,"a":true},{"u":886,"l":678,"s":0,"a":false},{"u":243,"l":15,"s":0,"a":true},{"u":978,"l":687,"s":0,"a":false},{"u":320,"l":312,"s":1,"a":true},{"u":775,"l":719,"s":0,"a":true},{"u":832,"l":639,"s":1,"a":true},{"u":883,"l":634,"s":1,"a":true},{"u":974,"l":230,"s":1,"a":false},{"u":458,"l":104,"s":1,"a":true},{"u":856,"l":452,"s":1,"a":false},{"u":619,"l":444,"s":0,"a":false},{"u":805,"l":608,"s":0,"a":true},{"u":805,"l":773,"s":1,"a":true},{"u":978,"l":27,"s":1,"a":false},{"u":704,"l":570,"s":1,"a":true},{"u":884,"l":25,"s":0,"a":false},{"u":950,"l":456,"s":1,"a":true},{"u":871,"l":247,"s":0,"a":false},{"u":937,"l":879,"s":0,"a":true},{"u":721,"l":598,"s":0,"a":false},{"u":451,"l":68,"s":1,"a":false},{"u":317,"l":246,"s":0,"a":true},{"u":901,"l":891,"s":1,"a":false},{"u":820,"l":272,"s":1,"a":true},{"u":316,"l":218,"s":0,"a":false},{"u":805,"l":48,"s":0,"a":true},{"u":470,"l":312,"s":1,"a":true},{"u":978,"l":502,"s":0,"a":true},{"u":546,"l":206,"s":1,"a":false},{"u":991,"l":583,"s":0,"a":true},{"u":320,"l":259,"s":0,"a":false},{"u":800,"l":574,"s":1,"a":false},{"u":771,"l":506,"s":0,"a":true},{"u":762,"l":5,"s":1,"a":true},{"u":240,"l":42,"s":1,"a":true},{"u":845,"l":276,"s":1,"a":false},{"u":812,"l":742,"s":1,"a":true},{"u":951,"l":186,"s":1,"a":false},{"u":646,"l":105,"s":1,"a":true},{"u":762,"l":73,"s":1,"a":true},{"u":743,"l":581,"s":1,"a":true},{"u":644,"l":200,"s":0,"a":true},{"u":876,"l":402,"s":0,"a":false},{"u":628,"l":75,"s":0,"a":true},{"u":998,"l":43,"s":1,"a":true},{"u":431,"l":172,"s":0,"a":false},{"u":894,"l":476,"s":1,"a":false},{"u":836,"l":57,"s":0,"a":false},{"u":74,"l":11,"s":1,"a":false},{"u":784,"l":198,"s":0,"a":false},{"u":214,"l":198,"s":0,"a":true},{"u":793,"l":782,"s":0,"a":false},{"u":716,"l":216,"s":1,"a":true},{"u":579,"l":534,"s":0,"a":true},{"u":627,"l":560,"s":0,"a":true},{"u":207,"l":91,"s":1,"a":true},{"u":521,"l":413,"s":1,"a":false},{"u":182,"l":139,"s":1,"a":false},{"u":701,"l":269,"s":1,"a":true},{"u":664,"l":351,"s":0,"a":false},{"u":815,"l":90,"s":0,"a":false},{"u":953,"l":923,"s":1,"a":false},{"u":557,"l":242,"s":0,"a":false},{"u":551,"l":222,"s":0,"a":false},{"u":995,"l":255,"s":0,"a":true},{"u":414,"l":329,"s":0,"a":false},{"u":490,"l":437,"s":0,"a":true},{"u":623,"l":472,"s":0,"a":false},{"u":840,"l":664,"s":1,"a":false},{"u":535,"l":343,"s":1,"a":false},{"u":491,"l":303,"s":1,"a":false},{"u":722,"l":541,"s":0,"a":false},{"u":763,"l":393,"s":1,"a":false},{"u":768,"l":764,"s":0,"a":true},{"u":229,"l":25,"s":0,"a":false},{"u":989,"l":928,"s":1,"a":true},{"u":323,"l":286,"s":0,"a":false},{"u":676,"l":481,"s":1,"a":true},{"u":164,"l":79,"s":1,"a":false},{"u":429,"l":342,"s":0,"a":false},{"u":405,"l":351,"s":1,"a":false},{"u":376,"l":262,"s":1,"a":true},{"u":953,"l":859,"s":0,"a":true},{"u":772,"l":291,"s":1,"a":false},{"u":753,"l":699,"s":0,"a":false},{"u":362,"l":64,"s":1,"a":true},{"u":841,"l":602,"s":0,"a":false},{"u":912,"l":143,"s":0,"a":true},{"u":364,"l":207,"s":1,"a":true},{"u":878,"l":740,"s":1,"a":false},{"u":756,"l":691,"s":0,"a":true},{"u":288,"l":50,"s":1,"a":true},{"u":411,"l":211,"s":1,"a":true},{"u":681,"l":170,"s":1,"a":true},{"u":884,"l":80,"s":0,"a":true},{"u":344,"l":263,"s":0,"a":false},{"u":276,"l":256,"s":1,"a":true},{"u":480,"l":71,"s":0,"a":false},{"u":289,"l":34,"s":0,"a":true},{"u":519,"l":169,"s":1,"a":true},{"u":881,"l":770,"s":1,"a":false},{"u":616,"l":68,"s":0,"a":false},{"u":957,"l":62,"s":1,"a":true},{"u":726,"l":482,"s":1,"a":true},{"u":881,"l":637,"s":0,"a":true},{"u":971,"l":203,"s":0,"a":true},{"u":338,"l":242,"s":1,"a":true},{"u":695,"l":370,"s":1,"a":true},{"u":296,"l":143,"s":0,"a":true},{"u":879,"l":546,"s":0,"a":true},{"u":967,"l":748,"s":1,"a":false},{"u":973,"l":135,"s":0,"a":false},{"u":251,"l":150,"s":0,"a":true},{"u":862,"l":13,"s":0,"a":true},{"u":972,"l":689,"s":0,"a":false},{"u":317,"l":2,"s":0,"a":false},{"u":962,"l":783,"s":1,"a":true},{"u":707,"l":209,"s":1,"a":false},{"u":807,"l":375,"s":0,"a":false},{"u":229,"l":38,"s":0,"a":true},{"u":856,"l":444,"s":1,"a":true},{"u":341,"l":337,"s":1,"a":true},{"u":939,"l":59,"s":1,"a":false},{"u":855,"l":124,"s":1,"a":false},{"u":411,"l":308,"s":0,"a":true},{"u":897,"l":90,"s":0,"a":true},{"u":918,"l":598,"s":1,"a":false},{"u":818,"l":316,"s":0,"a":true},{"u":427,"l":293,"s":0,"a":false},{"u":588,"l":385,"s":1,"a":true},{"u":759,"l":432,"s":1,"a":false},{"u":818,"l":17,"s":0,"a":false},{"u":497,"l":51,"s":1,"a":false},{"u":301,"l":179,"s":1,"a":false},{"u":954,"l":303,"s":0,"a":false},{"u":981,"l":805,"s":1,"a":true},{"u":908,"l":579,"s":1,"a":false},{"u":182,"l":120,"s":0,"a":false},{"u":750,"l":317,"s":1,"a":true},{"u":537,"l":227,"s":1,"a":false},{"u":650,"l":488,"s":0,"a":true},{"u":833,"l":780,"s":0,"a":false},{"u":591,"l":68,"s":1,"a":false},{"u":997,"l":402,"s":0,"a":true},{"u":550,"l":514,"s":0,"a":true},{"u":591,"l":410,"s":0,"a":true},{"u":965,"l":282,"s":1,"a":false},{"u":946,"l":83,"s":1,"a":true},{"u":336,"l":118,"s":1,"a":false},{"u":848,"l":409,"s":0,"a":true},{"u":569,"l":301,"s":1,"a":false},{"u":680,"l":585,"s":1,"a":true},{"u":825,"l":542,"s":0,"a":true},{"u":638,"l":395,"s":0,"a":false},{"u":433,"l":277,"s":1,"a":true},{"u":403,"l":248,"s":1,"a":false},{"u":849,"l":538,"s":0,"a":false},{"u":682,"l":149,"s":0,"a":false},{"u":743,"l":126,"s":1,"a":false},{"u":657,"l":9,"s":0,"a":false},{"u":586,"l":322,"s":0,"a":true},{"u":819,"l":370,"s":1,"a":true},{"u":785,"l":615,"s":1,"a":false},{"u":781,"l":641,"s":1,"a":false},{"u":964,"l":930,"s":1,"a":true},{"u":947,"l":446,"s":0,"a":false},{"u":252,"l":131,"s":1,"a":true},{"u":904,"l":638,"s":0,"a":false},{"u":773,"l":260,"s":1,"a":true},{"u":375,"l":243,"s":0,"a":false},{"u":393,"l":284,"s":0,"a":true},{"u":855,"l":525,"s":1,"a":false},{"u":369,"l":228,"s":0,"a":true},{"u":712,"l":32,"s":0,"a":false},{"u":508,"l":351,"s":0,"a":true},{"u":527,"l":289,"s":0,"a":false},{"u":762,"l":483,"s":1,"a":true},{"u":651,"l":362,"s":0,"a":true},{"u":912,"l":383,"s":0,"a":false},{"u":854,"l":569,"s":0,"a":false},{"u":673,"l":485,"s":0,"a":true},{"u":759,"l":475,"s":0,"a":false},{"u":438,"l":343,"s":0,"a":true},{"u":889,"l":756,"s":1,"a":true},{"u":706,"l":408,"s":1,"a":false},{"u":650,"l":558,"s":1,"a":true},{"u":584,"l":28,"s":1,"a":true},{"u":383,"l":359,"s":0,"a":false},{"u":460,"l":306,"s":1,"a":false},{"u":573,"l":441,"s":1,"a":false},{"u":965,"l":893,"s":0,"a":true},{"u":535,"l":59,"s":1,"a":false},{"u":528,"l":255,"s":1,"a":false},{"u":419,"l":14,"s":0,"a":true},{"u":564,"l":490,"s":0,"a":false},{"u":747,"l":439,"s":1,"a":true},{"u":717,"l":316,"s":1,"a":false},{"u":708,"l":304,"s":1,"a":false},{"u":722,"l":449,"s":0,"a":true},{"u":876,"l":784,"s":1,"a":true},{"u":960,"l":865,"s":0,"a":true},{"u":784,"l":356,"s":1,"a":false},{"u":867,"l":248,"s":0,"a":true},{"u":804,"l":670,"s":1,"a":false},{"u":499,"l":415,"s":0,"a":true},{"u":873,"l":658,"s":1,"a":false},{"u":415,"l":215,"s":1,"a":true},{"u":360,"l":209,"s":0,"a":true},{"u":459,"l":364,"s":1,"a":false},{"u":502,"l":53,"s":1,"a":false},{"u":850,"l":178,"s":0,"a":true},{"u":987,"l":126,"s":1,"a":false},{"u":791,"l":117,"s":1,"a":false},{"u":741,"l":22,"s":1,"a":true},{"u":739,"l":174,"s":1,"a":true},{"u":617,"l":171,"s":1,"a":true},{"u":721,"l":63,"s":0,"a":false},{"u":687,"l":107,"s":0,"a":true},{"u":930,"l":458,"s":1,"a":false},{"u":772,"l":164,"s":1,"a":false},{"u":684,"l":260,"s":1,"a":false},{"u":215,"l":55,"s":1,"a":true},{"u":699,"l":662,"s":1,"a":false},{"u":942,"l":729,"s":0,"a":false},{"u":868,"l":570,"s":0,"a":false},{"u":457,"l":249,"s":0,"a":true},{"u":351,"l":147,"s":1,"a":false},{"u":120,"l":28,"s":1,"a":true},{"u":218,"l":31,"s":1,"a":true},{"u":421,"l":7,"s":1,"a":true},{"u":862,"l":288,"s":0,"a":true},{"u":364,"l":1,"s":1,"a":true},{"u":926,"l":687,"s":0,"a":true},{"u":374,"l":304,"s":1,"a":true},{"u":916,"l":187,"s":1,"a":false},{"u":773,"l":88,"s":0,"a":true},{"u":362,"l":95,"s":0,"a":true},{"u":754,"l":671,"s":1,"a":true},{"u":513,"l":2,"s":0,"a":true},{"u":878,"l":802,"s":0,"a":false},{"u":779,"l":419,"s":1,"a":false},{"u":770,"l":677,"s":1,"a":false},{"u":661,"l":348,"s":1,"a":true},{"u":24,"l":14,"s":0,"a":false},{"u":953,"l":310,"s":0,"a":false},{"u":715,"l":618,"s":0,"a":false},{"u":835,"l":745,"s":1,"a":true},{"u":715,"l":112,"s":1,"a":false},{"u":529,"l":479,"s":1,"a":false},{"u":933,"l":146,"s":1,"a":false},{"u":387,"l":240,"s":1,"a":false},{"u":825,"l":165,"s":1,"a":true},{"u":830,"l":707,"s":0,"a":false},{"u":482,"l":86,"s":1,"a":false},{"u":714,"l":607,"s":0,"a":true},{"u":186,"l":122,"s":0,"a":true},{"u":651,"l":206,"s":1,"a":true},{"u":866,"l":266,"s":1,"a":true},{"u":834,"l":808,"s":0,"a":true},{"u":520,"l":185,"s":0,"a":false},{"u":786,"l":713,"s":0,"a":false},{"u":806,"l":747,"s":0,"a":true},{"u":548,"l":119,"s":1,"a":true},{"u":738,"l":558,"s":1,"a":true},{"u":818,"l":739,"s":1,"a":false},{"u":546,"l":142,"s":0,"a":false},{"u":909,"l":658,"s":0,"a":false},{"u":219,"l":196,"s":0,"a":false},{"u":867,"l":482,"s":1,"a":false},{"u":572,"l":287,"s":0,"a":false},{"u":943,"l":368,"s":1,"a":false},{"u":918,"l":510,"s":1,"a":false},{"u":367,"l":196,"s":1,"a":true},{"u":726,"l":48,"s":1,"a":true},{"u":641,"l":163,"s":1,"a":false},{"u":759,"l":679,"s":1,"a":true},{"u":736,"l":445,"s":0,"a":true},{"u":701,"l":612,"s":1,"a":true},{"u":521,"l":163,"s":0,"a":false},{"u":573,"l":250,"s":1,"a":true},{"u":577,"l":542,"s":1,"a":true},{"u":508,"l":386,"s":1,"a":false},{"u":661,"l":390,"s":1,"a":true},{"u":212,"l":11,"s":1,"a":true},{"u":323,"l":103,"s":0,"a":true},{"u":157,"l":84,"s":1,"a":false},{"u":774,"l":214,"s":0,"a":false},{"u":457,"l":385,"s":0,"a":true},{"u":994,"l":870,"s":0,"a":false},{"u":813,"l":357,"s":0,"a":true},{"u":625,"l":45,"s":0,"a":false},{"u":398,"l":82,"s":0,"a":true},{"u":983,"l":32,"s":0,"a":false},{"u":274,"l":265,"s":0,"a":true},{"u":555,"l":21,"s":1,"a":true},{"u":999,"l":466,"s":0,"a":false},{"u":210,"l":170,"s":1,"a":true},{"u":613,"l":484,"s":0,"a":true},{"u":757,"l":609,"s":0,"a":false},{"u":407,"l":187,"s":1,"a":true},{"u":277,"l":169,"s":1,"a":false},{"u":367,"l":210,"s":0,"a":false},{"u":433,"l":1,"s":1,"a":true},{"u":634,"l":259,"s":1,"a":true},{"u":892,"l":371,"s":1,"a":false},{"u":931,"l":10,"s":1,"a":false},{"u":372,"l":5,"s":0,"a":false},{"u":405,"l":10,"s":1,"a":false},{"u":38,"l":10,"s":0,"a":false},{"u":404,"l":1,"s":0,"a":true},{"u":900,"l":658,"s":0,"a":true},{"u":732,"l":426,"s":1,"a":true},{"u":570,"l":391,"s":0,"a":true},{"u":494,"l":209,"s":1,"a":true},{"u":658,"l":160,"s":1,"a":false},{"u":83,"l":78,"s":0,"a":true},{"u":792,"l":304,"s":0,"a":false},{"u":725,"l":557,"s":0,"a":true},{"u":610,"l":276,"s":0,"a":true},{"u":389,"l":177,"s":0,"a":false},{"u":143,"l":18,"s":1,"a":false},{"u":366,"l":273,"s":0,"a":true},{"u":457,"l":157,"s":0,"a":true},{"u":584,"l":293,"s":0,"a":true},{"u":963,"l":168,"s":0,"a":false},{"u":877,"l":571,"s":0,"a":true},{"u":360,"l":67,"s":1,"a":true},{"u":729,"l":149,"s":1,"a":false},{"u":804,"l":434,"s":0,"a":true},{"u":944,"l":711,"s":1,"a":false},{"u":574,"l":494,"s":1,"a":false},{"u":770,"l":315,"s":1,"a":false},{"u":118,"l":117,"s":1,"a":true},{"u":833,"l":770,"s":0,"a":false},{"u":911,"l":235,"s":0,"a":true},{"u":949,"l":93,"s":0,"a":false},{"u":720,"l":649,"s":0,"a":true},{"u":684,"l":680,"s":1,"a":false},{"u":777,"l":232,"s":0,"a":false},{"u":245,"l":117,"s":1,"a":false},{"u":429,"l":261,"s":0,"a":false},{"u":445,"l":48,"s":0,"a":false},{"u":593,"l":264,"s":1,"a":false},{"u":825,"l":65,"s":1,"a":true},{"u":349,"l":202,"s":0,"a":true},{"u":525,"l":429,"s":1,"a":false},{"u":350,"l":58,"s":0,"a":true},{"u":938,"l":237,"s":1,"a":false},{"u":787,"l":33,"s":1,"a":true},{"u":737,"l":401,"s":0,"a":true},{"u":893,"l":787,"s":0,"a":true},{"u":941,"l":52,"s":0,"a":false},{"u":946,"l":551,"s":1,"a":true},{"u":860,"l":312,"s":1,"a":false},{"u":689,"l":385,"s":1,"a":true},{"u":185,"l":127,"s":0,"a":false},{"u":629,"l":170,"s":1,"a":true},{"u":298,"l":143,"s":1,"a":false},{"u":657,"l":392,"s":0,"a":true},{"u":652,"l":474,"s":1,"a":true},{"u":816,"l":467,"s":1,"a":true},{"u":838,"l":55,"s":0,"a":true},{"u":628,"l":463,"s":1,"a":true},{"u":824,"l":302,"s":1,"a":false},{"u":518,"l":225,"s":0,"a":false},{"u":320,"l":130,"s":1,"a":true},{"u":302,"l":279,"s":1,"a":true},{"u":809,"l":129,"s":1,"a":false},{"u":782,"l":493,"s":1,"a":true},{"u":891,"l":112,"s":0,"a":true},{"u":636,"l":445,"s":0,"a":true},{"u":413,"l":410,"s":1,"a":false},{"u":887,"l":824,"s":0,"a":false},{"u":608,"l":577,"s":1,"a":true},{"u":917,"l":243,"s":0,"a":true},{"u":792,"l":377,"s":0,"a":false},{"u":861,"l":137,"s":1,"a":false},{"u":924,"l":409,"s":0,"a":false},{"u":564,"l":280,"s":1,"a":false},{"u":578,"l":402,"s":1,"a":true},{"u":990,"l":505,"s":0,"a":true},{"u":180,"l":127,"s":1,"a":true},{"u":873,"l":24,"s":0,"a":true},{"u":523,"l":223,"s":1,"a":true},{"u":966,"l":668,"s":1,"a":true},{"u":941,"l":709,"s":1,"a":true},{"u":924,"l":429,"s":0,"a":true},{"u":817,"l":738,"s":0,"a":true},{"u":659,"l":372,"s":0,"a":true},{"u":985,"l":936,"s":1,"a":true},{"u":622,"l":137,"s":1,"a":false},{"u":979,"l":863,"s":0,"a":false},{"u":225,"l":63,"s":1,"a":false},{"u":686,"l":629,"s":0,"a":true},{"u":914,"l":841,"s":1,"a":false},{"u":764,"l":672,"s":1,"a":false},{"u":945,"l":768,"s":0,"a":true},{"u":840,"l":577,"s":0,"a":true},{"u":882,"l":716,"s":0,"a":true},{"u":889,"l":182,"s":0,"a":false},{"u":683,"l":270,"s":1,"a":true},{"u":647,"l":487,"s":0,"a":false},{"u":930,"l":330,"s":1,"a":false},{"u":744,"l":12,"s":1,"a":false},{"u":355,"l":90,"s":0,"a":false},{"u":115,"l":54,"s":1,"a":true},{"u":792,"l":80,"s":0,"a":false},{"u":915,"l":714,"s":0,"a":false},{"u":819,"l":773,"s":0,"a":true},{"u":339,"l":181,"s":1,"a":false},{"u":955,"l":120,"s":0,"a":true},{"u":990,"l":179,"s":0,"a":true},{"u":616,"l":350,"s":0,"a":false},{"u":812,"l":144,"s":0,"a":true},{"u":294,"l":72,"s":1,"a":false},{"u":502,"l":478,"s":0,"a":true},{"u":700,"l":194,"s":1,"a":true},{"u":786,"l":287,"s":0,"a":false},{"u":814,"l":346,"s":0,"a":true},{"u":734,"l":687,"s":0,"a":true},{"u":473,"l":246,"s":1,"a":false},{"u":166,"l":129,"s":1,"a":false},{"u":645,"l":612,"s":1,"a":true},{"u":918,"l":736,"s":1,"a":false},{"u":335,"l":301,"s":1,"a":true},{"u":352,"l":149,"s":1,"a":true},{"u":537,"l":198,"s":0,"a":false},{"u":958,"l":491,"s":1,"a":false},{"u":823,"l":801,"s":0,"a":true},{"u":888,"l":622,"s":0,"a":true},{"u":673,"l":102,"s":0,"a":false},{"u":278,"l":159,"s":0,"a":true},{"u":970,"l":391,"s":1,"a":true},{"u":875,"l":243,"s":0,"a":false},{"u":975,"l":528,"s":0,"a":true},{"u":392,"l":329,"s":1,"a":true},{"u":625,"l":566,"s":1,"a":true},{"u":927,"l":319,"s":0,"a":true},{"u":978,"l":309,"s":0,"a":false},{"u":663,"l":91,"s":1,"a":false},{"u":311,"l":173,"s":1,"a":false},{"u":967,"l":165,"s":1,"a":true},{"u":641,"l":237,"s":0,"a":true},{"u":524,"l":329,"s":1,"a":false},{"u":861,"l":710,"s":0,"a":true},{"u":981,"l":757,"s":1,"a":true},{"u":604,"l":559,"s":0,"a":true},{"u":600,"l":383,"s":1,"a":true},{"u":783,"l":685,"s":1,"a":false},{"u":956,"l":830,"s":1,"a":false},{"u":807,"l":203,"s":0,"a":false},{"u":872,"l":597,"s":1,"a":true},{"u":955,"l":709,"s":1,"a":false},{"u":653,"l":224,"s":0,"a":true},{"u":817,"l":570,"s":1,"a":false},{"u":730,"l":669,"s":1,"a":true},{"u":802,"l":202,"s":1,"a":true},{"u":452,"l":375,"s":1,"a":true},{"u":178,"l":47,"s":1,"a":false},{"u":702,"l":547,"s":1,"a":false},{"u":638,"l":254,"s":0,"a":false},{"u":943,"l":277,"s":0,"a":false},{"u":975,"l":761,"s":0,"a":false},{"u":723,"l":576,"s":1,"a":false},{"u":704,"l":46,"s":0,"a":true},{"u":586,"l":341,"s":1,"a":false},{"u":687,"l":506,"s":1,"a":true},{"u":648,"l":226,"s":0,"a":true},{"u":937,"l":880,"s":0,"a":false},{"u":864,"l":480,"s":1,"a":false},{"u":812,"l":571,"s":0,"a":false},{"u":551,"l":414,"s":1,"a":true},{"u":455,"l":383,"s":0,"a":true},{"u":699,"l":240,"s":1,"a":false},{"u":918,"l":888,"s":0,"a":true},{"u":294,"l":19,"s":0,"a":false},{"u":847,"l":503,"s":1,"a":true},{"u":541,"l":289,"s":1,"a":false},{"u":401,"l":369,"s":1,"a":true},{"u":800,"l":639,"s":1,"a":true},{"u":794,"l":243,"s":0,"a":false},{"u":937,"l":668,"s":1,"a":false},{"u":964,"l":794,"s":0,"a":true},{"u":622,"l":73,"s":1,"a":true},{"u":883,"l":350,"s":1,"a":true},{"u":853,"l":413,"s":0,"a":false},{"u":831,"l":330,"s":0,"a":false},{"u":150,"l":118,"s":0,"a":false},{"u":425,"l":40,"s":0,"a":false},{"u":745,"l":640,"s":0,"a":false},{"u":853,"l":655,"s":0,"a":true},{"u":777,"l":463,"s":1,"a":false},{"u":897,"l":808,"s":0,"a":true},{"u":820,"l":776,"s":0,"a":false},{"u":945,"l":185,"s":0,"a":false},{"u":756,"l":639,"s":0,"a":false},{"u":815,"l":671,"s":0,"a":true},{"u":474,"l":161,"s":0,"a":false},{"u":283,"l":224,"s":0,"a":false},{"u":465,"l":346,"s":1,"a":true},{"u":744,"l":419,"s":1,"a":false},{"u":744,"l":613,"s":0,"a":true},{"u":660,"l":245,"s":0,"a":true},{"u":806,"l":492,"s":0,"a":true},{"u":856,"l":341,"s":0,"a":true},{"u":478,"l":34,"s":0,"a":false},{"u":992,"l":533,"s":1,"a":false},{"u":599,"l":557,"s":0,"a":false},{"u":823,"l":48,"s":0,"a":false},{"u":520,"l":58,"s":0,"a":false},{"u":432,"l":114,"s":1,"a":true},{"u":956,"l":838,"s":1,"a":false},{"u":809,"l":9,"s":1,"a":false},{"u":636,"l":187,"s":0,"a":false},{"u":430,"l":57,"s":0,"a":false},{"u":865,"l":9,"s":0,"a":true},{"u":416,"l":188,"s":0,"a":true},{"u":469,"l":204,"s":1,"a":false},{"u":690,"l":545,"s":1,"a":true},{"u":777,"l":207,"s":1,"a":false},{"u":488,"l":136,"s":0,"a":true},{"u":371,"l":237,"s":1,"a":true},{"u":216,"l":122,"s":1,"a":true},{"u":629,"l":403,"s":1,"a":true},{"u":604,"l":221,"s":0,"a":false},{"u":710,"l":196,"s":1,"a":false},{"u":675,"l":163,"s":0,"a":true},{"u":830,"l":51,"s":0,"a":false},{"u":747,"l":652,"s":0,"a":true},{"u":307,"l":102,"s":0,"a":true},{"u":435,"l":241,"s":0,"a":false},{"u":989,"l":555,"s":1,"a":false},{"u":908,"l":67,"s":0,"a":true},{"u":839,"l":293,"s":1,"a":false},{"u":916,"l":222,"s":1,"a":true},{"u":289,"l":195,"s":0,"a":false},{"u":750,"l":79,"s":1,"a":false},{"u":699,"l":419,"s":1,"a":false},{"u":925,"l":64,"s":1,"a":false},{"u":838,"l":312,"s":0,"a":false},{"u":854,"l":322,"s":0,"a":false},{"u":302,"l":113,"s":0,"a":false},{"u":544,"l":186,"s":1,"a":false},{"u":573,"l":386,"s":0,"a":false},{"u":888,"l":401,"s":0,"a":false},{"u":989,"l":499,"s":0,"a":true},{"u":581,"l":79,"s":1,"a":false},{"u":909,"l":765,"s":0,"a":true},{"u":933,"l":343,"s":0,"a":true},{"u":763,"l":50,"s":0,"a":true},{"u":863,"l":73,"s":0,"a":true},{"u":794,"l":181,"s":0,"a":false},{"u":169,"l":43,"s":1,"a":true},{"u":704,"l":458,"s":1,"a":false},{"u":529,"l":353,"s":0,"a":false},{"u":402,"l":66,"s":0,"a":true},{"u":820,"l":4,"s":0,"a":false},{"u":834,"l":792,"s":1,"a":false},{"u":419,"l":125,"s":1,"a":true},{"u":787,"l":709,"s":1,"a":true},{"u":742,"l":737,"s":0,"a":true},{"u":674,"l":245,"s":1,"a":false},{"u":881,"l":236,"s":0,"a":false},{"u":878,"l":523,"s":0,"a":false},{"u":89,"l":35,"s":1,"a":true},{"u":300,"l":154,"s":0,"a":false},{"u":774,"l":64,"s":1,"a":false},{"u":494,"l":378,"s":1,"a":false},{"u":817,"l":23,"s":0,"a":true},{"u":692,"l":378,"s":1,"a":false},{"u":520,"l":4,"s":0,"a":false},{"u":808,"l":671,"s":1,"a":true},{"u":570,"l":180,"s":0,"a":true},{"u":918,"l":866,"s":0,"a":true},{"u":617,"l":581,"s":0,"a":false},{"u":916,"l":532,"s":1,"a":false},{"u":666,"l":352,"s":1,"a":false},{"u":637,"l":542,"s":1,"a":false},{"u":794,"l":667,"s":0,"a":true},{"u":807,"l":331,"s":0,"a":false},{"u":218,"l":165,"s":1,"a":true},{"u":232,"l":149,"s":0,"a":true},{"u":367,"l":82,"s":1,"a":true},{"u":517,"l":367,"s":1,"a":false},{"u":954,"l":935,"s":0,"a":false},{"u":301,"l":300,"s":1,"a":false},{"u":703,"l":212,"s":1,"a":false},{"u":310,"l":110,"s":0,"a":false},{"u":252,"l":197,"s":1,"a":false},{"u":887,"l":384,"s":1,"a":true},{"u":802,"l":344,"s":0,"a":false},{"u":809,"l":236,"s":0,"a":false},{"u":408,"l":273,"s":1,"a":false},{"u":717,"l":42,"s":0,"a":false},{"u":821,"l":364,"s":1,"a":false},{"u":468,"l":201,"s":1,"a":true},{"u":812,"l":118,"s":1,"a":true},{"u":326,"l":144,"s":1,"a":false},{"u":974,"l":702,"s":0,"a":false},{"u":684,"l":439,"s":1,"a":true},{"u":775,"l":674,"s":1,"a":true},{"u":806,"l":459,"s":0,"a":false},{"u":994,"l":38,"s":0,"a":true},{"u":947,"l":208,"s":1,"a":true},{"u":429,"l":208,"s":0,"a":true},{"u":763,"l":254,"s":0,"a":true},{"u":284,"l":62,"s":1,"a":true},{"u":736,"l":429,"s":0,"a":true},{"u":988,"l":602,"s":1,"a":false},{"u":767,"l":444,"s":0,"a":true},{"u":561,"l":196,"s":0,"a":true},{"u":731,"l":399,"s":1,"a":false},{"u":939,"l":932,"s":0,"a":false},{"u":728,"l":316,"s":1,"a":false},{"u":985,"l":14,"s":0,"a":false},{"u":627,"l":324,"s":1,"a":true},{"u":757,"l":216,"s":0,"a":false},{"u":499,"l":210,"s":0,"a":true},{"u":700,"l":188,"s":1,"a":false},{"u":685,"l":313,"s":0,"a":true},{"u":966,"l":416,"s":1,"a":false},{"u":605,"l":412,"s":0,"a":false},{"u":783,"l":107,"s":1,"a":true},{"u":906,"l":525,"s":1,"a":true},{"u":561,"l":372,"s":1,"a":false},{"u":904,"l":513,"s":1,"a":true},{"u":580,"l":297,"s":1,"a":true},{"u":757,"l":107,"s":1,"a":true},{"u":642,"l":603,"s":0,"a":false},{"u":169,"l":43,"s":0,"a":false},{"u":171,"l":36,"s":1,"a":false},{"u":236,"l":94,"s":1,"a":false},{"u":661,"l":474,"s":0,"a":true},{"u":604,"l":118,"s":1,"a":true},{"u":851,"l":307,"s":1,"a":true},{"u":955,"l":523,"s":1,"a":true},{"u":869,"l":669,"s":0,"a":true},{"u":944,"l":471,"s":1,"a":false},{"u":737,"l":78,"s":1,"a":true},{"u":705,"l":47,"s":0,"a":false},{"u":859,"l":542,"s":0,"a":true},{"u":768,"l":759,"s":1,"a":false},{"u":773,"l":256,"s":1,"a":false},{"u":317,"l":20,"s":1,"a":false},{"u":612,"l":323,"s":1,"a":true},{"u":718,"l":262,"s":1,"a":false},{"u":822,"l":420,"s":1,"a":false},{"u":754,"l":426,"s":1,"a":false},{"u":676,"l":12,"s":0,"a":true},{"u":481,"l":364,"s":0,"a":false},{"u":727,"l":395,"s":0,"a":false},{"u":350,"l":337,"s":1,"a":false},{"u":503,"l":163,"s":1,"a":true},{"u":973,"l":114,"s":1,"a":true},{"u":682,"l":101,"s":1,"a":true},{"u":971,"l":186,"s":1,"a":true},{"u":941,"l":754,"s":0,"a":false},{"u":956,"l":766,"s":1,"a":true},{"u":797,"l":2,"s":1,"a":false},{"u":906,"l":823,"s":1,"a":false},{"u":851,"l":820,"s":0,"a":false},{"u":181,"l":119,"s":1,"a":true},{"u":896,"l":505,"s":1,"a":true},{"u":556,"l":79,"s":0,"a":true},{"u":870,"l":530,"s":0,"a":false},{"u":748,"l":626,"s":0,"a":false},{"u":803,"l":666,"s":1,"a":true},{"u":566,"l":557,"s":1,"a":false},{"u":985,"l":467,"s":1,"a":false},{"u":410,"l":240,"s":0,"a":false},{"u":625,"l":238,"s":1,"a":true},{"u":796,"l":248,"s":1,"a":false},{"u":637,"l":240,"s":0,"a":false},{"u":845,"l":146,"s":0,"a":true},{"u":883,"l":333,"s":0,"a":false},{"u":615,"l":139,"s":0,"a":true},{"u":373,"l":163,"s":1,"a":false},{"u":890,"l":863,"s":0,"a":false},{"u":608,"l":252,"s":0,"a":false},{"u":439,"l":67,"s":1,"a":true},{"u":859,"l":40,"s":1,"a":true},{"u":851,"l":486,"s":0,"a":true},{"u":587,"l":570,"s":1,"a":true},{"u":488,"l":356,"s":0,"a":false},{"u":968,"l":432,"s":0,"a":false},{"u":51,"l":47,"s":1,"a":true},{"u":515,"l":384,"s":1,"a":false},{"u":890,"l":796,"s":1,"a":false},{"u":524,"l":372,"s":0,"a":true},{"u":988,"l":431,"s":1,"a":true},{"u":804,"l":24,"s":0,"a":true},{"u":805,"l":121,"s":1,"a":true},{"u":638,"l":552,"s":0,"a":true},{"u":990,"l":552,"s":0,"a":false},{"u":274,"l":96,"s":1,"a":false},{"u":971,"l":968,"s":0,"a":false},{"u":888,"l":506,"s":1,"a":false},{"u":630,"l":605,"s":0,"a":true},{"u":586,"l":399,"s":1,"a":false},{"u":843,"l":130,"s":0,"a":true},{"u":401,"l":394,"s":1,"a":false},{"u":530,"l":148,"s":0,"a":false},{"u":606,"l":418,"s":0,"a":false},{"u":635,"l":382,"s":1,"a":true},{"u":922,"l":699,"s":1,"a":false},{"u":764,"l":27,"s":1,"a":false},{"u":344,"l":152,"s":1,"a":false},{"u":228,"l":168,"s":1,"a":true},{"u":893,"l":402,"s":1,"a":true},{"u":576,"l":486,"s":1,"a":false},{"u":750,"l":356,"s":1,"a":false},{"u":922,"l":91,"s":0,"a":false},{"u":782,"l":711,"s":1,"a":false},{"u":979,"l":491,"s":0,"a":true},{"u":971,"l":919,"s":0,"a":true},{"u":428,"l":256,"s":1,"a":false},{"u":907,"l":14,"s":0,"a":false},{"u":904,"l":795,"s":0,"a":false},{"u":773,"l":743,"s":0,"a":false},{"u":253,"l":15,"s":1,"a":false},{"u":532,"l":460,"s":1,"a":false},{"u":853,"l":480,"s":0,"a":true},{"u":86,"l":78,"s":0,"a":false},{"u":117,"l":27,"s":0,"a":true},{"u":678,"l":397,"s":1,"a":false},{"u":918,"l":381,"s":1,"a":false},{"u":635,"l":171,"s":1,"a":true},{"u":968,"l":472,"s":0,"a":true},{"u":908,"l":460,"s":1,"a":false},{"u":651,"l":447,"s":0,"a":false},{"u":982,"l":156,"s":1,"a":true},{"u":773,"l":120,"s":1,"a":false},{"u":428,"l":166,"s":0,"a":true},{"u":701,"l":464,"s":1,"a":true},{"u":658,"l":514,"s":1,"a":false},{"u":740,"l":588,"s":1,"a":false},{"u":887,"l":73,"s":1,"a":false},{"u":679,"l":537,"s":0,"a":false},{"u":521,"l":177,"s":0,"a":false},{"u":653,"l":512,"s":1,"a":true},{"u":646,"l":482,"s":1,"a":true},{"u":576,"l":234,"s":1,"a":true},{"u":635,"l":595,"s":1,"a":true},{"u":687,"l":226,"s":1,"a":false},{"u":300,"l":76,"s":1,"a":true},{"u":867,"l":394,"s":0,"a":false},{"u":49,"l":27,"s":1,"a":false},{"u":755,"l":103,"s":1,"a":true},{"u":966,"l":849,"s":1,"a":true},{"u":492,"l":152,"s":0,"a":true},{"u":724,"l":72,"s":1,"a":true},{"u":959,"l":591,"s":0,"a":true},{"u":816,"l":740,"s":0,"a":true},{"u":790,"l":456,"s":1,"a":true},{"u":838,"l":105,"s":1,"a":false},{"u":650,"l":267,"s":1,"a":true},{"u":903,"l":329,"s":1,"a":false},{"u":869,"l":255,"s":0,"a":false},{"u":907,"l":415,"s":0,"a":true},{"u":784,"l":781,"s":1,"a":false},{"u":976,"l":200,"s":0,"a":true},{"u":561,"l":462,"s":0,"a":false},{"u":215,"l":30,"s":0,"a":false},{"u":51,"l":48,"s":0,"a":true},{"u":704,"l":464,"s":1,"a":false},{"u":518,"l":157,"s":0,"a":true},{"u":530,"l":37,"s":0,"a":false},{"u":496,"l":22,"s":0,"a":false},{"u":900,"l":685,"s":0,"a":true},{"u":987,"l":227,"s":0,"a":true},{"u":890,"l":256,"s":1,"a":true},{"u":774,"l":683,"s":0,"a":false},{"u":508,"l":282,"s":0,"a":true},{"u":621,"l":198,"s":1,"a":false},{"u":340,"l":278,"s":0,"a":false},{"u":839,"l":447,"s":0,"a":true},{"u":917,"l":390,"s":1,"a":false},{"u":481,"l":333,"s":1,"a":true},{"u":545,"l":412,"s":1,"a":false},{"u":752,"l":74,"s":1,"a":false},{"u":796,"l":116,"s":0,"a":false},{"u":805,"l":5,"s":1,"a":false},{"u":398,"l":378,"s":1,"a":true},{"u":506,"l":416,"s":0,"a":false},{"u":665,"l":545,"s":1,"a":false},{"u":683,"l":30,"s":1,"a":true},{"u":926,"l":308,"s":0,"a":true},{"u":591,"l":92,"s":1,"a":false},{"u":353,"l":96,"s":0,"a":true},{"u":709,"l":196,"s":0,"a":true},{"u":803,"l":579,"s":1,"a":true},{"u":615,"l":473,"s":1,"a":false},{"u":281,"l":171,"s":1,"a":true},{"u":822,"l":527,"s":0,"a":false},{"u":629,"l":458,"s":0,"a":false},{"u":527,"l":284,"s":1,"a":true},{"u":458,"l":25,"s":0,"a":false},{"u":361,"l":56,"s":0,"a":false},{"u":708,"l":607,"s":0,"a":true},{"u":508,"l":148,"s":0,"a":false},{"u":467,"l":30,"s":0,"a":false},{"u":812,"l":621,"s":1,"a":false},{"u":673,"l":387,"s":0,"a":true},{"u":668,"l":187,"s":0,"a":false},{"u":781,"l":318,"s":0,"a":false},{"u":840,"l":723,"s":1,"a":true},{"u":574,"l":71,"s":0,"a":false},{"u":946,"l":674,"s":1,"a":true},{"u":819,"l":22,"s":0,"a":false},{"u":504,"l":252,"s":1,"a":true},{"u":567,"l":47,"s":0,"a":false},{"u":528,"l":323,"s":1,"a":false},{"u":609,"l":188,"s":0,"a":true},{"u":978,"l":911,"s":1,"a":false},{"u":378,"l":323,"s":0,"a":true},{"u":156,"l":103,"s":0,"a":false},{"u":708,"l":237,"s":1,"a":true},{"u":870,"l":149,"s":0,"a":false},{"u":641,"l":616,"s":0,"a":true},{"u":553,"l":154,"s":0,"a":false},{"u":645,"l":56,"s":1,"a":true},{"u":986,"l":884,"s":0,"a":false},{"u":391,"l":100,"s":1,"a":false},{"u":926,"l":531,"s":1,"a":false},{"u":969,"l":479,"s":0,"a":true},{"u":604,"l":576,"s":0,"a":false},{"u":422,"l":196,"s":0,"a":false},{"u":455,"l":351,"s":0,"a":true},{"u":461,"l":299,"s":1,"a":false},{"u":953,"l":25,"s":0,"a":false},{"u":922,"l":474,"s":1,"a":false},{"u":954,"l":888,"s":0,"a":false},{"u":467,"l":108,"s":1,"a":true},{"u":921,"l":553,"s":0,"a":true},{"u":680,"l":633,"s":1,"a":true},{"u":898,"l":79,"s":1,"a":false},{"u":672,"l":319,"s":0,"a":false},{"u":645,"l":241,"s":1,"a":true},{"u":473,"l":87,"s":1,"a":true},{"u":534,"l":99,"s":0,"a":true},{"u":421,"l":353,"s":1,"a":false},{"u":237,"l":216,"s":0,"a":false},{"u":600,"l":350,"s":0,"a":true},{"u":408,"l":349,"s":1,"a":true},{"u":377,"l":303,"s":1,"a":true},{"u":512,"l":53,"s":0,"a":false},{"u":468,"l":66,"s":0,"a":true},{"u":704,"l":641,"s":0,"a":false},{"u":325,"l":260,"s":1,"a":true},{"u":134,"l":127,"s":1,"a":false},{"u":560,"l":43,"s":0,"a":false},{"u":726,"l":18,"s":0,"a":true},{"u":975,"l":899,"s":1,"a":false},{"u":785,"l":159,"s":0,"a":true},{"u":784,"l":413,"s":0,"a":true},{"u":208,"l":79,"s":0,"a":true},{"u":942,"l":399,"s":0,"a":true},{"u":632,"l":71,"s":0,"a":false},{"u":902,"l":183,"s":1,"a":false},{"u":657,"l":131,"s":1,"a":false},{"u":902,"l":700,"s":0,"a":false},{"u":525,"l":107,"s":1,"a":false},{"u":418,"l":277,"s":1,"a":true},{"u":462,"l":73,"s":0,"a":false},{"u":501,"l":463,"s":0,"a":true},{"u":784,"l":273,"s":0,"a":false},{"u":663,"l":438,"s":0,"a":false},{"u":898,"l":557,"s":1,"a":true},{"u":728,"l":352,"s":0,"a":false},{"u":795,"l":206,"s":0,"a":true},{"u":436,"l":246,"s":1,"a":true},{"u":794,"l":365,"s":0,"a":false},{"u":866,"l":490,"s":0,"a":false},{"u":962,"l":5,"s":1,"a":false},{"u":524,"l":238,"s":1,"a":false},{"u":690,"l":615,"s":1,"a":false},{"u":453,"l":297,"s":1,"a":true},{"u":441,"l":305,"s":0,"a":false},{"u":803,"l":52,"s":1,"a":false},{"u":675,"l":542,"s":0,"a":false},{"u":970,"l":740,"s":0,"a":false},{"u":310,"l":129,"s":0,"a":true},{"u":584,"l":168,"s":0,"a":false},{"u":369,"l":100,"s":0,"a":true},{"u":556,"l":55,"s":0,"a":true},{"u":200,"l":89,"s":0,"a":true},{"u":422,"l":49,"s":0,"a":true},{"u":540,"l":281,"s":0,"a":false},{"u":136,"l":38,"s":0,"a":false},{"u":946,"l":620,"s":0,"a":true},{"u":366,"l":297,"s":1,"a":false},{"u":471,"l":177,"s":1,"a":false},{"u":949,"l":436,"s":0,"a":true},{"u":978,"l":257,"s":1,"a":true},{"u":539,"l":363,"s":0,"a":false},{"u":645,"l":311,"s":1,"a":true},{"u":894,"l":5,"s":1,"a":true},{"u":937,"l":806,"s":1,"a":true},{"u":87,"l":56,"s":1,"a":true},{"u":923,"l":318,"s":0,"a":false},{"u":125,"l":55,"s":0,"a":false},{"u":675,"l":244,"s":1,"a":false},{"u":538,"l":318,"s":0,"a":true},{"u":571,"l":517,"s":0,"a":true},{"u":855,"l":80,"s":1,"a":true},{"u":642,"l":294,"s":0,"a":true},{"u":100,"l":83,"s":1,"a":true},{"u":335,"l":8,"s":1,"a":true},{"u":719,"l":662,"s":1,"a":false},{"u":73,"l":29,"s":1,"a":true},{"u":718,"l":694,"s":1,"a":true},{"u":608,"l":175,"s":1,"a":true},{"u":199,"l":120,"s":1,"a":false},{"u":892,"l":883,"s":0,"a":false},{"u":757,"l":541,"s":1,"a":true},{"u":174,"l":96,"s":0,"a":true},{"u":927,"l":242,"s":0,"a":true},{"u":555,"l":190,"s":1,"a":false},{"u":165,"l":60,"s":0,"a":false},{"u":829,"l":692,"s":1,"a":false},{"u":95,"l":43,"s":1,"a":true},{"u":203,"l":47,"s":1,"a":false},{"u":760,"l":466,"s":0,"a":true},{"u":710,"l":601,"s":0,"a":false},{"u":253,"l":151,"s":0,"a":false},{"u":923,"l":435,"s":1,"a":true},{"u":376,"l":91,"s":1,"a":false},{"u":899,"l":22,"s":0,"a":true},{"u":994,"l":924,"s":1,"a":false},{"u":723,"l":370,"s":1,"a":true},{"u":314,"l":206,"s":0,"a":true},{"u":792,"l":602,"s":0,"a":true},{"u":251,"l":236,"s":0,"a":true},{"u":749,"l":2,"s":0,"a":true},{"u":716,"l":170,"s":1,"a":false},{"u":465,"l":414,"s":0,"a":true},{"u":896,"l":432,"s":1,"a":false},{"u":443,"l":350,"s":0,"a":true},{"u":981,"l":862,"s":0,"a":false},{"u":518,"l":507,"s":1,"a":true},{"u":671,"l":585,"s":0,"a":false},{"u":404,"l":69,"s":0,"a":true},{"u":963,"l":540,"s":1,"a":true},{"u":264,"l":90,"s":0,"a":false},{"u":624,"l":133,"s":0,"a":false},{"u":955,"l":386,"s":1,"a":false},{"u":975,"l":568,"s":0,"a":false},{"u":862,"l":196,"s":1,"a":true},{"u":566,"l":47,"s":0,"a":true},{"u":371,"l":228,"s":0,"a":true},{"u":603,"l":214,"s":1,"a":false},{"u":559,"l":509,"s":0,"a":false},{"u":898,"l":399,"s":1,"a":false},{"u":912,"l":304,"s":0,"a":true},{"u":679,"l":380,"s":0,"a":true},{"u":838,"l":372,"s":1,"a":false},{"u":527,"l":261,"s":0,"a":false},{"u":764,"l":305,"s":1,"a":false},{"u":940,"l":258,"s":0,"a":true},{"u":486,"l":321,"s":0,"a":true},{"u":765,"l":182,"s":1,"a":false},{"u":383,"l":188,"s":0,"a":true},{"u":751,"l":460,"s":0,"a":true},{"u":375,"l":17,"s":0,"a":true},{"u":684,"l":474,"s":1,"a":true},{"u":887,"l":822,"s":1,"a":true},{"u":257,"l":2,"s":0,"a":true},{"u":672,"l":212,"s":1,"a":true},{"u":732,"l":117,"s":1,"a":false},{"u":630,"l":583,"s":1,"a":false},{"u":601,"l":123,"s":1,"a":true},{"u":945,"l":560,"s":0,"a":false},{"u":803,"l":205,"s":1,"a":false},{"u":774,"l":703,"s":1,"a":true},{"u":794,"l":370,"s":1,"a":true},{"u":574,"l":231,"s":0,"a":false},{"u":882,"l":869,"s":0,"a":false},{"u":931,"l":725,"s":1,"a":true},{"u":996,"l":833,"s":1,"a":true},{"u":929,"l":745,"s":1,"a":true},{"u":896,"l":244,"s":0,"a":false},{"u":383,"l":219,"s":0,"a":false},{"u":104,"l":47,"s":1,"a":true},{"u":298,"l":192,"s":1,"a":true},{"u":706,"l":423,"s":0,"a":false},{"u":179,"l":177,"s":1,"a":false},{"u":190,"l":163,"s":1,"a":false},{"u":353,"l":33,"s":0,"a":true},{"u":495,"l":30,"s":0,"a":true},{"u":470,"l":147,"s":0,"a":true},{"u":691,"l":168,"s":1,"a":true},{"u":785,"l":254,"s":0,"a":true},{"u":494,"l":251,"s":1,"a":true},{"u":276,"l":177,"s":1,"a":true},{"u":910,"l":598,"s":0,"a":false},{"u":602,"l":584,"s":0,"a":false},{"u":884,"l":765,"s":1,"a":true},{"u":300,"l":11,"s":0,"a":true},{"u":986,"l":737,"s":0,"a":false},{"u":620,"l":1,"s":1,"a":false},{"u":968,"l":874,"s":0,"a":false},{"u":557,"l":282,"s":0,"a":false},{"u":758,"l":672,"s":1,"a":true},{"u":673,"l":127,"s":1,"a":true},{"u":998,"l":119,"s":1,"a":false},{"u":286,"l":269,"s":0,"a":true},{"u":306,"l":54,"s":1,"a":false},{"u":937,"l":173,"s":0,"a":true},{"u":723,"l":362,"s":0,"a":true},{"u":326,"l":285,"s":1,"a":true},{"u":607,"l":131,"s":0,"a":true},{"u":246,"l":145,"s":0,"a":true},{"u":675,"l":433,"s":1,"a":false},{"u":942,"l":326,"s":1,"a":false},{"u":903,"l":881,"s":0,"a":false},{"u":473,"l":246,"s":0,"a":true},{"u":882,"l":74,"s":0,"a":true},{"u":979,"l":859,"s":0,"a":false},{"u":314,"l":72,"s":1,"a":false},{"u":596,"l":480,"s":0,"a":false},{"u":880,"l":441,"s":0,"a":true},{"u":16,"l":8,"s":1,"a":true},{"u":932,"l":500,"s":0,"a":false},{"u":653,"l":403,"s":0,"a":true},{"u":538,"l":317,"s":1,"a":true},{"u":343,"l":181,"s":1,"a":true},{"u":736,"l":469,"s":1,"a":false},{"u":902,"l":751,"s":0,"a":false},{"u":975,"l":68,"s":1,"a":true},{"u":281,"l":38,"s":1,"a":false},{"u":844,"l":283,"s":1,"a":true},{"u":319,"l":243,"s":1,"a":true},{"u":394,"l":150,"s":1,"a":false},{"u":159,"l":38,"s":1,"a":false},{"u":866,"l":527,"s":0,"a":true},{"u":679,"l":60,"s":1,"a":true},{"u":919,"l":319,"s":0,"a":false},{"u":740,"l":469,"s":0,"a":false},{"u":902,"l":243,"s":0,"a":false},{"u":988,"l":395,"s":0,"a":true},{"u":817,"l":92,"s":1,"a":true},{"u":439,"l":410,"s":1,"a":false},{"u":563,"l":94,"s":1,"a":false},{"u":744,"l":235,"s":0,"a":true},{"u":646,"l":170,"s":1,"a":true},{"u":181,"l":58,"s":1,"a":true},{"u":953,"l":308,"s":0,"a":true},{"u":626,"l":498,"s":0,"a":false},{"u":235,"l":84,"s":0,"a":true},{"u":745,"l":186,"s":0,"a":true},{"u":927,"l":177,"s":0,"a":true},{"u":768,"l":134,"s":1,"a":false},{"u":993,"l":299,"s":1,"a":false},{"u":266,"l":203,"s":1,"a":false},{"u":993,"l":265,"s":1,"a":true},{"u":896,"l":205,"s":0,"a":false},{"u":856,"l":681,"s":1,"a":true},{"u":779,"l":583,"s":0,"a":false},{"u":759,"l":335,"s":1,"a":true},{"u":773,"l":635,"s":1,"a":false},{"u":474,"l":300,"s":0,"a":false},{"u":507,"l":203,"s":0,"a":true},{"u":37,"l":15,"s":1,"a":false},{"u":628,"l":607,"s":1,"a":false},{"u":515,"l":324,"s":1,"a":false},{"u":806,"l":459,"s":1,"a":false},{"u":852,"l":385,"s":0,"a":false},{"u":411,"l":382,"s":0,"a":true},{"u":667,"l":478,"s":0,"a":true},{"u":857,"l":170,"s":1,"a":true},{"u":780,"l":285,"s":0,"a":false},{"u":297,"l":76,"s":1,"a":false},{"u":851,"l":209,"s":0,"a":true},{"u":981,"l":653,"s":0,"a":true},{"u":905,"l":815,"s":1,"a":false},{"u":999,"l":842,"s":0,"a":true},{"u":973,"l":380,"s":0,"a":false},{"u":596,"l":7,"s":0,"a":true},{"u":406,"l":374,"s":0,"a":true},{"u":836,"l":188,"s":0,"a":false},{"u":731,"l":132,"s":1,"a":false},{"u":885,"l":748,"s":1,"a":false},{"u":524,"l":241,"s":0,"a":false},{"u":657,"l":11,"s":0,"a":true},{"u":872,"l":548,"s":0,"a":true},{"u":783,"l":702,"s":0,"a":false},{"u":472,"l":118,"s":0,"a":false},{"u":988,"l":593,"s":1,"a":false},{"u":34,"l":3,"s":1,"a":false},{"u":821,"l":633,"s":1,"a":true},{"u":463,"l":143,"s":0,"a":true},{"u":124,"l":45,"s":0,"a":false},{"u":959,"l":438,"s":0,"a":true},{"u":699,"l":380,"s":1,"a":true},{"u":611,"l":406,"s":0,"a":true},{"u":984,"l":823,"s":0,"a":false},{"u":800,"l":529,"s":1,"a":true},{"u":156,"l":121,"s":1,"a":false},{"u":948,"l":597,"s":0,"a":true},{"u":659,"l":195,"s":1,"a":false},{"u":520,"l":333,"s":1,"a":false},{"u":848,"l":574,"s":1,"a":false},{"u":861,"l":794,"s":1,"a":false},{"u":935,"l":332,"s":0,"a":false},{"u":367,"l":96,"s":1,"a":false},{"u":489,"l":141,"s":1,"a":true},{"u":626,"l":548,"s":1,"a":false},{"u":622,"l":518,"s":1,"a":true},{"u":889,"l":253,"s":0,"a":false},{"u":821,"l":371,"s":1,"a":true},{"u":542,"l":72,"s":1,"a":true},{"u":876,"l":533,"s":0,"a":false},{"u":986,"l":801,"s":1,"a":true},{"u":426,"l":233,"s":0,"a":false},{"u":762,"l":273,"s":0,"a":true},{"u":595,"l":538,"s":0,"a":false},{"u":724,"l":409,"s":0,"a":false},{"u":311,"l":275,"s":0,"a":false},{"u":483,"l":55,"s":0,"a":false},{"u":925,"l":909,"s":1,"a":false},{"u":709,"l":2,"s":0,"a":true},{"u":268,"l":129,"s":1,"a":true},{"u":469,"l":101,"s":1,"a":false},{"u":631,"l":620,"s":1,"a":false},{"u":765,"l":418,"s":0,"a":false},{"u":829,"l":333,"s":0,"a":true},{"u":374,"l":46,"s":0,"a":true},{"u":448,"l":223,"s":0,"a":true},{"u":702,"l":375,"s":0,"a":false},{"u":871,"l":338,"s":1,"a":false},{"u":737,"l":211,"s":0,"a":true},{"u":520,"l":485,"s":0,"a":false},{"u":657,"l":62,"s":1,"a":true},{"u":703,"l":543,"s":1,"a":true},{"u":871,"l":98,"s":1,"a":true},{"u":960,"l":125,"s":1,"a":true},{"u":292,"l":17,"s":1,"a":false},{"u":970,"l":768,"s":0,"a":false},{"u":819,"l":753,"s":1,"a":false},{"u":543,"l":531,"s":1,"a":true},{"u":291,"l":38,"s":0,"a":true},{"u":219,"l":45,"s":0,"a":false},{"u":868,"l":814,"s":1,"a":false},{"u":706,"l":295,"s":1,"a":true},{"u":714,"l":26,"s":1,"a":false},{"u":672,"l":402,"s":0,"a":true},{"u":362,"l":293,"s":0,"a":false},{"u":596,"l":509,"s":1,"a":false},{"u":724,"l":310,"s":1,"a":false},{"u":345,"l":100,"s":1,"a":false},{"u":848,"l":527,"s":1,"a":false},{"u":822,"l":786,"s":1,"a":false},{"u":755,"l":455,"s":1,"a":false},{"u":797,"l":537,"s":1,"a":false},{"u":791,"l":519,"s":1,"a":true},{"u":784,"l":619,"s":1,"a":true},{"u":662,"l":323,"s":1,"a":true},{"u":920,"l":549,"s":1,"a":true},{"u":326,"l":99,"s":1,"a":false},{"u":209,"l":181,"s":0,"a":false},{"u":693,"l":37,"s":1,"a":true},{"u":958,"l":522,"s":0,"a":false},{"u":866,"l":665,"s":1,"a":true},{"u":912,"l":544,"s":0,"a":false},{"u":478,"l":362,"s":1,"a":true},{"u":919,"l":213,"s":1,"a":false},{"u":370,"l":1,"s":0,"a":true},{"u":638,"l":492,"s":1,"a":true},{"u":771,"l":527,"s":0,"a":true},{"u":665,"l":437,"s":0,"a":true},{"u":469,"l":154,"s":0,"a":true},{"u":809,"l":27,"s":0,"a":false},{"u":891,"l":244,"s":1,"a":true},{"u":796,"l":120,"s":1,"a":true},{"u":918,"l":871,"s":0,"a":false},{"u":383,"l":344,"s":0,"a":false},{"u":575,"l":559,"s":1,"a":false},{"u":981,"l":924,"s":0,"a":true},{"u":693,"l":487,"s":1,"a":false},{"u":954,"l":261,"s":0,"a":true},{"u":902,"l":184,"s":0,"a":false},{"u":452,"l":154,"s":0,"a":false},{"u":641,"l":516,"s":1,"a":false},{"u":801,"l":160,"s":0,"a":true},{"u":888,"l":324,"s":1,"a":false},{"u":933,"l":68,"s":1,"a":false},{"u":488,"l":463,"s":1,"a":false},{"u":455,"l":331,"s":1,"a":true},{"u":792,"l":248,"s":1,"a":false},{"u":919,"l":572,"s":1,"a":false},{"u":534,"l":65,"s":0,"a":false},{"u":620,"l":52,"s":1,"a":false},{"u":275,"l":112,"s":0,"a":false},{"u":436,"l":313,"s":0,"a":false},{"u":352,"l":83,"s":0,"a":true},{"u":434,"l":351,"s":0,"a":false},{"u":601,"l":286,"s":1,"a":false},{"u":475,"l":314,"s":0,"a":true},{"u":922,"l":668,"s":0,"a":false},{"u":747,"l":478,"s":1,"a":false},{"u":650,"l":440,"s":0,"a":true},{"u":800,"l":147,"s":1,"a":false},{"u":493,"l":120,"s":1,"a":false},{"u":216,"l":52,"s":0,"a":true},{"u":316,"l":74,"s":0,"a":true},{"u":529,"l":451,"s":1,"a":true},{"u":774,"l":361,"s":1,"a":true},{"u":995,"l":803,"s":1,"a":false},{"u":678,"l":216,"s":1,"a":true},{"u":755,"l":314,"s":1,"a":false},{"u":976,"l":548,"s":1,"a":false},{"u":520,"l":142,"s":0,"a":false},{"u":489,"l":227,"s":0,"a":true},{"u":690,"l":223,"s":0,"a":false},{"u":888,"l":866,"s":0,"a":true},{"u":585,"l":296,"s":0,"a":false},{"u":985,"l":343,"s":1,"a":true},{"u":970,"l":221,"s":1,"a":false},{"u":793,"l":526,"s":1,"a":true},{"u":501,"l":63,"s":1,"a":true},{"u":754,"l":72,"s":1,"a":true},{"u":942,"l":226,"s":1,"a":false},{"u":830,"l":290,"s":0,"a":true},{"u":320,"l":79,"s":0,"a":false},{"u":716,"l":681,"s":1,"a":false},{"u":421,"l":167,"s":1,"a":true},{"u":834,"l":613,"s":0,"a":true},{"u":607,"l":79,"s":1,"a":true},{"u":851,"l":340,"s":0,"a":false},{"u":537,"l":243,"s":1,"a":false},{"u":562,"l":461,"s":1,"a":false},{"u":991,"l":402,"s":0,"a":false},{"u":663,"l":312,"s":0,"a":false},{"u":635,"l":331,"s":0,"a":false},{"u":997,"l":985,"s":0,"a":true},{"u":736,"l":430,"s":1,"a":false},{"u":614,"l":574,"s":0,"a":false},{"u":870,"l":733,"s":0,"a":true},{"u":458,"l":401,"s":1,"a":false},{"u":865,"l":856,"s":1,"a":true},{"u":708,"l":444,"s":1,"a":true},{"u":761,"l":383,"s":1,"a":false},{"u":826,"l":358,"s":0,"a":false},{"u":574,"l":157,"s":1,"a":true},{"u":822,"l":359,"s":0,"a":false},{"u":688,"l":220,"s":1,"a":false},{"u":516,"l":279,"s":0,"a":true},{"u":238,"l":228,"s":1,"a":false},{"u":813,"l":422,"s":1,"a":false},{"u":226,"l":43,"s":1,"a":false},{"u":305,"l":59,"s":1,"a":false},{"u":245,"l":122,"s":0,"a":true},{"u":670,"l":349,"s":0,"a":true},{"u":565,"l":318,"s":0,"a":true},{"u":602,"l":38,"s":1,"a":false},{"u":967,"l":677,"s":0,"a":false},{"u":985,"l":681,"s":1,"a":false},{"u":978,"l":698,"s":0,"a":false},{"u":473,"l":26,"s":1,"a":false},{"u":615,"l":219,"s":0,"a":true},{"u":70,"l":63,"s":0,"a":false},{"u":689,"l":561,"s":0,"a":false},{"u":700,"l":515,"s":1,"a":true},{"u":604,"l":494,"s":0,"a":true},{"u":872,"l":523,"s":1,"a":false},{"u":938,"l":573,"s":1,"a":true},{"u":583,"l":467,"s":1,"a":true},{"u":809,"l":541,"s":0,"a":false},{"u":708,"l":93,"s":1,"a":true},{"u":796,"l":787,"s":1,"a":true},{"u":886,"l":809,"s":1,"a":true},{"u":490,"l":168,"s":0,"a":true},{"u":922,"l":30,"s":1,"a":false},{"u":840,"l":128,"s":1,"a":true},{"u":843,"l":786,"s":1,"a":false},{"u":170,"l":59,"s":1,"a":false},{"u":793,"l":369,"s":0,"a":false},{"u":777,"l":196,"s":0,"a":true},{"u":654,"l":326,"s":0,"a":true},{"u":735,"l":696,"s":0,"a":false},{"u":802,"l":240,"s":1,"a":true},{"u":788,"l":446,"s":0,"a":true},{"u":843,"l":125,"s":1,"a":true},{"u":571,"l":143,"s":1,"a":true},{"u":734,"l":677,"s":0,"a":false},{"u":396,"l":130,"s":0,"a":true},{"u":712,"l":32,"s":0,"a":false},{"u":892,"l":890,"s":1,"a":true},{"u":724,"l":423,"s":1,"a":false},{"u":745,"l":502,"s":0,"a":false},{"u":950,"l":882,"s":1,"a":false},{"u":522,"l":510,"s":0,"a":true},{"u":435,"l":330,"s":0,"a":true},{"u":807,"l":597,"s":0,"a":false},{"u":399,"l":289,"s":0,"a":false},{"u":957,"l":109,"s":0,"a":false},{"u":830,"l":606,"s":0,"a":false},{"u":718,"l":625,"s":0,"a":false},{"u":628,"l":202,"s":1,"a":true},{"u":960,"l":839,"s":1,"a":false},{"u":807,"l":549,"s":1,"a":true},{"u":668,"l":221,"s":0,"a":true},{"u":695,"l":418,"s":1,"a":false},{"u":885,"l":507,"s":0,"a":false},{"u":443,"l":373,"s":1,"a":false},{"u":506,"l":416,"s":1,"a":false},{"u":205,"l":81,"s":1,"a":false},{"u":557,"l":53,"s":1,"a":false},{"u":408,"l":1,"s":0,"a":true},{"u":465,"l":446,"s":0,"a":false},{"u":754,"l":459,"s":0,"a":true},{"u":527,"l":216,"s":1,"a":true},{"u":528,"l":66,"s":1,"a":false},{"u":520,"l":370,"s":1,"a":true},{"u":811,"l":406,"s":1,"a":false},{"u":573,"l":404,"s":0,"a":true},{"u":557,"l":110,"s":0,"a":true},{"u":923,"l":676,"s":0,"a":true},{"u":966,"l":494,"s":0,"a":false},{"u":899,"l":799,"s":0,"a":true},{"u":529,"l":69,"s":1,"a":true},{"u":683,"l":433,"s":0,"a":true},{"u":822,"l":176,"s":1,"a":true},{"u":976,"l":730,"s":0,"a":true},{"u":799,"l":59,"s":0,"a":false},{"u":889,"l":192,"s":0,"a":false},{"u":849,"l":723,"s":1,"a":true},{"u":582,"l":204,"s":0,"a":true},{"u":951,"l":251,"s":0,"a":true},{"u":797,"l":244,"s":0,"a":false},{"u":623,"l":561,"s":0,"a":false},{"u":259,"l":193,"s":1,"a":false},{"u":992,"l":366,"s":0,"a":true},{"u":220,"l":71,"s":0,"a":true},{"u":514,"l":143,"s":0,"a":false},{"u":498,"l":449,"s":1,"a":true},{"u":811,"l":63,"s":1,"a":true},{"u":774,"l":674,"s":0,"a":true},{"u":962,"l":29,"s":0,"a":true},{"u":775,"l":240,"s":0,"a":true},{"u":833,"l":55,"s":0,"a":true},{"u":815,"l":542,"s":1,"a":true},{"u":962,"l":786,"s":0,"a":true},{"u":769,"l":622,"s":0,"a":true},{"u":515,"l":212,"s":0,"a":true},{"u":836,"l":271,"s":1,"a":false},{"u":691,"l":308,"s":1,"a":false},{"u":582,"l":380,"s":1,"a":true},{"u":890,"l":829,"s":1,"a":false},{"u":179,"l":68,"s":0,"a":true},{"u":963,"l":370,"s":1,"a":false},{"u":219,"l":20,"s":0,"a":true},{"u":821,"l":447,"s":0,"a":true},{"u":674,"l":64,"s":1,"a":false},{"u":326,"l":304,"s":1,"a":false},{"u":385,"l":70,"s":1,"a":true},{"u":523,"l":269,"s":1,"a":false},{"u":690,"l":240,"s":1,"a":true},{"u":739,"l":210,"s":1,"a":false},{"u":472,"l":278,"s":1,"a":false},{"u":720,"l":711,"s":0,"a":false},{"u":600,"l":32,"s":1,"a":false},{"u":869,"l":814,"s":0,"a":true},{"u":657,"l":399,"s":1,"a":false},{"u":970,"l":719,"s":0,"a":false},{"u":604,"l":348,"s":1,"a":true},{"u":528,"l":495,"s":0,"a":false},{"u":326,"l":70,"s":1,"a":true},{"u":992,"l":502,"s":0,"a":false},{"u":554,"l":313,"s":0,"a":false},{"u":137,"l":100,"s":0,"a":true},{"u":176,"l":100,"s":1,"a":true},{"u":815,"l":156,"s":0,"a":false},{"u":977,"l":915,"s":1,"a":false},{"u":825,"l":110,"s":1,"a":true},{"u":939,"l":402,"s":1,"a":true},{"u":867,"l":22,"s":1,"a":true},{"u":799,"l":369,"s":0,"a":false},{"u":593,"l":93,"s":0,"a":false},{"u":935,"l":643,"s":0,"a":false},{"u":924,"l":111,"s":1,"a":false},{"u":842,"l":453,"s":1,"a":false},{"u":963,"l":305,"s":1,"a":false},{"u":591,"l":464,"s":1,"a":true},{"u":826,"l":354,"s":1,"a":true},{"u":855,"l":44,"s":0,"a":false},{"u":996,"l":540,"s":1,"a":true},{"u":866,"l":636,"s":1,"a":true},{"u":785,"l":307,"s":1,"a":true},{"u":644,"l":454,"s":1,"a":false},{"u":955,"l":94,"s":0,"a":true},{"u":758,"l":110,"s":0,"a":false},{"u":613,"l":470,"s":0,"a":false},{"u":924,"l":199,"s":1,"a":false},{"u":307,"l":189,"s":1,"a":true},{"u":854,"l":665,"s":0,"a":false},{"u":381,"l":313,"s":0,"a":false},{"u":69,"l":31,"s":1,"a":true},{"u":819,"l":561,"s":1,"a":false},{"u":546,"l":122,"s":1,"a":false},{"u":642,"l":474,"s":0,"a":false},{"u":822,"l":565,"s":1,"a":false},{"u":693,"l":637,"s":1,"a":false},{"u":878,"l":291,"s":0,"a":false},{"u":393,"l":155,"s":0,"a":false},{"u":936,"l":284,"s":0,"a":false},{"u":375,"l":372,"s":1,"a":false},{"u":852,"l":224,"s":0,"a":true},{"u":120,"l":86,"s":1,"a":true},{"u":256,"l":216,"s":0,"a":false},{"u":457,"l":358,"s":1,"a":false},{"u":591,"l":387,"s":1,"a":false},{"u":812,"l":409,"s":1,"a":false},{"u":923,"l":708,"s":1,"a":false},{"u":695,"l":612,"s":0,"a":false},{"u":752,"l":60,"s":1,"a":true},{"u":299,"l":57,"s":1,"a":true},{"u":731,"l":345,"s":0,"a":false},{"u":745,"l":137,"s":1,"a":false},{"u":561,"l":313,"s":1,"a":false},{"u":726,"l":426,"s":1,"a":true},{"u":86,"l":58,"s":1,"a":false},{"u":644,"l":621,"s":0,"a":false},{"u":481,"l":265,"s":1,"a":true},{"u":615,"l":2,"s":1,"a":false},{"u":527,"l":499,"s":1,"a":false},{"u":383,"l":218,"s":1,"a":false},{"u":548,"l":273,"s":0,"a":true},{"u":849,"l":735,"s":0,"a":true},{"u":615,"l":429,"s":0,"a":true},{"u":892,"l":826,"s":1,"a":false},{"u":843,"l":37,"s":1,"a":true},{"u":583,"l":480,"s":1,"a":true},{"u":899,"l":94,"s":1,"a":true},{"u":708,"l":237,"s":1,"a":false},{"u":771,"l":550,"s":0,"a":false},{"u":982,"l":601,"s":1,"a":true},{"u":875,"l":25,"s":1,"a":false},{"u":943,"l":230,"s":0,"a":false},{"u":988,"l":836,"s":1,"a":true},{"u":697,"l":72,"s":1,"a":false},{"u":324,"l":247,"s":0,"a":true},{"u":786,"l":340,"s":1,"a":false},{"u":991,"l":92,"s":0,"a":true},{"u":972,"l":267,"s":1,"a":false},{"u":894,"l":748,"s":1,"a":false},{"u":461,"l":362,"s":1,"a":true},{"u":872,"l":132,"s":1,"a":false},{"u":859,"l":626,"s":0,"a":false},{"u":450,"l":55,"s":1,"a":true},{"u":982,"l":540,"s":1,"a":false},{"u":344,"l":125,"s":0,"a":true},{"u":524,"l":267,"s":1,"a":true},{"u":733,"l":41,"s":0,"a":false},{"u":768,"l":519,"s":0,"a":false},{"u":610,"l":150,"s":1,"a":true},{"u":804,"l":357,"s":0,"a":true},{"u":868,"l":678,"s":0,"a":true},{"u":774,"l":273,"s":0,"a":false},{"u":976,"l":219,"s":0,"a":true},{"u":793,"l":19,"s":0,"a":true},{"u":858,"l":812,"s":1,"a":false},{"u":891,"l":794,"s":0,"a":false},{"u":545,"l":411,"s":1,"a":false},{"u":497,"l":167,"s":1,"a":true},{"u":791,"l":247,"s":0,"a":false},{"u":903,"l":363,"s":1,"a":true},{"u":423,"l":15,"s":0,"a":true},{"u":497,"l":337,"s":1,"a":false},{"u":974,"l":762,"s":0,"a":false},{"u":828,"l":86,"s":1,"a":true},{"u":701,"l":35,"s":0,"a":true},{"u":313,"l":136,"s":0,"a":false},{"u":703,"l":676,"s":1,"a":false},{"u":713,"l":306,"s":1,"a":false},{"u":953,"l":913,"s":0,"a":true},{"u":286,"l":200,"s":0,"a":false},{"u":215,"l":19,"s":0,"a":true},{"u":619,"l":359,"s":0,"a":false},{"u":990,"l":482,"s":1,"a":false},{"u":988,"l":672,"s":0,"a":true},{"u":383,"l":192,"s":0,"a":true},{"u":780,"l":733,"s":1,"a":false},{"u":825,"l":491,"s":1,"a":true},{"u":429,"l":99,"s":0,"a":true},{"u":497,"l":132,"s":1,"a":false},{"u":753,"l":210,"s":1,"a":true},{"u":723,"l":685,"s":1,"a":true},{"u":228,"l":140,"s":1,"a":true},{"u":926,"l":52,"s":1,"a":true},{"u":908,"l":176,"s":0,"a":true},{"u":708,"l":251,"s":0,"a":false},{"u":138,"l":73,"s":1,"a":true},{"u":765,"l":31,"s":1,"a":false},{"u":726,"l":553,"s":0,"a":false},{"u":930,"l":900,"s":1,"a":false},{"u":646,"l":488,"s":0,"a":false},{"u":325,"l":316,"s":1,"a":true},{"u":187,"l":137,"s":1,"a":true},{"u":579,"l":448,"s":0,"a":false},{"u":675,"l":580,"s":0,"a":true},{"u":754,"l":259,"s":0,"a":false},{"u":688,"l":677,"s":1,"a":false},{"u":790,"l":504,"s":1,"a":false},{"u":672,"l":435,"s":0,"a":false},{"u":988,"l":699,"s":0,"a":true},{"u":852,"l":443,"s":0,"a":false},{"u":421,"l":95,"s":1,"a":true},{"u":218,"l":16,"s":1,"a":true},{"u":288,"l":233,"s":0,"a":false},{"u":714,"l":294,"s":1,"a":false},{"u":811,"l":486,"s":0,"a":true},{"u":814,"l":751,"s":1,"a":false},{"u":394,"l":112,"s":1,"a":false},{"u":418,"l":189,"s":0,"a":true},{"u":354,"l":349,"s":0,"a":false},{"u":814,"l":786,"s":0,"a":false},{"u":744,"l":232,"s":0,"a":true},{"u":223,"l":171,"s":1,"a":true},{"u":679,"l":103,"s":1,"a":true},{"u":331,"l":183,"s":1,"a":true},{"u":757,"l":719,"s":1,"a":false},{"u":916,"l":587,"s":0,"a":true},{"u":674,"l":486,"s":0,"a":false},{"u":573,"l":492,"s":0,"a":false},{"u":696,"l":279,"s":1,"a":true},{"u":726,"l":151,"s":1,"a":true},{"u":812,"l":307,"s":0,"a":false},{"u":456,"l":324,"s":0,"a":true},{"u":899,"l":397,"s":1,"a":false},{"u":696,"l":433,"s":1,"a":false},{"u":677,"l":478,"s":1,"a":true},{"u":963,"l":818,"s":0,"a":true},{"u":971,"l":15,"s":1,"a":true},{"u":804,"l":48,"s":1,"a":true},{"u":854,"l":36,"s":0,"a":true},{"u":378,"l":293,"s":1,"a":true},{"u":68,"l":5,"s":0,"a":true},{"u":807,"l":135,"s":0,"a":false},{"u":824,"l":808,"s":0,"a":false},{"u":808,"l":39,"s":0,"a":true},{"u":701,"l":160,"s":0,"a":true},{"u":559,"l":421,"s":1,"a":true},{"u":895,"l":746,"s":1,"a":false},{"u":372,"l":271,"s":1,"a":false},{"u":751,"l":215,"s":0,"a":true},{"u":759,"l":359,"s":0,"a":true},{"u":528,"l":25,"s":0,"a":true},{"u":261,"l":112,"s":0,"a":true},{"u":825,"l":756,"s":0,"a":false},{"u":902,"l":397,"s":1,"a":true},{"u":677,"l":591,"s":0,"a":false},{"u":550,"l":489,"s":1,"a":false},{"u":246,"l":199,"s":1,"a":true},{"u":437,"l":191,"s":1,"a":false},{"u":350,"l":168,"s":1,"a":true},{"u":392,"l":144,"s":1,"a":true},{"u":418,"l":6,"s":1,"a":false},{"u":809,"l":752,"s":0,"a":true},{"u":373,"l":190,"s":1,"a":false},{"u":434,"l":37,"s":1,"a":false},{"u":622,"l":212,"s":0,"a":false},{"u":733,"l":310,"s":1,"a":false},{"u":861,"l":130,"s":1,"a":false},{"u":668,"l":262,"s":1,"a":false},{"u":843,"l":303,"s":0,"a":true},{"u":387,"l":67,"s":0,"a":true},{"u":419,"l":55,"s":0,"a":false},{"u":430,"l":260,"s":0,"a":false},{"u":533,"l":281,"s":1,"a":false},{"u":893,"l":232,"s":1,"a":false},{"u":952,"l":889,"s":1,"a":false},{"u":261,"l":204,"s":1,"a":false},{"u":984,"l":915,"s":0,"a":false},{"u":806,"l":613,"s":0,"a":false},{"u":860,"l":259,"s":0,"a":false},{"u":912,"l":307,"s":1,"a":false},{"u":343,"l":62,"s":1,"a":false},{"u":755,"l":487,"s":1,"a":true},{"u":919,"l":366,"s":1,"a":false},{"u":410,"l":385,"s":1,"a":false},{"u":840,"l":249,"s":0,"a":true},{"u":923,"l":168,"s":1,"a":false},{"u":742,"l":234,"s":0,"a":true},{"u":536,"l":32,"s":1,"a":true},{"u":672,"l":604,"s":1,"a":true},{"u":515,"l":250,"s":0,"a":true},{"u":245,"l":24,"s":1,"a":false},{"u":977,"l":531,"s":0,"a":true},{"u":572,"l":150,"s":0,"a":true},{"u":707,"l":186,"s":1,"a":false},{"u":903,"l":237,"s":1,"a":false},{"u":583,"l":477,"s":1,"a":false},{"u":673,"l":399,"s":1,"a":true},{"u":684,"l":519,"s":1,"a":true},{"u":860,"l":550,"s":0,"a":false},{"u":868,"l":765,"s":1,"a":true},{"u":240,"l":39,"s":1,"a":false},{"u":750,"l":239,"s":0,"a":true},{"u":635,"l":112,"s":1,"a":true},{"u":489,"l":44,"s":1,"a":true},{"u":634,"l":116,"s":0,"a":false},{"u":454,"l":387,"s":1,"a":false},{"u":976,"l":132,"s":0,"a":false},{"u":661,"l":211,"s":1,"a":true},{"u":907,"l":541,"s":1,"a":true},{"u":653,"l":139,"s":0,"a":true},{"u":866,"l":684,"s":0,"a":true},{"u":643,"l":33,"s":1,"a":true},{"u":982,"l":313,"s":1,"a":false},{"u":514,"l":468,"s":0,"a":false},{"u":521,"l":17,"s":1,"a":true},{"u":772,"l":573,"s":1,"a":false},{"u":908,"l":365,"s":0,"a":true},{"u":642,"l":348,"s":1,"a":true},{"u":594,"l":180,"s":0,"a":false},{"u":905,"l":203,"s":0,"a":true},{"u":316,"l":142,"s":0,"a":false},{"u":233,"l":106,"s":0,"a":true},{"u":267,"l":58,"s":1,"a":true},{"u":116,"l":41,"s":0,"a":true},{"u":400,"l":66,"s":0,"a":false},{"u":473,"l":393,"s":0,"a":false},{"u":932,"l":773,"s":1,"a":true},{"u":773,"l":327,"s":1,"a":false},{"u":974,"l":405,"s":1,"a":true},{"u":880,"l":264,"s":1,"a":true},{"u":773,"l":678,"s":1,"a":false},{"u":571,"l":471,"s":1,"a":true},{"u":469,"l":142,"s":0,"a":true},{"u":473,"l":373,"s":1,"a":true},{"u":877,"l":538,"s":1,"a":false},{"u":538,"l":276,"s":0,"a":true},{"u":653,"l":164,"s":1,"a":false},{"u":859,"l":273,"s":0,"a":true},{"u":444,"l":144,"s":1,"a":true},{"u":790,"l":172,"s":1,"a":false},{"u":673,"l":37,"s":0,"a":true},{"u":921,"l":466,"s":0,"a":true},{"u":654,"l":145,"s":0,"a":false},{"u":749,"l":658,"s":1,"a":true},{"u":529,"l":298,"s":0,"a":false},{"u":970,"l":314,"s":0,"a":true},{"u":519,"l":426,"s":0,"a":true},{"u":673,"l":244,"s":1,"a":true},{"u":926,"l":824,"s":0,"a":false},{"u":631,"l":166,"s":1,"a":true},{"u":702,"l":370,"s":0,"a":true},{"u":711,"l":153,"s":0,"a":false},{"u":347,"l":49,"s":0,"a":false},{"u":828,"l":116,"s":1,"a":false},{"u":552,"l":76,"s":0,"a":true},{"u":460,"l":259,"s":1,"a":false},{"u":836,"l":551,"s":0,"a":true},{"u":870,"l":265,"s":0,"a":true},{"u":963,"l":771,"s":1,"a":true},{"u":913,"l":656,"s":0,"a":false},{"u":568,"l":9,"s":0,"a":false},{"u":589,"l":219,"s":1,"a":true},{"u":806,"l":70,"s":0,"a":false},{"u":779,"l":422,"s":0,"a":true},{"u":412,"l":217,"s":1,"a":false},{"u":921,"l":526,"s":0,"a":false},{"u":815,"l":365,"s":1,"a":false},{"u":728,"l":31,"s":1,"a":false},{"u":904,"l":815,"s":0,"a":true},{"u":595,"l":1,"s":0,"a":true},{"u":873,"l":207,"s":0,"a":true},{"u":730,"l":306,"s":0,"a":false},{"u":406,"l":405,"s":0,"a":true},{"u":816,"l":367,"s":1,"a":false},{"u":519,"l":146,"s":1,"a":true},{"u":773,"l":124,"s":1,"a":true},{"u":868,"l":589,"s":0,"a":false},{"u":840,"l":657,"s":0,"a":true},{"u":594,"l":111,"s":0,"a":true},{"u":843,"l":603,"s":0,"a":true},{"u":618,"l":516,"s":0,"a":false},{"u":727,"l":594,"s":1,"a":false},{"u":980,"l":844,"s":1,"a":false},{"u":862,"l":129,"s":0,"a":false},{"u":474,"l":7,"s":0,"a":true},{"u":888,"l":612,"s":0,"a":false},{"u":213,"l":25,"s":0,"a":true},{"u":136,"l":113,"s":0,"a":false},{"u":939,"l":602,"s":0,"a":true},{"u":507,"l":73,"s":0,"a":true},{"u":100,"l":82,"s":0,"a":true},{"u":894,"l":621,"s":1,"a":true},{"u":460,"l":14,"s":0,"a":true},{"u":47,"l":40,"s":0,"a":true},{"u":845,"l":399,"s":0,"a":false},{"u":657,"l":313,"s":1,"a":true},{"u":898,"l":557,"s":1,"a":false},{"u":879,"l":108,"s":0,"a":false},{"u":554,"l":311,"s":0,"a":true},{"u":814,"l":362,"s":1,"a":true},{"u":699,"l":73,"s":0,"a":true},{"u":743,"l":198,"s":0,"a":true},{"u":966,"l":898,"s":1,"a":true},{"u":960,"l":944,"s":1,"a":true},{"u":638,"l":439,"s":1,"a":true},{"u":597,"l":123,"s":1,"a":true},{"u":685,"l":366,"s":0,"a":false},{"u":931,"l":698,"s":0,"a":false},{"u":768,"l":200,"s":1,"a":true},{"u":445,"l":358,"s":0,"a":false},{"u":262,"l":170,"s":0,"a":true},{"u":510,"l":166,"s":0,"a":false},{"u":862,"l":11,"s":0,"a":false},{"u":600,"l":313,"s":0,"a":true},{"u":716,"l":544,"s":1,"a":true},{"u":797,"l":263,"s":1,"a":false},{"u":772,"l":421,"s":1,"a":false},{"u":817,"l":799,"s":0,"a":false},{"u":545,"l":230,"s":1,"a":true},{"u":189,"l":56,"s":0,"a":false},{"u":624,"l":403,"s":0,"a":false},{"u":612,"l":503,"s":1,"a":false},{"u":368,"l":365,"s":1,"a":true},{"u":823,"l":239,"s":1,"a":false},{"u":820,"l":542,"s":1,"a":true},{"u":282,"l":146,"s":0,"a":false},{"u":449,"l":81,"s":1,"a":true},{"u":832,"l":573,"s":1,"a":true},{"u":200,"l":34,"s":0,"a":true},{"u":866,"l":19,"s":1,"a":false},{"u":455,"l":71,"s":1,"a":true},{"u":993,"l":688,"s":1,"a":true},{"u":852,"l":388,"s":0,"a":false},{"u":377,"l":48,"s":0,"a":false},{"u":890,"l":769,"s":1,"a":false},{"u":747,"l":714,"s":1,"a":false},{"u":510,"l":295,"s":0,"a":false},{"u":921,"l":392,"s":1,"a":true},{"u":329,"l":136,"s":0,"a":true},{"u":985,"l":852,"s":1,"a":true},{"u":888,"l":9,"s":1,"a":false},{"u":486,"l":308,"s":1,"a":true},{"u":719,"l":422,"s":1,"a":true},{"u":547,"l":424,"s":0,"a":true},{"u":526,"l":274,"s":0,"a":false},{"u":490,"l":31,"s":1,"a":false},{"u":578,"l":441,"s":0,"a":true},{"u":916,"l":363,"s":1,"a":true},{"u":476,"l":419,"s":1,"a":true},{"u":808,"l":338,"s":0,"a":false},{"u":967,"l":46,"s":0,"a":true},{"u":550,"l":20,"s":0,"a":true},{"u":647,"l":616,"s":1,"a":true},{"u":645,"l":286,"s":1,"a":false},{"u":581,"l":106,"s":1,"a":false},{"u":613,"l":122,"s":0,"a":false},{"u":947,"l":199,"s":0,"a":false},{"u":527,"l":13,"s":0,"a":false},{"u":640,"l":398,"s":0,"a":false},{"u":957,"l":895,"s":0,"a":false},{"u":612,"l":516,"s":0,"a":true},{"u":907,"l":322,"s":1,"a":false},{"u":760,"l":496,"s":1,"a":true},{"u":868,"l":619,"s":0,"a":false},{"u":910,"l":683,"s":0,"a":false},{"u":479,"l":420,"s":0,"a":false},{"u":791,"l":652,"s":1,"a":false},{"u":969,"l":415,"s":1,"a":false},{"u":136,"l":22,"s":0,"a":true},{"u":737,"l":552,"s":1,"a":false},{"u":997,"l":220,"s":1,"a":true},{"u":318,"l":45,"s":1,"a":false},{"u":870,"l":15,"s":0,"a":false},{"u":980,"l":754,"s":1,"a":false},{"u":104,"l":66,"s":1,"a":true},{"u":612,"l":200,"s":0,"a":true},{"u":787,"l":774,"s":0,"a":false},{"u":961,"l":745,"s":1,"a":false},{"u":946,"l":844,"s":1,"a":true},{"u":927,"l":349,"s":1,"a":false},{"u":718,"l":552,"s":1,"a":true},{"u":236,"l":159,"s":0,"a":false},{"u":810,"l":566,"s":1,"a":false},{"u":671,"l":451,"s":0,"a":true},{"u":793,"l":369,"s":0,"a":true},{"u":758,"l":394,"s":1,"a":false},{"u":599,"l":303,"s":0,"a":false},{"u":191,"l":38,"s":1,"a":true},{"u":919,"l":157,"s":1,"a":true},{"u":711,"l":90,"s":0,"a":true},{"u":864,"l":120,"s":0,"a":false},{"u":422,"l":290,"s":0,"a":false},{"u":290,"l":187,"s":0,"a":true},{"u":978,"l":402,"s":1,"a":false},{"u":962,"l":343,"s":0,"a":true},{"u":760,"l":221,"s":1,"a":false},{"u":858,"l":695,"s":1,"a":true},{"u":966,"l":914,"s":0,"a":true},{"u":890,"l":189,"s":1,"a":true},{"u":784,"l":190,"s":1,"a":false},{"u":338,"l":122,"s":1,"a":true},{"u":981,"l":283,"s":1,"a":true},{"u":883,"l":354,"s":0,"a":true},{"u":656,"l":33,"s":0,"a":false},{"u":659,"l":499,"s":1,"a":false},{"u":734,"l":629,"s":0,"a":false},{"u":950,"l":221,"s":0,"a":false},{"u":878,"l":11,"s":0,"a":false},{"u":714,"l":459,"s":1,"a":true},{"u":988,"l":634,"s":0,"a":false},{"u":234,"l":149,"s":0,"a":true},{"u":741,"l":675,"s":1,"a":false},{"u":929,"l":645,"s":0,"a":false},{"u":937,"l":87,"s":0,"a":false},{"u":822,"l":396,"s":0,"a":false},{"u":531,"l":306,"s":0,"a":true},{"u":615,"l":237,"s":0,"a":false},{"u":897,"l":515,"s":0,"a":false},{"u":71,"l":38,"s":0,"a":true},{"u":766,"l":257,"s":1,"a":true},{"u":160,"l":8,"s":1,"a":true},{"u":952,"l":924,"s":0,"a":false},{"u":250,"l":15,"s":0,"a":false},{"u":933,"l":481,"s":1,"a":false},{"u":434,"l":170,"s":0,"a":false},{"u":535,"l":268,"s":1,"a":false},{"u":649,"l":234,"s":1,"a":true},{"u":916,"l":162,"s":0,"a":true},{"u":970,"l":447,"s":1,"a":false},{"u":896,"l":502,"s":1,"a":false},{"u":478,"l":474,"s":1,"a":false},{"u":700,"l":13,"s":1,"a":false},{"u":960,"l":626,"s":0,"a":true},{"u":904,"l":897,"s":1,"a":true},{"u":504,"l":310,"s":1,"a":false},{"u":598,"l":125,"s":0,"a":false},{"u":979,"l":307,"s":1,"a":true},{"u":628,"l":492,"s":0,"a":true},{"u":799,"l":705,"s":1,"a":false},{"u":760,"l":351,"s":0,"a":false},{"u":804,"l":599,"s":1,"a":true},{"u":817,"l":437,"s":0,"a":true},{"u":256,"l":167,"s":0,"a":false},{"u":955,"l":115,"s":0,"a":true},{"u":187,"l":140,"s":1,"a":true},{"u":633,"l":20,"s":1,"a":true},{"u":642,"l":21,"s":1,"a":true},{"u":113,"l":88,"s":0,"a":true},{"u":358,"l":172,"s":0,"a":false},{"u":482,"l":386,"s":1,"a":true},{"u":551,"l":237,"s":0,"a":true},{"u":992,"l":763,"s":1,"a":true},{"u":999,"l":877,"s":1,"a":false},{"u":602,"l":316,"s":0,"a":true},{"u":371,"l":252,"s":0,"a":true},{"u":556,"l":553,"s":1,"a":false},{"u":860,"l":464,"s":1,"a":true},{"u":889,"l":189,"s":1,"a":true},{"u":814,"l":401,"s":1,"a":false},{"u":730,"l":696,"s":1,"a":false},{"u":776,"l":609,"s":1,"a":true},{"u":720,"l":6,"s":1,"a":false},{"u":234,"l":148,"s":0,"a":true},{"u":937,"l":518,"s":0,"a":false},{"u":943,"l":18,"s":0,"a":false},{"u":468,"l":212,"s":0,"a":false},{"u":478,"l":401,"s":0,"a":true},{"u":711,"l":514,"s":0,"a":false},{"u":422,"l":288,"s":0,"a":true},{"u":898,"l":342,"s":1,"a":true},{"u":921,"l":504,"s":1,"a":false},{"u":809,"l":67,"s":1,"a":true},{"u":305,"l":88,"s":1,"a":false},{"u":632,"l":479,"s":1,"a":false},{"u":242,"l":100,"s":1,"a":false},{"u":483,"l":434,"s":1,"a":true},{"u":531,"l":163,"s":1,"a":true},{"u":149,"l":90,"s":1,"a":false},{"u":537,"l":191,"s":0,"a":false},{"u":360,"l":330,"s":0,"a":false},{"u":741,"l":518,"s":0,"a":false},{"u":970,"l":920,"s":0,"a":false},{"u":748,"l":619,"s":0,"a":false},{"u":157,"l":17,"s":1,"a":false},{"u":919,"l":574,"s":0,"a":false},{"u":317,"l":20,"s":1,"a":false},{"u":568,"l":303,"s":1,"a":true},{"u":98,"l":1,"s":0,"a":false},{"u":655,"l":263,"s":1,"a":false},{"u":643,"l":193,"s":1,"a":false},{"u":803,"l":459,"s":0,"a":false},{"u":741,"l":152,"s":1,"a":true},{"u":863,"l":863,"s":1,"a":true},{"u":122,"l":42,"s":0,"a":false},{"u":432,"l":280,"s":0,"a":true},{"u":898,"l":221,"s":1,"a":true},{"u":763,"l":328,"s":0,"a":true},{"u":948,"l":452,"s":1,"a":true},{"u":946,"l":244,"s":0,"a":true},{"u":461,"l":135,"s":1,"a":false},{"u":998,"l":92,"s":1,"a":true},{"u":482,"l":272,"s":1,"a":true},{"u":452,"l":442,"s":0,"a":false},{"u":832,"l":472,"s":0,"a":true},{"u":639,"l":40,"s":0,"a":false},{"u":49,"l":10,"s":1,"a":false},{"u":301,"l":237,"s":1,"a":false},{"u":546,"l":70,"s":1,"a":false},{"u":712,"l":340,"s":0,"a":true},{"u":884,"l":831,"s":0,"a":false},{"u":398,"l":41,"s":1,"a":true},{"u":870,"l":369,"s":0,"a":true},{"u":512,"l":342,"s":1,"a":true},{"u":498,"l":476,"s":1,"a":false},{"u":925,"l":510,"s":0,"a":true},{"u":384,"l":44,"s":1,"a":true},{"u":700,"l":587,"s":0,"a":false},{"u":601,"l":153,"s":0,"a":true},{"u":572,"l":240,"s":1,"a":false},{"u":573,"l":481,"s":1,"a":false},{"u":479,"l":28,"s":1,"a":true},{"u":632,"l":340,"s":1,"a":false},{"u":885,"l":378,"s":0,"a":false},{"u":837,"l":449,"s":1,"a":true},{"u":952,"l":420,"s":1,"a":true},{"u":704,"l":217,"s":0,"a":true},{"u":379,"l":209,"s":0,"a":false},{"u":937,"l":718,"s":0,"a":false},{"u":875,"l":593,"s":0,"a":false},{"u":465,"l":375,"s":0,"a":true},{"u":382,"l":294,"s":0,"a":true},{"u":272,"l":50,"s":0,"a":true},{"u":545,"l":153,"s":1,"a":false},{"u":300,"l":135,"s":0,"a":true},{"u":901,"l":356,"s":0,"a":true},{"u":594,"l":6,"s":1,"a":true},{"u":652,"l":227,"s":0,"a":false},{"u":336,"l":157,"s":1,"a":true},{"u":622,"l":114,"s":0,"a":false},{"u":516,"l":407,"s":1,"a":false},{"u":860,"l":8,"s":1,"a":true},{"u":216,"l":161,"s":0,"a":true},{"u":879,"l":636,"s":0,"a":false},{"u":907,"l":155,"s":0,"a":false},{"u":887,"l":228,"s":0,"a":true},{"u":808,"l":163,"s":0,"a":true},{"u":524,"l":288,"s":1,"a":true},{"u":979,"l":143,"s":1,"a":true},{"u":802,"l":154,"s":0,"a":true},{"u":944,"l":642,"s":0,"a":true},{"u":832,"l":650,"s":1,"a":true},{"u":329,"l":328,"s":0,"a":false},{"u":822,"l":315,"s":1,"a":false},{"u":738,"l":161,"s":1,"a":false},{"u":590,"l":539,"s":0,"a":false},{"u":820,"l":40,"s":1,"a":false},{"u":446,"l":327,"s":0,"a":false},{"u":548,"l":288,"s":1,"a":false},{"u":516,"l":318,"s":0,"a":true},{"u":641,"l":63,"s":1,"a":true},{"u":710,"l":317,"s":1,"a":false},{"u":914,"l":752,"s":1,"a":true},{"u":887,"l":542,"s":0,"a":false},{"u":446,"l":218,"s":0,"a":true},{"u":922,"l":82,"s":1,"a":false},{"u":935,"l":760,"s":1,"a":false},{"u":330,"l":268,"s":1,"a":true},{"u":731,"l":403,"s":1,"a":false},{"u":929,"l":678,"s":1,"a":false},{"u":706,"l":37,"s":1,"a":true},{"u":261,"l":32,"s":0,"a":true},{"u":976,"l":5,"s":0,"a":false},{"u":442,"l":29,"s":1,"a":true},{"u":889,"l":380,"s":0,"a":false},{"u":562,"l":37,"s":0,"a":true},{"u":572,"l":181,"s":0,"a":true},{"u":718,"l":214,"s":0,"a":true},{"u":483,"l":237,"s":0,"a":false},{"u":828,"l":154,"s":0,"a":false},{"u":840,"l":637,"s":0,"a":true},{"u":537,"l":449,"s":0,"a":true},{"u":437,"l":224,"s":0,"a":true},{"u":380,"l":122,"s":0,"a":false},{"u":740,"l":712,"s":0,"a":true},{"u":910,"l":490,"s":0,"a":false},{"u":894,"l":96,"s":1,"a":true},{"u":961,"l":206,"s":1,"a":true},{"u":772,"l":5,"s":0,"a":false},{"u":643,"l":294,"s":0,"a":true},{"u":795,"l":433,"s":0,"a":false},{"u":904,"l":243,"s":0,"a":false},{"u":644,"l":332,"s":0,"a":true},{"u":682,"l":659,"s":1,"a":false},{"u":857,"l":530,"s":1,"a":false},{"u":637,"l":273,"s":1,"a":false},{"u":662,"l":179,"s":0,"a":false},{"u":518,"l":324,"s":1,"a":false},{"u":695,"l":317,"s":1,"a":true},{"u":719,"l":602,"s":1,"a":true},{"u":867,"l":531,"s":1,"a":true},{"u":572,"l":335,"s":0,"a":false},{"u":911,"l":903,"s":1,"a":false},{"u":953,"l":666,"s":0,"a":false},{"u":913,"l":289,"s":1,"a":true},{"u":119,"l":90,"s":1,"a":false},{"u":472,"l":131,"s":1,"a":true},{"u":996,"l":660,"s":0,"a":false},{"u":546,"l":434,"s":0,"a":true},{"u":210,"l":126,"s":1,"a":false},{"u":641,"l":309,"s":1,"a":true},{"u":281,"l":143,"s":0,"a":true},{"u":853,"l":645,"s":0,"a":false},{"u":795,"l":585,"s":1,"a":false},{"u":817,"l":606,"s":0,"a":false},{"u":77,"l":69,"s":1,"a":false},{"u":718,"l":65,"s":1,"a":true},{"u":806,"l":608,"s":1,"a":true},{"u":993,"l":131,"s":0,"a":true},{"u":751,"l":545,"s":1,"a":true},{"u":893,"l":89,"s":0,"a":true},{"u":747,"l":581,"s":1,"a":true},{"u":401,"l":169,"s":0,"a":true},{"u":860,"l":72,"s":0,"a":false},{"u":384,"l":166,"s":0,"a":false},{"u":790,"l":390,"s":0,"a":true},{"u":463,"l":381,"s":1,"a":true},{"u":553,"l":208,"s":1,"a":false},{"u":888,"l":392,"s":0,"a":false},{"u":770,"l":607,"s":1,"a":false},{"u":701,"l":164,"s":0,"a":false},{"u":912,"l":568,"s":1,"a":false},{"u":737,"l":593,"s":0,"a":false},{"u":534,"l":23,"s":1,"a":false},{"u":763,"l":131,"s":1,"a":false},{"u":512,"l":45,"s":1,"a":false},{"u":350,"l":171,"s":0,"a":false},{"u":736,"l":179,"s":0,"a":false},{"u":877,"l":387,"s":1,"a":false},{"u":672,"l":349,"s":0,"a":false},{"u":461,"l":4,"s":1,"a":false},{"u":799,"l":692,"s":1,"a":true},{"u":983,"l":681,"s":1,"a":true},{"u":951,"l":667,"s":1,"a":false},{"u":973,"l":888,"s":0,"a":true},{"u":957,"l":611,"s":0,"a":false},{"u":969,"l":716,"s":1,"a":false},{"u":61,"l":35,"s":1,"a":true},{"u":878,"l":10,"s":1,"a":false},{"u":907,"l":843,"s":1,"a":false},{"u":861,"l":525,"s":0,"a":true},{"u":549,"l":175,"s":0,"a":false},{"u":259,"l":69,"s":1,"a":true},{"u":733,"l":279,"s":1,"a":true},{"u":754,"l":310,"s":1,"a":false},{"u":453,"l":77,"s":0,"a":false},{"u":956,"l":240,"s":1,"a":false},{"u":560,"l":374,"s":0,"a":false},{"u":716,"l":514,"s":0,"a":false},{"u":277,"l":264,"s":1,"a":false},{"u":647,"l":337,"s":1,"a":false},{"u":206,"l":180,"s":0,"a":false},{"u":433,"l":370,"s":1,"a":false},{"u":748,"l":101,"s":1,"a":false},{"u":343,"l":139,"s":1,"a":true},{"u":837,"l":834,"s":1,"a":true},{"u":952,"l":641,"s":1,"a":true},{"u":734,"l":461,"s":1,"a":false},{"u":841,"l":372,"s":0,"a":false},{"u":445,"l":153,"s":0,"a":true},{"u":931,"l":88,"s":1,"a":true},{"u":342,"l":134,"s":0,"a":true},{"u":386,"l":107,"s":1,"a":false},{"u":805,"l":474,"s":1,"a":true},{"u":583,"l":129,"s":1,"a":false},{"u":61,"l":9,"s":1,"a":false},{"u":768,"l":594,"s":0,"a":false},{"u":842,"l":736,"s":1,"a":true},{"u":602,"l":221,"s":1,"a":false},{"u":675,"l":286,"s":0,"a":true},{"u":959,"l":685,"s":0,"a":true},{"u":913,"l":312,"s":1,"a":false},{"u":917,"l":66,"s":0,"a":false},{"u":955,"l":352,"s":1,"a":true},{"u":744,"l":391,"s":0,"a":false},{"u":907,"l":420,"s":0,"a":true},{"u":330,"l":325,"s":0,"a":true},{"u":862,"l":308,"s":0,"a":false},{"u":569,"l":444,"s":1,"a":false},{"u":731,"l":510,"s":0,"a":false},{"u":407,"l":395,"s":1,"a":true},{"u":799,"l":669,"s":0,"a":true},{"u":707,"l":449,"s":1,"a":false},{"u":805,"l":67,"s":1,"a":false},{"u":717,"l":336,"s":0,"a":true},{"u":565,"l":519,"s":0,"a":true},{"u":810,"l":446,"s":0,"a":true},{"u":586,"l":230,"s":0,"a":true},{"u":771,"l":426,"s":1,"a":false},{"u":963,"l":245,"s":1,"a":false},{"u":955,"l":547,"s":0,"a":false},{"u":650,"l":85,"s":1,"a":true},{"u":368,"l":195,"s":1,"a":true},{"u":128,"l":42,"s":0,"a":true},{"u":465,"l":454,"s":0,"a":true},{"u":292,"l":159,"s":0,"a":true},{"u":691,"l":618,"s":1,"a":false},{"u":608,"l":560,"s":1,"a":true},{"u":973,"l":508,"s":0,"a":true},{"u":458,"l":18,"s":0,"a":false},{"u":596,"l":311,"s":1,"a":true},{"u":843,"l":414,"s":1,"a":false},{"u":591,"l":334,"s":0,"a":false},{"u":759,"l":454,"s":0,"a":true},{"u":602,"l":280,"s":0,"a":false},{"u":391,"l":6,"s":1,"a":true},{"u":813,"l":272,"s":0,"a":false},{"u":673,"l":495,"s":1,"a":true},{"u":290,"l":265,"s":1,"a":false},{"u":794,"l":583,"s":1,"a":true},{"u":378,"l":60,"s":0,"a":true},{"u":406,"l":192,"s":0,"a":false},{"u":916,"l":594,"s":1,"a":false},{"u":986,"l":983,"s":0,"a":true},{"u":865,"l":213,"s":1,"a":false},{"u":870,"l":732,"s":0,"a":true},{"u":987,"l":260,"s":1,"a":true},{"u":718,"l":439,"s":0,"a":false},{"u":995,"l":466,"s":0,"a":false},{"u":646,"l":83,"s":1,"a":false},{"u":693,"l":122,"s":0,"a":false},{"u":795,"l":277,"s":0,"a":true},{"u":446,"l":423,"s":0,"a":false},{"u":816,"l":464,"s":0,"a":true},{"u":796,"l":640,"s":0,"a":false},{"u":324,"l":195,"s":1,"a":true},{"u":857,"l":627,"s":1,"a":false},{"u":364,"l":41,"s":1,"a":true},{"u":765,"l":372,"s":0,"a":true},{"u":792,"l":101,"s":0,"a":true},{"u":968,"l":548,"s":1,"a":false},{"u":493,"l":79,"s":1,"a":false},{"u":614,"l":566,"s":1,"a":true},{"u":479,"l":211,"s":1,"a":true},{"u":441,"l":423,"s":0,"a":true},{"u":566,"l":278,"s":0,"a":true},{"u":866,"l":266,"s":1,"a":true},{"u":512,"l":112,"s":1,"a":false},{"u":473,"l":455,"s":1,"a":false},{"u":755,"l":154,"s":1,"a":true},{"u":878,"l":173,"s":1,"a":true},{"u":804,"l":556,"s":0,"a":false},{"u":578,"l":54,"s":1,"a":false},{"u":555,"l":107,"s":1,"a":false},{"u":345,"l":316,"s":1,"a":false},{"u":743,"l":80,"s":1,"a":false},{"u":416,"l":389,"s":0,"a":false},{"u":797,"l":6,"s":1,"a":false},{"u":688,"l":32,"s":0,"a":false},{"u":768,"l":293,"s":0,"a":false},{"u":495,"l":477,"s":0,"a":false},{"u":484,"l":64,"s":1,"a":true},{"u":43,"l":26,"s":1,"a":true},{"u":550,"l":191,"s":0,"a":false},{"u":795,"l":571,"s":0,"a":false},{"u":165,"l":30,"s":0,"a":false},{"u":549,"l":12,"s":0,"a":true},{"u":326,"l":229,"s":1,"a":false},{"u":778,"l":535,"s":0,"a":false},{"u":579,"l":202,"s":0,"a":false},{"u":149,"l":130,"s":0,"a":true},{"u":935,"l":640,"s":0,"a":true},{"u":828,"l":221,"s":0,"a":false},{"u":272,"l":239,"s":1,"a":false},{"u":457,"l":83,"s":0,"a":false},{"u":599,"l":27,"s":1,"a":true},{"u":938,"l":859,"s":0,"a":false},{"u":665,"l":496,"s":0,"a":true},{"u":216,"l":162,"s":1,"a":true},{"u":519,"l":332,"s":1,"a":true},{"u":408,"l":335,"s":1,"a":true},{"u":972,"l":968,"s":1,"a":true},{"u":498,"l":420,"s":0,"a":false},{"u":884,"l":64,"s":1,"a":true},{"u":830,"l":471,"s":0,"a":true},{"u":395,"l":377,"s":0,"a":false},{"u":909,"l":711,"s":1,"a":false},{"u":292,"l":249,"s":1,"a":true},{"u":453,"l":177,"s":1,"a":false},{"u":667,"l":325,"s":0,"a":false},{"u":756,"l":525,"s":0,"a":true},{"u":463,"l":100,"s":0,"a":true},{"u":827,"l":373,"s":1,"a":true},{"u":562,"l":469,"s":0,"a":false},{"u":248,"l":148,"s":1,"a":false},{"u":756,"l":728,"s":1,"a":false},{"u":801,"l":583,"s":0,"a":false},{"u":808,"l":274,"s":0,"a":false},{"u":884,"l":592,"s":0,"a":true},{"u":479,"l":457,"s":1,"a":false},{"u":942,"l":440,"s":1,"a":false},{"u":874,"l":458,"s":0,"a":true},{"u":920,"l":274,"s":1,"a":false},{"u":471,"l":191,"s":0,"a":true},{"u":792,"l":708,"s":1,"a":false},{"u":835,"l":222,"s":1,"a":false},{"u":951,"l":869,"s":1,"a":false},{"u":538,"l":426,"s":0,"a":false},{"u":619,"l":22,"s":0,"a":true},{"u":818,"l":26,"s":1,"a":true},{"u":322,"l":236,"s":1,"a":true},{"u":792,"l":229,"s":1,"a":true},{"u":714,"l":263,"s":0,"a":false},{"u":661,"l":382,"s":1,"a":true},{"u":671,"l":124,"s":0,"a":true},{"u":786,"l":766,"s":0,"a":false},{"u":745,"l":725,"s":1,"a":false},{"u":980,"l":495,"s":0,"a":true},{"u":946,"l":582,"s":1,"a":true},{"u":539,"l":273,"s":1,"a":true},{"u":685,"l":345,"s":1,"a":true},{"u":742,"l":620,"s":1,"a":false},{"u":612,"l":12,"s":0,"a":false},{"u":363,"l":280,"s":1,"a":true},{"u":564,"l":409,"s":0,"a":true},{"u":893,"l":196,"s":0,"a":true},{"u":941,"l":28,"s":1,"a":true},{"u":612,"l":371,"s":0,"a":true},{"u":302,"l":127,"s":1,"a":true},{"u":350,"l":278,"s":0,"a":false},{"u":947,"l":247,"s":1,"a":false},{"u":456,"l":133,"s":1,"a":false},{"u":996,"l":829,"s":0,"a":false},{"u":863,"l":821,"s":0,"a":true},{"u":927,"l":181,"s":1,"a":false},{"u":577,"l":45,"s":1,"a":false},{"u":770,"l":453,"s":1,"a":false},{"u":957,"l":593,"s":1,"a":true},{"u":679,"l":670,"s":1,"a":false},{"u":719,"l":171,"s":0,"a":false},{"u":965,"l":806,"s":0,"a":true},{"u":888,"l":116,"s":0,"a":false},{"u":599,"l":474,"s":1,"a":true},{"u":879,"l":59,"s":1,"a":false},{"u":870,"l":722,"s":1,"a":true},{"u":764,"l":376,"s":0,"a":false},{"u":616,"l":220,"s":1,"a":true},{"u":617,"l":351,"s":1,"a":true},{"u":216,"l":63,"s":1,"a":true},{"u":769,"l":704,"s":1,"a":true},{"u":275,"l":168,"s":0,"a":true},{"u":855,"l":142,"s":0,"a":true},{"u":821,"l":195,"s":1,"a":false},{"u":869,"l":572,"s":1,"a":true},{"u":499,"l":73,"s":1,"a":false},{"u":463,"l":389,"s":1,"a":false},{"u":303,"l":128,"s":0,"a":false},{"u":970,"l":327,"s":0,"a":true},{"u":292,"l":38,"s":1,"a":false},{"u":560,"l":242,"s":1,"a":true},{"u":894,"l":393,"s":1,"a":true},{"u":549,"l":36,"s":1,"a":true},{"u":996,"l":38,"s":1,"a":false},{"u":897,"l":532,"s":1,"a":false},{"u":859,"l":146,"s":1,"a":false},{"u":883,"l":660,"s":1,"a":true},{"u":430,"l":54,"s":0,"a":false},{"u":810,"l":16,"s":1,"a":true},{"u":946,"l":191,"s":0,"a":false},{"u":959,"l":742,"s":1,"a":false},{"u":892,"l":519,"s":1,"a":false},{"u":121,"l":58,"s":1,"a":true},{"u":564,"l":529,"s":1,"a":true},{"u":996,"l":638,"s":0,"a":false},{"u":483,"l":144,"s":0,"a":false},{"u":666,"l":280,"s":0,"a":false},{"u":874,"l":65,"s":1,"a":false},{"u":469,"l":216,"s":0,"a":false},{"u":778,"l":589,"s":1,"a":false},{"u":902,"l":463,"s":0,"a":false},{"u":802,"l":155,"s":1,"a":false},{"u":495,"l":440,"s":0,"a":false},{"u":462,"l":223,"s":1,"a":false},{"u":317,"l":144,"s":0,"a":true},{"u":791,"l":302,"s":0,"a":true},{"u":113,"l":110,"s":1,"a":false},{"u":724,"l":660,"s":0,"a":false},{"u":304,"l":71,"s":0,"a":true},{"u":387,"l":201,"s":0,"a":false},{"u":490,"l":93,"s":1,"a":false},{"u":792,"l":106,"s":0,"a":false},{"u":439,"l":355,"s":1,"a":true},{"u":980,"l":624,"s":0,"a":false},{"u":396,"l":210,"s":1,"a":false},{"u":396,"l":234,"s":0,"a":true},{"u":706,"l":28,"s":1,"a":true},{"u":450,"l":328,"s":0,"a":false},{"u":384,"l":120,"s":1,"a":false},{"u":392,"l":266,"s":0,"a":true},{"u":292,"l":123,"s":0,"a":true},{"u":521,"l":399,"s":0,"a":true},{"u":759,"l":360,"s":1,"a":false},{"u":339,"l":137,"s":1,"a":false},{"u":965,"l":294,"s":0,"a":true},{"u":806,"l":110,"s":0,"a":true},{"u":872,"l":123,"s":0,"a":true},{"u":769,"l":748,"s":1,"a":true},{"u":970,"l":768,"s":1,"a":false},{"u":591,"l":475,"s":0,"a":true},{"u":832,"l":287,"s":1,"a":true},{"u":780,"l":467,"s":0,"a":true},{"u":812,"l":609,"s":1,"a":false},{"u":992,"l":841,"s":1,"a":true},{"u":941,"l":866,"s":1,"a":true},{"u":685,"l":384,"s":1,"a":true},{"u":426,"l":287,"s":0,"a":true},{"u":942,"l":842,"s":0,"a":false},{"u":922,"l":436,"s":0,"a":false},{"u":940,"l":301,"s":1,"a":false},{"u":518,"l":201,"s":0,"a":true},{"u":564,"l":167,"s":1,"a":false},{"u":390,"l":361,"s":1,"a":true},{"u":680,"l":92,"s":0,"a":false},{"u":927,"l":160,"s":1,"a":true},{"u":821,"l":816,"s":0,"a":false},{"u":861,"l":345,"s":0,"a":false},{"u":493,"l":359,"s":1,"a":false},{"u":833,"l":626,"s":1,"a":true},{"u":706,"l":223,"s":0,"a":true},{"u":599,"l":21,"s":1,"a":true},{"u":383,"l":219,"s":1,"a":true},{"u":645,"l":324,"s":1,"a":true},{"u":698,"l":267,"s":0,"a":true},{"u":966,"l":486,"s":0,"a":true},{"u":621,"l":532,"s":0,"a":false},{"u":176,"l":126,"s":0,"a":false},{"u":397,"l":122,"s":0,"a":true},{"u":674,"l":56,"s":1,"a":false},{"u":845,"l":782,"s":1,"a":false},{"u":669,"l":315,"s":0,"a":false},{"u":968,"l":643,"s":0,"a":true},{"u":849,"l":65,"s":1,"a":true},{"u":411,"l":89,"s":0,"a":true},{"u":889,"l":609,"s":1,"a":false},{"u":661,"l":560,"s":0,"a":false},{"u":353,"l":206,"s":1,"a":false},{"u":574,"l":412,"s":1,"a":true},{"u":681,"l":91,"s":1,"a":true},{"u":899,"l":81,"s":0,"a":false},{"u":601,"l":540,"s":1,"a":true},{"u":766,"l":252,"s":1,"a":false},{"u":561,"l":209,"s":1,"a":false},{"u":425,"l":73,"s":0,"a":false},{"u":943,"l":23,"s":1,"a":false},{"u":125,"l":68,"s":0,"a":true},{"u":519,"l":227,"s":0,"a":false},{"u":954,"l":837,"s":1,"a":false},{"u":843,"l":827,"s":1,"a":false},{"u":453,"l":289,"s":1,"a":true},{"u":849,"l":843,"s":0,"a":false},{"u":717,"l":339,"s":0,"a":false},{"u":327,"l":115,"s":1,"a":true},{"u":381,"l":104,"s":1,"a":false},{"u":755,"l":667,"s":0,"a":true},{"u":993,"l":476,"s":0,"a":true},{"u":400,"l":107,"s":1,"a":false},{"u":697,"l":74,"s":0,"a":false},{"u":674,"l":553,"s":1,"a":false},{"u":638,"l":557,"s":0,"a":false},{"u":816,"l":582,"s":0,"a":false},{"u":710,"l":8,"s":1,"a":false},{"u":584,"l":488,"s":0,"a":true},{"u":970,"l":469,"s":0,"a":false},{"u":469,"l":153,"s":1,"a":false},{"u":916,"l":31,"s":1,"a":true},{"u":909,"l":573,"s":0,"a":false},{"u":572,"l":97,"s":0,"a":false},{"u":532,"l":441,"s":1,"a":true},{"u":576,"l":168,"s":1,"a":true},{"u":978,"l":712,"s":0,"a":false},{"u":865,"l":670,"s":0,"a":false},{"u":700,"l":336,"s":0,"a":false},{"u":903,"l":724,"s":1,"a":false},{"u":695,"l":202,"s":1,"a":false},{"u":430,"l":425,"s":0,"a":true},{"u":939,"l":243,"s":0,"a":true},{"u":872,"l":705,"s":1,"a":true},{"u":356,"l":311,"s":0,"a":false},{"u":649,"l":590,"s":1,"a":true},{"u":510,"l":52,"s":1,"a":false},{"u":767,"l":175,"s":1,"a":false},{"u":968,"l":822,"s":1,"a":false},{"u":945,"l":478,"s":0,"a":false},{"u":711,"l":130,"s":0,"a":true},{"u":818,"l":4,"s":0,"a":false},{"u":536,"l":132,"s":1,"a":false},{"u":787,"l":702,"s":0,"a":true},{"u":858,"l":306,"s":0,"a":true},{"u":751,"l":746,"s":1,"a":false},{"u":984,"l":971,"s":1,"a":false},{"u":340,"l":218,"s":0,"a":true},{"u":591,"l":531,"s":1,"a":true},{"u":890,"l":254,"s":1,"a":false},{"u":792,"l":565,"s":0,"a":false},{"u":688,"l":254,"s":0,"a":false},{"u":507,"l":383,"s":1,"a":true},{"u":791,"l":459,"s":1,"a":false},{"u":816,"l":88,"s":0,"a":true},{"u":551,"l":171,"s":0,"a":true},{"u":777,"l":375,"s":1,"a":true},{"u":928,"l":272,"s":0,"a":true},{"u":349,"l":15,"s":0,"a":true},{"u":904,"l":735,"s":0,"a":true},{"u":312,"l":141,"s":1,"a":true},{"u":778,"l":355,"s":1,"a":false},{"u":770,"l":70,"s":0,"a":false},{"u":378,"l":178,"s":1,"a":true},{"u":937,"l":657,"s":1,"a":false},{"u":987,"l":747,"s":1,"a":true},{"u":309,"l":160,"s":0,"a":true},{"u":964,"l":373,"s":0,"a":false},{"u":546,"l":156,"s":1,"a":false},{"u":634,"l":324,"s":1,"a":false},{"u":501,"l":40,"s":1,"a":true},{"u":579,"l":8,"s":1,"a":true},{"u":468,"l":214,"s":0,"a":false},{"u":833,"l":453,"s":0,"a":false},{"u":373,"l":302,"s":1,"a":true},{"u":985,"l":684,"s":0,"a":false},{"u":130,"l":57,"s":1,"a":false},{"u":323,"l":55,"s":1,"a":true},{"u":347,"l":240,"s":1,"a":true},{"u":715,"l":321,"s":0,"a":false},{"u":623,"l":327,"s":1,"a":false},{"u":398,"l":54,"s":1,"a":false},{"u":981,"l":911,"s":1,"a":true},{"u":984,"l":205,"s":0,"a":false},{"u":479,"l":437,"s":1,"a":false},{"u":856,"l":81,"s":1,"a":true},{"u":541,"l":53,"s":0,"a":false},{"u":301,"l":208,"s":1,"a":false},{"u":541,"l":274,"s":1,"a":false},{"u":805,"l":703,"s":1,"a":false},{"u":855,"l":14,"s":0,"a":false},{"u":652,"l":254,"s":0,"a":false},{"u":163,"l":140,"s":1,"a":true},{"u":554,"l":314,"s":0,"a":true},{"u":293,"l":228,"s":1,"a":true},{"u":725,"l":461,"s":1,"a":true},{"u":583,"l":360,"s":1,"a":true},{"u":499,"l":470,"s":0,"a":false},{"u":665,"l":85,"s":1,"a":true},{"u":728,"l":589,"s":0,"a":true},{"u":366,"l":145,"s":1,"a":false},{"u":946,"l":731,"s":1,"a":true},{"u":646,"l":537,"s":0,"a":true},{"u":667,"l":470,"s":0,"a":false},{"u":904,"l":516,"s":0,"a":false},{"u":223,"l":203,"s":1,"a":true},{"u":713,"l":103,"s":1,"a":true},{"u":594,"l":364,"s":0,"a":false},{"u":898,"l":700,"s":1,"a":true},{"u":901,"l":679,"s":0,"a":true},{"u":730,"l":183,"s":0,"a":true},{"u":574,"l":566,"s":1,"a":true},{"u":587,"l":297,"s":0,"a":true},{"u":259,"l":204,"s":0,"a":true},{"u":971,"l":619,"s":0,"a":false},{"u":862,"l":563,"s":0,"a":false},{"u":671,"l":536,"s":1,"a":false},{"u":712,"l":43,"s":1,"a":true},{"u":875,"l":824,"s":0,"a":true},{"u":472,"l":80,"s":0,"a":false},{"u":571,"l":341,"s":0,"a":true},{"u":566,"l":62,"s":1,"a":false},{"u":640,"l":453,"s":0,"a":true},{"u":717,"l":55,"s":1,"a":false},{"u":863,"l":209,"s":1,"a":true},{"u":940,"l":601,"s":0,"a":false},{"u":927,"l":272,"s":1,"a":true},{"u":307,"l":128,"s":1,"a":false},{"u":421,"l":211,"s":0,"a":false},{"u":850,"l":635,"s":0,"a":true},{"u":396,"l":83,"s":0,"a":true},{"u":748,"l":98,"s":1,"a":true},{"u":639,"l":36,"s":0,"a":true},{"u":468,"l":154,"s":1,"a":true},{"u":806,"l":352,"s":0,"a":true},{"u":997,"l":623,"s":0,"a":false},{"u":730,"l":368,"s":1,"a":false},{"u":826,"l":699,"s":1,"a":true},{"u":92,"l":52,"s":0,"a":false},{"u":562,"l":39,"s":0,"a":true},{"u":900,"l":789,"s":1,"a":false},{"u":622,"l":165,"s":1,"a":true},{"u":519,"l":136,"s":1,"a":true},{"u":671,"l":34,"s":0,"a":true},{"u":389,"l":60,"s":0,"a":true}] diff --git a/submodules/Postbox/PostboxTests/Info.plist b/submodules/Postbox/PostboxTests/Info.plist deleted file mode 100644 index ba72822e87..0000000000 --- a/submodules/Postbox/PostboxTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/submodules/Postbox/PostboxTests/MessageHistoryIndexTableTests.swift b/submodules/Postbox/PostboxTests/MessageHistoryIndexTableTests.swift deleted file mode 100644 index 88709cf4ff..0000000000 --- a/submodules/Postbox/PostboxTests/MessageHistoryIndexTableTests.swift +++ /dev/null @@ -1,684 +0,0 @@ -import Foundation - -import UIKit -import XCTest - -import Postbox -@testable import Postbox - -import SwiftSignalKit - -private let peerId = PeerId(namespace: 1, id: 1) -private let namespace: Int32 = 1 - -private extension MessageIndex { - init(id: Int32, timestamp: Int32) { - self.init(id: MessageId(peerId: peerId, namespace: namespace, id: id), timestamp: timestamp) - } -} - -private extension MessageTags { - static let media = MessageTags(rawValue: 1 << 0) -} - -class MessageHistoryIndexTableTests: XCTestCase { - var valueBox: SqliteValueBox? - var path: String? - - var postbox: Postbox? - - override func setUp() { - super.setUp() - - self.continueAfterFailure = false - - var randomId: Int64 = 0 - arc4random_buf(&randomId, 8) - path = NSTemporaryDirectory() + "\(randomId)" - - var randomKey = Data(count: 32) - randomKey.withUnsafeMutableBytes({ (bytes: UnsafeMutablePointer) -> Void in - arc4random_buf(bytes, 32) - }) - var randomSalt = Data(count: 16) - randomSalt.withUnsafeMutableBytes({ (bytes: UnsafeMutablePointer) -> Void in - arc4random_buf(bytes, 16) - }) - - self.valueBox = SqliteValueBox(basePath: path!, queue: Queue.mainQueue(), encryptionParameters: ValueBoxEncryptionParameters(forceEncryptionIfNoSet: true, key: ValueBoxEncryptionParameters.Key(data: randomKey)!, salt: ValueBoxEncryptionParameters.Salt(data: randomSalt)!), upgradeProgress: { _ in }) - - let messageHoles: [PeerId.Namespace: [MessageId.Namespace: Set]] = [ - peerId.namespace: [ - namespace: Set([.media]) - ] - ] - - let seedConfiguration = SeedConfiguration(globalMessageIdsPeerIdNamespaces: Set(), initializeChatListWithHole: (topLevel: nil, groups: nil), messageHoles: messageHoles, existingMessageTags: [.media], messageTagsWithSummary: [], existingGlobalMessageTags: [], peerNamespacesRequiringMessageTextIndex: [], peerSummaryCounterTags: { _ in PeerSummaryCounterTags(rawValue: 0) }, additionalChatListIndexNamespace: nil, messageNamespacesRequiringGroupStatsValidation: Set(), chatMessagesNamespaces: Set()) - - self.postbox = Postbox(queue: Queue.mainQueue(), basePath: path!, seedConfiguration: seedConfiguration, valueBox: self.valueBox!) - } - - override func tearDown() { - super.tearDown() - - self.postbox = nil - let _ = try? FileManager.default.removeItem(atPath: path!) - self.path = nil - } - - func addHole(_ range: ClosedRange, space: MessageHistoryHoleSpace) { - var operations: [MessageHistoryIndexHoleOperationKey: [MessageHistoryIndexHoleOperation]] = [:] - self.postbox!.messageHistoryHoleIndexTable.add(peerId: peerId, namespace: namespace, space: space, range: range, operations: &operations) - } - - func removeHole(_ range: ClosedRange, space: MessageHistoryHoleSpace) { - var operations: [MessageHistoryIndexHoleOperationKey: [MessageHistoryIndexHoleOperation]] = [:] - self.postbox!.messageHistoryHoleIndexTable.remove(peerId: peerId, namespace: namespace, space: space, range: range, operations: &operations) - } - - func addMessage(_ id: Int32, _ timestamp: Int32, _ groupingKey: Int64? = nil) { - var operations: [MessageHistoryIndexOperation] = [] - self.postbox!.messageHistoryIndexTable.addMessages([InternalStoreMessage(id: MessageId(peerId: peerId, namespace: namespace, id: id), timestamp: timestamp, globallyUniqueId: nil, groupingKey: groupingKey, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, authorId: peerId, text: "", attributes: [], media: [])], operations: &operations) - } - - func removeMessage(_ id: Int32) { - var operations: [MessageHistoryIndexOperation] = [] - self.postbox!.messageHistoryIndexTable.removeMessage(MessageId(peerId: peerId, namespace: namespace, id: id), operations: &operations) - } - - private func expectMessages(_ items: [MessageIndex]) { - let actualList = self.postbox!.messageHistoryIndexTable.debugList(peerId, namespace: namespace) - if items != actualList { - XCTFail("Expected\n\(items)\nGot\n\(actualList)") - } - } - - private func expectHoles(space: MessageHistoryHoleSpace, _ ranges: [ClosedRange], failure: () -> Void = {}) { - let actualList = self.postbox!.messageHistoryHoleIndexTable.debugList(peerId: peerId, namespace: namespace, space: space) - if ranges != actualList { - failure() - XCTFail("Expected\n\(ranges)\nGot\n\(actualList)") - } - } - - func testEmpty() { - expectMessages([]) - expectHoles(space: .everywhere, []) - expectHoles(space: .tag(.media), []) - } - - func testSimpleMessages() { - addMessage(10, 10) - expectMessages([.init(id: 10, timestamp: 10)]) - addMessage(11, 11) - expectMessages([.init(id: 10, timestamp: 10), .init(id: 11, timestamp: 11)]) - expectHoles(space: .everywhere, []) - expectHoles(space: .tag(.media), []) - } - - func testSimpleHoles() { - removeHole(1 ... Int32.max, space: .everywhere) - - addHole(3 ... 10, space: .everywhere) - expectHoles(space: .everywhere, [3 ... 10]) - - addHole(3 ... 10, space: .everywhere) - expectHoles(space: .everywhere, [3 ... 10]) - - addHole(5 ... 20, space: .everywhere) - expectHoles(space: .everywhere, [3 ... 20]) - - addHole(25 ... 30, space: .everywhere) - expectHoles(space: .everywhere, [3 ... 20, 25 ... 30]) - - addHole(21 ... 23, space: .everywhere) - expectHoles(space: .everywhere, [3 ... 23, 25 ... 30]) - - addHole(5 ... 25, space: .everywhere) - expectHoles(space: .everywhere, [3 ... 30]) - - addHole(2 ... 35, space: .everywhere) - expectHoles(space: .everywhere, [2 ... 35]) - - removeHole(1 ... 5, space: .everywhere) - expectHoles(space: .everywhere, [6 ... 35]) - - removeHole(11 ... 11, space: .everywhere) - expectHoles(space: .everywhere, [6 ... 10, 12 ... 35]) - - removeHole(8 ... 15, space: .everywhere) - expectHoles(space: .everywhere, [6 ... 7, 16 ... 35]) - - removeHole(1 ... 16, space: .everywhere) - expectHoles(space: .everywhere, [17 ... 35]) - } - - func testHoleVectors() { - struct Operation: Codable { - struct Key: CodingKey { - var stringValue: String - - init?(stringValue: String) { - self.stringValue = stringValue - } - - let intValue: Int? = nil - init?(intValue: Int) { - return nil - } - } - - let add: Bool - let range: ClosedRange - - init(add: Bool, range: ClosedRange) { - self.add = add - self.range = range - } - - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: Key.self) - self.add = try container.decode(Bool.self, forKey: Key(stringValue: "a")!) - self.range = (try container.decode(Int32.self, forKey: Key(stringValue: "l")!)) ... (try container.decode(Int32.self, forKey: Key(stringValue: "u")!)) - } - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: Key.self) - try container.encode(self.add, forKey: Key(stringValue: "a")!) - try container.encode(self.range.lowerBound, forKey: Key(stringValue: "l")!) - try container.encode(self.range.upperBound, forKey: Key(stringValue: "u")!) - } - } - - let bundle = Bundle(for: type(of: self)) - let path = bundle.path(forResource: "HoleOperationsVector1", ofType: "json")! - let jsonData = try! Data(contentsOf: URL(fileURLWithPath: path)) - - var operations: [Operation] = (try? JSONDecoder().decode(Array.self, from: jsonData)) ?? [] - - if operations.isEmpty { - for _ in 0 ..< 10000 { - let bound1 = Int(max(1, arc4random_uniform(1000))) - let bound2 = Int(max(1, arc4random_uniform(1000))) - let range: ClosedRange = min(bound1, bound2) ... max(bound1, bound2) - let int32Range = Int32(range.lowerBound) ... Int32(range.upperBound) - let operation = arc4random_uniform(10) - if operation < 5 { - operations.append(Operation(add: true, range: int32Range)) - } else { - operations.append(Operation(add: false, range: int32Range)) - } - } - let data = try! JSONEncoder().encode(operations) - print(String(data: data, encoding: .utf8)!) - } - - var verificationSet = IndexSet() - for (_, holesByMessageNamespace) in self.postbox!.seedConfiguration.messageHoles { - for (_, _) in holesByMessageNamespace{ - verificationSet.insert(integersIn: 1 ... Int(Int32.max - 1)) - } - } - for i in 0 ..< operations.count { - let operation = operations[i] - if operation.add { - verificationSet.insert(integersIn: Int(operation.range.lowerBound) ... Int(operation.range.upperBound)) - addHole(operation.range, space: .everywhere) - } else { - verificationSet.remove(integersIn: Int(operation.range.lowerBound) ... Int(operation.range.upperBound)) - removeHole(operation.range, space: .everywhere) - } - let testRanges = verificationSet.rangeView.map({ ClosedRange(Int32($0.lowerBound) ... Int32($0.upperBound - 1)) }) - expectHoles(space: .everywhere, testRanges) - expectHoles(space: .tag(.media), testRanges) - } - } - - func testHoleTagVectors() { - struct Operation: Codable { - struct Key: CodingKey { - var stringValue: String - - init?(stringValue: String) { - self.stringValue = stringValue - } - - let intValue: Int? = nil - init?(intValue: Int) { - return nil - } - } - - let add: Bool - let range: ClosedRange - let space: MessageHistoryHoleSpace - - init(add: Bool, range: ClosedRange, space: MessageHistoryHoleSpace) { - self.add = add - self.range = range - self.space = space - } - - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: Key.self) - self.add = try container.decode(Bool.self, forKey: Key(stringValue: "a")!) - self.range = (try container.decode(Int32.self, forKey: Key(stringValue: "l")!)) ... (try container.decode(Int32.self, forKey: Key(stringValue: "u")!)) - let spaceValue = try container.decode(Int32.self, forKey: Key(stringValue: "s")!) - if spaceValue == 0 { - self.space = .everywhere - } else { - self.space = .tag(MessageTags(rawValue: UInt32(spaceValue))) - } - } - - func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: Key.self) - try container.encode(self.add, forKey: Key(stringValue: "a")!) - try container.encode(self.range.lowerBound, forKey: Key(stringValue: "l")!) - try container.encode(self.range.upperBound, forKey: Key(stringValue: "u")!) - switch self.space { - case .everywhere: - try container.encode(0, forKey: Key(stringValue: "s")!) - case let .tag(tag): - try container.encode(Int32(tag.rawValue), forKey: Key(stringValue: "s")!) - } - } - } - - var operations: [Operation] = [] - let bundle = Bundle(for: type(of: self)) - if let path = bundle.path(forResource: "HoleOperationsVector2", ofType: "json"), let jsonData = try? Data(contentsOf: URL(fileURLWithPath: path)) { - if let value = try? JSONDecoder().decode(Array.self, from: jsonData) { - operations = value - } - } - - if operations.isEmpty { - for _ in 0 ..< 10000 { - let bound1 = Int(max(1, arc4random_uniform(1000))) - let bound2 = Int(max(1, arc4random_uniform(1000))) - let range: ClosedRange = min(bound1, bound2) ... max(bound1, bound2) - let int32Range = Int32(range.lowerBound) ... Int32(range.upperBound) - let operation = arc4random_uniform(10) - let spaceValue = arc4random_uniform(2) - let space: MessageHistoryHoleSpace - if spaceValue == 0 { - space = .everywhere - } else { - space = .tag(.media) - } - if operation < 5 { - operations.append(Operation(add: true, range: int32Range, space: space)) - } else { - operations.append(Operation(add: false, range: int32Range, space: space)) - } - } - let data = try! JSONEncoder().encode(operations) - print(String(data: data, encoding: .utf8)!) - } - - var everywhereVerificationSet = IndexSet() - var mediaVerificationSet = IndexSet() - for (_, holesByMessageNamespace) in self.postbox!.seedConfiguration.messageHoles { - for (_, _) in holesByMessageNamespace{ - everywhereVerificationSet.insert(integersIn: 1 ... Int(Int32.max - 1)) - mediaVerificationSet.insert(integersIn: 1 ... Int(Int32.max - 1)) - } - } - for i in 0 ..< operations.count { - let operation = operations[i] - let intRange = Int(operation.range.lowerBound) ... Int(operation.range.upperBound) - if operation.add { - switch operation.space { - case .everywhere: - everywhereVerificationSet.insert(integersIn: intRange) - mediaVerificationSet.insert(integersIn: intRange) - case .tag: - mediaVerificationSet.insert(integersIn: intRange) - } - addHole(operation.range, space: operation.space) - } else { - switch operation.space { - case .everywhere: - everywhereVerificationSet.remove(integersIn: intRange) - mediaVerificationSet.remove(integersIn: intRange) - case .tag: - mediaVerificationSet.remove(integersIn: intRange) - } - removeHole(operation.range, space: operation.space) - } - let everywhereTestRanges = everywhereVerificationSet.rangeView.map({ ClosedRange(Int32($0.lowerBound) ... Int32($0.upperBound - 1)) }) - let mediaTestRanges = mediaVerificationSet.rangeView.map({ ClosedRange(Int32($0.lowerBound) ... Int32($0.upperBound - 1)) }) - expectHoles(space: .everywhere, everywhereTestRanges) - expectHoles(space: .tag(.media), mediaTestRanges) - } - } - - func _testDirectAccessPerformance() { - self.beginTestDirectAccessPerformance(compactValuesOnCreation: false) - } - - func _testDirectAccessPerformanceCompact() { - self.beginTestDirectAccessPerformance(compactValuesOnCreation: true) - } - - func _testBlobExtractPerformance() { - let table = ValueBoxTable(id: 1000, keyType: .binary, compactValuesOnCreation: false) - - let valueBox = self.postbox!.valueBox - let memory = malloc(4000)! - let value = MemoryBuffer(memory: memory, capacity: 4000, length: 4000, freeWhenDone: true) - var keys: [ValueBoxKey] = [] - for _ in 0 ... 1000 { - let key = ValueBoxKey(length: 16) - arc4random_buf(key.memory, 16) - keys.append(key) - valueBox.set(table, key: key, value: value) - } - self.measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: false, for: { - self.startMeasuring() - for key in keys.shuffled() { - if let value = valueBox.get(table, key: key) { - var i = 0 - let length = value.length - if i < length { - var output: Int32 = 0 - value.read(&output, offset: i, length: 4) - i += 4 - } - } - } - self.stopMeasuring() - }) - } - - func _testIncrementalBlobExtractPerformance() { - let table = ValueBoxTable(id: 1000, keyType: .binary, compactValuesOnCreation: false) - - let valueBox = self.postbox!.valueBox - let memory = malloc(4000)! - let value = MemoryBuffer(memory: memory, capacity: 4000, length: 4000, freeWhenDone: true) - var keys: [ValueBoxKey] = [] - for _ in 0 ... 100000 { - let key = ValueBoxKey(length: 16) - arc4random_buf(key.memory, 16) - keys.append(key) - valueBox.set(table, key: key, value: value) - } - self.measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: false, for: { - self.startMeasuring() - for key in keys.shuffled() { - valueBox.read(table, key: key, { length, read in - var i = 0 - if i < length { - var output: Int32 = 0 - read(&output, i, 4) - i += 4 - } - }) - } - self.stopMeasuring() - }) - } - - func _testBlobUpdatePerformance() { - let table = ValueBoxTable(id: 1000, keyType: .binary, compactValuesOnCreation: false) - - let valueBox = self.postbox!.valueBox - let memory = malloc(250)! - let value = MemoryBuffer(memory: memory, capacity: 250, length: 250, freeWhenDone: true) - var keys: [ValueBoxKey] = [] - for _ in 0 ... 100000 { - let key = ValueBoxKey(length: 16) - arc4random_buf(key.memory, 16) - keys.append(key) - valueBox.set(table, key: key, value: value) - } - self.measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: false, for: { - let buffer = WriteBuffer() - self.startMeasuring() - for key in keys.shuffled() { - if let value = valueBox.get(table, key: key) { - var output: Int32 = 0 - value.read(&output, offset: 0, length: 4) - output += 1 - buffer.reset() - buffer.write(&output, offset: 0, length: 4) - valueBox.set(table, key: key, value: buffer) - } - } - self.stopMeasuring() - }) - } - - func _testBlobIncrementalUpdatePerformance() { - let table = ValueBoxTable(id: 1000, keyType: .binary, compactValuesOnCreation: false) - - let valueBox = self.postbox!.valueBox - let memory = malloc(250)! - let value = MemoryBuffer(memory: memory, capacity: 250, length: 250, freeWhenDone: true) - var keys: [ValueBoxKey] = [] - for _ in 0 ... 100000 { - let key = ValueBoxKey(length: 16) - arc4random_buf(key.memory, 16) - keys.append(key) - valueBox.set(table, key: key, value: value) - } - self.measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: false, for: { - self.startMeasuring() - for key in keys.shuffled() { - valueBox.readWrite(table, key: key, { size, read, write in - var output: Int32 = 0 - read(&output, 0, 4) - output += 1 - write(&output, 0, 4) - }) - } - self.stopMeasuring() - }) - } - - private func beginTestDirectAccessPerformance(compactValuesOnCreation: Bool) { - let table = ValueBoxTable(id: 1000, keyType: .binary, compactValuesOnCreation: compactValuesOnCreation) - - let valueBox = self.postbox!.valueBox - let memory = malloc(250)! - let value = MemoryBuffer(memory: memory, capacity: 250, length: 250, freeWhenDone: true) - var keys: [ValueBoxKey] = [] - for _ in 0 ... 100000 { - let key = ValueBoxKey(length: 16) - arc4random_buf(key.memory, 16) - keys.append(key) - valueBox.set(table, key: key, value: value) - } - - self.measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: false, for: { - self.startMeasuring() - for key in keys.shuffled() { - let _ = valueBox.get(table, key: key) - } - self.stopMeasuring() - }) - } - - func _testDirectWritePerformance() { - self.beginTestDirectWritePerformance(compactValuesOnCreation: false) - } - - func _testDirectWritePerformanceCompact() { - self.beginTestDirectWritePerformance(compactValuesOnCreation: true) - } - - private func beginTestDirectWritePerformance(compactValuesOnCreation: Bool) { - self.measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: false, for: { - let table = ValueBoxTable(id: 1000, keyType: .binary, compactValuesOnCreation: compactValuesOnCreation) - let valueBox = self.postbox!.valueBox - - self.startMeasuring() - - let memory = malloc(4)! - let value = MemoryBuffer(memory: memory, capacity: 4, length: 4, freeWhenDone: true) - var keys: [ValueBoxKey] = [] - for _ in 0 ... 40000 { - let key = ValueBoxKey(length: 16) - arc4random_buf(key.memory, 16) - keys.append(key) - valueBox.set(table, key: key, value: value) - } - for key in keys.shuffled() { - let _ = valueBox.get(table, key: key) - } - self.stopMeasuring() - - valueBox.removeAllFromTable(table) - }) - } - - func _testRangeAccessPerformance() { - self.beginTestRangeAccessPerformance(compactValuesOnCreation: false) - } - - func _testRangeAccessPerformanceCompact() { - self.beginTestRangeAccessPerformance(compactValuesOnCreation: true) - } - - func _testBinarySearchAccessPerformance() { - let table = ValueBoxTable(id: 1000, keyType: .binary, compactValuesOnCreation: true) - - let valueBox = self.postbox!.valueBox - let memory = malloc(250)! - let value = MemoryBuffer(memory: memory, capacity: 250, length: 250, freeWhenDone: true) - var keys: [ValueBoxKey] = [] - - var randomSpacedKeys: [Int32] = [] - for _ in 0 ... 1000000 { - randomSpacedKeys.append(Int32(arc4random_uniform(100_000_000))) - } - randomSpacedKeys.sort() - - for i in 0 ..< randomSpacedKeys.count { - let key = ValueBoxKey(length: 16) - key.setUInt32(0, value: 200) - key.setUInt32(4, value: 300) - key.setInt32(8, value: Int32(randomSpacedKeys[i])) - key.setInt32(12, value: Int32(i)) - keys.append(key) - valueBox.set(table, key: key, value: value) - } - - let lowerBound = ValueBoxKey(length: 8) - lowerBound.setUInt32(0, value: 200) - lowerBound.setUInt32(4, value: 300) - - let upperBound = ValueBoxKey(length: 16) - upperBound.setUInt32(0, value: 200) - upperBound.setUInt32(4, value: 301) - upperBound.setUInt32(8, value: UInt32.max) - upperBound.setUInt32(12, value: UInt32.max) - - self.measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: false, for: { - self.startMeasuring() - for i in 0 ... 1000 { - var startingLowerIndexValue: Int32? - valueBox.range(table, start: lowerBound, end: upperBound, keys: { key in - startingLowerIndexValue = key.getInt32(8) - return false - }, limit: 1) - - var startingUpperIndexValue: Int32? - valueBox.range(table, start: upperBound, end: lowerBound, keys: { key in - startingUpperIndexValue = key.getInt32(8) - return false - }, limit: 1) - - guard let startingLowerIndex = startingLowerIndexValue, let startingUpperIndex = startingUpperIndexValue else { - XCTAssert(false) - continue - } - - var lowerIndex: Int32 = startingLowerIndex - var upperIndex: Int32 = startingUpperIndex - var rangeToLower = false - - var readCount = 0 - - var found = false - while true { - readCount += 1 - let currentIndex = Int32((Int64(lowerIndex) + Int64(upperIndex)) / 2) - let key = ValueBoxKey(length: 12) - key.setUInt32(0, value: 200) - key.setUInt32(4, value: 300) - key.setInt32(8, value: currentIndex) - - var foundValue: (Int32, Int32)? - if !rangeToLower { - valueBox.range(table, start: key, end: upperBound, keys: { key in - foundValue = (key.getInt32(8), key.getInt32(12)) - return false - }, limit: 1) - } else { - valueBox.range(table, start: key, end: lowerBound, keys: { key in - foundValue = (key.getInt32(8), key.getInt32(12)) - return false - }, limit: 1) - } - - if let (foundKey, foundValue) = foundValue { - if foundValue == Int32(i) { - found = true - break - } else if lowerIndex > upperIndex { - break - } else { - if foundValue > Int(i) { - upperIndex = foundKey - 1 - rangeToLower = true - } else { - lowerIndex = foundKey + 1 - rangeToLower = false - } - } - } else { - break - } - } - if !found { - XCTAssert(false) - } - } - self.stopMeasuring() - }) - } - - func beginTestRangeAccessPerformance(compactValuesOnCreation: Bool) { - let table = ValueBoxTable(id: 1000, keyType: .binary, compactValuesOnCreation: compactValuesOnCreation) - - let valueBox = self.postbox!.valueBox - let memory = malloc(250)! - let value = MemoryBuffer(memory: memory, capacity: 250, length: 250, freeWhenDone: true) - var keys: [ValueBoxKey] = [] - for _ in 0 ... 100000 { - let key = ValueBoxKey(length: 16) - arc4random_buf(key.memory, 16) - keys.append(key) - valueBox.set(table, key: key, value: value) - } - let upperBound = ValueBoxKey(length: 16) - upperBound.setUInt32(0, value: UInt32.max) - upperBound.setUInt32(4, value: UInt32.max) - upperBound.setUInt32(8, value: UInt32.max) - upperBound.setUInt32(12, value: UInt32.max) - - self.measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: false, for: { - self.startMeasuring() - for key in keys.shuffled() { - valueBox.range(table, start: key.prefix(12), end: upperBound, keys: { _ in - return false - }, limit: 1) - let _ = valueBox.get(table, key: key) - } - self.stopMeasuring() - }) - } -} diff --git a/submodules/Postbox/PostboxTests/MessageHistoryTableTests.swift b/submodules/Postbox/PostboxTests/MessageHistoryTableTests.swift deleted file mode 100644 index 5506a6f84f..0000000000 --- a/submodules/Postbox/PostboxTests/MessageHistoryTableTests.swift +++ /dev/null @@ -1,1920 +0,0 @@ -import Foundation - -import UIKit -import XCTest - -import Postbox -@testable import Postbox - -import SwiftSignalKit - -private let peerId = PeerId(namespace: 1, id: 1) -private let otherPeerId = PeerId(namespace: 1, id: 2) -private let namespace: Int32 = 1 -private let authorPeerId = PeerId(namespace: 1, id: 6) -private let peer = TestPeer(id: 6, data: "abc") -private let tag1 = MessageTags(rawValue: 1 << 0) -private let tag2 = MessageTags(rawValue: 1 << 1) -private let summaryTag = MessageTags(rawValue: 1 << 2) - -private func ==(lhs: [Media], rhs: [Media]) -> Bool { - if lhs.count != rhs.count { - return false - } - - for i in 0 ..< lhs.count { - if !lhs[i].isEqual(to: rhs[i]) { - return false - } - } - return true -} - -private enum Entry: Equatable, CustomStringConvertible { - case MessageEntry(Int32, Int32, String, [Media], MessageFlags, MessageGroupInfo?) - case Hole(Int32, Int32, Int32) - - static func Message(_ id: Int32, _ timestamp: Int32, _ text: String, _ media: [Media], _ flags: MessageFlags, _ groupInfo: MessageGroupInfo? = nil) -> Entry { - return .MessageEntry(id, timestamp, text, media, flags, groupInfo) - } - - var description: String { - switch self { - case let .MessageEntry(id, timestamp, text, media, flags, groupInfo): - return "Message(\(id), \(timestamp), \(text), \(media), \(flags), \(String(describing: groupInfo))" - case let .Hole(min, max, timestamp): - return "Hole(\(min), \(max), \(timestamp))" - } - } -} - -private func ==(lhs: Entry, rhs: Entry) -> Bool { - switch lhs { - case let .MessageEntry(lhsId, lhsTimestamp, lhsText, lhsMedia, lhsFlags, lhsGroupInfo): - switch rhs { - case let .MessageEntry(rhsId, rhsTimestamp, rhsText, rhsMedia, rhsFlags, rhsGroupInfo): - return lhsId == rhsId && lhsTimestamp == rhsTimestamp && lhsText == rhsText && lhsMedia == rhsMedia && lhsFlags == rhsFlags && lhsGroupInfo == rhsGroupInfo - case .Hole: - return false - } - case let .Hole(lhsMin, lhsMax, lhsMaxTimestamp): - switch rhs { - case .MessageEntry: - return false - case let .Hole(rhsMin, rhsMax, rhsMaxTimestamp): - return lhsMin == rhsMin && lhsMax == rhsMax && lhsMaxTimestamp == rhsMaxTimestamp - } - } -} - -private class TestEmbeddedMedia: Media, CustomStringConvertible { - func isSemanticallyEqual(to other: Media) -> Bool { - return self.isEqual(to: other) - } - - var id: MediaId? { return nil } - var peerIds: [PeerId] = [] - let data: String - - init(data: String) { - self.data = data - } - - required init(decoder: PostboxDecoder) { - self.data = decoder.decodeStringForKey("s", orElse: "") - } - - func encode(_ encoder: PostboxEncoder) { - encoder.encodeString(self.data, forKey: "s") - } - - func isEqual(to other: Media) -> Bool { - if let other = other as? TestEmbeddedMedia { - return self.data == other.data - } - return false - } - - var description: String { - return "TestEmbeddedMedia(\(self.data))" - } -} - -private class TestExternalMedia: Media { - func isSemanticallyEqual(to other: Media) -> Bool { - return self.isEqual(to: other) - } - - let id: MediaId? - var peerIds: [PeerId] = [] - let data: String - - init(id: Int64, data: String) { - self.id = MediaId(namespace: namespace, id: id) - self.data = data - } - - required init(decoder: PostboxDecoder) { - self.id = MediaId(namespace: decoder.decodeInt32ForKey("i.n", orElse: 0), id: decoder.decodeInt64ForKey("i.i", orElse: 0)) - self.data = decoder.decodeStringForKey("s", orElse: "") - } - - func encode(_ encoder: PostboxEncoder) { - encoder.encodeInt32(self.id!.namespace, forKey: "i.n") - encoder.encodeInt64(self.id!.id, forKey: "i.i") - encoder.encodeString(self.data, forKey: "s") - } - - func isEqual(to other: Media) -> Bool { - if let other = other as? TestExternalMedia { - return self.id == other.id && self.data == other.data - } - return false - } - - var description: String { - return "TestExternalMedia(\(self.id!.id), \(self.data))" - } -} - -private class TestPeer: Peer { - let associatedPeerId: PeerId? = nil - - public let notificationSettingsPeerId: PeerId? = nil - - let associatedPeerIds: [PeerId]? = nil - - var indexName: PeerIndexNameRepresentation { - return .title(title: "Test", addressName: nil) - } - - let id: PeerId - let data: String - - init(id: Int32, data: String) { - self.id = PeerId(namespace: namespace, id: id) - self.data = data - } - - required init(decoder: PostboxDecoder) { - self.id = PeerId(namespace: decoder.decodeInt32ForKey("i.n", orElse: 0), id: decoder.decodeInt32ForKey("i.i", orElse: 0)) - self.data = decoder.decodeStringForKey("s", orElse: "") - } - - func encode(_ encoder: PostboxEncoder) { - encoder.encodeInt32(self.id.namespace, forKey: "i.n") - encoder.encodeInt32(self.id.id, forKey: "i.i") - encoder.encodeString(self.data, forKey: "s") - } - - func isEqual(_ other: Peer) -> Bool { - if let other = other as? TestPeer { - return self.id == other.id && self.data == other.data - } - return false - } - - var description: String { - return "TestPeer(\(self.id.id), \(self.data))" - } -} - -private enum MediaEntry: Equatable { - case Direct(Media, Int) - case MessageReference(Int32) - - init(_ entry: DebugMediaEntry) { - switch entry { - case let .Direct(media, referenceCount): - self = .Direct(media, referenceCount) - case let .MessageReference(index): - self = .MessageReference(index.id.id) - } - } -} - -private func ==(lhs: MediaEntry, rhs: MediaEntry) -> Bool { - switch lhs { - case let .Direct(lhsMedia, lhsReferenceCount): - switch rhs { - case let .Direct(rhsMedia, rhsReferenceCount): - return lhsMedia.isEqual(to: rhsMedia) && lhsReferenceCount == rhsReferenceCount - case .MessageReference: - return false - } - case let .MessageReference(lhsId): - switch rhs { - case .Direct: - return false - case let .MessageReference(rhsId): - return lhsId == rhsId - } - } -} - -private extension MessageTags { - static let First = MessageTags(rawValue: 1 << 0) - static let Second = MessageTags(rawValue: 1 << 1) - static let Summary = MessageTags(rawValue: 1 << 2) -} - -private final class PendingMessageAction1: PendingMessageActionData { - init() { - } - - init(decoder: PostboxDecoder) { - } - - func encode(_ encoder: PostboxEncoder) { - } - - func isEqual(to: PendingMessageActionData) -> Bool { - if let _ = to as? PendingMessageAction1 { - return true - } else { - return false - } - } -} - -private final class PendingMessageAction2: PendingMessageActionData { - init() { - } - - init(decoder: PostboxDecoder) { - } - - func encode(_ encoder: PostboxEncoder) { - } - - func isEqual(to: PendingMessageActionData) -> Bool { - if let _ = to as? PendingMessageAction2 { - return true - } else { - return false - } - } -} - -private let pendingAction1 = PendingMessageActionType(rawValue: 0) -private let pendingAction2 = PendingMessageActionType(rawValue: 1) - -class MessageHistoryTableTests: XCTestCase { - var valueBox: ValueBox? - var path: String? - - var peerTable: PeerTable? - var globalMessageIdsTable: GlobalMessageIdsTable? - var indexTable: MessageHistoryIndexTable? - var mediaTable: MessageMediaTable? - var historyTable: MessageHistoryTable? - var historyMetadataTable: MessageHistoryMetadataTable? - var unsentTable: MessageHistoryUnsentTable? - var tagsTable: MessageHistoryTagsTable? - var readStateTable: MessageHistoryReadStateTable? - var synchronizeReadStateTable: MessageHistorySynchronizeReadStateTable? - var globallyUniqueMessageIdsTable: MessageGloballyUniqueIdTable? - var globalTagsTable: GlobalMessageHistoryTagsTable? - var localTagsTable: LocalMessageHistoryTagsTable? - var reverseAssociatedTable: ReverseAssociatedPeerTable? - var textIndexTable: MessageHistoryTextIndexTable? - var messageHistoryTagsSummaryTable: MessageHistoryTagsSummaryTable? - var invalidatedMessageHistoryTagsSummaryTable: InvalidatedMessageHistoryTagsSummaryTable? - var pendingMessageActionsTable: PendingMessageActionsTable? - var pendingMessageActionsMetadataTable: PendingMessageActionsMetadataTable? - var groupFeedIndexTable: GroupFeedIndexTable? - - override class func setUp() { - super.setUp() - - declareEncodable(TestEmbeddedMedia.self, f: { TestEmbeddedMedia(decoder: $0) }) - declareEncodable(TestExternalMedia.self, f: { TestExternalMedia(decoder: $0) }) - declareEncodable(TestPeer.self, f: { TestPeer(decoder: $0) }) - declareEncodable(PendingMessageAction1.self, f: PendingMessageAction1.init) - declareEncodable(PendingMessageAction2.self, f: PendingMessageAction2.init) - } - - override func setUp() { - super.setUp() - - var randomId: Int64 = 0 - arc4random_buf(&randomId, 8) - path = NSTemporaryDirectory() + "\(randomId)" - self.valueBox = SqliteValueBox(basePath: path!, queue: Queue.mainQueue()) - - let seedConfiguration = SeedConfiguration(initializeChatListWithHole: (topLevel: nil, groups: nil), initializeMessageNamespacesWithHoles: [], existingMessageTags: [.First, .Second, .Summary], messageTagsWithSummary: [.Summary], existingGlobalMessageTags: [], peerNamespacesRequiringMessageTextIndex: [], additionalChatListIndexNamespace: nil, chatMessagesNamespaces: Set()) - - self.globalMessageIdsTable = GlobalMessageIdsTable(valueBox: self.valueBox!, table: GlobalMessageIdsTable.tableSpec(5), namespace: namespace) - self.historyMetadataTable = MessageHistoryMetadataTable(valueBox: self.valueBox!, table: MessageHistoryMetadataTable.tableSpec(7)) - self.unsentTable = MessageHistoryUnsentTable(valueBox: self.valueBox!, table: MessageHistoryUnsentTable.tableSpec(8)) - self.invalidatedMessageHistoryTagsSummaryTable = InvalidatedMessageHistoryTagsSummaryTable(valueBox: self.valueBox!, table: MessageHistoryTagsSummaryTable.tableSpec(19)) - self.messageHistoryTagsSummaryTable = MessageHistoryTagsSummaryTable(valueBox: self.valueBox!, table: MessageHistoryTagsSummaryTable.tableSpec(16), invalidateTable: self.invalidatedMessageHistoryTagsSummaryTable!) - self.pendingMessageActionsMetadataTable = PendingMessageActionsMetadataTable(valueBox: self.valueBox!, table: PendingMessageActionsMetadataTable.tableSpec(17)) - self.pendingMessageActionsTable = PendingMessageActionsTable(valueBox: self.valueBox!, table: PendingMessageActionsTable.tableSpec(18), metadataTable: self.pendingMessageActionsMetadataTable!) - self.tagsTable = MessageHistoryTagsTable(valueBox: self.valueBox!, table: MessageHistoryTagsTable.tableSpec(9), seedConfiguration: seedConfiguration, summaryTable: self.messageHistoryTagsSummaryTable!) - self.indexTable = MessageHistoryIndexTable(valueBox: self.valueBox!, table: MessageHistoryIndexTable.tableSpec(1), globalMessageIdsTable: self.globalMessageIdsTable!, metadataTable: self.historyMetadataTable!, seedConfiguration: seedConfiguration) - self.mediaTable = MessageMediaTable(valueBox: self.valueBox!, table: MessageMediaTable.tableSpec(2)) - self.readStateTable = MessageHistoryReadStateTable(valueBox: self.valueBox!, table: MessageHistoryReadStateTable.tableSpec(10)) - self.synchronizeReadStateTable = MessageHistorySynchronizeReadStateTable(valueBox: self.valueBox!, table: MessageHistorySynchronizeReadStateTable.tableSpec(11)) - self.globallyUniqueMessageIdsTable = MessageGloballyUniqueIdTable(valueBox: self.valueBox!, table: MessageGloballyUniqueIdTable.tableSpec(12)) - self.globalTagsTable = GlobalMessageHistoryTagsTable(valueBox: self.valueBox!, table: GlobalMessageHistoryTagsTable.tableSpec(13)) - self.localTagsTable = LocalMessageHistoryTagsTable(valueBox: self.valueBox!, table: GlobalMessageHistoryTagsTable.tableSpec(22)) - self.textIndexTable = MessageHistoryTextIndexTable(valueBox: self.valueBox!, table: MessageHistoryTextIndexTable.tableSpec(15)) - self.groupFeedIndexTable = GroupFeedIndexTable(valueBox: self.valueBox!, table: GroupFeedIndexTable.tableSpec(21), metadataTable: self.historyMetadataTable!) - self.historyTable = MessageHistoryTable(valueBox: self.valueBox!, table: MessageHistoryTable.tableSpec(4), messageHistoryIndexTable: self.indexTable!, messageMediaTable: self.mediaTable!, historyMetadataTable: self.historyMetadataTable!, globallyUniqueMessageIdsTable: self.globallyUniqueMessageIdsTable!, unsentTable: self.unsentTable!, tagsTable: self.tagsTable!, globalTagsTable: self.globalTagsTable!, localTagsTable: self.localTagsTable!, readStateTable: self.readStateTable!, synchronizeReadStateTable: self.synchronizeReadStateTable!, textIndexTable: self.textIndexTable!, summaryTable: self.messageHistoryTagsSummaryTable!, pendingActionsTable: self.pendingMessageActionsTable!, groupAssociationTable: self.groupAssociationTable!, groupFeedIndexTable: self.groupFeedIndexTable!) - self.reverseAssociatedTable = ReverseAssociatedPeerTable(valueBox: self.valueBox!, table: ReverseAssociatedPeerTable.tableSpec(14)) - self.peerTable = PeerTable(valueBox: self.valueBox!, table: PeerTable.tableSpec(6), reverseAssociatedTable: self.reverseAssociatedTable!) - self.peerTable!.set(peer) - } - - override func tearDown() { - super.tearDown() - - self.historyTable = nil - self.indexTable = nil - self.mediaTable = nil - self.peerTable = nil - self.historyMetadataTable = nil - - self.valueBox = nil - let _ = try? FileManager.default.removeItem(atPath: path!) - self.path = nil - } - - private func addMessage(_ id: Int32, _ timestamp: Int32, _ text: String = "", _ media: [Media] = [], _ flags: StoreMessageFlags = [], _ tags: MessageTags = [], location: AddMessagesLocation = .Random, groupingKey: Int64? = nil) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - var groupFeedOperations: [PeerGroupId: [GroupFeedIndexOperation]] = [:] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - var updatedMedia: [MediaId : Media?] = [:] - - let _ = self.historyTable!.addMessages(messages: [StoreMessage(id: MessageId(peerId: peerId, namespace: namespace, id: id), globallyUniqueId: nil, groupingKey: groupingKey, timestamp: timestamp, flags: flags, tags: tags, globalTags: [], localTags: [], forwardInfo: StoreMessageForwardInfo(authorId: peerId, sourceId: peerId, sourceMessageId: MessageId(peerId: peerId, namespace: 0, id: 10), date: 10, authorSignature: "abc", isHidden: false), authorId: authorPeerId, text: text, attributes: [], media: media)], location: location, operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, groupFeedOperations: &groupFeedOperations, localTagsOperations: &localTagsOperations, processMessages: nil) - } - - private func updateMessage(_ previousId: Int32, _ id: Int32, _ timestamp: Int32, _ text: String = "", _ media: [Media] = [], _ flags: StoreMessageFlags, _ tags: MessageTags, _ groupingKey: Int64?) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - var groupFeedOperations: [PeerGroupId: [GroupFeedIndexOperation]] = [:] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - var updatedMedia: [MediaId : Media?] = [:] - - self.historyTable!.updateMessage(MessageId(peerId: peerId, namespace: namespace, id: previousId), message: StoreMessage(id: MessageId(peerId: peerId, namespace: namespace, id: id), globallyUniqueId: nil, groupingKey: groupingKey, timestamp: timestamp, flags: flags, tags: tags, globalTags: [], localTags: [], forwardInfo: nil, authorId: authorPeerId, text: text, attributes: [], media: media), operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, groupFeedOperations: &groupFeedOperations, localTagsOperations: &localTagsOperations) - } - - private func updateMessageTimestamp(_ previousId: Int32, _ timestamp: Int32) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - var groupFeedOperations: [PeerGroupId: [GroupFeedIndexOperation]] = [:] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - var updatedMedia: [MediaId : Media?] = [:] - - self.historyTable!.updateMessageTimestamp(MessageId(peerId: peerId, namespace: namespace, id: previousId), timestamp: timestamp, operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, groupFeedOperations: &groupFeedOperations, localTagsOperations: &localTagsOperations) - } - - private func addHole(_ id: Int32) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - var groupFeedOperations: [PeerGroupId: [GroupFeedIndexOperation]] = [:] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - var updatedMedia: [MediaId : Media?] = [:] - - self.historyTable!.addHoles([MessageId(peerId: peerId, namespace: namespace, id: id)], operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, groupFeedOperations: &groupFeedOperations, localTagsOperations: &localTagsOperations) - } - - private func removeMessages(_ ids: [Int32]) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - var groupFeedOperations: [PeerGroupId: [GroupFeedIndexOperation]] = [:] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - var updatedMedia: [MediaId : Media?] = [:] - - self.historyTable!.removeMessages(ids.map({ MessageId(peerId: peerId, namespace: namespace, id: $0) }), operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, groupFeedOperations: &groupFeedOperations, localTagsOperations: &localTagsOperations) - } - - private func removeMessagesInRange(minId: Int32, maxId: Int32) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - var groupFeedOperations: [PeerGroupId: [GroupFeedIndexOperation]] = [:] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - var updatedMedia: [MediaId : Media?] = [:] - - self.historyTable!.removeMessagesInRange(peerId: peerId, namespace: namespace, minId: minId, maxId: maxId, operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, groupFeedOperations: &groupFeedOperations, localTagsOperations: &localTagsOperations) - } - - private func fillHole(_ id: Int32, _ fillType: HoleFill, _ messages: [(Int32, Int32, String, [Media], Int64?)], _ tagMask: MessageTags? = nil) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - var groupFeedOperations: [PeerGroupId: [GroupFeedIndexOperation]] = [:] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - var updatedMedia: [MediaId : Media?] = [:] - - self.historyTable!.fillHole(MessageId(peerId: peerId, namespace: namespace, id: id), fillType: fillType, tagMask: tagMask, messages: messages.map({ StoreMessage(id: MessageId(peerId: peerId, namespace: namespace, id: $0.0), globallyUniqueId: nil, groupingKey: $0.4, timestamp: $0.1, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, authorId: authorPeerId, text: $0.2, attributes: [], media: $0.3) }), operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, groupFeedOperations: &groupFeedOperations, localTagsOperations: &localTagsOperations) - } - - private func fillMultipleHoles(_ id: Int32, _ fillType: HoleFill, _ messages: [(Int32, Int32, String, [Media], Int64?)], _ tagMask: MessageTags? = nil, _ tags: MessageTags = []) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - var groupFeedOperations: [PeerGroupId: [GroupFeedIndexOperation]] = [:] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - var updatedMedia: [MediaId : Media?] = [:] - - self.historyTable!.fillMultipleHoles(mainHoleId: MessageId(peerId: peerId, namespace: namespace, id: id), fillType: fillType, tagMask: tagMask, messages: messages.map({ StoreMessage(id: MessageId(peerId: peerId, namespace: namespace, id: $0.0), globallyUniqueId: nil, groupingKey: $0.4, timestamp: $0.1, flags: [], tags: tags, globalTags: [], localTags: [], forwardInfo: nil, authorId: authorPeerId, text: $0.2, attributes: [], media: $0.3) }), operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, groupFeedOperations: &groupFeedOperations, localTagsOperations: &localTagsOperations) - } - - private func replaceSummary(_ count: Int32, _ maxId: MessageId.Id) { - - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - self.messageHistoryTagsSummaryTable!.replace(key: MessageHistoryTagsSummaryKey(tag: .Summary, peerId: peerId, namespace: namespace), count: count, maxId: maxId, updatedSummaries: &updatedMessageTagSummaries) - } - - private func getExistingMessageGroupInfo(_ id: Int32) -> MessageGroupInfo { - if let entry = self.indexTable!.getMaybeUninitialized(MessageId(peerId: peerId, namespace: namespace, id: id)) { - if let message = self.historyTable?.getMessage(entry.index) { - return message.groupInfo! - } - } - preconditionFailure() - } - - private func expectEntries(_ entries: [Entry], tagMask: MessageTags? = nil) { - var stableIds = Set() - - let list: [RenderedMessageHistoryEntry] - if let tagMask = tagMask { - list = self.historyTable!.debugList(tagMask, peerId: peerId, peerTable: self.peerTable!) - } else { - list = self.historyTable!.debugList(peerId, peerTable: self.peerTable!) - } - - let actualEntries = list.map({ entry -> Entry in - let stableId: UInt32 - switch entry { - case let .RenderedMessage(message): - stableId = message.stableId - if let messagePeer = message.author { - if !peer.isEqual(messagePeer) { - XCTFail("Expected peer \(peer), actual: \(messagePeer)") - } - } else { - XCTFail("Expected peer \(peer), actual: nil") - } - if stableIds.contains(stableId) { - XCTFail("Stable id not unique \(stableId)") - } else { - stableIds.insert(stableId) - } - return .Message(message.id.id, message.timestamp, message.text, message.media, message.flags, message.groupInfo) - case let .Hole(hole): - stableId = hole.stableId - if stableIds.contains(stableId) { - XCTFail("Stable id not unique \(stableId)") - } else { - stableIds.insert(stableId) - } - return .Hole(hole.min, hole.maxIndex.id.id, hole.maxIndex.timestamp) - } - }) - if actualEntries != entries { - XCTFail("Expected\n\(entries)\nActual\n\(actualEntries)") - } - } - - private func expectUnsent(_ indices: [Int32]) { - let actualUnsent = self.unsentTable!.get().map({ $0.id }) - var match = true - if actualUnsent.count == indices.count { - for i in 0 ..< indices.count { - if indices[i] != actualUnsent[i] { - match = false - break - } - } - } else { - match = false - } - if !match { - XCTFail("Expected\n\(indices)\nActual\n\(actualUnsent)") - } - } - - private func expectMedia(_ media: [MediaEntry]) { - let actualMedia = self.mediaTable!.debugList().map({MediaEntry($0)}) - if media != actualMedia { - XCTFail("Expected\n\(media)\nActual\n\(actualMedia)") - } - } - - private func expectSummary(_ summary: MessageHistoryTagNamespaceSummary?) { - let actualSummary = self.messageHistoryTagsSummaryTable!.get(MessageHistoryTagsSummaryKey(tag: .Summary, peerId: peerId, namespace: namespace)) - if actualSummary != summary { - XCTFail("Expected\n\(String(describing: summary))\nActual\n\(String(describing: actualSummary))\n") - } - } - - private func setMessageAction(_ id: Int32, _ type: PendingMessageActionType, _ data: PendingMessageActionData?) { - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - self.historyTable!.setPendingMessageAction(id: MessageId(peerId: peerId, namespace: namespace, id: id), type: type, action: data, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries) - } - - private func expectMessageAction(_ id: Int32, _ type: PendingMessageActionType, _ data: PendingMessageActionData?) { - let current = self.pendingMessageActionsTable!.getAction(id: MessageId(peerId: peerId, namespace: namespace, id: id), type: type) - var changed = false - if let current = current, let data = data { - if !current.isEqual(to: data) { - changed = true - } - } else if (current != nil) != (data != nil) { - changed = true - } - if changed { - XCTFail("Expected\n\(String(describing: data))\nActual\n\(String(describing: current))\n") - } - } - - private func expectPeerNamespaceMessageActionCount(_ count: Int32) { - let current = self.pendingMessageActionsMetadataTable!.getCount(.peerNamespace(peerId, namespace)) - if count != current { - XCTFail("Expected\n\(count)\nActual\n\(current)\n") - } - } - - private func expectPeerNamespaceActionMessageActionCount(_ count: Int32, _ type: PendingMessageActionType) { - let current = self.pendingMessageActionsMetadataTable!.getCount(.peerNamespaceAction(peerId, namespace, type)) - if count != current { - XCTFail("Expected\n\(count)\nActual\n\(current)\n") - } - } - - private func expectPeerMessageActions(_ type: PendingMessageActionType, _ actions: [(Int32, PendingMessageActionData)]) { - let current = self.pendingMessageActionsTable!.getActions(type: type).map { - ($0.id.id, $0.action) - } - var changed = false - if current.count != actions.count { - changed = true - } else { - for i in 0 ..< current.count { - if current[i].0 != actions[i].0 { - changed = true - break - } else if !current[i].1.isEqual(to: actions[i].1) { - changed = true - break - } - } - } - if changed { - XCTFail("Expected\n\(actions)\nActual\n\(current)\n") - } - } - - func testInsertMessageIntoEmpty() { - addMessage(100, 100, "t100") - addMessage(200, 200, "t200") - - expectEntries([.Message(100, 100, "t100", [], []), .Message(200, 200, "t200", [], [])]) - } - - func testInsertMessageIgnoreOverwrite() { - addMessage(100, 100, "t100") - addMessage(100, 200, "t200") - - expectEntries([.Message(100, 100, "t100", [], [])]) - } - - func testInsertMessageWithEmbeddedMedia() { - addMessage(100, 100, "t100", [TestEmbeddedMedia(data: "abc1")]) - - expectEntries([.Message(100, 100, "t100", [TestEmbeddedMedia(data: "abc1")], [])]) - expectMedia([]) - } - - func testInsertMessageWithExternalMedia() { - let media = TestExternalMedia(id: 10, data: "abc1") - addMessage(100, 100, "t100", [media]) - - expectEntries([.Message(100, 100, "t100", [media], [])]) - expectMedia([.MessageReference(100)]) - } - - func testUnembedExternalMedia() { - let media = TestExternalMedia(id: 10, data: "abc1") - addMessage(100, 100, "t100", [media]) - addMessage(200, 200, "t200", [media]) - - expectEntries([.Message(100, 100, "t100", [media], []), .Message(200, 200, "t200", [media], [])]) - expectMedia([.Direct(media, 2)]) - } - - func testIgnoreOverrideExternalMedia() { - let media = TestExternalMedia(id: 10, data: "abc1") - let media1 = TestExternalMedia(id: 10, data: "abc2") - addMessage(100, 100, "t100", [media]) - addMessage(200, 200, "t200", [media1]) - - expectEntries([.Message(100, 100, "t100", [media], []), .Message(200, 200, "t200", [media], [])]) - expectMedia([.Direct(media, 2)]) - } - - func testRemoveSingleMessage() { - addMessage(100, 100, "t100", []) - - removeMessages([100]) - - expectEntries([]) - expectMedia([]) - } - - func testRemoveMessageWithEmbeddedMedia() { - let media = TestEmbeddedMedia(data: "abc1") - addMessage(100, 100, "t100", [media]) - self.removeMessages([100]) - - expectEntries([]) - expectMedia([]) - } - - func testRemoveOnlyReferenceToExternalMedia() { - let media = TestExternalMedia(id: 10, data: "abc1") - addMessage(100, 100, "t100", [media]) - removeMessages([100]) - - expectEntries([]) - expectMedia([]) - } - - func testRemoveReferenceToExternalMedia() { - let media = TestExternalMedia(id: 10, data: "abc1") - addMessage(100, 100, "t100", [media]) - addMessage(200, 200, "t200", [media]) - removeMessages([100]) - - expectEntries([.Message(200, 200, "t200", [media], [])]) - expectMedia([.Direct(media, 1)]) - - removeMessages([200]) - - expectEntries([]) - expectMedia([]) - } - - func testAddHoleToEmpty() { - addHole(100) - expectEntries([.Hole(1, Int32.max, Int32.max)]) - } - - func testAddHoleToFullHole() { - addHole(100) - expectEntries([.Hole(1, Int32.max, Int32.max)]) - addHole(110) - expectEntries([.Hole(1, Int32.max, Int32.max)]) - } - - func testAddMessageToFullHole() { - addHole(100) - expectEntries([.Hole(1, Int32.max, Int32.max)]) - addMessage(90, 90, "m90") - expectEntries([.Hole(1, 89, 90), .Message(90, 90, "m90", [], []), .Hole(91, Int32.max, Int32.max)]) - } - - func testAddMessageDividingUpperHole() { - addHole(100) - expectEntries([.Hole(1, Int32.max, Int32.max)]) - addMessage(90, 90, "m90") - expectEntries([.Hole(1, 89, 90), .Message(90, 90, "m90", [], []), .Hole(91, Int32.max, Int32.max)]) - addMessage(100, 100, "m100") - expectEntries([.Hole(1, 89, 90), .Message(90, 90, "m90", [], []), .Hole(91, 99, 100), .Message(100, 100, "m100", [], []), .Hole(101, Int32.max, Int32.max)]) - } - - func testAddMessageDividingLowerHole() { - addHole(100) - expectEntries([.Hole(1, Int32.max, Int32.max)]) - addMessage(90, 90, "m90") - expectEntries([.Hole(1, 89, 90), .Message(90, 90, "m90", [], []), .Hole(91, Int32.max, Int32.max)]) - addMessage(80, 80, "m80") - expectEntries([.Hole(1, 79, 80), .Message(80, 80, "m80", [], []), .Hole(81, 89, 90), .Message(90, 90, "m90", [], []), .Hole(91, Int32.max, Int32.max)]) - } - - func testAddMessageOffsettingUpperHole() { - addHole(100) - expectEntries([.Hole(1, Int32.max, Int32.max)]) - - addMessage(90, 90, "m90") - expectEntries([.Hole(1, 89, 90), .Message(90, 90, "m90", [], []), .Hole(91, Int32.max, Int32.max)]) - addMessage(91, 91, "m91") - expectEntries([.Hole(1, 89, 90), .Message(90, 90, "m90", [], []), .Message(91, 91, "m91", [], []), .Hole(92, Int32.max, Int32.max)]) - } - - func testAddMessageOffsettingLowerHole() { - addHole(100) - expectEntries([.Hole(1, Int32.max, Int32.max)]) - - addMessage(90, 90, "m90") - expectEntries([.Hole(1, 89, 90), .Message(90, 90, "m90", [], []), .Hole(91, Int32.max, Int32.max)]) - addMessage(89, 89, "m89") - expectEntries([.Hole(1, 88, 89), .Message(89, 89, "m89", [], []), .Message(90, 90, "m90", [], []), .Hole(91, Int32.max, Int32.max)]) - } - - func testAddMessageOffsettingLeftmostHole() { - addHole(100) - expectEntries([.Hole(1, Int32.max, Int32.max)]) - - addMessage(1, 1, "m1") - - expectEntries([.Message(1, 1, "m1", [], []), .Hole(2, Int32.max, Int32.max)]) - } - - func testAddMessageRemovingLefmostHole() { - addHole(100) - expectEntries([.Hole(1, Int32.max, Int32.max)]) - - addMessage(2, 2, "m2") - expectEntries([.Hole(1, 1, 2), .Message(2, 2, "m2", [], []), .Hole(3, Int32.max, Int32.max)]) - - addMessage(1, 1, "m1") - expectEntries([.Message(1, 1, "m1", [], []), .Message(2, 2, "m2", [], []), .Hole(3, Int32.max, Int32.max)]) - } - - func testAddHoleLowerThanMessage() { - addMessage(100, 100, "m100") - addHole(1) - - expectEntries([.Hole(1, 99, 100), .Message(100, 100, "m100", [], [])]) - } - - func testAddHoleHigherThanMessage() { - addMessage(100, 100, "m100") - addHole(200) - - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, Int32.max, Int32.max)]) - } - - func testIgnoreHigherHole() { - addHole(200) - expectEntries([.Hole(1, Int32.max, Int32.max)]) - addHole(400) - expectEntries([.Hole(1, Int32.max, Int32.max)]) - } - - func testIgnoreHigherHoleAfterMessage() { - addMessage(100, 100, "m100") - addHole(200) - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, Int32.max, Int32.max)]) - addHole(400) - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, Int32.max, Int32.max)]) - } - - func testAddHoleBetweenMessages() { - addMessage(100, 100, "m100") - addMessage(200, 200, "m200") - addHole(150) - - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, 199, 200), .Message(200, 200, "m200", [], [])]) - } - - func testFillHoleEmpty() { - fillHole(1, HoleFill(complete: true, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), []) - expectEntries([]) - } - - func testFillHoleComplete() { - addHole(100) - - fillHole(1, HoleFill(complete: true, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), [(100, 100, "m100", [], nil), (200, 200, "m200", [], nil)]) - expectEntries([.Message(100, 100, "m100", [], []), .Message(200, 200, "m200", [], [])]) - } - - func testFillHoleUpperToLowerPartial() { - addHole(100) - - fillHole(1, HoleFill(complete: false, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), [(100, 100, "m100", [], nil), (200, 200, "m200", [], nil)]) - expectEntries([.Hole(1, 99, 100), .Message(100, 100, "m100", [], []), .Message(200, 200, "m200", [], [])]) - } - - func testFillHoleUpperToLowerToBounds() { - addHole(100) - - fillHole(1, HoleFill(complete: false, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), [(1, 1, "m1", [], nil), (200, 200, "m200", [], nil)]) - expectEntries([.Message(1, 1, "m1", [], []), .Message(200, 200, "m200", [], [])]) - } - - func testFillHoleLowerToUpperToBounds() { - addHole(100) - - fillHole(1, HoleFill(complete: false, direction: .LowerToUpper(updatedMaxIndex: nil, clippingMinIndex: nil)), [(100, 100, "m100", [], nil), (Int32.max, 200, "m200", [], nil)]) - expectEntries([.Message(100, 100, "m100", [], []), .Message(Int32.max, 200, "m200", [], [])]) - } - - func testFillHoleLowerToUpperPartial() { - addHole(100) - - fillHole(1, HoleFill(complete: false, direction: .LowerToUpper(updatedMaxIndex: nil, clippingMinIndex: nil)), [(100, 100, "m100", [], nil), (200, 200, "m200", [], nil)]) - expectEntries([.Message(100, 100, "m100", [], []), .Message(200, 200, "m200", [], []), .Hole(201, Int32.max, Int32.max)]) - } - - func testFillHoleBetweenMessagesUpperToLower() { - addHole(1) - - addMessage(100, 100, "m100") - addMessage(200, 200, "m200") - - fillHole(199, HoleFill(complete: false, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), [(150, 150, "m150", [], nil)]) - - expectEntries([.Hole(1, 99, 100), .Message(100, 100, "m100", [], []), .Hole(101, 149, 150), .Message(150, 150, "m150", [], []), .Message(200, 200, "m200", [], []), .Hole(201, Int32.max, Int32.max)]) - } - - func testFillHoleBetweenMessagesLowerToUpper() { - addHole(1) - - addMessage(100, 100, "m100") - addMessage(200, 200, "m200") - - fillHole(199, HoleFill(complete: false, direction: .LowerToUpper(updatedMaxIndex: nil, clippingMinIndex: nil)), [(150, 150, "m150", [], nil)]) - - expectEntries([.Hole(1, 99, 100), .Message(100, 100, "m100", [], []), .Message(150, 150, "m150", [], []), .Hole(151, 199, 200), .Message(200, 200, "m200", [], []), .Hole(201, Int32.max, Int32.max)]) - } - - func testFillHoleBetweenMessagesComplete() { - addHole(1) - - addMessage(100, 100, "m100") - addMessage(200, 200, "m200") - - fillHole(199, HoleFill(complete: true, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), [(150, 150, "m150", [], nil)]) - - expectEntries([.Hole(1, 99, 100), .Message(100, 100, "m100", [], []), .Message(150, 150, "m150", [], []), .Message(200, 200, "m200", [], []), .Hole(201, Int32.max, Int32.max)]) - } - - func testFillHoleBetweenMessagesWithMessage() { - addMessage(200, 200, "m200") - addMessage(202, 202, "m202") - addHole(201) - addMessage(201, 201, "m201") - - expectEntries([.Message(200, 200, "m200", [], []), .Message(201, 201, "m201", [], []), .Message(202, 202, "m202", [], [])]) - } - - func testFillHoleWithNoMessagesComplete() { - addMessage(100, 100, "m100") - addHole(1) - - fillHole(99, HoleFill(complete: true, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), []) - - expectEntries([.Message(100, 100, "m100", [], [])]) - } - - func testFillHoleIgnoreOverMessage() { - addMessage(100, 100, "m100") - addMessage(101, 101, "m101") - - fillHole(100, HoleFill(complete: true, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), [(90, 90, "m90", [], nil)]) - - expectEntries([.Message(90, 90, "m90", [], []), .Message(100, 100, "m100", [], []), .Message(101, 101, "m101", [], [])]) - } - - func testFillHoleWithOverflow() { - addMessage(100, 100, "m100") - addMessage(200, 200, "m200") - addHole(150) - - fillHole(199, HoleFill(complete: false, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), [(150, 150, "m150", [], nil), (300, 300, "m300", [], nil)]) - - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, 149, 150), .Message(150, 150, "m150", [], []), .Message(200, 200, "m200", [], []), .Message(300, 300, "m300", [], [])]) - } - - func testIgnoreHoleOverMessageBetweenMessages() { - addMessage(199, 199, "m199") - addMessage(200, 200, "m200") - addHole(200) - - expectEntries([.Message(199, 199, "m199", [], []), .Message(200, 200, "m200", [], [])]) - } - - func testMergeHoleAfterDeletingMessage() { - addMessage(100, 100, "m100") - addHole(1) - addHole(200) - - expectEntries([.Hole(1, 99, 100), .Message(100, 100, "m100", [], []), .Hole(101, Int32.max, Int32.max)]) - - removeMessages([100]) - - expectEntries([.Hole(1, Int32.max, Int32.max)]) - } - - func testMergeHoleLowerAfterDeletingMessage() { - addMessage(100, 100, "m100") - addHole(1) - addMessage(200, 200, "m200") - - removeMessages([100]) - - expectEntries([.Hole(1, 199, 200), .Message(200, 200, "m200", [], [])]) - } - - func testMergeHoleUpperAfterDeletingMessage() { - addMessage(100, 100, "m100") - addMessage(200, 200, "m200") - addHole(300) - - removeMessages([200]) - - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, Int32.max, Int32.max)]) - } - - func testExtendLowerHoleAfterDeletingMessage() { - addMessage(100, 100, "m100") - addHole(100) - - removeMessages([100]) - - expectEntries([.Hole(1, Int32.max, Int32.max)]) - } - - func testExtendUpperHoleAfterDeletingMessage() { - addMessage(100, 100, "m100") - addHole(101) - - removeMessages([100]) - - expectEntries([.Hole(1, Int32.max, Int32.max)]) - } - - func testDeleteMessageBelowMessage() { - addMessage(100, 100, "m100") - addMessage(200, 200, "m200") - removeMessages([100]) - - expectEntries([.Message(200, 200, "m200", [], [])]) - } - - func testDeleteMessageAboveMessage() { - addMessage(100, 100, "m100") - addMessage(200, 200, "m200") - removeMessages([200]) - - expectEntries([.Message(100, 100, "m100", [], [])]) - } - - func testDeleteMessageBetweenMessages() { - addMessage(100, 100, "m100") - addMessage(200, 200, "m200") - addMessage(300, 300, "m300") - removeMessages([200]) - - expectEntries([.Message(100, 100, "m100", [], []), .Message(300, 300, "m300", [], [])]) - } - - func testAddUnsent() { - addMessage(100, 100, "m100", [], [.Unsent]) - expectEntries([.Message(100, 100, "m100", [], [.Unsent])]) - expectUnsent([100]) - } - - func testRemoveUnsent() { - addMessage(100, 100, "m100", [], [.Unsent]) - expectEntries([.Message(100, 100, "m100", [], [.Unsent])]) - expectUnsent([100]) - - removeMessages([100]) - expectEntries([]) - expectUnsent([]) - } - - func testUpdateUnsentToSentSameIndex() { - addMessage(100, 100, "m100", [], [.Unsent]) - expectEntries([.Message(100, 100, "m100", [], [.Unsent])]) - expectUnsent([100]) - - updateMessage(100, 100, 100, "m100", [], [], [], nil) - expectEntries([.Message(100, 100, "m100", [], [])]) - expectUnsent([]) - } - - func testUpdateUnsentToFailed() { - addMessage(100, 100, "m100", [], [.Unsent]) - expectEntries([.Message(100, 100, "m100", [], [.Unsent])]) - expectUnsent([100]) - - updateMessage(100, 100, 100, "m100", [], [.Unsent, .Failed], [], nil) - expectEntries([.Message(100, 100, "m100", [], [.Unsent, .Failed])]) - expectUnsent([]) - } - - func testUpdateDifferentIndex() { - addMessage(100, 100, "m100", [], [.Unsent]) - expectEntries([.Message(100, 100, "m100", [], [.Unsent])]) - expectUnsent([100]) - - updateMessage(100, 200, 200, "m100", [], [], [], nil) - expectEntries([.Message(200, 200, "m100", [], [])]) - expectUnsent([]) - } - - func testUpdateDifferentIndexBreakHole() { - addHole(1) - - addMessage(100, 100, "m100", [], [.Unsent]) - expectEntries([.Hole(1, 99, 100), .Message(100, 100, "m100", [], [.Unsent]), .Hole(101, Int32.max, Int32.max)]) - expectUnsent([100]) - - updateMessage(100, 200, 200, "m100", [], [], [], nil) - expectEntries([.Hole(1, 199, 200), .Message(200, 200, "m100", [], []), .Hole(201, Int32.max, Int32.max)]) - expectUnsent([]) - } - - func testInsertTaggedIntoEmpty() { - addMessage(100, 100, "m100", [], [], MessageTags(rawValue: 1)) - expectEntries([.Message(100, 100, "m100", [], [])], tagMask: MessageTags(rawValue: 1)) - } - - func testInsertMultipleTagsIntoEmpty() { - addMessage(200, 200, "m200", [], [], MessageTags(rawValue: 2)) - addMessage(100, 100, "m100", [], [], MessageTags(rawValue: 1 | 2)) - expectEntries([.Message(100, 100, "m100", [], [])], tagMask: MessageTags(rawValue: 1)) - expectEntries([.Message(100, 100, "m100", [], []), .Message(200, 200, "m200", [], [])], tagMask: MessageTags(rawValue: 2)) - } - - func testRemoveSingleTagged() { - addMessage(100, 100, "m100", [], [], MessageTags(rawValue: 1)) - removeMessages([100]) - - expectEntries([], tagMask: MessageTags(rawValue: 1)) - } - - func testRemoveMultipleTagged() { - addMessage(200, 200, "m200", [], [], MessageTags(rawValue: 2)) - addMessage(100, 100, "m100", [], [], MessageTags(rawValue: 1 | 2)) - removeMessages([100]) - expectEntries([], tagMask: MessageTags(rawValue: 1)) - expectEntries([.Message(200, 200, "m200", [], [])], tagMask: MessageTags(rawValue: 2)) - } - - func testTagsInsertHoleIntoEmpty() { - addHole(1) - expectEntries([.Hole(1, Int32.max, Int32.max)], tagMask: [.First]) - expectEntries([.Hole(1, Int32.max, Int32.max)], tagMask: [.Second]) - } - - func testTagsBreakHoleWithMessage() { - addHole(1) - addMessage(100, 100, "m100", [], [], [.First]) - - expectEntries([.Hole(1, 99, 100), .Message(100, 100, "m100", [], []), .Hole(101, Int32.max, Int32.max)], tagMask: [.First]) - expectEntries([.Hole(1, 99, 100), .Hole(101, Int32.max, Int32.max)], tagMask: [.Second]) - } - - func testTagsFillHoleUpperToLowerAllTags() { - addMessage(100, 100, "m100", [], [], [.First]) - addMessage(200, 200, "m200", [], [], [.Second]) - addHole(150) - - fillHole(199, HoleFill(complete: false, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), [(180, 180, "m180", [], nil)]) - - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, 179, 180)], tagMask: [.First]) - expectEntries([.Hole(101, 179, 180), .Message(200, 200, "m200", [], [])], tagMask: [.Second]) - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, 179, 180), .Message(180, 180, "m180", [], []), .Message(200, 200, "m200", [], [])]) - } - - func testTagsFillHoleLowerToUpperAllTags() { - addMessage(100, 100, "m100", [], [], [.First]) - addMessage(200, 200, "m200", [], [], [.Second]) - addHole(150) - - fillHole(199, HoleFill(complete: false, direction: .LowerToUpper(updatedMaxIndex: nil, clippingMinIndex: nil)), [(180, 180, "m180", [], nil)]) - - expectEntries([.Message(100, 100, "m100", [], []), .Hole(181, 199, 200)], tagMask: [.First]) - expectEntries([.Hole(181, 199, 200), .Message(200, 200, "m200", [], [])], tagMask: [.Second]) - expectEntries([.Message(100, 100, "m100", [], []), .Message(180, 180, "m180", [], []), .Hole(181, 199, 200), .Message(200, 200, "m200", [], [])]) - } - - func testTagsFillHoleCompleteAllTags() { - addMessage(100, 100, "m100", [], [], [.First]) - addMessage(200, 200, "m200", [], [], [.Second]) - addHole(150) - - fillHole(199, HoleFill(complete: true, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), [(180, 180, "m180", [], nil)]) - - expectEntries([.Message(100, 100, "m100", [], [])], tagMask: [.First]) - expectEntries([.Message(200, 200, "m200", [], [])], tagMask: [.Second]) - expectEntries([.Message(100, 100, "m100", [], []), .Message(180, 180, "m180", [], []), .Message(200, 200, "m200", [], [])]) - } - - func testTagsFillHoleUpperToLowerSingleTagWithMessages() { - addMessage(100, 100, "m100", [], [], [.First]) - addMessage(200, 200, "m200", [], [], [.Second]) - addHole(150) - - fillHole(199, HoleFill(complete: false, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), [(180, 180, "m180", [], nil)], [.First]) - - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, 179, 180)], tagMask: [.First]) - expectEntries([.Hole(101, 179, 180), .Hole(181, 199, 200), .Message(200, 200, "m200", [], [])], tagMask: [.Second]) - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, 179, 180), .Message(180, 180, "m180", [], []), .Hole(181, 199, 200), .Message(200, 200, "m200", [], [])]) - } - - func testTagsFillHoleLowerToUpperSingleTagWithMessages() { - addMessage(100, 100, "m100", [], [], [.First]) - addMessage(200, 200, "m200", [], [], [.Second]) - addHole(150) - - fillHole(199, HoleFill(complete: false, direction: .LowerToUpper(updatedMaxIndex: nil, clippingMinIndex: nil)), [(180, 180, "m180", [], nil)], [.First]) - - expectEntries([.Message(100, 100, "m100", [], []), .Hole(181, 199, 200)], tagMask: [.First]) - expectEntries([.Hole(101, 179, 180), .Hole(181, 199, 200), .Message(200, 200, "m200", [], [])], tagMask: [.Second]) - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, 179, 180), .Message(180, 180, "m180", [], []), .Hole(181, 199, 200), .Message(200, 200, "m200", [], [])]) - } - - func testTagsFillHoleCompleteSingleTagWithMessages() { - addMessage(100, 100, "m100", [], [], [.First]) - addMessage(200, 200, "m200", [], [], [.Second]) - addHole(150) - - fillHole(199, HoleFill(complete: true, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), [(180, 180, "m180", [], nil)], [.First]) - - expectEntries([.Message(100, 100, "m100", [], [])], tagMask: [.First]) - expectEntries([.Hole(101, 179, 180), .Hole(181, 199, 200), .Message(200, 200, "m200", [], [])], tagMask: [.Second]) - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, 179, 180), .Message(180, 180, "m180", [], []), .Hole(181, 199, 200), .Message(200, 200, "m200", [], [])]) - } - - func testTagsFillHoleUpperToLowerSingleTagWithEmpty() { - addMessage(100, 100, "m100", [], [], [.First]) - addMessage(200, 200, "m200", [], [], [.Second]) - addHole(150) - - fillHole(199, HoleFill(complete: false, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), [], [.First]) - - expectEntries([.Message(100, 100, "m100", [], [])], tagMask: [.First]) - expectEntries([.Hole(101, 199, 200), .Message(200, 200, "m200", [], [])], tagMask: [.Second]) - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, 199, 200), .Message(200, 200, "m200", [], [])]) - } - - func testTagsFillHoleLowerToUpperSingleTagWithEmpty() { - addMessage(100, 100, "m100", [], [], [.First]) - addMessage(200, 200, "m200", [], [], [.Second]) - addHole(150) - - fillHole(199, HoleFill(complete: false, direction: .LowerToUpper(updatedMaxIndex: nil, clippingMinIndex: nil)), [], [.First]) - - expectEntries([.Message(100, 100, "m100", [], [])], tagMask: [.First]) - expectEntries([.Hole(101, 199, 200), .Message(200, 200, "m200", [], [])], tagMask: [.Second]) - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, 199, 200), .Message(200, 200, "m200", [], [])]) - } - - func testTagsFillHoleCompleteSingleTagWithEmpty() { - addMessage(100, 100, "m100", [], [], [.First]) - addMessage(200, 200, "m200", [], [], [.Second]) - addHole(150) - - fillHole(199, HoleFill(complete: true, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), [], [.First]) - - expectEntries([.Message(100, 100, "m100", [], [])], tagMask: [.First]) - expectEntries([.Hole(101, 199, 200), .Message(200, 200, "m200", [], [])], tagMask: [.Second]) - expectEntries([.Message(100, 100, "m100", [], []), .Hole(101, 199, 200), .Message(200, 200, "m200", [], [])]) - } - - func testTagsFillMultipleHolesSingleHole() { - addHole(1) - addMessage(100, 100, "m100", [], [], [.First]) - addMessage(200, 200, "m200", [], [], [.First]) - addMessage(300, 300, "m300", [], [], [.First]) - addMessage(400, 400, "m400", [], [], [.First]) - - expectEntries([ - .Hole(1, 99, 100), - .Message(100, 100, "m100", [], []), - .Hole(101, 199, 200), - .Message(200, 200, "m200", [], []), - .Hole(201, 299, 300), - .Message(300, 300, "m300", [], []), - .Hole(301, 399, 400), - .Message(400, 400, "m400", [], []), - .Hole(401, Int32.max, Int32.max) - ], tagMask: [.First]) - - expectEntries([ - .Hole(1, 99, 100), - .Hole(101, 199, 200), - .Hole(201, 299, 300), - .Hole(301, 399, 400), - .Hole(401, Int32.max, Int32.max) - ], tagMask: [.Second]) - - fillMultipleHoles(500, HoleFill(complete: false, direction: .UpperToLower(updatedMinIndex: nil, clippingMaxIndex: nil)), [(500, 500, "m500", [], nil), (350, 350, "m350", [], nil)], [.Second], [.Second]) - - expectEntries([ - .Hole(1, 99, 100), - .Hole(101, 199, 200), - .Hole(201, 299, 300), - .Hole(301, 349, 350), - .Message(350, 350, "m350", [], []), - .Message(500, 500, "m500", [], []) - ], tagMask: [.Second]) - - expectEntries([ - .Hole(1, 99, 100), - .Message(100, 100, "m100", [], []), - .Hole(101, 199, 200), - .Message(200, 200, "m200", [], []), - .Hole(201, 299, 300), - .Message(300, 300, "m300", [], []), - .Hole(301, 349, 350), - .Hole(351, 399, 400), - .Message(400, 400, "m400", [], []), - .Hole(401, 499, 500), - .Hole(501, Int32.max, Int32.max) - ], tagMask: [.First]) - } - - func testFullTextGetEmpty() { - XCTAssert(self.textIndexTable!.search(peerId: nil, text: "abc", tags: nil).isEmpty) - } - - func testFullTextMatch1() { - self.textIndexTable!.add(messageId: MessageId(peerId: peerId, namespace: 0, id: 1), text: "a b c", tags: []) - self.textIndexTable!.add(messageId: MessageId(peerId: peerId, namespace: 0, id: 2), text: "a b c d", tags: []) - self.textIndexTable!.add(messageId: MessageId(peerId: peerId, namespace: 0, id: 3), text: "c d e", tags: []) - - var result = self.textIndexTable!.search(peerId: nil, text: "a", tags: nil).sorted() - let testIds1: [MessageId] = [ - MessageId(peerId: peerId, namespace: 0, id: 1), - MessageId(peerId: peerId, namespace: 0, id: 2), - ] - XCTAssert(result == testIds1) - - result = self.textIndexTable!.search(peerId: nil, text: "c", tags: nil).sorted() - let testIds2: [MessageId] = [ - MessageId(peerId: peerId, namespace: 0, id: 1), - MessageId(peerId: peerId, namespace: 0, id: 2), - MessageId(peerId: peerId, namespace: 0, id: 3) - ] - XCTAssert(result == testIds2) - - result = self.textIndexTable!.search(peerId: nil, text: "d", tags: nil).sorted() - let testIds3: [MessageId] = [ - MessageId(peerId: peerId, namespace: 0, id: 2), - MessageId(peerId: peerId, namespace: 0, id: 3) - ] - XCTAssert(result == testIds3) - - result = self.textIndexTable!.search(peerId: nil, text: "a b c", tags: nil).sorted() - XCTAssert(result == testIds1) - - result = self.textIndexTable!.search(peerId: nil, text: "a b c d e", tags: nil).sorted() - let testIds4: [MessageId] = [ - ] - XCTAssert(result == testIds4) - - self.textIndexTable!.remove(messageId: MessageId(peerId: peerId, namespace: 0, id: 2)) - let testIds5: [MessageId] = [ - MessageId(peerId: peerId, namespace: 0, id: 1), - MessageId(peerId: peerId, namespace: 0, id: 3) - ] - result = self.textIndexTable!.search(peerId: nil, text: "c", tags: nil).sorted() - XCTAssert(result == testIds5) - } - - func testFullTextMatchLocal() { - self.textIndexTable!.add(messageId: MessageId(peerId: peerId, namespace: 0, id: 1), text: "a b c", tags: []) - self.textIndexTable!.add(messageId: MessageId(peerId: peerId, namespace: 0, id: 2), text: "a b c d", tags: []) - self.textIndexTable!.add(messageId: MessageId(peerId: otherPeerId, namespace: 0, id: 1), text: "c d e", tags: []) - self.textIndexTable!.add(messageId: MessageId(peerId: otherPeerId, namespace: 0, id: 2), text: "d e f", tags: []) - - var result = self.textIndexTable!.search(peerId: peerId, text: "a", tags: nil).sorted() - let testIds1: [MessageId] = [ - MessageId(peerId: peerId, namespace: 0, id: 1), - MessageId(peerId: peerId, namespace: 0, id: 2), - ] - XCTAssert(result == testIds1) - - result = self.textIndexTable!.search(peerId: otherPeerId, text: "c", tags: nil).sorted() - let testIds2: [MessageId] = [ - MessageId(peerId: otherPeerId, namespace: 0, id: 1), - ] - XCTAssert(result == testIds2) - - result = self.textIndexTable!.search(peerId: otherPeerId, text: "d", tags: nil).sorted() - let testIds3: [MessageId] = [ - MessageId(peerId: otherPeerId, namespace: 0, id: 1), - MessageId(peerId: otherPeerId, namespace: 0, id: 2) - ] - XCTAssert(result == testIds3) - } - - func testFullTextMatchLocalTags() { - self.textIndexTable!.add(messageId: MessageId(peerId: peerId, namespace: 0, id: 1), text: "a b c", tags: []) - self.textIndexTable!.add(messageId: MessageId(peerId: peerId, namespace: 0, id: 2), text: "a b c d", tags: []) - self.textIndexTable!.add(messageId: MessageId(peerId: peerId, namespace: 0, id: 3), text: "a b c", tags: [tag1]) - self.textIndexTable!.add(messageId: MessageId(peerId: peerId, namespace: 0, id: 4), text: "a b c", tags: [tag1, tag2]) - self.textIndexTable!.add(messageId: MessageId(peerId: peerId, namespace: 0, id: 5), text: "a b c", tags: [tag1, tag2]) - self.textIndexTable!.add(messageId: MessageId(peerId: peerId, namespace: 0, id: 6), text: "a b c", tags: [tag2]) - - var result = self.textIndexTable!.search(peerId: peerId, text: "a b c", tags: nil).sorted() - let testIds1: [MessageId] = [ - MessageId(peerId: peerId, namespace: 0, id: 1), - MessageId(peerId: peerId, namespace: 0, id: 2), - MessageId(peerId: peerId, namespace: 0, id: 3), - MessageId(peerId: peerId, namespace: 0, id: 4), - MessageId(peerId: peerId, namespace: 0, id: 5), - MessageId(peerId: peerId, namespace: 0, id: 6), - ] - XCTAssert(result == testIds1) - - result = self.textIndexTable!.search(peerId: peerId, text: "a b c", tags: [tag1]).sorted() - let testIds2: [MessageId] = [ - MessageId(peerId: peerId, namespace: 0, id: 3), - MessageId(peerId: peerId, namespace: 0, id: 4), - MessageId(peerId: peerId, namespace: 0, id: 5), - ] - XCTAssert(result == testIds2) - - result = self.textIndexTable!.search(peerId: peerId, text: "a b c", tags: [tag2]).sorted() - let testIds3: [MessageId] = [ - MessageId(peerId: peerId, namespace: 0, id: 4), - MessageId(peerId: peerId, namespace: 0, id: 5), - MessageId(peerId: peerId, namespace: 0, id: 6), - ] - XCTAssert(result == testIds3) - - result = self.textIndexTable!.search(peerId: peerId, text: "a b c", tags: [tag1, tag2]).sorted() - let testIds4: [MessageId] = [ - MessageId(peerId: peerId, namespace: 0, id: 4), - MessageId(peerId: peerId, namespace: 0, id: 5), - ] - XCTAssert(result == testIds4) - } - - func testFullTextEscape1() { - self.textIndexTable!.add(messageId: MessageId(peerId: peerId, namespace: 0, id: 1), text: "abc' def'", tags: []) - var result = self.textIndexTable!.search(peerId: nil, text: "abc'", tags: nil).sorted() - let testIds1: [MessageId] = [ - MessageId(peerId: peerId, namespace: 0, id: 1) - ] - XCTAssert(result == testIds1) - - result = self.textIndexTable!.search(peerId: nil, text: "abc' def'", tags: nil).sorted() - XCTAssert(result == testIds1) - - result = self.textIndexTable!.search(peerId: nil, text: "abc' AND def", tags: nil).sorted() - XCTAssert(result.isEmpty) - } - - func testSummary1() { - expectSummary(nil) - addMessage(100, 100, "m100", [], [], [.First]) - expectSummary(nil) - addMessage(200, 200, "m200", [], [], [.Summary]) - expectSummary(MessageHistoryTagNamespaceSummary(version: 0, count: 1, range: MessageHistoryTagNamespaceCountValidityRange(maxId: 0))) - replaceSummary(2, 200) - expectSummary(MessageHistoryTagNamespaceSummary(version: 1, count: 2, range: MessageHistoryTagNamespaceCountValidityRange(maxId: 200))) - addMessage(150, 150, "m200", [], [], [.Summary]) - expectSummary(MessageHistoryTagNamespaceSummary(version: 1, count: 2, range: MessageHistoryTagNamespaceCountValidityRange(maxId: 200))) - removeMessages([150]) - expectSummary(MessageHistoryTagNamespaceSummary(version: 1, count: 1, range: MessageHistoryTagNamespaceCountValidityRange(maxId: 200))) - removeMessages([200]) - expectSummary(MessageHistoryTagNamespaceSummary(version: 1, count: 0, range: MessageHistoryTagNamespaceCountValidityRange(maxId: 200))) - addMessage(300, 300, "m300", [], [], [.Summary]) - expectSummary(MessageHistoryTagNamespaceSummary(version: 1, count: 1, range: MessageHistoryTagNamespaceCountValidityRange(maxId: 200))) - addHole(400) - expectSummary(MessageHistoryTagNamespaceSummary(version: 1, count: 1, range: MessageHistoryTagNamespaceCountValidityRange(maxId: 200))) - } - - func testSummary2() { - addHole(400) - expectSummary(nil) - } - - func testSummary3() { - addMessage(200, 200, "m200", [], [], [.Summary]) - addHole(100) - replaceSummary(0, 200) - expectSummary(MessageHistoryTagNamespaceSummary(version: 1, count: 0, range: MessageHistoryTagNamespaceCountValidityRange(maxId: 200))) - addMessage(300, 300, "m300", [], [], [.Summary]) - addHole(250) - expectSummary(MessageHistoryTagNamespaceSummary(version: 1, count: 1, range: MessageHistoryTagNamespaceCountValidityRange(maxId: 200))) - replaceSummary(10, 300) - expectSummary(MessageHistoryTagNamespaceSummary(version: 2, count: 10, range: MessageHistoryTagNamespaceCountValidityRange(maxId: 300))) - self.updateMessage(300, 300, 300, "m300", [], [], [], nil) - expectSummary(MessageHistoryTagNamespaceSummary(version: 2, count: 9, range: MessageHistoryTagNamespaceCountValidityRange(maxId: 300))) - } - - func testPendingMessageActions1() { - expectMessageAction(100, pendingAction1, nil) - expectPeerNamespaceMessageActionCount(0) - expectPeerNamespaceActionMessageActionCount(0, pendingAction1) - setMessageAction(100, pendingAction1, PendingMessageAction1()) - expectMessageAction(100, pendingAction1, nil) - expectPeerNamespaceMessageActionCount(0) - expectPeerNamespaceActionMessageActionCount(0, pendingAction1) - addMessage(100, 100) - expectMessageAction(100, pendingAction1, nil) - expectPeerNamespaceMessageActionCount(0) - expectPeerNamespaceActionMessageActionCount(0, pendingAction1) - setMessageAction(100, pendingAction1, PendingMessageAction1()) - expectMessageAction(100, pendingAction1, PendingMessageAction1()) - expectPeerNamespaceMessageActionCount(1) - expectPeerNamespaceActionMessageActionCount(1, pendingAction1) - expectPeerNamespaceActionMessageActionCount(0, pendingAction2) - removeMessages([100]) - expectMessageAction(100, pendingAction1, nil) - expectPeerNamespaceMessageActionCount(0) - expectPeerNamespaceActionMessageActionCount(0, pendingAction1) - expectPeerNamespaceActionMessageActionCount(0, pendingAction2) - - addMessage(100, 100) - setMessageAction(100, pendingAction1, PendingMessageAction1()) - expectPeerNamespaceMessageActionCount(1) - expectPeerNamespaceActionMessageActionCount(1, pendingAction1) - expectPeerNamespaceActionMessageActionCount(0, pendingAction2) - - setMessageAction(100, pendingAction1, PendingMessageAction1()) - expectPeerNamespaceMessageActionCount(1) - expectPeerNamespaceActionMessageActionCount(1, pendingAction1) - expectPeerNamespaceActionMessageActionCount(0, pendingAction2) - - setMessageAction(100, pendingAction2, PendingMessageAction2()) - expectPeerNamespaceMessageActionCount(2) - expectPeerNamespaceActionMessageActionCount(1, pendingAction1) - expectPeerNamespaceActionMessageActionCount(1, pendingAction2) - - addMessage(200, 200) - setMessageAction(200, pendingAction1, PendingMessageAction1()) - expectPeerNamespaceMessageActionCount(3) - expectPeerNamespaceActionMessageActionCount(2, pendingAction1) - expectPeerNamespaceActionMessageActionCount(1, pendingAction2) - expectPeerMessageActions(pendingAction1, [(100, PendingMessageAction1()), (200, PendingMessageAction1())]) - expectPeerMessageActions(pendingAction2, [(100, PendingMessageAction2())]) - - removeMessages([100]) - expectPeerNamespaceMessageActionCount(1) - expectPeerNamespaceActionMessageActionCount(1, pendingAction1) - expectPeerNamespaceActionMessageActionCount(0, pendingAction2) - expectPeerMessageActions(pendingAction2, []) - expectPeerMessageActions(pendingAction1, [(200, PendingMessageAction1())]) - } - - func testRemoveRangeEmpty() { - removeMessagesInRange(minId: 0, maxId: Int32.max) - expectEntries([], tagMask: nil) - } - - func testRemoveRangeOneMessage1() { - addMessage(100, 100) - expectEntries([.Message(100, 100, "", [], [])], tagMask: nil) - removeMessagesInRange(minId: 0, maxId: 99) - expectEntries([.Message(100, 100, "", [], [])], tagMask: nil) - removeMessagesInRange(minId: 101, maxId: Int32.max) - expectEntries([.Message(100, 100, "", [], [])], tagMask: nil) - removeMessagesInRange(minId: 0, maxId: Int32.max) - expectEntries([], tagMask: nil) - } - - func testRemoveRangeOneMessage2() { - addMessage(100, 100) - expectEntries([.Message(100, 100, "", [], [])], tagMask: nil) - removeMessagesInRange(minId: 100, maxId: Int32.max) - expectEntries([], tagMask: nil) - addMessage(100, 100) - removeMessagesInRange(minId: 0, maxId: 100) - expectEntries([], tagMask: nil) - } - - func testRemoveRangeHole1() { - addHole(1) - removeMessagesInRange(minId: 0, maxId: Int32.max) - expectEntries([], tagMask: nil) - } - - func testRemoveRangeHole2() { - addHole(1) - removeMessagesInRange(minId: 0, maxId: 100) - expectEntries([.Hole(101, Int32.max, Int32.max)], tagMask: nil) - } - - func testRemoveRangeHole3() { - addHole(1) - removeMessagesInRange(minId: 100, maxId: Int32.max) - expectEntries([.Hole(1, Int32.max, Int32.max)], tagMask: nil) - } - - func testRemoveRangeHole4() { - addMessage(100, 100) - addMessage(200, 200) - addHole(101) - addHole(1) - addHole(201) - removeMessagesInRange(minId: 0, maxId: Int32.max) - expectEntries([], tagMask: nil) - } - - func testRemoveRangeHole5() { - addMessage(100, 100) - addMessage(200, 200) - addHole(101) - addHole(1) - addHole(201) - removeMessagesInRange(minId: 0, maxId: 99) - expectEntries([.Message(100, 100, "", [], []), - .Hole(101, 199, 200), - .Message(200, 200, "", [], []), - .Hole(201, Int32.max, Int32.max)], tagMask: nil) - } - - func testRemoveRangeHole6() { - addMessage(100, 100) - addMessage(200, 200) - addHole(101) - addHole(1) - addHole(201) - removeMessagesInRange(minId: 0, maxId: 50) - expectEntries([.Hole(51, 99, 100), - .Message(100, 100, "", [], []), - .Hole(101, 199, 200), - .Message(200, 200, "", [], []), - .Hole(201, Int32.max, Int32.max)], tagMask: nil) - } - - func testRemoveRangeHole7() { - addMessage(100, 100) - addMessage(200, 200) - addHole(101) - addHole(1) - addHole(201) - removeMessagesInRange(minId: 50, maxId: 150) - expectEntries([.Hole(1, 199, 200), - .Message(200, 200, "", [], []), - .Hole(201, Int32.max, Int32.max)], tagMask: nil) - } - - func testRemoveRangeHole8() { - addMessage(100, 100) - addMessage(200, 200) - addHole(101) - addHole(1) - addHole(201) - removeMessagesInRange(minId: 0, maxId: 200) - expectEntries([.Hole(1, Int32.max, Int32.max)], tagMask: nil) - } - - func testRemoveRangeHole9() { - addMessage(100, 100) - addMessage(200, 200) - addHole(101) - addHole(1) - addHole(201) - removeMessagesInRange(minId: 0, maxId: 300) - expectEntries([.Hole(301, Int32.max, Int32.max)], tagMask: nil) - } - - func testAddHole1() { - addMessage(100, 100) - addMessage(101, 101) - addMessage(102, 102) - - addHole(Int32.max) - - expectEntries([ - .Message(100, 100, "", [], []), - .Message(101, 101, "", [], []), - .Message(102, 102, "", [], []), - .Hole(103, Int32.max, Int32.max) - ], tagMask: nil) - - addMessage(104, 104, location: .UpperHistoryBlock) - - expectEntries([ - .Message(100, 100, "", [], []), - .Message(101, 101, "", [], []), - .Message(102, 102, "", [], []), - .Hole(103, 103, 104), - .Message(104, 104, "", [], []), - ], tagMask: nil) - } - - /*None,A,None -> None, A(D), None - None,A,A(D) -> None, A(D), None - A(D),A,None -> A(D), A(D), None - None,A,B(D1) -> None, A(D2), B(D1) - A(D),A,A(D) -> A(D),A(D),A(D) - A(D1),A,B(D2) -> A(D1), A(D1), B(D2) - B(D1),A,None -> B(D1), A(D2), None - B(D1),A,A(D2) -> B(D1), A(D2), A(D2) - - B(D1),A,B(D1) -> B(D1), A(D2), B(D3) - */ - - func testGroupNoneNone() { - addMessage(100, 100, groupingKey: 1) - let groupInfo = getExistingMessageGroupInfo(100) - expectEntries([ - .Message(100, 100, "", [], [], groupInfo) - ]) - } - - func testGroupHoleHole() { - addHole(1) - addMessage(100, 100, groupingKey: 1) - let groupInfo = getExistingMessageGroupInfo(100) - expectEntries([ - .Hole(1, 99, 100), - .Message(100, 100, "", [], [], groupInfo), - .Hole(101, Int32.max, Int32.max) - ]) - } - - func testGroupSameNone() { - addMessage(100, 100, groupingKey: 1) - let groupInfo = getExistingMessageGroupInfo(100) - addMessage(110, 110, groupingKey: 1) - expectEntries([ - .Message(100, 100, "", [], [], groupInfo), - .Message(110, 110, "", [], [], groupInfo) - ]) - } - - func testGroupNoneSame() { - addMessage(100, 100, groupingKey: 1) - let groupInfo = getExistingMessageGroupInfo(100) - addMessage(90, 90, groupingKey: 1) - expectEntries([ - .Message(90, 90, "", [], [], groupInfo), - .Message(100, 100, "", [], [], groupInfo) - ]) - } - - func testGroupNoneOther() { - addMessage(100, 100, groupingKey: 1) - let groupInfo1 = getExistingMessageGroupInfo(100) - addMessage(90, 90, groupingKey: 2) - let groupInfo2 = getExistingMessageGroupInfo(90) - expectEntries([ - .Message(90, 90, "", [], [], groupInfo2), - .Message(100, 100, "", [], [], groupInfo1) - ]) - } - - func testGroupSameSame() { - addMessage(100, 100, groupingKey: 1) - let groupInfo = getExistingMessageGroupInfo(100) - addMessage(90, 90, groupingKey: 1) - addMessage(95, 95, groupingKey: 1) - expectEntries([ - .Message(90, 90, "", [], [], groupInfo), - .Message(95, 95, "", [], [], groupInfo), - .Message(100, 100, "", [], [], groupInfo) - ]) - } - - func testGroupSameOther() { - addMessage(100, 100, groupingKey: 2) - let groupInfo1 = getExistingMessageGroupInfo(100) - addMessage(90, 90, groupingKey: 1) - let groupInfo2 = getExistingMessageGroupInfo(90) - addMessage(95, 95, groupingKey: 1) - expectEntries([ - .Message(90, 90, "", [], [], groupInfo2), - .Message(95, 95, "", [], [], groupInfo2), - .Message(100, 100, "", [], [], groupInfo1) - ]) - } - - func testGroupOtherNone() { - addMessage(100, 100, groupingKey: 1) - let groupInfo1 = getExistingMessageGroupInfo(100) - addMessage(110, 110, groupingKey: 2) - let groupInfo2 = getExistingMessageGroupInfo(110) - expectEntries([ - .Message(100, 100, "", [], [], groupInfo1), - .Message(110, 110, "", [], [], groupInfo2) - ]) - } - - func testGroupOtherSame() { - addMessage(100, 100, groupingKey: 1) - let groupInfo1 = getExistingMessageGroupInfo(100) - addMessage(110, 110, groupingKey: 2) - let groupInfo2 = getExistingMessageGroupInfo(110) - addMessage(105, 105, groupingKey: 2) - expectEntries([ - .Message(100, 100, "", [], [], groupInfo1), - .Message(105, 105, "", [], [], groupInfo2), - .Message(110, 110, "", [], [], groupInfo2) - ]) - } - - func testGroupOtherOtherTailSingle() { - addMessage(100, 100, groupingKey: 1) - addMessage(120, 120, groupingKey: 1) - let groupInfo1 = getExistingMessageGroupInfo(100) - - addMessage(110, 110, groupingKey: 2) - let groupInfo2 = getExistingMessageGroupInfo(110) - - let groupInfo3 = getExistingMessageGroupInfo(120) - - expectEntries([ - .Message(100, 100, "", [], [], groupInfo1), - .Message(110, 110, "", [], [], groupInfo2), - .Message(120, 120, "", [], [], groupInfo3) - ]) - - XCTAssert(groupInfo3 != groupInfo1 && groupInfo3 != groupInfo2) - } - - func testGroupOtherOtherTailMultiple() { - addMessage(100, 100, groupingKey: 1) - addMessage(120, 120, groupingKey: 1) - addMessage(130, 130, groupingKey: 1) - addMessage(140, 140, groupingKey: 1) - let groupInfo1 = getExistingMessageGroupInfo(100) - - addMessage(110, 110, groupingKey: 2) - let groupInfo2 = getExistingMessageGroupInfo(110) - - let groupInfo3 = getExistingMessageGroupInfo(120) - - expectEntries([ - .Message(100, 100, "", [], [], groupInfo1), - .Message(110, 110, "", [], [], groupInfo2), - .Message(120, 120, "", [], [], groupInfo3), - .Message(130, 130, "", [], [], groupInfo3), - .Message(140, 140, "", [], [], groupInfo3) - ]) - - XCTAssert(groupInfo3 != groupInfo1 && groupInfo3 != groupInfo2) - } - - func testGroupBreakWithHole() { - addMessage(100, 100, groupingKey: 1) - addMessage(120, 120, groupingKey: 1) - addMessage(130, 130, groupingKey: 1) - addMessage(140, 140, groupingKey: 1) - let groupInfo1 = getExistingMessageGroupInfo(100) - - addHole(110) - - let groupInfo3 = getExistingMessageGroupInfo(120) - - expectEntries([ - .Message(100, 100, "", [], [], groupInfo1), - .Hole(101, 119, 120), - .Message(120, 120, "", [], [], groupInfo3), - .Message(130, 130, "", [], [], groupInfo3), - .Message(140, 140, "", [], [], groupInfo3) - ]) - - XCTAssert(groupInfo3 != groupInfo1) - } - - func testGroupCombine1() { - addMessage(100, 100, groupingKey: 1) - addMessage(120, 120, groupingKey: nil) - addMessage(130, 130, groupingKey: 1) - addMessage(140, 140, groupingKey: 1) - let groupInfo1 = getExistingMessageGroupInfo(100) - let groupInfo2 = getExistingMessageGroupInfo(130) - - removeMessages([120]) - - expectEntries([ - .Message(100, 100, "", [], [], groupInfo1), - .Message(130, 130, "", [], [], groupInfo1), - .Message(140, 140, "", [], [], groupInfo1) - ]) - - XCTAssert(groupInfo1 != groupInfo2) - } - - func testGroupCombine2() { - addMessage(100, 100, groupingKey: 1) - addMessage(120, 120, groupingKey: nil) - addMessage(125, 125, groupingKey: nil) - addMessage(130, 130, groupingKey: 1) - addMessage(140, 140, groupingKey: 1) - addMessage(150, 150, groupingKey: 1) - let groupInfo1 = getExistingMessageGroupInfo(100) - let groupInfo2 = getExistingMessageGroupInfo(130) - - removeMessages([120, 125, 140]) - - expectEntries([ - .Message(100, 100, "", [], [], groupInfo1), - .Message(130, 130, "", [], [], groupInfo1), - .Message(150, 150, "", [], [], groupInfo1) - ]) - - XCTAssert(groupInfo1 != groupInfo2) - } - - func testGroupCombine3() { - addMessage(100, 100, groupingKey: 1) - addMessage(140, 140, groupingKey: 1) - addMessage(150, 150, groupingKey: 1) - addHole(120) - let groupInfo1 = getExistingMessageGroupInfo(100) - let groupInfo2 = getExistingMessageGroupInfo(140) - - fillHole(120, HoleFill(complete: true, direction: .LowerToUpper(updatedMaxIndex: nil, clippingMinIndex: nil)), [ - (110, 110, "", [], 1), - (115, 115, "", [], 1) - ]) - - expectEntries([ - .Message(100, 100, "", [], [], groupInfo1), - .Message(110, 110, "", [], [], groupInfo1), - .Message(115, 115, "", [], [], groupInfo1), - .Message(140, 140, "", [], [], groupInfo1), - .Message(150, 150, "", [], [], groupInfo1) - ]) - - XCTAssert(groupInfo1 != groupInfo2) - } - - func testGroupBreakWithUpdate1() { - addMessage(100, 100, groupingKey: 1) - addMessage(120, 120, groupingKey: 1) - addMessage(130, 130, groupingKey: 1) - addMessage(140, 140, groupingKey: 1) - let groupInfo1 = getExistingMessageGroupInfo(100) - - updateMessage(120, 150, 150, "", [], [], [], 1) - - expectEntries([ - .Message(100, 100, "", [], [], groupInfo1), - .Message(130, 130, "", [], [], groupInfo1), - .Message(140, 140, "", [], [], groupInfo1), - .Message(150, 150, "", [], [], groupInfo1) - ]) - } - - func testGroupBreakWithUpdate2() { - addMessage(100, 100, groupingKey: 1) - addMessage(120, 120, groupingKey: 1) - addMessage(130, 130, groupingKey: 1) - addMessage(140, 140, groupingKey: 1) - let groupInfo1 = getExistingMessageGroupInfo(100) - - updateMessage(120, 150, 150, "", [], [], [], 2) - - let groupInfo2 = getExistingMessageGroupInfo(150) - - expectEntries([ - .Message(100, 100, "", [], [], groupInfo1), - .Message(130, 130, "", [], [], groupInfo1), - .Message(140, 140, "", [], [], groupInfo1), - .Message(150, 150, "", [], [], groupInfo2) - ]) - - XCTAssert(groupInfo1 != groupInfo2) - } -} diff --git a/submodules/Postbox/PostboxTests/MessageHistoryViewTests.swift b/submodules/Postbox/PostboxTests/MessageHistoryViewTests.swift deleted file mode 100644 index 3a599c88eb..0000000000 --- a/submodules/Postbox/PostboxTests/MessageHistoryViewTests.swift +++ /dev/null @@ -1,497 +0,0 @@ -import Foundation - -import XCTest - -import Postbox -@testable import Postbox - -import SwiftSignalKit - -private let peerId = PeerId(namespace: 1, id: 1) -private let namespace: Int32 = 1 - -private func extract(from array: [Int32], aroundIndex: Int, halfLimit: Int) -> [Int32] { - var lower: [Int32] = [] - var higher: [Int32] = [] - - var i = aroundIndex - while i >= 0 && lower.count < halfLimit { - lower.append(array[i]) - i -= 1 - } - - var j = aroundIndex + 1 - while j < array.count && higher.count < halfLimit { - higher.append(array[j]) - j += 1 - } - - var result: [Int32] = [] - result.append(contentsOf: lower.reversed()) - result.append(contentsOf: higher) - - assert(result.count <= halfLimit * 2) - - return result -} - -class MessageHistoryViewTests: XCTestCase { - var valueBox: SqliteValueBox? - var path: String? - - var postbox: Postbox? - - override func setUp() { - super.setUp() - - self.continueAfterFailure = false - - var randomId: Int64 = 0 - arc4random_buf(&randomId, 8) - path = NSTemporaryDirectory() + "\(randomId)" - - var randomKey = Data(count: 32) - randomKey.withUnsafeMutableBytes({ (bytes: UnsafeMutablePointer) -> Void in - arc4random_buf(bytes, 32) - }) - var randomSalt = Data(count: 16) - randomSalt.withUnsafeMutableBytes({ (bytes: UnsafeMutablePointer) -> Void in - arc4random_buf(bytes, 16) - }) - - self.valueBox = SqliteValueBox(basePath: path!, queue: Queue.mainQueue(), encryptionParameters: ValueBoxEncryptionParameters(forceEncryptionIfNoSet: false, key: ValueBoxEncryptionParameters.Key(data: randomKey)!, salt: ValueBoxEncryptionParameters.Salt(data: randomSalt)!), upgradeProgress: { _ in }, inMemory: true) - - let messageHoles: [PeerId.Namespace: [MessageId.Namespace: Set]] = [ - peerId.namespace: [: - // namespace: Set([.media]) - ] - ] - - let seedConfiguration = SeedConfiguration(globalMessageIdsPeerIdNamespaces: Set(), initializeChatListWithHole: (topLevel: nil, groups: nil), messageHoles: messageHoles, existingMessageTags: [], messageTagsWithSummary: [], existingGlobalMessageTags: [], peerNamespacesRequiringMessageTextIndex: [], peerSummaryCounterTags: { _ in PeerSummaryCounterTags(rawValue: 0) }, additionalChatListIndexNamespace: nil, messageNamespacesRequiringGroupStatsValidation: Set(), chatMessagesNamespaces: Set()) - - self.postbox = Postbox(queue: Queue.mainQueue(), basePath: path!, seedConfiguration: seedConfiguration, valueBox: self.valueBox!) - } - - override func tearDown() { - super.tearDown() - - self.postbox = nil - let _ = try? FileManager.default.removeItem(atPath: path!) - self.path = nil - } - - private func addHole(_ range: ClosedRange, space: MessageHistoryHoleSpace) { - let _ = self.postbox!.transaction({ transaction -> Void in - transaction.addHole(peerId: peerId, namespace: namespace, space: .everywhere, range: range) - }).start() - } - - private func removeHole(_ range: ClosedRange, space: MessageHistoryHoleSpace) { - let _ = self.postbox!.transaction({ transaction -> Void in - transaction.removeHole(peerId: peerId, namespace: namespace, space: .everywhere, range: range) - }).start() - } - - private func addMessage(_ id: Int32, _ timestamp: Int32, _ groupingKey: Int64? = nil) -> UInt32 { - var stableId: UInt32? - let _ = self.postbox!.transaction({ transaction -> Void in - let messageId = MessageId(peerId: peerId, namespace: namespace, id: id) - let _ = transaction.addMessages([StoreMessage(id: messageId, globallyUniqueId: nil, groupingKey: nil, timestamp: timestamp, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, authorId: nil, text: "", attributes: [], media: [])], location: .Random) - stableId = transaction.getMessage(messageId)!.stableId - }).start() - return stableId! - } - - private func removeMessage(_ id: Int32) { - let _ = self.postbox!.transaction({ transaction -> Void in - transaction.deleteMessages([MessageId(peerId: peerId, namespace: namespace, id: id)]) - }).start() - } - - private func removeAllMessages() { - let _ = self.postbox!.transaction({ transaction -> Void in - transaction.deleteMessagesInRange(peerId: peerId, namespace: namespace, minId: 1, maxId: Int32.max) - }).start() - } - - func testEmpty() { - let state = HistoryViewState(postbox: self.postbox!, inputAnchor: .upperBound, tag: nil, statistics: [], halfLimit: 10, locations: .single(peerId)) - switch state { - case let .loaded(loadedState): - let entries = loadedState.completeAndSample(postbox: self.postbox!).entries - assert(entries.isEmpty) - case .loading: - XCTAssert(false) - } - } - - func testFixed() { - var testIds: [MessageId.Id] = [] - for i in 1 ..< 11 { - testIds.append(Int32(i * 10)) - let _ = addMessage(Int32(i * 10), Int32(i * 10)) - } - for i in 3 ... testIds.count + 10 { - let state = HistoryViewState(postbox: self.postbox!, inputAnchor: .upperBound, tag: nil, statistics: [], halfLimit: i, locations: .single(peerId)) - switch state { - case let .loaded(loadedState): - let entries = loadedState.completeAndSample(postbox: self.postbox!).entries - let ids = entries.map({ $0.message.id.id }) - let clippedTestIds: [Int32] - if i >= testIds.count { - clippedTestIds = testIds - } else { - clippedTestIds = Array(testIds.dropFirst(testIds.count - i)) - } - assert(ids == clippedTestIds) - case .loading: - XCTAssert(false) - } - } - for i in 3 ... testIds.count + 10 { - let state = HistoryViewState(postbox: self.postbox!, inputAnchor: .lowerBound, tag: nil, statistics: [], halfLimit: i, locations: .single(peerId)) - switch state { - case let .loaded(loadedState): - let entries = loadedState.completeAndSample(postbox: self.postbox!).entries - let ids = entries.map({ $0.message.id.id }) - let clippedTestIds: [Int32] - if i >= testIds.count { - clippedTestIds = testIds - } else { - clippedTestIds = Array(testIds.dropLast(testIds.count - i)) - } - assert(ids == clippedTestIds) - case .loading: - XCTAssert(false) - } - } - for i in 3 ... testIds.count + 10 { - for j in testIds[0] - 10 ... testIds.last! + 10 { - let state = HistoryViewState(postbox: self.postbox!, inputAnchor: .index(MessageIndex(id: MessageId(peerId: peerId, namespace: namespace, id: Int32(j)), timestamp: Int32(j))), tag: nil, statistics: [], halfLimit: i, locations: .single(peerId)) - - let clippedTestIds: [Int32] - if let index = testIds.firstIndex(where: { $0 > Int32(j) }), index >= 0 { - clippedTestIds = extract(from: testIds, aroundIndex: index - 1, halfLimit: i) - } else { - if i >= testIds.count { - clippedTestIds = testIds - } else { - clippedTestIds = Array(testIds.dropFirst(testIds.count - i)) - } - } - - switch state { - case let .loaded(loadedState): - let entries = loadedState.completeAndSample(postbox: self.postbox!).entries - let ids = entries.map({ $0.message.id.id }) - assert(ids == clippedTestIds) - case .loading: - XCTAssert(false) - } - } - } - } - - func testDynamicAdd() { - var randomOperations: [Int32] = [] - - randomOperations = [100, 74, 83, 22, 32, 16, 25, 35, 15, 117, 81, 115, 33, 59, 10, 67, 91, 70, 24, 97, 77, 49, 89, 51, 116, 110, 86, 57, 13, 104, 112, 26, 31, 79, 29, 90, 18, 92, 93, 105, 52, 80, 78, 55, 14, 37, 30, 101, 88, 41, 94, 65, 19, 96, 102, 48, 21, 28, 47, 54, 85, 42, 72, 38, 45, 87, 58, 27, 106, 43, 34, 40, 98, 50, 84, 82, 75, 56, 53, 68, 69, 36, 119, 76, 17, 107, 46, 61, 12, 114, 95, 60, 99, 64, 23, 63, 44, 118, 111, 71, 113, 109, 62, 103, 66, 20, 73, 108, 11] - - if randomOperations.isEmpty { - for _ in 0 ..< 500 { - let insertId = Int32(10 + arc4random_uniform(110)) - if !randomOperations.contains(insertId) { - randomOperations.append(insertId) - } - } - print("randomOperations = \(randomOperations)") - } - - let sequentialForwardOperations: [Int32] = Array((10 ... 110).map({ Int32($0) })) - let sequentialBackwardOperations: [Int32] = Array(sequentialForwardOperations.reversed()) - - var shuffledOperations: [Int32] = [] - - shuffledOperations = [88, 27, 41, 43, 53, 90, 110, 55, 65, 75, 69, 35, 54, 66, 16, 89, 98, 52, 23, 51, 30, 81, 76, 93, 58, 101, 10, 86, 34, 95, 91, 26, 42, 20, 107, 11, 64, 21, 63, 82, 67, 39, 70, 72, 25, 48, 79, 94, 106, 103, 56, 60, 59, 47, 68, 18, 38, 71, 29, 108, 33, 12, 17, 92, 84, 50, 32, 99, 37, 96, 46, 36, 61, 28, 19, 109, 45, 24, 87, 49, 97, 14, 78, 73, 104, 31, 57, 62, 22, 13, 80, 85, 100, 15, 83, 102, 40, 105, 74, 44, 77] - - if shuffledOperations.isEmpty { - shuffledOperations = Array(sequentialForwardOperations.shuffled()) - print("shuffledOperations = \(shuffledOperations)") - } - - let operationSets: [[Int32]] = [ - sequentialForwardOperations, - sequentialBackwardOperations, - shuffledOperations, - randomOperations - ] - - for operationSetIndex in 0 ..< operationSets.count { - let operations = operationSets[operationSetIndex] - for halfLimit in [3, 4, 5, 6, 7, 200] { - for position in 10 ... 110 { - removeAllMessages() - - var testIds: [MessageId.Id] = [] - let state = HistoryViewState(postbox: self.postbox!, inputAnchor: .index(MessageIndex(id: MessageId(peerId: peerId, namespace: namespace, id: Int32(position)), timestamp: Int32(position))), tag: nil, statistics: [], halfLimit: halfLimit, locations: .single(peerId)) - switch state { - case let .loaded(loadedState): - for operationIndex in 0 ..< operations.count { - let insertId = operations[operationIndex] - if !testIds.contains(insertId) { - testIds.append(insertId) - testIds.sort() - } else { - assertionFailure() - } - - let attributesData = ReadBuffer(data: Data()) - - let stableId = addMessage(Int32(insertId), Int32(insertId)) - let _ = loadedState.add(entry: .IntermediateMessageEntry(IntermediateMessage(stableId: stableId, stableVersion: 0, id: MessageId(peerId: peerId, namespace: namespace, id: insertId), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: insertId, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, authorId: nil, text: "", attributesData: attributesData, embeddedMediaData: attributesData, referencedMedia: []), nil, nil)) - - let entries = loadedState.completeAndSample(postbox: self.postbox!).entries - let ids = entries.map({ $0.message.id.id }) - - let clippedTestIds: [Int32] - if let index = testIds.firstIndex(where: { $0 > Int32(position) }), index >= 0 { - clippedTestIds = extract(from: testIds, aroundIndex: index - 1, halfLimit: halfLimit) - } else { - if halfLimit >= testIds.count { - clippedTestIds = testIds - } else { - clippedTestIds = Array(testIds.dropFirst(testIds.count - halfLimit)) - } - } - - XCTAssert(ids == clippedTestIds, "\(ids) != \(clippedTestIds)") - } - case .loading: - XCTAssert(false) - } - } - } - } - } - - func testDynamicRemove() { - var randomOperations: [(Int32, Bool)] = [] - - randomOperations = [(78, true), (31, true), (50, true), (110, true), (50, false), (37, true), (26, true), (104, true), (31, false), (108, true), (26, false), (104, false), (108, false), (37, false), (78, false), (110, false), (31, true), (40, true), (90, true), (54, true), (22, true), (54, false), (46, true), (46, false), (23, true), (15, true), (109, true), (75, true), (75, false), (23, false), (109, false), (90, false), (22, false), (105, true), (39, true), (39, false), (31, false), (15, false), (105, false), (55, true), (91, true), (55, false), (68, true), (91, false), (68, false), (73, true), (64, true), (77, true), (77, false), (98, true), (41, true), (80, true), (63, true), (41, false), (61, true), (61, false), (63, false), (40, false), (17, true), (80, false), (117, true), (11, true), (113, true), (30, true), (109, true), (44, true), (93, true), (17, false), (93, false), (71, true), (104, true), (66, true), (11, false), (94, true), (74, true), (114, true), (92, true), (114, false), (117, false), (23, true), (83, true), (98, false), (42, true), (103, true), (51, true), (104, false), (64, false), (30, false), (15, true), (66, false), (60, true), (22, true), (72, true), (73, false), (48, true), (74, false), (54, true), (10, true), (83, false), (39, true), (99, true), (61, true), (40, true), (48, false), (103, false), (73, true), (10, false), (105, true), (68, true), (83, true), (39, false), (92, false), (73, false), (94, false), (54, false), (111, true), (60, false), (74, true), (109, false), (41, true), (72, false), (94, true), (117, true), (61, false), (74, false), (62, true), (22, false), (71, false), (38, true), (101, true), (53, true), (59, true), (42, false), (22, true), (66, true), (38, false), (40, false), (60, true), (114, true), (62, false), (101, false), (111, false), (99, false), (94, false), (34, true), (97, true), (63, true), (45, true), (34, false), (92, true), (14, true), (59, false), (92, false), (117, false), (114, false), (89, true), (45, false), (83, false), (76, true), (15, false), (76, false), (113, false), (118, true), (53, false), (116, true), (51, false), (116, false), (25, true), (89, false), (14, false), (22, false), (90, true), (78, true), (68, false), (47, true), (36, true), (23, false), (25, false), (60, false), (118, false), (25, true), (56, true), (52, true), (63, false), (107, true), (66, false), (56, false), (13, true), (36, false), (41, false), (112, true), (112, false), (97, false), (13, false), (90, false), (25, false), (47, false), (23, true), (107, false), (105, false), (23, false), (44, false), (52, false), (93, true), (60, true), (53, true), (60, false), (78, false), (57, true), (57, false), (93, false), (53, false), (17, true), (50, true), (80, true), (35, true), (116, true), (116, false), (35, false), (29, true), (43, true), (43, false), (49, true), (80, false), (106, true), (62, true), (29, false), (32, true), (31, true), (75, true), (66, true), (42, true), (31, false), (107, true), (46, true), (19, true), (50, false), (20, true), (46, false), (42, false), (107, false), (13, true), (33, true), (17, false), (103, true), (32, false), (49, false), (96, true), (19, false), (25, true), (96, false), (86, true), (26, true), (86, false), (25, false), (103, false), (66, false), (106, false), (75, false), (65, true), (33, false), (103, true), (26, false), (75, true), (62, false), (75, false), (13, false), (65, false), (103, false), (50, true), (52, true), (116, true), (51, true), (53, true), (52, false), (53, false), (102, true), (116, false), (102, false), (50, false), (62, true), (13, true), (35, true), (20, false), (15, true), (18, true), (19, true), (22, true), (29, true), (62, false), (29, false), (15, false), (35, false), (18, false), (63, true), (14, true), (102, true), (102, false), (94, true), (19, false), (117, true), (87, true), (94, false), (63, false), (94, true), (13, false), (51, false), (94, false), (103, true), (103, false), (87, false), (20, true), (18, true), (87, true), (101, true), (101, false), (14, false), (87, false), (20, false), (22, false), (18, false), (82, true), (28, true), (117, false), (28, false), (93, true), (97, true), (82, false), (86, true), (97, false), (110, true), (86, false), (79, true), (110, false), (101, true), (103, true), (12, true), (35, true), (79, false), (12, false), (93, false), (103, false), (39, true), (11, true), (10, true), (33, true), (35, false), (61, true), (59, true), (55, true), (66, true), (41, true), (61, false), (39, false), (35, true), (55, false), (41, false), (83, true), (119, true), (51, true), (70, true), (98, true), (47, true), (41, true), (11, false), (83, false), (10, false), (70, false), (49, true), (49, false), (33, false), (63, true), (41, false), (59, false), (79, true), (24, true), (58, true), (111, true), (54, true), (119, false), (99, true), (53, true), (51, false), (98, false), (79, false), (35, false), (28, true), (53, false), (47, false), (97, true), (66, false), (67, true), (54, false), (106, true), (24, false), (48, true), (32, true), (111, false), (106, false), (59, true), (18, true), (48, false), (38, true), (101, false), (32, false), (63, false), (58, false), (34, true), (44, true), (67, false), (76, true), (34, false), (74, true), (74, false), (99, false), (75, true), (100, true), (32, true), (35, true), (100, false), (95, true), (119, true), (76, false), (45, true), (38, false), (18, false), (67, true), (24, true), (26, true), (13, true), (35, false), (76, true), (45, false), (50, true), (24, false), (79, true), (79, false), (67, false), (29, true), (28, false), (13, false), (50, false), (68, true), (83, true), (89, true), (25, true), (95, false), (97, false), (80, true), (68, false), (43, true), (44, false), (103, true), (76, false), (89, false), (98, true), (116, true), (32, false), (119, false), (80, false), (114, true), (26, false), (75, false), (45, true), (114, false), (107, true), (116, false), (25, false), (58, true), (83, false), (58, false), (29, false), (45, false), (60, true), (98, false), (103, false), (60, false), (43, false), (34, true), (34, false)] - - if randomOperations.isEmpty { - var currentIds: [Int32] = [] - for _ in 0 ..< 500 { - let isAdd = arc4random_uniform(10) < 5 - if isAdd || currentIds.isEmpty { - let insertId = Int32(10 + arc4random_uniform(110)) - if !currentIds.contains(insertId) { - currentIds.append(insertId) - currentIds.sort() - randomOperations.append((insertId, true)) - } - } else { - let removeIndex = Int(arc4random_uniform(UInt32(currentIds.count))) - randomOperations.append((currentIds[removeIndex], false)) - currentIds.remove(at: removeIndex) - } - } - print("randomOperations = \(randomOperations)") - } - - let operationSets: [[(Int32, Bool)]] = [ - randomOperations - ] - - for operationSetIndex in 0 ..< operationSets.count { - let operations = operationSets[operationSetIndex] - for halfLimit in [3, 4, 5, 6, 7, 200] { - for position in 10 ... 110 { - removeAllMessages() - - var testIds: [MessageId.Id] = [] - let state = HistoryViewState(postbox: self.postbox!, inputAnchor: .index(MessageIndex(id: MessageId(peerId: peerId, namespace: namespace, id: Int32(position)), timestamp: Int32(position))), tag: nil, statistics: [], halfLimit: halfLimit, locations: .single(peerId)) - switch state { - case let .loaded(loadedState): - for operationIndex in 0 ..< operations.count { - let (itemId, isAdd) = operations[operationIndex] - if isAdd { - if !testIds.contains(itemId) { - testIds.append(itemId) - testIds.sort() - } else { - assertionFailure() - } - } else { - if let currentIndex = testIds.firstIndex(of: itemId) { - testIds.remove(at: currentIndex) - } else { - assertionFailure() - } - } - - let messageId = MessageId(peerId: peerId, namespace: namespace, id: itemId) - if isAdd { - let stableId = addMessage(Int32(itemId), Int32(itemId)) - let attributesData = ReadBuffer(data: Data()) - let _ = loadedState.add(entry: .IntermediateMessageEntry(IntermediateMessage(stableId: stableId, stableVersion: 0, id: messageId, globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: itemId, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, authorId: nil, text: "", attributesData: attributesData, embeddedMediaData: attributesData, referencedMedia: []), nil, nil)) - } else { - removeMessage(itemId) - let _ = loadedState.remove(index: MessageIndex(id: messageId, timestamp: itemId)) - } - - let entries = loadedState.completeAndSample(postbox: self.postbox!).entries - let ids = entries.map({ $0.message.id.id }) - - let clippedTestIds: [Int32] - if let index = testIds.firstIndex(where: { $0 > Int32(position) }), index >= 0 { - clippedTestIds = extract(from: testIds, aroundIndex: index - 1, halfLimit: halfLimit) - } else { - if halfLimit >= testIds.count { - clippedTestIds = testIds - } else { - clippedTestIds = Array(testIds.dropFirst(testIds.count - halfLimit)) - } - } - - XCTAssert(ids == clippedTestIds, "\(ids) != \(clippedTestIds)") - } - case .loading: - XCTAssert(false) - } - } - } - } - } - - func testLoadInitialHole() { - addHole(1 ... 1000, space: .everywhere) - var state = HistoryViewState(postbox: self.postbox!, inputAnchor: .message(MessageId(peerId: peerId, namespace: namespace, id: Int32(100))), tag: nil, statistics: [], halfLimit: 10, locations: .single(peerId)) - switch state { - case .loaded: - XCTAssert(false) - case let .loading(loadingState): - let sampledResult = loadingState.checkAndSample(postbox: self.postbox!) - switch sampledResult { - case .ready: - XCTAssert(false) - case let .loadHole(holePeerId, holeNamespace, holeTags, holeAroundId): - XCTAssert(holePeerId == peerId) - XCTAssert(holeNamespace == namespace) - XCTAssert(holeTags == nil) - XCTAssert(holeAroundId == 100) - - removeHole(20 ... 110, space: .everywhere) - let _ = loadingState.removeHole(space: PeerIdAndNamespace(peerId: peerId, namespace: namespace), range: 20 ... 110) - state = .loading(loadingState) - } - } - - switch state { - case .loaded: - XCTAssert(false) - case let .loading(loadingState): - let sampledResult = loadingState.checkAndSample(postbox: self.postbox!) - switch sampledResult { - case let .ready(anchor, holes): - switch anchor { - case .upperBound: - break - default: - XCTAssert(false) - } - state = .loaded(HistoryViewLoadedState(anchor: anchor, tag: nil, statistics: [], halfLimit: 10, locations: .single(peerId), postbox: self.postbox!, holes: holes)) - case .loadHole: - XCTAssert(false) - } - } - - switch state { - case let .loaded(loadedState): - let entries = loadedState.completeAndSample(postbox: self.postbox!).entries - XCTAssert(entries.isEmpty) - case .loading: - XCTAssert(false) - } - } - - func testEdgeHoles1() { - let _ = addMessage(100, 100) - let _ = addMessage(200, 200) - let _ = addMessage(300, 300) - - addHole(1 ... 100, space: .everywhere) - - let state = HistoryViewState(postbox: self.postbox!, inputAnchor: .upperBound, tag: nil, statistics: [], halfLimit: 10, locations: .single(peerId)) - guard case let .loaded(loadedState) = state else { - XCTAssert(false) - return - } - let sampledState = loadedState.completeAndSample(postbox: self.postbox!) - let ids = sampledState.entries.map({ $0.message.id.id }) - XCTAssert(ids == [200, 300]) - XCTAssert(sampledState.hole == SampledHistoryViewHole(peerId: peerId, namespace: namespace, tag: nil, indices: IndexSet(integersIn: 1 ... 100), startId: 100, endId: 1)) - XCTAssert(sampledState.holesToHigher == false) - XCTAssert(sampledState.holesToLower == true) - } - - func testEdgeHoles2() { - let _ = addMessage(100, 100) - let _ = addMessage(200, 200) - let _ = addMessage(300, 300) - - addHole(1 ... 99, space: .everywhere) - - let state = HistoryViewState(postbox: self.postbox!, inputAnchor: .upperBound, tag: nil, statistics: [], halfLimit: 10, locations: .single(peerId)) - guard case let .loaded(loadedState) = state else { - XCTAssert(false) - return - } - let sampledState = loadedState.completeAndSample(postbox: self.postbox!) - let ids = sampledState.entries.map({ $0.message.id.id }) - XCTAssert(ids == [100, 200, 300]) - XCTAssert(sampledState.hole == SampledHistoryViewHole(peerId: peerId, namespace: namespace, tag: nil, indices: IndexSet(integersIn: 1 ... 99), startId: 99, endId: 1)) - XCTAssert(sampledState.holesToHigher == false) - XCTAssert(sampledState.holesToLower == false) - } - - func testEdgeHoles3() { - let _ = addMessage(100, 100) - let _ = addMessage(200, 200) - let _ = addMessage(300, 300) - - addHole(300 ... 400, space: .everywhere) - - let state = HistoryViewState(postbox: self.postbox!, inputAnchor: .upperBound, tag: nil, statistics: [], halfLimit: 10, locations: .single(peerId)) - guard case let .loaded(loadedState) = state else { - XCTAssert(false) - return - } - let sampledState = loadedState.completeAndSample(postbox: self.postbox!) - let ids = sampledState.entries.map({ $0.message.id.id }) - XCTAssert(ids == []) - XCTAssert(sampledState.hole == SampledHistoryViewHole(peerId: peerId, namespace: namespace, tag: nil, indices: IndexSet(integersIn: 300 ... 400), startId: 400, endId: 1)) - XCTAssert(sampledState.holesToHigher == false) - XCTAssert(sampledState.holesToLower == true) - } - - func testEdgeHoles4() { - let _ = addMessage(100, 100) - let _ = addMessage(200, 200) - let _ = addMessage(300, 300) - - addHole(300 ... 400, space: .everywhere) - - let state = HistoryViewState(postbox: self.postbox!, inputAnchor: .message(MessageId(peerId: peerId, namespace: namespace, id: 200)), tag: nil, statistics: [], halfLimit: 10, locations: .single(peerId)) - guard case let .loaded(loadedState) = state else { - XCTAssert(false) - return - } - let sampledState = loadedState.completeAndSample(postbox: self.postbox!) - let ids = sampledState.entries.map({ $0.message.id.id }) - XCTAssert(ids == [100, 200]) - XCTAssert(sampledState.hole == SampledHistoryViewHole(peerId: peerId, namespace: namespace, tag: nil, indices: IndexSet(integersIn: 300 ... 400), startId: 300, endId: Int32.max - 1)) - XCTAssert(sampledState.holesToHigher == true) - XCTAssert(sampledState.holesToLower == false) - } -} diff --git a/submodules/Postbox/PostboxTests/OrderStatisticTreeTests.swift b/submodules/Postbox/PostboxTests/OrderStatisticTreeTests.swift deleted file mode 100644 index 203a02f621..0000000000 --- a/submodules/Postbox/PostboxTests/OrderStatisticTreeTests.swift +++ /dev/null @@ -1,151 +0,0 @@ -import Foundation - -import UIKit -import XCTest - -import Postbox -@testable import Postbox - -import SwiftSignalKit - -private let peerId = PeerId(namespace: 1, id: 1) -private let namespace: Int32 = 1 -private let authorPeerId = PeerId(namespace: 1, id: 6) - -private func ==(lhs: [Media], rhs: [Media]) -> Bool { - if lhs.count != rhs.count { - return false - } - - for i in 0 ..< lhs.count { - if !lhs[i].isEqual(to: rhs[i]) { - return false - } - } - return true -} - -private enum Entry: Equatable, CustomStringConvertible { - case Message(Int32, Int32, String, [Media], MessageFlags) - case Hole(Int32, Int32, Int32) - - var description: String { - switch self { - case let .Message(id, timestamp, text, media, flags): - return "Message(\(id), \(timestamp), \(text), \(media), \(flags))" - case let .Hole(min, max, timestamp): - return "Hole(\(min), \(max), \(timestamp))" - } - } -} - -private func ==(lhs: Entry, rhs: Entry) -> Bool { - switch lhs { - case let .Message(lhsId, lhsTimestamp, lhsText, lhsMedia, lhsFlags): - switch rhs { - case let .Message(rhsId, rhsTimestamp, rhsText, rhsMedia, rhsFlags): - return lhsId == rhsId && lhsTimestamp == rhsTimestamp && lhsText == rhsText && lhsMedia == rhsMedia && lhsFlags == rhsFlags - case .Hole: - return false - } - case let .Hole(lhsMin, lhsMax, lhsMaxTimestamp): - switch rhs { - case .Message: - return false - case let .Hole(rhsMin, rhsMax, rhsMaxTimestamp): - return lhsMin == rhsMin && lhsMax == rhsMax && lhsMaxTimestamp == rhsMaxTimestamp - } - } -} - -private extension MessageTags { - static let First = MessageTags(rawValue: 1 << 0) - static let Second = MessageTags(rawValue: 1 << 1) -} - -class OrderStatisticTreeTests: XCTestCase { - var valueBox: ValueBox? - var path: String? - - var peerTable: PeerTable? - var globalMessageIdsTable: GlobalMessageIdsTable? - var indexTable: MessageHistoryIndexTable? - var mediaTable: MessageMediaTable? - var historyTable: MessageHistoryTable? - var historyMetadataTable: MessageHistoryMetadataTable? - var unsentTable: MessageHistoryUnsentTable? - var tagsTable: MessageHistoryTagsTable? - var readStateTable: MessageHistoryReadStateTable? - var synchronizeReadStateTable: MessageHistorySynchronizeReadStateTable? - var globallyUniqueMessageIdsTable: MessageGloballyUniqueIdTable? - var globalTagsTable: GlobalMessageHistoryTagsTable? - var localTagsTable: LocalMessageHistoryTagsTable? - var textIndexTable: MessageHistoryTextIndexTable? - var messageHistoryTagsSummaryTable: MessageHistoryTagsSummaryTable? - var invalidatedMessageHistoryTagsSummaryTable: InvalidatedMessageHistoryTagsSummaryTable? - var pendingMessageActionsTable: PendingMessageActionsTable? - var pendingMessageActionsMetadataTable: PendingMessageActionsMetadataTable? - - override func setUp() { - super.setUp() - - var randomId: Int64 = 0 - arc4random_buf(&randomId, 8) - path = NSTemporaryDirectory() + "\(randomId)" - self.valueBox = SqliteValueBox(basePath: path!, queue: Queue.mainQueue()) - - let seedConfiguration = SeedConfiguration(initializeChatListWithHole: (topLevel: nil, groups: nil), initializeMessageNamespacesWithHoles: [], existingMessageTags: [.First, .Second], messageTagsWithSummary: [], existingGlobalMessageTags: [], peerNamespacesRequiringMessageTextIndex: [], peerSummaryCounterTags: { _ in PeerSummaryCounterTags(rawValue: 0) }, additionalChatListIndexNamespace: nil, chatMessagesNamespaces: Set()) - - self.globalMessageIdsTable = GlobalMessageIdsTable(valueBox: self.valueBox!, table: GlobalMessageIdsTable.tableSpec(5), namespace: namespace) - self.historyMetadataTable = MessageHistoryMetadataTable(valueBox: self.valueBox!, table: MessageHistoryMetadataTable.tableSpec(7)) - self.unsentTable = MessageHistoryUnsentTable(valueBox: self.valueBox!, table: MessageHistoryUnsentTable.tableSpec(8)) - self.invalidatedMessageHistoryTagsSummaryTable = InvalidatedMessageHistoryTagsSummaryTable(valueBox: self.valueBox!, table: MessageHistoryTagsSummaryTable.tableSpec(18)) - self.messageHistoryTagsSummaryTable = MessageHistoryTagsSummaryTable(valueBox: self.valueBox!, table: MessageHistoryTagsSummaryTable.tableSpec(15), invalidateTable: self.invalidatedMessageHistoryTagsSummaryTable!) - self.pendingMessageActionsMetadataTable = PendingMessageActionsMetadataTable(valueBox: self.valueBox!, table: PendingMessageActionsMetadataTable.tableSpec(16)) - self.pendingMessageActionsTable = PendingMessageActionsTable(valueBox: self.valueBox!, table: PendingMessageActionsTable.tableSpec(17), metadataTable: self.pendingMessageActionsMetadataTable!) - self.tagsTable = MessageHistoryTagsTable(valueBox: self.valueBox!, table: MessageHistoryTagsTable.tableSpec(9), seedConfiguration: seedConfiguration, summaryTable: messageHistoryTagsSummaryTable!) - self.indexTable = MessageHistoryIndexTable(valueBox: self.valueBox!, table: MessageHistoryIndexTable.tableSpec(1), globalMessageIdsTable: self.globalMessageIdsTable!, metadataTable: self.historyMetadataTable!, seedConfiguration: seedConfiguration) - self.mediaTable = MessageMediaTable(valueBox: self.valueBox!, table: MessageMediaTable.tableSpec(2)) - self.readStateTable = MessageHistoryReadStateTable(valueBox: self.valueBox!, table: MessageHistoryReadStateTable.tableSpec(10)) - self.synchronizeReadStateTable = MessageHistorySynchronizeReadStateTable(valueBox: self.valueBox!, table: MessageHistorySynchronizeReadStateTable.tableSpec(11)) - self.globallyUniqueMessageIdsTable = MessageGloballyUniqueIdTable(valueBox: self.valueBox!, table: MessageGloballyUniqueIdTable.tableSpec(12)) - self.globalTagsTable = GlobalMessageHistoryTagsTable(valueBox: self.valueBox!, table: GlobalMessageHistoryTagsTable.tableSpec(13)) - self.localTagsTable = LocalMessageHistoryTagsTable(valueBox: self.valueBox!, table: GlobalMessageHistoryTagsTable.tableSpec(20)) - self.textIndexTable = MessageHistoryTextIndexTable(valueBox: self.valueBox!, table: MessageHistoryTextIndexTable.tableSpec(14)) - - self.historyTable = MessageHistoryTable(valueBox: self.valueBox!, table: MessageHistoryTable.tableSpec(4), messageHistoryIndexTable: self.indexTable!, messageMediaTable: self.mediaTable!, historyMetadataTable: self.historyMetadataTable!, globallyUniqueMessageIdsTable: self.globallyUniqueMessageIdsTable!, unsentTable: self.unsentTable!, tagsTable: self.tagsTable!, globalTagsTable: self.globalTagsTable!, localTagsTable: self.localTagsTable!, readStateTable: self.readStateTable!, synchronizeReadStateTable: self.synchronizeReadStateTable!, textIndexTable: self.textIndexTable!, summaryTable: messageHistoryTagsSummaryTable!, pendingActionsTable: self.pendingMessageActionsTable!) - } - - override func tearDown() { - super.tearDown() - - self.historyTable = nil - self.indexTable = nil - self.mediaTable = nil - self.peerTable = nil - self.historyMetadataTable = nil - - self.valueBox = nil - let _ = try? FileManager.default.removeItem(atPath: path!) - self.path = nil - } - - func testOST() { - let access = BTreeAccess(order: 100) - var entries: [MessageOrderKey: Int32] = [:] - for i in 0 ..< 1000 { - let k = Int32(bitPattern: arc4random()) - let key = MessageOrderKey(timestamp: k, namespace: 0, id: 0) - let value = Int32(bitPattern: arc4random()) - access.insert(value, for: key) - entries[key] = value - } - for (key, value) in entries { - if let result = access.value(for: key) { - XCTAssert(result == value) - } else { - XCTAssert(false) - } - } - } -} diff --git a/submodules/Postbox/PostboxTests/OrderedItemListTableTests.swift b/submodules/Postbox/PostboxTests/OrderedItemListTableTests.swift deleted file mode 100644 index e9ecf666df..0000000000 --- a/submodules/Postbox/PostboxTests/OrderedItemListTableTests.swift +++ /dev/null @@ -1,156 +0,0 @@ -import Foundation - -import UIKit -import XCTest - -import Postbox -@testable import Postbox - -import SwiftSignalKit - -private struct TestListItem: OrderedItemListEntryContents { - init() { - - } - - init(decoder: PostboxDecoder) { - } - - func encode(_ encoder: PostboxEncoder) { - - } -} - -private let declaredEncodables: Void = { - declareEncodable(TestListItem.self, f: { TestListItem(decoder: $0) }) - return () -}() - -class OrderedItemListTableTests: XCTestCase { - var valueBox: ValueBox? - var path: String? - - var itemListTable: OrderedItemListTable? - var itemListIndexTable: OrderedItemListIndexTable? - - override func setUp() { - super.setUp() - - let _ = declaredEncodables - - var randomId: Int64 = 0 - arc4random_buf(&randomId, 8) - path = NSTemporaryDirectory() + "\(randomId)" - self.valueBox = SqliteValueBox(basePath: path!, queue: Queue.mainQueue()) - - self.itemListIndexTable = OrderedItemListIndexTable(valueBox: self.valueBox!, table: OrderedItemListIndexTable.tableSpec(0)) - self.itemListTable = OrderedItemListTable(valueBox: self.valueBox!, table: OrderedItemListTable.tableSpec(1), indexTable: self.itemListIndexTable!) - } - - override func tearDown() { - super.tearDown() - - self.valueBox = nil - let _ = try? FileManager.default.removeItem(atPath: path!) - self.path = nil - } - - private func expectIds(_ ids: [Int32]) { - let actualIds = self.itemListTable!.getItems(collectionId: 0).map { entry -> Int32 in - var value: Int32 = 0 - memcpy(&value, entry.id.memory, 4) - return value - } - XCTAssert(ids == actualIds, "Expected\n\(ids)\nActual\n\(actualIds)") - } - - private func setIds(_ ids: [Int32]) { - var operations: [Int32 : [OrderedItemListOperation]] = [:] - self.itemListTable!.replaceItems(collectionId: 0, items: ids.map { id -> OrderedItemListEntry in - var idValue: Int32 = id - let buffer = MemoryBuffer(memory: malloc(4)!, capacity: 4, length: 4, freeWhenDone: true) - memcpy(buffer.memory, &idValue, 4) - return OrderedItemListEntry(id: buffer, contents: TestListItem()) - }, operations: &operations) - XCTAssert(self.itemListTable!.testIntegrity(collectionId: 0), "Index integrity violated") - } - - private func addOrMoveId(_ id: Int32, _ maxCount: Int? = nil) { - var operations: [Int32 : [OrderedItemListOperation]] = [:] - var idValue: Int32 = id - let buffer = MemoryBuffer(memory: malloc(4)!, capacity: 4, length: 4, freeWhenDone: true) - memcpy(buffer.memory, &idValue, 4) - self.itemListTable!.addItemOrMoveToFirstPosition(collectionId: 0, item: OrderedItemListEntry(id: buffer, contents: TestListItem()), removeTailIfCountExceeds: maxCount, operations: &operations) - XCTAssert(self.itemListTable!.testIntegrity(collectionId: 0), "Index integrity violated") - } - - private func removeId(_ id: Int32) { - var operations: [Int32 : [OrderedItemListOperation]] = [:] - var idValue: Int32 = id - let buffer = MemoryBuffer(memory: malloc(4)!, capacity: 4, length: 4, freeWhenDone: true) - memcpy(buffer.memory, &idValue, 4) - self.itemListTable!.remove(collectionId: 0, itemId: buffer, operations: &operations) - XCTAssert(self.itemListTable!.testIntegrity(collectionId: 0), "Index integrity violated") - } - - func testEmpty() { - expectIds([]) - } - - func testSetIds() { - expectIds([]) - setIds([10, 20, 30]) - expectIds([10, 20, 30]) - setIds([40, 50, 60]) - expectIds([40, 50, 60]) - setIds([10, 20, 30, 40]) - expectIds([10, 20, 30, 40]) - } - - func testAddItem() { - expectIds([]) - addOrMoveId(10) - expectIds([10]) - addOrMoveId(20) - expectIds([20, 10]) - addOrMoveId(30) - expectIds([30, 20, 10]) - addOrMoveId(40, 4) - expectIds([40, 30, 20, 10]) - addOrMoveId(50, 4) - expectIds([50, 40, 30, 20]) - } - - func testMoveItem() { - expectIds([]) - setIds([10, 20, 30]) - expectIds([10, 20, 30]) - addOrMoveId(10) - expectIds([10, 20, 30]) - addOrMoveId(20) - expectIds([20, 10, 30]) - addOrMoveId(30) - expectIds([30, 20, 10]) - } - - func testRandom() { - expectIds([]) - var currentIds = Set() - for _ in 0 ..< 100 { - let op = arc4random_uniform(4) - switch op { - case 0 ... 2: - let id = Int32(bitPattern: arc4random_uniform(100)) - addOrMoveId(id, op == 0 ? 20 : nil) - currentIds.insert(id) - default: - if !currentIds.isEmpty { - let index = Int(Int32(bitPattern: arc4random_uniform(UInt32(bitPattern: Int32(currentIds.count))))) - let id = currentIds[currentIds.index(currentIds.startIndex, offsetBy: index)] - removeId(id) - currentIds.remove(id) - } - } - } - } -} diff --git a/submodules/Postbox/PostboxTests/RandomAccessResourceTests.swift b/submodules/Postbox/PostboxTests/RandomAccessResourceTests.swift deleted file mode 100644 index 5c4fe830a5..0000000000 --- a/submodules/Postbox/PostboxTests/RandomAccessResourceTests.swift +++ /dev/null @@ -1,414 +0,0 @@ -import Foundation - -import UIKit -import XCTest - -import Postbox -@testable import Postbox - -import SwiftSignalKit - -func randomFilePath() -> String { - return NSTemporaryDirectory() + "\(arc4random())\(arc4random())" -} - -/*class RandomAccessResourceTests: XCTestCase { - override func setUp() { - super.setUp() - - self.continueAfterFailure = false - } - - override func tearDown() { - super.tearDown() - } - - func testCompleteAligned() { - let path = randomFilePath() - - let size = 10 * 1024 * 1024 - //let size = 64 * 1024 - let sampleData = NSMutableData() - sampleData.length = size - arc4random_buf(sampleData.mutableBytes, size) - - var storeRange: (RandomAccessResourceStoreRange) -> Void = { _ in } - - let context = RandomAccessMediaResourceContext(path: path, size: size, fetchRange: { range in - let subdata = sampleData.subdata(with: NSRange(location: range.lowerBound, length: range.count)) - storeRange(RandomAccessResourceStoreRange(offset: range.lowerBound, data: subdata)) - return EmptyDisposable - }) - - storeRange = { [weak context] range in - context?.storeRanges([range]) - } - - var blocks: [Int] = [] - for i in 0 ..< context.blockCount { - blocks.append(i) - } - - var selectedRanges: [Range] = [] - - while !blocks.isEmpty { - let arrayOffset = Int(arc4random_uniform(UInt32(blocks.count))) - var rangeEnd = blocks[arrayOffset] - var arrayOffsetEnd = arrayOffset - for i in arrayOffset + 1 ..< blocks.count { - if blocks[i] == rangeEnd + 1 { - rangeEnd = blocks[i] - arrayOffsetEnd = i - } else { - break - } - } - - let arrayOffsetCount = arrayOffsetEnd + 1 - arrayOffset - let selectedArrayOffsetCount = Int(arc4random_uniform(UInt32(arrayOffsetCount + 1))) - let selectedArrayOffsetEnd = arrayOffset + max(0, selectedArrayOffsetCount - 1) - - let range = (blocks[arrayOffset] * context.blockSize) ..< ((blocks[selectedArrayOffsetEnd] + 1) * context.blockSize) - blocks.removeSubrange(arrayOffset ..< (selectedArrayOffsetEnd + 1)) - - selectedRanges.append(Range(range)) - } - - selectedRanges.removeAll() - - selectedRanges.append(10092544..<10354688); selectedRanges.append(1310720..<7274496); selectedRanges.append(7340032..<7798784); selectedRanges.append(1179648..<1310720); selectedRanges.append(524288..<851968); selectedRanges.append(8060928..<9895936); selectedRanges.append(1114112..<1179648); selectedRanges.append(7929856..<8060928); selectedRanges.append(196608..<524288); selectedRanges.append(131072..<196608); selectedRanges.append(7798784..<7864320); selectedRanges.append(917504..<1114112); selectedRanges.append(65536..<131072); selectedRanges.append(7274496..<7340032); selectedRanges.append(0..<65536); selectedRanges.append(7864320..<7929856); selectedRanges.append(851968..<917504); selectedRanges.append(9961472..<10027008); selectedRanges.append(10354688..<10420224); selectedRanges.append(10027008..<10092544); selectedRanges.append(10420224..<10485760); selectedRanges.append(9895936..<9961472) - - print("\(selectedRanges)") - - let testData = NSMutableData() - testData.length = size - for range in selectedRanges { - var invocationCount = 0 - let _ = context.addListenerForData(in: Range(range), mode: .Complete, updated: { subdata in - XCTAssert(subdata.count == range.count, "\(subdata.count) != \(range.count)") - invocationCount += 1 - subdata.withUnsafeBytes { (bytes: UnsafePointer) -> Void in - memcpy(testData.mutableBytes.advanced(by: range.lowerBound), bytes, range.count) - } - }) - let _ = context.addListenerForFetchedData(in: Range(range)) - XCTAssert(invocationCount == 1, "invocationCount != 1") - } - - XCTAssert(memcmp(testData.bytes, sampleData.bytes, size) == 0) - } - - func testCompleteUnaligned() { - let path = randomFilePath() - - let size = 10 * 1024 * 1024 + 123 - let sampleData = NSMutableData() - sampleData.length = size - arc4random_buf(sampleData.mutableBytes, size) - - var storeRange: (RandomAccessResourceStoreRange) -> Void = { _ in } - - let context = RandomAccessMediaResourceContext(path: path, size: size, fetchRange: { range in - let subdata = sampleData.subdata(with: NSRange(location: range.lowerBound, length: range.count)) - storeRange(RandomAccessResourceStoreRange(offset: range.lowerBound, data: subdata)) - return EmptyDisposable - }) - - storeRange = { [weak context] range in - context?.storeRanges([range]) - } - - var blocks: [Int] = [] - for i in 0 ..< context.blockCount { - blocks.append(i) - } - - var selectedRanges: [Range] = [] - - var dataOffset = 0 - while dataOffset < size { - let partSize = min(size - dataOffset, Int(arc4random_uniform(1024 * 1024))) - selectedRanges.append(dataOffset ..< (dataOffset + partSize)) - dataOffset += partSize - } - - print("\(selectedRanges)") - - let testData = NSMutableData() - testData.length = size - for range in selectedRanges { - let _ = context.addListenerForData(in: Range(range), mode: .Complete, updated: { subdata in - if range.count != subdata.count { - print("\(subdata.count)") - } - XCTAssert(subdata.count == range.count) - subdata.withUnsafeBytes { (bytes: UnsafePointer) -> Void in - memcpy(testData.mutableBytes.advanced(by: range.lowerBound), bytes, subdata.count) - } - }) - let _ = context.addListenerForFetchedData(in: Range(range)) - } - - XCTAssert(memcmp(testData.bytes, sampleData.bytes, size) == 0) - } - - /*func testIncrementalStoreCompleteSubscriptionAligned() { - let path = randomFilePath() - - let size = 10 * 1024 * 1024 - //let size = 64 * 1024 - let sampleData = NSMutableData() - sampleData.length = size - arc4random_buf(sampleData.mutableBytes, size) - - var storeRange: (RandomAccessResourceStoreRange) -> Void = { _ in } - - let context = RandomAccessMediaResourceContext(path: path, size: size, fetchRange: { range in - var offset = range.lowerBound - while offset < range.upperBound { - let subdata = sampleData.subdata(with: NSRange(location: offset, length: min(range.upperBound - offset, 64 * 1024))) - storeRange(RandomAccessResourceStoreRange(offset: range.lowerBound, data: subdata)) - - offset += 64 * 1024 - } - return EmptyDisposable - }) - - storeRange = { [weak context] range in - context?.storeRanges([range]) - } - - var blocks: [Int] = [] - for i in 0 ..< context.blockCount { - blocks.append(i) - } - - var selectedRanges: [Range] = [] - - while !blocks.isEmpty { - let arrayOffset = Int(arc4random_uniform(UInt32(blocks.count))) - var rangeEnd = blocks[arrayOffset] - var arrayOffsetEnd = arrayOffset - for i in arrayOffset + 1 ..< blocks.count { - if blocks[i] == rangeEnd + 1 { - rangeEnd = blocks[i] - arrayOffsetEnd = i - } else { - break - } - } - - let arrayOffsetCount = arrayOffsetEnd + 1 - arrayOffset - let selectedArrayOffsetCount = Int(arc4random_uniform(UInt32(arrayOffsetCount + 1))) - let selectedArrayOffsetEnd = arrayOffset + max(0, selectedArrayOffsetCount - 1) - - let range = (blocks[arrayOffset] * context.blockSize) ..< ((blocks[selectedArrayOffsetEnd] + 1) * context.blockSize) - blocks.removeSubrange(arrayOffset ..< (selectedArrayOffsetEnd + 1)) - - selectedRanges.append(Range(range)) - } - - print("\(selectedRanges)") - - let testData = NSMutableData() - testData.length = size - for range in selectedRanges { - var invocations = 0 - let _ = context.addListenerForData(in: Range(range), mode: .Complete, updated: { subdata in - XCTAssert(subdata.count == range.count) - subdata.withUnsafeBytes { (bytes: UnsafePointer) -> Void in - memcpy(testData.mutableBytes.advanced(by: range.lowerBound), bytes, range.count) - } - invocations += 1 - }) - let _ = context.addListenerForFetchedData(in: Range(range)) - //XCTAssert(invocations == 1) - } - - XCTAssert(memcmp(testData.bytes, sampleData.bytes, size) == 0) - }*/ - - func testIncrementalStoreCompleteSubscriptionUnaligned() { - let path = randomFilePath() - - let size = 10 * 1024 * 1024 + 123 - let sampleData = NSMutableData() - sampleData.length = size - arc4random_buf(sampleData.mutableBytes, size) - - var storeRange: (RandomAccessResourceStoreRange) -> Void = { _ in } - - let context = RandomAccessMediaResourceContext(path: path, size: size, fetchRange: { range in - var offset = range.lowerBound - while offset < range.upperBound { - let subdata = sampleData.subdata(with: NSRange(location: offset, length: min(range.upperBound - offset, 64 * 1024))) - storeRange(RandomAccessResourceStoreRange(offset: offset, data: subdata)) - - offset += 64 * 1024 - } - return EmptyDisposable - }) - - storeRange = { [weak context] range in - context?.storeRanges([range]) - } - - var selectedRanges: [Range] = [] - - var dataOffset = 0 - while dataOffset < size { - let partSize = min(size - dataOffset, Int(arc4random_uniform(1024 * 1024))) - selectedRanges.append(dataOffset ..< (dataOffset + partSize)) - dataOffset += partSize - } - - print("\(selectedRanges)") - - let testData = NSMutableData() - testData.length = size - for range in selectedRanges { - var invocations = 0 - let _ = context.addListenerForData(in: Range(range), mode: .Complete, updated: { subdata in - XCTAssert(subdata.count == range.count) - subdata.withUnsafeBytes { (bytes: UnsafePointer) -> Void in - memcpy(testData.mutableBytes.advanced(by: range.lowerBound), bytes, subdata.count) - } - invocations += 1 - }) - let _ = context.addListenerForFetchedData(in: Range(range)) - XCTAssert(invocations == 1) - } - - XCTAssert(memcmp(testData.bytes, sampleData.bytes, size) == 0) - } - - func testIncrementalStoreIncrementalSubscriptionAligned() { - let path = randomFilePath() - - let size = 10 * 1024 * 1024 - let sampleData = NSMutableData() - sampleData.length = size - arc4random_buf(sampleData.mutableBytes, size) - - var storeRange: (RandomAccessResourceStoreRange) -> Void = { _ in } - - let context = RandomAccessMediaResourceContext(path: path, size: size, fetchRange: { range in - var offset = range.lowerBound - while offset < range.upperBound { - let subdata = sampleData.subdata(with: NSRange(location: offset, length: min(range.upperBound - offset, 64 * 1024))) - storeRange(RandomAccessResourceStoreRange(offset: offset, data: subdata)) - - offset += 64 * 1024 - } - return EmptyDisposable - }) - - storeRange = { [weak context] range in - context?.storeRanges([range]) - } - - var blocks: [Int] = [] - for i in 0 ..< context.blockCount { - blocks.append(i) - } - - var selectedRanges: [Range] = [] - - while !blocks.isEmpty { - let arrayOffset = Int(arc4random_uniform(UInt32(blocks.count))) - var rangeEnd = blocks[arrayOffset] - var arrayOffsetEnd = arrayOffset - for i in arrayOffset + 1 ..< blocks.count { - if blocks[i] == rangeEnd + 1 { - rangeEnd = blocks[i] - arrayOffsetEnd = i - } else { - break - } - } - - let arrayOffsetCount = arrayOffsetEnd + 1 - arrayOffset - let selectedArrayOffsetCount = Int(arc4random_uniform(UInt32(arrayOffsetCount + 1))) - let selectedArrayOffsetEnd = arrayOffset + max(0, selectedArrayOffsetCount - 1) - - let range = (blocks[arrayOffset] * context.blockSize) ..< ((blocks[selectedArrayOffsetEnd] + 1) * context.blockSize) - blocks.removeSubrange(arrayOffset ..< (selectedArrayOffsetEnd + 1)) - - selectedRanges.append(Range(range)) - } - - print("\(selectedRanges)") - - let testData = NSMutableData() - testData.length = size - for range in selectedRanges { - var offset = 0 - let _ = context.addListenerForData(in: Range(range), mode: .Incremental, updated: { subdata in - subdata.withUnsafeBytes { (bytes: UnsafePointer) -> Void in - memcpy(testData.mutableBytes.advanced(by: range.lowerBound + offset), bytes, subdata.count) - } - offset += subdata.count - }) - let _ = context.addListenerForFetchedData(in: Range(range)) - XCTAssert(offset == range.count) - } - - XCTAssert(memcmp(testData.bytes, sampleData.bytes, size) == 0) - } - - func testIncrementalStoreIncrementalSubscriptionUnaligned() { - let path = randomFilePath() - - let size = 10 * 1024 * 1024 + 123 - let sampleData = NSMutableData() - sampleData.length = size - arc4random_buf(sampleData.mutableBytes, size) - - var storeRange: (RandomAccessResourceStoreRange) -> Void = { _ in } - - let context = RandomAccessMediaResourceContext(path: path, size: size, fetchRange: { range in - var offset = range.lowerBound - while offset < range.upperBound { - let subdata = sampleData.subdata(with: NSRange(location: offset, length: min(range.upperBound - offset, 64 * 1024))) - storeRange(RandomAccessResourceStoreRange(offset: offset, data: subdata)) - - offset += 64 * 1024 - } - return EmptyDisposable - }) - - storeRange = { [weak context] range in - context?.storeRanges([range]) - } - - var selectedRanges: [Range] = [] - - selectedRanges = [0..<615697, 615697..<1040801] - - var dataOffset = 1040801 - while dataOffset < size { - let partSize = min(size - dataOffset, Int(arc4random_uniform(1024 * 1024))) - selectedRanges.append(dataOffset ..< (dataOffset + partSize)) - dataOffset += partSize - } - - print("\(selectedRanges)") - - let testData = NSMutableData() - testData.length = size - for range in selectedRanges { - var offset = 0 - let _ = context.addListenerForData(in: Range(range), mode: .Incremental, updated: { subdata in - subdata.withUnsafeBytes { (bytes: UnsafePointer) -> Void in - memcpy(testData.mutableBytes.advanced(by: range.lowerBound + offset), bytes, subdata.count) - } - offset += subdata.count - }) - let _ = context.addListenerForFetchedData(in: Range(range)) - XCTAssert(offset == range.count) - } - - XCTAssert(memcmp(testData.bytes, sampleData.bytes, size) == 0) - } -} -*/ diff --git a/submodules/Postbox/PostboxTests/ReadStateTableTests.swift b/submodules/Postbox/PostboxTests/ReadStateTableTests.swift deleted file mode 100644 index fcff72477a..0000000000 --- a/submodules/Postbox/PostboxTests/ReadStateTableTests.swift +++ /dev/null @@ -1,293 +0,0 @@ -import Foundation - -import XCTest - -import Postbox -@testable import Postbox - -import SwiftSignalKit - -private let peerId = PeerId(namespace: 1, id: 1) -private let namespace: Int32 = 1 -private let authorPeerId = PeerId(namespace: 1, id: 6) - -private func ==(lhs: [Media], rhs: [Media]) -> Bool { - if lhs.count != rhs.count { - return false - } - - for i in 0 ..< lhs.count { - if !lhs[i].isEqual(to: rhs[i]) { - return false - } - } - return true -} - -private enum Entry: Equatable, CustomStringConvertible { - case Message(Int32, Int32, String, [Media], MessageFlags) - case Hole(Int32, Int32, Int32) - - var description: String { - switch self { - case let .Message(id, timestamp, text, media, flags): - return "Message(\(id), \(timestamp), \(text), \(media), \(flags))" - case let .Hole(min, max, timestamp): - return "Hole(\(min), \(max), \(timestamp))" - } - } -} - -private func ==(lhs: Entry, rhs: Entry) -> Bool { - switch lhs { - case let .Message(lhsId, lhsTimestamp, lhsText, lhsMedia, lhsFlags): - switch rhs { - case let .Message(rhsId, rhsTimestamp, rhsText, rhsMedia, rhsFlags): - return lhsId == rhsId && lhsTimestamp == rhsTimestamp && lhsText == rhsText && lhsMedia == rhsMedia && lhsFlags == rhsFlags - case .Hole: - return false - } - case let .Hole(lhsMin, lhsMax, lhsMaxTimestamp): - switch rhs { - case .Message: - return false - case let .Hole(rhsMin, rhsMax, rhsMaxTimestamp): - return lhsMin == rhsMin && lhsMax == rhsMax && lhsMaxTimestamp == rhsMaxTimestamp - } - } -} - -private extension MessageTags { - static let First = MessageTags(rawValue: 1 << 0) - static let Second = MessageTags(rawValue: 1 << 1) -} - -class ReadStateTableTests: XCTestCase { - var valueBox: ValueBox? - var path: String? - - var peerTable: PeerTable? - var globalMessageIdsTable: GlobalMessageIdsTable? - var indexTable: MessageHistoryIndexTable? - var mediaTable: MessageMediaTable? - var historyTable: MessageHistoryTable? - var historyMetadataTable: MessageHistoryMetadataTable? - var unsentTable: MessageHistoryUnsentTable? - var tagsTable: MessageHistoryTagsTable? - var readStateTable: MessageHistoryReadStateTable? - var synchronizeReadStateTable: MessageHistorySynchronizeReadStateTable? - var globallyUniqueMessageIdsTable: MessageGloballyUniqueIdTable? - var globalTagsTable: GlobalMessageHistoryTagsTable? - var localTagsTable: LocalMessageHistoryTagsTable? - var textIndexTable: MessageHistoryTextIndexTable? - var messageHistoryTagsSummaryTable: MessageHistoryTagsSummaryTable? - var invalidatedMessageHistoryTagsSummaryTable: InvalidatedMessageHistoryTagsSummaryTable? - var pendingMessageActionsTable: PendingMessageActionsTable? - var pendingMessageActionsMetadataTable: PendingMessageActionsMetadataTable? - - override func setUp() { - super.setUp() - - var randomId: Int64 = 0 - arc4random_buf(&randomId, 8) - path = NSTemporaryDirectory() + "\(randomId)" - self.valueBox = SqliteValueBox(basePath: path!, queue: Queue.mainQueue()) - - let seedConfiguration = SeedConfiguration(initializeChatListWithHole: (topLevel: nil, groups: nil), initializeMessageNamespacesWithHoles: [], existingMessageTags: [.First, .Second], messageTagsWithSummary: [], existingGlobalMessageTags: [], peerNamespacesRequiringMessageTextIndex: [], peerSummaryCounterTags: { _ in PeerSummaryCounterTags(rawValue: 0) }, additionalChatListIndexNamespace: nil, chatMessagesNamespaces: Set()) - - self.globalMessageIdsTable = GlobalMessageIdsTable(valueBox: self.valueBox!, table: GlobalMessageIdsTable.tableSpec(5), namespace: namespace) - self.historyMetadataTable = MessageHistoryMetadataTable(valueBox: self.valueBox!, table: MessageHistoryMetadataTable.tableSpec(7)) - self.unsentTable = MessageHistoryUnsentTable(valueBox: self.valueBox!, table: MessageHistoryUnsentTable.tableSpec(8)) - self.invalidatedMessageHistoryTagsSummaryTable = InvalidatedMessageHistoryTagsSummaryTable(valueBox: self.valueBox!, table: MessageHistoryTagsSummaryTable.tableSpec(18)) - self.messageHistoryTagsSummaryTable = MessageHistoryTagsSummaryTable(valueBox: self.valueBox!, table: MessageHistoryTagsSummaryTable.tableSpec(15), invalidateTable: self.invalidatedMessageHistoryTagsSummaryTable!) - self.pendingMessageActionsMetadataTable = PendingMessageActionsMetadataTable(valueBox: self.valueBox!, table: PendingMessageActionsMetadataTable.tableSpec(16)) - self.pendingMessageActionsTable = PendingMessageActionsTable(valueBox: self.valueBox!, table: PendingMessageActionsTable.tableSpec(17), metadataTable: self.pendingMessageActionsMetadataTable!) - self.tagsTable = MessageHistoryTagsTable(valueBox: self.valueBox!, table: MessageHistoryTagsTable.tableSpec(9), seedConfiguration: seedConfiguration, summaryTable: self.messageHistoryTagsSummaryTable!) - self.indexTable = MessageHistoryIndexTable(valueBox: self.valueBox!, table: MessageHistoryIndexTable.tableSpec(1), globalMessageIdsTable: self.globalMessageIdsTable!, metadataTable: self.historyMetadataTable!, seedConfiguration: seedConfiguration) - self.mediaTable = MessageMediaTable(valueBox: self.valueBox!, table: MessageMediaTable.tableSpec(2)) - self.readStateTable = MessageHistoryReadStateTable(valueBox: self.valueBox!, table: MessageHistoryReadStateTable.tableSpec(10)) - self.synchronizeReadStateTable = MessageHistorySynchronizeReadStateTable(valueBox: self.valueBox!, table: MessageHistorySynchronizeReadStateTable.tableSpec(11)) - self.globallyUniqueMessageIdsTable = MessageGloballyUniqueIdTable(valueBox: self.valueBox!, table: MessageGloballyUniqueIdTable.tableSpec(12)) - self.globalTagsTable = GlobalMessageHistoryTagsTable(valueBox: self.valueBox!, table: GlobalMessageHistoryTagsTable.tableSpec(13)) - self.localTagsTable = LocalMessageHistoryTagsTable(valueBox: self.valueBox!, table: GlobalMessageHistoryTagsTable.tableSpec(19)) - self.textIndexTable = MessageHistoryTextIndexTable(valueBox: self.valueBox!, table: MessageHistoryTextIndexTable.tableSpec(14)) - self.historyTable = MessageHistoryTable(valueBox: self.valueBox!, table: MessageHistoryTable.tableSpec(4), messageHistoryIndexTable: self.indexTable!, messageMediaTable: self.mediaTable!, historyMetadataTable: self.historyMetadataTable!, globallyUniqueMessageIdsTable: self.globallyUniqueMessageIdsTable!, unsentTable: self.unsentTable!, tagsTable: self.tagsTable!, globalTagsTable: self.globalTagsTable!, localTagsTable: self.localTagsTable!, readStateTable: self.readStateTable!, synchronizeReadStateTable: self.synchronizeReadStateTable!, textIndexTable: self.textIndexTable!, summaryTable: self.messageHistoryTagsSummaryTable!, pendingActionsTable: self.pendingMessageActionsTable!) - } - - override func tearDown() { - super.tearDown() - - self.historyTable = nil - self.indexTable = nil - self.mediaTable = nil - self.peerTable = nil - self.historyMetadataTable = nil - - self.valueBox = nil - let _ = try? FileManager.default.removeItem(atPath: path!) - self.path = nil - } - - private func addMessage(_ id: Int32, _ timestamp: Int32, _ text: String = "", _ media: [Media] = [], _ flags: StoreMessageFlags = [], _ tags: MessageTags = []) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - var updatedMedia: [MediaId : Media?] = [:] - - let _ = self.historyTable!.addMessages(messages: [StoreMessage(id: MessageId(peerId: peerId, namespace: namespace, id: id), globallyUniqueId: nil, groupingKey: nil, timestamp: timestamp, flags: flags, tags: tags, globalTags: [], localTags: [], forwardInfo: nil, authorId: authorPeerId, text: text, attributes: [], media: media)], location: .Random, operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, localTagsOperations: &localTagsOperations, processMessages: nil) - } - - private func updateMessage(_ previousId: Int32, _ id: Int32, _ timestamp: Int32, _ text: String = "", _ media: [Media] = [], _ flags: StoreMessageFlags, _ tags: MessageTags) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - var updatedMedia: [MediaId : Media?] = [:] - - self.historyTable!.updateMessage(MessageId(peerId: peerId, namespace: namespace, id: previousId), message: StoreMessage(id: MessageId(peerId: peerId, namespace: namespace, id: id), globallyUniqueId: nil, groupingKey: nil, timestamp: timestamp, flags: flags, tags: tags, globalTags: [], localTags: [], forwardInfo: nil, authorId: authorPeerId, text: text, attributes: [], media: media), operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, localTagsOperations: &localTagsOperations) - } - - private func addHole(_ id: Int32) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - var updatedMedia: [MediaId : Media?] = [:] - - self.historyTable!.addHoles([MessageId(peerId: peerId, namespace: namespace, id: id)], operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, localTagsOperations: &localTagsOperations) - } - - private func removeMessages(_ ids: [Int32]) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var unsentMessageOperations: [IntermediateMessageHistoryUnsentOperation] = [] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - var globalTagsOperations: [GlobalMessageHistoryTagsOperation] = [] - var pendingActionsOperations: [PendingMessageActionsOperation] = [] - var updatedMessageActionsSummaries: [PendingMessageActionsSummaryKey: Int32] = [:] - var updatedMessageTagSummaries: [MessageHistoryTagsSummaryKey: MessageHistoryTagNamespaceSummary] = [:] - var invalidateMessageTagSummaries: [InvalidatedMessageHistoryTagsSummaryEntryOperation] = [] - var localTagsOperations: [IntermediateMessageHistoryLocalTagsOperation] = [] - var updatedMedia: [MediaId : Media?] = [:] - - self.historyTable!.removeMessages(ids.map({ MessageId(peerId: peerId, namespace: namespace, id: $0) }), operationsByPeerId: &operationsByPeerId, updatedMedia: &updatedMedia, unsentMessageOperations: &unsentMessageOperations, updatedPeerReadStateOperations: &updatedPeerReadStateOperations, globalTagsOperations: &globalTagsOperations, pendingActionsOperations: &pendingActionsOperations, updatedMessageActionsSummaries: &updatedMessageActionsSummaries, updatedMessageTagSummaries: &updatedMessageTagSummaries, invalidateMessageTagSummaries: &invalidateMessageTagSummaries, localTagsOperations: &localTagsOperations) - } - - private func expectApplyRead(_ messageId: Int32, _ expectInvalidate: Bool) { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - self.historyTable!.applyIncomingReadMaxId(MessageId(peerId: peerId, namespace: namespace, id: messageId), operationsByPeerId: &operationsByPeerId, updatedPeerReadStateOperations: &updatedPeerReadStateOperations) - - let invalidated = updatedPeerReadStateOperations.count != 0 - if expectInvalidate != invalidated { - XCTFail("applyRead: invalidated expected \(expectInvalidate), actual: \(invalidated)") - } - } - - private func expectReadState(_ maxReadId: Int32, _ maxKnownId: Int32, _ count: Int32, _ markedUnread: Bool) { - if let state = self.readStateTable!.getCombinedState(peerId)?.states.first?.1 { - switch state { - case let .idBased(maxIncomingReadId, maxOutgoingReadId, stateMaxKnownId, stateCount, stateMarkedUnread): - if maxIncomingReadId != maxReadId || stateMaxKnownId != maxKnownId || stateCount != count || stateMarkedUnread != markedUnread { - XCTFail("Expected\nmaxIncomingReadId: \(maxReadId), maxKnownId: \(maxKnownId), count: \(count) markedUnread: \(markedUnread)\nActual\nmaxIncomingReadId: \(maxIncomingReadId), maxKnownId: \(stateMaxKnownId), count: \(stateCount), markedUnread: \(stateMarkedUnread)") - } - case .indexBased: - XCTFail() - } - } else { - XCTFail("Expected\nmaxReadId: \(maxReadId), maxKnownId: \(maxKnownId), count: \(count)\nActual\nnil") - } - } - - func testResetState() { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - self.historyTable!.resetIncomingReadStates([peerId: [namespace: .idBased(maxIncomingReadId: 100, maxOutgoingReadId: 0, maxKnownId: 120, count: 130, markedUnread: false)]], operationsByPeerId: &operationsByPeerId, updatedPeerReadStateOperations: &updatedPeerReadStateOperations) - - expectReadState(100, 120, 130, false) - } - - func testAddIncomingBeforeKnown() { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - self.historyTable!.resetIncomingReadStates([peerId: [namespace: .idBased(maxIncomingReadId: 100, maxOutgoingReadId: 0, maxKnownId: 120, count: 130, markedUnread: false)]], operationsByPeerId: &operationsByPeerId, updatedPeerReadStateOperations: &updatedPeerReadStateOperations) - - self.addMessage(99, 99, "", [], [.Incoming]) - - expectReadState(100, 120, 130, false) - } - - func testAddIncomingAfterKnown() { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - self.historyTable!.resetIncomingReadStates([peerId: [namespace: .idBased(maxIncomingReadId: 100, maxOutgoingReadId: 0, maxKnownId: 120, count: 130, markedUnread: false)]], operationsByPeerId: &operationsByPeerId, updatedPeerReadStateOperations: &updatedPeerReadStateOperations) - - self.addMessage(130, 130, "", [], [.Incoming]) - - expectReadState(100, 120, 131, false) - } - - func testApplyReadThenAddIncoming() { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - self.historyTable!.resetIncomingReadStates([peerId: [namespace: .idBased(maxIncomingReadId: 100, maxOutgoingReadId: 0, maxKnownId: 100, count: 0, markedUnread: false)]], operationsByPeerId: &operationsByPeerId, updatedPeerReadStateOperations: &updatedPeerReadStateOperations) - - self.expectApplyRead(200, false) - - self.addMessage(130, 130, "", [], [.Incoming]) - - expectReadState(200, 100, 0, false) - } - - func testApplyAddIncomingThenRead() { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - self.historyTable!.resetIncomingReadStates([peerId: [namespace: .idBased(maxIncomingReadId: 100, maxOutgoingReadId: 0, maxKnownId: 100, count: 0, markedUnread: false)]], operationsByPeerId: &operationsByPeerId, updatedPeerReadStateOperations: &updatedPeerReadStateOperations) - - self.addMessage(130, 130, "", [], [.Incoming]) - - expectReadState(100, 100, 1, false) - - self.expectApplyRead(200, false) - - expectReadState(200, 100, 0, false) - } - - func testIgnoreOldRead() { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - self.historyTable!.resetIncomingReadStates([peerId: [namespace: .idBased(maxIncomingReadId: 100, maxOutgoingReadId: 0, maxKnownId: 100, count: 0, markedUnread: false)]], operationsByPeerId: &operationsByPeerId, updatedPeerReadStateOperations: &updatedPeerReadStateOperations) - - self.expectApplyRead(90, false) - - expectReadState(100, 100, 0, false) - } - - func testInvalidateReadHole() { - var operationsByPeerId: [PeerId: [MessageHistoryOperation]] = [:] - var updatedPeerReadStateOperations: [PeerId: PeerReadStateSynchronizationOperation?] = [:] - self.historyTable!.resetIncomingReadStates([peerId: [namespace: .idBased(maxIncomingReadId: 100, maxOutgoingReadId: 0, maxKnownId: 100, count: 0, markedUnread: false)]], operationsByPeerId: &operationsByPeerId, updatedPeerReadStateOperations: &updatedPeerReadStateOperations) - - self.addMessage(200, 200) - self.addHole(1) - - self.expectApplyRead(200, true) - - expectReadState(200, 100, 0, false) - } -} diff --git a/submodules/Postbox/Postbox_Xcode.xcodeproj/project.pbxproj b/submodules/Postbox/Postbox_Xcode.xcodeproj/project.pbxproj deleted file mode 100644 index d9dd54ee05..0000000000 --- a/submodules/Postbox/Postbox_Xcode.xcodeproj/project.pbxproj +++ /dev/null @@ -1,2903 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 9F291C9B2264CFCC00C66267 /* (null) in Sources */ = {isa = PBXBuildFile; }; - 9F5B6E762011449F00C58B2A /* PostboxLogging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0ECCB8E1FE9EB5500609802 /* PostboxLogging.swift */; }; - C20EB2A31F7179DC00DD3A57 /* PeerNotificationSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AE3EBB1F68261B0069BC90 /* PeerNotificationSettingsView.swift */; }; - C25B56FE1F431C3300581D02 /* MessageHistoryTagsSummaryTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D070479F1F3CE16500F6A8D4 /* MessageHistoryTagsSummaryTable.swift */; }; - C2A315BC1E2E730400D89000 /* PeerOperationLogTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AD23261E194D1C00A7089A /* PeerOperationLogTable.swift */; }; - C2A315BD1E2E732000D89000 /* PeerOperationLogMetadataTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AD23281E196B6400A7089A /* PeerOperationLogMetadataTable.swift */; }; - C2A315BE1E2E733900D89000 /* PeerMergedOperationLogIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D010B6191E1E463900C3E282 /* PeerMergedOperationLogIndexTable.swift */; }; - C2A315BF1E2E733900D89000 /* PeerMergedOperationLogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F019FC1E1DA0CC00F05AB3 /* PeerMergedOperationLogView.swift */; }; - C2AC9C131E1E5D200085C7DE /* UnreadMessageCountsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A18D661E16874D004C6734 /* UnreadMessageCountsView.swift */; }; - D000CADA22006C6C0011B15D /* SharedAccountMediaManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D000CAD922006C6C0011B15D /* SharedAccountMediaManager.swift */; }; - D000CADB22006C6C0011B15D /* SharedAccountMediaManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D000CAD922006C6C0011B15D /* SharedAccountMediaManager.swift */; }; - D001388620BD942B007C9721 /* PostboxUpgrade_16to17.swift in Sources */ = {isa = PBXBuildFile; fileRef = D001388520BD942B007C9721 /* PostboxUpgrade_16to17.swift */; }; - D001388720BD942B007C9721 /* PostboxUpgrade_16to17.swift in Sources */ = {isa = PBXBuildFile; fileRef = D001388520BD942B007C9721 /* PostboxUpgrade_16to17.swift */; }; - D003E4E61B38DBDB00C22CBC /* MessageHistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D003E4E51B38DBDB00C22CBC /* MessageHistoryView.swift */; }; - D0079F5A1D592E8B00A27A2C /* ContactTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0079F591D592E8B00A27A2C /* ContactTable.swift */; }; - D0079F631D5A242500A27A2C /* ContactPeerIdsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0079F621D5A242500A27A2C /* ContactPeerIdsView.swift */; }; - D0079F651D5A457A00A27A2C /* ContactPeersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0079F641D5A457A00A27A2C /* ContactPeersView.swift */; }; - D0079F6B1D5B3AAB00A27A2C /* PeerNameIndexRepresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0079F6A1D5B3AAB00A27A2C /* PeerNameIndexRepresentation.swift */; }; - D00C7CD41E365C4E0080C3D5 /* PeerChatListInclusion.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00C7CD31E365C4E0080C3D5 /* PeerChatListInclusion.swift */; }; - D00C7CD51E365C4E0080C3D5 /* PeerChatListInclusion.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00C7CD31E365C4E0080C3D5 /* PeerChatListInclusion.swift */; }; - D00C7CE31E37861C0080C3D5 /* MessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00C7CE21E37861C0080C3D5 /* MessageView.swift */; }; - D00C7CE41E37861C0080C3D5 /* MessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00C7CE21E37861C0080C3D5 /* MessageView.swift */; }; - D00EED1E1C81F28D00341DFF /* MessageHistoryTagsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00EED1D1C81F28D00341DFF /* MessageHistoryTagsTable.swift */; }; - D0105D6B218362F2007C04A7 /* TempBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0105D6A218362F2007C04A7 /* TempBox.swift */; }; - D0105D6C218362F2007C04A7 /* TempBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0105D6A218362F2007C04A7 /* TempBox.swift */; }; - D010B61A1E1E463900C3E282 /* PeerMergedOperationLogIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D010B6191E1E463900C3E282 /* PeerMergedOperationLogIndexTable.swift */; }; - D0119CAD20C9E7A100895300 /* PostboxUpgrade_17to18.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0119CAC20C9E7A100895300 /* PostboxUpgrade_17to18.swift */; }; - D0119CAE20C9E7A100895300 /* PostboxUpgrade_17to18.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0119CAC20C9E7A100895300 /* PostboxUpgrade_17to18.swift */; }; - D015E05C2263BB3B00CB9E8A /* PostboxUpgrade_22to23.swift in Sources */ = {isa = PBXBuildFile; fileRef = D015E05B2263BB3B00CB9E8A /* PostboxUpgrade_22to23.swift */; }; - D015E05D2263BB3B00CB9E8A /* PostboxUpgrade_22to23.swift in Sources */ = {isa = PBXBuildFile; fileRef = D015E05B2263BB3B00CB9E8A /* PostboxUpgrade_22to23.swift */; }; - D015E0602265D42400CB9E8A /* GroupMessageStatsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D015E05F2265D42400CB9E8A /* GroupMessageStatsTable.swift */; }; - D015E0612265D42400CB9E8A /* GroupMessageStatsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D015E05F2265D42400CB9E8A /* GroupMessageStatsTable.swift */; }; - D018BE55218B9AA900C02DDC /* TimeBasedCleanup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D018BE54218B9AA900C02DDC /* TimeBasedCleanup.swift */; }; - D018BE56218B9AA900C02DDC /* TimeBasedCleanup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D018BE54218B9AA900C02DDC /* TimeBasedCleanup.swift */; }; - D019B1CF1E2E770700F80DB3 /* MessageGloballyUniqueIdTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D019B1CE1E2E770700F80DB3 /* MessageGloballyUniqueIdTable.swift */; }; - D01BAA551ED1D70C00295217 /* ManagedFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01BAA541ED1D70C00295217 /* ManagedFile.swift */; }; - D01BAA561ED1D70C00295217 /* ManagedFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01BAA541ED1D70C00295217 /* ManagedFile.swift */; }; - D01C7EDE1EF73F71008305F1 /* MessageHistoryTextIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C7EDD1EF73F71008305F1 /* MessageHistoryTextIndexTable.swift */; }; - D01C7EDF1EF73F71008305F1 /* MessageHistoryTextIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C7EDD1EF73F71008305F1 /* MessageHistoryTextIndexTable.swift */; }; - D01C7F071EFC1ED3008305F1 /* UnorderedItemListTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C7F061EFC1ED3008305F1 /* UnorderedItemListTable.swift */; }; - D01C7F081EFC1ED3008305F1 /* UnorderedItemListTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C7F061EFC1ED3008305F1 /* UnorderedItemListTable.swift */; }; - D01E79E82248F661005237FE /* PostboxUpgrade_19to20.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01E79E72248F661005237FE /* PostboxUpgrade_19to20.swift */; }; - D01E79E92248F661005237FE /* PostboxUpgrade_19to20.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01E79E72248F661005237FE /* PostboxUpgrade_19to20.swift */; }; - D01F7D9B1CBEC390008765C9 /* MessageHistorySynchronizeReadStateTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01F7D9A1CBEC390008765C9 /* MessageHistorySynchronizeReadStateTable.swift */; }; - D01F7D9D1CBF8586008765C9 /* SynchronizePeerReadStatesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01F7D9C1CBF8586008765C9 /* SynchronizePeerReadStatesView.swift */; }; - D021E0D41DB4FAE100C6B04F /* ItemCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021E0D31DB4FAE100C6B04F /* ItemCollection.swift */; }; - D021E0D61DB4FCFC00C6B04F /* ItemCollectionInfoTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021E0D51DB4FCFC00C6B04F /* ItemCollectionInfoTable.swift */; }; - D021E0D81DB4FD1300C6B04F /* ItemCollectionItemTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021E0D71DB4FD1300C6B04F /* ItemCollectionItemTable.swift */; }; - D021E0DC1DB5237C00C6B04F /* ItemCollectionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021E0DB1DB5237C00C6B04F /* ItemCollectionsView.swift */; }; - D021FC262024B83700C34AB7 /* FileSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021FC252024B83700C34AB7 /* FileSize.swift */; }; - D021FC272024B83700C34AB7 /* FileSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021FC252024B83700C34AB7 /* FileSize.swift */; }; - D03120F81DA53FF4006A2A60 /* PeerPresenceTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03120F71DA53FF4006A2A60 /* PeerPresenceTable.swift */; }; - D03120FA1DA540F0006A2A60 /* CachedPeerData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03120F91DA540F0006A2A60 /* CachedPeerData.swift */; }; - D03120FC1DA55427006A2A60 /* PeerNotificationSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03120FB1DA55427006A2A60 /* PeerNotificationSettings.swift */; }; - D03120FE1DA562E9006A2A60 /* CachedPeerDataTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03120FD1DA562E9006A2A60 /* CachedPeerDataTable.swift */; }; - D03121001DA579A0006A2A60 /* PeerNotificationSettingsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03120FF1DA579A0006A2A60 /* PeerNotificationSettingsTable.swift */; }; - D03229EE1E6B33FD0000AF9C /* SqliteInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03229ED1E6B33FD0000AF9C /* SqliteInterface.swift */; }; - D03229EF1E6B33FD0000AF9C /* SqliteInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03229ED1E6B33FD0000AF9C /* SqliteInterface.swift */; }; - D033871F223554DE007A2CE4 /* HoleOperationsVector1.json in Resources */ = {isa = PBXBuildFile; fileRef = D033871E223554DE007A2CE4 /* HoleOperationsVector1.json */; }; - D03387212236C239007A2CE4 /* HoleOperationsVector2.json in Resources */ = {isa = PBXBuildFile; fileRef = D03387202236C239007A2CE4 /* HoleOperationsVector2.json */; }; - D03387522242E32B007A2CE4 /* PostboxUpgrade_18to19.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03387512242E32A007A2CE4 /* PostboxUpgrade_18to19.swift */; }; - D03387532242E32B007A2CE4 /* PostboxUpgrade_18to19.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03387512242E32A007A2CE4 /* PostboxUpgrade_18to19.swift */; }; - D033A6F71C73D512006A2EAB /* MessageHistoryUnsentTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D033A6F61C73D512006A2EAB /* MessageHistoryUnsentTable.swift */; }; - D033A6F91C73E440006A2EAB /* UnsentMessageHistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D033A6F81C73E440006A2EAB /* UnsentMessageHistoryView.swift */; }; - D037178B20D923CA004773C8 /* CachedItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D037178A20D923CA004773C8 /* CachedItemView.swift */; }; - D037178C20D923CA004773C8 /* CachedItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D037178A20D923CA004773C8 /* CachedItemView.swift */; }; - D039FB1B21714D9800BD1BAD /* PeerPresencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D039FB1A21714D9800BD1BAD /* PeerPresencesView.swift */; }; - D039FB1C21714D9800BD1BAD /* PeerPresencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D039FB1A21714D9800BD1BAD /* PeerPresencesView.swift */; }; - D03BCCF81C73561C0097A291 /* Table.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03BCCF71C73561C0097A291 /* Table.swift */; }; - D03E45572305C7C90049C28B /* sqlcipher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E45562305C7C90049C28B /* sqlcipher.framework */; }; - D03E457D2305CD090049C28B /* Crc32.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E457C2305CD090049C28B /* Crc32.framework */; }; - D03E457F2305CD130049C28B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E457E2305CD130049C28B /* Foundation.framework */; }; - D03E462C2306E01C0049C28B /* sqlciphermac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E462B2306E01C0049C28B /* sqlciphermac.framework */; }; - D03E463D2306E0F60049C28B /* crc32mac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E463C2306E0F60049C28B /* crc32mac.framework */; }; - D040CA6422665370007123CE /* PostboxUpgrade_23to24.swift in Sources */ = {isa = PBXBuildFile; fileRef = D040CA6322665370007123CE /* PostboxUpgrade_23to24.swift */; }; - D040CA6522665370007123CE /* PostboxUpgrade_23to24.swift in Sources */ = {isa = PBXBuildFile; fileRef = D040CA6322665370007123CE /* PostboxUpgrade_23to24.swift */; }; - D0439B3F2289F6300067E026 /* AccountManagerAtomicState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0439B3E2289F6300067E026 /* AccountManagerAtomicState.swift */; }; - D0439B402289F6300067E026 /* AccountManagerAtomicState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0439B3E2289F6300067E026 /* AccountManagerAtomicState.swift */; }; - D044CA2A1C617D39002160FF /* SeedConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D044CA291C617D39002160FF /* SeedConfiguration.swift */; }; - D044CA2C1C617E2D002160FF /* MessageHistoryMetadataTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D044CA2B1C617E2D002160FF /* MessageHistoryMetadataTable.swift */; }; - D044CA2E1C618373002160FF /* ChatListHole.swift in Sources */ = {isa = PBXBuildFile; fileRef = D044CA2D1C618373002160FF /* ChatListHole.swift */; }; - D044E15E1B2ACB9C001EE087 /* CodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D044E15D1B2ACB9C001EE087 /* CodingTests.swift */; }; - D044E1631B2AD677001EE087 /* MurMurHash32.m in Sources */ = {isa = PBXBuildFile; fileRef = D044E1621B2AD677001EE087 /* MurMurHash32.m */; }; - D044E1641B2AD718001EE087 /* MurMurHash32.h in Headers */ = {isa = PBXBuildFile; fileRef = D044E1611B2AD667001EE087 /* MurMurHash32.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D04614302004E24600EC0EF2 /* LocalMessageHistoryTagsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D046142F2004E24600EC0EF2 /* LocalMessageHistoryTagsTable.swift */; }; - D04614312004E24600EC0EF2 /* LocalMessageHistoryTagsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D046142F2004E24600EC0EF2 /* LocalMessageHistoryTagsTable.swift */; }; - D04614332004F2CC00EC0EF2 /* LocalMessageTagsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04614322004F2CC00EC0EF2 /* LocalMessageTagsView.swift */; }; - D04614342004F2CC00EC0EF2 /* LocalMessageTagsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04614322004F2CC00EC0EF2 /* LocalMessageTagsView.swift */; }; - D048B33D203C838500038D05 /* PostboxUpgrade_15to16.swift in Sources */ = {isa = PBXBuildFile; fileRef = D048B33C203C838500038D05 /* PostboxUpgrade_15to16.swift */; }; - D048B33E203C838500038D05 /* PostboxUpgrade_15to16.swift in Sources */ = {isa = PBXBuildFile; fileRef = D048B33C203C838500038D05 /* PostboxUpgrade_15to16.swift */; }; - D048B4A820A5CBE400C79D31 /* AdditionalChatListItemsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D048B4A720A5CBE400C79D31 /* AdditionalChatListItemsTable.swift */; }; - D048B4A920A5CBE400C79D31 /* AdditionalChatListItemsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D048B4A720A5CBE400C79D31 /* AdditionalChatListItemsTable.swift */; }; - D048B4AF20A5EEAE00C79D31 /* AdditionalChatListItemsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D048B4AE20A5EEAE00C79D31 /* AdditionalChatListItemsView.swift */; }; - D048B4B020A5EEAE00C79D31 /* AdditionalChatListItemsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D048B4AE20A5EEAE00C79D31 /* AdditionalChatListItemsView.swift */; }; - D049EAF01E44D9B900A2CD3A /* PostboxStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D049EAEF1E44D9B900A2CD3A /* PostboxStateView.swift */; }; - D049EAF11E44D9B900A2CD3A /* PostboxStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D049EAEF1E44D9B900A2CD3A /* PostboxStateView.swift */; }; - D050F2661E4A5B5A00988324 /* MessageGloballyUniqueIdTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D019B1CE1E2E770700F80DB3 /* MessageGloballyUniqueIdTable.swift */; }; - D050F2671E4A5B5A00988324 /* TimestampBasedMessageAttributesTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AAD1B11E3266B100D5B9DE /* TimestampBasedMessageAttributesTable.swift */; }; - D050F2681E4A5B5A00988324 /* TimestampBasedMessageAttributesIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AAD1B01E3266B100D5B9DE /* TimestampBasedMessageAttributesIndexTable.swift */; }; - D050F2691E4A5B5A00988324 /* MultiplePeersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC386B1E3FCEE50044D6FE /* MultiplePeersView.swift */; }; - D055BD331B7D3D2D00F06C0A /* MediaBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D055BD321B7D3D2D00F06C0A /* MediaBox.swift */; }; - D0575AE31E9ECBB2006F2541 /* AccessChallengeDataView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0575AE21E9ECBB2006F2541 /* AccessChallengeDataView.swift */; }; - D0575AE41E9ECBB2006F2541 /* AccessChallengeDataView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0575AE21E9ECBB2006F2541 /* AccessChallengeDataView.swift */; }; - D05D8B31218F1D3D0064586F /* AccountSharedData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05D8B30218F1D3D0064586F /* AccountSharedData.swift */; }; - D05D8B32218F1D3D0064586F /* AccountSharedData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05D8B30218F1D3D0064586F /* AccountSharedData.swift */; }; - D05D8B34218F1EBB0064586F /* AccountManagerSharedDataTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05D8B33218F1EBB0064586F /* AccountManagerSharedDataTable.swift */; }; - D05D8B35218F1EBB0064586F /* AccountManagerSharedDataTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05D8B33218F1EBB0064586F /* AccountManagerSharedDataTable.swift */; }; - D05F09A61C9E9F9300BB6F96 /* MediaResourceStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05F09A51C9E9F9300BB6F96 /* MediaResourceStatus.swift */; }; - D0633D01225AA3F3003DD95F /* MessageHistoryViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C8FCB61C5C2D200028C27F /* MessageHistoryViewTests.swift */; }; - D0633D04225B98B1003DD95F /* AdditionalMessageHistoryViewData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0633D03225B98B1003DD95F /* AdditionalMessageHistoryViewData.swift */; }; - D0633D05225B98B1003DD95F /* AdditionalMessageHistoryViewData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0633D03225B98B1003DD95F /* AdditionalMessageHistoryViewData.swift */; }; - D0633D07225B98FC003DD95F /* MessageHistoryViewEntryAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0633D06225B98FC003DD95F /* MessageHistoryViewEntryAttributes.swift */; }; - D0633D08225B98FC003DD95F /* MessageHistoryViewEntryAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0633D06225B98FC003DD95F /* MessageHistoryViewEntryAttributes.swift */; }; - D0633D0A225BAD66003DD95F /* MessageHistoryAnchorIndex.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0633D09225BAD66003DD95F /* MessageHistoryAnchorIndex.swift */; }; - D0633D0B225BAD66003DD95F /* MessageHistoryAnchorIndex.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0633D09225BAD66003DD95F /* MessageHistoryAnchorIndex.swift */; }; - D0633D0D225BC9EF003DD95F /* MessageHistoryViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0633D0C225BC9EF003DD95F /* MessageHistoryViewState.swift */; }; - D0633D0E225BC9EF003DD95F /* MessageHistoryViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0633D0C225BC9EF003DD95F /* MessageHistoryViewState.swift */; }; - D06CA12C227715E70094E707 /* PeerNotificationSettingsBehaviorTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06CA12B227715E70094E707 /* PeerNotificationSettingsBehaviorTable.swift */; }; - D06CA12D227715E70094E707 /* PeerNotificationSettingsBehaviorTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06CA12B227715E70094E707 /* PeerNotificationSettingsBehaviorTable.swift */; }; - D06CA12F227720910094E707 /* PeerNotificationSettingsBehaviorIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06CA12E227720910094E707 /* PeerNotificationSettingsBehaviorIndexTable.swift */; }; - D06CA130227720910094E707 /* PeerNotificationSettingsBehaviorIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06CA12E227720910094E707 /* PeerNotificationSettingsBehaviorIndexTable.swift */; }; - D06CA13222772DE40094E707 /* PeerNotificationSettingsBehaviorTimestampView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06CA13122772DE40094E707 /* PeerNotificationSettingsBehaviorTimestampView.swift */; }; - D06CA13322772DE40094E707 /* PeerNotificationSettingsBehaviorTimestampView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06CA13122772DE40094E707 /* PeerNotificationSettingsBehaviorTimestampView.swift */; }; - D06ECFC520B796DC00C576C2 /* NoticeEntryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06ECFC420B796DC00C576C2 /* NoticeEntryView.swift */; }; - D06ECFC620B796DC00C576C2 /* NoticeEntryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06ECFC420B796DC00C576C2 /* NoticeEntryView.swift */; }; - D07047A01F3CE16500F6A8D4 /* MessageHistoryTagsSummaryTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D070479F1F3CE16500F6A8D4 /* MessageHistoryTagsSummaryTable.swift */; }; - D07047A21F3CE58200F6A8D4 /* PendingMessageActionsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047A11F3CE58200F6A8D4 /* PendingMessageActionsTable.swift */; }; - D07047A31F3CE58200F6A8D4 /* PendingMessageActionsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047A11F3CE58200F6A8D4 /* PendingMessageActionsTable.swift */; }; - D07047A51F3CF63800F6A8D4 /* MessageHistoryTagSummaryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047A41F3CF63800F6A8D4 /* MessageHistoryTagSummaryView.swift */; }; - D07047A61F3CF63800F6A8D4 /* MessageHistoryTagSummaryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047A41F3CF63800F6A8D4 /* MessageHistoryTagSummaryView.swift */; }; - D07047A81F3DA8D700F6A8D4 /* PendingMessageActionsMetadataTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047A71F3DA8D700F6A8D4 /* PendingMessageActionsMetadataTable.swift */; }; - D07047A91F3DA8D700F6A8D4 /* PendingMessageActionsMetadataTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047A71F3DA8D700F6A8D4 /* PendingMessageActionsMetadataTable.swift */; }; - D07047AB1F3DD8D100F6A8D4 /* PendingMessageActionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047AA1F3DD8D100F6A8D4 /* PendingMessageActionsView.swift */; }; - D07047AC1F3DD8D100F6A8D4 /* PendingMessageActionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047AA1F3DD8D100F6A8D4 /* PendingMessageActionsView.swift */; }; - D07047B11F3DE40400F6A8D4 /* PendingMessageActionsSummaryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047B01F3DE40400F6A8D4 /* PendingMessageActionsSummaryView.swift */; }; - D07047B21F3DE40400F6A8D4 /* PendingMessageActionsSummaryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047B01F3DE40400F6A8D4 /* PendingMessageActionsSummaryView.swift */; }; - D073CE741DCBF3B4007511FD /* Peer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E3A7831B28AE0900A402D9 /* Peer.swift */; }; - D073CE751DCBF3B4007511FD /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E3A79D1B28B50400A402D9 /* Message.swift */; }; - D073CE761DCBF3B4007511FD /* IntermediateMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D510F81D63BCC200A97B8A /* IntermediateMessage.swift */; }; - D073CE771DCBF3B4007511FD /* Media.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E3A7A11B28B7DC00A402D9 /* Media.swift */; }; - D073CE791DCBF3B4007511FD /* ChatListHole.swift in Sources */ = {isa = PBXBuildFile; fileRef = D044CA2D1C618373002160FF /* ChatListHole.swift */; }; - D073CE7A1DCBF3B4007511FD /* PeerReadState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C674CB1CBB14A700183765 /* PeerReadState.swift */; }; - D073CE7B1DCBF3B4007511FD /* PeerNameIndexRepresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0079F6A1D5B3AAB00A27A2C /* PeerNameIndexRepresentation.swift */; }; - D073CE7C1DCBF3B4007511FD /* CachedPeerData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03120F91DA540F0006A2A60 /* CachedPeerData.swift */; }; - D073CE7D1DCBF3B4007511FD /* PeerPresence.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B844501DAC04FE005F29E1 /* PeerPresence.swift */; }; - D073CE7E1DCBF3B4007511FD /* PeerNotificationSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03120FB1DA55427006A2A60 /* PeerNotificationSettings.swift */; }; - D073CE7F1DCBF3B4007511FD /* ItemCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021E0D31DB4FAE100C6B04F /* ItemCollection.swift */; }; - D073CE801DCBF3B4007511FD /* PeerChatInterfaceState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07CFF801DCA765D00761F81 /* PeerChatInterfaceState.swift */; }; - D073CE9F1DCBF3C1007511FD /* InitialMessageHistoryData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07CFF841DCA99C400761F81 /* InitialMessageHistoryData.swift */; }; - D073CEA01DCBF3C1007511FD /* ItemCollectionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021E0DB1DB5237C00C6B04F /* ItemCollectionsView.swift */; }; - D07827C11E0079CB00071108 /* StringIndexTokens.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07827C01E0079CB00071108 /* StringIndexTokens.swift */; }; - D07827C31E008F7300071108 /* ReverseIndexReferenceTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07827C21E008F7300071108 /* ReverseIndexReferenceTable.swift */; }; - D07827C51E00B23F00071108 /* PeerNameIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07827C41E00B23F00071108 /* PeerNameIndexTable.swift */; }; - D079FCE61F06A3170038FADE /* NoticeTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D079FCE51F06A3170038FADE /* NoticeTable.swift */; }; - D079FCE71F06A31C0038FADE /* NoticeTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D079FCE51F06A3170038FADE /* NoticeTable.swift */; }; - D07CFF811DCA765D00761F81 /* PeerChatInterfaceState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07CFF801DCA765D00761F81 /* PeerChatInterfaceState.swift */; }; - D07CFF831DCA909100761F81 /* PeerChatInterfaceStateTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07CFF821DCA909100761F81 /* PeerChatInterfaceStateTable.swift */; }; - D07CFF851DCA99C400761F81 /* InitialMessageHistoryData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07CFF841DCA99C400761F81 /* InitialMessageHistoryData.swift */; }; - D07E7B45224E227100BB053B /* PostboxUpgrade_20to21.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07E7B44224E227100BB053B /* PostboxUpgrade_20to21.swift */; }; - D07E7B46224E227100BB053B /* PostboxUpgrade_20to21.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07E7B44224E227100BB053B /* PostboxUpgrade_20to21.swift */; }; - D07E7B48224E562C00BB053B /* PostboxUpgrade_21to22.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07E7B47224E562C00BB053B /* PostboxUpgrade_21to22.swift */; }; - D07E7B49224E562C00BB053B /* PostboxUpgrade_21to22.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07E7B47224E562C00BB053B /* PostboxUpgrade_21to22.swift */; }; - D08775001E3E3D9F00A97350 /* PreferencesTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08774FF1E3E3D9F00A97350 /* PreferencesTable.swift */; }; - D08775011E3E3D9F00A97350 /* PreferencesTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08774FF1E3E3D9F00A97350 /* PreferencesTable.swift */; }; - D08775031E3E3E7400A97350 /* PreferencesEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08775021E3E3E7400A97350 /* PreferencesEntry.swift */; }; - D08775041E3E3E7400A97350 /* PreferencesEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08775021E3E3E7400A97350 /* PreferencesEntry.swift */; }; - D08775061E3E3F2100A97350 /* PreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08775051E3E3F2100A97350 /* PreferencesView.swift */; }; - D08775071E3E3F2100A97350 /* PreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08775051E3E3F2100A97350 /* PreferencesView.swift */; }; - D087C20C1E43C11C00D686F8 /* OrderedItemListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D087C20B1E43C11C00D686F8 /* OrderedItemListView.swift */; }; - D087C20D1E43C11C00D686F8 /* OrderedItemListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D087C20B1E43C11C00D686F8 /* OrderedItemListView.swift */; }; - D08B61C022A75C21000A46A8 /* Hash.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08B61BF22A75C21000A46A8 /* Hash.swift */; }; - D08B61C122A75C21000A46A8 /* Hash.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08B61BF22A75C21000A46A8 /* Hash.swift */; }; - D08C713C1C51283C00779C0F /* MessageHistoryIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C713B1C51283C00779C0F /* MessageHistoryIndexTable.swift */; }; - D08C713E1C512EA500779C0F /* MessageHistoryTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C713D1C512EA500779C0F /* MessageHistoryTable.swift */; }; - D08CEFB41D2AD8BE0015D3BC /* RedBlackTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08CEFB31D2AD8BE0015D3BC /* RedBlackTree.swift */; }; - D08D451F1D5D2CA700A7428A /* RatingTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08D451E1D5D2CA700A7428A /* RatingTable.swift */; }; - D0943AF81FDAC53F001522CC /* ChatLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0943AF71FDAC53F001522CC /* ChatLocation.swift */; }; - D0943AF91FDAC540001522CC /* ChatLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0943AF71FDAC53F001522CC /* ChatLocation.swift */; }; - D0943B021FDB01D8001522CC /* PostboxUpgrade_14to15.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0943B011FDB01D8001522CC /* PostboxUpgrade_14to15.swift */; }; - D0943B031FDB01D8001522CC /* PostboxUpgrade_14to15.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0943B011FDB01D8001522CC /* PostboxUpgrade_14to15.swift */; }; - D0977F9C1B822DB4009994B2 /* ValueBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0977F9B1B822DB4009994B2 /* ValueBox.swift */; }; - D0977F9E1B8234DF009994B2 /* ValueBoxKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0977F9D1B8234DF009994B2 /* ValueBoxKey.swift */; }; - D0977FA01B8244D7009994B2 /* SqliteValueBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0977F9F1B8244D7009994B2 /* SqliteValueBox.swift */; }; - D098C6F11D7E11E9007784E4 /* Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = D098C6F01D7E11E9007784E4 /* Database.swift */; }; - D098C6F21D7E1201007784E4 /* Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = D098C6F01D7E11E9007784E4 /* Database.swift */; }; - D09ADF0C1D2EB83500C8208D /* OrderStatisticTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09ADF0B1D2EB83500C8208D /* OrderStatisticTable.swift */; }; - D0A18D671E16874D004C6734 /* UnreadMessageCountsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A18D661E16874D004C6734 /* UnreadMessageCountsView.swift */; }; - D0A352F51F5488E9001423DC /* InvalidatedMessageHistoryTagsSummaryTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A352F41F5488E9001423DC /* InvalidatedMessageHistoryTagsSummaryTable.swift */; }; - D0A352F61F5488E9001423DC /* InvalidatedMessageHistoryTagsSummaryTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A352F41F5488E9001423DC /* InvalidatedMessageHistoryTagsSummaryTable.swift */; }; - D0A352F81F549D95001423DC /* InvalidatedMessageHistoryTagSummariesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A352F71F549D95001423DC /* InvalidatedMessageHistoryTagSummariesView.swift */; }; - D0A352F91F549D95001423DC /* InvalidatedMessageHistoryTagSummariesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A352F71F549D95001423DC /* InvalidatedMessageHistoryTagSummariesView.swift */; }; - D0A7D9451C556CFE0016A115 /* MessageHistoryIndexTableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A7D9441C556CFE0016A115 /* MessageHistoryIndexTableTests.swift */; }; - D0AA55131FB4C6AB00C2AB58 /* BinarySearch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AA55121FB4C6AB00C2AB58 /* BinarySearch.swift */; }; - D0AA55141FB4C6AB00C2AB58 /* BinarySearch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AA55121FB4C6AB00C2AB58 /* BinarySearch.swift */; }; - D0AAD1B21E3266B100D5B9DE /* TimestampBasedMessageAttributesIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AAD1B01E3266B100D5B9DE /* TimestampBasedMessageAttributesIndexTable.swift */; }; - D0AAD1B31E3266B100D5B9DE /* TimestampBasedMessageAttributesTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AAD1B11E3266B100D5B9DE /* TimestampBasedMessageAttributesTable.swift */; }; - D0AAD1B51E32673C00D5B9DE /* TimestampBasedMessageAttributesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AAD1B41E32673C00D5B9DE /* TimestampBasedMessageAttributesView.swift */; }; - D0AAD1B61E32673C00D5B9DE /* TimestampBasedMessageAttributesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AAD1B41E32673C00D5B9DE /* TimestampBasedMessageAttributesView.swift */; }; - D0AB0B8C1D65D488002C78E7 /* MessageHistoryHolesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB0B8B1D65D488002C78E7 /* MessageHistoryHolesView.swift */; }; - D0AB0B8E1D65D49C002C78E7 /* ChatListHolesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB0B8D1D65D49C002C78E7 /* ChatListHolesView.swift */; }; - D0AB0B901D65D4AB002C78E7 /* UnsentMessageIndicesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB0B8F1D65D4AB002C78E7 /* UnsentMessageIndicesView.swift */; }; - D0AD23271E194D1C00A7089A /* PeerOperationLogTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AD23261E194D1C00A7089A /* PeerOperationLogTable.swift */; }; - D0AD23291E196B6400A7089A /* PeerOperationLogMetadataTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AD23281E196B6400A7089A /* PeerOperationLogMetadataTable.swift */; }; - D0AE3EBC1F68261B0069BC90 /* PeerNotificationSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AE3EBB1F68261B0069BC90 /* PeerNotificationSettingsView.swift */; }; - D0B166EA1F9D142A00976B40 /* MessageOfInterestHolesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B166E91F9D142A00976B40 /* MessageOfInterestHolesView.swift */; }; - D0B166EB1F9D142A00976B40 /* MessageOfInterestHolesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B166E91F9D142A00976B40 /* MessageOfInterestHolesView.swift */; }; - D0B167201F9EAAA900976B40 /* OrderedList.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B1671F1F9EAAA900976B40 /* OrderedList.swift */; }; - D0B167211F9EAAA900976B40 /* OrderedList.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B1671F1F9EAAA900976B40 /* OrderedList.swift */; }; - D0B2F75D204F551D00D3BFB9 /* DeviceContactImportInfoTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B2F75C204F551D00D3BFB9 /* DeviceContactImportInfoTable.swift */; }; - D0B2F75E204F551D00D3BFB9 /* DeviceContactImportInfoTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B2F75C204F551D00D3BFB9 /* DeviceContactImportInfoTable.swift */; }; - D0B418171D7DFAF3004562A4 /* PostboxMac.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B418151D7DFAF3004562A4 /* PostboxMac.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0B418221D7DFE0C004562A4 /* Coding.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E3A7871B28AE9C00A402D9 /* Coding.swift */; }; - D0B418231D7DFE0C004562A4 /* SimpleDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E8741C5A334100037222 /* SimpleDictionary.swift */; }; - D0B418241D7DFE0C004562A4 /* SimpleSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9DA381C65782500855278 /* SimpleSet.swift */; }; - D0B418251D7DFE0C004562A4 /* RedBlackTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08CEFB31D2AD8BE0015D3BC /* RedBlackTree.swift */; }; - D0B418261D7DFE0C004562A4 /* MappedFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D949F41D35353900740E02 /* MappedFile.swift */; }; - D0B418271D7DFE0C004562A4 /* IpcPipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D510FF1D64A58900A97B8A /* IpcPipe.swift */; }; - D0B418301D7DFE16004562A4 /* ValueBoxKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0977F9D1B8234DF009994B2 /* ValueBoxKey.swift */; }; - D0B418311D7DFE16004562A4 /* ValueBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0977F9B1B822DB4009994B2 /* ValueBox.swift */; }; - D0B418321D7DFE16004562A4 /* SqliteValueBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0977F9F1B8244D7009994B2 /* SqliteValueBox.swift */; }; - D0B418481D7DFE20004562A4 /* MessageHistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D003E4E51B38DBDB00C22CBC /* MessageHistoryView.swift */; }; - D0B418491D7DFE20004562A4 /* ChatListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E86A1C59719800037222 /* ChatListView.swift */; }; - D0B4184A1D7DFE20004562A4 /* UnsentMessageHistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D033A6F81C73E440006A2EAB /* UnsentMessageHistoryView.swift */; }; - D0B4184B1D7DFE20004562A4 /* SynchronizePeerReadStatesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01F7D9C1CBF8586008765C9 /* SynchronizePeerReadStatesView.swift */; }; - D0B4184C1D7DFE20004562A4 /* ContactPeerIdsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0079F621D5A242500A27A2C /* ContactPeerIdsView.swift */; }; - D0B4184D1D7DFE20004562A4 /* ContactPeersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0079F641D5A457A00A27A2C /* ContactPeersView.swift */; }; - D0B4184E1D7DFE20004562A4 /* MessageHistoryHolesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB0B8B1D65D488002C78E7 /* MessageHistoryHolesView.swift */; }; - D0B4184F1D7DFE20004562A4 /* ChatListHolesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB0B8D1D65D49C002C78E7 /* ChatListHolesView.swift */; }; - D0B418501D7DFE20004562A4 /* UnsentMessageIndicesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB0B8F1D65D4AB002C78E7 /* UnsentMessageIndicesView.swift */; }; - D0B418571D7DFE29004562A4 /* Postbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E3A7811B28ADD000A402D9 /* Postbox.swift */; }; - D0B418581D7DFE29004562A4 /* SeedConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D044CA291C617D39002160FF /* SeedConfiguration.swift */; }; - D0B418591D7DFE29004562A4 /* PostboxTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D510F31D63BA8400A97B8A /* PostboxTransaction.swift */; }; - D0B4185A1D7DFE29004562A4 /* ViewTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E1DE141C5E1C6900C7826E /* ViewTracker.swift */; }; - D0B4185B1D7DFE2C004562A4 /* MurMurHash32.h in Headers */ = {isa = PBXBuildFile; fileRef = D044E1611B2AD667001EE087 /* MurMurHash32.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0B4185C1D7DFE2F004562A4 /* MurMurHash32.m in Sources */ = {isa = PBXBuildFile; fileRef = D044E1621B2AD677001EE087 /* MurMurHash32.m */; }; - D0B418611D7DFE95004562A4 /* SwiftSignalKitMac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0B418601D7DFE95004562A4 /* SwiftSignalKitMac.framework */; }; - D0B844031DAB91A7005F29E1 /* PeerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DF0C8E1D81A350008AEB01 /* PeerView.swift */; }; - D0B844051DAB91B5005F29E1 /* MediaBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D055BD321B7D3D2D00F06C0A /* MediaBox.swift */; }; - D0B844061DAB91B5005F29E1 /* MediaResourceStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05F09A51C9E9F9300BB6F96 /* MediaResourceStatus.swift */; }; - D0B844071DAB91B5005F29E1 /* MediaResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CE63F51CA1CCB2002BC462 /* MediaResource.swift */; }; - D0B844511DAC04FE005F29E1 /* PeerPresence.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B844501DAC04FE005F29E1 /* PeerPresence.swift */; }; - D0BC386C1E3FCEE50044D6FE /* MultiplePeersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC386B1E3FCEE50044D6FE /* MultiplePeersView.swift */; }; - D0BC38721E409E670044D6FE /* RenderedPeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC38711E409E670044D6FE /* RenderedPeer.swift */; }; - D0BC38731E409E670044D6FE /* RenderedPeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC38711E409E670044D6FE /* RenderedPeer.swift */; }; - D0BE3034206026C800FBE6D8 /* MessagesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE3033206026C800FBE6D8 /* MessagesView.swift */; }; - D0BE3035206026C800FBE6D8 /* MessagesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE3033206026C800FBE6D8 /* MessagesView.swift */; }; - D0BE38391E7C1FD4000079AF /* ItemCollectionInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE38381E7C1FD4000079AF /* ItemCollectionInfoView.swift */; }; - D0BE383A1E7C1FD4000079AF /* ItemCollectionInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE38381E7C1FD4000079AF /* ItemCollectionInfoView.swift */; }; - D0BEAF631E54B2FA00BD963D /* AccountManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEAF621E54B2FA00BD963D /* AccountManager.swift */; }; - D0BEAF641E54B2FA00BD963D /* AccountManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEAF621E54B2FA00BD963D /* AccountManager.swift */; }; - D0BEAF671E54B33900BD963D /* AccountRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEAF661E54B33900BD963D /* AccountRecord.swift */; }; - D0BEAF681E54B33900BD963D /* AccountRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEAF661E54B33900BD963D /* AccountRecord.swift */; }; - D0BEAF6A1E54B5FB00BD963D /* AccountManagerMetadataTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEAF691E54B5FB00BD963D /* AccountManagerMetadataTable.swift */; }; - D0BEAF6B1E54B5FB00BD963D /* AccountManagerMetadataTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEAF691E54B5FB00BD963D /* AccountManagerMetadataTable.swift */; }; - D0BEAF6D1E54B77900BD963D /* AccountManagerRecordTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEAF6C1E54B77900BD963D /* AccountManagerRecordTable.swift */; }; - D0BEAF6E1E54B77900BD963D /* AccountManagerRecordTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEAF6C1E54B77900BD963D /* AccountManagerRecordTable.swift */; }; - D0BEAF701E54BC1E00BD963D /* AccountRecordsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEAF6F1E54BC1E00BD963D /* AccountRecordsView.swift */; }; - D0BEAF711E54BC1E00BD963D /* AccountRecordsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEAF6F1E54BC1E00BD963D /* AccountRecordsView.swift */; }; - D0BFE51D22AFD5AF00143D08 /* MutableBasicPeerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BFE51C22AFD5AF00143D08 /* MutableBasicPeerView.swift */; }; - D0BFE51E22AFD5AF00143D08 /* MutableBasicPeerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BFE51C22AFD5AF00143D08 /* MutableBasicPeerView.swift */; }; - D0C07F6A1B67DB4800966E43 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C07F691B67DB4800966E43 /* SwiftSignalKit.framework */; }; - D0C0B5AB1EE1AB08000F4D2C /* ReverseAssociatedPeerTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C0B5AA1EE1AB08000F4D2C /* ReverseAssociatedPeerTable.swift */; }; - D0C0B5AC1EE1AB08000F4D2C /* ReverseAssociatedPeerTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C0B5AA1EE1AB08000F4D2C /* ReverseAssociatedPeerTable.swift */; }; - D0C26D7E1FE3FA4E004ABF18 /* PinnedItemId.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C26D7D1FE3FA4E004ABF18 /* PinnedItemId.swift */; }; - D0C26D7F1FE3FA4E004ABF18 /* PinnedItemId.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C26D7D1FE3FA4E004ABF18 /* PinnedItemId.swift */; }; - D0C27B451F4B598200A4E170 /* CachedPeerDataView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C27B441F4B598200A4E170 /* CachedPeerDataView.swift */; }; - D0C27B461F4B598200A4E170 /* CachedPeerDataView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C27B441F4B598200A4E170 /* CachedPeerDataView.swift */; }; - D0C674C81CBB11C600183765 /* MessageHistoryReadStateTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C674C71CBB11C600183765 /* MessageHistoryReadStateTable.swift */; }; - D0C674CC1CBB14A700183765 /* PeerReadState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C674CB1CBB14A700183765 /* PeerReadState.swift */; }; - D0C735281C864DF300BB3149 /* PeerChatStateTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C735271C864DF300BB3149 /* PeerChatStateTable.swift */; }; - D0C9DA391C65782500855278 /* SimpleSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9DA381C65782500855278 /* SimpleSet.swift */; }; - D0CA8E4522720064008A74C3 /* InvalidatedGroupMessageStatsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CA8E4422720064008A74C3 /* InvalidatedGroupMessageStatsTable.swift */; }; - D0CA8E4622720064008A74C3 /* InvalidatedGroupMessageStatsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CA8E4422720064008A74C3 /* InvalidatedGroupMessageStatsTable.swift */; }; - D0CA8E48227208FE008A74C3 /* SynchronizeGroupMessageStatsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CA8E47227208FE008A74C3 /* SynchronizeGroupMessageStatsView.swift */; }; - D0CA8E49227208FE008A74C3 /* SynchronizeGroupMessageStatsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CA8E47227208FE008A74C3 /* SynchronizeGroupMessageStatsView.swift */; }; - D0CA8E4E2272130B008A74C3 /* PostboxUpgrade_24to25.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CA8E4D2272130B008A74C3 /* PostboxUpgrade_24to25.swift */; }; - D0CA8E4F2272130B008A74C3 /* PostboxUpgrade_24to25.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CA8E4D2272130B008A74C3 /* PostboxUpgrade_24to25.swift */; }; - D0CCD61F2231CE5100EE1E08 /* PeerGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CCD61E2231CE5100EE1E08 /* PeerGroup.swift */; }; - D0CCD6202231CE5400EE1E08 /* PeerGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CCD61E2231CE5100EE1E08 /* PeerGroup.swift */; }; - D0CCD6282232887100EE1E08 /* MessageHistoryHoleIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CCD6272232887100EE1E08 /* MessageHistoryHoleIndexTable.swift */; }; - D0CCD6292232887100EE1E08 /* MessageHistoryHoleIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CCD6272232887100EE1E08 /* MessageHistoryHoleIndexTable.swift */; }; - D0CE63F61CA1CCB2002BC462 /* MediaResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CE63F51CA1CCB2002BC462 /* MediaResource.swift */; }; - D0CE8CF31F70249400AA2DB0 /* PostboxUpgrade_13to14.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CE8CF21F70249400AA2DB0 /* PostboxUpgrade_13to14.swift */; }; - D0CE8CF41F70249400AA2DB0 /* PostboxUpgrade_13to14.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CE8CF21F70249400AA2DB0 /* PostboxUpgrade_13to14.swift */; }; - D0CE8CF61F703B1E00AA2DB0 /* PendingPeerNotificationSettingsIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CE8CF51F703B1E00AA2DB0 /* PendingPeerNotificationSettingsIndexTable.swift */; }; - D0CE8CF71F703B1E00AA2DB0 /* PendingPeerNotificationSettingsIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CE8CF51F703B1E00AA2DB0 /* PendingPeerNotificationSettingsIndexTable.swift */; }; - D0D510F41D63BA8400A97B8A /* PostboxTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D510F31D63BA8400A97B8A /* PostboxTransaction.swift */; }; - D0D510F61D63BBE100A97B8A /* MessageHistoryOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D510F51D63BBE100A97B8A /* MessageHistoryOperation.swift */; }; - D0D510F91D63BCC200A97B8A /* IntermediateMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D510F81D63BCC200A97B8A /* IntermediateMessage.swift */; }; - D0D511001D64A58900A97B8A /* IpcPipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D510FF1D64A58900A97B8A /* IpcPipe.swift */; }; - D0D949F51D35353900740E02 /* MappedFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D949F41D35353900740E02 /* MappedFile.swift */; }; - D0DA1D2F1F70419D0034E892 /* PendingPeerNotificationSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DA1D2E1F70419D0034E892 /* PendingPeerNotificationSettingsView.swift */; }; - D0DA1D301F70419D0034E892 /* PendingPeerNotificationSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DA1D2E1F70419D0034E892 /* PendingPeerNotificationSettingsView.swift */; }; - D0DA44481E4C7D1E005FDCA7 /* PostboxAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DA44471E4C7D1E005FDCA7 /* PostboxAccess.swift */; }; - D0DA44491E4C7D1E005FDCA7 /* PostboxAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DA44471E4C7D1E005FDCA7 /* PostboxAccess.swift */; }; - D0DF0C8F1D81A350008AEB01 /* PeerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DF0C8E1D81A350008AEB01 /* PeerView.swift */; }; - D0E119A0229834BC008CAE3A /* MutablePeerChatInclusionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E1199F229834BC008CAE3A /* MutablePeerChatInclusionView.swift */; }; - D0E119A1229834BC008CAE3A /* MutablePeerChatInclusionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E1199F229834BC008CAE3A /* MutablePeerChatInclusionView.swift */; }; - D0E1D30C1ECA1F5500FCEEF1 /* GlobalMessageHistoryTagsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E1D30B1ECA1F5500FCEEF1 /* GlobalMessageHistoryTagsTable.swift */; }; - D0E1D30D1ECA1F5500FCEEF1 /* GlobalMessageHistoryTagsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E1D30B1ECA1F5500FCEEF1 /* GlobalMessageHistoryTagsTable.swift */; }; - D0E1D30F1ECA53F900FCEEF1 /* GlobalMessageTagsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E1D30E1ECA53F900FCEEF1 /* GlobalMessageTagsView.swift */; }; - D0E1D3101ECA53F900FCEEF1 /* GlobalMessageTagsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E1D30E1ECA53F900FCEEF1 /* GlobalMessageTagsView.swift */; }; - D0E1DE151C5E1C6900C7826E /* ViewTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E1DE141C5E1C6900C7826E /* ViewTracker.swift */; }; - D0E23DE21E808A9400B9B6D2 /* ItemCollectionIdsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E23DE11E808A9400B9B6D2 /* ItemCollectionIdsView.swift */; }; - D0E23DE31E808A9400B9B6D2 /* ItemCollectionIdsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E23DE11E808A9400B9B6D2 /* ItemCollectionIdsView.swift */; }; - D0E3A7501B28A7E300A402D9 /* Postbox.h in Headers */ = {isa = PBXBuildFile; fileRef = D0E3A74F1B28A7E300A402D9 /* Postbox.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0E3A7561B28A7E300A402D9 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0E3A74A1B28A7E300A402D9 /* Postbox.framework */; }; - D0E3A7821B28ADD000A402D9 /* Postbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E3A7811B28ADD000A402D9 /* Postbox.swift */; }; - D0E3A7841B28AE0900A402D9 /* Peer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E3A7831B28AE0900A402D9 /* Peer.swift */; }; - D0E3A7881B28AE9C00A402D9 /* Coding.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E3A7871B28AE9C00A402D9 /* Coding.swift */; }; - D0E3A79E1B28B50400A402D9 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E3A79D1B28B50400A402D9 /* Message.swift */; }; - D0E3A7A21B28B7DC00A402D9 /* Media.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E3A7A11B28B7DC00A402D9 /* Media.swift */; }; - D0ECCB8F1FE9EB5500609802 /* PostboxLogging.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0ECCB8E1FE9EB5500609802 /* PostboxLogging.swift */; }; - D0F019FD1E1DA0CC00F05AB3 /* PeerMergedOperationLogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F019FC1E1DA0CC00F05AB3 /* PeerMergedOperationLogView.swift */; }; - D0F02CDF1E99223D0065DEE2 /* Upgrades.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F02CDE1E99223D0065DEE2 /* Upgrades.swift */; }; - D0F02CE01E99223E0065DEE2 /* Upgrades.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F02CDE1E99223D0065DEE2 /* Upgrades.swift */; }; - D0F02CE21E9922F50065DEE2 /* PostboxUpgrade_12to13.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F02CE11E9922F50065DEE2 /* PostboxUpgrade_12to13.swift */; }; - D0F02CE31E9922F50065DEE2 /* PostboxUpgrade_12to13.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F02CE11E9922F50065DEE2 /* PostboxUpgrade_12to13.swift */; }; - D0F3CC721DDE1CDC008148FA /* ItemCacheTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3CC711DDE1CDC008148FA /* ItemCacheTable.swift */; }; - D0F3CC741DDE1EB9008148FA /* ItemCacheMetaTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3CC731DDE1EB9008148FA /* ItemCacheMetaTable.swift */; }; - D0F53BF31E794C6700117362 /* PeerChatStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F53BF21E794C6700117362 /* PeerChatStateView.swift */; }; - D0F53BF41E794C6700117362 /* PeerChatStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F53BF21E794C6700117362 /* PeerChatStateView.swift */; }; - D0F7AB321DCFAB18009AD9A1 /* PeerChatTopIndexableMessageIds.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F7AB311DCFAB18009AD9A1 /* PeerChatTopIndexableMessageIds.swift */; }; - D0F7B1C01E045C62007EB8A5 /* StringIndexTokens.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07827C01E0079CB00071108 /* StringIndexTokens.swift */; }; - D0F7B1C31E045C6A007EB8A5 /* Table.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03BCCF71C73561C0097A291 /* Table.swift */; }; - D0F7B1C41E045C6A007EB8A5 /* GlobalMessageIdsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E8721C5A1EE500037222 /* GlobalMessageIdsTable.swift */; }; - D0F7B1C51E045C6A007EB8A5 /* MessageHistoryMetadataTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D044CA2B1C617E2D002160FF /* MessageHistoryMetadataTable.swift */; }; - D0F7B1C61E045C6A007EB8A5 /* MessageHistoryIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C713B1C51283C00779C0F /* MessageHistoryIndexTable.swift */; }; - D0F7B1C71E045C6A007EB8A5 /* MessageHistoryTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08C713D1C512EA500779C0F /* MessageHistoryTable.swift */; }; - D0F7B1C81E045C6A007EB8A5 /* MessageHistoryOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D510F51D63BBE100A97B8A /* MessageHistoryOperation.swift */; }; - D0F7B1C91E045C6A007EB8A5 /* MessageHistoryTagsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00EED1D1C81F28D00341DFF /* MessageHistoryTagsTable.swift */; }; - D0F7B1CA1E045C6A007EB8A5 /* MessageHistoryUnsentTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D033A6F61C73D512006A2EAB /* MessageHistoryUnsentTable.swift */; }; - D0F7B1CB1E045C6A007EB8A5 /* ChatListTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E8641C58CB7F00037222 /* ChatListTable.swift */; }; - D0F7B1CC1E045C6A007EB8A5 /* ChatListIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E8661C58D08900037222 /* ChatListIndexTable.swift */; }; - D0F7B1CD1E045C6A007EB8A5 /* MessageMediaTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E85A1C565EBB00037222 /* MessageMediaTable.swift */; }; - D0F7B1CF1E045C6A007EB8A5 /* MetadataTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E86C1C5A0E5D00037222 /* MetadataTable.swift */; }; - D0F7B1D01E045C6A007EB8A5 /* KeychainTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E86E1C5A0E7600037222 /* KeychainTable.swift */; }; - D0F7B1D11E045C6A007EB8A5 /* PeerTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E8701C5A0E9B00037222 /* PeerTable.swift */; }; - D0F7B1D21E045C6A007EB8A5 /* PeerNotificationSettingsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03120FF1DA579A0006A2A60 /* PeerNotificationSettingsTable.swift */; }; - D0F7B1D31E045C6A007EB8A5 /* CachedPeerDataTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03120FD1DA562E9006A2A60 /* CachedPeerDataTable.swift */; }; - D0F7B1D41E045C6A007EB8A5 /* PeerPresenceTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03120F71DA53FF4006A2A60 /* PeerPresenceTable.swift */; }; - D0F7B1D51E045C6A007EB8A5 /* PeerChatStateTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C735271C864DF300BB3149 /* PeerChatStateTable.swift */; }; - D0F7B1D61E045C6A007EB8A5 /* ContactTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0079F591D592E8B00A27A2C /* ContactTable.swift */; }; - D0F7B1D71E045C6A007EB8A5 /* MessageHistoryReadStateTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C674C71CBB11C600183765 /* MessageHistoryReadStateTable.swift */; }; - D0F7B1D81E045C6A007EB8A5 /* MessageHistorySynchronizeReadStateTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01F7D9A1CBEC390008765C9 /* MessageHistorySynchronizeReadStateTable.swift */; }; - D0F7B1D91E045C6A007EB8A5 /* OrderStatisticTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09ADF0B1D2EB83500C8208D /* OrderStatisticTable.swift */; }; - D0F7B1DA1E045C6A007EB8A5 /* RatingTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08D451E1D5D2CA700A7428A /* RatingTable.swift */; }; - D0F7B1DB1E045C6A007EB8A5 /* ItemCollectionInfoTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021E0D51DB4FCFC00C6B04F /* ItemCollectionInfoTable.swift */; }; - D0F7B1DC1E045C6A007EB8A5 /* ItemCollectionItemTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021E0D71DB4FD1300C6B04F /* ItemCollectionItemTable.swift */; }; - D0F7B1DD1E045C6A007EB8A5 /* PeerChatInterfaceStateTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07CFF821DCA909100761F81 /* PeerChatInterfaceStateTable.swift */; }; - D0F7B1DE1E045C6A007EB8A5 /* PeerChatTopIndexableMessageIds.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F7AB311DCFAB18009AD9A1 /* PeerChatTopIndexableMessageIds.swift */; }; - D0F7B1DF1E045C6A007EB8A5 /* ItemCacheMetaTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3CC731DDE1EB9008148FA /* ItemCacheMetaTable.swift */; }; - D0F7B1E01E045C6A007EB8A5 /* ItemCacheTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3CC711DDE1CDC008148FA /* ItemCacheTable.swift */; }; - D0F7B1E11E045C6A007EB8A5 /* ReverseIndexReferenceTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07827C21E008F7300071108 /* ReverseIndexReferenceTable.swift */; }; - D0F7B1E21E045C6A007EB8A5 /* PeerNameIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07827C41E00B23F00071108 /* PeerNameIndexTable.swift */; }; - D0F82CFD1E4345D7007E499C /* OrderedItemListTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F82CFC1E4345D7007E499C /* OrderedItemListTable.swift */; }; - D0F82CFE1E4345D7007E499C /* OrderedItemListTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F82CFC1E4345D7007E499C /* OrderedItemListTable.swift */; }; - D0F82D0C1E439FCC007E499C /* OrderedItemListEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F82D0B1E439FCC007E499C /* OrderedItemListEntry.swift */; }; - D0F82D0D1E439FCC007E499C /* OrderedItemListEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F82D0B1E439FCC007E499C /* OrderedItemListEntry.swift */; }; - D0F82D0F1E43A024007E499C /* OrderedItemListIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F82D0E1E43A024007E499C /* OrderedItemListIndexTable.swift */; }; - D0F82D101E43A024007E499C /* OrderedItemListIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F82D0E1E43A024007E499C /* OrderedItemListIndexTable.swift */; }; - D0F9E85B1C565EBB00037222 /* MessageMediaTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E85A1C565EBB00037222 /* MessageMediaTable.swift */; }; - D0F9E8651C58CB7F00037222 /* ChatListTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E8641C58CB7F00037222 /* ChatListTable.swift */; }; - D0F9E8671C58D08900037222 /* ChatListIndexTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E8661C58D08900037222 /* ChatListIndexTable.swift */; }; - D0F9E86B1C59719800037222 /* ChatListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E86A1C59719800037222 /* ChatListView.swift */; }; - D0F9E86D1C5A0E5D00037222 /* MetadataTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E86C1C5A0E5D00037222 /* MetadataTable.swift */; }; - D0F9E86F1C5A0E7600037222 /* KeychainTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E86E1C5A0E7600037222 /* KeychainTable.swift */; }; - D0F9E8711C5A0E9B00037222 /* PeerTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E8701C5A0E9B00037222 /* PeerTable.swift */; }; - D0F9E8731C5A1EE500037222 /* GlobalMessageIdsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E8721C5A1EE500037222 /* GlobalMessageIdsTable.swift */; }; - D0F9E8751C5A334100037222 /* SimpleDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F9E8741C5A334100037222 /* SimpleDictionary.swift */; }; - D0FA0AC71E77F0A2005BB9B7 /* ItemCollectionInfosView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA0AC61E77F0A2005BB9B7 /* ItemCollectionInfosView.swift */; }; - D0FA0AC81E77F0A2005BB9B7 /* ItemCollectionInfosView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA0AC61E77F0A2005BB9B7 /* ItemCollectionInfosView.swift */; }; - D0FA0ACA1E780A26005BB9B7 /* PostboxView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA0AC91E780A26005BB9B7 /* PostboxView.swift */; }; - D0FA0ACB1E780A26005BB9B7 /* PostboxView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA0AC91E780A26005BB9B7 /* PostboxView.swift */; }; - D0FA0ACD1E781067005BB9B7 /* Views.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA0ACC1E781067005BB9B7 /* Views.swift */; }; - D0FA0ACE1E781067005BB9B7 /* Views.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA0ACC1E781067005BB9B7 /* Views.swift */; }; - D0FC194A201E8EAF00FEDBB2 /* MediaBoxFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FC1949201E8EAF00FEDBB2 /* MediaBoxFile.swift */; }; - D0FC194B201E8EAF00FEDBB2 /* MediaBoxFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FC1949201E8EAF00FEDBB2 /* MediaBoxFile.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - D0E3A7571B28A7E300A402D9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D0E3A7411B28A7E300A402D9 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D0E3A7491B28A7E300A402D9; - remoteInfo = Postbox; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - D000CAD922006C6C0011B15D /* SharedAccountMediaManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedAccountMediaManager.swift; sourceTree = ""; }; - D001388520BD942B007C9721 /* PostboxUpgrade_16to17.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostboxUpgrade_16to17.swift; sourceTree = ""; }; - D003E4E51B38DBDB00C22CBC /* MessageHistoryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryView.swift; sourceTree = ""; }; - D0079F591D592E8B00A27A2C /* ContactTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactTable.swift; sourceTree = ""; }; - D0079F621D5A242500A27A2C /* ContactPeerIdsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactPeerIdsView.swift; sourceTree = ""; }; - D0079F641D5A457A00A27A2C /* ContactPeersView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactPeersView.swift; sourceTree = ""; }; - D0079F6A1D5B3AAB00A27A2C /* PeerNameIndexRepresentation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerNameIndexRepresentation.swift; sourceTree = ""; }; - D00C7CD31E365C4E0080C3D5 /* PeerChatListInclusion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerChatListInclusion.swift; sourceTree = ""; }; - D00C7CE21E37861C0080C3D5 /* MessageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageView.swift; sourceTree = ""; }; - D00EED1D1C81F28D00341DFF /* MessageHistoryTagsTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryTagsTable.swift; sourceTree = ""; }; - D0105D6A218362F2007C04A7 /* TempBox.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TempBox.swift; sourceTree = ""; }; - D010B6191E1E463900C3E282 /* PeerMergedOperationLogIndexTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerMergedOperationLogIndexTable.swift; sourceTree = ""; }; - D0119CAC20C9E7A100895300 /* PostboxUpgrade_17to18.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostboxUpgrade_17to18.swift; sourceTree = ""; }; - D015E05B2263BB3B00CB9E8A /* PostboxUpgrade_22to23.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostboxUpgrade_22to23.swift; sourceTree = ""; }; - D015E05F2265D42400CB9E8A /* GroupMessageStatsTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupMessageStatsTable.swift; sourceTree = ""; }; - D018BE54218B9AA900C02DDC /* TimeBasedCleanup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeBasedCleanup.swift; sourceTree = ""; }; - D019B1CE1E2E770700F80DB3 /* MessageGloballyUniqueIdTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageGloballyUniqueIdTable.swift; sourceTree = ""; }; - D01BAA541ED1D70C00295217 /* ManagedFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedFile.swift; sourceTree = ""; }; - D01C7EDD1EF73F71008305F1 /* MessageHistoryTextIndexTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryTextIndexTable.swift; sourceTree = ""; }; - D01C7F061EFC1ED3008305F1 /* UnorderedItemListTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnorderedItemListTable.swift; sourceTree = ""; }; - D01E79E72248F661005237FE /* PostboxUpgrade_19to20.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostboxUpgrade_19to20.swift; sourceTree = ""; }; - D01F7D9A1CBEC390008765C9 /* MessageHistorySynchronizeReadStateTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistorySynchronizeReadStateTable.swift; sourceTree = ""; }; - D01F7D9C1CBF8586008765C9 /* SynchronizePeerReadStatesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronizePeerReadStatesView.swift; sourceTree = ""; }; - D021E0D31DB4FAE100C6B04F /* ItemCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemCollection.swift; sourceTree = ""; }; - D021E0D51DB4FCFC00C6B04F /* ItemCollectionInfoTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemCollectionInfoTable.swift; sourceTree = ""; }; - D021E0D71DB4FD1300C6B04F /* ItemCollectionItemTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemCollectionItemTable.swift; sourceTree = ""; }; - D021E0DB1DB5237C00C6B04F /* ItemCollectionsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemCollectionsView.swift; sourceTree = ""; }; - D021FC252024B83700C34AB7 /* FileSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileSize.swift; sourceTree = ""; }; - D02EB8061D2B07F300D07ED3 /* OrderStatisticTreeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderStatisticTreeTests.swift; sourceTree = ""; }; - D03120F71DA53FF4006A2A60 /* PeerPresenceTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerPresenceTable.swift; sourceTree = ""; }; - D03120F91DA540F0006A2A60 /* CachedPeerData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CachedPeerData.swift; sourceTree = ""; }; - D03120FB1DA55427006A2A60 /* PeerNotificationSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerNotificationSettings.swift; sourceTree = ""; }; - D03120FD1DA562E9006A2A60 /* CachedPeerDataTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CachedPeerDataTable.swift; sourceTree = ""; }; - D03120FF1DA579A0006A2A60 /* PeerNotificationSettingsTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerNotificationSettingsTable.swift; sourceTree = ""; }; - D03229ED1E6B33FD0000AF9C /* SqliteInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SqliteInterface.swift; sourceTree = ""; }; - D033871E223554DE007A2CE4 /* HoleOperationsVector1.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = HoleOperationsVector1.json; sourceTree = ""; }; - D03387202236C239007A2CE4 /* HoleOperationsVector2.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = HoleOperationsVector2.json; sourceTree = ""; }; - D03387512242E32A007A2CE4 /* PostboxUpgrade_18to19.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostboxUpgrade_18to19.swift; sourceTree = ""; }; - D033A6F61C73D512006A2EAB /* MessageHistoryUnsentTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryUnsentTable.swift; sourceTree = ""; }; - D033A6F81C73E440006A2EAB /* UnsentMessageHistoryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnsentMessageHistoryView.swift; sourceTree = ""; }; - D037178A20D923CA004773C8 /* CachedItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachedItemView.swift; sourceTree = ""; }; - D039FB1A21714D9800BD1BAD /* PeerPresencesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerPresencesView.swift; sourceTree = ""; }; - D03BCCF71C73561C0097A291 /* Table.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Table.swift; sourceTree = ""; }; - D03E45562305C7C90049C28B /* sqlcipher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = sqlcipher.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D03E457A2305CD000049C28B /* Crc32.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Crc32.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D03E457C2305CD090049C28B /* Crc32.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Crc32.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D03E457E2305CD130049C28B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - D03E462B2306E01C0049C28B /* sqlciphermac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = sqlciphermac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D03E463C2306E0F60049C28B /* crc32mac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = crc32mac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D040CA6322665370007123CE /* PostboxUpgrade_23to24.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostboxUpgrade_23to24.swift; sourceTree = ""; }; - D0439B3E2289F6300067E026 /* AccountManagerAtomicState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountManagerAtomicState.swift; sourceTree = ""; }; - D044CA291C617D39002160FF /* SeedConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SeedConfiguration.swift; sourceTree = ""; }; - D044CA2B1C617E2D002160FF /* MessageHistoryMetadataTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryMetadataTable.swift; sourceTree = ""; }; - D044CA2D1C618373002160FF /* ChatListHole.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListHole.swift; sourceTree = ""; }; - D044E15D1B2ACB9C001EE087 /* CodingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CodingTests.swift; sourceTree = ""; }; - D044E1611B2AD667001EE087 /* MurMurHash32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MurMurHash32.h; sourceTree = ""; }; - D044E1621B2AD677001EE087 /* MurMurHash32.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MurMurHash32.m; sourceTree = ""; }; - D046142F2004E24600EC0EF2 /* LocalMessageHistoryTagsTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalMessageHistoryTagsTable.swift; sourceTree = ""; }; - D04614322004F2CC00EC0EF2 /* LocalMessageTagsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalMessageTagsView.swift; sourceTree = ""; }; - D048B33C203C838500038D05 /* PostboxUpgrade_15to16.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostboxUpgrade_15to16.swift; sourceTree = ""; }; - D048B4A720A5CBE400C79D31 /* AdditionalChatListItemsTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdditionalChatListItemsTable.swift; sourceTree = ""; }; - D048B4AE20A5EEAE00C79D31 /* AdditionalChatListItemsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdditionalChatListItemsView.swift; sourceTree = ""; }; - D049EAEF1E44D9B900A2CD3A /* PostboxStateView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostboxStateView.swift; sourceTree = ""; }; - D055BD321B7D3D2D00F06C0A /* MediaBox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaBox.swift; sourceTree = ""; }; - D0575AE21E9ECBB2006F2541 /* AccessChallengeDataView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccessChallengeDataView.swift; sourceTree = ""; }; - D05D8B30218F1D3D0064586F /* AccountSharedData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountSharedData.swift; sourceTree = ""; }; - D05D8B33218F1EBB0064586F /* AccountManagerSharedDataTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountManagerSharedDataTable.swift; sourceTree = ""; }; - D05F09A51C9E9F9300BB6F96 /* MediaResourceStatus.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaResourceStatus.swift; sourceTree = ""; }; - D060B77A1CF4845A0050BE9B /* ReadStateTableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReadStateTableTests.swift; sourceTree = ""; }; - D0633D03225B98B1003DD95F /* AdditionalMessageHistoryViewData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdditionalMessageHistoryViewData.swift; sourceTree = ""; }; - D0633D06225B98FC003DD95F /* MessageHistoryViewEntryAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageHistoryViewEntryAttributes.swift; sourceTree = ""; }; - D0633D09225BAD66003DD95F /* MessageHistoryAnchorIndex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageHistoryAnchorIndex.swift; sourceTree = ""; }; - D0633D0C225BC9EF003DD95F /* MessageHistoryViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageHistoryViewState.swift; sourceTree = ""; }; - D06CA12B227715E70094E707 /* PeerNotificationSettingsBehaviorTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerNotificationSettingsBehaviorTable.swift; sourceTree = ""; }; - D06CA12E227720910094E707 /* PeerNotificationSettingsBehaviorIndexTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerNotificationSettingsBehaviorIndexTable.swift; sourceTree = ""; }; - D06CA13122772DE40094E707 /* PeerNotificationSettingsBehaviorTimestampView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerNotificationSettingsBehaviorTimestampView.swift; sourceTree = ""; }; - D06ECFC420B796DC00C576C2 /* NoticeEntryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoticeEntryView.swift; sourceTree = ""; }; - D070479F1F3CE16500F6A8D4 /* MessageHistoryTagsSummaryTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryTagsSummaryTable.swift; sourceTree = ""; }; - D07047A11F3CE58200F6A8D4 /* PendingMessageActionsTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PendingMessageActionsTable.swift; sourceTree = ""; }; - D07047A41F3CF63800F6A8D4 /* MessageHistoryTagSummaryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryTagSummaryView.swift; sourceTree = ""; }; - D07047A71F3DA8D700F6A8D4 /* PendingMessageActionsMetadataTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PendingMessageActionsMetadataTable.swift; sourceTree = ""; }; - D07047AA1F3DD8D100F6A8D4 /* PendingMessageActionsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PendingMessageActionsView.swift; sourceTree = ""; }; - D07047B01F3DE40400F6A8D4 /* PendingMessageActionsSummaryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PendingMessageActionsSummaryView.swift; sourceTree = ""; }; - D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Postbox.xcconfig; path = Postbox/Config/Postbox.xcconfig; sourceTree = ""; }; - D07827C01E0079CB00071108 /* StringIndexTokens.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringIndexTokens.swift; sourceTree = ""; }; - D07827C21E008F7300071108 /* ReverseIndexReferenceTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReverseIndexReferenceTable.swift; sourceTree = ""; }; - D07827C41E00B23F00071108 /* PeerNameIndexTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerNameIndexTable.swift; sourceTree = ""; }; - D079FCE51F06A3170038FADE /* NoticeTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NoticeTable.swift; sourceTree = ""; }; - D07CFF801DCA765D00761F81 /* PeerChatInterfaceState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerChatInterfaceState.swift; sourceTree = ""; }; - D07CFF821DCA909100761F81 /* PeerChatInterfaceStateTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerChatInterfaceStateTable.swift; sourceTree = ""; }; - D07CFF841DCA99C400761F81 /* InitialMessageHistoryData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InitialMessageHistoryData.swift; sourceTree = ""; }; - D07E7B44224E227100BB053B /* PostboxUpgrade_20to21.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostboxUpgrade_20to21.swift; sourceTree = ""; }; - D07E7B47224E562C00BB053B /* PostboxUpgrade_21to22.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostboxUpgrade_21to22.swift; sourceTree = ""; }; - D08774FF1E3E3D9F00A97350 /* PreferencesTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferencesTable.swift; sourceTree = ""; }; - D08775021E3E3E7400A97350 /* PreferencesEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferencesEntry.swift; sourceTree = ""; }; - D08775051E3E3F2100A97350 /* PreferencesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferencesView.swift; sourceTree = ""; }; - D087C20B1E43C11C00D686F8 /* OrderedItemListView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderedItemListView.swift; sourceTree = ""; }; - D08B61BF22A75C21000A46A8 /* Hash.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hash.swift; sourceTree = ""; }; - D08C713B1C51283C00779C0F /* MessageHistoryIndexTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryIndexTable.swift; sourceTree = ""; }; - D08C713D1C512EA500779C0F /* MessageHistoryTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryTable.swift; sourceTree = ""; }; - D08CEFB31D2AD8BE0015D3BC /* RedBlackTree.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RedBlackTree.swift; sourceTree = ""; }; - D08D451E1D5D2CA700A7428A /* RatingTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RatingTable.swift; sourceTree = ""; }; - D0943AF71FDAC53F001522CC /* ChatLocation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatLocation.swift; sourceTree = ""; }; - D0943B011FDB01D8001522CC /* PostboxUpgrade_14to15.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostboxUpgrade_14to15.swift; sourceTree = ""; }; - D0977F9B1B822DB4009994B2 /* ValueBox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValueBox.swift; sourceTree = ""; }; - D0977F9D1B8234DF009994B2 /* ValueBoxKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValueBoxKey.swift; sourceTree = ""; }; - D0977F9F1B8244D7009994B2 /* SqliteValueBox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SqliteValueBox.swift; sourceTree = ""; }; - D098C6F01D7E11E9007784E4 /* Database.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Database.swift; sourceTree = ""; }; - D09ADF0B1D2EB83500C8208D /* OrderStatisticTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderStatisticTable.swift; sourceTree = ""; }; - D0A18D661E16874D004C6734 /* UnreadMessageCountsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnreadMessageCountsView.swift; sourceTree = ""; }; - D0A352F41F5488E9001423DC /* InvalidatedMessageHistoryTagsSummaryTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvalidatedMessageHistoryTagsSummaryTable.swift; sourceTree = ""; }; - D0A352F71F549D95001423DC /* InvalidatedMessageHistoryTagSummariesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvalidatedMessageHistoryTagSummariesView.swift; sourceTree = ""; }; - D0A7D9441C556CFE0016A115 /* MessageHistoryIndexTableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryIndexTableTests.swift; sourceTree = ""; }; - D0AA55121FB4C6AB00C2AB58 /* BinarySearch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BinarySearch.swift; sourceTree = ""; }; - D0AAD1B01E3266B100D5B9DE /* TimestampBasedMessageAttributesIndexTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TimestampBasedMessageAttributesIndexTable.swift; sourceTree = ""; }; - D0AAD1B11E3266B100D5B9DE /* TimestampBasedMessageAttributesTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TimestampBasedMessageAttributesTable.swift; sourceTree = ""; }; - D0AAD1B41E32673C00D5B9DE /* TimestampBasedMessageAttributesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TimestampBasedMessageAttributesView.swift; sourceTree = ""; }; - D0AB0B8B1D65D488002C78E7 /* MessageHistoryHolesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryHolesView.swift; sourceTree = ""; }; - D0AB0B8D1D65D49C002C78E7 /* ChatListHolesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListHolesView.swift; sourceTree = ""; }; - D0AB0B8F1D65D4AB002C78E7 /* UnsentMessageIndicesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnsentMessageIndicesView.swift; sourceTree = ""; }; - D0AD23261E194D1C00A7089A /* PeerOperationLogTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerOperationLogTable.swift; sourceTree = ""; }; - D0AD23281E196B6400A7089A /* PeerOperationLogMetadataTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerOperationLogMetadataTable.swift; sourceTree = ""; }; - D0AE3EBB1F68261B0069BC90 /* PeerNotificationSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerNotificationSettingsView.swift; sourceTree = ""; }; - D0B166E91F9D142A00976B40 /* MessageOfInterestHolesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageOfInterestHolesView.swift; sourceTree = ""; }; - D0B1671F1F9EAAA900976B40 /* OrderedList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderedList.swift; sourceTree = ""; }; - D0B2F75C204F551D00D3BFB9 /* DeviceContactImportInfoTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceContactImportInfoTable.swift; sourceTree = ""; }; - D0B418131D7DFAF2004562A4 /* PostboxMac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PostboxMac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0B418151D7DFAF3004562A4 /* PostboxMac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PostboxMac.h; sourceTree = ""; }; - D0B418161D7DFAF3004562A4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0B418601D7DFE95004562A4 /* SwiftSignalKitMac.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftSignalKitMac.framework; path = "../../../../Library/Developer/Xcode/DerivedData/Telegram-iOS-diblohvjozhgaifjcniwdlixlilx/Build/Products/Debug/SwiftSignalKitMac.framework"; sourceTree = ""; }; - D0B844501DAC04FE005F29E1 /* PeerPresence.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerPresence.swift; sourceTree = ""; }; - D0BC386B1E3FCEE50044D6FE /* MultiplePeersView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultiplePeersView.swift; sourceTree = ""; }; - D0BC38711E409E670044D6FE /* RenderedPeer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RenderedPeer.swift; sourceTree = ""; }; - D0BE3033206026C800FBE6D8 /* MessagesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesView.swift; sourceTree = ""; }; - D0BE38381E7C1FD4000079AF /* ItemCollectionInfoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemCollectionInfoView.swift; sourceTree = ""; }; - D0BEAF621E54B2FA00BD963D /* AccountManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountManager.swift; sourceTree = ""; }; - D0BEAF661E54B33900BD963D /* AccountRecord.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountRecord.swift; sourceTree = ""; }; - D0BEAF691E54B5FB00BD963D /* AccountManagerMetadataTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountManagerMetadataTable.swift; sourceTree = ""; }; - D0BEAF6C1E54B77900BD963D /* AccountManagerRecordTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountManagerRecordTable.swift; sourceTree = ""; }; - D0BEAF6F1E54BC1E00BD963D /* AccountRecordsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountRecordsView.swift; sourceTree = ""; }; - D0BFE51C22AFD5AF00143D08 /* MutableBasicPeerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MutableBasicPeerView.swift; sourceTree = ""; }; - D0C07F691B67DB4800966E43 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0C0B5AA1EE1AB08000F4D2C /* ReverseAssociatedPeerTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReverseAssociatedPeerTable.swift; sourceTree = ""; }; - D0C26D7D1FE3FA4E004ABF18 /* PinnedItemId.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PinnedItemId.swift; sourceTree = ""; }; - D0C27B441F4B598200A4E170 /* CachedPeerDataView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CachedPeerDataView.swift; sourceTree = ""; }; - D0C674C71CBB11C600183765 /* MessageHistoryReadStateTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryReadStateTable.swift; sourceTree = ""; }; - D0C674CB1CBB14A700183765 /* PeerReadState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerReadState.swift; sourceTree = ""; }; - D0C735271C864DF300BB3149 /* PeerChatStateTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerChatStateTable.swift; sourceTree = ""; }; - D0C8FCB61C5C2D200028C27F /* MessageHistoryViewTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryViewTests.swift; sourceTree = ""; }; - D0C9DA381C65782500855278 /* SimpleSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleSet.swift; sourceTree = ""; }; - D0CA8E4422720064008A74C3 /* InvalidatedGroupMessageStatsTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvalidatedGroupMessageStatsTable.swift; sourceTree = ""; }; - D0CA8E47227208FE008A74C3 /* SynchronizeGroupMessageStatsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SynchronizeGroupMessageStatsView.swift; sourceTree = ""; }; - D0CA8E4D2272130B008A74C3 /* PostboxUpgrade_24to25.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostboxUpgrade_24to25.swift; sourceTree = ""; }; - D0CCD61E2231CE5100EE1E08 /* PeerGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerGroup.swift; sourceTree = ""; }; - D0CCD6272232887100EE1E08 /* MessageHistoryHoleIndexTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageHistoryHoleIndexTable.swift; sourceTree = ""; }; - D0CE63F51CA1CCB2002BC462 /* MediaResource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaResource.swift; sourceTree = ""; }; - D0CE8CF21F70249400AA2DB0 /* PostboxUpgrade_13to14.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostboxUpgrade_13to14.swift; sourceTree = ""; }; - D0CE8CF51F703B1E00AA2DB0 /* PendingPeerNotificationSettingsIndexTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PendingPeerNotificationSettingsIndexTable.swift; sourceTree = ""; }; - D0D510F31D63BA8400A97B8A /* PostboxTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostboxTransaction.swift; sourceTree = ""; }; - D0D510F51D63BBE100A97B8A /* MessageHistoryOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryOperation.swift; sourceTree = ""; }; - D0D510F81D63BCC200A97B8A /* IntermediateMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IntermediateMessage.swift; sourceTree = ""; }; - D0D510FF1D64A58900A97B8A /* IpcPipe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IpcPipe.swift; sourceTree = ""; }; - D0D511011D64D73D00A97B8A /* IpcNotifier.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = IpcNotifier.mm; sourceTree = ""; }; - D0D511031D64D75200A97B8A /* IpcNotifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IpcNotifier.h; sourceTree = ""; }; - D0D949F21D35302600740E02 /* RandomAccessResourceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RandomAccessResourceTests.swift; sourceTree = ""; }; - D0D949F41D35353900740E02 /* MappedFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MappedFile.swift; sourceTree = ""; }; - D0DA1D2E1F70419D0034E892 /* PendingPeerNotificationSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PendingPeerNotificationSettingsView.swift; sourceTree = ""; }; - D0DA44471E4C7D1E005FDCA7 /* PostboxAccess.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostboxAccess.swift; sourceTree = ""; }; - D0DF0C8E1D81A350008AEB01 /* PeerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerView.swift; sourceTree = ""; }; - D0E1199F229834BC008CAE3A /* MutablePeerChatInclusionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MutablePeerChatInclusionView.swift; sourceTree = ""; }; - D0E1D30B1ECA1F5500FCEEF1 /* GlobalMessageHistoryTagsTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlobalMessageHistoryTagsTable.swift; sourceTree = ""; }; - D0E1D30E1ECA53F900FCEEF1 /* GlobalMessageTagsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlobalMessageTagsView.swift; sourceTree = ""; }; - D0E1DE141C5E1C6900C7826E /* ViewTracker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewTracker.swift; sourceTree = ""; }; - D0E23DE11E808A9400B9B6D2 /* ItemCollectionIdsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemCollectionIdsView.swift; sourceTree = ""; }; - D0E3A74A1B28A7E300A402D9 /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0E3A74E1B28A7E300A402D9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0E3A74F1B28A7E300A402D9 /* Postbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Postbox.h; sourceTree = ""; }; - D0E3A7551B28A7E300A402D9 /* PostboxTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PostboxTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - D0E3A75B1B28A7E300A402D9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0E3A7811B28ADD000A402D9 /* Postbox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Postbox.swift; sourceTree = ""; }; - D0E3A7831B28AE0900A402D9 /* Peer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Peer.swift; sourceTree = ""; }; - D0E3A7871B28AE9C00A402D9 /* Coding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Coding.swift; sourceTree = ""; }; - D0E3A79D1B28B50400A402D9 /* Message.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Message.swift; sourceTree = ""; }; - D0E3A7A11B28B7DC00A402D9 /* Media.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Media.swift; sourceTree = ""; }; - D0ECCB8E1FE9EB5500609802 /* PostboxLogging.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostboxLogging.swift; sourceTree = ""; }; - D0F019FC1E1DA0CC00F05AB3 /* PeerMergedOperationLogView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerMergedOperationLogView.swift; sourceTree = ""; }; - D0F02CDE1E99223D0065DEE2 /* Upgrades.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Upgrades.swift; sourceTree = ""; }; - D0F02CE11E9922F50065DEE2 /* PostboxUpgrade_12to13.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostboxUpgrade_12to13.swift; sourceTree = ""; }; - D0F3CC711DDE1CDC008148FA /* ItemCacheTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemCacheTable.swift; sourceTree = ""; }; - D0F3CC731DDE1EB9008148FA /* ItemCacheMetaTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemCacheMetaTable.swift; sourceTree = ""; }; - D0F53BF21E794C6700117362 /* PeerChatStateView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerChatStateView.swift; sourceTree = ""; }; - D0F7AB311DCFAB18009AD9A1 /* PeerChatTopIndexableMessageIds.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerChatTopIndexableMessageIds.swift; sourceTree = ""; }; - D0F82CFC1E4345D7007E499C /* OrderedItemListTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderedItemListTable.swift; sourceTree = ""; }; - D0F82D0B1E439FCC007E499C /* OrderedItemListEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderedItemListEntry.swift; sourceTree = ""; }; - D0F82D0E1E43A024007E499C /* OrderedItemListIndexTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderedItemListIndexTable.swift; sourceTree = ""; }; - D0F82D111E43B5D4007E499C /* OrderedItemListTableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderedItemListTableTests.swift; sourceTree = ""; }; - D0F9E85A1C565EBB00037222 /* MessageMediaTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageMediaTable.swift; sourceTree = ""; }; - D0F9E8601C57766A00037222 /* MessageHistoryTableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageHistoryTableTests.swift; sourceTree = ""; }; - D0F9E8641C58CB7F00037222 /* ChatListTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListTable.swift; sourceTree = ""; }; - D0F9E8661C58D08900037222 /* ChatListIndexTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListIndexTable.swift; sourceTree = ""; }; - D0F9E8681C58FA9300037222 /* ChatListTableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListTableTests.swift; sourceTree = ""; }; - D0F9E86A1C59719800037222 /* ChatListView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListView.swift; sourceTree = ""; }; - D0F9E86C1C5A0E5D00037222 /* MetadataTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MetadataTable.swift; sourceTree = ""; }; - D0F9E86E1C5A0E7600037222 /* KeychainTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeychainTable.swift; sourceTree = ""; }; - D0F9E8701C5A0E9B00037222 /* PeerTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerTable.swift; sourceTree = ""; }; - D0F9E8721C5A1EE500037222 /* GlobalMessageIdsTable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlobalMessageIdsTable.swift; sourceTree = ""; }; - D0F9E8741C5A334100037222 /* SimpleDictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleDictionary.swift; sourceTree = ""; }; - D0FA0AC61E77F0A2005BB9B7 /* ItemCollectionInfosView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemCollectionInfosView.swift; sourceTree = ""; }; - D0FA0AC91E780A26005BB9B7 /* PostboxView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostboxView.swift; sourceTree = ""; }; - D0FA0ACC1E781067005BB9B7 /* Views.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Views.swift; sourceTree = ""; }; - D0FC1949201E8EAF00FEDBB2 /* MediaBoxFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaBoxFile.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - D0B4180F1D7DFAF2004562A4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E463D2306E0F60049C28B /* crc32mac.framework in Frameworks */, - D03E462C2306E01C0049C28B /* sqlciphermac.framework in Frameworks */, - D0B418611D7DFE95004562A4 /* SwiftSignalKitMac.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0E3A7461B28A7E300A402D9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E457F2305CD130049C28B /* Foundation.framework in Frameworks */, - D03E457D2305CD090049C28B /* Crc32.framework in Frameworks */, - D03E45572305C7C90049C28B /* sqlcipher.framework in Frameworks */, - D0C07F6A1B67DB4800966E43 /* SwiftSignalKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0E3A7521B28A7E300A402D9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D0E3A7561B28A7E300A402D9 /* Postbox.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - D0105D69218362D9007C04A7 /* Temp Box */ = { - isa = PBXGroup; - children = ( - D0105D6A218362F2007C04A7 /* TempBox.swift */, - ); - name = "Temp Box"; - sourceTree = ""; - }; - D05F09981C9CAC1100BB6F96 /* Media Box */ = { - isa = PBXGroup; - children = ( - D055BD321B7D3D2D00F06C0A /* MediaBox.swift */, - D05F09A51C9E9F9300BB6F96 /* MediaResourceStatus.swift */, - D0CE63F51CA1CCB2002BC462 /* MediaResource.swift */, - D0FC1949201E8EAF00FEDBB2 /* MediaBoxFile.swift */, - D018BE54218B9AA900C02DDC /* TimeBasedCleanup.swift */, - ); - name = "Media Box"; - sourceTree = ""; - }; - D0633D02225B988E003DD95F /* Peer History */ = { - isa = PBXGroup; - children = ( - D003E4E51B38DBDB00C22CBC /* MessageHistoryView.swift */, - D0633D03225B98B1003DD95F /* AdditionalMessageHistoryViewData.swift */, - D0633D06225B98FC003DD95F /* MessageHistoryViewEntryAttributes.swift */, - D0633D09225BAD66003DD95F /* MessageHistoryAnchorIndex.swift */, - D0633D0C225BC9EF003DD95F /* MessageHistoryViewState.swift */, - ); - name = "Peer History"; - sourceTree = ""; - }; - D07515FC1B2C44A200AE42E0 /* thirdparty */ = { - isa = PBXGroup; - children = ( - D098C6F01D7E11E9007784E4 /* Database.swift */, - ); - name = thirdparty; - sourceTree = ""; - }; - D0B418141D7DFAF3004562A4 /* PostboxMac */ = { - isa = PBXGroup; - children = ( - D0B418151D7DFAF3004562A4 /* PostboxMac.h */, - D0B418161D7DFAF3004562A4 /* Info.plist */, - ); - path = PostboxMac; - sourceTree = ""; - }; - D0B4185F1D7DFE95004562A4 /* Frameworks */ = { - isa = PBXGroup; - children = ( - D03E463C2306E0F60049C28B /* crc32mac.framework */, - D03E462B2306E01C0049C28B /* sqlciphermac.framework */, - D03E457E2305CD130049C28B /* Foundation.framework */, - D03E457C2305CD090049C28B /* Crc32.framework */, - D03E457A2305CD000049C28B /* Crc32.framework */, - D03E45562305C7C90049C28B /* sqlcipher.framework */, - D0B418601D7DFE95004562A4 /* SwiftSignalKitMac.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - D0BEAF651E54B32B00BD963D /* Account Manager */ = { - isa = PBXGroup; - children = ( - D0BEAF621E54B2FA00BD963D /* AccountManager.swift */, - D0BEAF661E54B33900BD963D /* AccountRecord.swift */, - D0BEAF691E54B5FB00BD963D /* AccountManagerMetadataTable.swift */, - D0BEAF6C1E54B77900BD963D /* AccountManagerRecordTable.swift */, - D05D8B33218F1EBB0064586F /* AccountManagerSharedDataTable.swift */, - D0BEAF6F1E54BC1E00BD963D /* AccountRecordsView.swift */, - D05D8B30218F1D3D0064586F /* AccountSharedData.swift */, - D0575AE21E9ECBB2006F2541 /* AccessChallengeDataView.swift */, - D000CAD922006C6C0011B15D /* SharedAccountMediaManager.swift */, - D06ECFC420B796DC00C576C2 /* NoticeEntryView.swift */, - D0439B3E2289F6300067E026 /* AccountManagerAtomicState.swift */, - ); - name = "Account Manager"; - sourceTree = ""; - }; - D0DA443F1E4C7834005FDCA7 /* Upgrade */ = { - isa = PBXGroup; - children = ( - D0F02CDE1E99223D0065DEE2 /* Upgrades.swift */, - D0F02CE11E9922F50065DEE2 /* PostboxUpgrade_12to13.swift */, - D0CE8CF21F70249400AA2DB0 /* PostboxUpgrade_13to14.swift */, - D0943B011FDB01D8001522CC /* PostboxUpgrade_14to15.swift */, - D048B33C203C838500038D05 /* PostboxUpgrade_15to16.swift */, - D001388520BD942B007C9721 /* PostboxUpgrade_16to17.swift */, - D0119CAC20C9E7A100895300 /* PostboxUpgrade_17to18.swift */, - D03387512242E32A007A2CE4 /* PostboxUpgrade_18to19.swift */, - D01E79E72248F661005237FE /* PostboxUpgrade_19to20.swift */, - D07E7B44224E227100BB053B /* PostboxUpgrade_20to21.swift */, - D07E7B47224E562C00BB053B /* PostboxUpgrade_21to22.swift */, - D015E05B2263BB3B00CB9E8A /* PostboxUpgrade_22to23.swift */, - D040CA6322665370007123CE /* PostboxUpgrade_23to24.swift */, - D0CA8E4D2272130B008A74C3 /* PostboxUpgrade_24to25.swift */, - ); - name = Upgrade; - sourceTree = ""; - }; - D0E1DE161C5EB06000C7826E /* Tables */ = { - isa = PBXGroup; - children = ( - D03BCCF71C73561C0097A291 /* Table.swift */, - D019B1CE1E2E770700F80DB3 /* MessageGloballyUniqueIdTable.swift */, - D0F9E8721C5A1EE500037222 /* GlobalMessageIdsTable.swift */, - D044CA2B1C617E2D002160FF /* MessageHistoryMetadataTable.swift */, - D08C713B1C51283C00779C0F /* MessageHistoryIndexTable.swift */, - D0CCD6272232887100EE1E08 /* MessageHistoryHoleIndexTable.swift */, - D08C713D1C512EA500779C0F /* MessageHistoryTable.swift */, - D0D510F51D63BBE100A97B8A /* MessageHistoryOperation.swift */, - D00EED1D1C81F28D00341DFF /* MessageHistoryTagsTable.swift */, - D070479F1F3CE16500F6A8D4 /* MessageHistoryTagsSummaryTable.swift */, - D0A352F41F5488E9001423DC /* InvalidatedMessageHistoryTagsSummaryTable.swift */, - D01C7EDD1EF73F71008305F1 /* MessageHistoryTextIndexTable.swift */, - D07047A11F3CE58200F6A8D4 /* PendingMessageActionsTable.swift */, - D07047A71F3DA8D700F6A8D4 /* PendingMessageActionsMetadataTable.swift */, - D0E1D30B1ECA1F5500FCEEF1 /* GlobalMessageHistoryTagsTable.swift */, - D033A6F61C73D512006A2EAB /* MessageHistoryUnsentTable.swift */, - D0F9E8641C58CB7F00037222 /* ChatListTable.swift */, - D0F9E8661C58D08900037222 /* ChatListIndexTable.swift */, - D048B4A720A5CBE400C79D31 /* AdditionalChatListItemsTable.swift */, - D0F9E85A1C565EBB00037222 /* MessageMediaTable.swift */, - D0F9E86C1C5A0E5D00037222 /* MetadataTable.swift */, - D0F9E86E1C5A0E7600037222 /* KeychainTable.swift */, - D0F9E8701C5A0E9B00037222 /* PeerTable.swift */, - D03120FF1DA579A0006A2A60 /* PeerNotificationSettingsTable.swift */, - D06CA12B227715E70094E707 /* PeerNotificationSettingsBehaviorTable.swift */, - D06CA12E227720910094E707 /* PeerNotificationSettingsBehaviorIndexTable.swift */, - D0CE8CF51F703B1E00AA2DB0 /* PendingPeerNotificationSettingsIndexTable.swift */, - D03120FD1DA562E9006A2A60 /* CachedPeerDataTable.swift */, - D03120F71DA53FF4006A2A60 /* PeerPresenceTable.swift */, - D0C735271C864DF300BB3149 /* PeerChatStateTable.swift */, - D0079F591D592E8B00A27A2C /* ContactTable.swift */, - D0C674C71CBB11C600183765 /* MessageHistoryReadStateTable.swift */, - D01F7D9A1CBEC390008765C9 /* MessageHistorySynchronizeReadStateTable.swift */, - D0CA8E4422720064008A74C3 /* InvalidatedGroupMessageStatsTable.swift */, - D09ADF0B1D2EB83500C8208D /* OrderStatisticTable.swift */, - D08D451E1D5D2CA700A7428A /* RatingTable.swift */, - D021E0D51DB4FCFC00C6B04F /* ItemCollectionInfoTable.swift */, - D021E0D71DB4FD1300C6B04F /* ItemCollectionItemTable.swift */, - D07CFF821DCA909100761F81 /* PeerChatInterfaceStateTable.swift */, - D0F7AB311DCFAB18009AD9A1 /* PeerChatTopIndexableMessageIds.swift */, - D0F3CC731DDE1EB9008148FA /* ItemCacheMetaTable.swift */, - D0F3CC711DDE1CDC008148FA /* ItemCacheTable.swift */, - D07827C21E008F7300071108 /* ReverseIndexReferenceTable.swift */, - D07827C41E00B23F00071108 /* PeerNameIndexTable.swift */, - D0C0B5AA1EE1AB08000F4D2C /* ReverseAssociatedPeerTable.swift */, - D0AD23261E194D1C00A7089A /* PeerOperationLogTable.swift */, - D010B6191E1E463900C3E282 /* PeerMergedOperationLogIndexTable.swift */, - D0AD23281E196B6400A7089A /* PeerOperationLogMetadataTable.swift */, - D0AAD1B11E3266B100D5B9DE /* TimestampBasedMessageAttributesTable.swift */, - D0AAD1B01E3266B100D5B9DE /* TimestampBasedMessageAttributesIndexTable.swift */, - D08774FF1E3E3D9F00A97350 /* PreferencesTable.swift */, - D0F82CFC1E4345D7007E499C /* OrderedItemListTable.swift */, - D0F82D0E1E43A024007E499C /* OrderedItemListIndexTable.swift */, - D01C7F061EFC1ED3008305F1 /* UnorderedItemListTable.swift */, - D079FCE51F06A3170038FADE /* NoticeTable.swift */, - D046142F2004E24600EC0EF2 /* LocalMessageHistoryTagsTable.swift */, - D0B2F75C204F551D00D3BFB9 /* DeviceContactImportInfoTable.swift */, - D015E05F2265D42400CB9E8A /* GroupMessageStatsTable.swift */, - ); - name = Tables; - sourceTree = ""; - }; - D0E1DE171C5EB06B00C7826E /* Objects */ = { - isa = PBXGroup; - children = ( - D0E3A7831B28AE0900A402D9 /* Peer.swift */, - D0E3A79D1B28B50400A402D9 /* Message.swift */, - D0D510F81D63BCC200A97B8A /* IntermediateMessage.swift */, - D0E3A7A11B28B7DC00A402D9 /* Media.swift */, - D044CA2D1C618373002160FF /* ChatListHole.swift */, - D0C674CB1CBB14A700183765 /* PeerReadState.swift */, - D0079F6A1D5B3AAB00A27A2C /* PeerNameIndexRepresentation.swift */, - D03120F91DA540F0006A2A60 /* CachedPeerData.swift */, - D0B844501DAC04FE005F29E1 /* PeerPresence.swift */, - D03120FB1DA55427006A2A60 /* PeerNotificationSettings.swift */, - D021E0D31DB4FAE100C6B04F /* ItemCollection.swift */, - D07CFF801DCA765D00761F81 /* PeerChatInterfaceState.swift */, - D00C7CD31E365C4E0080C3D5 /* PeerChatListInclusion.swift */, - D08775021E3E3E7400A97350 /* PreferencesEntry.swift */, - D0BC38711E409E670044D6FE /* RenderedPeer.swift */, - D0F82D0B1E439FCC007E499C /* OrderedItemListEntry.swift */, - D0943AF71FDAC53F001522CC /* ChatLocation.swift */, - D0C26D7D1FE3FA4E004ABF18 /* PinnedItemId.swift */, - D0CCD61E2231CE5100EE1E08 /* PeerGroup.swift */, - ); - name = Objects; - sourceTree = ""; - }; - D0E1DE181C5EB09300C7826E /* Utils */ = { - isa = PBXGroup; - children = ( - D0E3A7871B28AE9C00A402D9 /* Coding.swift */, - D0F9E8741C5A334100037222 /* SimpleDictionary.swift */, - D0C9DA381C65782500855278 /* SimpleSet.swift */, - D08CEFB31D2AD8BE0015D3BC /* RedBlackTree.swift */, - D0D949F41D35353900740E02 /* MappedFile.swift */, - D0D510FF1D64A58900A97B8A /* IpcPipe.swift */, - D07827C01E0079CB00071108 /* StringIndexTokens.swift */, - D03229ED1E6B33FD0000AF9C /* SqliteInterface.swift */, - D01BAA541ED1D70C00295217 /* ManagedFile.swift */, - D0B1671F1F9EAAA900976B40 /* OrderedList.swift */, - D0AA55121FB4C6AB00C2AB58 /* BinarySearch.swift */, - D0ECCB8E1FE9EB5500609802 /* PostboxLogging.swift */, - D021FC252024B83700C34AB7 /* FileSize.swift */, - D08B61BF22A75C21000A46A8 /* Hash.swift */, - ); - name = Utils; - sourceTree = ""; - }; - D0E1DE191C5EB0B500C7826E /* Value Box */ = { - isa = PBXGroup; - children = ( - D0977F9D1B8234DF009994B2 /* ValueBoxKey.swift */, - D0977F9B1B822DB4009994B2 /* ValueBox.swift */, - D0977F9F1B8244D7009994B2 /* SqliteValueBox.swift */, - ); - name = "Value Box"; - sourceTree = ""; - }; - D0E1DE1A1C5EB0DB00C7826E /* Views */ = { - isa = PBXGroup; - children = ( - D0633D02225B988E003DD95F /* Peer History */, - D049EAEF1E44D9B900A2CD3A /* PostboxStateView.swift */, - D07CFF841DCA99C400761F81 /* InitialMessageHistoryData.swift */, - D0F9E86A1C59719800037222 /* ChatListView.swift */, - D033A6F81C73E440006A2EAB /* UnsentMessageHistoryView.swift */, - D01F7D9C1CBF8586008765C9 /* SynchronizePeerReadStatesView.swift */, - D0079F621D5A242500A27A2C /* ContactPeerIdsView.swift */, - D0079F641D5A457A00A27A2C /* ContactPeersView.swift */, - D0AB0B8B1D65D488002C78E7 /* MessageHistoryHolesView.swift */, - D0AB0B8D1D65D49C002C78E7 /* ChatListHolesView.swift */, - D0AB0B8F1D65D4AB002C78E7 /* UnsentMessageIndicesView.swift */, - D0DF0C8E1D81A350008AEB01 /* PeerView.swift */, - D021E0DB1DB5237C00C6B04F /* ItemCollectionsView.swift */, - D0FA0AC61E77F0A2005BB9B7 /* ItemCollectionInfosView.swift */, - D0E23DE11E808A9400B9B6D2 /* ItemCollectionIdsView.swift */, - D0BE38381E7C1FD4000079AF /* ItemCollectionInfoView.swift */, - D0A18D661E16874D004C6734 /* UnreadMessageCountsView.swift */, - D0F019FC1E1DA0CC00F05AB3 /* PeerMergedOperationLogView.swift */, - D0AAD1B41E32673C00D5B9DE /* TimestampBasedMessageAttributesView.swift */, - D00C7CE21E37861C0080C3D5 /* MessageView.swift */, - D08775051E3E3F2100A97350 /* PreferencesView.swift */, - D0BC386B1E3FCEE50044D6FE /* MultiplePeersView.swift */, - D087C20B1E43C11C00D686F8 /* OrderedItemListView.swift */, - D0FA0AC91E780A26005BB9B7 /* PostboxView.swift */, - D0FA0ACC1E781067005BB9B7 /* Views.swift */, - D0F53BF21E794C6700117362 /* PeerChatStateView.swift */, - D0E1D30E1ECA53F900FCEEF1 /* GlobalMessageTagsView.swift */, - D07047A41F3CF63800F6A8D4 /* MessageHistoryTagSummaryView.swift */, - D07047AA1F3DD8D100F6A8D4 /* PendingMessageActionsView.swift */, - D0A352F71F549D95001423DC /* InvalidatedMessageHistoryTagSummariesView.swift */, - D07047B01F3DE40400F6A8D4 /* PendingMessageActionsSummaryView.swift */, - D0C27B441F4B598200A4E170 /* CachedPeerDataView.swift */, - D0AE3EBB1F68261B0069BC90 /* PeerNotificationSettingsView.swift */, - D0DA1D2E1F70419D0034E892 /* PendingPeerNotificationSettingsView.swift */, - D0B166E91F9D142A00976B40 /* MessageOfInterestHolesView.swift */, - D04614322004F2CC00EC0EF2 /* LocalMessageTagsView.swift */, - D0BE3033206026C800FBE6D8 /* MessagesView.swift */, - D048B4AE20A5EEAE00C79D31 /* AdditionalChatListItemsView.swift */, - D037178A20D923CA004773C8 /* CachedItemView.swift */, - D039FB1A21714D9800BD1BAD /* PeerPresencesView.swift */, - D0CA8E47227208FE008A74C3 /* SynchronizeGroupMessageStatsView.swift */, - D06CA13122772DE40094E707 /* PeerNotificationSettingsBehaviorTimestampView.swift */, - D0E1199F229834BC008CAE3A /* MutablePeerChatInclusionView.swift */, - D0BFE51C22AFD5AF00143D08 /* MutableBasicPeerView.swift */, - ); - name = Views; - sourceTree = ""; - }; - D0E3A7401B28A7E300A402D9 = { - isa = PBXGroup; - children = ( - D0C07F691B67DB4800966E43 /* SwiftSignalKit.framework */, - D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */, - D0E3A74C1B28A7E300A402D9 /* Postbox */, - D0E3A7591B28A7E300A402D9 /* PostboxTests */, - D0B418141D7DFAF3004562A4 /* PostboxMac */, - D0E3A74B1B28A7E300A402D9 /* Products */, - D0B4185F1D7DFE95004562A4 /* Frameworks */, - ); - sourceTree = ""; - }; - D0E3A74B1B28A7E300A402D9 /* Products */ = { - isa = PBXGroup; - children = ( - D0E3A74A1B28A7E300A402D9 /* Postbox.framework */, - D0E3A7551B28A7E300A402D9 /* PostboxTests.xctest */, - D0B418131D7DFAF2004562A4 /* PostboxMac.framework */, - ); - name = Products; - sourceTree = ""; - }; - D0E3A74C1B28A7E300A402D9 /* Postbox */ = { - isa = PBXGroup; - children = ( - D0DA443F1E4C7834005FDCA7 /* Upgrade */, - D07515FC1B2C44A200AE42E0 /* thirdparty */, - D0E1DE181C5EB09300C7826E /* Utils */, - D0E1DE171C5EB06B00C7826E /* Objects */, - D0E1DE191C5EB0B500C7826E /* Value Box */, - D0E1DE161C5EB06000C7826E /* Tables */, - D0E1DE1A1C5EB0DB00C7826E /* Views */, - D0105D69218362D9007C04A7 /* Temp Box */, - D05F09981C9CAC1100BB6F96 /* Media Box */, - D0E3A7811B28ADD000A402D9 /* Postbox.swift */, - D0DA44471E4C7D1E005FDCA7 /* PostboxAccess.swift */, - D044CA291C617D39002160FF /* SeedConfiguration.swift */, - D0D510F31D63BA8400A97B8A /* PostboxTransaction.swift */, - D0E1DE141C5E1C6900C7826E /* ViewTracker.swift */, - D0BEAF651E54B32B00BD963D /* Account Manager */, - D0E3A74D1B28A7E300A402D9 /* Supporting Files */, - ); - path = Postbox; - sourceTree = ""; - }; - D0E3A74D1B28A7E300A402D9 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D044E1611B2AD667001EE087 /* MurMurHash32.h */, - D044E1621B2AD677001EE087 /* MurMurHash32.m */, - D0E3A74F1B28A7E300A402D9 /* Postbox.h */, - D0E3A74E1B28A7E300A402D9 /* Info.plist */, - D0D511031D64D75200A97B8A /* IpcNotifier.h */, - D0D511011D64D73D00A97B8A /* IpcNotifier.mm */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D0E3A7591B28A7E300A402D9 /* PostboxTests */ = { - isa = PBXGroup; - children = ( - D0E3A75A1B28A7E300A402D9 /* Supporting Files */, - D044E15D1B2ACB9C001EE087 /* CodingTests.swift */, - D0A7D9441C556CFE0016A115 /* MessageHistoryIndexTableTests.swift */, - D0F9E8601C57766A00037222 /* MessageHistoryTableTests.swift */, - D0F9E8681C58FA9300037222 /* ChatListTableTests.swift */, - D0C8FCB61C5C2D200028C27F /* MessageHistoryViewTests.swift */, - D060B77A1CF4845A0050BE9B /* ReadStateTableTests.swift */, - D02EB8061D2B07F300D07ED3 /* OrderStatisticTreeTests.swift */, - D0D949F21D35302600740E02 /* RandomAccessResourceTests.swift */, - D0F82D111E43B5D4007E499C /* OrderedItemListTableTests.swift */, - ); - path = PostboxTests; - sourceTree = ""; - }; - D0E3A75A1B28A7E300A402D9 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D0E3A75B1B28A7E300A402D9 /* Info.plist */, - D033871E223554DE007A2CE4 /* HoleOperationsVector1.json */, - D03387202236C239007A2CE4 /* HoleOperationsVector2.json */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - D0B418101D7DFAF2004562A4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D0B4185B1D7DFE2C004562A4 /* MurMurHash32.h in Headers */, - D0B418171D7DFAF3004562A4 /* PostboxMac.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0E3A7471B28A7E300A402D9 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D0E3A7501B28A7E300A402D9 /* Postbox.h in Headers */, - D044E1641B2AD718001EE087 /* MurMurHash32.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - D0B418121D7DFAF2004562A4 /* PostboxMac */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0B4181B1D7DFAF3004562A4 /* Build configuration list for PBXNativeTarget "PostboxMac" */; - buildPhases = ( - D0B4180E1D7DFAF2004562A4 /* Sources */, - D0B4180F1D7DFAF2004562A4 /* Frameworks */, - D0B418101D7DFAF2004562A4 /* Headers */, - D0B418111D7DFAF2004562A4 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = PostboxMac; - productName = PostboxMac; - productReference = D0B418131D7DFAF2004562A4 /* PostboxMac.framework */; - productType = "com.apple.product-type.framework"; - }; - D0E3A7491B28A7E300A402D9 /* Postbox */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0E3A7601B28A7E300A402D9 /* Build configuration list for PBXNativeTarget "Postbox" */; - buildPhases = ( - D0E3A7451B28A7E300A402D9 /* Sources */, - D0E3A7461B28A7E300A402D9 /* Frameworks */, - D0E3A7471B28A7E300A402D9 /* Headers */, - D0E3A7481B28A7E300A402D9 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Postbox; - productName = Postbox; - productReference = D0E3A74A1B28A7E300A402D9 /* Postbox.framework */; - productType = "com.apple.product-type.framework"; - }; - D0E3A7541B28A7E300A402D9 /* PostboxTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0E3A7631B28A7E300A402D9 /* Build configuration list for PBXNativeTarget "PostboxTests" */; - buildPhases = ( - D0E3A7511B28A7E300A402D9 /* Sources */, - D0E3A7521B28A7E300A402D9 /* Frameworks */, - D0E3A7531B28A7E300A402D9 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - D0E3A7581B28A7E300A402D9 /* PBXTargetDependency */, - ); - name = PostboxTests; - productName = PostboxTests; - productReference = D0E3A7551B28A7E300A402D9 /* PostboxTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D0E3A7411B28A7E300A402D9 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftMigration = 0700; - LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0800; - ORGANIZATIONNAME = Telegram; - TargetAttributes = { - D0B418121D7DFAF2004562A4 = { - CreatedOnToolsVersion = 8.0; - ProvisioningStyle = Manual; - }; - D0E3A7491B28A7E300A402D9 = { - CreatedOnToolsVersion = 6.3.1; - ProvisioningStyle = Manual; - }; - D0E3A7541B28A7E300A402D9 = { - CreatedOnToolsVersion = 6.3.1; - ProvisioningStyle = Manual; - }; - }; - }; - buildConfigurationList = D0E3A7441B28A7E300A402D9 /* Build configuration list for PBXProject "Postbox_Xcode" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - en, - ); - mainGroup = D0E3A7401B28A7E300A402D9; - productRefGroup = D0E3A74B1B28A7E300A402D9 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - D0E3A7491B28A7E300A402D9 /* Postbox */, - D0E3A7541B28A7E300A402D9 /* PostboxTests */, - D0B418121D7DFAF2004562A4 /* PostboxMac */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - D0B418111D7DFAF2004562A4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0E3A7481B28A7E300A402D9 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0E3A7531B28A7E300A402D9 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D033871F223554DE007A2CE4 /* HoleOperationsVector1.json in Resources */, - D03387212236C239007A2CE4 /* HoleOperationsVector2.json in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - D0B4180E1D7DFAF2004562A4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9F291C9B2264CFCC00C66267 /* (null) in Sources */, - 9F5B6E762011449F00C58B2A /* PostboxLogging.swift in Sources */, - C20EB2A31F7179DC00DD3A57 /* PeerNotificationSettingsView.swift in Sources */, - C25B56FE1F431C3300581D02 /* MessageHistoryTagsSummaryTable.swift in Sources */, - D0633D08225B98FC003DD95F /* MessageHistoryViewEntryAttributes.swift in Sources */, - D050F2661E4A5B5A00988324 /* MessageGloballyUniqueIdTable.swift in Sources */, - D03229EF1E6B33FD0000AF9C /* SqliteInterface.swift in Sources */, - D0AA55141FB4C6AB00C2AB58 /* BinarySearch.swift in Sources */, - D01C7F081EFC1ED3008305F1 /* UnorderedItemListTable.swift in Sources */, - D050F2671E4A5B5A00988324 /* TimestampBasedMessageAttributesTable.swift in Sources */, - D050F2681E4A5B5A00988324 /* TimestampBasedMessageAttributesIndexTable.swift in Sources */, - D050F2691E4A5B5A00988324 /* MultiplePeersView.swift in Sources */, - C2A315BE1E2E733900D89000 /* PeerMergedOperationLogIndexTable.swift in Sources */, - D0633D05225B98B1003DD95F /* AdditionalMessageHistoryViewData.swift in Sources */, - C2A315BF1E2E733900D89000 /* PeerMergedOperationLogView.swift in Sources */, - C2A315BD1E2E732000D89000 /* PeerOperationLogMetadataTable.swift in Sources */, - D000CADB22006C6C0011B15D /* SharedAccountMediaManager.swift in Sources */, - D0575AE41E9ECBB2006F2541 /* AccessChallengeDataView.swift in Sources */, - C2A315BC1E2E730400D89000 /* PeerOperationLogTable.swift in Sources */, - D0B2F75E204F551D00D3BFB9 /* DeviceContactImportInfoTable.swift in Sources */, - D0C26D7F1FE3FA4E004ABF18 /* PinnedItemId.swift in Sources */, - C2AC9C131E1E5D200085C7DE /* UnreadMessageCountsView.swift in Sources */, - D0B418481D7DFE20004562A4 /* MessageHistoryView.swift in Sources */, - D0F7B1DF1E045C6A007EB8A5 /* ItemCacheMetaTable.swift in Sources */, - D0F7B1C41E045C6A007EB8A5 /* GlobalMessageIdsTable.swift in Sources */, - D073CE7E1DCBF3B4007511FD /* PeerNotificationSettings.swift in Sources */, - D0F7B1DC1E045C6A007EB8A5 /* ItemCollectionItemTable.swift in Sources */, - D0F7B1C71E045C6A007EB8A5 /* MessageHistoryTable.swift in Sources */, - D0B418571D7DFE29004562A4 /* Postbox.swift in Sources */, - D0B418251D7DFE0C004562A4 /* RedBlackTree.swift in Sources */, - D07047A31F3CE58200F6A8D4 /* PendingMessageActionsTable.swift in Sources */, - D04614342004F2CC00EC0EF2 /* LocalMessageTagsView.swift in Sources */, - D0CCD6202231CE5400EE1E08 /* PeerGroup.swift in Sources */, - D0BEAF681E54B33900BD963D /* AccountRecord.swift in Sources */, - D05D8B35218F1EBB0064586F /* AccountManagerSharedDataTable.swift in Sources */, - D06CA13322772DE40094E707 /* PeerNotificationSettingsBehaviorTimestampView.swift in Sources */, - D0F7B1C61E045C6A007EB8A5 /* MessageHistoryIndexTable.swift in Sources */, - D0F7B1CD1E045C6A007EB8A5 /* MessageMediaTable.swift in Sources */, - D0B844071DAB91B5005F29E1 /* MediaResource.swift in Sources */, - D0F7B1D71E045C6A007EB8A5 /* MessageHistoryReadStateTable.swift in Sources */, - D0B418261D7DFE0C004562A4 /* MappedFile.swift in Sources */, - D048B4A920A5CBE400C79D31 /* AdditionalChatListItemsTable.swift in Sources */, - D039FB1C21714D9800BD1BAD /* PeerPresencesView.swift in Sources */, - D073CE771DCBF3B4007511FD /* Media.swift in Sources */, - D037178C20D923CA004773C8 /* CachedItemView.swift in Sources */, - D0CA8E4622720064008A74C3 /* InvalidatedGroupMessageStatsTable.swift in Sources */, - D0A352F91F549D95001423DC /* InvalidatedMessageHistoryTagSummariesView.swift in Sources */, - D0CA8E49227208FE008A74C3 /* SynchronizeGroupMessageStatsView.swift in Sources */, - D018BE56218B9AA900C02DDC /* TimeBasedCleanup.swift in Sources */, - D07E7B46224E227100BB053B /* PostboxUpgrade_20to21.swift in Sources */, - D073CE791DCBF3B4007511FD /* ChatListHole.swift in Sources */, - D0F53BF41E794C6700117362 /* PeerChatStateView.swift in Sources */, - D06CA130227720910094E707 /* PeerNotificationSettingsBehaviorIndexTable.swift in Sources */, - D0F82D0D1E439FCC007E499C /* OrderedItemListEntry.swift in Sources */, - D0B418591D7DFE29004562A4 /* PostboxTransaction.swift in Sources */, - D0F7B1D21E045C6A007EB8A5 /* PeerNotificationSettingsTable.swift in Sources */, - D0E23DE31E808A9400B9B6D2 /* ItemCollectionIdsView.swift in Sources */, - D0119CAE20C9E7A100895300 /* PostboxUpgrade_17to18.swift in Sources */, - D0F7B1C91E045C6A007EB8A5 /* MessageHistoryTagsTable.swift in Sources */, - D0B418271D7DFE0C004562A4 /* IpcPipe.swift in Sources */, - D0FA0ACB1E780A26005BB9B7 /* PostboxView.swift in Sources */, - D0B4184D1D7DFE20004562A4 /* ContactPeersView.swift in Sources */, - D00C7CE41E37861C0080C3D5 /* MessageView.swift in Sources */, - D08775011E3E3D9F00A97350 /* PreferencesTable.swift in Sources */, - D0F7B1CC1E045C6A007EB8A5 /* ChatListIndexTable.swift in Sources */, - D07047A61F3CF63800F6A8D4 /* MessageHistoryTagSummaryView.swift in Sources */, - D0F7B1D31E045C6A007EB8A5 /* CachedPeerDataTable.swift in Sources */, - D079FCE71F06A31C0038FADE /* NoticeTable.swift in Sources */, - D0F7B1D51E045C6A007EB8A5 /* PeerChatStateTable.swift in Sources */, - D0F82CFE1E4345D7007E499C /* OrderedItemListTable.swift in Sources */, - D0F7B1C51E045C6A007EB8A5 /* MessageHistoryMetadataTable.swift in Sources */, - D0CE8CF71F703B1E00AA2DB0 /* PendingPeerNotificationSettingsIndexTable.swift in Sources */, - D0E1D3101ECA53F900FCEEF1 /* GlobalMessageTagsView.swift in Sources */, - D08775071E3E3F2100A97350 /* PreferencesView.swift in Sources */, - D049EAF11E44D9B900A2CD3A /* PostboxStateView.swift in Sources */, - D0AAD1B61E32673C00D5B9DE /* TimestampBasedMessageAttributesView.swift in Sources */, - D0F7B1C31E045C6A007EB8A5 /* Table.swift in Sources */, - D06ECFC620B796DC00C576C2 /* NoticeEntryView.swift in Sources */, - D0F82D101E43A024007E499C /* OrderedItemListIndexTable.swift in Sources */, - D0F7B1CF1E045C6A007EB8A5 /* MetadataTable.swift in Sources */, - D0FA0ACE1E781067005BB9B7 /* Views.swift in Sources */, - D0B418501D7DFE20004562A4 /* UnsentMessageIndicesView.swift in Sources */, - D0BEAF641E54B2FA00BD963D /* AccountManager.swift in Sources */, - D015E0612265D42400CB9E8A /* GroupMessageStatsTable.swift in Sources */, - D021FC272024B83700C34AB7 /* FileSize.swift in Sources */, - D073CE7F1DCBF3B4007511FD /* ItemCollection.swift in Sources */, - D07047B21F3DE40400F6A8D4 /* PendingMessageActionsSummaryView.swift in Sources */, - D0F7B1D91E045C6A007EB8A5 /* OrderStatisticTable.swift in Sources */, - D0FC194B201E8EAF00FEDBB2 /* MediaBoxFile.swift in Sources */, - D073CEA01DCBF3C1007511FD /* ItemCollectionsView.swift in Sources */, - D0439B402289F6300067E026 /* AccountManagerAtomicState.swift in Sources */, - D0BE383A1E7C1FD4000079AF /* ItemCollectionInfoView.swift in Sources */, - D0B418491D7DFE20004562A4 /* ChatListView.swift in Sources */, - D048B33E203C838500038D05 /* PostboxUpgrade_15to16.swift in Sources */, - D0F7B1D61E045C6A007EB8A5 /* ContactTable.swift in Sources */, - D0943B031FDB01D8001522CC /* PostboxUpgrade_14to15.swift in Sources */, - D0F7B1D11E045C6A007EB8A5 /* PeerTable.swift in Sources */, - D04614312004E24600EC0EF2 /* LocalMessageHistoryTagsTable.swift in Sources */, - D0F7B1DD1E045C6A007EB8A5 /* PeerChatInterfaceStateTable.swift in Sources */, - D098C6F21D7E1201007784E4 /* Database.swift in Sources */, - D07E7B49224E562C00BB053B /* PostboxUpgrade_21to22.swift in Sources */, - D0BFE51E22AFD5AF00143D08 /* MutableBasicPeerView.swift in Sources */, - D0B844061DAB91B5005F29E1 /* MediaResourceStatus.swift in Sources */, - D0F7B1DB1E045C6A007EB8A5 /* ItemCollectionInfoTable.swift in Sources */, - D0F7B1D41E045C6A007EB8A5 /* PeerPresenceTable.swift in Sources */, - D073CE761DCBF3B4007511FD /* IntermediateMessage.swift in Sources */, - D0FA0AC81E77F0A2005BB9B7 /* ItemCollectionInfosView.swift in Sources */, - D0B4185A1D7DFE29004562A4 /* ViewTracker.swift in Sources */, - D0F7B1E21E045C6A007EB8A5 /* PeerNameIndexTable.swift in Sources */, - D0E1D30D1ECA1F5500FCEEF1 /* GlobalMessageHistoryTagsTable.swift in Sources */, - D06CA12D227715E70094E707 /* PeerNotificationSettingsBehaviorTable.swift in Sources */, - D073CE7C1DCBF3B4007511FD /* CachedPeerData.swift in Sources */, - D0E119A1229834BC008CAE3A /* MutablePeerChatInclusionView.swift in Sources */, - D0F7B1DA1E045C6A007EB8A5 /* RatingTable.swift in Sources */, - D0BEAF711E54BC1E00BD963D /* AccountRecordsView.swift in Sources */, - D073CE9F1DCBF3C1007511FD /* InitialMessageHistoryData.swift in Sources */, - D0A352F61F5488E9001423DC /* InvalidatedMessageHistoryTagsSummaryTable.swift in Sources */, - D0BC38731E409E670044D6FE /* RenderedPeer.swift in Sources */, - D0F7B1DE1E045C6A007EB8A5 /* PeerChatTopIndexableMessageIds.swift in Sources */, - D0B4184A1D7DFE20004562A4 /* UnsentMessageHistoryView.swift in Sources */, - D0B418231D7DFE0C004562A4 /* SimpleDictionary.swift in Sources */, - D0B4185C1D7DFE2F004562A4 /* MurMurHash32.m in Sources */, - D0F7B1E01E045C6A007EB8A5 /* ItemCacheTable.swift in Sources */, - D07047A91F3DA8D700F6A8D4 /* PendingMessageActionsMetadataTable.swift in Sources */, - D0DA1D301F70419D0034E892 /* PendingPeerNotificationSettingsView.swift in Sources */, - D0F7B1E11E045C6A007EB8A5 /* ReverseIndexReferenceTable.swift in Sources */, - D0CCD6292232887100EE1E08 /* MessageHistoryHoleIndexTable.swift in Sources */, - D0B418241D7DFE0C004562A4 /* SimpleSet.swift in Sources */, - D0CA8E4F2272130B008A74C3 /* PostboxUpgrade_24to25.swift in Sources */, - D073CE7B1DCBF3B4007511FD /* PeerNameIndexRepresentation.swift in Sources */, - D073CE7D1DCBF3B4007511FD /* PeerPresence.swift in Sources */, - D048B4B020A5EEAE00C79D31 /* AdditionalChatListItemsView.swift in Sources */, - D0BE3035206026C800FBE6D8 /* MessagesView.swift in Sources */, - D0B4184C1D7DFE20004562A4 /* ContactPeerIdsView.swift in Sources */, - D0DA44491E4C7D1E005FDCA7 /* PostboxAccess.swift in Sources */, - D0B167211F9EAAA900976B40 /* OrderedList.swift in Sources */, - D0CE8CF41F70249400AA2DB0 /* PostboxUpgrade_13to14.swift in Sources */, - D073CE751DCBF3B4007511FD /* Message.swift in Sources */, - D0943AF91FDAC540001522CC /* ChatLocation.swift in Sources */, - D087C20D1E43C11C00D686F8 /* OrderedItemListView.swift in Sources */, - D00C7CD51E365C4E0080C3D5 /* PeerChatListInclusion.swift in Sources */, - D0F7B1CB1E045C6A007EB8A5 /* ChatListTable.swift in Sources */, - D0B166EB1F9D142A00976B40 /* MessageOfInterestHolesView.swift in Sources */, - D0F7B1C01E045C62007EB8A5 /* StringIndexTokens.swift in Sources */, - D07047AC1F3DD8D100F6A8D4 /* PendingMessageActionsView.swift in Sources */, - D0F7B1CA1E045C6A007EB8A5 /* MessageHistoryUnsentTable.swift in Sources */, - D03387532242E32B007A2CE4 /* PostboxUpgrade_18to19.swift in Sources */, - D01BAA561ED1D70C00295217 /* ManagedFile.swift in Sources */, - D0BEAF6B1E54B5FB00BD963D /* AccountManagerMetadataTable.swift in Sources */, - D0F02CE01E99223E0065DEE2 /* Upgrades.swift in Sources */, - D0F7B1D01E045C6A007EB8A5 /* KeychainTable.swift in Sources */, - D0BEAF6E1E54B77900BD963D /* AccountManagerRecordTable.swift in Sources */, - D0B4184F1D7DFE20004562A4 /* ChatListHolesView.swift in Sources */, - D01E79E92248F661005237FE /* PostboxUpgrade_19to20.swift in Sources */, - D0105D6C218362F2007C04A7 /* TempBox.swift in Sources */, - D0F7B1D81E045C6A007EB8A5 /* MessageHistorySynchronizeReadStateTable.swift in Sources */, - D0B418581D7DFE29004562A4 /* SeedConfiguration.swift in Sources */, - D0B418311D7DFE16004562A4 /* ValueBox.swift in Sources */, - D0633D0E225BC9EF003DD95F /* MessageHistoryViewState.swift in Sources */, - D08775041E3E3E7400A97350 /* PreferencesEntry.swift in Sources */, - D0B4184E1D7DFE20004562A4 /* MessageHistoryHolesView.swift in Sources */, - D0C0B5AC1EE1AB08000F4D2C /* ReverseAssociatedPeerTable.swift in Sources */, - D0633D0B225BAD66003DD95F /* MessageHistoryAnchorIndex.swift in Sources */, - D015E05D2263BB3B00CB9E8A /* PostboxUpgrade_22to23.swift in Sources */, - D0B844051DAB91B5005F29E1 /* MediaBox.swift in Sources */, - D0B418321D7DFE16004562A4 /* SqliteValueBox.swift in Sources */, - D040CA6522665370007123CE /* PostboxUpgrade_23to24.swift in Sources */, - D073CE741DCBF3B4007511FD /* Peer.swift in Sources */, - D073CE7A1DCBF3B4007511FD /* PeerReadState.swift in Sources */, - D0F02CE31E9922F50065DEE2 /* PostboxUpgrade_12to13.swift in Sources */, - D0C27B461F4B598200A4E170 /* CachedPeerDataView.swift in Sources */, - D073CE801DCBF3B4007511FD /* PeerChatInterfaceState.swift in Sources */, - D0F7B1C81E045C6A007EB8A5 /* MessageHistoryOperation.swift in Sources */, - D0B844031DAB91A7005F29E1 /* PeerView.swift in Sources */, - D0B418301D7DFE16004562A4 /* ValueBoxKey.swift in Sources */, - D001388720BD942B007C9721 /* PostboxUpgrade_16to17.swift in Sources */, - D08B61C122A75C21000A46A8 /* Hash.swift in Sources */, - D0B418221D7DFE0C004562A4 /* Coding.swift in Sources */, - D0B4184B1D7DFE20004562A4 /* SynchronizePeerReadStatesView.swift in Sources */, - D01C7EDF1EF73F71008305F1 /* MessageHistoryTextIndexTable.swift in Sources */, - D05D8B32218F1D3D0064586F /* AccountSharedData.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0E3A7451B28A7E300A402D9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D08775061E3E3F2100A97350 /* PreferencesView.swift in Sources */, - D0CE8CF61F703B1E00AA2DB0 /* PendingPeerNotificationSettingsIndexTable.swift in Sources */, - D03229EE1E6B33FD0000AF9C /* SqliteInterface.swift in Sources */, - D01C7F071EFC1ED3008305F1 /* UnorderedItemListTable.swift in Sources */, - D0633D07225B98FC003DD95F /* MessageHistoryViewEntryAttributes.swift in Sources */, - D021FC262024B83700C34AB7 /* FileSize.swift in Sources */, - D0439B3F2289F6300067E026 /* AccountManagerAtomicState.swift in Sources */, - D0AA55131FB4C6AB00C2AB58 /* BinarySearch.swift in Sources */, - D0943AF81FDAC53F001522CC /* ChatLocation.swift in Sources */, - D0F3CC741DDE1EB9008148FA /* ItemCacheMetaTable.swift in Sources */, - D08D451F1D5D2CA700A7428A /* RatingTable.swift in Sources */, - D07CFF831DCA909100761F81 /* PeerChatInterfaceStateTable.swift in Sources */, - D0DA1D2F1F70419D0034E892 /* PendingPeerNotificationSettingsView.swift in Sources */, - D0F9E86F1C5A0E7600037222 /* KeychainTable.swift in Sources */, - D0633D04225B98B1003DD95F /* AdditionalMessageHistoryViewData.swift in Sources */, - D0E3A7821B28ADD000A402D9 /* Postbox.swift in Sources */, - D0575AE31E9ECBB2006F2541 /* AccessChallengeDataView.swift in Sources */, - D0CE8CF31F70249400AA2DB0 /* PostboxUpgrade_13to14.swift in Sources */, - D0E3A79E1B28B50400A402D9 /* Message.swift in Sources */, - D000CADA22006C6C0011B15D /* SharedAccountMediaManager.swift in Sources */, - D0C674C81CBB11C600183765 /* MessageHistoryReadStateTable.swift in Sources */, - D0DF0C8F1D81A350008AEB01 /* PeerView.swift in Sources */, - D0B2F75D204F551D00D3BFB9 /* DeviceContactImportInfoTable.swift in Sources */, - D0079F651D5A457A00A27A2C /* ContactPeersView.swift in Sources */, - D08CEFB41D2AD8BE0015D3BC /* RedBlackTree.swift in Sources */, - D0F82D0C1E439FCC007E499C /* OrderedItemListEntry.swift in Sources */, - D03120FE1DA562E9006A2A60 /* CachedPeerDataTable.swift in Sources */, - D044CA2E1C618373002160FF /* ChatListHole.swift in Sources */, - D044E1631B2AD677001EE087 /* MurMurHash32.m in Sources */, - D0BEAF671E54B33900BD963D /* AccountRecord.swift in Sources */, - D021E0D61DB4FCFC00C6B04F /* ItemCollectionInfoTable.swift in Sources */, - D0079F6B1D5B3AAB00A27A2C /* PeerNameIndexRepresentation.swift in Sources */, - D07047A81F3DA8D700F6A8D4 /* PendingMessageActionsMetadataTable.swift in Sources */, - D0CCD61F2231CE5100EE1E08 /* PeerGroup.swift in Sources */, - D044CA2A1C617D39002160FF /* SeedConfiguration.swift in Sources */, - D07CFF811DCA765D00761F81 /* PeerChatInterfaceState.swift in Sources */, - D06CA13222772DE40094E707 /* PeerNotificationSettingsBehaviorTimestampView.swift in Sources */, - D05D8B34218F1EBB0064586F /* AccountManagerSharedDataTable.swift in Sources */, - D00C7CE31E37861C0080C3D5 /* MessageView.swift in Sources */, - D0ECCB8F1FE9EB5500609802 /* PostboxLogging.swift in Sources */, - D01F7D9D1CBF8586008765C9 /* SynchronizePeerReadStatesView.swift in Sources */, - D0A352F81F549D95001423DC /* InvalidatedMessageHistoryTagSummariesView.swift in Sources */, - D0F53BF31E794C6700117362 /* PeerChatStateView.swift in Sources */, - D021E0D81DB4FD1300C6B04F /* ItemCollectionItemTable.swift in Sources */, - D048B4A820A5CBE400C79D31 /* AdditionalChatListItemsTable.swift in Sources */, - D039FB1B21714D9800BD1BAD /* PeerPresencesView.swift in Sources */, - D0CA8E4522720064008A74C3 /* InvalidatedGroupMessageStatsTable.swift in Sources */, - D0F9E85B1C565EBB00037222 /* MessageMediaTable.swift in Sources */, - D0CA8E48227208FE008A74C3 /* SynchronizeGroupMessageStatsView.swift in Sources */, - D037178B20D923CA004773C8 /* CachedItemView.swift in Sources */, - D049EAF01E44D9B900A2CD3A /* PostboxStateView.swift in Sources */, - D07E7B45224E227100BB053B /* PostboxUpgrade_20to21.swift in Sources */, - D018BE55218B9AA900C02DDC /* TimeBasedCleanup.swift in Sources */, - D06CA12F227720910094E707 /* PeerNotificationSettingsBehaviorIndexTable.swift in Sources */, - D0079F631D5A242500A27A2C /* ContactPeerIdsView.swift in Sources */, - D0E23DE21E808A9400B9B6D2 /* ItemCollectionIdsView.swift in Sources */, - D0AD23291E196B6400A7089A /* PeerOperationLogMetadataTable.swift in Sources */, - D015E0602265D42400CB9E8A /* GroupMessageStatsTable.swift in Sources */, - D0E1DE151C5E1C6900C7826E /* ViewTracker.swift in Sources */, - D0F9E8751C5A334100037222 /* SimpleDictionary.swift in Sources */, - D08C713E1C512EA500779C0F /* MessageHistoryTable.swift in Sources */, - D0FA0ACA1E780A26005BB9B7 /* PostboxView.swift in Sources */, - D0079F5A1D592E8B00A27A2C /* ContactTable.swift in Sources */, - D0F82CFD1E4345D7007E499C /* OrderedItemListTable.swift in Sources */, - D0AB0B8C1D65D488002C78E7 /* MessageHistoryHolesView.swift in Sources */, - D0119CAD20C9E7A100895300 /* PostboxUpgrade_17to18.swift in Sources */, - D0AAD1B51E32673C00D5B9DE /* TimestampBasedMessageAttributesView.swift in Sources */, - D010B61A1E1E463900C3E282 /* PeerMergedOperationLogIndexTable.swift in Sources */, - D0F9E8671C58D08900037222 /* ChatListIndexTable.swift in Sources */, - D079FCE61F06A3170038FADE /* NoticeTable.swift in Sources */, - D0E3A7A21B28B7DC00A402D9 /* Media.swift in Sources */, - D0E3A7881B28AE9C00A402D9 /* Coding.swift in Sources */, - D0C9DA391C65782500855278 /* SimpleSet.swift in Sources */, - D098C6F11D7E11E9007784E4 /* Database.swift in Sources */, - D0E1D30F1ECA53F900FCEEF1 /* GlobalMessageTagsView.swift in Sources */, - D0977F9E1B8234DF009994B2 /* ValueBoxKey.swift in Sources */, - D033A6F91C73E440006A2EAB /* UnsentMessageHistoryView.swift in Sources */, - D07827C31E008F7300071108 /* ReverseIndexReferenceTable.swift in Sources */, - D07047A51F3CF63800F6A8D4 /* MessageHistoryTagSummaryView.swift in Sources */, - D09ADF0C1D2EB83500C8208D /* OrderStatisticTable.swift in Sources */, - D0CE63F61CA1CCB2002BC462 /* MediaResource.swift in Sources */, - D0F82D0F1E43A024007E499C /* OrderedItemListIndexTable.swift in Sources */, - D0FA0ACD1E781067005BB9B7 /* Views.swift in Sources */, - D03121001DA579A0006A2A60 /* PeerNotificationSettingsTable.swift in Sources */, - D0BEAF631E54B2FA00BD963D /* AccountManager.swift in Sources */, - D0AD23271E194D1C00A7089A /* PeerOperationLogTable.swift in Sources */, - D06ECFC520B796DC00C576C2 /* NoticeEntryView.swift in Sources */, - D021E0D41DB4FAE100C6B04F /* ItemCollection.swift in Sources */, - D0D510F91D63BCC200A97B8A /* IntermediateMessage.swift in Sources */, - D04614332004F2CC00EC0EF2 /* LocalMessageTagsView.swift in Sources */, - D0BE38391E7C1FD4000079AF /* ItemCollectionInfoView.swift in Sources */, - D0F9E86B1C59719800037222 /* ChatListView.swift in Sources */, - D0D949F51D35353900740E02 /* MappedFile.swift in Sources */, - D003E4E61B38DBDB00C22CBC /* MessageHistoryView.swift in Sources */, - D0AB0B8E1D65D49C002C78E7 /* ChatListHolesView.swift in Sources */, - D0AAD1B21E3266B100D5B9DE /* TimestampBasedMessageAttributesIndexTable.swift in Sources */, - D07827C51E00B23F00071108 /* PeerNameIndexTable.swift in Sources */, - D03120FA1DA540F0006A2A60 /* CachedPeerData.swift in Sources */, - D0977FA01B8244D7009994B2 /* SqliteValueBox.swift in Sources */, - D07047AB1F3DD8D100F6A8D4 /* PendingMessageActionsView.swift in Sources */, - D07047A01F3CE16500F6A8D4 /* MessageHistoryTagsSummaryTable.swift in Sources */, - D0FA0AC71E77F0A2005BB9B7 /* ItemCollectionInfosView.swift in Sources */, - D0F019FD1E1DA0CC00F05AB3 /* PeerMergedOperationLogView.swift in Sources */, - D07E7B48224E562C00BB053B /* PostboxUpgrade_21to22.swift in Sources */, - D048B33D203C838500038D05 /* PostboxUpgrade_15to16.swift in Sources */, - D0F9E8651C58CB7F00037222 /* ChatListTable.swift in Sources */, - D0E1D30C1ECA1F5500FCEEF1 /* GlobalMessageHistoryTagsTable.swift in Sources */, - D0F9E8711C5A0E9B00037222 /* PeerTable.swift in Sources */, - D0BC386C1E3FCEE50044D6FE /* MultiplePeersView.swift in Sources */, - D0C26D7E1FE3FA4E004ABF18 /* PinnedItemId.swift in Sources */, - D06CA12C227715E70094E707 /* PeerNotificationSettingsBehaviorTable.swift in Sources */, - D0BEAF701E54BC1E00BD963D /* AccountRecordsView.swift in Sources */, - D07CFF851DCA99C400761F81 /* InitialMessageHistoryData.swift in Sources */, - D0A352F51F5488E9001423DC /* InvalidatedMessageHistoryTagsSummaryTable.swift in Sources */, - D087C20C1E43C11C00D686F8 /* OrderedItemListView.swift in Sources */, - D05F09A61C9E9F9300BB6F96 /* MediaResourceStatus.swift in Sources */, - D033A6F71C73D512006A2EAB /* MessageHistoryUnsentTable.swift in Sources */, - D00C7CD41E365C4E0080C3D5 /* PeerChatListInclusion.swift in Sources */, - D0A18D671E16874D004C6734 /* UnreadMessageCountsView.swift in Sources */, - D0B844511DAC04FE005F29E1 /* PeerPresence.swift in Sources */, - D07827C11E0079CB00071108 /* StringIndexTokens.swift in Sources */, - D0F3CC721DDE1CDC008148FA /* ItemCacheTable.swift in Sources */, - D0E119A0229834BC008CAE3A /* MutablePeerChatInclusionView.swift in Sources */, - D08C713C1C51283C00779C0F /* MessageHistoryIndexTable.swift in Sources */, - D019B1CF1E2E770700F80DB3 /* MessageGloballyUniqueIdTable.swift in Sources */, - D0F9E86D1C5A0E5D00037222 /* MetadataTable.swift in Sources */, - D0CCD6282232887100EE1E08 /* MessageHistoryHoleIndexTable.swift in Sources */, - D0CA8E4E2272130B008A74C3 /* PostboxUpgrade_24to25.swift in Sources */, - D0DA44481E4C7D1E005FDCA7 /* PostboxAccess.swift in Sources */, - D0B167201F9EAAA900976B40 /* OrderedList.swift in Sources */, - D048B4AF20A5EEAE00C79D31 /* AdditionalChatListItemsView.swift in Sources */, - D0BE3034206026C800FBE6D8 /* MessagesView.swift in Sources */, - D040CA6422665370007123CE /* PostboxUpgrade_23to24.swift in Sources */, - D0E3A7841B28AE0900A402D9 /* Peer.swift in Sources */, - D0D510F61D63BBE100A97B8A /* MessageHistoryOperation.swift in Sources */, - D0BC38721E409E670044D6FE /* RenderedPeer.swift in Sources */, - D08775031E3E3E7400A97350 /* PreferencesEntry.swift in Sources */, - D08B61C022A75C21000A46A8 /* Hash.swift in Sources */, - D0AB0B901D65D4AB002C78E7 /* UnsentMessageIndicesView.swift in Sources */, - D0B166EA1F9D142A00976B40 /* MessageOfInterestHolesView.swift in Sources */, - D07047A21F3CE58200F6A8D4 /* PendingMessageActionsTable.swift in Sources */, - D01BAA551ED1D70C00295217 /* ManagedFile.swift in Sources */, - D0BEAF6A1E54B5FB00BD963D /* AccountManagerMetadataTable.swift in Sources */, - D0F02CDF1E99223D0065DEE2 /* Upgrades.swift in Sources */, - D08775001E3E3D9F00A97350 /* PreferencesTable.swift in Sources */, - D0BEAF6D1E54B77900BD963D /* AccountManagerRecordTable.swift in Sources */, - D03387522242E32B007A2CE4 /* PostboxUpgrade_18to19.swift in Sources */, - D03120F81DA53FF4006A2A60 /* PeerPresenceTable.swift in Sources */, - D0F9E8731C5A1EE500037222 /* GlobalMessageIdsTable.swift in Sources */, - D0AE3EBC1F68261B0069BC90 /* PeerNotificationSettingsView.swift in Sources */, - D04614302004E24600EC0EF2 /* LocalMessageHistoryTagsTable.swift in Sources */, - D00EED1E1C81F28D00341DFF /* MessageHistoryTagsTable.swift in Sources */, - D044CA2C1C617E2D002160FF /* MessageHistoryMetadataTable.swift in Sources */, - D01E79E82248F661005237FE /* PostboxUpgrade_19to20.swift in Sources */, - D0105D6B218362F2007C04A7 /* TempBox.swift in Sources */, - D0FC194A201E8EAF00FEDBB2 /* MediaBoxFile.swift in Sources */, - D03120FC1DA55427006A2A60 /* PeerNotificationSettings.swift in Sources */, - D0943B021FDB01D8001522CC /* PostboxUpgrade_14to15.swift in Sources */, - D0F7AB321DCFAB18009AD9A1 /* PeerChatTopIndexableMessageIds.swift in Sources */, - D015E05C2263BB3B00CB9E8A /* PostboxUpgrade_22to23.swift in Sources */, - D0633D0D225BC9EF003DD95F /* MessageHistoryViewState.swift in Sources */, - D03BCCF81C73561C0097A291 /* Table.swift in Sources */, - D0C0B5AB1EE1AB08000F4D2C /* ReverseAssociatedPeerTable.swift in Sources */, - D021E0DC1DB5237C00C6B04F /* ItemCollectionsView.swift in Sources */, - D0633D0A225BAD66003DD95F /* MessageHistoryAnchorIndex.swift in Sources */, - D0C735281C864DF300BB3149 /* PeerChatStateTable.swift in Sources */, - D0AAD1B31E3266B100D5B9DE /* TimestampBasedMessageAttributesTable.swift in Sources */, - D01F7D9B1CBEC390008765C9 /* MessageHistorySynchronizeReadStateTable.swift in Sources */, - D0F02CE21E9922F50065DEE2 /* PostboxUpgrade_12to13.swift in Sources */, - D055BD331B7D3D2D00F06C0A /* MediaBox.swift in Sources */, - D0C27B451F4B598200A4E170 /* CachedPeerDataView.swift in Sources */, - D0C674CC1CBB14A700183765 /* PeerReadState.swift in Sources */, - D0D510F41D63BA8400A97B8A /* PostboxTransaction.swift in Sources */, - D0977F9C1B822DB4009994B2 /* ValueBox.swift in Sources */, - D0BFE51D22AFD5AF00143D08 /* MutableBasicPeerView.swift in Sources */, - D001388620BD942B007C9721 /* PostboxUpgrade_16to17.swift in Sources */, - D0D511001D64A58900A97B8A /* IpcPipe.swift in Sources */, - D01C7EDE1EF73F71008305F1 /* MessageHistoryTextIndexTable.swift in Sources */, - D07047B11F3DE40400F6A8D4 /* PendingMessageActionsSummaryView.swift in Sources */, - D05D8B31218F1D3D0064586F /* AccountSharedData.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0E3A7511B28A7E300A402D9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D044E15E1B2ACB9C001EE087 /* CodingTests.swift in Sources */, - D0633D01225AA3F3003DD95F /* MessageHistoryViewTests.swift in Sources */, - D0A7D9451C556CFE0016A115 /* MessageHistoryIndexTableTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - D0E3A7581B28A7E300A402D9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D0E3A7491B28A7E300A402D9 /* Postbox */; - targetProxy = D0E3A7571B28A7E300A402D9 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - C22069C81E8EB4BF00E82730 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyapp; - }; - C22069C91E8EB4BF00E82730 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEAD_CODE_STRIPPING = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - FRAMEWORK_SEARCH_PATHS = "$(inherited)"; - INFOPLIST_FILE = Postbox/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = mh_dylib; - MODULEMAP_PRIVATE_FILE = ""; - OTHER_CFLAGS = ""; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - STRIP_SWIFT_SYMBOLS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - }; - name = ReleaseHockeyapp; - }; - C22069CA1E8EB4BF00E82730 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "/Users/peter/Documents/PostBoxTest/submodules/SSignalKit/build/Debug-iphoneos", - ); - INFOPLIST_FILE = PostboxTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - }; - name = ReleaseHockeyapp; - }; - C22069CB1E8EB4BF00E82730 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = PostboxMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/Postbox/module.private-mac.modulemap"; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.PostboxMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = ReleaseHockeyapp; - }; - D021D4F8219CB1B90064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugFork; - }; - D021D4F9219CB1B90064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEAD_CODE_STRIPPING = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - FRAMEWORK_SEARCH_PATHS = "$(inherited)"; - INFOPLIST_FILE = Postbox/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = mh_dylib; - MODULEMAP_PRIVATE_FILE = ""; - OTHER_CFLAGS = ""; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - STRIP_SWIFT_SYMBOLS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - }; - name = DebugFork; - }; - D021D4FA219CB1B90064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "/Users/peter/Documents/PostBoxTest/submodules/SSignalKit/build/Debug-iphoneos", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = PostboxTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 3.0; - }; - name = DebugFork; - }; - D021D4FB219CB1B90064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_OPTIMIZATION_LEVEL = s; - INFOPLIST_FILE = PostboxMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/Postbox/module.private-mac.modulemap"; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.PostboxMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_VERSION = 5.0; - }; - name = DebugFork; - }; - D0364D5122B3E385002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = HockeyappMacAlpha; - }; - D0364D5222B3E385002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEAD_CODE_STRIPPING = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - FRAMEWORK_SEARCH_PATHS = "$(inherited)"; - INFOPLIST_FILE = Postbox/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = mh_dylib; - MODULEMAP_PRIVATE_FILE = ""; - OTHER_CFLAGS = ""; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - STRIP_SWIFT_SYMBOLS = YES; - SWIFT_COMPILATION_MODE = singlefile; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - }; - name = HockeyappMacAlpha; - }; - D0364D5322B3E385002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "/Users/peter/Documents/PostBoxTest/submodules/SSignalKit/build/Debug-iphoneos", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = PostboxTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 3.0; - }; - name = HockeyappMacAlpha; - }; - D0364D5422B3E385002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_OPTIMIZATION_LEVEL = s; - INFOPLIST_FILE = PostboxMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/Postbox/module.private-mac.modulemap"; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.PostboxMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_VERSION = 5.0; - }; - name = HockeyappMacAlpha; - }; - D079FD0C1F06BE070038FADE /* DebugAppStore */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStore; - }; - D079FD0D1F06BE070038FADE /* DebugAppStore */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEAD_CODE_STRIPPING = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - FRAMEWORK_SEARCH_PATHS = "$(inherited)"; - INFOPLIST_FILE = Postbox/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = mh_dylib; - MODULEMAP_PRIVATE_FILE = ""; - OTHER_CFLAGS = ""; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - STRIP_SWIFT_SYMBOLS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - }; - name = DebugAppStore; - }; - D079FD0E1F06BE070038FADE /* DebugAppStore */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "/Users/peter/Documents/PostBoxTest/submodules/SSignalKit/build/Debug-iphoneos", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = PostboxTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 3.0; - }; - name = DebugAppStore; - }; - D079FD0F1F06BE070038FADE /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_OPTIMIZATION_LEVEL = s; - INFOPLIST_FILE = PostboxMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/Postbox/module.private-mac.modulemap"; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.PostboxMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_VERSION = 5.0; - }; - name = DebugAppStore; - }; - D086A5711CC0116A00F08284 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStore; - }; - D086A5721CC0116A00F08284 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEAD_CODE_STRIPPING = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - FRAMEWORK_SEARCH_PATHS = "$(inherited)"; - INFOPLIST_FILE = Postbox/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = mh_dylib; - MODULEMAP_PRIVATE_FILE = ""; - OTHER_CFLAGS = ""; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - STRIP_SWIFT_SYMBOLS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - }; - name = ReleaseAppStore; - }; - D086A5731CC0116A00F08284 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "/Users/peter/Documents/PostBoxTest/submodules/SSignalKit/build/Debug-iphoneos", - ); - INFOPLIST_FILE = PostboxTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 3.0; - }; - name = ReleaseAppStore; - }; - D0924FD81FE52BF1003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyappInternal; - }; - D0924FD91FE52BF1003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEAD_CODE_STRIPPING = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - FRAMEWORK_SEARCH_PATHS = "$(inherited)"; - INFOPLIST_FILE = Postbox/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = mh_dylib; - MODULEMAP_PRIVATE_FILE = ""; - OTHER_CFLAGS = ""; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - STRIP_SWIFT_SYMBOLS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - }; - name = ReleaseHockeyappInternal; - }; - D0924FDA1FE52BF1003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "/Users/peter/Documents/PostBoxTest/submodules/SSignalKit/build/Debug-iphoneos", - ); - INFOPLIST_FILE = PostboxTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - }; - name = ReleaseHockeyappInternal; - }; - D0924FDB1FE52BF1003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = PostboxMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/Postbox/module.private-mac.modulemap"; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.PostboxMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = ReleaseHockeyappInternal; - }; - D0ADF924212B3AC400310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStoreLLC; - }; - D0ADF925212B3AC400310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEAD_CODE_STRIPPING = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - FRAMEWORK_SEARCH_PATHS = "$(inherited)"; - INFOPLIST_FILE = Postbox/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = mh_dylib; - MODULEMAP_PRIVATE_FILE = ""; - OTHER_CFLAGS = ""; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - STRIP_SWIFT_SYMBOLS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - }; - name = DebugAppStoreLLC; - }; - D0ADF926212B3AC400310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "/Users/peter/Documents/PostBoxTest/submodules/SSignalKit/build/Debug-iphoneos", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = PostboxTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 3.0; - }; - name = DebugAppStoreLLC; - }; - D0ADF927212B3AC400310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_OPTIMIZATION_LEVEL = s; - INFOPLIST_FILE = PostboxMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/Postbox/module.private-mac.modulemap"; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.PostboxMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_VERSION = 5.0; - }; - name = DebugAppStoreLLC; - }; - D0B418181D7DFAF3004562A4 /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_OPTIMIZATION_LEVEL = s; - INFOPLIST_FILE = PostboxMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/Postbox/module.private-mac.modulemap"; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.PostboxMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_VERSION = 5.0; - }; - name = DebugHockeyapp; - }; - D0B4181A1D7DFAF3004562A4 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = PostboxMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/Postbox/module.private-mac.modulemap"; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.PostboxMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = ReleaseAppStore; - }; - D0CE6EE5213DC2EC00BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EE6213DC2EC00BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEAD_CODE_STRIPPING = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - FRAMEWORK_SEARCH_PATHS = "$(inherited)"; - INFOPLIST_FILE = Postbox/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = mh_dylib; - MODULEMAP_PRIVATE_FILE = ""; - OTHER_CFLAGS = ""; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - STRIP_SWIFT_SYMBOLS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EE7213DC2EC00BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "/Users/peter/Documents/PostBoxTest/submodules/SSignalKit/build/Debug-iphoneos", - ); - INFOPLIST_FILE = PostboxTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 3.0; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EE8213DC2EC00BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = PostboxMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/Postbox/module.private-mac.modulemap"; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.PostboxMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = ReleaseAppStoreLLC; - }; - D0E3A75E1B28A7E300A402D9 /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugHockeyapp; - }; - D0E3A7611B28A7E300A402D9 /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEAD_CODE_STRIPPING = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - FRAMEWORK_SEARCH_PATHS = "$(inherited)"; - INFOPLIST_FILE = Postbox/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = mh_dylib; - MODULEMAP_PRIVATE_FILE = ""; - OTHER_CFLAGS = ""; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - STRIP_SWIFT_SYMBOLS = YES; - SWIFT_COMPILATION_MODE = singlefile; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - }; - name = DebugHockeyapp; - }; - D0E3A7641B28A7E300A402D9 /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D07516491B2D9E2500AE42E0 /* Postbox.xcconfig */; - buildSettings = { - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "/Users/peter/Documents/PostBoxTest/submodules/SSignalKit/build/Debug-iphoneos", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = PostboxTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 3.0; - }; - name = DebugHockeyapp; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - D0B4181B1D7DFAF3004562A4 /* Build configuration list for PBXNativeTarget "PostboxMac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0B418181D7DFAF3004562A4 /* DebugHockeyapp */, - D0364D5422B3E385002A6EF0 /* HockeyappMacAlpha */, - D021D4FB219CB1B90064BEBA /* DebugFork */, - D079FD0F1F06BE070038FADE /* DebugAppStore */, - D0ADF927212B3AC400310BBC /* DebugAppStoreLLC */, - C22069CB1E8EB4BF00E82730 /* ReleaseHockeyapp */, - D0924FDB1FE52BF1003F693F /* ReleaseHockeyappInternal */, - D0B4181A1D7DFAF3004562A4 /* ReleaseAppStore */, - D0CE6EE8213DC2EC00BCD44B /* ReleaseAppStoreLLC */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = DebugHockeyapp; - }; - D0E3A7441B28A7E300A402D9 /* Build configuration list for PBXProject "Postbox_Xcode" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0E3A75E1B28A7E300A402D9 /* DebugHockeyapp */, - D0364D5122B3E385002A6EF0 /* HockeyappMacAlpha */, - D021D4F8219CB1B90064BEBA /* DebugFork */, - D079FD0C1F06BE070038FADE /* DebugAppStore */, - D0ADF924212B3AC400310BBC /* DebugAppStoreLLC */, - C22069C81E8EB4BF00E82730 /* ReleaseHockeyapp */, - D0924FD81FE52BF1003F693F /* ReleaseHockeyappInternal */, - D086A5711CC0116A00F08284 /* ReleaseAppStore */, - D0CE6EE5213DC2EC00BCD44B /* ReleaseAppStoreLLC */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = DebugHockeyapp; - }; - D0E3A7601B28A7E300A402D9 /* Build configuration list for PBXNativeTarget "Postbox" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0E3A7611B28A7E300A402D9 /* DebugHockeyapp */, - D0364D5222B3E385002A6EF0 /* HockeyappMacAlpha */, - D021D4F9219CB1B90064BEBA /* DebugFork */, - D079FD0D1F06BE070038FADE /* DebugAppStore */, - D0ADF925212B3AC400310BBC /* DebugAppStoreLLC */, - C22069C91E8EB4BF00E82730 /* ReleaseHockeyapp */, - D0924FD91FE52BF1003F693F /* ReleaseHockeyappInternal */, - D086A5721CC0116A00F08284 /* ReleaseAppStore */, - D0CE6EE6213DC2EC00BCD44B /* ReleaseAppStoreLLC */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = DebugHockeyapp; - }; - D0E3A7631B28A7E300A402D9 /* Build configuration list for PBXNativeTarget "PostboxTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0E3A7641B28A7E300A402D9 /* DebugHockeyapp */, - D0364D5322B3E385002A6EF0 /* HockeyappMacAlpha */, - D021D4FA219CB1B90064BEBA /* DebugFork */, - D079FD0E1F06BE070038FADE /* DebugAppStore */, - D0ADF926212B3AC400310BBC /* DebugAppStoreLLC */, - C22069CA1E8EB4BF00E82730 /* ReleaseHockeyapp */, - D0924FDA1FE52BF1003F693F /* ReleaseHockeyappInternal */, - D086A5731CC0116A00F08284 /* ReleaseAppStore */, - D0CE6EE7213DC2EC00BCD44B /* ReleaseAppStoreLLC */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = DebugHockeyapp; - }; -/* End XCConfigurationList section */ - }; - rootObject = D0E3A7411B28A7E300A402D9 /* Project object */; -} diff --git a/submodules/Postbox/Postbox_Xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/submodules/Postbox/Postbox_Xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 088de55706..0000000000 --- a/submodules/Postbox/Postbox_Xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/submodules/Postbox/Postbox_Xcode.xcodeproj/xcshareddata/xcschemes/Postbox.xcscheme b/submodules/Postbox/Postbox_Xcode.xcodeproj/xcshareddata/xcschemes/Postbox.xcscheme deleted file mode 100644 index d00e8a8a4e..0000000000 --- a/submodules/Postbox/Postbox_Xcode.xcodeproj/xcshareddata/xcschemes/Postbox.xcscheme +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/Postbox/Postbox_Xcode.xcodeproj/xcshareddata/xcschemes/PostboxMac.xcscheme b/submodules/Postbox/Postbox_Xcode.xcodeproj/xcshareddata/xcschemes/PostboxMac.xcscheme deleted file mode 100644 index e6e0385ba2..0000000000 --- a/submodules/Postbox/Postbox_Xcode.xcodeproj/xcshareddata/xcschemes/PostboxMac.xcscheme +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/Postbox/Postbox_Xcode.xcodeproj/xcshareddata/xcschemes/PostboxTests.xcscheme b/submodules/Postbox/Postbox_Xcode.xcodeproj/xcshareddata/xcschemes/PostboxTests.xcscheme deleted file mode 100644 index 83d158d854..0000000000 --- a/submodules/Postbox/Postbox_Xcode.xcodeproj/xcshareddata/xcschemes/PostboxTests.xcscheme +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/Postbox/Postbox/AccessChallengeDataView.swift b/submodules/Postbox/Sources/AccessChallengeDataView.swift similarity index 100% rename from submodules/Postbox/Postbox/AccessChallengeDataView.swift rename to submodules/Postbox/Sources/AccessChallengeDataView.swift diff --git a/submodules/Postbox/Postbox/AccountManager.swift b/submodules/Postbox/Sources/AccountManager.swift similarity index 99% rename from submodules/Postbox/Postbox/AccountManager.swift rename to submodules/Postbox/Sources/AccountManager.swift index d4c4c58c90..7fd29dd977 100644 --- a/submodules/Postbox/Postbox/AccountManager.swift +++ b/submodules/Postbox/Sources/AccountManager.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import SwiftSignalKitMac -#else - import SwiftSignalKit -#endif +import SwiftSignalKit public struct AccountManagerModifier { public let getRecords: () -> [AccountRecord] diff --git a/submodules/Postbox/Postbox/AccountManagerAtomicState.swift b/submodules/Postbox/Sources/AccountManagerAtomicState.swift similarity index 100% rename from submodules/Postbox/Postbox/AccountManagerAtomicState.swift rename to submodules/Postbox/Sources/AccountManagerAtomicState.swift diff --git a/submodules/Postbox/Postbox/AccountManagerMetadataTable.swift b/submodules/Postbox/Sources/AccountManagerMetadataTable.swift similarity index 92% rename from submodules/Postbox/Postbox/AccountManagerMetadataTable.swift rename to submodules/Postbox/Sources/AccountManagerMetadataTable.swift index feffb5f2da..2863d8baf3 100644 --- a/submodules/Postbox/Postbox/AccountManagerMetadataTable.swift +++ b/submodules/Postbox/Sources/AccountManagerMetadataTable.swift @@ -1,22 +1,14 @@ import Foundation -public struct AccessChallengeAttempts: PostboxCoding, Equatable { +public struct AccessChallengeAttempts: Equatable { public let count: Int32 - public let timestamp: Int32 + public var bootTimestamp: Int32 + public var uptime: Int32 - public init(count: Int32, timestamp: Int32) { + public init(count: Int32, bootTimestamp: Int32, uptime: Int32) { self.count = count - self.timestamp = timestamp - } - - public init(decoder: PostboxDecoder) { - self.count = decoder.decodeInt32ForKey("c", orElse: 0) - self.timestamp = decoder.decodeInt32ForKey("t", orElse: 0) - } - - public func encode(_ encoder: PostboxEncoder) { - encoder.encodeInt32(self.count, forKey: "c") - encoder.encodeInt32(self.timestamp, forKey: "t") + self.bootTimestamp = bootTimestamp + self.uptime = uptime } } diff --git a/submodules/Postbox/Postbox/AccountManagerRecordTable.swift b/submodules/Postbox/Sources/AccountManagerRecordTable.swift similarity index 100% rename from submodules/Postbox/Postbox/AccountManagerRecordTable.swift rename to submodules/Postbox/Sources/AccountManagerRecordTable.swift diff --git a/submodules/Postbox/Postbox/AccountManagerSharedDataTable.swift b/submodules/Postbox/Sources/AccountManagerSharedDataTable.swift similarity index 100% rename from submodules/Postbox/Postbox/AccountManagerSharedDataTable.swift rename to submodules/Postbox/Sources/AccountManagerSharedDataTable.swift diff --git a/submodules/Postbox/Postbox/AccountRecord.swift b/submodules/Postbox/Sources/AccountRecord.swift similarity index 100% rename from submodules/Postbox/Postbox/AccountRecord.swift rename to submodules/Postbox/Sources/AccountRecord.swift diff --git a/submodules/Postbox/Postbox/AccountRecordsView.swift b/submodules/Postbox/Sources/AccountRecordsView.swift similarity index 100% rename from submodules/Postbox/Postbox/AccountRecordsView.swift rename to submodules/Postbox/Sources/AccountRecordsView.swift diff --git a/submodules/Postbox/Postbox/AccountSharedData.swift b/submodules/Postbox/Sources/AccountSharedData.swift similarity index 100% rename from submodules/Postbox/Postbox/AccountSharedData.swift rename to submodules/Postbox/Sources/AccountSharedData.swift diff --git a/submodules/Postbox/Postbox/AdditionalChatListItemsTable.swift b/submodules/Postbox/Sources/AdditionalChatListItemsTable.swift similarity index 100% rename from submodules/Postbox/Postbox/AdditionalChatListItemsTable.swift rename to submodules/Postbox/Sources/AdditionalChatListItemsTable.swift diff --git a/submodules/Postbox/Postbox/AdditionalChatListItemsView.swift b/submodules/Postbox/Sources/AdditionalChatListItemsView.swift similarity index 100% rename from submodules/Postbox/Postbox/AdditionalChatListItemsView.swift rename to submodules/Postbox/Sources/AdditionalChatListItemsView.swift diff --git a/submodules/Postbox/Postbox/AdditionalMessageHistoryViewData.swift b/submodules/Postbox/Sources/AdditionalMessageHistoryViewData.swift similarity index 100% rename from submodules/Postbox/Postbox/AdditionalMessageHistoryViewData.swift rename to submodules/Postbox/Sources/AdditionalMessageHistoryViewData.swift diff --git a/submodules/Postbox/Postbox/BinarySearch.swift b/submodules/Postbox/Sources/BinarySearch.swift similarity index 100% rename from submodules/Postbox/Postbox/BinarySearch.swift rename to submodules/Postbox/Sources/BinarySearch.swift diff --git a/submodules/Postbox/Postbox/CachedItemView.swift b/submodules/Postbox/Sources/CachedItemView.swift similarity index 100% rename from submodules/Postbox/Postbox/CachedItemView.swift rename to submodules/Postbox/Sources/CachedItemView.swift diff --git a/submodules/Postbox/Postbox/CachedPeerData.swift b/submodules/Postbox/Sources/CachedPeerData.swift similarity index 100% rename from submodules/Postbox/Postbox/CachedPeerData.swift rename to submodules/Postbox/Sources/CachedPeerData.swift diff --git a/submodules/Postbox/Postbox/CachedPeerDataTable.swift b/submodules/Postbox/Sources/CachedPeerDataTable.swift similarity index 100% rename from submodules/Postbox/Postbox/CachedPeerDataTable.swift rename to submodules/Postbox/Sources/CachedPeerDataTable.swift diff --git a/submodules/Postbox/Postbox/CachedPeerDataView.swift b/submodules/Postbox/Sources/CachedPeerDataView.swift similarity index 100% rename from submodules/Postbox/Postbox/CachedPeerDataView.swift rename to submodules/Postbox/Sources/CachedPeerDataView.swift diff --git a/submodules/Postbox/Postbox/ChatListHole.swift b/submodules/Postbox/Sources/ChatListHole.swift similarity index 100% rename from submodules/Postbox/Postbox/ChatListHole.swift rename to submodules/Postbox/Sources/ChatListHole.swift diff --git a/submodules/Postbox/Postbox/ChatListHolesView.swift b/submodules/Postbox/Sources/ChatListHolesView.swift similarity index 100% rename from submodules/Postbox/Postbox/ChatListHolesView.swift rename to submodules/Postbox/Sources/ChatListHolesView.swift diff --git a/submodules/Postbox/Postbox/ChatListIndexTable.swift b/submodules/Postbox/Sources/ChatListIndexTable.swift similarity index 100% rename from submodules/Postbox/Postbox/ChatListIndexTable.swift rename to submodules/Postbox/Sources/ChatListIndexTable.swift diff --git a/submodules/Postbox/Postbox/ChatListTable.swift b/submodules/Postbox/Sources/ChatListTable.swift similarity index 100% rename from submodules/Postbox/Postbox/ChatListTable.swift rename to submodules/Postbox/Sources/ChatListTable.swift diff --git a/submodules/Postbox/Postbox/ChatListView.swift b/submodules/Postbox/Sources/ChatListView.swift similarity index 99% rename from submodules/Postbox/Postbox/ChatListView.swift rename to submodules/Postbox/Sources/ChatListView.swift index 48f763d977..0d9ff1487f 100644 --- a/submodules/Postbox/Postbox/ChatListView.swift +++ b/submodules/Postbox/Sources/ChatListView.swift @@ -402,7 +402,7 @@ final class MutableChatListView { index = self.entries[self.entries.count / 2].index } - let (entries, earlier, later) = postbox.fetchAroundChatEntries(groupId: self.groupId, index: index, count: self.entries.count) + let (entries, earlier, later) = postbox.fetchAroundChatEntries(groupId: self.groupId, index: index, count: self.count) let currentGroupEntries = self.groupEntries self.reloadGroups(postbox: postbox) diff --git a/submodules/Postbox/Postbox/ChatLocation.swift b/submodules/Postbox/Sources/ChatLocation.swift similarity index 100% rename from submodules/Postbox/Postbox/ChatLocation.swift rename to submodules/Postbox/Sources/ChatLocation.swift diff --git a/submodules/Postbox/Postbox/Coding.swift b/submodules/Postbox/Sources/Coding.swift similarity index 99% rename from submodules/Postbox/Postbox/Coding.swift rename to submodules/Postbox/Sources/Coding.swift index 0954655601..d69995fb19 100644 --- a/submodules/Postbox/Postbox/Coding.swift +++ b/submodules/Postbox/Sources/Coding.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import sqlciphermac -#else import sqlcipher -#endif public protocol PostboxCoding { init(decoder: PostboxDecoder) diff --git a/submodules/Postbox/Postbox/Config/Postbox.xcconfig b/submodules/Postbox/Sources/Config.xcconfig/Postbox.xcconfig similarity index 100% rename from submodules/Postbox/Postbox/Config/Postbox.xcconfig rename to submodules/Postbox/Sources/Config.xcconfig/Postbox.xcconfig diff --git a/submodules/Postbox/Postbox/ContactPeerIdsView.swift b/submodules/Postbox/Sources/ContactPeerIdsView.swift similarity index 100% rename from submodules/Postbox/Postbox/ContactPeerIdsView.swift rename to submodules/Postbox/Sources/ContactPeerIdsView.swift diff --git a/submodules/Postbox/Postbox/ContactPeersView.swift b/submodules/Postbox/Sources/ContactPeersView.swift similarity index 100% rename from submodules/Postbox/Postbox/ContactPeersView.swift rename to submodules/Postbox/Sources/ContactPeersView.swift diff --git a/submodules/Postbox/Postbox/ContactTable.swift b/submodules/Postbox/Sources/ContactTable.swift similarity index 100% rename from submodules/Postbox/Postbox/ContactTable.swift rename to submodules/Postbox/Sources/ContactTable.swift diff --git a/submodules/Postbox/Postbox/Database.swift b/submodules/Postbox/Sources/Database.swift similarity index 98% rename from submodules/Postbox/Postbox/Database.swift rename to submodules/Postbox/Sources/Database.swift index 337a10b5ed..a832a1f52f 100644 --- a/submodules/Postbox/Postbox/Database.swift +++ b/submodules/Postbox/Sources/Database.swift @@ -22,11 +22,7 @@ // THE SOFTWARE. // -#if os(macOS) -import sqlciphermac -#else import sqlcipher -#endif public final class Database { internal var handle: OpaquePointer? = nil diff --git a/submodules/Postbox/Postbox/DeviceContactImportInfoTable.swift b/submodules/Postbox/Sources/DeviceContactImportInfoTable.swift similarity index 100% rename from submodules/Postbox/Postbox/DeviceContactImportInfoTable.swift rename to submodules/Postbox/Sources/DeviceContactImportInfoTable.swift diff --git a/submodules/Postbox/Postbox/FileSize.swift b/submodules/Postbox/Sources/FileSize.swift similarity index 100% rename from submodules/Postbox/Postbox/FileSize.swift rename to submodules/Postbox/Sources/FileSize.swift diff --git a/submodules/Postbox/Postbox/GlobalMessageHistoryTagsTable.swift b/submodules/Postbox/Sources/GlobalMessageHistoryTagsTable.swift similarity index 100% rename from submodules/Postbox/Postbox/GlobalMessageHistoryTagsTable.swift rename to submodules/Postbox/Sources/GlobalMessageHistoryTagsTable.swift diff --git a/submodules/Postbox/Postbox/GlobalMessageIdsTable.swift b/submodules/Postbox/Sources/GlobalMessageIdsTable.swift similarity index 100% rename from submodules/Postbox/Postbox/GlobalMessageIdsTable.swift rename to submodules/Postbox/Sources/GlobalMessageIdsTable.swift diff --git a/submodules/Postbox/Postbox/GlobalMessageTagsView.swift b/submodules/Postbox/Sources/GlobalMessageTagsView.swift similarity index 100% rename from submodules/Postbox/Postbox/GlobalMessageTagsView.swift rename to submodules/Postbox/Sources/GlobalMessageTagsView.swift diff --git a/submodules/Postbox/Postbox/GroupMessageStatsTable.swift b/submodules/Postbox/Sources/GroupMessageStatsTable.swift similarity index 100% rename from submodules/Postbox/Postbox/GroupMessageStatsTable.swift rename to submodules/Postbox/Sources/GroupMessageStatsTable.swift diff --git a/submodules/Postbox/Postbox/Hash.swift b/submodules/Postbox/Sources/Hash.swift similarity index 85% rename from submodules/Postbox/Postbox/Hash.swift rename to submodules/Postbox/Sources/Hash.swift index ae94ce3fb2..7df219a841 100644 --- a/submodules/Postbox/Postbox/Hash.swift +++ b/submodules/Postbox/Sources/Hash.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import sqlciphermac -#else import sqlcipher -#endif public enum HashFunctions { public static func murMurHash32(_ s: String) -> Int32 { diff --git a/submodules/MtProtoKit/Info.plist b/submodules/Postbox/Sources/Info.plist similarity index 100% rename from submodules/MtProtoKit/Info.plist rename to submodules/Postbox/Sources/Info.plist diff --git a/submodules/Postbox/Postbox/InitialMessageHistoryData.swift b/submodules/Postbox/Sources/InitialMessageHistoryData.swift similarity index 100% rename from submodules/Postbox/Postbox/InitialMessageHistoryData.swift rename to submodules/Postbox/Sources/InitialMessageHistoryData.swift diff --git a/submodules/Postbox/Postbox/IntermediateMessage.swift b/submodules/Postbox/Sources/IntermediateMessage.swift similarity index 100% rename from submodules/Postbox/Postbox/IntermediateMessage.swift rename to submodules/Postbox/Sources/IntermediateMessage.swift diff --git a/submodules/Postbox/Postbox/InvalidatedGroupMessageStatsTable.swift b/submodules/Postbox/Sources/InvalidatedGroupMessageStatsTable.swift similarity index 100% rename from submodules/Postbox/Postbox/InvalidatedGroupMessageStatsTable.swift rename to submodules/Postbox/Sources/InvalidatedGroupMessageStatsTable.swift diff --git a/submodules/Postbox/Postbox/InvalidatedMessageHistoryTagSummariesView.swift b/submodules/Postbox/Sources/InvalidatedMessageHistoryTagSummariesView.swift similarity index 100% rename from submodules/Postbox/Postbox/InvalidatedMessageHistoryTagSummariesView.swift rename to submodules/Postbox/Sources/InvalidatedMessageHistoryTagSummariesView.swift diff --git a/submodules/Postbox/Postbox/InvalidatedMessageHistoryTagsSummaryTable.swift b/submodules/Postbox/Sources/InvalidatedMessageHistoryTagsSummaryTable.swift similarity index 100% rename from submodules/Postbox/Postbox/InvalidatedMessageHistoryTagsSummaryTable.swift rename to submodules/Postbox/Sources/InvalidatedMessageHistoryTagsSummaryTable.swift diff --git a/submodules/Postbox/Postbox/IpcNotifier.h b/submodules/Postbox/Sources/IpcNotifier.h similarity index 100% rename from submodules/Postbox/Postbox/IpcNotifier.h rename to submodules/Postbox/Sources/IpcNotifier.h diff --git a/submodules/Postbox/Postbox/IpcNotifier.mm b/submodules/Postbox/Sources/IpcNotifier.mm similarity index 100% rename from submodules/Postbox/Postbox/IpcNotifier.mm rename to submodules/Postbox/Sources/IpcNotifier.mm diff --git a/submodules/Postbox/Postbox/IpcPipe.swift b/submodules/Postbox/Sources/IpcPipe.swift similarity index 95% rename from submodules/Postbox/Postbox/IpcPipe.swift rename to submodules/Postbox/Sources/IpcPipe.swift index aeb3e74651..9c1280f61a 100644 --- a/submodules/Postbox/Postbox/IpcPipe.swift +++ b/submodules/Postbox/Sources/IpcPipe.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import SwiftSignalKitMac -#else - import SwiftSignalKit -#endif +import SwiftSignalKit func ipcNotify(basePath: String, data: Int64) { DispatchQueue.global(qos: .default).async { diff --git a/submodules/Postbox/Postbox/ItemCacheMetaTable.swift b/submodules/Postbox/Sources/ItemCacheMetaTable.swift similarity index 100% rename from submodules/Postbox/Postbox/ItemCacheMetaTable.swift rename to submodules/Postbox/Sources/ItemCacheMetaTable.swift diff --git a/submodules/Postbox/Postbox/ItemCacheTable.swift b/submodules/Postbox/Sources/ItemCacheTable.swift similarity index 100% rename from submodules/Postbox/Postbox/ItemCacheTable.swift rename to submodules/Postbox/Sources/ItemCacheTable.swift diff --git a/submodules/Postbox/Postbox/ItemCollection.swift b/submodules/Postbox/Sources/ItemCollection.swift similarity index 100% rename from submodules/Postbox/Postbox/ItemCollection.swift rename to submodules/Postbox/Sources/ItemCollection.swift diff --git a/submodules/Postbox/Postbox/ItemCollectionIdsView.swift b/submodules/Postbox/Sources/ItemCollectionIdsView.swift similarity index 100% rename from submodules/Postbox/Postbox/ItemCollectionIdsView.swift rename to submodules/Postbox/Sources/ItemCollectionIdsView.swift diff --git a/submodules/Postbox/Postbox/ItemCollectionInfoTable.swift b/submodules/Postbox/Sources/ItemCollectionInfoTable.swift similarity index 100% rename from submodules/Postbox/Postbox/ItemCollectionInfoTable.swift rename to submodules/Postbox/Sources/ItemCollectionInfoTable.swift diff --git a/submodules/Postbox/Postbox/ItemCollectionInfoView.swift b/submodules/Postbox/Sources/ItemCollectionInfoView.swift similarity index 100% rename from submodules/Postbox/Postbox/ItemCollectionInfoView.swift rename to submodules/Postbox/Sources/ItemCollectionInfoView.swift diff --git a/submodules/Postbox/Postbox/ItemCollectionInfosView.swift b/submodules/Postbox/Sources/ItemCollectionInfosView.swift similarity index 100% rename from submodules/Postbox/Postbox/ItemCollectionInfosView.swift rename to submodules/Postbox/Sources/ItemCollectionInfosView.swift diff --git a/submodules/Postbox/Postbox/ItemCollectionItemTable.swift b/submodules/Postbox/Sources/ItemCollectionItemTable.swift similarity index 100% rename from submodules/Postbox/Postbox/ItemCollectionItemTable.swift rename to submodules/Postbox/Sources/ItemCollectionItemTable.swift diff --git a/submodules/Postbox/Postbox/ItemCollectionsView.swift b/submodules/Postbox/Sources/ItemCollectionsView.swift similarity index 100% rename from submodules/Postbox/Postbox/ItemCollectionsView.swift rename to submodules/Postbox/Sources/ItemCollectionsView.swift diff --git a/submodules/Postbox/Postbox/KeychainTable.swift b/submodules/Postbox/Sources/KeychainTable.swift similarity index 100% rename from submodules/Postbox/Postbox/KeychainTable.swift rename to submodules/Postbox/Sources/KeychainTable.swift diff --git a/submodules/Postbox/Postbox/LocalMessageHistoryTagsTable.swift b/submodules/Postbox/Sources/LocalMessageHistoryTagsTable.swift similarity index 100% rename from submodules/Postbox/Postbox/LocalMessageHistoryTagsTable.swift rename to submodules/Postbox/Sources/LocalMessageHistoryTagsTable.swift diff --git a/submodules/Postbox/Postbox/LocalMessageTagsView.swift b/submodules/Postbox/Sources/LocalMessageTagsView.swift similarity index 100% rename from submodules/Postbox/Postbox/LocalMessageTagsView.swift rename to submodules/Postbox/Sources/LocalMessageTagsView.swift diff --git a/submodules/Postbox/Postbox/ManagedFile.swift b/submodules/Postbox/Sources/ManagedFile.swift similarity index 97% rename from submodules/Postbox/Postbox/ManagedFile.swift rename to submodules/Postbox/Sources/ManagedFile.swift index 52e476f3bf..5891e95e17 100644 --- a/submodules/Postbox/Postbox/ManagedFile.swift +++ b/submodules/Postbox/Sources/ManagedFile.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import SwiftSignalKitMac -#else - import SwiftSignalKit -#endif +import SwiftSignalKit public enum ManagedFileMode { case read diff --git a/submodules/Postbox/Postbox/MappedFile.swift b/submodules/Postbox/Sources/MappedFile.swift similarity index 100% rename from submodules/Postbox/Postbox/MappedFile.swift rename to submodules/Postbox/Sources/MappedFile.swift diff --git a/submodules/Postbox/Postbox/Media.swift b/submodules/Postbox/Sources/Media.swift similarity index 100% rename from submodules/Postbox/Postbox/Media.swift rename to submodules/Postbox/Sources/Media.swift diff --git a/submodules/Postbox/Postbox/MediaBox.swift b/submodules/Postbox/Sources/MediaBox.swift similarity index 99% rename from submodules/Postbox/Postbox/MediaBox.swift rename to submodules/Postbox/Sources/MediaBox.swift index 49cd9abf6c..7e6fac7fcc 100644 --- a/submodules/Postbox/Postbox/MediaBox.swift +++ b/submodules/Postbox/Sources/MediaBox.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import SwiftSignalKitMac -#else - import SwiftSignalKit -#endif +import SwiftSignalKit private final class ResourceStatusContext { var status: MediaResourceStatus? diff --git a/submodules/Postbox/Postbox/MediaBoxFile.swift b/submodules/Postbox/Sources/MediaBoxFile.swift similarity index 99% rename from submodules/Postbox/Postbox/MediaBoxFile.swift rename to submodules/Postbox/Sources/MediaBoxFile.swift index b23f0862f4..1808a46492 100644 --- a/submodules/Postbox/Postbox/MediaBoxFile.swift +++ b/submodules/Postbox/Sources/MediaBoxFile.swift @@ -1,15 +1,8 @@ import Foundation -#if os(iOS) import SwiftSignalKit -#else -import SwiftSignalKitMac -#endif -#if os(iOS) import Crc32 -#else -import crc32mac -#endif + private final class MediaBoxFileMap { fileprivate(set) var sum: Int32 diff --git a/submodules/Postbox/Postbox/MediaResource.swift b/submodules/Postbox/Sources/MediaResource.swift similarity index 100% rename from submodules/Postbox/Postbox/MediaResource.swift rename to submodules/Postbox/Sources/MediaResource.swift diff --git a/submodules/Postbox/Postbox/MediaResourceStatus.swift b/submodules/Postbox/Sources/MediaResourceStatus.swift similarity index 91% rename from submodules/Postbox/Postbox/MediaResourceStatus.swift rename to submodules/Postbox/Sources/MediaResourceStatus.swift index e63beaa4bb..189a992326 100644 --- a/submodules/Postbox/Postbox/MediaResourceStatus.swift +++ b/submodules/Postbox/Sources/MediaResourceStatus.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import SwiftSignalKitMac -#else - import SwiftSignalKit -#endif +import SwiftSignalKit public enum MediaResourceStatus: Equatable { case Remote diff --git a/submodules/Postbox/Postbox/Message.swift b/submodules/Postbox/Sources/Message.swift similarity index 100% rename from submodules/Postbox/Postbox/Message.swift rename to submodules/Postbox/Sources/Message.swift diff --git a/submodules/Postbox/Postbox/MessageGloballyUniqueIdTable.swift b/submodules/Postbox/Sources/MessageGloballyUniqueIdTable.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageGloballyUniqueIdTable.swift rename to submodules/Postbox/Sources/MessageGloballyUniqueIdTable.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryAnchorIndex.swift b/submodules/Postbox/Sources/MessageHistoryAnchorIndex.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryAnchorIndex.swift rename to submodules/Postbox/Sources/MessageHistoryAnchorIndex.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryHoleIndexTable.swift b/submodules/Postbox/Sources/MessageHistoryHoleIndexTable.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryHoleIndexTable.swift rename to submodules/Postbox/Sources/MessageHistoryHoleIndexTable.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryHolesView.swift b/submodules/Postbox/Sources/MessageHistoryHolesView.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryHolesView.swift rename to submodules/Postbox/Sources/MessageHistoryHolesView.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryIndexTable.swift b/submodules/Postbox/Sources/MessageHistoryIndexTable.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryIndexTable.swift rename to submodules/Postbox/Sources/MessageHistoryIndexTable.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryMetadataTable.swift b/submodules/Postbox/Sources/MessageHistoryMetadataTable.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryMetadataTable.swift rename to submodules/Postbox/Sources/MessageHistoryMetadataTable.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryOperation.swift b/submodules/Postbox/Sources/MessageHistoryOperation.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryOperation.swift rename to submodules/Postbox/Sources/MessageHistoryOperation.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryReadStateTable.swift b/submodules/Postbox/Sources/MessageHistoryReadStateTable.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryReadStateTable.swift rename to submodules/Postbox/Sources/MessageHistoryReadStateTable.swift diff --git a/submodules/Postbox/Postbox/MessageHistorySynchronizeReadStateTable.swift b/submodules/Postbox/Sources/MessageHistorySynchronizeReadStateTable.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistorySynchronizeReadStateTable.swift rename to submodules/Postbox/Sources/MessageHistorySynchronizeReadStateTable.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryTable.swift b/submodules/Postbox/Sources/MessageHistoryTable.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryTable.swift rename to submodules/Postbox/Sources/MessageHistoryTable.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryTagSummaryView.swift b/submodules/Postbox/Sources/MessageHistoryTagSummaryView.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryTagSummaryView.swift rename to submodules/Postbox/Sources/MessageHistoryTagSummaryView.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryTagsSummaryTable.swift b/submodules/Postbox/Sources/MessageHistoryTagsSummaryTable.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryTagsSummaryTable.swift rename to submodules/Postbox/Sources/MessageHistoryTagsSummaryTable.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryTagsTable.swift b/submodules/Postbox/Sources/MessageHistoryTagsTable.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryTagsTable.swift rename to submodules/Postbox/Sources/MessageHistoryTagsTable.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryTextIndexTable.swift b/submodules/Postbox/Sources/MessageHistoryTextIndexTable.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryTextIndexTable.swift rename to submodules/Postbox/Sources/MessageHistoryTextIndexTable.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryUnsentTable.swift b/submodules/Postbox/Sources/MessageHistoryUnsentTable.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryUnsentTable.swift rename to submodules/Postbox/Sources/MessageHistoryUnsentTable.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryView.swift b/submodules/Postbox/Sources/MessageHistoryView.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryView.swift rename to submodules/Postbox/Sources/MessageHistoryView.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryViewEntryAttributes.swift b/submodules/Postbox/Sources/MessageHistoryViewEntryAttributes.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryViewEntryAttributes.swift rename to submodules/Postbox/Sources/MessageHistoryViewEntryAttributes.swift diff --git a/submodules/Postbox/Postbox/MessageHistoryViewState.swift b/submodules/Postbox/Sources/MessageHistoryViewState.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageHistoryViewState.swift rename to submodules/Postbox/Sources/MessageHistoryViewState.swift diff --git a/submodules/Postbox/Postbox/MessageMediaTable.swift b/submodules/Postbox/Sources/MessageMediaTable.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageMediaTable.swift rename to submodules/Postbox/Sources/MessageMediaTable.swift diff --git a/submodules/Postbox/Postbox/MessageOfInterestHolesView.swift b/submodules/Postbox/Sources/MessageOfInterestHolesView.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageOfInterestHolesView.swift rename to submodules/Postbox/Sources/MessageOfInterestHolesView.swift diff --git a/submodules/Postbox/Postbox/MessageView.swift b/submodules/Postbox/Sources/MessageView.swift similarity index 100% rename from submodules/Postbox/Postbox/MessageView.swift rename to submodules/Postbox/Sources/MessageView.swift diff --git a/submodules/Postbox/Postbox/MessagesView.swift b/submodules/Postbox/Sources/MessagesView.swift similarity index 100% rename from submodules/Postbox/Postbox/MessagesView.swift rename to submodules/Postbox/Sources/MessagesView.swift diff --git a/submodules/Postbox/Postbox/MetadataTable.swift b/submodules/Postbox/Sources/MetadataTable.swift similarity index 100% rename from submodules/Postbox/Postbox/MetadataTable.swift rename to submodules/Postbox/Sources/MetadataTable.swift diff --git a/submodules/Postbox/Postbox/MultiplePeersView.swift b/submodules/Postbox/Sources/MultiplePeersView.swift similarity index 100% rename from submodules/Postbox/Postbox/MultiplePeersView.swift rename to submodules/Postbox/Sources/MultiplePeersView.swift diff --git a/submodules/Postbox/Postbox/MurMurHash32.h b/submodules/Postbox/Sources/MurMurHash32.h similarity index 100% rename from submodules/Postbox/Postbox/MurMurHash32.h rename to submodules/Postbox/Sources/MurMurHash32.h diff --git a/submodules/Postbox/Postbox/MurMurHash32.m b/submodules/Postbox/Sources/MurMurHash32.m similarity index 100% rename from submodules/Postbox/Postbox/MurMurHash32.m rename to submodules/Postbox/Sources/MurMurHash32.m diff --git a/submodules/Postbox/Postbox/MutableBasicPeerView.swift b/submodules/Postbox/Sources/MutableBasicPeerView.swift similarity index 100% rename from submodules/Postbox/Postbox/MutableBasicPeerView.swift rename to submodules/Postbox/Sources/MutableBasicPeerView.swift diff --git a/submodules/Postbox/Postbox/MutablePeerChatInclusionView.swift b/submodules/Postbox/Sources/MutablePeerChatInclusionView.swift similarity index 100% rename from submodules/Postbox/Postbox/MutablePeerChatInclusionView.swift rename to submodules/Postbox/Sources/MutablePeerChatInclusionView.swift diff --git a/submodules/Postbox/Postbox/NoticeEntryView.swift b/submodules/Postbox/Sources/NoticeEntryView.swift similarity index 100% rename from submodules/Postbox/Postbox/NoticeEntryView.swift rename to submodules/Postbox/Sources/NoticeEntryView.swift diff --git a/submodules/Postbox/Postbox/NoticeTable.swift b/submodules/Postbox/Sources/NoticeTable.swift similarity index 100% rename from submodules/Postbox/Postbox/NoticeTable.swift rename to submodules/Postbox/Sources/NoticeTable.swift diff --git a/submodules/Postbox/Postbox/OrderStatisticTable.swift b/submodules/Postbox/Sources/OrderStatisticTable.swift similarity index 100% rename from submodules/Postbox/Postbox/OrderStatisticTable.swift rename to submodules/Postbox/Sources/OrderStatisticTable.swift diff --git a/submodules/Postbox/Postbox/OrderedItemListEntry.swift b/submodules/Postbox/Sources/OrderedItemListEntry.swift similarity index 100% rename from submodules/Postbox/Postbox/OrderedItemListEntry.swift rename to submodules/Postbox/Sources/OrderedItemListEntry.swift diff --git a/submodules/Postbox/Postbox/OrderedItemListIndexTable.swift b/submodules/Postbox/Sources/OrderedItemListIndexTable.swift similarity index 100% rename from submodules/Postbox/Postbox/OrderedItemListIndexTable.swift rename to submodules/Postbox/Sources/OrderedItemListIndexTable.swift diff --git a/submodules/Postbox/Postbox/OrderedItemListTable.swift b/submodules/Postbox/Sources/OrderedItemListTable.swift similarity index 100% rename from submodules/Postbox/Postbox/OrderedItemListTable.swift rename to submodules/Postbox/Sources/OrderedItemListTable.swift diff --git a/submodules/Postbox/Postbox/OrderedItemListView.swift b/submodules/Postbox/Sources/OrderedItemListView.swift similarity index 100% rename from submodules/Postbox/Postbox/OrderedItemListView.swift rename to submodules/Postbox/Sources/OrderedItemListView.swift diff --git a/submodules/Postbox/Postbox/OrderedList.swift b/submodules/Postbox/Sources/OrderedList.swift similarity index 100% rename from submodules/Postbox/Postbox/OrderedList.swift rename to submodules/Postbox/Sources/OrderedList.swift diff --git a/submodules/Postbox/Postbox/Peer.swift b/submodules/Postbox/Sources/Peer.swift similarity index 100% rename from submodules/Postbox/Postbox/Peer.swift rename to submodules/Postbox/Sources/Peer.swift diff --git a/submodules/Postbox/Postbox/PeerChatInterfaceState.swift b/submodules/Postbox/Sources/PeerChatInterfaceState.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerChatInterfaceState.swift rename to submodules/Postbox/Sources/PeerChatInterfaceState.swift diff --git a/submodules/Postbox/Postbox/PeerChatInterfaceStateTable.swift b/submodules/Postbox/Sources/PeerChatInterfaceStateTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerChatInterfaceStateTable.swift rename to submodules/Postbox/Sources/PeerChatInterfaceStateTable.swift diff --git a/submodules/Postbox/Postbox/PeerChatListInclusion.swift b/submodules/Postbox/Sources/PeerChatListInclusion.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerChatListInclusion.swift rename to submodules/Postbox/Sources/PeerChatListInclusion.swift diff --git a/submodules/Postbox/Postbox/PeerChatStateTable.swift b/submodules/Postbox/Sources/PeerChatStateTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerChatStateTable.swift rename to submodules/Postbox/Sources/PeerChatStateTable.swift diff --git a/submodules/Postbox/Postbox/PeerChatStateView.swift b/submodules/Postbox/Sources/PeerChatStateView.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerChatStateView.swift rename to submodules/Postbox/Sources/PeerChatStateView.swift diff --git a/submodules/Postbox/Postbox/PeerChatTopIndexableMessageIds.swift b/submodules/Postbox/Sources/PeerChatTopIndexableMessageIds.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerChatTopIndexableMessageIds.swift rename to submodules/Postbox/Sources/PeerChatTopIndexableMessageIds.swift diff --git a/submodules/Postbox/Postbox/PeerGroup.swift b/submodules/Postbox/Sources/PeerGroup.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerGroup.swift rename to submodules/Postbox/Sources/PeerGroup.swift diff --git a/submodules/Postbox/Postbox/PeerMergedOperationLogIndexTable.swift b/submodules/Postbox/Sources/PeerMergedOperationLogIndexTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerMergedOperationLogIndexTable.swift rename to submodules/Postbox/Sources/PeerMergedOperationLogIndexTable.swift diff --git a/submodules/Postbox/Postbox/PeerMergedOperationLogView.swift b/submodules/Postbox/Sources/PeerMergedOperationLogView.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerMergedOperationLogView.swift rename to submodules/Postbox/Sources/PeerMergedOperationLogView.swift diff --git a/submodules/Postbox/Postbox/PeerNameIndexRepresentation.swift b/submodules/Postbox/Sources/PeerNameIndexRepresentation.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerNameIndexRepresentation.swift rename to submodules/Postbox/Sources/PeerNameIndexRepresentation.swift diff --git a/submodules/Postbox/Postbox/PeerNameIndexTable.swift b/submodules/Postbox/Sources/PeerNameIndexTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerNameIndexTable.swift rename to submodules/Postbox/Sources/PeerNameIndexTable.swift diff --git a/submodules/Postbox/Postbox/PeerNotificationSettings.swift b/submodules/Postbox/Sources/PeerNotificationSettings.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerNotificationSettings.swift rename to submodules/Postbox/Sources/PeerNotificationSettings.swift diff --git a/submodules/Postbox/Postbox/PeerNotificationSettingsBehaviorIndexTable.swift b/submodules/Postbox/Sources/PeerNotificationSettingsBehaviorIndexTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerNotificationSettingsBehaviorIndexTable.swift rename to submodules/Postbox/Sources/PeerNotificationSettingsBehaviorIndexTable.swift diff --git a/submodules/Postbox/Postbox/PeerNotificationSettingsBehaviorTable.swift b/submodules/Postbox/Sources/PeerNotificationSettingsBehaviorTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerNotificationSettingsBehaviorTable.swift rename to submodules/Postbox/Sources/PeerNotificationSettingsBehaviorTable.swift diff --git a/submodules/Postbox/Postbox/PeerNotificationSettingsBehaviorTimestampView.swift b/submodules/Postbox/Sources/PeerNotificationSettingsBehaviorTimestampView.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerNotificationSettingsBehaviorTimestampView.swift rename to submodules/Postbox/Sources/PeerNotificationSettingsBehaviorTimestampView.swift diff --git a/submodules/Postbox/Postbox/PeerNotificationSettingsTable.swift b/submodules/Postbox/Sources/PeerNotificationSettingsTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerNotificationSettingsTable.swift rename to submodules/Postbox/Sources/PeerNotificationSettingsTable.swift diff --git a/submodules/Postbox/Postbox/PeerNotificationSettingsView.swift b/submodules/Postbox/Sources/PeerNotificationSettingsView.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerNotificationSettingsView.swift rename to submodules/Postbox/Sources/PeerNotificationSettingsView.swift diff --git a/submodules/Postbox/Postbox/PeerOperationLogMetadataTable.swift b/submodules/Postbox/Sources/PeerOperationLogMetadataTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerOperationLogMetadataTable.swift rename to submodules/Postbox/Sources/PeerOperationLogMetadataTable.swift diff --git a/submodules/Postbox/Postbox/PeerOperationLogTable.swift b/submodules/Postbox/Sources/PeerOperationLogTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerOperationLogTable.swift rename to submodules/Postbox/Sources/PeerOperationLogTable.swift diff --git a/submodules/Postbox/Postbox/PeerPresence.swift b/submodules/Postbox/Sources/PeerPresence.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerPresence.swift rename to submodules/Postbox/Sources/PeerPresence.swift diff --git a/submodules/Postbox/Postbox/PeerPresenceTable.swift b/submodules/Postbox/Sources/PeerPresenceTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerPresenceTable.swift rename to submodules/Postbox/Sources/PeerPresenceTable.swift diff --git a/submodules/Postbox/Postbox/PeerPresencesView.swift b/submodules/Postbox/Sources/PeerPresencesView.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerPresencesView.swift rename to submodules/Postbox/Sources/PeerPresencesView.swift diff --git a/submodules/Postbox/Postbox/PeerReadState.swift b/submodules/Postbox/Sources/PeerReadState.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerReadState.swift rename to submodules/Postbox/Sources/PeerReadState.swift diff --git a/submodules/Postbox/Postbox/PeerTable.swift b/submodules/Postbox/Sources/PeerTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerTable.swift rename to submodules/Postbox/Sources/PeerTable.swift diff --git a/submodules/Postbox/Postbox/PeerView.swift b/submodules/Postbox/Sources/PeerView.swift similarity index 100% rename from submodules/Postbox/Postbox/PeerView.swift rename to submodules/Postbox/Sources/PeerView.swift diff --git a/submodules/Postbox/Postbox/PendingMessageActionsMetadataTable.swift b/submodules/Postbox/Sources/PendingMessageActionsMetadataTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PendingMessageActionsMetadataTable.swift rename to submodules/Postbox/Sources/PendingMessageActionsMetadataTable.swift diff --git a/submodules/Postbox/Postbox/PendingMessageActionsSummaryView.swift b/submodules/Postbox/Sources/PendingMessageActionsSummaryView.swift similarity index 100% rename from submodules/Postbox/Postbox/PendingMessageActionsSummaryView.swift rename to submodules/Postbox/Sources/PendingMessageActionsSummaryView.swift diff --git a/submodules/Postbox/Postbox/PendingMessageActionsTable.swift b/submodules/Postbox/Sources/PendingMessageActionsTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PendingMessageActionsTable.swift rename to submodules/Postbox/Sources/PendingMessageActionsTable.swift diff --git a/submodules/Postbox/Postbox/PendingMessageActionsView.swift b/submodules/Postbox/Sources/PendingMessageActionsView.swift similarity index 100% rename from submodules/Postbox/Postbox/PendingMessageActionsView.swift rename to submodules/Postbox/Sources/PendingMessageActionsView.swift diff --git a/submodules/Postbox/Postbox/PendingPeerNotificationSettingsIndexTable.swift b/submodules/Postbox/Sources/PendingPeerNotificationSettingsIndexTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PendingPeerNotificationSettingsIndexTable.swift rename to submodules/Postbox/Sources/PendingPeerNotificationSettingsIndexTable.swift diff --git a/submodules/Postbox/Postbox/PendingPeerNotificationSettingsView.swift b/submodules/Postbox/Sources/PendingPeerNotificationSettingsView.swift similarity index 100% rename from submodules/Postbox/Postbox/PendingPeerNotificationSettingsView.swift rename to submodules/Postbox/Sources/PendingPeerNotificationSettingsView.swift diff --git a/submodules/Postbox/Postbox/PinnedItemId.swift b/submodules/Postbox/Sources/PinnedItemId.swift similarity index 100% rename from submodules/Postbox/Postbox/PinnedItemId.swift rename to submodules/Postbox/Sources/PinnedItemId.swift diff --git a/submodules/Postbox/Postbox/Postbox.h b/submodules/Postbox/Sources/Postbox.h similarity index 100% rename from submodules/Postbox/Postbox/Postbox.h rename to submodules/Postbox/Sources/Postbox.h diff --git a/submodules/Postbox/Postbox/Postbox.swift b/submodules/Postbox/Sources/Postbox.swift similarity index 99% rename from submodules/Postbox/Postbox/Postbox.swift rename to submodules/Postbox/Sources/Postbox.swift index d9de5d0a43..5de768cab7 100644 --- a/submodules/Postbox/Postbox/Postbox.swift +++ b/submodules/Postbox/Sources/Postbox.swift @@ -1,10 +1,6 @@ import Foundation -#if os(macOS) - import SwiftSignalKitMac -#else - import SwiftSignalKit -#endif +import SwiftSignalKit public protocol PeerChatState: PostboxCoding { func equals(_ other: PeerChatState) -> Bool diff --git a/submodules/Postbox/Postbox/PostboxAccess.swift b/submodules/Postbox/Sources/PostboxAccess.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxAccess.swift rename to submodules/Postbox/Sources/PostboxAccess.swift diff --git a/submodules/Postbox/Postbox/PostboxLogging.swift b/submodules/Postbox/Sources/PostboxLogging.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxLogging.swift rename to submodules/Postbox/Sources/PostboxLogging.swift diff --git a/submodules/Postbox/Postbox/PostboxStateView.swift b/submodules/Postbox/Sources/PostboxStateView.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxStateView.swift rename to submodules/Postbox/Sources/PostboxStateView.swift diff --git a/submodules/Postbox/Postbox/PostboxTransaction.swift b/submodules/Postbox/Sources/PostboxTransaction.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxTransaction.swift rename to submodules/Postbox/Sources/PostboxTransaction.swift diff --git a/submodules/Postbox/Postbox/PostboxUpgrade_12to13.swift b/submodules/Postbox/Sources/PostboxUpgrade_12to13.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxUpgrade_12to13.swift rename to submodules/Postbox/Sources/PostboxUpgrade_12to13.swift diff --git a/submodules/Postbox/Postbox/PostboxUpgrade_13to14.swift b/submodules/Postbox/Sources/PostboxUpgrade_13to14.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxUpgrade_13to14.swift rename to submodules/Postbox/Sources/PostboxUpgrade_13to14.swift diff --git a/submodules/Postbox/Postbox/PostboxUpgrade_14to15.swift b/submodules/Postbox/Sources/PostboxUpgrade_14to15.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxUpgrade_14to15.swift rename to submodules/Postbox/Sources/PostboxUpgrade_14to15.swift diff --git a/submodules/Postbox/Postbox/PostboxUpgrade_15to16.swift b/submodules/Postbox/Sources/PostboxUpgrade_15to16.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxUpgrade_15to16.swift rename to submodules/Postbox/Sources/PostboxUpgrade_15to16.swift diff --git a/submodules/Postbox/Postbox/PostboxUpgrade_16to17.swift b/submodules/Postbox/Sources/PostboxUpgrade_16to17.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxUpgrade_16to17.swift rename to submodules/Postbox/Sources/PostboxUpgrade_16to17.swift diff --git a/submodules/Postbox/Postbox/PostboxUpgrade_17to18.swift b/submodules/Postbox/Sources/PostboxUpgrade_17to18.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxUpgrade_17to18.swift rename to submodules/Postbox/Sources/PostboxUpgrade_17to18.swift diff --git a/submodules/Postbox/Postbox/PostboxUpgrade_18to19.swift b/submodules/Postbox/Sources/PostboxUpgrade_18to19.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxUpgrade_18to19.swift rename to submodules/Postbox/Sources/PostboxUpgrade_18to19.swift diff --git a/submodules/Postbox/Postbox/PostboxUpgrade_19to20.swift b/submodules/Postbox/Sources/PostboxUpgrade_19to20.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxUpgrade_19to20.swift rename to submodules/Postbox/Sources/PostboxUpgrade_19to20.swift diff --git a/submodules/Postbox/Postbox/PostboxUpgrade_20to21.swift b/submodules/Postbox/Sources/PostboxUpgrade_20to21.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxUpgrade_20to21.swift rename to submodules/Postbox/Sources/PostboxUpgrade_20to21.swift diff --git a/submodules/Postbox/Postbox/PostboxUpgrade_21to22.swift b/submodules/Postbox/Sources/PostboxUpgrade_21to22.swift similarity index 89% rename from submodules/Postbox/Postbox/PostboxUpgrade_21to22.swift rename to submodules/Postbox/Sources/PostboxUpgrade_21to22.swift index 871d55b2f2..070ab8c6a0 100644 --- a/submodules/Postbox/Postbox/PostboxUpgrade_21to22.swift +++ b/submodules/Postbox/Sources/PostboxUpgrade_21to22.swift @@ -1,10 +1,6 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -#else import SwiftSignalKit -#endif func postboxUpgrade_21to22(queue: Queue, basePath: String, valueBox: ValueBox, encryptionParameters: ValueBoxEncryptionParameters, progress: (Float) -> Void) -> String? { postboxLog("Upgrade 21->22 started") diff --git a/submodules/Postbox/Postbox/PostboxUpgrade_22to23.swift b/submodules/Postbox/Sources/PostboxUpgrade_22to23.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxUpgrade_22to23.swift rename to submodules/Postbox/Sources/PostboxUpgrade_22to23.swift diff --git a/submodules/Postbox/Postbox/PostboxUpgrade_23to24.swift b/submodules/Postbox/Sources/PostboxUpgrade_23to24.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxUpgrade_23to24.swift rename to submodules/Postbox/Sources/PostboxUpgrade_23to24.swift diff --git a/submodules/Postbox/Postbox/PostboxUpgrade_24to25.swift b/submodules/Postbox/Sources/PostboxUpgrade_24to25.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxUpgrade_24to25.swift rename to submodules/Postbox/Sources/PostboxUpgrade_24to25.swift diff --git a/submodules/Postbox/Postbox/PostboxView.swift b/submodules/Postbox/Sources/PostboxView.swift similarity index 100% rename from submodules/Postbox/Postbox/PostboxView.swift rename to submodules/Postbox/Sources/PostboxView.swift diff --git a/submodules/Postbox/Postbox/PreferencesEntry.swift b/submodules/Postbox/Sources/PreferencesEntry.swift similarity index 100% rename from submodules/Postbox/Postbox/PreferencesEntry.swift rename to submodules/Postbox/Sources/PreferencesEntry.swift diff --git a/submodules/Postbox/Postbox/PreferencesTable.swift b/submodules/Postbox/Sources/PreferencesTable.swift similarity index 100% rename from submodules/Postbox/Postbox/PreferencesTable.swift rename to submodules/Postbox/Sources/PreferencesTable.swift diff --git a/submodules/Postbox/Postbox/PreferencesView.swift b/submodules/Postbox/Sources/PreferencesView.swift similarity index 100% rename from submodules/Postbox/Postbox/PreferencesView.swift rename to submodules/Postbox/Sources/PreferencesView.swift diff --git a/submodules/Postbox/Postbox/RatingTable.swift b/submodules/Postbox/Sources/RatingTable.swift similarity index 100% rename from submodules/Postbox/Postbox/RatingTable.swift rename to submodules/Postbox/Sources/RatingTable.swift diff --git a/submodules/Postbox/Postbox/RedBlackTree.swift b/submodules/Postbox/Sources/RedBlackTree.swift similarity index 100% rename from submodules/Postbox/Postbox/RedBlackTree.swift rename to submodules/Postbox/Sources/RedBlackTree.swift diff --git a/submodules/Postbox/Postbox/RenderedPeer.swift b/submodules/Postbox/Sources/RenderedPeer.swift similarity index 100% rename from submodules/Postbox/Postbox/RenderedPeer.swift rename to submodules/Postbox/Sources/RenderedPeer.swift diff --git a/submodules/Postbox/Postbox/ReverseAssociatedPeerTable.swift b/submodules/Postbox/Sources/ReverseAssociatedPeerTable.swift similarity index 100% rename from submodules/Postbox/Postbox/ReverseAssociatedPeerTable.swift rename to submodules/Postbox/Sources/ReverseAssociatedPeerTable.swift diff --git a/submodules/Postbox/Postbox/ReverseIndexReferenceTable.swift b/submodules/Postbox/Sources/ReverseIndexReferenceTable.swift similarity index 100% rename from submodules/Postbox/Postbox/ReverseIndexReferenceTable.swift rename to submodules/Postbox/Sources/ReverseIndexReferenceTable.swift diff --git a/submodules/Postbox/Postbox/SeedConfiguration.swift b/submodules/Postbox/Sources/SeedConfiguration.swift similarity index 100% rename from submodules/Postbox/Postbox/SeedConfiguration.swift rename to submodules/Postbox/Sources/SeedConfiguration.swift diff --git a/submodules/Postbox/Postbox/SharedAccountMediaManager.swift b/submodules/Postbox/Sources/SharedAccountMediaManager.swift similarity index 100% rename from submodules/Postbox/Postbox/SharedAccountMediaManager.swift rename to submodules/Postbox/Sources/SharedAccountMediaManager.swift diff --git a/submodules/Postbox/Postbox/SimpleDictionary.swift b/submodules/Postbox/Sources/SimpleDictionary.swift similarity index 100% rename from submodules/Postbox/Postbox/SimpleDictionary.swift rename to submodules/Postbox/Sources/SimpleDictionary.swift diff --git a/submodules/Postbox/Postbox/SimpleSet.swift b/submodules/Postbox/Sources/SimpleSet.swift similarity index 100% rename from submodules/Postbox/Postbox/SimpleSet.swift rename to submodules/Postbox/Sources/SimpleSet.swift diff --git a/submodules/Postbox/Postbox/SqliteInterface.swift b/submodules/Postbox/Sources/SqliteInterface.swift similarity index 99% rename from submodules/Postbox/Postbox/SqliteInterface.swift rename to submodules/Postbox/Sources/SqliteInterface.swift index f682424f5b..1d898913e9 100644 --- a/submodules/Postbox/Postbox/SqliteInterface.swift +++ b/submodules/Postbox/Sources/SqliteInterface.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import sqlciphermac -#else import sqlcipher -#endif private final class SqliteInterfaceStatement { let statement: OpaquePointer? diff --git a/submodules/Postbox/Postbox/SqliteValueBox.swift b/submodules/Postbox/Sources/SqliteValueBox.swift similarity index 99% rename from submodules/Postbox/Postbox/SqliteValueBox.swift rename to submodules/Postbox/Sources/SqliteValueBox.swift index a81166736c..3c9777f952 100644 --- a/submodules/Postbox/Postbox/SqliteValueBox.swift +++ b/submodules/Postbox/Sources/SqliteValueBox.swift @@ -1,14 +1,6 @@ import Foundation -#if os(macOS) -import sqlciphermac -#else import sqlcipher -#endif -#if os(macOS) - import SwiftSignalKitMac -#else - import SwiftSignalKit -#endif +import SwiftSignalKit private struct SqliteValueBoxTable { let table: ValueBoxTable diff --git a/submodules/Postbox/Postbox/StringIndexTokens.swift b/submodules/Postbox/Sources/StringIndexTokens.swift similarity index 98% rename from submodules/Postbox/Postbox/StringIndexTokens.swift rename to submodules/Postbox/Sources/StringIndexTokens.swift index c02156e0d1..6ca16057c8 100644 --- a/submodules/Postbox/Postbox/StringIndexTokens.swift +++ b/submodules/Postbox/Sources/StringIndexTokens.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import sqlciphermac -#else import sqlcipher -#endif public enum StringIndexTokenTransliteration { case none diff --git a/submodules/Postbox/Postbox/SynchronizeGroupMessageStatsView.swift b/submodules/Postbox/Sources/SynchronizeGroupMessageStatsView.swift similarity index 100% rename from submodules/Postbox/Postbox/SynchronizeGroupMessageStatsView.swift rename to submodules/Postbox/Sources/SynchronizeGroupMessageStatsView.swift diff --git a/submodules/Postbox/Postbox/SynchronizePeerReadStatesView.swift b/submodules/Postbox/Sources/SynchronizePeerReadStatesView.swift similarity index 100% rename from submodules/Postbox/Postbox/SynchronizePeerReadStatesView.swift rename to submodules/Postbox/Sources/SynchronizePeerReadStatesView.swift diff --git a/submodules/Postbox/Postbox/Table.swift b/submodules/Postbox/Sources/Table.swift similarity index 100% rename from submodules/Postbox/Postbox/Table.swift rename to submodules/Postbox/Sources/Table.swift diff --git a/submodules/Postbox/Postbox/TempBox.swift b/submodules/Postbox/Sources/TempBox.swift similarity index 99% rename from submodules/Postbox/Postbox/TempBox.swift rename to submodules/Postbox/Sources/TempBox.swift index 202f11d832..d602c01814 100644 --- a/submodules/Postbox/Postbox/TempBox.swift +++ b/submodules/Postbox/Sources/TempBox.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -#else import SwiftSignalKit -#endif private final class TempBoxFileContext { let directory: String diff --git a/submodules/Postbox/Postbox/TimeBasedCleanup.swift b/submodules/Postbox/Sources/TimeBasedCleanup.swift similarity index 97% rename from submodules/Postbox/Postbox/TimeBasedCleanup.swift rename to submodules/Postbox/Sources/TimeBasedCleanup.swift index 2028c44674..c2946c2769 100644 --- a/submodules/Postbox/Postbox/TimeBasedCleanup.swift +++ b/submodules/Postbox/Sources/TimeBasedCleanup.swift @@ -1,15 +1,7 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -#else import SwiftSignalKit -#endif - -#if os(macOS) -private typealias SignalKitTimer = SwiftSignalKitMac.Timer -#else private typealias SignalKitTimer = SwiftSignalKit.Timer -#endif + private func scanFiles(at path: String, olderThan minTimestamp: Int32, _ f: (String) -> Void) { guard let enumerator = FileManager.default.enumerator(at: URL(fileURLWithPath: path), includingPropertiesForKeys: [.contentModificationDateKey, .isDirectoryKey], options: [.skipsSubdirectoryDescendants], errorHandler: nil) else { diff --git a/submodules/Postbox/Postbox/TimestampBasedMessageAttributesIndexTable.swift b/submodules/Postbox/Sources/TimestampBasedMessageAttributesIndexTable.swift similarity index 100% rename from submodules/Postbox/Postbox/TimestampBasedMessageAttributesIndexTable.swift rename to submodules/Postbox/Sources/TimestampBasedMessageAttributesIndexTable.swift diff --git a/submodules/Postbox/Postbox/TimestampBasedMessageAttributesTable.swift b/submodules/Postbox/Sources/TimestampBasedMessageAttributesTable.swift similarity index 100% rename from submodules/Postbox/Postbox/TimestampBasedMessageAttributesTable.swift rename to submodules/Postbox/Sources/TimestampBasedMessageAttributesTable.swift diff --git a/submodules/Postbox/Postbox/TimestampBasedMessageAttributesView.swift b/submodules/Postbox/Sources/TimestampBasedMessageAttributesView.swift similarity index 100% rename from submodules/Postbox/Postbox/TimestampBasedMessageAttributesView.swift rename to submodules/Postbox/Sources/TimestampBasedMessageAttributesView.swift diff --git a/submodules/Postbox/Postbox/UnorderedItemListTable.swift b/submodules/Postbox/Sources/UnorderedItemListTable.swift similarity index 100% rename from submodules/Postbox/Postbox/UnorderedItemListTable.swift rename to submodules/Postbox/Sources/UnorderedItemListTable.swift diff --git a/submodules/Postbox/Postbox/UnreadMessageCountsView.swift b/submodules/Postbox/Sources/UnreadMessageCountsView.swift similarity index 100% rename from submodules/Postbox/Postbox/UnreadMessageCountsView.swift rename to submodules/Postbox/Sources/UnreadMessageCountsView.swift diff --git a/submodules/Postbox/Postbox/UnsentMessageHistoryView.swift b/submodules/Postbox/Sources/UnsentMessageHistoryView.swift similarity index 100% rename from submodules/Postbox/Postbox/UnsentMessageHistoryView.swift rename to submodules/Postbox/Sources/UnsentMessageHistoryView.swift diff --git a/submodules/Postbox/Postbox/UnsentMessageIndicesView.swift b/submodules/Postbox/Sources/UnsentMessageIndicesView.swift similarity index 100% rename from submodules/Postbox/Postbox/UnsentMessageIndicesView.swift rename to submodules/Postbox/Sources/UnsentMessageIndicesView.swift diff --git a/submodules/Postbox/Postbox/Upgrades.swift b/submodules/Postbox/Sources/Upgrades.swift similarity index 95% rename from submodules/Postbox/Postbox/Upgrades.swift rename to submodules/Postbox/Sources/Upgrades.swift index 4cce537b00..c1fddb3163 100644 --- a/submodules/Postbox/Postbox/Upgrades.swift +++ b/submodules/Postbox/Sources/Upgrades.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -#else import SwiftSignalKit -#endif enum PostboxUpgradeOperation { case inplace((MetadataTable, ValueBox, (Float) -> Void) -> Void) diff --git a/submodules/Postbox/Postbox/ValueBox.swift b/submodules/Postbox/Sources/ValueBox.swift similarity index 100% rename from submodules/Postbox/Postbox/ValueBox.swift rename to submodules/Postbox/Sources/ValueBox.swift diff --git a/submodules/Postbox/Postbox/ValueBoxKey.swift b/submodules/Postbox/Sources/ValueBoxKey.swift similarity index 100% rename from submodules/Postbox/Postbox/ValueBoxKey.swift rename to submodules/Postbox/Sources/ValueBoxKey.swift diff --git a/submodules/Postbox/Postbox/ViewTracker.swift b/submodules/Postbox/Sources/ViewTracker.swift similarity index 99% rename from submodules/Postbox/Postbox/ViewTracker.swift rename to submodules/Postbox/Sources/ViewTracker.swift index 81d925b351..bd232da91f 100644 --- a/submodules/Postbox/Postbox/ViewTracker.swift +++ b/submodules/Postbox/Sources/ViewTracker.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import SwiftSignalKitMac -#else - import SwiftSignalKit -#endif +import SwiftSignalKit public enum ViewUpdateType { case Initial diff --git a/submodules/Postbox/Postbox/Views.swift b/submodules/Postbox/Sources/Views.swift similarity index 100% rename from submodules/Postbox/Postbox/Views.swift rename to submodules/Postbox/Sources/Views.swift diff --git a/submodules/Postbox/Postbox/module.private.modulemap b/submodules/Postbox/Sources/module.private.modulemap similarity index 100% rename from submodules/Postbox/Postbox/module.private.modulemap rename to submodules/Postbox/Sources/module.private.modulemap diff --git a/submodules/SSignalKit/SSignalKit/Info.plist b/submodules/SSignalKit/SSignalKit/Info.plist deleted file mode 100644 index d3de8eefb6..0000000000 --- a/submodules/SSignalKit/SSignalKit/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/submodules/SSignalKit/SSignalKit_Xcode.xcodeproj/project.pbxproj b/submodules/SSignalKit/SSignalKit_Xcode.xcodeproj/project.pbxproj deleted file mode 100644 index ac064feac3..0000000000 --- a/submodules/SSignalKit/SSignalKit_Xcode.xcodeproj/project.pbxproj +++ /dev/null @@ -1,2536 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - D0085AE71B28285400EAF753 /* SSignal+Timing.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AB11B28285400EAF753 /* SSignal+Timing.m */; }; - D0085AE81B28285400EAF753 /* SThreadPool.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AB21B28285400EAF753 /* SThreadPool.m */; }; - D0085AE91B28285400EAF753 /* SQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AB31B28285400EAF753 /* SQueue.m */; }; - D0085AEA1B28285400EAF753 /* SSignal+Take.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AB41B28285400EAF753 /* SSignal+Take.m */; }; - D0085AEB1B28285400EAF753 /* SSignal+Meta.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AB51B28285400EAF753 /* SSignal+Meta.m */; }; - D0085AEC1B28285400EAF753 /* SSignal+Accumulate.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AB61B28285400EAF753 /* SSignal+Accumulate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085AED1B28285400EAF753 /* SSignal+Single.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AB71B28285400EAF753 /* SSignal+Single.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085AEE1B28285400EAF753 /* SSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AB81B28285400EAF753 /* SSignal.m */; }; - D0085AEF1B28285400EAF753 /* SSignalKit.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AB91B28285400EAF753 /* SSignalKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085AF01B28285400EAF753 /* SMulticastSignalManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085ABA1B28285400EAF753 /* SMulticastSignalManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085AF11B28285400EAF753 /* SMulticastSignalManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085ABB1B28285400EAF753 /* SMulticastSignalManager.m */; }; - D0085AF21B28285400EAF753 /* SSignal+Combine.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085ABC1B28285400EAF753 /* SSignal+Combine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085AF31B28285400EAF753 /* SSignal+Combine.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085ABD1B28285400EAF753 /* SSignal+Combine.m */; }; - D0085AF41B28285400EAF753 /* SSignal+Pipe.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085ABE1B28285400EAF753 /* SSignal+Pipe.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085AF51B28285400EAF753 /* SSignal+Pipe.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085ABF1B28285400EAF753 /* SSignal+Pipe.m */; }; - D0085AF61B28285400EAF753 /* SSignal+SideEffects.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AC01B28285400EAF753 /* SSignal+SideEffects.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085AF71B28285400EAF753 /* SSignal+SideEffects.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AC11B28285400EAF753 /* SSignal+SideEffects.m */; }; - D0085AF81B28285400EAF753 /* SSignal+Catch.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AC21B28285400EAF753 /* SSignal+Catch.m */; }; - D0085AF91B28285400EAF753 /* SSignal+Catch.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AC31B28285400EAF753 /* SSignal+Catch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085AFA1B28285400EAF753 /* SSignal+Take.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AC41B28285400EAF753 /* SSignal+Take.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085AFB1B28285400EAF753 /* SSignal+Accumulate.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AC51B28285400EAF753 /* SSignal+Accumulate.m */; }; - D0085AFC1B28285400EAF753 /* SQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AC61B28285400EAF753 /* SQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085AFD1B28285400EAF753 /* SSignal+Meta.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AC71B28285400EAF753 /* SSignal+Meta.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085AFE1B28285400EAF753 /* SSignal+Timing.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AC81B28285400EAF753 /* SSignal+Timing.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085AFF1B28285400EAF753 /* SSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AC91B28285400EAF753 /* SSubscriber.m */; }; - D0085B001B28285400EAF753 /* SSignal+Dispatch.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085ACA1B28285400EAF753 /* SSignal+Dispatch.m */; }; - D0085B011B28285400EAF753 /* SThreadPoolTask.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085ACB1B28285400EAF753 /* SThreadPoolTask.m */; }; - D0085B021B28285400EAF753 /* SThreadPoolQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085ACC1B28285400EAF753 /* SThreadPoolQueue.m */; }; - D0085B031B28285400EAF753 /* SThreadPoolQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085ACD1B28285400EAF753 /* SThreadPoolQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B041B28285400EAF753 /* SThreadPool.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085ACE1B28285400EAF753 /* SThreadPool.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B051B28285400EAF753 /* SThreadPoolTask.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085ACF1B28285400EAF753 /* SThreadPoolTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B061B28285400EAF753 /* SDisposableSet.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AD01B28285400EAF753 /* SDisposableSet.m */; }; - D0085B071B28285400EAF753 /* SMetaDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AD11B28285400EAF753 /* SMetaDisposable.m */; }; - D0085B081B28285400EAF753 /* SSignal+Multicast.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AD21B28285400EAF753 /* SSignal+Multicast.m */; }; - D0085B091B28285400EAF753 /* SSubscriber.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AD31B28285400EAF753 /* SSubscriber.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B0A1B28285400EAF753 /* SDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AD41B28285400EAF753 /* SDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B0B1B28285400EAF753 /* SSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AD51B28285400EAF753 /* SSignal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B0C1B28285400EAF753 /* SSignal+Mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AD61B28285400EAF753 /* SSignal+Mapping.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B0D1B28285400EAF753 /* SSignal+Mapping.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AD71B28285400EAF753 /* SSignal+Mapping.m */; }; - D0085B0E1B28285400EAF753 /* SSignal+Single.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AD81B28285400EAF753 /* SSignal+Single.m */; }; - D0085B0F1B28285400EAF753 /* SAtomic.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AD91B28285400EAF753 /* SAtomic.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B101B28285400EAF753 /* SAtomic.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085ADA1B28285400EAF753 /* SAtomic.m */; }; - D0085B111B28285400EAF753 /* SBag.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085ADB1B28285400EAF753 /* SBag.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B121B28285400EAF753 /* SBag.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085ADC1B28285400EAF753 /* SBag.m */; }; - D0085B131B28285400EAF753 /* SBlockDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085ADD1B28285400EAF753 /* SBlockDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B141B28285400EAF753 /* SBlockDisposable.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085ADE1B28285400EAF753 /* SBlockDisposable.m */; }; - D0085B151B28285400EAF753 /* SDisposableSet.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085ADF1B28285400EAF753 /* SDisposableSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B181B28285400EAF753 /* SMetaDisposable.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AE21B28285400EAF753 /* SMetaDisposable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B191B28285400EAF753 /* SSignal+Dispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AE31B28285400EAF753 /* SSignal+Dispatch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B1A1B28285400EAF753 /* SSignal+Multicast.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AE41B28285400EAF753 /* SSignal+Multicast.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B1B1B28285400EAF753 /* STimer.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085AE51B28285400EAF753 /* STimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B1C1B28285400EAF753 /* STimer.m in Sources */ = {isa = PBXBuildFile; fileRef = D0085AE61B28285400EAF753 /* STimer.m */; }; - D0085B271B282B9800EAF753 /* SwiftSignalKit.h in Headers */ = {isa = PBXBuildFile; fileRef = D0085B261B282B9800EAF753 /* SwiftSignalKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0085B2D1B282B9800EAF753 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0085B221B282B9800EAF753 /* SwiftSignalKit.framework */; }; - D0085B501B282BEE00EAF753 /* Signal_Timing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B3C1B282BEE00EAF753 /* Signal_Timing.swift */; }; - D0085B511B282BEE00EAF753 /* Signal_SideEffects.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B3D1B282BEE00EAF753 /* Signal_SideEffects.swift */; }; - D0085B521B282BEE00EAF753 /* Signal_Dispatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B3E1B282BEE00EAF753 /* Signal_Dispatch.swift */; }; - D0085B531B282BEE00EAF753 /* ThreadPool.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B3F1B282BEE00EAF753 /* ThreadPool.swift */; }; - D0085B541B282BEE00EAF753 /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B401B282BEE00EAF753 /* Timer.swift */; }; - D0085B551B282BEE00EAF753 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B411B282BEE00EAF753 /* Queue.swift */; }; - D0085B561B282BEE00EAF753 /* ValuePipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B421B282BEE00EAF753 /* ValuePipe.swift */; }; - D0085B571B282BEE00EAF753 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B431B282BEE00EAF753 /* Bag.swift */; }; - D0085B581B282BEE00EAF753 /* Signal_Take.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B441B282BEE00EAF753 /* Signal_Take.swift */; }; - D0085B591B282BEE00EAF753 /* Signal_Catch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B451B282BEE00EAF753 /* Signal_Catch.swift */; }; - D0085B5A1B282BEE00EAF753 /* Signal_Single.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B461B282BEE00EAF753 /* Signal_Single.swift */; }; - D0085B5B1B282BEE00EAF753 /* Signal_Meta.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B471B282BEE00EAF753 /* Signal_Meta.swift */; }; - D0085B5C1B282BEE00EAF753 /* Signal_Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B481B282BEE00EAF753 /* Signal_Combine.swift */; }; - D0085B5D1B282BEE00EAF753 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B491B282BEE00EAF753 /* Atomic.swift */; }; - D0085B5E1B282BEE00EAF753 /* Signal_Reduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B4A1B282BEE00EAF753 /* Signal_Reduce.swift */; }; - D0085B5F1B282BEE00EAF753 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B4B1B282BEE00EAF753 /* Signal.swift */; }; - D0085B601B282BEE00EAF753 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B4C1B282BEE00EAF753 /* Disposable.swift */; }; - D0085B611B282BEE00EAF753 /* Signal_Mapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B4D1B282BEE00EAF753 /* Signal_Mapping.swift */; }; - D0085B621B282BEE00EAF753 /* Subscriber.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B4E1B282BEE00EAF753 /* Subscriber.swift */; }; - D0085B661B282C2800EAF753 /* SwiftSignalKitFunctionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B631B282C2800EAF753 /* SwiftSignalKitFunctionsTests.swift */; }; - D0085B671B282C2800EAF753 /* DeallocatingObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B641B282C2800EAF753 /* DeallocatingObject.swift */; }; - D0085B681B282C2800EAF753 /* SwiftSignalKitBasicTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B651B282C2800EAF753 /* SwiftSignalKitBasicTests.swift */; }; - D02720B11CD0E005006F1506 /* PerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02720B01CD0E005006F1506 /* PerformanceTests.swift */; }; - D0445DE41A7C2CA500267924 /* SSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0445DD81A7C2CA500267924 /* SSignalKit.framework */; }; - D0445E571A7C3FB400267924 /* SDisposableTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D0445E561A7C3FB400267924 /* SDisposableTests.m */; }; - D0467D1820D7F7BC0055C28F /* Signal_Loop.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0467D1720D7F7BC0055C28F /* Signal_Loop.swift */; }; - D0467D1920D7F7BC0055C28F /* Signal_Loop.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0467D1720D7F7BC0055C28F /* Signal_Loop.swift */; }; - D053B4001F16881000E2D58A /* QueueLocalObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = D053B3FF1F16881000E2D58A /* QueueLocalObject.swift */; }; - D053B4011F16881000E2D58A /* QueueLocalObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = D053B3FF1F16881000E2D58A /* QueueLocalObject.swift */; }; - D05F09A81C9EF77100BB6F96 /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05F09A71C9EF77100BB6F96 /* Multicast.swift */; }; - D066BD0A1C7FE06700D7A576 /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = D066BD091C7FE06700D7A576 /* Lock.swift */; }; - D06F106C1A85561E00485185 /* SSignalBasicTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D06F106B1A85561E00485185 /* SSignalBasicTests.m */; }; - D06F10711A855E2D00485185 /* DeallocatingObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D06F10701A855E2D00485185 /* DeallocatingObject.m */; }; - D06F10731A85882000485185 /* SSignalPerformanceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D06F10721A85882000485185 /* SSignalPerformanceTests.m */; }; - D07A5CFD1BBDE6E400451791 /* Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07A5CFC1BBDE6E400451791 /* Promise.swift */; }; - D09FD73E1BA9BAB900FF0A4F /* SVariable.h in Headers */ = {isa = PBXBuildFile; fileRef = D09FD73C1BA9BAB900FF0A4F /* SVariable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D09FD73F1BA9BAB900FF0A4F /* SVariable.m in Sources */ = {isa = PBXBuildFile; fileRef = D09FD73D1BA9BAB900FF0A4F /* SVariable.m */; }; - D0B417F11D7DFA63004562A4 /* SwiftSignalKitMac.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B417EF1D7DFA63004562A4 /* SwiftSignalKitMac.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0B417F61D7DFAAB004562A4 /* Signal_Timing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B3C1B282BEE00EAF753 /* Signal_Timing.swift */; }; - D0B417F71D7DFAAB004562A4 /* Signal_SideEffects.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B3D1B282BEE00EAF753 /* Signal_SideEffects.swift */; }; - D0B417F81D7DFAAB004562A4 /* Signal_Dispatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B3E1B282BEE00EAF753 /* Signal_Dispatch.swift */; }; - D0B417F91D7DFAAB004562A4 /* ThreadPool.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B3F1B282BEE00EAF753 /* ThreadPool.swift */; }; - D0B417FA1D7DFAAB004562A4 /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B401B282BEE00EAF753 /* Timer.swift */; }; - D0B417FB1D7DFAAB004562A4 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B411B282BEE00EAF753 /* Queue.swift */; }; - D0B417FC1D7DFAAB004562A4 /* ValuePipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B421B282BEE00EAF753 /* ValuePipe.swift */; }; - D0B417FD1D7DFAAB004562A4 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B431B282BEE00EAF753 /* Bag.swift */; }; - D0B417FE1D7DFAAB004562A4 /* Signal_Take.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B441B282BEE00EAF753 /* Signal_Take.swift */; }; - D0B417FF1D7DFAAB004562A4 /* Signal_Catch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B451B282BEE00EAF753 /* Signal_Catch.swift */; }; - D0B418001D7DFAAB004562A4 /* Signal_Single.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B461B282BEE00EAF753 /* Signal_Single.swift */; }; - D0B418011D7DFAAB004562A4 /* Signal_Meta.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B471B282BEE00EAF753 /* Signal_Meta.swift */; }; - D0B418021D7DFAAB004562A4 /* Signal_Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B481B282BEE00EAF753 /* Signal_Combine.swift */; }; - D0B418031D7DFAAB004562A4 /* Signal_Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FC1A391CA3284F0056AE9A /* Signal_Merge.swift */; }; - D0B418041D7DFAAB004562A4 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B491B282BEE00EAF753 /* Atomic.swift */; }; - D0B418051D7DFAAB004562A4 /* Signal_Reduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B4A1B282BEE00EAF753 /* Signal_Reduce.swift */; }; - D0B418061D7DFAAB004562A4 /* Signal_Materialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CD17B11CC17C83007C5650 /* Signal_Materialize.swift */; }; - D0B418071D7DFAAB004562A4 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B4B1B282BEE00EAF753 /* Signal.swift */; }; - D0B418081D7DFAAB004562A4 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B4C1B282BEE00EAF753 /* Disposable.swift */; }; - D0B418091D7DFAAB004562A4 /* Signal_Mapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B4D1B282BEE00EAF753 /* Signal_Mapping.swift */; }; - D0B4180A1D7DFAAB004562A4 /* Subscriber.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0085B4E1B282BEE00EAF753 /* Subscriber.swift */; }; - D0B4180B1D7DFAAB004562A4 /* Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07A5CFC1BBDE6E400451791 /* Promise.swift */; }; - D0B4180C1D7DFAAB004562A4 /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05F09A71C9EF77100BB6F96 /* Multicast.swift */; }; - D0B4180D1D7DFAAB004562A4 /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = D066BD091C7FE06700D7A576 /* Lock.swift */; }; - D0CD17B21CC17C83007C5650 /* Signal_Materialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CD17B11CC17C83007C5650 /* Signal_Materialize.swift */; }; - D0FC1A3A1CA3284F0056AE9A /* Signal_Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FC1A391CA3284F0056AE9A /* Signal_Merge.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - D0085B2E1B282B9800EAF753 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D0445DCF1A7C2CA500267924 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D0085B211B282B9800EAF753; - remoteInfo = SwiftSignalKit; - }; - D0445DE51A7C2CA500267924 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D0445DCF1A7C2CA500267924 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D0445DD71A7C2CA500267924; - remoteInfo = SSignalKit; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - D0085AB11B28285400EAF753 /* SSignal+Timing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SSignal+Timing.m"; sourceTree = ""; }; - D0085AB21B28285400EAF753 /* SThreadPool.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SThreadPool.m; sourceTree = ""; }; - D0085AB31B28285400EAF753 /* SQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SQueue.m; sourceTree = ""; }; - D0085AB41B28285400EAF753 /* SSignal+Take.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SSignal+Take.m"; sourceTree = ""; }; - D0085AB51B28285400EAF753 /* SSignal+Meta.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SSignal+Meta.m"; sourceTree = ""; }; - D0085AB61B28285400EAF753 /* SSignal+Accumulate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SSignal+Accumulate.h"; sourceTree = ""; }; - D0085AB71B28285400EAF753 /* SSignal+Single.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SSignal+Single.h"; sourceTree = ""; }; - D0085AB81B28285400EAF753 /* SSignal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSignal.m; sourceTree = ""; }; - D0085AB91B28285400EAF753 /* SSignalKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSignalKit.h; sourceTree = ""; }; - D0085ABA1B28285400EAF753 /* SMulticastSignalManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SMulticastSignalManager.h; sourceTree = ""; }; - D0085ABB1B28285400EAF753 /* SMulticastSignalManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SMulticastSignalManager.m; sourceTree = ""; }; - D0085ABC1B28285400EAF753 /* SSignal+Combine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SSignal+Combine.h"; sourceTree = ""; }; - D0085ABD1B28285400EAF753 /* SSignal+Combine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SSignal+Combine.m"; sourceTree = ""; }; - D0085ABE1B28285400EAF753 /* SSignal+Pipe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SSignal+Pipe.h"; sourceTree = ""; }; - D0085ABF1B28285400EAF753 /* SSignal+Pipe.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SSignal+Pipe.m"; sourceTree = ""; }; - D0085AC01B28285400EAF753 /* SSignal+SideEffects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SSignal+SideEffects.h"; sourceTree = ""; }; - D0085AC11B28285400EAF753 /* SSignal+SideEffects.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SSignal+SideEffects.m"; sourceTree = ""; }; - D0085AC21B28285400EAF753 /* SSignal+Catch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SSignal+Catch.m"; sourceTree = ""; }; - D0085AC31B28285400EAF753 /* SSignal+Catch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SSignal+Catch.h"; sourceTree = ""; }; - D0085AC41B28285400EAF753 /* SSignal+Take.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SSignal+Take.h"; sourceTree = ""; }; - D0085AC51B28285400EAF753 /* SSignal+Accumulate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SSignal+Accumulate.m"; sourceTree = ""; }; - D0085AC61B28285400EAF753 /* SQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQueue.h; sourceTree = ""; }; - D0085AC71B28285400EAF753 /* SSignal+Meta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SSignal+Meta.h"; sourceTree = ""; }; - D0085AC81B28285400EAF753 /* SSignal+Timing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SSignal+Timing.h"; sourceTree = ""; }; - D0085AC91B28285400EAF753 /* SSubscriber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSubscriber.m; sourceTree = ""; }; - D0085ACA1B28285400EAF753 /* SSignal+Dispatch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SSignal+Dispatch.m"; sourceTree = ""; }; - D0085ACB1B28285400EAF753 /* SThreadPoolTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SThreadPoolTask.m; sourceTree = ""; }; - D0085ACC1B28285400EAF753 /* SThreadPoolQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SThreadPoolQueue.m; sourceTree = ""; }; - D0085ACD1B28285400EAF753 /* SThreadPoolQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SThreadPoolQueue.h; sourceTree = ""; }; - D0085ACE1B28285400EAF753 /* SThreadPool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SThreadPool.h; sourceTree = ""; }; - D0085ACF1B28285400EAF753 /* SThreadPoolTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SThreadPoolTask.h; sourceTree = ""; }; - D0085AD01B28285400EAF753 /* SDisposableSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDisposableSet.m; sourceTree = ""; }; - D0085AD11B28285400EAF753 /* SMetaDisposable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SMetaDisposable.m; sourceTree = ""; }; - D0085AD21B28285400EAF753 /* SSignal+Multicast.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SSignal+Multicast.m"; sourceTree = ""; }; - D0085AD31B28285400EAF753 /* SSubscriber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSubscriber.h; sourceTree = ""; }; - D0085AD41B28285400EAF753 /* SDisposable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDisposable.h; sourceTree = ""; }; - D0085AD51B28285400EAF753 /* SSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSignal.h; sourceTree = ""; }; - D0085AD61B28285400EAF753 /* SSignal+Mapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SSignal+Mapping.h"; sourceTree = ""; }; - D0085AD71B28285400EAF753 /* SSignal+Mapping.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SSignal+Mapping.m"; sourceTree = ""; }; - D0085AD81B28285400EAF753 /* SSignal+Single.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SSignal+Single.m"; sourceTree = ""; }; - D0085AD91B28285400EAF753 /* SAtomic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SAtomic.h; sourceTree = ""; }; - D0085ADA1B28285400EAF753 /* SAtomic.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SAtomic.m; sourceTree = ""; }; - D0085ADB1B28285400EAF753 /* SBag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBag.h; sourceTree = ""; }; - D0085ADC1B28285400EAF753 /* SBag.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBag.m; sourceTree = ""; }; - D0085ADD1B28285400EAF753 /* SBlockDisposable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBlockDisposable.h; sourceTree = ""; }; - D0085ADE1B28285400EAF753 /* SBlockDisposable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBlockDisposable.m; sourceTree = ""; }; - D0085ADF1B28285400EAF753 /* SDisposableSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDisposableSet.h; sourceTree = ""; }; - D0085AE21B28285400EAF753 /* SMetaDisposable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SMetaDisposable.h; sourceTree = ""; }; - D0085AE31B28285400EAF753 /* SSignal+Dispatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SSignal+Dispatch.h"; sourceTree = ""; }; - D0085AE41B28285400EAF753 /* SSignal+Multicast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SSignal+Multicast.h"; sourceTree = ""; }; - D0085AE51B28285400EAF753 /* STimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = STimer.h; sourceTree = ""; }; - D0085AE61B28285400EAF753 /* STimer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = STimer.m; sourceTree = ""; }; - D0085B221B282B9800EAF753 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0085B251B282B9800EAF753 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0085B261B282B9800EAF753 /* SwiftSignalKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftSignalKit.h; sourceTree = ""; }; - D0085B2C1B282B9800EAF753 /* SwiftSignalKitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftSignalKitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - D0085B321B282B9800EAF753 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0085B3B1B282BEE00EAF753 /* SwiftSignalKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SwiftSignalKit.h; sourceTree = ""; }; - D0085B3C1B282BEE00EAF753 /* Signal_Timing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal_Timing.swift; sourceTree = ""; }; - D0085B3D1B282BEE00EAF753 /* Signal_SideEffects.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal_SideEffects.swift; sourceTree = ""; }; - D0085B3E1B282BEE00EAF753 /* Signal_Dispatch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal_Dispatch.swift; sourceTree = ""; }; - D0085B3F1B282BEE00EAF753 /* ThreadPool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThreadPool.swift; sourceTree = ""; }; - D0085B401B282BEE00EAF753 /* Timer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Timer.swift; sourceTree = ""; }; - D0085B411B282BEE00EAF753 /* Queue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Queue.swift; sourceTree = ""; }; - D0085B421B282BEE00EAF753 /* ValuePipe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValuePipe.swift; sourceTree = ""; }; - D0085B431B282BEE00EAF753 /* Bag.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bag.swift; sourceTree = ""; }; - D0085B441B282BEE00EAF753 /* Signal_Take.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal_Take.swift; sourceTree = ""; }; - D0085B451B282BEE00EAF753 /* Signal_Catch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal_Catch.swift; sourceTree = ""; }; - D0085B461B282BEE00EAF753 /* Signal_Single.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal_Single.swift; sourceTree = ""; }; - D0085B471B282BEE00EAF753 /* Signal_Meta.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal_Meta.swift; sourceTree = ""; }; - D0085B481B282BEE00EAF753 /* Signal_Combine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal_Combine.swift; sourceTree = ""; }; - D0085B491B282BEE00EAF753 /* Atomic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = ""; }; - D0085B4A1B282BEE00EAF753 /* Signal_Reduce.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal_Reduce.swift; sourceTree = ""; }; - D0085B4B1B282BEE00EAF753 /* Signal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal.swift; sourceTree = ""; }; - D0085B4C1B282BEE00EAF753 /* Disposable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Disposable.swift; sourceTree = ""; }; - D0085B4D1B282BEE00EAF753 /* Signal_Mapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal_Mapping.swift; sourceTree = ""; }; - D0085B4E1B282BEE00EAF753 /* Subscriber.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Subscriber.swift; sourceTree = ""; }; - D0085B631B282C2800EAF753 /* SwiftSignalKitFunctionsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftSignalKitFunctionsTests.swift; sourceTree = ""; }; - D0085B641B282C2800EAF753 /* DeallocatingObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeallocatingObject.swift; sourceTree = ""; }; - D0085B651B282C2800EAF753 /* SwiftSignalKitBasicTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftSignalKitBasicTests.swift; sourceTree = ""; }; - D02720B01CD0E005006F1506 /* PerformanceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PerformanceTests.swift; sourceTree = ""; }; - D0445DD81A7C2CA500267924 /* SSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0445DDC1A7C2CA500267924 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0445DE31A7C2CA500267924 /* SSignalKitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SSignalKitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - D0445DE91A7C2CA500267924 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0445E561A7C3FB400267924 /* SDisposableTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDisposableTests.m; sourceTree = ""; }; - D0467D1720D7F7BC0055C28F /* Signal_Loop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Signal_Loop.swift; sourceTree = ""; }; - D053B3FF1F16881000E2D58A /* QueueLocalObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QueueLocalObject.swift; sourceTree = ""; }; - D05F09A71C9EF77100BB6F96 /* Multicast.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Multicast.swift; sourceTree = ""; }; - D066BD091C7FE06700D7A576 /* Lock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Lock.swift; sourceTree = ""; }; - D06F106B1A85561E00485185 /* SSignalBasicTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSignalBasicTests.m; sourceTree = ""; }; - D06F106F1A855E2D00485185 /* DeallocatingObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeallocatingObject.h; sourceTree = ""; }; - D06F10701A855E2D00485185 /* DeallocatingObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeallocatingObject.m; sourceTree = ""; }; - D06F10721A85882000485185 /* SSignalPerformanceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSignalPerformanceTests.m; sourceTree = ""; }; - D07A5CFC1BBDE6E400451791 /* Promise.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Promise.swift; sourceTree = ""; }; - D09FD73C1BA9BAB900FF0A4F /* SVariable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVariable.h; sourceTree = ""; }; - D09FD73D1BA9BAB900FF0A4F /* SVariable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SVariable.m; sourceTree = ""; }; - D0B417ED1D7DFA63004562A4 /* SwiftSignalKitMac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftSignalKitMac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0B417EF1D7DFA63004562A4 /* SwiftSignalKitMac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftSignalKitMac.h; sourceTree = ""; }; - D0B417F01D7DFA63004562A4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0CD17B11CC17C83007C5650 /* Signal_Materialize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal_Materialize.swift; sourceTree = ""; }; - D0FC1A391CA3284F0056AE9A /* Signal_Merge.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal_Merge.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - D0085B1E1B282B9800EAF753 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0085B291B282B9800EAF753 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D0085B2D1B282B9800EAF753 /* SwiftSignalKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0445DD41A7C2CA500267924 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0445DE01A7C2CA500267924 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D0445DE41A7C2CA500267924 /* SSignalKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0B417E91D7DFA63004562A4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - D0085B231B282B9800EAF753 /* SwiftSignalKit */ = { - isa = PBXGroup; - children = ( - D0085B3B1B282BEE00EAF753 /* SwiftSignalKit.h */, - D0085B3C1B282BEE00EAF753 /* Signal_Timing.swift */, - D0085B3D1B282BEE00EAF753 /* Signal_SideEffects.swift */, - D0085B3E1B282BEE00EAF753 /* Signal_Dispatch.swift */, - D0085B3F1B282BEE00EAF753 /* ThreadPool.swift */, - D0085B401B282BEE00EAF753 /* Timer.swift */, - D0085B411B282BEE00EAF753 /* Queue.swift */, - D0085B421B282BEE00EAF753 /* ValuePipe.swift */, - D0085B431B282BEE00EAF753 /* Bag.swift */, - D0085B441B282BEE00EAF753 /* Signal_Take.swift */, - D0085B451B282BEE00EAF753 /* Signal_Catch.swift */, - D0085B461B282BEE00EAF753 /* Signal_Single.swift */, - D0085B471B282BEE00EAF753 /* Signal_Meta.swift */, - D0085B481B282BEE00EAF753 /* Signal_Combine.swift */, - D0FC1A391CA3284F0056AE9A /* Signal_Merge.swift */, - D0085B491B282BEE00EAF753 /* Atomic.swift */, - D0085B4A1B282BEE00EAF753 /* Signal_Reduce.swift */, - D0CD17B11CC17C83007C5650 /* Signal_Materialize.swift */, - D0085B4B1B282BEE00EAF753 /* Signal.swift */, - D0085B4C1B282BEE00EAF753 /* Disposable.swift */, - D0085B4D1B282BEE00EAF753 /* Signal_Mapping.swift */, - D0467D1720D7F7BC0055C28F /* Signal_Loop.swift */, - D0085B4E1B282BEE00EAF753 /* Subscriber.swift */, - D07A5CFC1BBDE6E400451791 /* Promise.swift */, - D05F09A71C9EF77100BB6F96 /* Multicast.swift */, - D066BD091C7FE06700D7A576 /* Lock.swift */, - D053B3FF1F16881000E2D58A /* QueueLocalObject.swift */, - D0085B261B282B9800EAF753 /* SwiftSignalKit.h */, - D0085B241B282B9800EAF753 /* Supporting Files */, - ); - path = SwiftSignalKit; - sourceTree = ""; - }; - D0085B241B282B9800EAF753 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D0085B251B282B9800EAF753 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D0085B301B282B9800EAF753 /* SwiftSignalKitTests */ = { - isa = PBXGroup; - children = ( - D0085B631B282C2800EAF753 /* SwiftSignalKitFunctionsTests.swift */, - D0085B641B282C2800EAF753 /* DeallocatingObject.swift */, - D0085B651B282C2800EAF753 /* SwiftSignalKitBasicTests.swift */, - D02720B01CD0E005006F1506 /* PerformanceTests.swift */, - D0085B311B282B9800EAF753 /* Supporting Files */, - ); - path = SwiftSignalKitTests; - sourceTree = ""; - }; - D0085B311B282B9800EAF753 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D0085B321B282B9800EAF753 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D0445DCE1A7C2CA500267924 = { - isa = PBXGroup; - children = ( - D0445DDA1A7C2CA500267924 /* SSignalKit */, - D0445DE71A7C2CA500267924 /* SSignalKitTests */, - D0085B231B282B9800EAF753 /* SwiftSignalKit */, - D0085B301B282B9800EAF753 /* SwiftSignalKitTests */, - D0B417EE1D7DFA63004562A4 /* SwiftSignalKitMac */, - D0445DD91A7C2CA500267924 /* Products */, - ); - sourceTree = ""; - }; - D0445DD91A7C2CA500267924 /* Products */ = { - isa = PBXGroup; - children = ( - D0445DD81A7C2CA500267924 /* SSignalKit.framework */, - D0445DE31A7C2CA500267924 /* SSignalKitTests.xctest */, - D0085B221B282B9800EAF753 /* SwiftSignalKit.framework */, - D0085B2C1B282B9800EAF753 /* SwiftSignalKitTests.xctest */, - D0B417ED1D7DFA63004562A4 /* SwiftSignalKitMac.framework */, - ); - name = Products; - sourceTree = ""; - }; - D0445DDA1A7C2CA500267924 /* SSignalKit */ = { - isa = PBXGroup; - children = ( - D0085AD91B28285400EAF753 /* SAtomic.h */, - D0085ADA1B28285400EAF753 /* SAtomic.m */, - D0085ADB1B28285400EAF753 /* SBag.h */, - D0085ADC1B28285400EAF753 /* SBag.m */, - D0085AD31B28285400EAF753 /* SSubscriber.h */, - D0085AC91B28285400EAF753 /* SSubscriber.m */, - D0085AD41B28285400EAF753 /* SDisposable.h */, - D0085ADF1B28285400EAF753 /* SDisposableSet.h */, - D0085AD01B28285400EAF753 /* SDisposableSet.m */, - D0085AE21B28285400EAF753 /* SMetaDisposable.h */, - D0085AD11B28285400EAF753 /* SMetaDisposable.m */, - D0085ADD1B28285400EAF753 /* SBlockDisposable.h */, - D0085ADE1B28285400EAF753 /* SBlockDisposable.m */, - D0085ACE1B28285400EAF753 /* SThreadPool.h */, - D0085AB21B28285400EAF753 /* SThreadPool.m */, - D0085ACF1B28285400EAF753 /* SThreadPoolTask.h */, - D0085ACB1B28285400EAF753 /* SThreadPoolTask.m */, - D0085ACD1B28285400EAF753 /* SThreadPoolQueue.h */, - D0085ACC1B28285400EAF753 /* SThreadPoolQueue.m */, - D0085AC61B28285400EAF753 /* SQueue.h */, - D0085AB31B28285400EAF753 /* SQueue.m */, - D0085AE51B28285400EAF753 /* STimer.h */, - D0085AE61B28285400EAF753 /* STimer.m */, - D0085AD51B28285400EAF753 /* SSignal.h */, - D0085AB81B28285400EAF753 /* SSignal.m */, - D0085AB71B28285400EAF753 /* SSignal+Single.h */, - D0085AD81B28285400EAF753 /* SSignal+Single.m */, - D0085AD61B28285400EAF753 /* SSignal+Mapping.h */, - D0085AD71B28285400EAF753 /* SSignal+Mapping.m */, - D0085ABC1B28285400EAF753 /* SSignal+Combine.h */, - D0085ABD1B28285400EAF753 /* SSignal+Combine.m */, - D0085AB61B28285400EAF753 /* SSignal+Accumulate.h */, - D0085AC51B28285400EAF753 /* SSignal+Accumulate.m */, - D0085AC01B28285400EAF753 /* SSignal+SideEffects.h */, - D0085AC11B28285400EAF753 /* SSignal+SideEffects.m */, - D0085AC41B28285400EAF753 /* SSignal+Take.h */, - D0085AB41B28285400EAF753 /* SSignal+Take.m */, - D0085AC81B28285400EAF753 /* SSignal+Timing.h */, - D0085AB11B28285400EAF753 /* SSignal+Timing.m */, - D0085AC71B28285400EAF753 /* SSignal+Meta.h */, - D0085AB51B28285400EAF753 /* SSignal+Meta.m */, - D0085ABE1B28285400EAF753 /* SSignal+Pipe.h */, - D0085ABF1B28285400EAF753 /* SSignal+Pipe.m */, - D0085AC31B28285400EAF753 /* SSignal+Catch.h */, - D0085AC21B28285400EAF753 /* SSignal+Catch.m */, - D0085AE31B28285400EAF753 /* SSignal+Dispatch.h */, - D0085ACA1B28285400EAF753 /* SSignal+Dispatch.m */, - D0085AE41B28285400EAF753 /* SSignal+Multicast.h */, - D0085AD21B28285400EAF753 /* SSignal+Multicast.m */, - D0085ABA1B28285400EAF753 /* SMulticastSignalManager.h */, - D0085ABB1B28285400EAF753 /* SMulticastSignalManager.m */, - D09FD73C1BA9BAB900FF0A4F /* SVariable.h */, - D09FD73D1BA9BAB900FF0A4F /* SVariable.m */, - D0085AB91B28285400EAF753 /* SSignalKit.h */, - D0445DDB1A7C2CA500267924 /* Supporting Files */, - ); - path = SSignalKit; - sourceTree = ""; - }; - D0445DDB1A7C2CA500267924 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D0445DDC1A7C2CA500267924 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D0445DE71A7C2CA500267924 /* SSignalKitTests */ = { - isa = PBXGroup; - children = ( - D06F106F1A855E2D00485185 /* DeallocatingObject.h */, - D06F10701A855E2D00485185 /* DeallocatingObject.m */, - D0445DE81A7C2CA500267924 /* Supporting Files */, - D0445E561A7C3FB400267924 /* SDisposableTests.m */, - D06F106B1A85561E00485185 /* SSignalBasicTests.m */, - D06F10721A85882000485185 /* SSignalPerformanceTests.m */, - ); - path = SSignalKitTests; - sourceTree = ""; - }; - D0445DE81A7C2CA500267924 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D0445DE91A7C2CA500267924 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D0B417EE1D7DFA63004562A4 /* SwiftSignalKitMac */ = { - isa = PBXGroup; - children = ( - D0B417EF1D7DFA63004562A4 /* SwiftSignalKitMac.h */, - D0B417F01D7DFA63004562A4 /* Info.plist */, - ); - path = SwiftSignalKitMac; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - D0085B1F1B282B9800EAF753 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D0085B271B282B9800EAF753 /* SwiftSignalKit.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0445DD51A7C2CA500267924 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D0085AF61B28285400EAF753 /* SSignal+SideEffects.h in Headers */, - D0085AFD1B28285400EAF753 /* SSignal+Meta.h in Headers */, - D09FD73E1BA9BAB900FF0A4F /* SVariable.h in Headers */, - D0085AFE1B28285400EAF753 /* SSignal+Timing.h in Headers */, - D0085B0A1B28285400EAF753 /* SDisposable.h in Headers */, - D0085B111B28285400EAF753 /* SBag.h in Headers */, - D0085AF21B28285400EAF753 /* SSignal+Combine.h in Headers */, - D0085AFA1B28285400EAF753 /* SSignal+Take.h in Headers */, - D0085B0B1B28285400EAF753 /* SSignal.h in Headers */, - D0085AED1B28285400EAF753 /* SSignal+Single.h in Headers */, - D0085AF01B28285400EAF753 /* SMulticastSignalManager.h in Headers */, - D0085AF91B28285400EAF753 /* SSignal+Catch.h in Headers */, - D0085B151B28285400EAF753 /* SDisposableSet.h in Headers */, - D0085B0C1B28285400EAF753 /* SSignal+Mapping.h in Headers */, - D0085AFC1B28285400EAF753 /* SQueue.h in Headers */, - D0085B031B28285400EAF753 /* SThreadPoolQueue.h in Headers */, - D0085B091B28285400EAF753 /* SSubscriber.h in Headers */, - D0085B041B28285400EAF753 /* SThreadPool.h in Headers */, - D0085AEC1B28285400EAF753 /* SSignal+Accumulate.h in Headers */, - D0085B1B1B28285400EAF753 /* STimer.h in Headers */, - D0085AF41B28285400EAF753 /* SSignal+Pipe.h in Headers */, - D0085B181B28285400EAF753 /* SMetaDisposable.h in Headers */, - D0085B051B28285400EAF753 /* SThreadPoolTask.h in Headers */, - D0085B1A1B28285400EAF753 /* SSignal+Multicast.h in Headers */, - D0085B191B28285400EAF753 /* SSignal+Dispatch.h in Headers */, - D0085AEF1B28285400EAF753 /* SSignalKit.h in Headers */, - D0085B131B28285400EAF753 /* SBlockDisposable.h in Headers */, - D0085B0F1B28285400EAF753 /* SAtomic.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0B417EA1D7DFA63004562A4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D0B417F11D7DFA63004562A4 /* SwiftSignalKitMac.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - D0085B211B282B9800EAF753 /* SwiftSignalKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0085B351B282B9800EAF753 /* Build configuration list for PBXNativeTarget "SwiftSignalKit" */; - buildPhases = ( - D0085B1D1B282B9800EAF753 /* Sources */, - D0085B1E1B282B9800EAF753 /* Frameworks */, - D0085B1F1B282B9800EAF753 /* Headers */, - D0085B201B282B9800EAF753 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SwiftSignalKit; - productName = SwiftSignalKit; - productReference = D0085B221B282B9800EAF753 /* SwiftSignalKit.framework */; - productType = "com.apple.product-type.framework"; - }; - D0085B2B1B282B9800EAF753 /* SwiftSignalKitTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0085B381B282B9800EAF753 /* Build configuration list for PBXNativeTarget "SwiftSignalKitTests" */; - buildPhases = ( - D0085B281B282B9800EAF753 /* Sources */, - D0085B291B282B9800EAF753 /* Frameworks */, - D0085B2A1B282B9800EAF753 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - D0085B2F1B282B9800EAF753 /* PBXTargetDependency */, - ); - name = SwiftSignalKitTests; - productName = SwiftSignalKitTests; - productReference = D0085B2C1B282B9800EAF753 /* SwiftSignalKitTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - D0445DD71A7C2CA500267924 /* SSignalKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0445DEE1A7C2CA500267924 /* Build configuration list for PBXNativeTarget "SSignalKit" */; - buildPhases = ( - D0445DD31A7C2CA500267924 /* Sources */, - D0445DD41A7C2CA500267924 /* Frameworks */, - D0445DD51A7C2CA500267924 /* Headers */, - D0445DD61A7C2CA500267924 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SSignalKit; - productName = SSignalKit; - productReference = D0445DD81A7C2CA500267924 /* SSignalKit.framework */; - productType = "com.apple.product-type.framework"; - }; - D0445DE21A7C2CA500267924 /* SSignalKitTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0445DF11A7C2CA500267924 /* Build configuration list for PBXNativeTarget "SSignalKitTests" */; - buildPhases = ( - D0445DDF1A7C2CA500267924 /* Sources */, - D0445DE01A7C2CA500267924 /* Frameworks */, - D0445DE11A7C2CA500267924 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - D0445DE61A7C2CA500267924 /* PBXTargetDependency */, - ); - name = SSignalKitTests; - productName = SSignalKitTests; - productReference = D0445DE31A7C2CA500267924 /* SSignalKitTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - D0B417EC1D7DFA63004562A4 /* SwiftSignalKitMac */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0B417F21D7DFA63004562A4 /* Build configuration list for PBXNativeTarget "SwiftSignalKitMac" */; - buildPhases = ( - D0B417E81D7DFA63004562A4 /* Sources */, - D0B417E91D7DFA63004562A4 /* Frameworks */, - D0B417EA1D7DFA63004562A4 /* Headers */, - D0B417EB1D7DFA63004562A4 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SwiftSignalKitMac; - productName = SwiftSignalKitMac; - productReference = D0B417ED1D7DFA63004562A4 /* SwiftSignalKitMac.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D0445DCF1A7C2CA500267924 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftMigration = 0700; - LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0800; - ORGANIZATIONNAME = Telegram; - TargetAttributes = { - D0085B211B282B9800EAF753 = { - CreatedOnToolsVersion = 6.3.1; - ProvisioningStyle = Manual; - }; - D0085B2B1B282B9800EAF753 = { - CreatedOnToolsVersion = 6.3.1; - }; - D0445DD71A7C2CA500267924 = { - CreatedOnToolsVersion = 6.1.1; - ProvisioningStyle = Manual; - }; - D0445DE21A7C2CA500267924 = { - CreatedOnToolsVersion = 6.1.1; - }; - D0B417EC1D7DFA63004562A4 = { - CreatedOnToolsVersion = 8.0; - ProvisioningStyle = Manual; - }; - }; - }; - buildConfigurationList = D0445DD21A7C2CA500267924 /* Build configuration list for PBXProject "SSignalKit_Xcode" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - en, - ); - mainGroup = D0445DCE1A7C2CA500267924; - productRefGroup = D0445DD91A7C2CA500267924 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - D0445DD71A7C2CA500267924 /* SSignalKit */, - D0445DE21A7C2CA500267924 /* SSignalKitTests */, - D0085B211B282B9800EAF753 /* SwiftSignalKit */, - D0085B2B1B282B9800EAF753 /* SwiftSignalKitTests */, - D0B417EC1D7DFA63004562A4 /* SwiftSignalKitMac */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - D0085B201B282B9800EAF753 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0085B2A1B282B9800EAF753 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0445DD61A7C2CA500267924 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0445DE11A7C2CA500267924 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0B417EB1D7DFA63004562A4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - D0085B1D1B282B9800EAF753 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D0085B521B282BEE00EAF753 /* Signal_Dispatch.swift in Sources */, - D0085B561B282BEE00EAF753 /* ValuePipe.swift in Sources */, - D0085B551B282BEE00EAF753 /* Queue.swift in Sources */, - D0085B591B282BEE00EAF753 /* Signal_Catch.swift in Sources */, - D0085B601B282BEE00EAF753 /* Disposable.swift in Sources */, - D0FC1A3A1CA3284F0056AE9A /* Signal_Merge.swift in Sources */, - D0085B531B282BEE00EAF753 /* ThreadPool.swift in Sources */, - D0CD17B21CC17C83007C5650 /* Signal_Materialize.swift in Sources */, - D0085B5F1B282BEE00EAF753 /* Signal.swift in Sources */, - D07A5CFD1BBDE6E400451791 /* Promise.swift in Sources */, - D0085B5E1B282BEE00EAF753 /* Signal_Reduce.swift in Sources */, - D0085B621B282BEE00EAF753 /* Subscriber.swift in Sources */, - D066BD0A1C7FE06700D7A576 /* Lock.swift in Sources */, - D0085B581B282BEE00EAF753 /* Signal_Take.swift in Sources */, - D05F09A81C9EF77100BB6F96 /* Multicast.swift in Sources */, - D0085B501B282BEE00EAF753 /* Signal_Timing.swift in Sources */, - D0085B541B282BEE00EAF753 /* Timer.swift in Sources */, - D0085B5B1B282BEE00EAF753 /* Signal_Meta.swift in Sources */, - D0085B571B282BEE00EAF753 /* Bag.swift in Sources */, - D0467D1820D7F7BC0055C28F /* Signal_Loop.swift in Sources */, - D0085B5A1B282BEE00EAF753 /* Signal_Single.swift in Sources */, - D053B4001F16881000E2D58A /* QueueLocalObject.swift in Sources */, - D0085B611B282BEE00EAF753 /* Signal_Mapping.swift in Sources */, - D0085B5C1B282BEE00EAF753 /* Signal_Combine.swift in Sources */, - D0085B5D1B282BEE00EAF753 /* Atomic.swift in Sources */, - D0085B511B282BEE00EAF753 /* Signal_SideEffects.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0085B281B282B9800EAF753 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D0085B671B282C2800EAF753 /* DeallocatingObject.swift in Sources */, - D0085B681B282C2800EAF753 /* SwiftSignalKitBasicTests.swift in Sources */, - D02720B11CD0E005006F1506 /* PerformanceTests.swift in Sources */, - D0085B661B282C2800EAF753 /* SwiftSignalKitFunctionsTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0445DD31A7C2CA500267924 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D0085AE91B28285400EAF753 /* SQueue.m in Sources */, - D09FD73F1BA9BAB900FF0A4F /* SVariable.m in Sources */, - D0085B141B28285400EAF753 /* SBlockDisposable.m in Sources */, - D0085B001B28285400EAF753 /* SSignal+Dispatch.m in Sources */, - D0085AE71B28285400EAF753 /* SSignal+Timing.m in Sources */, - D0085AEB1B28285400EAF753 /* SSignal+Meta.m in Sources */, - D0085B0D1B28285400EAF753 /* SSignal+Mapping.m in Sources */, - D0085AF81B28285400EAF753 /* SSignal+Catch.m in Sources */, - D0085AF11B28285400EAF753 /* SMulticastSignalManager.m in Sources */, - D0085B071B28285400EAF753 /* SMetaDisposable.m in Sources */, - D0085B101B28285400EAF753 /* SAtomic.m in Sources */, - D0085B121B28285400EAF753 /* SBag.m in Sources */, - D0085AEE1B28285400EAF753 /* SSignal.m in Sources */, - D0085B021B28285400EAF753 /* SThreadPoolQueue.m in Sources */, - D0085AFF1B28285400EAF753 /* SSubscriber.m in Sources */, - D0085B081B28285400EAF753 /* SSignal+Multicast.m in Sources */, - D0085B1C1B28285400EAF753 /* STimer.m in Sources */, - D0085AF51B28285400EAF753 /* SSignal+Pipe.m in Sources */, - D0085AF31B28285400EAF753 /* SSignal+Combine.m in Sources */, - D0085AF71B28285400EAF753 /* SSignal+SideEffects.m in Sources */, - D0085AEA1B28285400EAF753 /* SSignal+Take.m in Sources */, - D0085B061B28285400EAF753 /* SDisposableSet.m in Sources */, - D0085AE81B28285400EAF753 /* SThreadPool.m in Sources */, - D0085B011B28285400EAF753 /* SThreadPoolTask.m in Sources */, - D0085B0E1B28285400EAF753 /* SSignal+Single.m in Sources */, - D0085AFB1B28285400EAF753 /* SSignal+Accumulate.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0445DDF1A7C2CA500267924 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D06F106C1A85561E00485185 /* SSignalBasicTests.m in Sources */, - D06F10711A855E2D00485185 /* DeallocatingObject.m in Sources */, - D06F10731A85882000485185 /* SSignalPerformanceTests.m in Sources */, - D0445E571A7C3FB400267924 /* SDisposableTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0B417E81D7DFA63004562A4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D0B417F61D7DFAAB004562A4 /* Signal_Timing.swift in Sources */, - D0B417F71D7DFAAB004562A4 /* Signal_SideEffects.swift in Sources */, - D0B417F81D7DFAAB004562A4 /* Signal_Dispatch.swift in Sources */, - D0B417F91D7DFAAB004562A4 /* ThreadPool.swift in Sources */, - D0B417FA1D7DFAAB004562A4 /* Timer.swift in Sources */, - D0B417FB1D7DFAAB004562A4 /* Queue.swift in Sources */, - D0B417FC1D7DFAAB004562A4 /* ValuePipe.swift in Sources */, - D0B417FD1D7DFAAB004562A4 /* Bag.swift in Sources */, - D0B417FE1D7DFAAB004562A4 /* Signal_Take.swift in Sources */, - D0B417FF1D7DFAAB004562A4 /* Signal_Catch.swift in Sources */, - D0B418001D7DFAAB004562A4 /* Signal_Single.swift in Sources */, - D0B418011D7DFAAB004562A4 /* Signal_Meta.swift in Sources */, - D0B418021D7DFAAB004562A4 /* Signal_Combine.swift in Sources */, - D0B418031D7DFAAB004562A4 /* Signal_Merge.swift in Sources */, - D0B418041D7DFAAB004562A4 /* Atomic.swift in Sources */, - D0B418051D7DFAAB004562A4 /* Signal_Reduce.swift in Sources */, - D0B418061D7DFAAB004562A4 /* Signal_Materialize.swift in Sources */, - D0B418071D7DFAAB004562A4 /* Signal.swift in Sources */, - D0B418081D7DFAAB004562A4 /* Disposable.swift in Sources */, - D0467D1920D7F7BC0055C28F /* Signal_Loop.swift in Sources */, - D0B418091D7DFAAB004562A4 /* Signal_Mapping.swift in Sources */, - D053B4011F16881000E2D58A /* QueueLocalObject.swift in Sources */, - D0B4180A1D7DFAAB004562A4 /* Subscriber.swift in Sources */, - D0B4180B1D7DFAAB004562A4 /* Promise.swift in Sources */, - D0B4180C1D7DFAAB004562A4 /* Multicast.swift in Sources */, - D0B4180D1D7DFAAB004562A4 /* Lock.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - D0085B2F1B282B9800EAF753 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D0085B211B282B9800EAF753 /* SwiftSignalKit */; - targetProxy = D0085B2E1B282B9800EAF753 /* PBXContainerItemProxy */; - }; - D0445DE61A7C2CA500267924 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D0445DD71A7C2CA500267924 /* SSignalKit */; - targetProxy = D0445DE51A7C2CA500267924 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - D0085B361B282B9800EAF753 /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SwiftSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_SWIFT_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = none; - SWIFT_VERSION = 5.0; - }; - name = DebugHockeyapp; - }; - D0085B371B282B9800EAF753 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = SwiftSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_SWIFT_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_REFLECTION_METADATA_LEVEL = none; - SWIFT_VERSION = 5.0; - }; - name = ReleaseHockeyapp; - }; - D0085B391B282B9800EAF753 /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SwiftSignalKitTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; - }; - name = DebugHockeyapp; - }; - D0085B3A1B282B9800EAF753 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = SwiftSignalKitTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - }; - name = ReleaseHockeyapp; - }; - D021D502219CB1D90064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.1; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugFork; - }; - D021D503219CB1D90064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - INFOPLIST_FILE = SSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - }; - name = DebugFork; - }; - D021D504219CB1D90064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SSignalKitTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-framework", - XCTest, - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugFork; - }; - D021D505219CB1D90064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SwiftSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_SWIFT_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = none; - SWIFT_VERSION = 5.0; - }; - name = DebugFork; - }; - D021D506219CB1D90064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SwiftSignalKitTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; - }; - name = DebugFork; - }; - D021D507219CB1D90064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = SwiftSignalKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.SwiftSignalKitMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = DebugFork; - }; - D0364D5522B3E38E002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.1; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = HockeyappMacAlpha; - }; - D0364D5622B3E38E002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - INFOPLIST_FILE = SSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - }; - name = HockeyappMacAlpha; - }; - D0364D5722B3E38E002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SSignalKitTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-framework", - XCTest, - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = HockeyappMacAlpha; - }; - D0364D5822B3E38E002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SwiftSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_SWIFT_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = none; - SWIFT_VERSION = 5.0; - }; - name = HockeyappMacAlpha; - }; - D0364D5922B3E38E002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SwiftSignalKitTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; - }; - name = HockeyappMacAlpha; - }; - D0364D5A22B3E38E002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = SwiftSignalKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.SwiftSignalKitMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = HockeyappMacAlpha; - }; - D0445DEC1A7C2CA500267924 /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.1; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugHockeyapp; - }; - D0445DED1A7C2CA500267924 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.1; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyapp; - }; - D0445DEF1A7C2CA500267924 /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - INFOPLIST_FILE = SSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - }; - name = DebugHockeyapp; - }; - D0445DF01A7C2CA500267924 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - INFOPLIST_FILE = SSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - }; - name = ReleaseHockeyapp; - }; - D0445DF21A7C2CA500267924 /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SSignalKitTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-framework", - XCTest, - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugHockeyapp; - }; - D0445DF31A7C2CA500267924 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - INFOPLIST_FILE = SSignalKitTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-framework", - XCTest, - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseHockeyapp; - }; - D086A5741CC0117500F08284 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.1; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStore; - }; - D086A5751CC0117500F08284 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - INFOPLIST_FILE = SSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - }; - name = ReleaseAppStore; - }; - D086A5761CC0117500F08284 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - INFOPLIST_FILE = SSignalKitTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-framework", - XCTest, - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseAppStore; - }; - D086A5771CC0117500F08284 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = SwiftSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_SWIFT_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_REFLECTION_METADATA_LEVEL = none; - SWIFT_VERSION = 5.0; - }; - name = ReleaseAppStore; - }; - D086A5781CC0117500F08284 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = SwiftSignalKitTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; - }; - name = ReleaseAppStore; - }; - D0924FE21FE52C0A003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.1; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyappInternal; - }; - D0924FE31FE52C0A003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - INFOPLIST_FILE = SSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - }; - name = ReleaseHockeyappInternal; - }; - D0924FE41FE52C0A003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - INFOPLIST_FILE = SSignalKitTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-framework", - XCTest, - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseHockeyappInternal; - }; - D0924FE51FE52C0A003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = SwiftSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_SWIFT_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_REFLECTION_METADATA_LEVEL = none; - SWIFT_VERSION = 5.0; - }; - name = ReleaseHockeyappInternal; - }; - D0924FE61FE52C0A003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = SwiftSignalKitTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - }; - name = ReleaseHockeyappInternal; - }; - D0924FE71FE52C0A003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = SwiftSignalKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.SwiftSignalKitMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = ReleaseHockeyappInternal; - }; - D0ADF92E212B3AD400310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.1; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStoreLLC; - }; - D0ADF92F212B3AD400310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - INFOPLIST_FILE = SSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - }; - name = DebugAppStoreLLC; - }; - D0ADF930212B3AD400310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SSignalKitTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-framework", - XCTest, - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugAppStoreLLC; - }; - D0ADF931212B3AD400310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SwiftSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_SWIFT_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = none; - SWIFT_VERSION = 5.0; - }; - name = DebugAppStoreLLC; - }; - D0ADF932212B3AD400310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SwiftSignalKitTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; - }; - name = DebugAppStoreLLC; - }; - D0ADF933212B3AD400310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = SwiftSignalKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.SwiftSignalKitMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = DebugAppStoreLLC; - }; - D0B417F31D7DFA63004562A4 /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = SwiftSignalKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.SwiftSignalKitMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = DebugHockeyapp; - }; - D0B417F41D7DFA63004562A4 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = SwiftSignalKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.SwiftSignalKitMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = ReleaseHockeyapp; - }; - D0B417F51D7DFA63004562A4 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = SwiftSignalKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.SwiftSignalKitMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = ReleaseAppStore; - }; - D0CE6EEF213DC30100BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.1; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EF0213DC30100BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - INFOPLIST_FILE = SSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EF1213DC30100BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - INFOPLIST_FILE = SSignalKitTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-framework", - XCTest, - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EF2213DC30100BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = SwiftSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_SWIFT_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_REFLECTION_METADATA_LEVEL = none; - SWIFT_VERSION = 5.0; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EF3213DC30100BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = SwiftSignalKitTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EF4213DC30100BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = SwiftSignalKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.SwiftSignalKitMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = ReleaseAppStoreLLC; - }; - D0DB57B61E5C4B7A0071854C /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.1; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStore; - }; - D0DB57B71E5C4B7A0071854C /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - INFOPLIST_FILE = SSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/; - SKIP_INSTALL = YES; - }; - name = DebugAppStore; - }; - D0DB57B81E5C4B7A0071854C /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SSignalKitTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-framework", - XCTest, - "-ObjC", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugAppStore; - }; - D0DB57B91E5C4B7A0071854C /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - ARCHS = "$(ARCHS_STANDARD)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SwiftSignalKit/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_SWIFT_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = none; - SWIFT_VERSION = 5.0; - }; - name = DebugAppStore; - }; - D0DB57BA1E5C4B7A0071854C /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = SwiftSignalKitTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; - }; - name = DebugAppStore; - }; - D0DB57BB1E5C4B7A0071854C /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = SwiftSignalKitMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.SwiftSignalKitMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = DebugAppStore; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - D0085B351B282B9800EAF753 /* Build configuration list for PBXNativeTarget "SwiftSignalKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0085B361B282B9800EAF753 /* DebugHockeyapp */, - D0364D5822B3E38E002A6EF0 /* HockeyappMacAlpha */, - D021D505219CB1D90064BEBA /* DebugFork */, - D0DB57B91E5C4B7A0071854C /* DebugAppStore */, - D0ADF931212B3AD400310BBC /* DebugAppStoreLLC */, - D0085B371B282B9800EAF753 /* ReleaseHockeyapp */, - D0924FE51FE52C0A003F693F /* ReleaseHockeyappInternal */, - D086A5771CC0117500F08284 /* ReleaseAppStore */, - D0CE6EF2213DC30100BCD44B /* ReleaseAppStoreLLC */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseHockeyapp; - }; - D0085B381B282B9800EAF753 /* Build configuration list for PBXNativeTarget "SwiftSignalKitTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0085B391B282B9800EAF753 /* DebugHockeyapp */, - D0364D5922B3E38E002A6EF0 /* HockeyappMacAlpha */, - D021D506219CB1D90064BEBA /* DebugFork */, - D0DB57BA1E5C4B7A0071854C /* DebugAppStore */, - D0ADF932212B3AD400310BBC /* DebugAppStoreLLC */, - D0085B3A1B282B9800EAF753 /* ReleaseHockeyapp */, - D0924FE61FE52C0A003F693F /* ReleaseHockeyappInternal */, - D086A5781CC0117500F08284 /* ReleaseAppStore */, - D0CE6EF3213DC30100BCD44B /* ReleaseAppStoreLLC */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseHockeyapp; - }; - D0445DD21A7C2CA500267924 /* Build configuration list for PBXProject "SSignalKit_Xcode" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0445DEC1A7C2CA500267924 /* DebugHockeyapp */, - D0364D5522B3E38E002A6EF0 /* HockeyappMacAlpha */, - D021D502219CB1D90064BEBA /* DebugFork */, - D0DB57B61E5C4B7A0071854C /* DebugAppStore */, - D0ADF92E212B3AD400310BBC /* DebugAppStoreLLC */, - D0445DED1A7C2CA500267924 /* ReleaseHockeyapp */, - D0924FE21FE52C0A003F693F /* ReleaseHockeyappInternal */, - D086A5741CC0117500F08284 /* ReleaseAppStore */, - D0CE6EEF213DC30100BCD44B /* ReleaseAppStoreLLC */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseHockeyapp; - }; - D0445DEE1A7C2CA500267924 /* Build configuration list for PBXNativeTarget "SSignalKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0445DEF1A7C2CA500267924 /* DebugHockeyapp */, - D0364D5622B3E38E002A6EF0 /* HockeyappMacAlpha */, - D021D503219CB1D90064BEBA /* DebugFork */, - D0DB57B71E5C4B7A0071854C /* DebugAppStore */, - D0ADF92F212B3AD400310BBC /* DebugAppStoreLLC */, - D0445DF01A7C2CA500267924 /* ReleaseHockeyapp */, - D0924FE31FE52C0A003F693F /* ReleaseHockeyappInternal */, - D086A5751CC0117500F08284 /* ReleaseAppStore */, - D0CE6EF0213DC30100BCD44B /* ReleaseAppStoreLLC */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseHockeyapp; - }; - D0445DF11A7C2CA500267924 /* Build configuration list for PBXNativeTarget "SSignalKitTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0445DF21A7C2CA500267924 /* DebugHockeyapp */, - D0364D5722B3E38E002A6EF0 /* HockeyappMacAlpha */, - D021D504219CB1D90064BEBA /* DebugFork */, - D0DB57B81E5C4B7A0071854C /* DebugAppStore */, - D0ADF930212B3AD400310BBC /* DebugAppStoreLLC */, - D0445DF31A7C2CA500267924 /* ReleaseHockeyapp */, - D0924FE41FE52C0A003F693F /* ReleaseHockeyappInternal */, - D086A5761CC0117500F08284 /* ReleaseAppStore */, - D0CE6EF1213DC30100BCD44B /* ReleaseAppStoreLLC */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseHockeyapp; - }; - D0B417F21D7DFA63004562A4 /* Build configuration list for PBXNativeTarget "SwiftSignalKitMac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0B417F31D7DFA63004562A4 /* DebugHockeyapp */, - D0364D5A22B3E38E002A6EF0 /* HockeyappMacAlpha */, - D021D507219CB1D90064BEBA /* DebugFork */, - D0DB57BB1E5C4B7A0071854C /* DebugAppStore */, - D0ADF933212B3AD400310BBC /* DebugAppStoreLLC */, - D0B417F41D7DFA63004562A4 /* ReleaseHockeyapp */, - D0924FE71FE52C0A003F693F /* ReleaseHockeyappInternal */, - D0B417F51D7DFA63004562A4 /* ReleaseAppStore */, - D0CE6EF4213DC30100BCD44B /* ReleaseAppStoreLLC */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseHockeyapp; - }; -/* End XCConfigurationList section */ - }; - rootObject = D0445DCF1A7C2CA500267924 /* Project object */; -} diff --git a/submodules/SSignalKit/SSignalKit_Xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/submodules/SSignalKit/SSignalKit_Xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 2141ad337b..0000000000 --- a/submodules/SSignalKit/SSignalKit_Xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/submodules/SSignalKit/SwiftSignalKit copy-Info.plist b/submodules/SSignalKit/SwiftSignalKit copy-Info.plist deleted file mode 100644 index d3de8eefb6..0000000000 --- a/submodules/SSignalKit/SwiftSignalKit copy-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/submodules/SSignalKit/SwiftSignalKitMac/Info.plist b/submodules/SSignalKit/SwiftSignalKitMac/Info.plist deleted file mode 100644 index ab41b55afe..0000000000 --- a/submodules/SSignalKit/SwiftSignalKitMac/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSHumanReadableCopyright - Copyright © 2016 Telegram. All rights reserved. - NSPrincipalClass - - - diff --git a/submodules/SSignalKit/SwiftSignalKitMac/SwiftSignalKitMac.h b/submodules/SSignalKit/SwiftSignalKitMac/SwiftSignalKitMac.h deleted file mode 100644 index eef45f9dd5..0000000000 --- a/submodules/SSignalKit/SwiftSignalKitMac/SwiftSignalKitMac.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// SwiftSignalKitMac.h -// SwiftSignalKitMac -// -// Created by Peter on 9/5/16. -// Copyright © 2016 Telegram. All rights reserved. -// - -#import - -//! Project version number for SwiftSignalKitMac. -FOUNDATION_EXPORT double SwiftSignalKitMacVersionNumber; - -//! Project version string for SwiftSignalKitMac. -FOUNDATION_EXPORT const unsigned char SwiftSignalKitMacVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - - diff --git a/submodules/SettingsUI/Sources/EditSettingsController.swift b/submodules/SettingsUI/Sources/EditSettingsController.swift index 241761863a..5d6a514cb4 100644 --- a/submodules/SettingsUI/Sources/EditSettingsController.swift +++ b/submodules/SettingsUI/Sources/EditSettingsController.swift @@ -509,7 +509,7 @@ func editSettingsController(context: AccountContext, currentName: ItemListAvatar if let data = image.jpegData(compressionQuality: 0.6) { let resource = LocalFileMediaResource(fileId: arc4random64()) context.account.postbox.mediaBox.storeResourceData(resource.id, data: data) - let representation = TelegramMediaImageRepresentation(dimensions: CGSize(width: 640.0, height: 640.0), resource: resource) + let representation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 640, height: 640), resource: resource) updateState { $0.withUpdatedUpdatingAvatar(.image(representation, true)) } diff --git a/submodules/SettingsUI/Sources/SettingsController.swift b/submodules/SettingsUI/Sources/SettingsController.swift index c45c3e6593..6e008b0e47 100644 --- a/submodules/SettingsUI/Sources/SettingsController.swift +++ b/submodules/SettingsUI/Sources/SettingsController.swift @@ -46,6 +46,8 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent let navigationController: NavigationController? = nil + let passthroughTouches: Bool = false + init(controller: ViewController, sourceNode: ASDisplayNode?) { self.controller = controller self.sourceNode = sourceNode @@ -61,6 +63,9 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent } }) } + + func animatedIn() { + } } private indirect enum SettingsEntryTag: Equatable, ItemListItemTag { @@ -1074,7 +1079,7 @@ public func settingsController(context: AccountContext, accountManager: AccountM if let data = image.jpegData(compressionQuality: 0.6) { let resource = LocalFileMediaResource(fileId: arc4random64()) context.account.postbox.mediaBox.storeResourceData(resource.id, data: data) - let representation = TelegramMediaImageRepresentation(dimensions: CGSize(width: 640.0, height: 640.0), resource: resource) + let representation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 640, height: 640), resource: resource) updateState { state in var state = state state.updatingAvatar = .image(representation, true) diff --git a/submodules/SettingsUI/Sources/Stickers/InstalledStickerPacksController.swift b/submodules/SettingsUI/Sources/Stickers/InstalledStickerPacksController.swift index 7a23014883..0e929357ee 100644 --- a/submodules/SettingsUI/Sources/Stickers/InstalledStickerPacksController.swift +++ b/submodules/SettingsUI/Sources/Stickers/InstalledStickerPacksController.swift @@ -376,50 +376,72 @@ private func namespaceForMode(_ mode: InstalledStickerPacksControllerMode) -> It } } -private func installedStickerPacksControllerEntries(presentationData: PresentationData, state: InstalledStickerPacksControllerState, mode: InstalledStickerPacksControllerMode, view: CombinedView, featured: [FeaturedStickerPackItem], archived: [ArchivedStickerPackItem]?, stickerSettings: StickerSettings) -> [InstalledStickerPacksEntry] { +private func installedStickerPacksControllerEntries(presentationData: PresentationData, state: InstalledStickerPacksControllerState, mode: InstalledStickerPacksControllerMode, view: CombinedView, temporaryPackOrder: [ItemCollectionId]?, featured: [FeaturedStickerPackItem], archived: [ArchivedStickerPackItem]?, stickerSettings: StickerSettings) -> [InstalledStickerPacksEntry] { var entries: [InstalledStickerPacksEntry] = [] switch mode { - case .general, .modal: - let suggestString: String - switch stickerSettings.emojiStickerSuggestionMode { - case .none: - suggestString = presentationData.strings.Stickers_SuggestNone - case .all: - suggestString = presentationData.strings.Stickers_SuggestAll - case .installed: - suggestString = presentationData.strings.Stickers_SuggestAdded - } - entries.append(.suggestOptions(presentationData.theme, presentationData.strings.Stickers_SuggestStickers, suggestString)) - - if featured.count != 0 { - var unreadCount: Int32 = 0 - for item in featured { - if item.unread { - unreadCount += 1 - } + case .general, .modal: + let suggestString: String + switch stickerSettings.emojiStickerSuggestionMode { + case .none: + suggestString = presentationData.strings.Stickers_SuggestNone + case .all: + suggestString = presentationData.strings.Stickers_SuggestAll + case .installed: + suggestString = presentationData.strings.Stickers_SuggestAdded + } + entries.append(.suggestOptions(presentationData.theme, presentationData.strings.Stickers_SuggestStickers, suggestString)) + + if featured.count != 0 { + var unreadCount: Int32 = 0 + for item in featured { + if item.unread { + unreadCount += 1 } - entries.append(.trending(presentationData.theme, presentationData.strings.StickerPacksSettings_FeaturedPacks, unreadCount)) } - if let archived = archived, !archived.isEmpty { - entries.append(.archived(presentationData.theme, presentationData.strings.StickerPacksSettings_ArchivedPacks, Int32(archived.count), archived)) - } - entries.append(.masks(presentationData.theme, presentationData.strings.MaskStickerSettings_Title)) - - entries.append(.animatedStickers(presentationData.theme, presentationData.strings.StickerPacksSettings_AnimatedStickers, stickerSettings.loopAnimatedStickers)) - entries.append(.animatedStickersInfo(presentationData.theme, presentationData.strings.StickerPacksSettings_AnimatedStickersInfo)) - - entries.append(.packsTitle(presentationData.theme, presentationData.strings.StickerPacksSettings_StickerPacksSection)) - case .masks: - if let archived = archived, !archived.isEmpty { - entries.append(.archived(presentationData.theme, presentationData.strings.StickerPacksSettings_ArchivedMasks, Int32(archived.count), archived)) + entries.append(.trending(presentationData.theme, presentationData.strings.StickerPacksSettings_FeaturedPacks, unreadCount)) + } + if let archived = archived, !archived.isEmpty { + entries.append(.archived(presentationData.theme, presentationData.strings.StickerPacksSettings_ArchivedPacks, Int32(archived.count), archived)) + } + entries.append(.masks(presentationData.theme, presentationData.strings.MaskStickerSettings_Title)) + + entries.append(.animatedStickers(presentationData.theme, presentationData.strings.StickerPacksSettings_AnimatedStickers, stickerSettings.loopAnimatedStickers)) + entries.append(.animatedStickersInfo(presentationData.theme, presentationData.strings.StickerPacksSettings_AnimatedStickersInfo)) + + entries.append(.packsTitle(presentationData.theme, presentationData.strings.StickerPacksSettings_StickerPacksSection)) + case .masks: + if let archived = archived, !archived.isEmpty { + entries.append(.archived(presentationData.theme, presentationData.strings.StickerPacksSettings_ArchivedMasks, Int32(archived.count), archived)) } } if let stickerPacksView = view.views[.itemCollectionInfos(namespaces: [namespaceForMode(mode)])] as? ItemCollectionInfosView { if let packsEntries = stickerPacksView.entriesByNamespace[namespaceForMode(mode)] { - var index: Int32 = 0 + var sortedPacks: [ItemCollectionInfoEntry] = [] for entry in packsEntries { + if let info = entry.info as? StickerPackCollectionInfo { + sortedPacks.append(entry) + } + } + if let temporaryPackOrder = temporaryPackOrder { + var packDict: [ItemCollectionId: Int] = [:] + for i in 0 ..< sortedPacks.count { + packDict[sortedPacks[i].id] = i + } + var tempSortedPacks: [ItemCollectionInfoEntry] = [] + var processedPacks = Set() + for id in temporaryPackOrder { + if let index = packDict[id] { + tempSortedPacks.append(sortedPacks[index]) + processedPacks.insert(id) + } + } + let restPacks = sortedPacks.filter { !processedPacks.contains($0.id) } + sortedPacks = restPacks + tempSortedPacks + } + var index: Int32 = 0 + for entry in sortedPacks { if let info = entry.info as? StickerPackCollectionInfo { entries.append(.pack(index, presentationData.theme, presentationData.strings, info, entry.firstItem as? StickerPackItem, presentationData.strings.StickerPack_StickerCount(info.count == 0 ? entry.count : info.count), stickerSettings.loopAnimatedStickers, true, ItemListStickerPackItemEditing(editable: true, editing: state.editing, revealed: state.packIdWithRevealedOptions == entry.id, reorderable: true))) index += 1 @@ -568,6 +590,7 @@ public func installedStickerPacksController(context: AccountContext, mode: Insta }) let stickerPacks = Promise() stickerPacks.set(context.account.postbox.combinedView(keys: [.itemCollectionInfos(namespaces: [namespaceForMode(mode)])])) + let temporaryPackOrder = Promise<[ItemCollectionId]?>(nil) let featured = Promise<[FeaturedStickerPackItem]>() @@ -581,9 +604,14 @@ public func installedStickerPacksController(context: AccountContext, mode: Insta } var previousPackCount: Int? - let signal = combineLatest(queue: .mainQueue(), context.sharedContext.presentationData, statePromise.get(), stickerPacks.get(), combineLatest(queue: .mainQueue(), featured.get(), archivedPromise.get()), context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.stickerSettings])) + let signal = combineLatest(queue: .mainQueue(), context.sharedContext.presentationData, + statePromise.get(), + stickerPacks.get(), + temporaryPackOrder.get(), + combineLatest(queue: .mainQueue(), featured.get(), archivedPromise.get()), + context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.stickerSettings])) |> deliverOnMainQueue - |> map { presentationData, state, view, featuredAndArchived, sharedData -> (ItemListControllerState, (ItemListNodeState, Any)) in + |> map { presentationData, state, view, temporaryPackOrder, featuredAndArchived, sharedData -> (ItemListControllerState, (ItemListNodeState, Any)) in var stickerSettings = StickerSettings.defaultSettings if let value = sharedData.entries[ApplicationSpecificSharedDataKeys.stickerSettings] as? StickerSettings { stickerSettings = value @@ -632,7 +660,7 @@ public func installedStickerPacksController(context: AccountContext, mode: Insta let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(title), leftNavigationButton: leftNavigationButton, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: true) - let listState = ItemListNodeState(entries: installedStickerPacksControllerEntries(presentationData: presentationData, state: state, mode: mode, view: view, featured: featuredAndArchived.0, archived: featuredAndArchived.1, stickerSettings: stickerSettings), style: .blocks, ensureVisibleItemTag: focusOnItemTag, animateChanges: previous != nil && packCount != nil && (previous! != 0 && previous! >= packCount! - 10)) + let listState = ItemListNodeState(entries: installedStickerPacksControllerEntries(presentationData: presentationData, state: state, mode: mode, view: view, temporaryPackOrder: temporaryPackOrder, featured: featuredAndArchived.0, archived: featuredAndArchived.1, stickerSettings: stickerSettings), style: .blocks, ensureVisibleItemTag: focusOnItemTag, animateChanges: previous != nil && packCount != nil && (previous! != 0 && previous! >= packCount! - 10)) return (controllerState, (listState, arguments)) } |> afterDisposed { @@ -666,42 +694,81 @@ public func installedStickerPacksController(context: AccountContext, mode: Insta afterAll = true } - let _ = (context.account.postbox.transaction { transaction -> Void in - var infos = transaction.getItemCollectionsInfos(namespace: namespaceForMode(mode)) - var reorderInfo: ItemCollectionInfo? - for i in 0 ..< infos.count { - if infos[i].0 == fromPackInfo.id { - reorderInfo = infos[i].1 - infos.remove(at: i) + var currentIds: [ItemCollectionId] = [] + for entry in entries { + switch entry { + case let .pack(pack): + currentIds.append(pack.3.id) + default: + break + } + } + + for i in 0 ..< currentIds.count { + if currentIds[i] == fromPackInfo.id { + currentIds.remove(at: i) + break + } + } + + if let referenceId = referenceId { + var inserted = false + for i in 0 ..< currentIds.count { + if currentIds[i] == referenceId { + if fromIndex < toIndex { + currentIds.insert(fromPackInfo.id, at: i + 1) + } else { + currentIds.insert(fromPackInfo.id, at: i) + } + inserted = true break } } - if let reorderInfo = reorderInfo { - if let referenceId = referenceId { - var inserted = false - for i in 0 ..< infos.count { - if infos[i].0 == referenceId { - if fromIndex < toIndex { - infos.insert((fromPackInfo.id, reorderInfo), at: i + 1) - } else { - infos.insert((fromPackInfo.id, reorderInfo), at: i) - } - inserted = true - break - } - } - if !inserted { - infos.append((fromPackInfo.id, reorderInfo)) - } - } else if beforeAll { - infos.insert((fromPackInfo.id, reorderInfo), at: 0) - } else if afterAll { - infos.append((fromPackInfo.id, reorderInfo)) - } - addSynchronizeInstalledStickerPacksOperation(transaction: transaction, namespace: namespaceForMode(mode), content: .sync) - transaction.replaceItemCollectionInfos(namespace: namespaceForMode(mode), itemCollectionInfos: infos) + if !inserted { + currentIds.append(fromPackInfo.id) } - }).start() + } else if beforeAll { + currentIds.insert(fromPackInfo.id, at: 0) + } else if afterAll { + currentIds.append(fromPackInfo.id) + } + + temporaryPackOrder.set(.single(currentIds)) + }) + + controller.setReorderCompleted({ (entries: [InstalledStickerPacksEntry]) -> Void in + var currentIds: [ItemCollectionId] = [] + for entry in entries { + switch entry { + case let .pack(pack): + currentIds.append(pack.3.id) + default: + break + } + } + let _ = (context.account.postbox.transaction { transaction -> Void in + var infos = transaction.getItemCollectionsInfos(namespace: namespaceForMode(mode)) + + var packDict: [ItemCollectionId: Int] = [:] + for i in 0 ..< infos.count { + packDict[infos[i].0] = i + } + var tempSortedPacks: [(ItemCollectionId, ItemCollectionInfo)] = [] + var processedPacks = Set() + for id in currentIds { + if let index = packDict[id] { + tempSortedPacks.append(infos[index]) + processedPacks.insert(id) + } + } + let restPacks = infos.filter { !processedPacks.contains($0.0) } + let sortedPacks = restPacks + tempSortedPacks + addSynchronizeInstalledStickerPacksOperation(transaction: transaction, namespace: namespaceForMode(mode), content: .sync) + transaction.replaceItemCollectionInfos(namespace: namespaceForMode(mode), itemCollectionInfos: sortedPacks) + } + |> deliverOnMainQueue).start(completed: { + temporaryPackOrder.set(.single(nil)) + }) }) presentControllerImpl = { [weak controller] c, p in diff --git a/submodules/SettingsUI/Sources/Themes/CustomWallpaperPicker.swift b/submodules/SettingsUI/Sources/Themes/CustomWallpaperPicker.swift index cc32b30af5..4ad1e1a7d6 100644 --- a/submodules/SettingsUI/Sources/Themes/CustomWallpaperPicker.swift +++ b/submodules/SettingsUI/Sources/Themes/CustomWallpaperPicker.swift @@ -92,7 +92,7 @@ func uploadCustomWallpaper(context: AccountContext, wallpaper: WallpaperGalleryE } case let .internalReference(_, _, _, _, _, image, _, _): if let image = image { - if let imageRepresentation = imageRepresentationLargerThan(image.representations, size: CGSize(width: 1000.0, height: 800.0)) { + if let imageRepresentation = imageRepresentationLargerThan(image.representations, size: PixelDimensions(width: 1000, height: 800)) { imageResource = imageRepresentation.resource } } @@ -162,7 +162,7 @@ func uploadCustomWallpaper(context: AccountContext, wallpaper: WallpaperGalleryE let apply: () -> Void = { let settings = WallpaperSettings(blur: mode.contains(.blur), motion: mode.contains(.motion), color: nil, intensity: nil) - let wallpaper: TelegramWallpaper = .image([TelegramMediaImageRepresentation(dimensions: thumbnailDimensions, resource: thumbnailResource), TelegramMediaImageRepresentation(dimensions: croppedImage.size, resource: resource)], settings) + let wallpaper: TelegramWallpaper = .image([TelegramMediaImageRepresentation(dimensions: PixelDimensions(thumbnailDimensions), resource: thumbnailResource), TelegramMediaImageRepresentation(dimensions: PixelDimensions(croppedImage.size), resource: resource)], settings) updateWallpaper(wallpaper) DispatchQueue.main.async { completion() diff --git a/submodules/SettingsUI/Sources/Themes/EditThemeController.swift b/submodules/SettingsUI/Sources/Themes/EditThemeController.swift index 44b6358b05..180b9f52c6 100644 --- a/submodules/SettingsUI/Sources/Themes/EditThemeController.swift +++ b/submodules/SettingsUI/Sources/Themes/EditThemeController.swift @@ -295,7 +295,7 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll |> mapToSignal { wallpaper -> Signal in if let wallpaper = wallpaper, case let .file(file) = wallpaper.wallpaper { var convertedRepresentations: [ImageRepresentationWithReference] = [] - convertedRepresentations.append(ImageRepresentationWithReference(representation: TelegramMediaImageRepresentation(dimensions: CGSize(width: 100.0, height: 100.0), resource: file.file.resource), reference: .media(media: .standalone(media: file.file), resource: file.file.resource))) + convertedRepresentations.append(ImageRepresentationWithReference(representation: TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 100, height: 100), resource: file.file.resource), reference: .media(media: .standalone(media: file.file), resource: file.file.resource))) return wallpaperDatas(account: context.account, accountManager: context.sharedContext.accountManager, fileReference: .standalone(media: file.file), representations: convertedRepresentations, alwaysShowThumbnailFirst: false, thumbnail: false, onlyFullSize: true, autoFetchFullSize: true, synchronousLoad: false) |> mapToSignal { _, fullSizeData, complete -> Signal in guard complete, let fullSizeData = fullSizeData else { diff --git a/submodules/SettingsUI/Sources/Themes/SettingsThemeWallpaperNode.swift b/submodules/SettingsUI/Sources/Themes/SettingsThemeWallpaperNode.swift index 5e8c81a3fb..c7badf0e10 100644 --- a/submodules/SettingsUI/Sources/Themes/SettingsThemeWallpaperNode.swift +++ b/submodules/SettingsUI/Sources/Themes/SettingsThemeWallpaperNode.swift @@ -107,7 +107,7 @@ final class SettingsThemeWallpaperNode: ASDisplayNode { let convertedRepresentations: [ImageRepresentationWithReference] = representations.map({ ImageRepresentationWithReference(representation: $0, reference: .wallpaper(resource: $0.resource)) }) self.imageNode.setSignal(wallpaperImage(account: context.account, accountManager: context.sharedContext.accountManager, representations: convertedRepresentations, thumbnail: true, autoFetchFullSize: true, synchronousLoad: synchronousLoad)) - let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: corners, imageSize: largestImageRepresentation(representations)!.dimensions.aspectFilled(size), boundingSize: size, intrinsicInsets: UIEdgeInsets())) + let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: corners, imageSize: largestImageRepresentation(representations)!.dimensions.cgSize.aspectFilled(size), boundingSize: size, intrinsicInsets: UIEdgeInsets())) apply() case let .file(file): self.imageNode.isHidden = false @@ -138,8 +138,8 @@ final class SettingsThemeWallpaperNode: ASDisplayNode { } self.imageNode.setSignal(imageSignal, attemptSynchronously: synchronousLoad) - let dimensions = file.file.dimensions ?? CGSize(width: 100.0, height: 100.0) - let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: corners, imageSize: dimensions.aspectFilled(size), boundingSize: size, intrinsicInsets: UIEdgeInsets(), emptyColor: self.color)) + let dimensions = file.file.dimensions ?? PixelDimensions(width: 100, height: 100) + let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: corners, imageSize: dimensions.cgSize.aspectFilled(size), boundingSize: size, intrinsicInsets: UIEdgeInsets(), emptyColor: self.color)) apply() } } else if let wallpaper = self.wallpaper { @@ -148,11 +148,11 @@ final class SettingsThemeWallpaperNode: ASDisplayNode { let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: corners, imageSize: CGSize(), boundingSize: size, intrinsicInsets: UIEdgeInsets())) apply() case let .image(representations, _): - let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: corners, imageSize: largestImageRepresentation(representations)!.dimensions.aspectFilled(size), boundingSize: size, intrinsicInsets: UIEdgeInsets())) + let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: corners, imageSize: largestImageRepresentation(representations)!.dimensions.cgSize.aspectFilled(size), boundingSize: size, intrinsicInsets: UIEdgeInsets())) apply() case let .file(file): - let dimensions = file.file.dimensions ?? CGSize(width: 100.0, height: 100.0) - let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: corners, imageSize: dimensions.aspectFilled(size), boundingSize: size, intrinsicInsets: UIEdgeInsets(), emptyColor: self.color)) + let dimensions = file.file.dimensions ?? PixelDimensions(width: 100, height: 100) + let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: corners, imageSize: dimensions.cgSize.aspectFilled(size), boundingSize: size, intrinsicInsets: UIEdgeInsets(), emptyColor: self.color)) apply() } } diff --git a/submodules/SettingsUI/Sources/Themes/ThemeGridSearchItem.swift b/submodules/SettingsUI/Sources/Themes/ThemeGridSearchItem.swift index 85d97b0c37..67660f29d0 100644 --- a/submodules/SettingsUI/Sources/Themes/ThemeGridSearchItem.swift +++ b/submodules/SettingsUI/Sources/Themes/ThemeGridSearchItem.swift @@ -77,31 +77,31 @@ final class ThemeGridSearchItemNode: GridItemNode { } else if let thumbnail = thumbnail { imageResource = thumbnail.resource } - imageDimensions = content?.dimensions + imageDimensions = content?.dimensions?.cgSize case let .internalReference(_, _, _, _, _, image, file, _): if let image = image { immediateThumbnailData = image.immediateThumbnailData - if let representation = imageRepresentationLargerThan(image.representations, size: CGSize(width: 321.0, height: 321.0)) { + if let representation = imageRepresentationLargerThan(image.representations, size: PixelDimensions(width: 321, height: 321)) { imageResource = representation.resource - imageDimensions = representation.dimensions + imageDimensions = representation.dimensions.cgSize } if let file = file { if let thumbnailRepresentation = smallestImageRepresentation(file.previewRepresentations) { - thumbnailDimensions = thumbnailRepresentation.dimensions + thumbnailDimensions = thumbnailRepresentation.dimensions.cgSize thumbnailResource = thumbnailRepresentation.resource } } else { if let thumbnailRepresentation = smallestImageRepresentation(image.representations) { - thumbnailDimensions = thumbnailRepresentation.dimensions + thumbnailDimensions = thumbnailRepresentation.dimensions.cgSize thumbnailResource = thumbnailRepresentation.resource } } } else if let file = file { immediateThumbnailData = file.immediateThumbnailData if let dimensions = file.dimensions { - imageDimensions = dimensions + imageDimensions = dimensions.cgSize } else if let largestRepresentation = largestImageRepresentation(file.previewRepresentations) { - imageDimensions = largestRepresentation.dimensions + imageDimensions = largestRepresentation.dimensions.cgSize } imageResource = smallestImageRepresentation(file.previewRepresentations)?.resource } @@ -109,10 +109,10 @@ final class ThemeGridSearchItemNode: GridItemNode { var representations: [TelegramMediaImageRepresentation] = [] if let thumbnailResource = thumbnailResource, let thumbnailDimensions = thumbnailDimensions { - representations.append(TelegramMediaImageRepresentation(dimensions: thumbnailDimensions, resource: thumbnailResource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(thumbnailDimensions), resource: thumbnailResource)) } if let imageResource = imageResource, let imageDimensions = imageDimensions { - representations.append(TelegramMediaImageRepresentation(dimensions: imageDimensions, resource: imageResource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(imageDimensions), resource: imageResource)) } if !representations.isEmpty { let tmpImage = TelegramMediaImage(imageId: MediaId(namespace: 0, id: 0), representations: representations, immediateThumbnailData: immediateThumbnailData, reference: nil, partialReference: nil) diff --git a/submodules/SettingsUI/Sources/Themes/ThemePreviewControllerNode.swift b/submodules/SettingsUI/Sources/Themes/ThemePreviewControllerNode.swift index bb7105f241..1142708ff4 100644 --- a/submodules/SettingsUI/Sources/Themes/ThemePreviewControllerNode.swift +++ b/submodules/SettingsUI/Sources/Themes/ThemePreviewControllerNode.swift @@ -204,8 +204,8 @@ final class ThemePreviewControllerNode: ASDisplayNode, UIScrollViewDelegate { return } if case let .file(file) = wallpaper { - let dimensions = file.file.dimensions ?? CGSize(width: 100.0, height: 100.0) - let displaySize = dimensions.dividedByScreenScale().integralFloor + let dimensions = file.file.dimensions ?? PixelDimensions(width: 100, height: 100) + let displaySize = dimensions.cgSize.dividedByScreenScale().integralFloor var convertedRepresentations: [ImageRepresentationWithReference] = [] for representation in file.file.previewRepresentations { diff --git a/submodules/SettingsUI/Sources/Themes/ThemeSettingsController.swift b/submodules/SettingsUI/Sources/Themes/ThemeSettingsController.swift index 099ade5053..714faf1251 100644 --- a/submodules/SettingsUI/Sources/Themes/ThemeSettingsController.swift +++ b/submodules/SettingsUI/Sources/Themes/ThemeSettingsController.swift @@ -22,6 +22,8 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent let navigationController: NavigationController? = nil + let passthroughTouches: Bool = false + init(controller: ViewController, sourceNode: ASDisplayNode?) { self.controller = controller self.sourceNode = sourceNode @@ -37,6 +39,9 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent } }) } + + func animatedIn() { + } } func themeDisplayName(strings: PresentationStrings, reference: PresentationThemeReference) -> String { diff --git a/submodules/SettingsUI/Sources/Themes/WallpaperGalleryItem.swift b/submodules/SettingsUI/Sources/Themes/WallpaperGalleryItem.swift index 3ce5587616..ec60b55351 100644 --- a/submodules/SettingsUI/Sources/Themes/WallpaperGalleryItem.swift +++ b/submodules/SettingsUI/Sources/Themes/WallpaperGalleryItem.swift @@ -235,9 +235,9 @@ final class WallpaperGalleryItemNode: GalleryItemNode { isBlurrable = false //self.backgroundColor = UIColor(rgb: UInt32(bitPattern: color)) case let .file(file): - let dimensions = file.file.dimensions ?? CGSize(width: 100.0, height: 100.0) - contentSize = dimensions - displaySize = dimensions.dividedByScreenScale().integralFloor + let dimensions = file.file.dimensions ?? PixelDimensions(width: 100, height: 100) + contentSize = dimensions.cgSize + displaySize = dimensions.cgSize.dividedByScreenScale().integralFloor var convertedRepresentations: [ImageRepresentationWithReference] = [] for representation in file.file.previewRepresentations { @@ -310,8 +310,8 @@ final class WallpaperGalleryItemNode: GalleryItemNode { actionSignal = .single(defaultAction) case let .image(representations, _): if let largestSize = largestImageRepresentation(representations) { - contentSize = largestSize.dimensions - displaySize = largestSize.dimensions.dividedByScreenScale().integralFloor + contentSize = largestSize.dimensions.cgSize + displaySize = largestSize.dimensions.cgSize.dividedByScreenScale().integralFloor let convertedRepresentations: [ImageRepresentationWithReference] = representations.map({ ImageRepresentationWithReference(representation: $0, reference: .wallpaper(resource: $0.resource)) }) signal = wallpaperImage(account: context.account, accountManager: context.sharedContext.accountManager, representations: convertedRepresentations, alwaysShowThumbnailFirst: true, autoFetchFullSize: false) @@ -382,19 +382,19 @@ final class WallpaperGalleryItemNode: GalleryItemNode { } if let thumbnail = thumbnail { thumbnailResource = thumbnail.resource - thumbnailDimensions = thumbnail.dimensions + thumbnailDimensions = thumbnail.dimensions?.cgSize } if let dimensions = content?.dimensions { - imageDimensions = dimensions + imageDimensions = dimensions.cgSize } case let .internalReference(_, _, _, _, _, image, _, _): if let image = image { - if let imageRepresentation = imageRepresentationLargerThan(image.representations, size: CGSize(width: 1000.0, height: 800.0)) { - imageDimensions = imageRepresentation.dimensions + if let imageRepresentation = imageRepresentationLargerThan(image.representations, size: PixelDimensions(width: 1000, height: 800)) { + imageDimensions = imageRepresentation.dimensions.cgSize imageResource = imageRepresentation.resource } if let thumbnailRepresentation = smallestImageRepresentation(image.representations) { - thumbnailDimensions = thumbnailRepresentation.dimensions + thumbnailDimensions = thumbnailRepresentation.dimensions.cgSize thumbnailResource = thumbnailRepresentation.resource } } @@ -406,9 +406,9 @@ final class WallpaperGalleryItemNode: GalleryItemNode { var representations: [TelegramMediaImageRepresentation] = [] if let thumbnailResource = thumbnailResource, let thumbnailDimensions = thumbnailDimensions { - representations.append(TelegramMediaImageRepresentation(dimensions: thumbnailDimensions, resource: thumbnailResource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(thumbnailDimensions), resource: thumbnailResource)) } - representations.append(TelegramMediaImageRepresentation(dimensions: imageDimensions, resource: imageResource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(imageDimensions), resource: imageResource)) let tmpImage = TelegramMediaImage(imageId: MediaId(namespace: 0, id: 0), representations: representations, immediateThumbnailData: nil, reference: nil, partialReference: nil) signal = chatMessagePhoto(postbox: context.account.postbox, photoReference: .standalone(media: tmpImage)) @@ -607,7 +607,7 @@ final class WallpaperGalleryItemNode: GalleryItemNode { private func preparePatternEditing() { if let entry = self.entry, case let .wallpaper(wallpaper, _) = entry, case let .file(file) = wallpaper { - if let size = file.file.dimensions?.fitted(CGSize(width: 1280.0, height: 1280.0)) { + if let size = file.file.dimensions?.cgSize.fitted(CGSize(width: 1280.0, height: 1280.0)) { let _ = self.context.account.postbox.mediaBox.cachedResourceRepresentation(file.file.resource, representation: CachedPatternWallpaperMaskRepresentation(size: size), complete: false, fetch: true).start() } } diff --git a/submodules/ShareController/Sources/ShareController.swift b/submodules/ShareController/Sources/ShareController.swift index c7234e1d93..af8f646288 100644 --- a/submodules/ShareController/Sources/ShareController.swift +++ b/submodules/ShareController/Sources/ShareController.swift @@ -122,7 +122,7 @@ private func collectExternalShareItems(strings: PresentationStrings, dateTimeFor if file.isSticker, !file.isAnimatedSticker, let dimensions = file.dimensions { return chatMessageSticker(postbox: postbox, file: file, small: false, fetched: true, onlyFullSize: true) |> map { f -> ExternalShareItemStatus in - let context = f(TransformImageArguments(corners: ImageCorners(), imageSize: dimensions, boundingSize: dimensions, intrinsicInsets: UIEdgeInsets(), emptyColor: nil, scale: 1.0)) + let context = f(TransformImageArguments(corners: ImageCorners(), imageSize: dimensions.cgSize, boundingSize: dimensions.cgSize, intrinsicInsets: UIEdgeInsets(), emptyColor: nil, scale: 1.0)) if let image = context?.generateImage() { return .done(.image(image)) } else { diff --git a/submodules/ShareItems/Sources/ShareItems.swift b/submodules/ShareItems/Sources/ShareItems.swift index 7ba80a1fb0..f87db7d9b3 100644 --- a/submodules/ShareItems/Sources/ShareItems.swift +++ b/submodules/ShareItems/Sources/ShareItems.swift @@ -53,9 +53,10 @@ private func scalePhotoImage(_ image: UIImage, dimensions: CGSize) -> UIImage? { private func preparedShareItem(account: Account, to peerId: PeerId, value: [String: Any]) -> Signal { if let imageData = value["scaledImageData"] as? Data, let dimensions = value["scaledImageDimensions"] as? NSValue { + let diminsionsSize = dimensions.cgSizeValue return .single(.preparing) |> then( - standaloneUploadedImage(account: account, peerId: peerId, text: "", data: imageData, dimensions: dimensions.cgSizeValue) + standaloneUploadedImage(account: account, peerId: peerId, text: "", data: imageData, dimensions: PixelDimensions(width: Int32(diminsionsSize.width), height: Int32(diminsionsSize.height))) |> mapError { _ -> Void in return Void() } @@ -73,7 +74,7 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri let dimensions = nativeImageSize.fitted(CGSize(width: 1280.0, height: 1280.0)) if let scaledImage = scalePhotoImage(image, dimensions: dimensions), let imageData = scaledImage.jpegData(compressionQuality: 0.52) { return .single(.preparing) - |> then(standaloneUploadedImage(account: account, peerId: peerId, text: "", data: imageData, dimensions: dimensions) + |> then(standaloneUploadedImage(account: account, peerId: peerId, text: "", data: imageData, dimensions: PixelDimensions(width: Int32(dimensions.width), height: Int32(dimensions.height))) |> mapError { _ -> Void in return Void() } @@ -126,7 +127,7 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri } let resource = LocalFileVideoMediaResource(randomId: arc4random64(), path: asset.url.path, adjustments: resourceAdjustments) - return standaloneUploadedFile(account: account, peerId: peerId, text: "", source: .resource(.standalone(resource: resource)), mimeType: "video/mp4", attributes: [.Video(duration: Int(finalDuration), size: finalDimensions, flags: flags)], hintFileIsLarge: finalDuration > 3.0 * 60.0) + return standaloneUploadedFile(account: account, peerId: peerId, text: "", source: .resource(.standalone(resource: resource)), mimeType: "video/mp4", attributes: [.Video(duration: Int(finalDuration), size: PixelDimensions(width: Int32(finalDimensions.width), height: Int32(finalDimensions.height)), flags: flags)], hintFileIsLarge: finalDuration > 3.0 * 60.0) |> mapError { _ -> Void in return Void() } @@ -180,10 +181,10 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri let mimeType: String if converted { mimeType = "video/mp4" - attributes = [.Video(duration: Int(duration), size: dimensions, flags: [.supportsStreaming]), .Animated, .FileName(fileName: "animation.mp4")] + attributes = [.Video(duration: Int(duration), size: PixelDimensions(width: Int32(dimensions.width), height: Int32(dimensions.height)), flags: [.supportsStreaming]), .Animated, .FileName(fileName: "animation.mp4")] } else { mimeType = "animation/gif" - attributes = [.ImageSize(size: dimensions), .Animated, .FileName(fileName: fileName ?? "animation.gif")] + attributes = [.ImageSize(size: PixelDimensions(width: Int32(dimensions.width), height: Int32(dimensions.height))), .Animated, .FileName(fileName: fileName ?? "animation.gif")] } return standaloneUploadedFile(account: account, peerId: peerId, text: "", source: .data(data), mimeType: mimeType, attributes: attributes, hintFileIsLarge: data.count > 5 * 1024 * 1024) |> mapError { _ -> Void in return Void() } @@ -199,7 +200,7 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri } else { let scaledImage = TGScaleImageToPixelSize(image, CGSize(width: image.size.width * image.scale, height: image.size.height * image.scale).fitted(CGSize(width: 1280.0, height: 1280.0)))! let imageData = scaledImage.jpegData(compressionQuality: 0.54)! - return standaloneUploadedImage(account: account, peerId: peerId, text: "", data: imageData, dimensions: scaledImage.size) + return standaloneUploadedImage(account: account, peerId: peerId, text: "", data: imageData, dimensions: PixelDimensions(width: Int32(scaledImage.size.width), height: Int32(scaledImage.size.height))) |> mapError { _ -> Void in return Void() } |> mapToSignal { event -> Signal in switch event { diff --git a/submodules/StickerPackPreviewUI/Sources/StickerPackPreviewController.swift b/submodules/StickerPackPreviewUI/Sources/StickerPackPreviewController.swift index 9519818450..f2c7181e6a 100644 --- a/submodules/StickerPackPreviewUI/Sources/StickerPackPreviewController.swift +++ b/submodules/StickerPackPreviewUI/Sources/StickerPackPreviewController.swift @@ -171,8 +171,8 @@ public final class StickerPackPreviewController: ViewController, StandalonePrese let signal = Signal { subscriber in let fetched = fetchedMediaResource(mediaBox: account.postbox.mediaBox, reference: FileMediaReference.standalone(media: item.file).resourceReference(item.file.resource)).start() let data = account.postbox.mediaBox.resourceData(item.file.resource).start() - let dimensions = item.file.dimensions ?? CGSize(width: 512.0, height: 512.0) - let fetchedRepresentation = chatMessageAnimatedStickerDatas(postbox: account.postbox, file: item.file, small: false, size: dimensions.aspectFitted(CGSize(width: 160.0, height: 160.0)), fetched: true, onlyFullSize: false, synchronousLoad: false).start(next: { next in + let dimensions = item.file.dimensions ?? PixelDimensions(width: 512, height: 512) + let fetchedRepresentation = chatMessageAnimatedStickerDatas(postbox: account.postbox, file: item.file, small: false, size: dimensions.cgSize.aspectFitted(CGSize(width: 160.0, height: 160.0)), fetched: true, onlyFullSize: false, synchronousLoad: false).start(next: { next in let hasContent = next._0 != nil || next._1 != nil subscriber.putNext(hasContent) if hasContent { diff --git a/submodules/StickerPackPreviewUI/Sources/StickerPackPreviewGridItem.swift b/submodules/StickerPackPreviewUI/Sources/StickerPackPreviewGridItem.swift index 02100c6c97..ba51dfe0f4 100644 --- a/submodules/StickerPackPreviewUI/Sources/StickerPackPreviewGridItem.swift +++ b/submodules/StickerPackPreviewUI/Sources/StickerPackPreviewGridItem.swift @@ -98,8 +98,8 @@ final class StickerPackPreviewGridItemNode: GridItemNode { if self.currentState == nil || self.currentState!.0 !== account || self.currentState!.1 != stickerItem { if let dimensions = stickerItem.file.dimensions { if stickerItem.file.isAnimatedSticker { - let dimensions = stickerItem.file.dimensions ?? CGSize(width: 512.0, height: 512.0) - self.imageNode.setSignal(chatMessageAnimatedSticker(postbox: account.postbox, file: stickerItem.file, small: false, size: dimensions.aspectFitted(CGSize(width: 160.0, height: 160.0)))) + let dimensions = stickerItem.file.dimensions ?? PixelDimensions(width: 512, height: 512) + self.imageNode.setSignal(chatMessageAnimatedSticker(postbox: account.postbox, file: stickerItem.file, small: false, size: dimensions.cgSize.aspectFitted(CGSize(width: 160.0, height: 160.0)))) if self.animationNode == nil { let animationNode = AnimatedStickerNode() @@ -109,7 +109,7 @@ final class StickerPackPreviewGridItemNode: GridItemNode { self?.imageNode.isHidden = true } } - let fittedDimensions = dimensions.aspectFitted(CGSize(width: 160.0, height: 160.0)) + let fittedDimensions = dimensions.cgSize.aspectFitted(CGSize(width: 160.0, height: 160.0)) self.animationNode?.setup(source: AnimatedStickerResourceSource(account: account, resource: stickerItem.file.resource), width: Int(fittedDimensions.width), height: Int(fittedDimensions.height), mode: .cached) self.animationNode?.visibility = self.isVisibleInGrid && self.interaction?.playAnimatedStickers ?? true self.stickerFetchedDisposable.set(freeMediaFileResourceInteractiveFetched(account: account, fileReference: stickerPackFileReference(stickerItem.file), resource: stickerItem.file.resource).start()) @@ -123,7 +123,7 @@ final class StickerPackPreviewGridItemNode: GridItemNode { self.stickerFetchedDisposable.set(freeMediaFileResourceInteractiveFetched(account: account, fileReference: stickerPackFileReference(stickerItem.file), resource: chatMessageStickerResource(file: stickerItem.file, small: true)).start()) } - self.currentState = (account, stickerItem, dimensions) + self.currentState = (account, stickerItem, dimensions.cgSize) self.setNeedsLayout() } } diff --git a/submodules/StickerPackPreviewUI/Sources/StickerPreviewControllerNode.swift b/submodules/StickerPackPreviewUI/Sources/StickerPreviewControllerNode.swift index 81493a08f0..093498780a 100644 --- a/submodules/StickerPackPreviewUI/Sources/StickerPreviewControllerNode.swift +++ b/submodules/StickerPackPreviewUI/Sources/StickerPreviewControllerNode.swift @@ -57,7 +57,7 @@ final class StickerPreviewControllerNode: ASDisplayNode, UIScrollViewDelegate { let textSpacing: CGFloat = 10.0 let textSize = self.textNode.measure(CGSize(width: 100.0, height: 100.0)) - let imageSize = dimensitons.aspectFitted(boundingSize) + let imageSize = dimensitons.cgSize.aspectFitted(boundingSize) self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: imageSize, intrinsicInsets: UIEdgeInsets()))() let imageFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - imageSize.width) / 2.0), y: (layout.size.height - imageSize.height - textSpacing - textSize.height) / 4.0), size: imageSize) self.imageNode.frame = imageFrame diff --git a/submodules/StickerPackPreviewUI/Sources/StickerPreviewPeekContent.swift b/submodules/StickerPackPreviewUI/Sources/StickerPreviewPeekContent.swift index 3c6b1a6658..f758b215c9 100644 --- a/submodules/StickerPackPreviewUI/Sources/StickerPreviewPeekContent.swift +++ b/submodules/StickerPackPreviewUI/Sources/StickerPreviewPeekContent.swift @@ -90,8 +90,8 @@ private final class StickerPreviewPeekContentNode: ASDisplayNode, PeekController let animationNode = AnimatedStickerNode() self.animationNode = animationNode - let dimensions = item.file.dimensions ?? CGSize(width: 512.0, height: 512.0) - let fittedDimensions = dimensions.aspectFitted(CGSize(width: 400.0, height: 400.0)) + let dimensions = item.file.dimensions ?? PixelDimensions(width: 512, height: 512) + let fittedDimensions = dimensions.cgSize.aspectFitted(CGSize(width: 400.0, height: 400.0)) self.animationNode?.setup(source: AnimatedStickerResourceSource(account: account, resource: item.file.resource), width: Int(fittedDimensions.width), height: Int(fittedDimensions.height), mode: .direct) self.animationNode?.visibility = true @@ -121,7 +121,7 @@ private final class StickerPreviewPeekContentNode: ASDisplayNode, PeekController let textSpacing: CGFloat = 10.0 let textSize = self.textNode.measure(CGSize(width: 100.0, height: 100.0)) - let imageSize = dimensitons.aspectFitted(boundingSize) + let imageSize = dimensitons.cgSize.aspectFitted(boundingSize) self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: imageSize, intrinsicInsets: UIEdgeInsets()))() let imageFrame = CGRect(origin: CGPoint(x: floor((size.width - imageSize.width) / 2.0), y: textSize.height + textSpacing), size: imageSize) self.imageNode.frame = imageFrame diff --git a/submodules/SyncCore/Sources/AccountEnvironmentAttribute.swift b/submodules/SyncCore/Sources/AccountEnvironmentAttribute.swift index e850b9d881..dda33baa2f 100644 --- a/submodules/SyncCore/Sources/AccountEnvironmentAttribute.swift +++ b/submodules/SyncCore/Sources/AccountEnvironmentAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import PostboxMac -#else import Postbox -#endif public enum AccountEnvironment: Int32 { case production = 0 diff --git a/submodules/SyncCore/Sources/AccountSortOrderAttribute.swift b/submodules/SyncCore/Sources/AccountSortOrderAttribute.swift index 371e66dd43..39ebfb4c92 100644 --- a/submodules/SyncCore/Sources/AccountSortOrderAttribute.swift +++ b/submodules/SyncCore/Sources/AccountSortOrderAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import PostboxMac -#else import Postbox -#endif public final class AccountSortOrderAttribute: AccountRecordAttribute { public let order: Int32 diff --git a/submodules/SyncCore/Sources/AppConfiguration.swift b/submodules/SyncCore/Sources/AppConfiguration.swift index e56aaa4536..745e36f5b3 100644 --- a/submodules/SyncCore/Sources/AppConfiguration.swift +++ b/submodules/SyncCore/Sources/AppConfiguration.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public struct AppConfiguration: PreferencesEntry, Equatable { public var data: JSON? diff --git a/submodules/SyncCore/Sources/ArchivedStickerPacksInfo.swift b/submodules/SyncCore/Sources/ArchivedStickerPacksInfo.swift index bc3160252a..da13628cac 100644 --- a/submodules/SyncCore/Sources/ArchivedStickerPacksInfo.swift +++ b/submodules/SyncCore/Sources/ArchivedStickerPacksInfo.swift @@ -1,9 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox + public struct ArchivedStickerPacksInfoId { public let rawValue: MemoryBuffer diff --git a/submodules/SyncCore/Sources/AuthorSignatureMessageAttribute.swift b/submodules/SyncCore/Sources/AuthorSignatureMessageAttribute.swift index 7dbbd432be..aa42b748be 100644 --- a/submodules/SyncCore/Sources/AuthorSignatureMessageAttribute.swift +++ b/submodules/SyncCore/Sources/AuthorSignatureMessageAttribute.swift @@ -1,9 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox + public class AuthorSignatureMessageAttribute: MessageAttribute { public let signature: String diff --git a/submodules/SyncCore/Sources/CachedGroupData.swift b/submodules/SyncCore/Sources/CachedGroupData.swift index 50349f4828..91050b0eae 100644 --- a/submodules/SyncCore/Sources/CachedGroupData.swift +++ b/submodules/SyncCore/Sources/CachedGroupData.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public final class CachedPeerBotInfo: PostboxCoding, Equatable { public let peerId: PeerId diff --git a/submodules/SyncCore/Sources/CachedUserData.swift b/submodules/SyncCore/Sources/CachedUserData.swift index 56d878b1ac..9fbd21b727 100644 --- a/submodules/SyncCore/Sources/CachedUserData.swift +++ b/submodules/SyncCore/Sources/CachedUserData.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public final class CachedUserData: CachedPeerData { public let about: String? diff --git a/submodules/SyncCore/Sources/ChannelMessageStateVersionAttribute.swift b/submodules/SyncCore/Sources/ChannelMessageStateVersionAttribute.swift index 4e352ed0a6..cb47d634a1 100644 --- a/submodules/SyncCore/Sources/ChannelMessageStateVersionAttribute.swift +++ b/submodules/SyncCore/Sources/ChannelMessageStateVersionAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public class ChannelMessageStateVersionAttribute: MessageAttribute { public let pts: Int32 diff --git a/submodules/SyncCore/Sources/CloudChatRemoveMessagesOperation.swift b/submodules/SyncCore/Sources/CloudChatRemoveMessagesOperation.swift index e022318bba..610bd6de7b 100644 --- a/submodules/SyncCore/Sources/CloudChatRemoveMessagesOperation.swift +++ b/submodules/SyncCore/Sources/CloudChatRemoveMessagesOperation.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public enum InteractiveMessagesDeletionType: Int32 { case forLocalPeer = 0 diff --git a/submodules/SyncCore/Sources/ConsumableContentMessageAttribute.swift b/submodules/SyncCore/Sources/ConsumableContentMessageAttribute.swift index 029615a641..bc8d0a06b9 100644 --- a/submodules/SyncCore/Sources/ConsumableContentMessageAttribute.swift +++ b/submodules/SyncCore/Sources/ConsumableContentMessageAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public class ConsumableContentMessageAttribute: MessageAttribute { public let consumed: Bool diff --git a/submodules/SyncCore/Sources/ConsumablePersonalMentionMessageAttribute.swift b/submodules/SyncCore/Sources/ConsumablePersonalMentionMessageAttribute.swift index 4cb1268dc5..89e59a7cff 100644 --- a/submodules/SyncCore/Sources/ConsumablePersonalMentionMessageAttribute.swift +++ b/submodules/SyncCore/Sources/ConsumablePersonalMentionMessageAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public class ConsumablePersonalMentionMessageAttribute: MessageAttribute { public let consumed: Bool diff --git a/submodules/SyncCore/Sources/ConsumePersonalMessageAction.swift b/submodules/SyncCore/Sources/ConsumePersonalMessageAction.swift index b69350979b..1ac5ce6a2e 100644 --- a/submodules/SyncCore/Sources/ConsumePersonalMessageAction.swift +++ b/submodules/SyncCore/Sources/ConsumePersonalMessageAction.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public final class ConsumePersonalMessageAction: PendingMessageActionData { public init() { diff --git a/submodules/SyncCore/Sources/ContactsSettings.swift b/submodules/SyncCore/Sources/ContactsSettings.swift index 794d7b394c..015285012f 100644 --- a/submodules/SyncCore/Sources/ContactsSettings.swift +++ b/submodules/SyncCore/Sources/ContactsSettings.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import PostboxMac -#else import Postbox -#endif public struct ContactsSettings: Equatable, PreferencesEntry { public var synchronizeContacts: Bool diff --git a/submodules/SyncCore/Sources/ContentRequiresValidationMessageAttribute.swift b/submodules/SyncCore/Sources/ContentRequiresValidationMessageAttribute.swift index 8fbcab08ec..b23717f147 100644 --- a/submodules/SyncCore/Sources/ContentRequiresValidationMessageAttribute.swift +++ b/submodules/SyncCore/Sources/ContentRequiresValidationMessageAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import PostboxMac -#else import Postbox -#endif public class ContentRequiresValidationMessageAttribute: MessageAttribute { public init() { diff --git a/submodules/SyncCore/Sources/EditedMessageAttribute.swift b/submodules/SyncCore/Sources/EditedMessageAttribute.swift index 81f61f73ac..8b6683362f 100644 --- a/submodules/SyncCore/Sources/EditedMessageAttribute.swift +++ b/submodules/SyncCore/Sources/EditedMessageAttribute.swift @@ -1,9 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox + public class EditedMessageAttribute: MessageAttribute { public let date: Int32 diff --git a/submodules/SyncCore/Sources/FeaturedStickerPack.swift b/submodules/SyncCore/Sources/FeaturedStickerPack.swift index d5765a0d39..156cd8be14 100644 --- a/submodules/SyncCore/Sources/FeaturedStickerPack.swift +++ b/submodules/SyncCore/Sources/FeaturedStickerPack.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public struct FeaturedStickerPackItemId { public let rawValue: MemoryBuffer diff --git a/submodules/SyncCore/Sources/ForwardSourceInfoAttribute.swift b/submodules/SyncCore/Sources/ForwardSourceInfoAttribute.swift index ef7a631349..c0a849ec63 100644 --- a/submodules/SyncCore/Sources/ForwardSourceInfoAttribute.swift +++ b/submodules/SyncCore/Sources/ForwardSourceInfoAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public class ForwardSourceInfoAttribute: MessageAttribute { public let messageId: MessageId diff --git a/submodules/SyncCore/Sources/InlineBotMessageAttribute.swift b/submodules/SyncCore/Sources/InlineBotMessageAttribute.swift index 073c7c8339..51b93722a9 100644 --- a/submodules/SyncCore/Sources/InlineBotMessageAttribute.swift +++ b/submodules/SyncCore/Sources/InlineBotMessageAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public class InlineBotMessageAttribute: MessageAttribute { public let peerId: PeerId? diff --git a/submodules/SyncCore/Sources/InstantPage.swift b/submodules/SyncCore/Sources/InstantPage.swift index 9a32d74b3f..a5654ef0e0 100644 --- a/submodules/SyncCore/Sources/InstantPage.swift +++ b/submodules/SyncCore/Sources/InstantPage.swift @@ -1,5 +1,4 @@ import Postbox -import UIKit private enum InstantPageBlockType: Int32 { case unsupported = 0 @@ -70,7 +69,7 @@ public indirect enum InstantPageBlock: PostboxCoding, Equatable { case video(id: MediaId, caption: InstantPageCaption, autoplay: Bool, loop: Bool) case audio(id: MediaId, caption: InstantPageCaption) case cover(InstantPageBlock) - case webEmbed(url: String?, html: String?, dimensions: CGSize?, caption: InstantPageCaption, stretchToWidth: Bool, allowScrolling: Bool, coverId: MediaId?) + case webEmbed(url: String?, html: String?, dimensions: PixelDimensions?, caption: InstantPageCaption, stretchToWidth: Bool, allowScrolling: Bool, coverId: MediaId?) case postEmbed(url: String, webpageId: MediaId?, avatarId: MediaId?, author: String, date: Int32, blocks: [InstantPageBlock], caption: InstantPageCaption) case collage(items: [InstantPageBlock], caption: InstantPageCaption) case slideshow(items: [InstantPageBlock], caption: InstantPageCaption) @@ -79,7 +78,7 @@ public indirect enum InstantPageBlock: PostboxCoding, Equatable { case table(title: RichText, rows: [InstantPageTableRow], bordered: Bool, striped: Bool) case details(title: RichText, blocks: [InstantPageBlock], expanded: Bool) case relatedArticles(title: RichText, articles: [InstantPageRelatedArticle]) - case map(latitude: Double, longitude: Double, zoom: Int32, dimensions: CGSize, caption: InstantPageCaption) + case map(latitude: Double, longitude: Double, zoom: Int32, dimensions: PixelDimensions, caption: InstantPageCaption) public init(decoder: PostboxDecoder) { switch decoder.decodeInt32ForKey("r", orElse: 0) { @@ -126,9 +125,9 @@ public indirect enum InstantPageBlock: PostboxCoding, Equatable { if let coverIdNamespace = decoder.decodeOptionalInt32ForKey("ci.n"), let coverIdId = decoder.decodeOptionalInt64ForKey("ci.i") { coverId = MediaId(namespace: coverIdNamespace, id: coverIdId) } - var dimensions: CGSize? + var dimensions: PixelDimensions? if let width = decoder.decodeOptionalInt32ForKey("sw"), let height = decoder.decodeOptionalInt32ForKey("sh") { - dimensions = CGSize(width: CGFloat(width), height: CGFloat(height)) + dimensions = PixelDimensions(width: width, height: height) } self = .webEmbed(url: decoder.decodeOptionalStringForKey("u"), html: decoder.decodeOptionalStringForKey("h"), dimensions: dimensions, caption: decodeCaption(decoder), stretchToWidth: decoder.decodeInt32ForKey("st", orElse: 0) != 0, allowScrolling: decoder.decodeInt32ForKey("as", orElse: 0) != 0, coverId: coverId) case InstantPageBlockType.postEmbed.rawValue: @@ -156,7 +155,7 @@ public indirect enum InstantPageBlock: PostboxCoding, Equatable { case InstantPageBlockType.relatedArticles.rawValue: self = .relatedArticles(title: decoder.decodeObjectForKey("t", decoder: { RichText(decoder: $0) }) as! RichText, articles: decoder.decodeObjectArrayWithDecoderForKey("a")) case InstantPageBlockType.map.rawValue: - self = .map(latitude: decoder.decodeDoubleForKey("lat", orElse: 0.0), longitude: decoder.decodeDoubleForKey("lon", orElse: 0.0), zoom: decoder.decodeInt32ForKey("z", orElse: 0), dimensions: CGSize(width: CGFloat(decoder.decodeInt32ForKey("sw", orElse: 0)), height: CGFloat(decoder.decodeInt32ForKey("sh", orElse: 0))), caption: decodeCaption(decoder)) + self = .map(latitude: decoder.decodeDoubleForKey("lat", orElse: 0.0), longitude: decoder.decodeDoubleForKey("lon", orElse: 0.0), zoom: decoder.decodeInt32ForKey("z", orElse: 0), dimensions: PixelDimensions(width: decoder.decodeInt32ForKey("sw", orElse: 0), height: decoder.decodeInt32ForKey("sh", orElse: 0)), caption: decodeCaption(decoder)) default: self = .unsupported } diff --git a/submodules/SyncCore/Sources/Localization.swift b/submodules/SyncCore/Sources/Localization.swift index 73831673aa..21805c0c6c 100644 --- a/submodules/SyncCore/Sources/Localization.swift +++ b/submodules/SyncCore/Sources/Localization.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public enum LocalizationEntry: Equatable { case string(key: String, value: String) diff --git a/submodules/SyncCore/Sources/LocalizationSettings.swift b/submodules/SyncCore/Sources/LocalizationSettings.swift index 4328477ffd..43dd26d943 100644 --- a/submodules/SyncCore/Sources/LocalizationSettings.swift +++ b/submodules/SyncCore/Sources/LocalizationSettings.swift @@ -1,9 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox + public final class LocalizationComponent: Equatable, PostboxCoding { public let languageCode: String diff --git a/submodules/SyncCore/Sources/LoggedOutAccountAttribute.swift b/submodules/SyncCore/Sources/LoggedOutAccountAttribute.swift index c7e0283d51..5e17ab5c76 100644 --- a/submodules/SyncCore/Sources/LoggedOutAccountAttribute.swift +++ b/submodules/SyncCore/Sources/LoggedOutAccountAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public final class LoggedOutAccountAttribute: AccountRecordAttribute { public init() { diff --git a/submodules/SyncCore/Sources/Namespaces.swift b/submodules/SyncCore/Sources/Namespaces.swift index 25ec05a3a7..f35cc6db1e 100644 --- a/submodules/SyncCore/Sources/Namespaces.swift +++ b/submodules/SyncCore/Sources/Namespaces.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public struct Namespaces { public struct Message { diff --git a/submodules/SyncCore/Sources/NotificationInfoMessageAttribute.swift b/submodules/SyncCore/Sources/NotificationInfoMessageAttribute.swift index 6be45cb692..95c7dff56f 100644 --- a/submodules/SyncCore/Sources/NotificationInfoMessageAttribute.swift +++ b/submodules/SyncCore/Sources/NotificationInfoMessageAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public struct NotificationInfoMessageAttributeFlags: OptionSet { public var rawValue: Int32 diff --git a/submodules/SyncCore/Sources/OutgoingChatContextResultMessageAttribute.swift b/submodules/SyncCore/Sources/OutgoingChatContextResultMessageAttribute.swift index 6c803a5c8e..b6117cd959 100644 --- a/submodules/SyncCore/Sources/OutgoingChatContextResultMessageAttribute.swift +++ b/submodules/SyncCore/Sources/OutgoingChatContextResultMessageAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public class OutgoingChatContextResultMessageAttribute: MessageAttribute { public let queryId: Int64 diff --git a/submodules/SyncCore/Sources/OutgoingContentInfoMessageAttribute.swift b/submodules/SyncCore/Sources/OutgoingContentInfoMessageAttribute.swift index 75be97b25a..8c0227ef24 100644 --- a/submodules/SyncCore/Sources/OutgoingContentInfoMessageAttribute.swift +++ b/submodules/SyncCore/Sources/OutgoingContentInfoMessageAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public struct OutgoingContentInfoFlags: OptionSet { public var rawValue: Int32 diff --git a/submodules/SyncCore/Sources/OutgoingMessageInfoAttribute.swift b/submodules/SyncCore/Sources/OutgoingMessageInfoAttribute.swift index 1dd1907241..42856b9faf 100644 --- a/submodules/SyncCore/Sources/OutgoingMessageInfoAttribute.swift +++ b/submodules/SyncCore/Sources/OutgoingMessageInfoAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public struct OutgoingMessageInfoFlags: OptionSet { public var rawValue: Int32 diff --git a/submodules/SyncCore/Sources/OutgoingScheduleInfoMessageAttribute.swift b/submodules/SyncCore/Sources/OutgoingScheduleInfoMessageAttribute.swift index 6b054a35ed..ee9f21c5cc 100644 --- a/submodules/SyncCore/Sources/OutgoingScheduleInfoMessageAttribute.swift +++ b/submodules/SyncCore/Sources/OutgoingScheduleInfoMessageAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public let scheduleWhenOnlineTimestamp: Int32 = 0x7ffffffe diff --git a/submodules/SyncCore/Sources/PeerGroupMessageStateVersionAttribute.swift b/submodules/SyncCore/Sources/PeerGroupMessageStateVersionAttribute.swift index 35679cf77a..320b9ccece 100644 --- a/submodules/SyncCore/Sources/PeerGroupMessageStateVersionAttribute.swift +++ b/submodules/SyncCore/Sources/PeerGroupMessageStateVersionAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public class PeerGroupMessageStateVersionAttribute: MessageAttribute { public let stateIndex: Int32 diff --git a/submodules/SyncCore/Sources/PixelDimensions.swift b/submodules/SyncCore/Sources/PixelDimensions.swift new file mode 100644 index 0000000000..c290ad3175 --- /dev/null +++ b/submodules/SyncCore/Sources/PixelDimensions.swift @@ -0,0 +1,27 @@ +#if os(iOS) +import UIKit +#endif + +public struct PixelDimensions: Equatable { + public let width: Int32 + public let height: Int32 + + public init(width: Int32, height: Int32) { + self.width = width + self.height = height + } +} + +#if os(iOS) + +public extension PixelDimensions { + public init(_ size: CGSize) { + self.init(width: Int32(size.width), height: Int32(size.height)) + } + + public var cgSize: CGSize { + return CGSize(width: CGFloat(self.width), height: CGFloat(self.height)) + } +} + +#endif diff --git a/submodules/SyncCore/Sources/RecentMediaItem.swift b/submodules/SyncCore/Sources/RecentMediaItem.swift index 8a1af5f343..461c41cd7d 100644 --- a/submodules/SyncCore/Sources/RecentMediaItem.swift +++ b/submodules/SyncCore/Sources/RecentMediaItem.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public struct RecentMediaItemId { public let rawValue: MemoryBuffer diff --git a/submodules/SyncCore/Sources/RecentPeerItem.swift b/submodules/SyncCore/Sources/RecentPeerItem.swift index d6b95c43f3..f7c66347c3 100644 --- a/submodules/SyncCore/Sources/RecentPeerItem.swift +++ b/submodules/SyncCore/Sources/RecentPeerItem.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public struct RecentPeerItemId { public let rawValue: MemoryBuffer diff --git a/submodules/SyncCore/Sources/ReplyMessageAttribute.swift b/submodules/SyncCore/Sources/ReplyMessageAttribute.swift index 83c12f4c05..cbcc36b5fa 100644 --- a/submodules/SyncCore/Sources/ReplyMessageAttribute.swift +++ b/submodules/SyncCore/Sources/ReplyMessageAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public class ReplyMessageAttribute: MessageAttribute { public let messageId: MessageId diff --git a/submodules/SyncCore/Sources/RestrictedContentMessageAttribute.swift b/submodules/SyncCore/Sources/RestrictedContentMessageAttribute.swift index 1da95cc0df..5180cccf8b 100644 --- a/submodules/SyncCore/Sources/RestrictedContentMessageAttribute.swift +++ b/submodules/SyncCore/Sources/RestrictedContentMessageAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import PostboxMac -#else import Postbox -#endif public class RestrictedContentMessageAttribute: MessageAttribute { public let rules: [RestrictionRule] diff --git a/submodules/SyncCore/Sources/RichText.swift b/submodules/SyncCore/Sources/RichText.swift index ee6fe719d2..9942f88083 100644 --- a/submodules/SyncCore/Sources/RichText.swift +++ b/submodules/SyncCore/Sources/RichText.swift @@ -1,5 +1,4 @@ import Postbox -import UIKit private enum RichTextTypes: Int32 { case empty = 0 @@ -35,7 +34,7 @@ public indirect enum RichText: PostboxCoding, Equatable { case superscript(RichText) case marked(RichText) case phone(text: RichText, phone: String) - case image(id: MediaId, dimensions: CGSize) + case image(id: MediaId, dimensions: PixelDimensions) case anchor(text: RichText, name: String) public init(decoder: PostboxDecoder) { @@ -75,7 +74,7 @@ public indirect enum RichText: PostboxCoding, Equatable { case RichTextTypes.phone.rawValue: self = .phone(text: decoder.decodeObjectForKey("t", decoder: { RichText(decoder: $0) }) as! RichText, phone: decoder.decodeStringForKey("p", orElse: "")) case RichTextTypes.image.rawValue: - self = .image(id: MediaId(namespace: decoder.decodeInt32ForKey("i.n", orElse: 0), id: decoder.decodeInt64ForKey("i.i", orElse: 0)), dimensions: CGSize(width: CGFloat(decoder.decodeInt32ForKey("sw", orElse: 0)), height: CGFloat(decoder.decodeInt32ForKey("sh", orElse: 0)))) + self = .image(id: MediaId(namespace: decoder.decodeInt32ForKey("i.n", orElse: 0), id: decoder.decodeInt64ForKey("i.i", orElse: 0)), dimensions: PixelDimensions(width: decoder.decodeInt32ForKey("sw", orElse: 0), height: decoder.decodeInt32ForKey("sh", orElse: 0))) case RichTextTypes.anchor.rawValue: self = .anchor(text: decoder.decodeObjectForKey("t", decoder: { RichText(decoder: $0) }) as! RichText, name: decoder.decodeStringForKey("n", orElse: "")) default: diff --git a/submodules/SyncCore/Sources/SavedStickerItem.swift b/submodules/SyncCore/Sources/SavedStickerItem.swift index b5b6318af1..b834f409a4 100644 --- a/submodules/SyncCore/Sources/SavedStickerItem.swift +++ b/submodules/SyncCore/Sources/SavedStickerItem.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public final class SavedStickerItem: OrderedItemListEntryContents, Equatable { public let file: TelegramMediaFile diff --git a/submodules/SyncCore/Sources/SearchBotsConfiguration.swift b/submodules/SyncCore/Sources/SearchBotsConfiguration.swift index b67aa0081d..f2d8972db8 100644 --- a/submodules/SyncCore/Sources/SearchBotsConfiguration.swift +++ b/submodules/SyncCore/Sources/SearchBotsConfiguration.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import PostboxMac -#else import Postbox -#endif public struct SearchBotsConfiguration: Equatable, PreferencesEntry { public let imageBotUsername: String? diff --git a/submodules/SyncCore/Sources/SecretChatIncomingDecryptedOperation.swift b/submodules/SyncCore/Sources/SecretChatIncomingDecryptedOperation.swift index 3ae051707b..677ad82a8c 100644 --- a/submodules/SyncCore/Sources/SecretChatIncomingDecryptedOperation.swift +++ b/submodules/SyncCore/Sources/SecretChatIncomingDecryptedOperation.swift @@ -1,9 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox + public struct SecretChatOperationSequenceInfo: PostboxCoding { public let topReceivedOperationIndex: Int32 diff --git a/submodules/SyncCore/Sources/SecretChatKeychain.swift b/submodules/SyncCore/Sources/SecretChatKeychain.swift index eb73b5171b..ebd09cc0b2 100644 --- a/submodules/SyncCore/Sources/SecretChatKeychain.swift +++ b/submodules/SyncCore/Sources/SecretChatKeychain.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public enum SecretChatKeyValidity: PostboxCoding, Equatable { case indefinite diff --git a/submodules/SyncCore/Sources/SecretChatSettings.swift b/submodules/SyncCore/Sources/SecretChatSettings.swift index 10c9e50f9d..88050f1e89 100644 --- a/submodules/SyncCore/Sources/SecretChatSettings.swift +++ b/submodules/SyncCore/Sources/SecretChatSettings.swift @@ -1,9 +1,6 @@ import Foundation -#if os(macOS) -import PostboxMac -#else import Postbox -#endif + public struct SecretChatSettings: Equatable, PreferencesEntry { public private(set) var acceptOnThisDevice: Bool diff --git a/submodules/SyncCore/Sources/SecretChatState.swift b/submodules/SyncCore/Sources/SecretChatState.swift index 42237651a9..26164481a5 100644 --- a/submodules/SyncCore/Sources/SecretChatState.swift +++ b/submodules/SyncCore/Sources/SecretChatState.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public enum SecretChatRole: Int32 { case creator diff --git a/submodules/SyncCore/Sources/SourceReferenceMessageAttribute.swift b/submodules/SyncCore/Sources/SourceReferenceMessageAttribute.swift index a510222be2..5865f83a21 100644 --- a/submodules/SyncCore/Sources/SourceReferenceMessageAttribute.swift +++ b/submodules/SyncCore/Sources/SourceReferenceMessageAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public class SourceReferenceMessageAttribute: MessageAttribute { public let messageId: MessageId diff --git a/submodules/SyncCore/Sources/SynchronizeConsumeMessageContentsOperation.swift b/submodules/SyncCore/Sources/SynchronizeConsumeMessageContentsOperation.swift index 6b9ff64194..513346c772 100644 --- a/submodules/SyncCore/Sources/SynchronizeConsumeMessageContentsOperation.swift +++ b/submodules/SyncCore/Sources/SynchronizeConsumeMessageContentsOperation.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public final class SynchronizeConsumeMessageContentsOperation: PostboxCoding { public let messageIds: [MessageId] diff --git a/submodules/SyncCore/Sources/SynchronizeInstalledStickerPacksOperations.swift b/submodules/SyncCore/Sources/SynchronizeInstalledStickerPacksOperations.swift index 75fd7f0613..331274806a 100644 --- a/submodules/SyncCore/Sources/SynchronizeInstalledStickerPacksOperations.swift +++ b/submodules/SyncCore/Sources/SynchronizeInstalledStickerPacksOperations.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public enum SynchronizeInstalledStickerPacksOperationNamespace: Int32 { case stickers = 0 diff --git a/submodules/SyncCore/Sources/SynchronizePinnedChatsOperation.swift b/submodules/SyncCore/Sources/SynchronizePinnedChatsOperation.swift index d579c8ead6..4f9fd6b5ff 100644 --- a/submodules/SyncCore/Sources/SynchronizePinnedChatsOperation.swift +++ b/submodules/SyncCore/Sources/SynchronizePinnedChatsOperation.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox private struct PreviousPeerItemId: PostboxCoding { public let id: PinnedItemId diff --git a/submodules/SyncCore/Sources/SynchronizeableChatInputState.swift b/submodules/SyncCore/Sources/SynchronizeableChatInputState.swift index 6ef8498ab9..6211d31c87 100644 --- a/submodules/SyncCore/Sources/SynchronizeableChatInputState.swift +++ b/submodules/SyncCore/Sources/SynchronizeableChatInputState.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public struct SynchronizeableChatInputState: PostboxCoding, Equatable { public let replyToMessageId: MessageId? diff --git a/submodules/SyncCore/Sources/TelegramMediaExpiredContent.swift b/submodules/SyncCore/Sources/TelegramMediaExpiredContent.swift index dc90b36be9..17f650d664 100644 --- a/submodules/SyncCore/Sources/TelegramMediaExpiredContent.swift +++ b/submodules/SyncCore/Sources/TelegramMediaExpiredContent.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public enum TelegramMediaExpiredContentData: Int32 { case image diff --git a/submodules/SyncCore/Sources/TelegramMediaFile.swift b/submodules/SyncCore/Sources/TelegramMediaFile.swift index 0b05162042..535e7eae78 100644 --- a/submodules/SyncCore/Sources/TelegramMediaFile.swift +++ b/submodules/SyncCore/Sources/TelegramMediaFile.swift @@ -1,5 +1,4 @@ import Postbox -import UIKit private let typeFileName: Int32 = 0 private let typeSticker: Int32 = 1 @@ -112,9 +111,9 @@ public struct StickerMaskCoords: PostboxCoding { public enum TelegramMediaFileAttribute: PostboxCoding { case FileName(fileName: String) case Sticker(displayText: String, packReference: StickerPackReference?, maskData: StickerMaskCoords?) - case ImageSize(size: CGSize) + case ImageSize(size: PixelDimensions) case Animated - case Video(duration: Int, size: CGSize, flags: TelegramMediaVideoFlags) + case Video(duration: Int, size: PixelDimensions, flags: TelegramMediaVideoFlags) case Audio(isVoice: Bool, duration: Int, title: String?, performer: String?, waveform: MemoryBuffer?) case HasLinkedStickers @@ -126,11 +125,11 @@ public enum TelegramMediaFileAttribute: PostboxCoding { case typeSticker: self = .Sticker(displayText: decoder.decodeStringForKey("dt", orElse: ""), packReference: decoder.decodeObjectForKey("pr", decoder: { StickerPackReference(decoder: $0) }) as? StickerPackReference, maskData: decoder.decodeObjectForKey("mc", decoder: { StickerMaskCoords(decoder: $0) }) as? StickerMaskCoords) case typeImageSize: - self = .ImageSize(size: CGSize(width: CGFloat(decoder.decodeInt32ForKey("w", orElse: 0)), height: CGFloat(decoder.decodeInt32ForKey("h", orElse: 0)))) + self = .ImageSize(size: PixelDimensions(width: decoder.decodeInt32ForKey("w", orElse: 0), height: decoder.decodeInt32ForKey("h", orElse: 0))) case typeAnimated: self = .Animated case typeVideo: - self = .Video(duration: Int(decoder.decodeInt32ForKey("du", orElse: 0)), size: CGSize(width: CGFloat(decoder.decodeInt32ForKey("w", orElse: 0)), height: CGFloat(decoder.decodeInt32ForKey("h", orElse: 0))), flags: TelegramMediaVideoFlags(rawValue: decoder.decodeInt32ForKey("f", orElse: 0))) + self = .Video(duration: Int(decoder.decodeInt32ForKey("du", orElse: 0)), size: PixelDimensions(width: decoder.decodeInt32ForKey("w", orElse: 0), height: decoder.decodeInt32ForKey("h", orElse: 0)), flags: TelegramMediaVideoFlags(rawValue: decoder.decodeInt32ForKey("f", orElse: 0))) case typeAudio: let waveformBuffer = decoder.decodeBytesForKeyNoCopy("wf") var waveform: MemoryBuffer? diff --git a/submodules/SyncCore/Sources/TelegramMediaImage.swift b/submodules/SyncCore/Sources/TelegramMediaImage.swift index 39e98b62aa..e474fcf24c 100644 --- a/submodules/SyncCore/Sources/TelegramMediaImage.swift +++ b/submodules/SyncCore/Sources/TelegramMediaImage.swift @@ -1,5 +1,4 @@ import Postbox -import UIKit public enum TelegramMediaImageReference: PostboxCoding, Equatable { case cloud(imageId: Int64, accessHash: Int64, fileReference: Data?) @@ -90,7 +89,7 @@ public final class TelegramMediaImage: Media, Equatable { } } - public func representationForDisplayAtSize(_ size: CGSize) -> TelegramMediaImageRepresentation? { + public func representationForDisplayAtSize(_ size: PixelDimensions) -> TelegramMediaImageRepresentation? { if self.representations.count == 0 { return nil } else { @@ -100,7 +99,7 @@ public final class TelegramMediaImage: Media, Equatable { for i in 0 ..< self.representations.count { let representationDimensions = self.representations[i].dimensions - if dimensions.width >= size.width - CGFloat.ulpOfOne && dimensions.height >= size.height - CGFloat.ulpOfOne { + if dimensions.width >= size.width && dimensions.height >= size.height { if representationDimensions.width >= size.width && representationDimensions.height >= dimensions.height && representationDimensions.width < dimensions.width && representationDimensions.height < dimensions.height { dimensions = representationDimensions index = i @@ -168,22 +167,22 @@ public final class TelegramMediaImage: Media, Equatable { } public final class TelegramMediaImageRepresentation: PostboxCoding, Equatable, CustomStringConvertible { - public let dimensions: CGSize + public let dimensions: PixelDimensions public let resource: TelegramMediaResource - public init(dimensions: CGSize, resource: TelegramMediaResource) { + public init(dimensions: PixelDimensions, resource: TelegramMediaResource) { self.dimensions = dimensions self.resource = resource } public init(decoder: PostboxDecoder) { - self.dimensions = CGSize(width: CGFloat(decoder.decodeInt32ForKey("dx", orElse: 0)), height: CGFloat(decoder.decodeInt32ForKey("dy", orElse: 0))) + self.dimensions = PixelDimensions(width: decoder.decodeInt32ForKey("dx", orElse: 0), height: decoder.decodeInt32ForKey("dy", orElse: 0)) self.resource = decoder.decodeObjectForKey("r") as? TelegramMediaResource ?? EmptyMediaResource() } public func encode(_ encoder: PostboxEncoder) { - encoder.encodeInt32(Int32(self.dimensions.width), forKey: "dx") - encoder.encodeInt32(Int32(self.dimensions.height), forKey: "dy") + encoder.encodeInt32(self.dimensions.width, forKey: "dx") + encoder.encodeInt32(self.dimensions.height, forKey: "dy") encoder.encodeObject(self.resource, forKey: "r") } diff --git a/submodules/SyncCore/Sources/TelegramMediaInvoice.swift b/submodules/SyncCore/Sources/TelegramMediaInvoice.swift index 0db835780b..8c9e8c425e 100644 --- a/submodules/SyncCore/Sources/TelegramMediaInvoice.swift +++ b/submodules/SyncCore/Sources/TelegramMediaInvoice.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public struct TelegramMediaInvoiceFlags: OptionSet { public var rawValue: Int32 diff --git a/submodules/SyncCore/Sources/TelegramMediaResource.swift b/submodules/SyncCore/Sources/TelegramMediaResource.swift index 688e801fc4..130f9d28b1 100644 --- a/submodules/SyncCore/Sources/TelegramMediaResource.swift +++ b/submodules/SyncCore/Sources/TelegramMediaResource.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public protocol TelegramMediaResource: MediaResource, PostboxCoding { } diff --git a/submodules/SyncCore/Sources/TelegramMediaUnsupported.swift b/submodules/SyncCore/Sources/TelegramMediaUnsupported.swift index 6df8541ac7..9995166213 100644 --- a/submodules/SyncCore/Sources/TelegramMediaUnsupported.swift +++ b/submodules/SyncCore/Sources/TelegramMediaUnsupported.swift @@ -1,9 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox + public final class TelegramMediaUnsupported: Media { public let id: MediaId? = nil diff --git a/submodules/SyncCore/Sources/TelegramMediaWebFile.swift b/submodules/SyncCore/Sources/TelegramMediaWebFile.swift index 1986f60bb6..37fd324f2c 100644 --- a/submodules/SyncCore/Sources/TelegramMediaWebFile.swift +++ b/submodules/SyncCore/Sources/TelegramMediaWebFile.swift @@ -1,5 +1,4 @@ import Postbox -import UIKit public class TelegramMediaWebFile: Media { public let resource: TelegramMediaResource diff --git a/submodules/SyncCore/Sources/TelegramMediaWebpage.swift b/submodules/SyncCore/Sources/TelegramMediaWebpage.swift index dd4b0a8f42..9a0ef4d6d9 100644 --- a/submodules/SyncCore/Sources/TelegramMediaWebpage.swift +++ b/submodules/SyncCore/Sources/TelegramMediaWebpage.swift @@ -1,5 +1,4 @@ import Postbox -import UIKit public final class TelegramMediaWebpageLoadedContent: PostboxCoding, Equatable { public let url: String @@ -11,7 +10,7 @@ public final class TelegramMediaWebpageLoadedContent: PostboxCoding, Equatable { public let text: String? public let embedUrl: String? public let embedType: String? - public let embedSize: CGSize? + public let embedSize: PixelDimensions? public let duration: Int? public let author: String? @@ -20,7 +19,7 @@ public final class TelegramMediaWebpageLoadedContent: PostboxCoding, Equatable { public let files: [TelegramMediaFile]? public let instantPage: InstantPage? - public init(url: String, displayUrl: String, hash: Int32, type: String?, websiteName: String?, title: String?, text: String?, embedUrl: String?, embedType: String?, embedSize: CGSize?, duration: Int?, author: String?, image: TelegramMediaImage?, file: TelegramMediaFile?, files: [TelegramMediaFile]?, instantPage: InstantPage?) { + public init(url: String, displayUrl: String, hash: Int32, type: String?, websiteName: String?, title: String?, text: String?, embedUrl: String?, embedType: String?, embedSize: PixelDimensions?, duration: Int?, author: String?, image: TelegramMediaImage?, file: TelegramMediaFile?, files: [TelegramMediaFile]?, instantPage: InstantPage?) { self.url = url self.displayUrl = displayUrl self.hash = hash @@ -50,7 +49,7 @@ public final class TelegramMediaWebpageLoadedContent: PostboxCoding, Equatable { self.embedUrl = decoder.decodeOptionalStringForKey("eu") self.embedType = decoder.decodeOptionalStringForKey("et") if let embedSizeWidth = decoder.decodeOptionalInt32ForKey("esw"), let embedSizeHeight = decoder.decodeOptionalInt32ForKey("esh") { - self.embedSize = CGSize(width: CGFloat(embedSizeWidth), height: CGFloat(embedSizeHeight)) + self.embedSize = PixelDimensions(width: embedSizeWidth, height: embedSizeHeight) } else { self.embedSize = nil } diff --git a/submodules/SyncCore/Sources/TelegramSecretChat.swift b/submodules/SyncCore/Sources/TelegramSecretChat.swift index aa5e6a2933..ae051c80ab 100644 --- a/submodules/SyncCore/Sources/TelegramSecretChat.swift +++ b/submodules/SyncCore/Sources/TelegramSecretChat.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public final class TelegramSecretChat: Peer { public let id: PeerId diff --git a/submodules/SyncCore/Sources/ViewCountMessageAttribute.swift b/submodules/SyncCore/Sources/ViewCountMessageAttribute.swift index 3faa295fcd..100ecee759 100644 --- a/submodules/SyncCore/Sources/ViewCountMessageAttribute.swift +++ b/submodules/SyncCore/Sources/ViewCountMessageAttribute.swift @@ -1,9 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox + public class ViewCountMessageAttribute: MessageAttribute { public let count: Int diff --git a/submodules/SyncCore/Sources/VoipConfiguration.swift b/submodules/SyncCore/Sources/VoipConfiguration.swift index ae87506c63..ddc94d0152 100644 --- a/submodules/SyncCore/Sources/VoipConfiguration.swift +++ b/submodules/SyncCore/Sources/VoipConfiguration.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import PostboxMac -#else import Postbox -#endif public enum VoiceCallP2PMode: Int32 { case never = 0 diff --git a/submodules/SyncCore/Sources/WasScheduledMessageAttribute.swift b/submodules/SyncCore/Sources/WasScheduledMessageAttribute.swift index 1bff00104e..00696fa9fd 100644 --- a/submodules/SyncCore/Sources/WasScheduledMessageAttribute.swift +++ b/submodules/SyncCore/Sources/WasScheduledMessageAttribute.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import PostboxMac -#else import Postbox -#endif public class WasScheduledMessageAttribute: MessageAttribute { public init() { diff --git a/submodules/TelegramApi/Info.plist b/submodules/TelegramApi/Info.plist deleted file mode 100644 index e1fe4cfb7b..0000000000 --- a/submodules/TelegramApi/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - - diff --git a/submodules/TelegramApi/TelegramApi copy-Info.plist b/submodules/TelegramApi/TelegramApi copy-Info.plist deleted file mode 100644 index e1fe4cfb7b..0000000000 --- a/submodules/TelegramApi/TelegramApi copy-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - - diff --git a/submodules/TelegramApi/TelegramApi copy2-Info.plist b/submodules/TelegramApi/TelegramApi copy2-Info.plist deleted file mode 100644 index e1fe4cfb7b..0000000000 --- a/submodules/TelegramApi/TelegramApi copy2-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - - diff --git a/submodules/TelegramApi/TelegramApi_Xcode.xcodeproj/project.pbxproj b/submodules/TelegramApi/TelegramApi_Xcode.xcodeproj/project.pbxproj deleted file mode 100644 index 68bd7a4997..0000000000 --- a/submodules/TelegramApi/TelegramApi_Xcode.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1285 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 09E9601B22C2BE4900B13673 /* SecretApiLayer101.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E9601A22C2BE4900B13673 /* SecretApiLayer101.swift */; }; - D035732422B5C1FC00F0920D /* TelegramApi.h in Headers */ = {isa = PBXBuildFile; fileRef = D035732222B5C1FC00F0920D /* TelegramApi.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D035733422B5C29900F0920D /* Api0.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035733022B5C29900F0920D /* Api0.swift */; }; - D035733522B5C29900F0920D /* Api2.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035733122B5C29900F0920D /* Api2.swift */; }; - D035733622B5C29900F0920D /* Api1.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035733222B5C29900F0920D /* Api1.swift */; }; - D035733722B5C29900F0920D /* Api3.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035733322B5C29900F0920D /* Api3.swift */; }; - D035733922B5C2E200F0920D /* Buffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035733822B5C2E200F0920D /* Buffer.swift */; }; - D035733B22B5C31400F0920D /* TelegramApiLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035733A22B5C31400F0920D /* TelegramApiLogger.swift */; }; - D035733D22B5C39100F0920D /* DeserializeFunctionResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035733C22B5C39100F0920D /* DeserializeFunctionResponse.swift */; }; - D035734722B5C9BF00F0920D /* SecretApiLayer46.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035734422B5C9BF00F0920D /* SecretApiLayer46.swift */; }; - D035734822B5C9BF00F0920D /* SecretApiLayer8.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035734522B5C9BF00F0920D /* SecretApiLayer8.swift */; }; - D035734922B5C9BF00F0920D /* SecretApiLayer73.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035734622B5C9BF00F0920D /* SecretApiLayer73.swift */; }; - D05FDC3A22CA453E0060BFE3 /* SecretApiLayer101.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E9601A22C2BE4900B13673 /* SecretApiLayer101.swift */; }; - D0CC4AC422BA46F30088F36D /* TelegramApi.h in Headers */ = {isa = PBXBuildFile; fileRef = D035732222B5C1FC00F0920D /* TelegramApi.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0CC4AC622BA46F30088F36D /* SecretApiLayer46.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035734422B5C9BF00F0920D /* SecretApiLayer46.swift */; }; - D0CC4AC722BA46F30088F36D /* Api1.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035733222B5C29900F0920D /* Api1.swift */; }; - D0CC4AC822BA46F30088F36D /* Api0.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035733022B5C29900F0920D /* Api0.swift */; }; - D0CC4AC922BA46F30088F36D /* Api3.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035733322B5C29900F0920D /* Api3.swift */; }; - D0CC4ACA22BA46F30088F36D /* SecretApiLayer73.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035734622B5C9BF00F0920D /* SecretApiLayer73.swift */; }; - D0CC4ACB22BA46F30088F36D /* TelegramApiLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035733A22B5C31400F0920D /* TelegramApiLogger.swift */; }; - D0CC4ACC22BA46F30088F36D /* Buffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035733822B5C2E200F0920D /* Buffer.swift */; }; - D0CC4ACD22BA46F30088F36D /* DeserializeFunctionResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035733C22B5C39100F0920D /* DeserializeFunctionResponse.swift */; }; - D0CC4ACE22BA46F30088F36D /* SecretApiLayer8.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035734522B5C9BF00F0920D /* SecretApiLayer8.swift */; }; - D0CC4ACF22BA46F30088F36D /* Api2.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035733122B5C29900F0920D /* Api2.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 09E9601A22C2BE4900B13673 /* SecretApiLayer101.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretApiLayer101.swift; sourceTree = ""; }; - D035731F22B5C1FC00F0920D /* TelegramApi.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TelegramApi.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D035732222B5C1FC00F0920D /* TelegramApi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TelegramApi.h; sourceTree = ""; }; - D035732322B5C1FC00F0920D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D035733022B5C29900F0920D /* Api0.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Api0.swift; sourceTree = ""; }; - D035733122B5C29900F0920D /* Api2.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Api2.swift; sourceTree = ""; }; - D035733222B5C29900F0920D /* Api1.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Api1.swift; sourceTree = ""; }; - D035733322B5C29900F0920D /* Api3.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Api3.swift; sourceTree = ""; }; - D035733822B5C2E200F0920D /* Buffer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Buffer.swift; sourceTree = ""; }; - D035733A22B5C31400F0920D /* TelegramApiLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TelegramApiLogger.swift; sourceTree = ""; }; - D035733C22B5C39100F0920D /* DeserializeFunctionResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeserializeFunctionResponse.swift; sourceTree = ""; }; - D035734422B5C9BF00F0920D /* SecretApiLayer46.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretApiLayer46.swift; sourceTree = ""; }; - D035734522B5C9BF00F0920D /* SecretApiLayer8.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretApiLayer8.swift; sourceTree = ""; }; - D035734622B5C9BF00F0920D /* SecretApiLayer73.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretApiLayer73.swift; sourceTree = ""; }; - D0CC4AD922BA46F30088F36D /* TelegramApiMac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TelegramApiMac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - D035731C22B5C1FC00F0920D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0CC4AD022BA46F30088F36D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - D035731522B5C1FC00F0920D = { - isa = PBXGroup; - children = ( - D035732322B5C1FC00F0920D /* Info.plist */, - D035732122B5C1FC00F0920D /* Sources */, - D035732022B5C1FC00F0920D /* Products */, - ); - sourceTree = ""; - }; - D035732022B5C1FC00F0920D /* Products */ = { - isa = PBXGroup; - children = ( - D035731F22B5C1FC00F0920D /* TelegramApi.framework */, - D0CC4AD922BA46F30088F36D /* TelegramApiMac.framework */, - ); - name = Products; - sourceTree = ""; - }; - D035732122B5C1FC00F0920D /* Sources */ = { - isa = PBXGroup; - children = ( - D035734522B5C9BF00F0920D /* SecretApiLayer8.swift */, - D035734422B5C9BF00F0920D /* SecretApiLayer46.swift */, - D035734622B5C9BF00F0920D /* SecretApiLayer73.swift */, - 09E9601A22C2BE4900B13673 /* SecretApiLayer101.swift */, - D035733C22B5C39100F0920D /* DeserializeFunctionResponse.swift */, - D035733A22B5C31400F0920D /* TelegramApiLogger.swift */, - D035733822B5C2E200F0920D /* Buffer.swift */, - D035733022B5C29900F0920D /* Api0.swift */, - D035733222B5C29900F0920D /* Api1.swift */, - D035733122B5C29900F0920D /* Api2.swift */, - D035733322B5C29900F0920D /* Api3.swift */, - D035732222B5C1FC00F0920D /* TelegramApi.h */, - ); - path = Sources; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - D035731A22B5C1FC00F0920D /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D035732422B5C1FC00F0920D /* TelegramApi.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0CC4AC322BA46F30088F36D /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D0CC4AC422BA46F30088F36D /* TelegramApi.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - D035731E22B5C1FC00F0920D /* TelegramApi */ = { - isa = PBXNativeTarget; - buildConfigurationList = D035732722B5C1FC00F0920D /* Build configuration list for PBXNativeTarget "TelegramApi" */; - buildPhases = ( - D035731A22B5C1FC00F0920D /* Headers */, - D035731B22B5C1FC00F0920D /* Sources */, - D035731C22B5C1FC00F0920D /* Frameworks */, - D035731D22B5C1FC00F0920D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = TelegramApi; - productName = TelegramApi; - productReference = D035731F22B5C1FC00F0920D /* TelegramApi.framework */; - productType = "com.apple.product-type.framework"; - }; - D0CC4AC222BA46F30088F36D /* TelegramApiMac */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0CC4AD222BA46F30088F36D /* Build configuration list for PBXNativeTarget "TelegramApiMac" */; - buildPhases = ( - D0CC4AC322BA46F30088F36D /* Headers */, - D0CC4AC522BA46F30088F36D /* Sources */, - D0CC4AD022BA46F30088F36D /* Frameworks */, - D0CC4AD122BA46F30088F36D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = TelegramApiMac; - productName = TelegramApi; - productReference = D0CC4AD922BA46F30088F36D /* TelegramApiMac.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D035731622B5C1FC00F0920D /* Project object */ = { - isa = PBXProject; - attributes = { - DefaultBuildSystemTypeForWorkspace = Latest; - LastUpgradeCheck = 1010; - ORGANIZATIONNAME = "Telegram LLP"; - TargetAttributes = { - D035731E22B5C1FC00F0920D = { - CreatedOnToolsVersion = 10.1; - LastSwiftMigration = 1010; - }; - }; - }; - buildConfigurationList = D035731922B5C1FC00F0920D /* Build configuration list for PBXProject "TelegramApi_Xcode" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = D035731522B5C1FC00F0920D; - productRefGroup = D035732022B5C1FC00F0920D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - D035731E22B5C1FC00F0920D /* TelegramApi */, - D0CC4AC222BA46F30088F36D /* TelegramApiMac */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - D035731D22B5C1FC00F0920D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0CC4AD122BA46F30088F36D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - D035731B22B5C1FC00F0920D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D035734722B5C9BF00F0920D /* SecretApiLayer46.swift in Sources */, - D035733622B5C29900F0920D /* Api1.swift in Sources */, - D035733422B5C29900F0920D /* Api0.swift in Sources */, - D035733722B5C29900F0920D /* Api3.swift in Sources */, - D035734922B5C9BF00F0920D /* SecretApiLayer73.swift in Sources */, - D035733B22B5C31400F0920D /* TelegramApiLogger.swift in Sources */, - D035733922B5C2E200F0920D /* Buffer.swift in Sources */, - D035733D22B5C39100F0920D /* DeserializeFunctionResponse.swift in Sources */, - D035734822B5C9BF00F0920D /* SecretApiLayer8.swift in Sources */, - D035733522B5C29900F0920D /* Api2.swift in Sources */, - 09E9601B22C2BE4900B13673 /* SecretApiLayer101.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0CC4AC522BA46F30088F36D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D05FDC3A22CA453E0060BFE3 /* SecretApiLayer101.swift in Sources */, - D0CC4AC622BA46F30088F36D /* SecretApiLayer46.swift in Sources */, - D0CC4AC722BA46F30088F36D /* Api1.swift in Sources */, - D0CC4AC822BA46F30088F36D /* Api0.swift in Sources */, - D0CC4AC922BA46F30088F36D /* Api3.swift in Sources */, - D0CC4ACA22BA46F30088F36D /* SecretApiLayer73.swift in Sources */, - D0CC4ACB22BA46F30088F36D /* TelegramApiLogger.swift in Sources */, - D0CC4ACC22BA46F30088F36D /* Buffer.swift in Sources */, - D0CC4ACD22BA46F30088F36D /* DeserializeFunctionResponse.swift in Sources */, - D0CC4ACE22BA46F30088F36D /* SecretApiLayer8.swift in Sources */, - D0CC4ACF22BA46F30088F36D /* Api2.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - D0276B8422C17FAA003155D8 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStore; - }; - D0276B8522C17FAA003155D8 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseAppStore; - }; - D0276B8622C17FAA003155D8 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = macosx; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseAppStore; - }; - D0276B8722C17FB2003155D8 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyapp; - }; - D0276B8822C17FB2003155D8 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseHockeyapp; - }; - D0276B8922C17FB2003155D8 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = macosx; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseHockeyapp; - }; - D035732522B5C1FC00F0920D /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugHockeyapp; - }; - D035732622B5C1FC00F0920D /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyappInternal; - }; - D035732822B5C1FC00F0920D /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugHockeyapp; - }; - D035732922B5C1FC00F0920D /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseHockeyappInternal; - }; - D035732A22B5C23200F0920D /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStoreLLC; - }; - D035732B22B5C23200F0920D /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugAppStoreLLC; - }; - D035732C22B5C24100F0920D /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStoreLLC; - }; - D035732D22B5C24100F0920D /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseAppStoreLLC; - }; - D0CC4AA522BA44AD0088F36D /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStore; - }; - D0CC4AA622BA44AD0088F36D /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugAppStore; - }; - D0CC4AA722BA44B70088F36D /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = HockeyappMacAlpha; - }; - D0CC4AA822BA44B70088F36D /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = HockeyappMacAlpha; - }; - D0CC4AD322BA46F30088F36D /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugHockeyapp; - }; - D0CC4AD422BA46F30088F36D /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = HockeyappMacAlpha; - }; - D0CC4AD522BA46F30088F36D /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugAppStore; - }; - D0CC4AD622BA46F30088F36D /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugAppStoreLLC; - }; - D0CC4AD722BA46F30088F36D /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = macosx; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseHockeyappInternal; - }; - D0CC4AD822BA46F30088F36D /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramApi; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = macosx; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseAppStoreLLC; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - D035731922B5C1FC00F0920D /* Build configuration list for PBXProject "TelegramApi_Xcode" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D035732522B5C1FC00F0920D /* DebugHockeyapp */, - D0CC4AA722BA44B70088F36D /* HockeyappMacAlpha */, - D0CC4AA522BA44AD0088F36D /* DebugAppStore */, - D035732A22B5C23200F0920D /* DebugAppStoreLLC */, - D035732622B5C1FC00F0920D /* ReleaseHockeyappInternal */, - D035732C22B5C24100F0920D /* ReleaseAppStoreLLC */, - D0276B8422C17FAA003155D8 /* ReleaseAppStore */, - D0276B8722C17FB2003155D8 /* ReleaseHockeyapp */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseHockeyappInternal; - }; - D035732722B5C1FC00F0920D /* Build configuration list for PBXNativeTarget "TelegramApi" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D035732822B5C1FC00F0920D /* DebugHockeyapp */, - D0CC4AA822BA44B70088F36D /* HockeyappMacAlpha */, - D0CC4AA622BA44AD0088F36D /* DebugAppStore */, - D035732B22B5C23200F0920D /* DebugAppStoreLLC */, - D035732922B5C1FC00F0920D /* ReleaseHockeyappInternal */, - D035732D22B5C24100F0920D /* ReleaseAppStoreLLC */, - D0276B8522C17FAA003155D8 /* ReleaseAppStore */, - D0276B8822C17FB2003155D8 /* ReleaseHockeyapp */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseHockeyappInternal; - }; - D0CC4AD222BA46F30088F36D /* Build configuration list for PBXNativeTarget "TelegramApiMac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0CC4AD322BA46F30088F36D /* DebugHockeyapp */, - D0CC4AD422BA46F30088F36D /* HockeyappMacAlpha */, - D0CC4AD522BA46F30088F36D /* DebugAppStore */, - D0CC4AD622BA46F30088F36D /* DebugAppStoreLLC */, - D0CC4AD722BA46F30088F36D /* ReleaseHockeyappInternal */, - D0CC4AD822BA46F30088F36D /* ReleaseAppStoreLLC */, - D0276B8622C17FAA003155D8 /* ReleaseAppStore */, - D0276B8922C17FB2003155D8 /* ReleaseHockeyapp */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseHockeyappInternal; - }; -/* End XCConfigurationList section */ - }; - rootObject = D035731622B5C1FC00F0920D /* Project object */; -} diff --git a/submodules/TelegramAudio/Sources/ManagedAudioSession.swift b/submodules/TelegramAudio/Sources/ManagedAudioSession.swift index efa126565c..e6a81f2810 100644 --- a/submodules/TelegramAudio/Sources/ManagedAudioSession.swift +++ b/submodules/TelegramAudio/Sources/ManagedAudioSession.swift @@ -749,12 +749,20 @@ public final class ManagedAudioSession { private func activate() { if let (type, outputMode) = self.currentTypeAndOutputMode { do { + let startTime = CFAbsoluteTimeGetCurrent() + try AVAudioSession.sharedInstance().setActive(true, options: [.notifyOthersOnDeactivation]) + print("AudioSession activate: \((CFAbsoluteTimeGetCurrent() - startTime) * 1000.0) ms") + self.updateCurrentAudioRouteInfo() + print("AudioSession updateCurrentAudioRouteInfo: \((CFAbsoluteTimeGetCurrent() - startTime) * 1000.0) ms") + try self.setupOutputMode(outputMode, type: type) + print("AudioSession setupOutputMode: \((CFAbsoluteTimeGetCurrent() - startTime) * 1000.0) ms") + if case .voiceCall = type { try AVAudioSession.sharedInstance().setPreferredIOBufferDuration(0.005) } diff --git a/submodules/TelegramCore/Sources/AccessSecureId.swift b/submodules/TelegramCore/Sources/AccessSecureId.swift index 92f85bfc82..8800f0b254 100644 --- a/submodules/TelegramCore/Sources/AccessSecureId.swift +++ b/submodules/TelegramCore/Sources/AccessSecureId.swift @@ -1,17 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import MtProtoKitMac - import SwiftSignalKitMac -#else - import Postbox - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif - import SwiftSignalKit -#endif +import Postbox +import MtProtoKit +import SwiftSignalKit private enum GenerateSecureSecretError { case generic diff --git a/submodules/TelegramCore/Sources/Account.swift b/submodules/TelegramCore/Sources/Account.swift index bb884e5a9d..f1fecc8907 100644 --- a/submodules/TelegramCore/Sources/Account.swift +++ b/submodules/TelegramCore/Sources/Account.swift @@ -1,20 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif - import UIKit -#endif +import Postbox +import SwiftSignalKit +import MtProtoKit +import TelegramApi import SyncCore import EncryptionProvider @@ -685,9 +673,9 @@ public final class AccountAuxiliaryMethods { public let updatePeerChatInputState: (PeerChatInterfaceState?, SynchronizeableChatInputState?) -> PeerChatInterfaceState? public let fetchResource: (Account, MediaResource, Signal<[(Range, MediaBoxFetchPriority)], NoError>, MediaResourceFetchParameters?) -> Signal? public let fetchResourceMediaReferenceHash: (MediaResource) -> Signal - public let prepareSecretThumbnailData: (MediaResourceData) -> (CGSize, Data)? + public let prepareSecretThumbnailData: (MediaResourceData) -> (PixelDimensions, Data)? - public init(updatePeerChatInputState: @escaping (PeerChatInterfaceState?, SynchronizeableChatInputState?) -> PeerChatInterfaceState?, fetchResource: @escaping (Account, MediaResource, Signal<[(Range, MediaBoxFetchPriority)], NoError>, MediaResourceFetchParameters?) -> Signal?, fetchResourceMediaReferenceHash: @escaping (MediaResource) -> Signal, prepareSecretThumbnailData: @escaping (MediaResourceData) -> (CGSize, Data)?) { + public init(updatePeerChatInputState: @escaping (PeerChatInterfaceState?, SynchronizeableChatInputState?) -> PeerChatInterfaceState?, fetchResource: @escaping (Account, MediaResource, Signal<[(Range, MediaBoxFetchPriority)], NoError>, MediaResourceFetchParameters?) -> Signal?, fetchResourceMediaReferenceHash: @escaping (MediaResource) -> Signal, prepareSecretThumbnailData: @escaping (MediaResourceData) -> (PixelDimensions, Data)?) { self.updatePeerChatInputState = updatePeerChatInputState self.fetchResource = fetchResource self.fetchResourceMediaReferenceHash = fetchResourceMediaReferenceHash diff --git a/submodules/TelegramCore/Sources/AccountIntermediateState.swift b/submodules/TelegramCore/Sources/AccountIntermediateState.swift index a225b50f5f..41a9f05278 100644 --- a/submodules/TelegramCore/Sources/AccountIntermediateState.swift +++ b/submodules/TelegramCore/Sources/AccountIntermediateState.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/AccountManager.swift b/submodules/TelegramCore/Sources/AccountManager.swift index d0c071fe8d..1dd2d29748 100644 --- a/submodules/TelegramCore/Sources/AccountManager.swift +++ b/submodules/TelegramCore/Sources/AccountManager.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/AccountState.swift b/submodules/TelegramCore/Sources/AccountState.swift index 074c926b38..8d5956e6ea 100644 --- a/submodules/TelegramCore/Sources/AccountState.swift +++ b/submodules/TelegramCore/Sources/AccountState.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift b/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift index b159425fe9..dc9f3f6f5f 100644 --- a/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift +++ b/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/AccountStateManager.swift b/submodules/TelegramCore/Sources/AccountStateManager.swift index 367650344f..0b70467eb2 100644 --- a/submodules/TelegramCore/Sources/AccountStateManager.swift +++ b/submodules/TelegramCore/Sources/AccountStateManager.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore @@ -41,11 +30,7 @@ private enum AccountStateManagerAddOperationPosition { case last } -#if os(macOS) - private typealias SignalKitTimer = SwiftSignalKitMac.Timer -#else - private typealias SignalKitTimer = SwiftSignalKit.Timer -#endif +private typealias SignalKitTimer = SwiftSignalKit.Timer private enum CustomOperationEvent { case Next(T) diff --git a/submodules/TelegramCore/Sources/AccountStateReset.swift b/submodules/TelegramCore/Sources/AccountStateReset.swift index 3c3f49d531..02d0d22972 100644 --- a/submodules/TelegramCore/Sources/AccountStateReset.swift +++ b/submodules/TelegramCore/Sources/AccountStateReset.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/AccountViewTracker.swift b/submodules/TelegramCore/Sources/AccountViewTracker.swift index 479ba6c3df..02275089c9 100644 --- a/submodules/TelegramCore/Sources/AccountViewTracker.swift +++ b/submodules/TelegramCore/Sources/AccountViewTracker.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ActiveSessionsContext.swift b/submodules/TelegramCore/Sources/ActiveSessionsContext.swift index b71f867c9b..7beeaba0a8 100644 --- a/submodules/TelegramCore/Sources/ActiveSessionsContext.swift +++ b/submodules/TelegramCore/Sources/ActiveSessionsContext.swift @@ -1,17 +1,7 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -#else import Postbox import SwiftSignalKit -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit public struct ActiveSessionsContextState: Equatable { public var isLoadingMore: Bool diff --git a/submodules/TelegramCore/Sources/AddPeerMember.swift b/submodules/TelegramCore/Sources/AddPeerMember.swift index 693592c196..5b3b6cac71 100644 --- a/submodules/TelegramCore/Sources/AddPeerMember.swift +++ b/submodules/TelegramCore/Sources/AddPeerMember.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/AddressNames.swift b/submodules/TelegramCore/Sources/AddressNames.swift index 7a620736ee..d98ddd5239 100644 --- a/submodules/TelegramCore/Sources/AddressNames.swift +++ b/submodules/TelegramCore/Sources/AddressNames.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ApiGroupOrChannel.swift b/submodules/TelegramCore/Sources/ApiGroupOrChannel.swift index 2822810631..f930f5b555 100644 --- a/submodules/TelegramCore/Sources/ApiGroupOrChannel.swift +++ b/submodules/TelegramCore/Sources/ApiGroupOrChannel.swift @@ -1,12 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import UIKit - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore @@ -25,8 +19,8 @@ func imageRepresentationsForApiChatPhoto(_ photo: Api.ChatPhoto) -> [TelegramMed case let .fileLocationToBeDeprecated(volumeId, localId): fullSizeResource = CloudPeerPhotoSizeMediaResource(datacenterId: dcId, sizeSpec: .fullSize, volumeId: volumeId, localId: localId) } - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: 80.0, height: 80.0), resource: smallResource)) - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: 640.0, height: 640.0), resource: fullSizeResource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 80, height: 80), resource: smallResource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 640, height: 640), resource: fullSizeResource)) case .chatPhotoEmpty: break } diff --git a/submodules/TelegramCore/Sources/ApiUtils.swift b/submodules/TelegramCore/Sources/ApiUtils.swift index 7a0b867860..8b4b19cb23 100644 --- a/submodules/TelegramCore/Sources/ApiUtils.swift +++ b/submodules/TelegramCore/Sources/ApiUtils.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import PostboxMac -import TelegramApiMac -#else import Postbox import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/AppChangelog.swift b/submodules/TelegramCore/Sources/AppChangelog.swift index d3febb325a..cde72fe2d7 100644 --- a/submodules/TelegramCore/Sources/AppChangelog.swift +++ b/submodules/TelegramCore/Sources/AppChangelog.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import Postbox -import TelegramApi import SwiftSignalKit - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/AppChangelogState.swift b/submodules/TelegramCore/Sources/AppChangelogState.swift index 71d57ee213..8e229d22fc 100644 --- a/submodules/TelegramCore/Sources/AppChangelogState.swift +++ b/submodules/TelegramCore/Sources/AppChangelogState.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -#else import Postbox import SwiftSignalKit import MtProtoKit -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/AppUpdate.swift b/submodules/TelegramCore/Sources/AppUpdate.swift index fa6fc6dfbe..5ab4dc5c7d 100644 --- a/submodules/TelegramCore/Sources/AppUpdate.swift +++ b/submodules/TelegramCore/Sources/AppUpdate.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import MtProtoKit +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/ApplyMaxReadIndexInteractively.swift b/submodules/TelegramCore/Sources/ApplyMaxReadIndexInteractively.swift index 0f178c3fcf..c75b823b79 100644 --- a/submodules/TelegramCore/Sources/ApplyMaxReadIndexInteractively.swift +++ b/submodules/TelegramCore/Sources/ApplyMaxReadIndexInteractively.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ApplyUpdateMessage.swift b/submodules/TelegramCore/Sources/ApplyUpdateMessage.swift index 307c6b8665..21480f45a2 100644 --- a/submodules/TelegramCore/Sources/ApplyUpdateMessage.swift +++ b/submodules/TelegramCore/Sources/ApplyUpdateMessage.swift @@ -1,14 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import TelegramApi - import Postbox - import SwiftSignalKit - import UIKit -#endif +import TelegramApi +import Postbox +import SwiftSignalKit import SyncCore @@ -16,7 +9,7 @@ func applyMediaResourceChanges(from: Media, to: Media, postbox: Postbox) { if let fromImage = from as? TelegramMediaImage, let toImage = to as? TelegramMediaImage { let fromSmallestRepresentation = smallestImageRepresentation(fromImage.representations) if let fromSmallestRepresentation = fromSmallestRepresentation, let toSmallestRepresentation = smallestImageRepresentation(toImage.representations) { - let leeway: CGFloat = 4.0 + let leeway: Int32 = 4 let widthDifference = fromSmallestRepresentation.dimensions.width - toSmallestRepresentation.dimensions.width let heightDifference = fromSmallestRepresentation.dimensions.height - toSmallestRepresentation.dimensions.height if abs(widthDifference) < leeway && abs(heightDifference) < leeway { diff --git a/submodules/TelegramCore/Sources/ArchivedStickerPacks.swift b/submodules/TelegramCore/Sources/ArchivedStickerPacks.swift index 686fb20863..396145132c 100644 --- a/submodules/TelegramCore/Sources/ArchivedStickerPacks.swift +++ b/submodules/TelegramCore/Sources/ArchivedStickerPacks.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/Authorization.swift b/submodules/TelegramCore/Sources/Authorization.swift index 12897b5599..6708108d95 100644 --- a/submodules/TelegramCore/Sources/Authorization.swift +++ b/submodules/TelegramCore/Sources/Authorization.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/AutodownloadSettings.swift b/submodules/TelegramCore/Sources/AutodownloadSettings.swift index dde6126a1d..141a6ac9d1 100644 --- a/submodules/TelegramCore/Sources/AutodownloadSettings.swift +++ b/submodules/TelegramCore/Sources/AutodownloadSettings.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/BlockedPeers.swift b/submodules/TelegramCore/Sources/BlockedPeers.swift index c94525d68f..984b00388b 100644 --- a/submodules/TelegramCore/Sources/BlockedPeers.swift +++ b/submodules/TelegramCore/Sources/BlockedPeers.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/BlockedPeersContext.swift b/submodules/TelegramCore/Sources/BlockedPeersContext.swift index 6e323724b3..47841eb2c9 100644 --- a/submodules/TelegramCore/Sources/BlockedPeersContext.swift +++ b/submodules/TelegramCore/Sources/BlockedPeersContext.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import TelegramApi import Postbox import SwiftSignalKit -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/BotInfo.swift b/submodules/TelegramCore/Sources/BotInfo.swift index 2a471286f3..f39d6b38af 100644 --- a/submodules/TelegramCore/Sources/BotInfo.swift +++ b/submodules/TelegramCore/Sources/BotInfo.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/BotPaymentForm.swift b/submodules/TelegramCore/Sources/BotPaymentForm.swift index ba891678ae..92c69c949c 100644 --- a/submodules/TelegramCore/Sources/BotPaymentForm.swift +++ b/submodules/TelegramCore/Sources/BotPaymentForm.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import MtProtoKitMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif - import SwiftSignalKit -#endif +import Postbox +import MtProtoKit +import SwiftSignalKit +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/CacheStorageSettings.swift b/submodules/TelegramCore/Sources/CacheStorageSettings.swift index 85d691dee6..5253e81003 100644 --- a/submodules/TelegramCore/Sources/CacheStorageSettings.swift +++ b/submodules/TelegramCore/Sources/CacheStorageSettings.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/CachedChannelData.swift b/submodules/TelegramCore/Sources/CachedChannelData.swift index 0c293d7b98..bb8b4e580c 100644 --- a/submodules/TelegramCore/Sources/CachedChannelData.swift +++ b/submodules/TelegramCore/Sources/CachedChannelData.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/CachedChannelParticipants.swift b/submodules/TelegramCore/Sources/CachedChannelParticipants.swift index d9eda4b38e..8b6b1b79d8 100644 --- a/submodules/TelegramCore/Sources/CachedChannelParticipants.swift +++ b/submodules/TelegramCore/Sources/CachedChannelParticipants.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/CachedGroupParticipants.swift b/submodules/TelegramCore/Sources/CachedGroupParticipants.swift index 648971e628..ceb0b1839c 100644 --- a/submodules/TelegramCore/Sources/CachedGroupParticipants.swift +++ b/submodules/TelegramCore/Sources/CachedGroupParticipants.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/CachedSentMediaReferences.swift b/submodules/TelegramCore/Sources/CachedSentMediaReferences.swift index 47d9a9c5d7..bd975a161d 100644 --- a/submodules/TelegramCore/Sources/CachedSentMediaReferences.swift +++ b/submodules/TelegramCore/Sources/CachedSentMediaReferences.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/CachedStickerPack.swift b/submodules/TelegramCore/Sources/CachedStickerPack.swift index d9c8e5f2f4..00f7a95fc4 100644 --- a/submodules/TelegramCore/Sources/CachedStickerPack.swift +++ b/submodules/TelegramCore/Sources/CachedStickerPack.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/CallSessionManager.swift b/submodules/TelegramCore/Sources/CallSessionManager.swift index b070067629..ccef1bc02e 100644 --- a/submodules/TelegramCore/Sources/CallSessionManager.swift +++ b/submodules/TelegramCore/Sources/CallSessionManager.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import MtProtoKitMac -import SwiftSignalKitMac -import TelegramApiMac -#else import Postbox -import TelegramApi -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif +import MtProtoKit import SwiftSignalKit -#endif +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/CanSendMessagesToPeer.swift b/submodules/TelegramCore/Sources/CanSendMessagesToPeer.swift index cb13ee91f2..49fecd5af5 100644 --- a/submodules/TelegramCore/Sources/CanSendMessagesToPeer.swift +++ b/submodules/TelegramCore/Sources/CanSendMessagesToPeer.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox import SyncCore diff --git a/submodules/TelegramCore/Sources/CancelAccountReset.swift b/submodules/TelegramCore/Sources/CancelAccountReset.swift index c2d3e65e9d..b4ea9e3810 100644 --- a/submodules/TelegramCore/Sources/CancelAccountReset.swift +++ b/submodules/TelegramCore/Sources/CancelAccountReset.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import TelegramApi import Postbox import SwiftSignalKit -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ChangeAccountPhoneNumber.swift b/submodules/TelegramCore/Sources/ChangeAccountPhoneNumber.swift index 1ad85b8b42..ead9b86134 100644 --- a/submodules/TelegramCore/Sources/ChangeAccountPhoneNumber.swift +++ b/submodules/TelegramCore/Sources/ChangeAccountPhoneNumber.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ChangePeerNotificationSettings.swift b/submodules/TelegramCore/Sources/ChangePeerNotificationSettings.swift index 757e9932e6..163ffe3637 100644 --- a/submodules/TelegramCore/Sources/ChangePeerNotificationSettings.swift +++ b/submodules/TelegramCore/Sources/ChangePeerNotificationSettings.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ChannelAdminEventLogContext.swift b/submodules/TelegramCore/Sources/ChannelAdminEventLogContext.swift index 08a91cf544..965bc9a765 100644 --- a/submodules/TelegramCore/Sources/ChannelAdminEventLogContext.swift +++ b/submodules/TelegramCore/Sources/ChannelAdminEventLogContext.swift @@ -1,10 +1,5 @@ -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit public struct ChannelAdminEventLogEntry: Comparable { public let stableId: UInt32 diff --git a/submodules/TelegramCore/Sources/ChannelAdminEventLogs.swift b/submodules/TelegramCore/Sources/ChannelAdminEventLogs.swift index f9cc410b83..5d3ec84adc 100644 --- a/submodules/TelegramCore/Sources/ChannelAdminEventLogs.swift +++ b/submodules/TelegramCore/Sources/ChannelAdminEventLogs.swift @@ -1,18 +1,7 @@ -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ChannelAdmins.swift b/submodules/TelegramCore/Sources/ChannelAdmins.swift index 955cee3886..10d4591c3c 100644 --- a/submodules/TelegramCore/Sources/ChannelAdmins.swift +++ b/submodules/TelegramCore/Sources/ChannelAdmins.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ChannelBlacklist.swift b/submodules/TelegramCore/Sources/ChannelBlacklist.swift index c0c8be64ff..db3eb8c9f6 100644 --- a/submodules/TelegramCore/Sources/ChannelBlacklist.swift +++ b/submodules/TelegramCore/Sources/ChannelBlacklist.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ChannelCreation.swift b/submodules/TelegramCore/Sources/ChannelCreation.swift index 04e5eb9d0f..4fbe458d0d 100644 --- a/submodules/TelegramCore/Sources/ChannelCreation.swift +++ b/submodules/TelegramCore/Sources/ChannelCreation.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit public enum CreateChannelError { case generic diff --git a/submodules/TelegramCore/Sources/ChannelHistoryAvailabilitySettings.swift b/submodules/TelegramCore/Sources/ChannelHistoryAvailabilitySettings.swift index b4c2946403..3d05721897 100644 --- a/submodules/TelegramCore/Sources/ChannelHistoryAvailabilitySettings.swift +++ b/submodules/TelegramCore/Sources/ChannelHistoryAvailabilitySettings.swift @@ -1,12 +1,6 @@ -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ChannelMembers.swift b/submodules/TelegramCore/Sources/ChannelMembers.swift index 28d51d41f0..e2bcdf9e5f 100644 --- a/submodules/TelegramCore/Sources/ChannelMembers.swift +++ b/submodules/TelegramCore/Sources/ChannelMembers.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ChannelOwnershipTransfer.swift b/submodules/TelegramCore/Sources/ChannelOwnershipTransfer.swift index 4da968c512..b66c178ffb 100644 --- a/submodules/TelegramCore/Sources/ChannelOwnershipTransfer.swift +++ b/submodules/TelegramCore/Sources/ChannelOwnershipTransfer.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -import PostboxMac -import TelegramApiMac -#else import SwiftSignalKit import Postbox import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/ChannelParticipants.swift b/submodules/TelegramCore/Sources/ChannelParticipants.swift index 77796e0a20..e3fb732676 100644 --- a/submodules/TelegramCore/Sources/ChannelParticipants.swift +++ b/submodules/TelegramCore/Sources/ChannelParticipants.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ChannelState.swift b/submodules/TelegramCore/Sources/ChannelState.swift index 490f597857..504cd68f65 100644 --- a/submodules/TelegramCore/Sources/ChannelState.swift +++ b/submodules/TelegramCore/Sources/ChannelState.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/ChannelStats.swift b/submodules/TelegramCore/Sources/ChannelStats.swift index 29bcdb4731..216598a7ef 100644 --- a/submodules/TelegramCore/Sources/ChannelStats.swift +++ b/submodules/TelegramCore/Sources/ChannelStats.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -import PostboxMac -import TelegramApiMac -#else import SwiftSignalKit import Postbox import TelegramApi -#endif public enum ChannelStatsUrlError { case generic diff --git a/submodules/TelegramCore/Sources/ChatContextResult.swift b/submodules/TelegramCore/Sources/ChatContextResult.swift index f0486de13f..4e88a72936 100644 --- a/submodules/TelegramCore/Sources/ChatContextResult.swift +++ b/submodules/TelegramCore/Sources/ChatContextResult.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ChatHistoryPreloadManager.swift b/submodules/TelegramCore/Sources/ChatHistoryPreloadManager.swift index e386f32ddb..907ded383c 100644 --- a/submodules/TelegramCore/Sources/ChatHistoryPreloadManager.swift +++ b/submodules/TelegramCore/Sources/ChatHistoryPreloadManager.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ChatOnlineMembers.swift b/submodules/TelegramCore/Sources/ChatOnlineMembers.swift index 1689e5d350..6be97c6046 100644 --- a/submodules/TelegramCore/Sources/ChatOnlineMembers.swift +++ b/submodules/TelegramCore/Sources/ChatOnlineMembers.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -import PostboxMac -import TelegramApiMac -#else import SwiftSignalKit import Postbox import TelegramApi -#endif public func chatOnlineMembers(postbox: Postbox, network: Network, peerId: PeerId) -> Signal { return postbox.transaction { transaction -> Api.InputPeer? in diff --git a/submodules/TelegramCore/Sources/CheckPeerChatServiceActions.swift b/submodules/TelegramCore/Sources/CheckPeerChatServiceActions.swift index 07b82cbbd0..d72f1b809a 100644 --- a/submodules/TelegramCore/Sources/CheckPeerChatServiceActions.swift +++ b/submodules/TelegramCore/Sources/CheckPeerChatServiceActions.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ClearCloudDrafts.swift b/submodules/TelegramCore/Sources/ClearCloudDrafts.swift index cacb4354a8..7a5038ce2e 100644 --- a/submodules/TelegramCore/Sources/ClearCloudDrafts.swift +++ b/submodules/TelegramCore/Sources/ClearCloudDrafts.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import TelegramApiMac -#else import Postbox import SwiftSignalKit import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/CloudFileMediaResource.swift b/submodules/TelegramCore/Sources/CloudFileMediaResource.swift index a90846e2d3..71a2ac6b6a 100644 --- a/submodules/TelegramCore/Sources/CloudFileMediaResource.swift +++ b/submodules/TelegramCore/Sources/CloudFileMediaResource.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/CollectCacheUsageStats.swift b/submodules/TelegramCore/Sources/CollectCacheUsageStats.swift index 5d0caf84b8..1c3bc503de 100644 --- a/submodules/TelegramCore/Sources/CollectCacheUsageStats.swift +++ b/submodules/TelegramCore/Sources/CollectCacheUsageStats.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ConfirmTwoStepRecoveryEmail.swift b/submodules/TelegramCore/Sources/ConfirmTwoStepRecoveryEmail.swift index b41c81ed52..dcc5c4433f 100644 --- a/submodules/TelegramCore/Sources/ConfirmTwoStepRecoveryEmail.swift +++ b/submodules/TelegramCore/Sources/ConfirmTwoStepRecoveryEmail.swift @@ -1,17 +1,7 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import SwiftSignalKit +import MtProtoKit import TelegramApi -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif public enum ConfirmTwoStepRecoveryEmailError { diff --git a/submodules/TelegramCore/Sources/ContactManagement.swift b/submodules/TelegramCore/Sources/ContactManagement.swift index 7afd214e68..bf5d391db8 100644 --- a/submodules/TelegramCore/Sources/ContactManagement.swift +++ b/submodules/TelegramCore/Sources/ContactManagement.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import TelegramApi - import Postbox - import SwiftSignalKit -#endif +import TelegramApi +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ContactSyncManager.swift b/submodules/TelegramCore/Sources/ContactSyncManager.swift index d6434ff194..83b1d3db2a 100644 --- a/submodules/TelegramCore/Sources/ContactSyncManager.swift +++ b/submodules/TelegramCore/Sources/ContactSyncManager.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import TelegramApiMac -#else import Postbox import SwiftSignalKit import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/ContentPrivacySettings.swift b/submodules/TelegramCore/Sources/ContentPrivacySettings.swift index 478a44a6a6..8fade1383e 100644 --- a/submodules/TelegramCore/Sources/ContentPrivacySettings.swift +++ b/submodules/TelegramCore/Sources/ContentPrivacySettings.swift @@ -1,17 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac -#else - import Postbox - import SwiftSignalKit - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ConvertGroupToSupergroup.swift b/submodules/TelegramCore/Sources/ConvertGroupToSupergroup.swift index 33924cb7f7..24f8414de1 100644 --- a/submodules/TelegramCore/Sources/ConvertGroupToSupergroup.swift +++ b/submodules/TelegramCore/Sources/ConvertGroupToSupergroup.swift @@ -1,54 +1,48 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit public enum ConvertGroupToSupergroupError { case generic + case tooManyChannels } public func convertGroupToSupergroup(account: Account, peerId: PeerId) -> Signal { return account.network.request(Api.functions.messages.migrateChat(chatId: peerId.id)) - |> mapError { error -> ConvertGroupToSupergroupError in + |> mapError { error -> ConvertGroupToSupergroupError in + if error.errorDescription == "CHANNELS_TOO_MUCH" { + return .tooManyChannels + } else { return .generic } - |> timeout(5.0, queue: Queue.concurrentDefaultQueue(), alternate: .fail(.generic)) - |> mapToSignal { updates -> Signal in - account.stateManager.addUpdates(updates) - var createdPeerId: PeerId? - for message in updates.messages { - if apiMessagePeerId(message) != peerId { - createdPeerId = apiMessagePeerId(message) - break - } + } + |> timeout(5.0, queue: Queue.concurrentDefaultQueue(), alternate: .fail(.generic)) + |> mapToSignal { updates -> Signal in + account.stateManager.addUpdates(updates) + var createdPeerId: PeerId? + for message in updates.messages { + if apiMessagePeerId(message) != peerId { + createdPeerId = apiMessagePeerId(message) + break } - - if let createdPeerId = createdPeerId { - return account.postbox.multiplePeersView([createdPeerId]) - |> filter { view in - return view.peers[createdPeerId] != nil - } - |> take(1) - |> map { _ in - return createdPeerId - } - |> mapError { _ -> ConvertGroupToSupergroupError in - return .generic - } - |> timeout(5.0, queue: Queue.concurrentDefaultQueue(), alternate: .fail(.generic)) - } - return .fail(.generic) } + + if let createdPeerId = createdPeerId { + return account.postbox.multiplePeersView([createdPeerId]) + |> filter { view in + return view.peers[createdPeerId] != nil + } + |> take(1) + |> map { _ in + return createdPeerId + } + |> mapError { _ -> ConvertGroupToSupergroupError in + return .generic + } + |> timeout(5.0, queue: Queue.concurrentDefaultQueue(), alternate: .fail(.generic)) + } + return .fail(.generic) + } } diff --git a/submodules/TelegramCore/Sources/CoreSettings.swift b/submodules/TelegramCore/Sources/CoreSettings.swift index 9d5fcd7c3f..6fed549367 100644 --- a/submodules/TelegramCore/Sources/CoreSettings.swift +++ b/submodules/TelegramCore/Sources/CoreSettings.swift @@ -1,17 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac -#else - import Postbox - import SwiftSignalKit - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/CreateGroup.swift b/submodules/TelegramCore/Sources/CreateGroup.swift index 7e9af71004..ec68df3240 100644 --- a/submodules/TelegramCore/Sources/CreateGroup.swift +++ b/submodules/TelegramCore/Sources/CreateGroup.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit public enum CreateGroupError { case generic diff --git a/submodules/TelegramCore/Sources/CreateSecretChat.swift b/submodules/TelegramCore/Sources/CreateSecretChat.swift index 8c45695434..af89fe7793 100644 --- a/submodules/TelegramCore/Sources/CreateSecretChat.swift +++ b/submodules/TelegramCore/Sources/CreateSecretChat.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit public enum CreateSecretChatError { case generic diff --git a/submodules/TelegramCore/Sources/DecryptedResourceData.swift b/submodules/TelegramCore/Sources/DecryptedResourceData.swift index 238bfe8b80..3d12912b66 100644 --- a/submodules/TelegramCore/Sources/DecryptedResourceData.swift +++ b/submodules/TelegramCore/Sources/DecryptedResourceData.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public func decryptedResourceData(data: MediaResourceData, resource: MediaResource, params: Any) -> Data? { guard data.complete else { diff --git a/submodules/TelegramCore/Sources/DeepLinkInfo.swift b/submodules/TelegramCore/Sources/DeepLinkInfo.swift index f9432ad501..c56272ad08 100644 --- a/submodules/TelegramCore/Sources/DeepLinkInfo.swift +++ b/submodules/TelegramCore/Sources/DeepLinkInfo.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -import TelegramApiMac -#else import SwiftSignalKit import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/DeleteAccount.swift b/submodules/TelegramCore/Sources/DeleteAccount.swift index 336862467f..6ef229ca72 100644 --- a/submodules/TelegramCore/Sources/DeleteAccount.swift +++ b/submodules/TelegramCore/Sources/DeleteAccount.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -import PostboxMac -import TelegramApiMac -#else import SwiftSignalKit import Postbox import TelegramApi -#endif public enum DeleteAccountError { case generic diff --git a/submodules/TelegramCore/Sources/DeleteMessages.swift b/submodules/TelegramCore/Sources/DeleteMessages.swift index b0636ba150..e271570313 100644 --- a/submodules/TelegramCore/Sources/DeleteMessages.swift +++ b/submodules/TelegramCore/Sources/DeleteMessages.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -#else import Postbox import SwiftSignalKit -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/DeleteMessagesInteractively.swift b/submodules/TelegramCore/Sources/DeleteMessagesInteractively.swift index e98bf4e555..dd3c1fe45d 100644 --- a/submodules/TelegramCore/Sources/DeleteMessagesInteractively.swift +++ b/submodules/TelegramCore/Sources/DeleteMessagesInteractively.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/DeviceContact.swift b/submodules/TelegramCore/Sources/DeviceContact.swift index 2343224b67..47ef63c7e3 100644 --- a/submodules/TelegramCore/Sources/DeviceContact.swift +++ b/submodules/TelegramCore/Sources/DeviceContact.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import PostboxMac -#else import Postbox -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/Download.swift b/submodules/TelegramCore/Sources/Download.swift index 472806c414..e9b2e207f8 100644 --- a/submodules/TelegramCore/Sources/Download.swift +++ b/submodules/TelegramCore/Sources/Download.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import MtProtoKitMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif - import SwiftSignalKit -#endif +import Postbox +import MtProtoKit +import SwiftSignalKit +import TelegramApi private func roundUp(_ value: Int, to multiple: Int) -> Int { if multiple == 0 { @@ -119,6 +108,10 @@ class Download: NSObject, MTRequestMessageServiceDelegate { request.dependsOnPasswordEntry = false + request.shouldContinueExecutionWithErrorContext = { errorContext in + return true + } + request.completed = { (boxedResponse, timestamp, error) -> () in if let error = error { subscriber.putError(error) @@ -163,6 +156,10 @@ class Download: NSObject, MTRequestMessageServiceDelegate { request.dependsOnPasswordEntry = false + request.shouldContinueExecutionWithErrorContext = { errorContext in + return true + } + request.completed = { (boxedResponse, timestamp, error) -> () in if let error = error { subscriber.putError(error) @@ -210,6 +207,10 @@ class Download: NSObject, MTRequestMessageServiceDelegate { request.dependsOnPasswordEntry = false + request.shouldContinueExecutionWithErrorContext = { errorContext in + return true + } + request.completed = { (boxedResponse, timestamp, error) -> () in if let error = error { subscriber.putError(error) @@ -253,6 +254,10 @@ class Download: NSObject, MTRequestMessageServiceDelegate { request.dependsOnPasswordEntry = false + request.shouldContinueExecutionWithErrorContext = { errorContext in + return true + } + request.completed = { (boxedResponse, timestamp, error) -> () in if let error = error { subscriber.putError(error) @@ -291,6 +296,10 @@ class Download: NSObject, MTRequestMessageServiceDelegate { request.dependsOnPasswordEntry = false + request.shouldContinueExecutionWithErrorContext = { errorContext in + return true + } + request.completed = { (boxedResponse, timestamp, error) -> () in if let error = error { subscriber.putError(error) diff --git a/submodules/TelegramCore/Sources/EarliestUnseenPersonalMentionMessage.swift b/submodules/TelegramCore/Sources/EarliestUnseenPersonalMentionMessage.swift index 59e12df2de..1a776e92da 100644 --- a/submodules/TelegramCore/Sources/EarliestUnseenPersonalMentionMessage.swift +++ b/submodules/TelegramCore/Sources/EarliestUnseenPersonalMentionMessage.swift @@ -1,17 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac -#else - import Postbox - import SwiftSignalKit - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/EmojiKeywords.swift b/submodules/TelegramCore/Sources/EmojiKeywords.swift index 9c34d89fb5..03f7d35eb8 100644 --- a/submodules/TelegramCore/Sources/EmojiKeywords.swift +++ b/submodules/TelegramCore/Sources/EmojiKeywords.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -#else import Postbox import SwiftSignalKit -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/EnqueueMessage.swift b/submodules/TelegramCore/Sources/EnqueueMessage.swift index 17c715bbd3..4900cfc999 100644 --- a/submodules/TelegramCore/Sources/EnqueueMessage.swift +++ b/submodules/TelegramCore/Sources/EnqueueMessage.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ExportMessageLink.swift b/submodules/TelegramCore/Sources/ExportMessageLink.swift index ce3d309dec..75be0fce4c 100644 --- a/submodules/TelegramCore/Sources/ExportMessageLink.swift +++ b/submodules/TelegramCore/Sources/ExportMessageLink.swift @@ -1,13 +1,7 @@ -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit public func exportMessageLink(account: Account, peerId: PeerId, messageId: MessageId) -> Signal { return account.postbox.transaction { transaction -> Peer? in diff --git a/submodules/TelegramCore/Sources/ExportedInvitation.swift b/submodules/TelegramCore/Sources/ExportedInvitation.swift index 0a01853a77..ec0b1d3dfc 100644 --- a/submodules/TelegramCore/Sources/ExportedInvitation.swift +++ b/submodules/TelegramCore/Sources/ExportedInvitation.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/Fetch.swift b/submodules/TelegramCore/Sources/Fetch.swift index d88db40a36..34b3a5c0c8 100644 --- a/submodules/TelegramCore/Sources/Fetch.swift +++ b/submodules/TelegramCore/Sources/Fetch.swift @@ -1,11 +1,8 @@ import Foundation - -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -#else import Postbox import SwiftSignalKit + +#if os(iOS) import Photos #endif diff --git a/submodules/TelegramCore/Sources/FetchChatList.swift b/submodules/TelegramCore/Sources/FetchChatList.swift index 63a2b83545..5f957e8447 100644 --- a/submodules/TelegramCore/Sources/FetchChatList.swift +++ b/submodules/TelegramCore/Sources/FetchChatList.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/FetchHttpResource.swift b/submodules/TelegramCore/Sources/FetchHttpResource.swift index 1306387511..2f706e618a 100644 --- a/submodules/TelegramCore/Sources/FetchHttpResource.swift +++ b/submodules/TelegramCore/Sources/FetchHttpResource.swift @@ -1,17 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac -#else - import Postbox - import SwiftSignalKit - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import MtProtoKit public func fetchHttpResource(url: String) -> Signal { if let url = URL(string: url) { diff --git a/submodules/TelegramCore/Sources/FetchSecretFileResource.swift b/submodules/TelegramCore/Sources/FetchSecretFileResource.swift index d9e808219f..2de2c1caa1 100644 --- a/submodules/TelegramCore/Sources/FetchSecretFileResource.swift +++ b/submodules/TelegramCore/Sources/FetchSecretFileResource.swift @@ -1,17 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac -#else - import Postbox - import SwiftSignalKit - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/FetchedMediaResource.swift b/submodules/TelegramCore/Sources/FetchedMediaResource.swift index 2647c14389..baed487729 100644 --- a/submodules/TelegramCore/Sources/FetchedMediaResource.swift +++ b/submodules/TelegramCore/Sources/FetchedMediaResource.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -#else import Postbox import SwiftSignalKit -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/FindChannelById.swift b/submodules/TelegramCore/Sources/FindChannelById.swift index e0b7d0fadf..ec269da970 100644 --- a/submodules/TelegramCore/Sources/FindChannelById.swift +++ b/submodules/TelegramCore/Sources/FindChannelById.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -import PostboxMac -import TelegramApiMac -#else import SwiftSignalKit import Postbox import TelegramApi -#endif public func findChannelById(postbox: Postbox, network: Network, channelId: Int32) -> Signal { return network.request(Api.functions.channels.getChannels(id: [.inputChannel(channelId: channelId, accessHash: 0)])) diff --git a/submodules/TelegramCore/Sources/ForwardGame.swift b/submodules/TelegramCore/Sources/ForwardGame.swift index c2facd228f..93dcd7b540 100644 --- a/submodules/TelegramCore/Sources/ForwardGame.swift +++ b/submodules/TelegramCore/Sources/ForwardGame.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit public func forwardGameWithScore(account: Account, messageId: MessageId, to peerId: PeerId) -> Signal { return account.postbox.transaction { transaction -> Signal in diff --git a/submodules/TelegramCore/Sources/GlobalNotificationSettings.swift b/submodules/TelegramCore/Sources/GlobalNotificationSettings.swift index 60b985f39a..5b10b8ac7d 100644 --- a/submodules/TelegramCore/Sources/GlobalNotificationSettings.swift +++ b/submodules/TelegramCore/Sources/GlobalNotificationSettings.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/GrantSecureIdAccess.swift b/submodules/TelegramCore/Sources/GrantSecureIdAccess.swift index b9e9c6a65e..ef93a7ac0f 100644 --- a/submodules/TelegramCore/Sources/GrantSecureIdAccess.swift +++ b/submodules/TelegramCore/Sources/GrantSecureIdAccess.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import MtProtoKitMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif - import SwiftSignalKit -#endif +import Postbox +import MtProtoKit +import SwiftSignalKit +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/GroupReturnAndLeft.swift b/submodules/TelegramCore/Sources/GroupReturnAndLeft.swift index 6606d85d5a..cd73a70abd 100644 --- a/submodules/TelegramCore/Sources/GroupReturnAndLeft.swift +++ b/submodules/TelegramCore/Sources/GroupReturnAndLeft.swift @@ -1,19 +1,8 @@ -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit public func returnGroup(account: Account, peerId: PeerId) -> Signal { return account.postbox.loadedPeerWithId(account.peerId) diff --git a/submodules/TelegramCore/Sources/GroupsInCommon.swift b/submodules/TelegramCore/Sources/GroupsInCommon.swift index 64a91fe6dc..a81c7c9213 100644 --- a/submodules/TelegramCore/Sources/GroupsInCommon.swift +++ b/submodules/TelegramCore/Sources/GroupsInCommon.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit public func groupsInCommon(account:Account, peerId:PeerId) -> Signal<[PeerId], NoError> { return account.postbox.transaction { transaction -> Signal<[PeerId], NoError> in diff --git a/submodules/TelegramCore/Sources/HistoryViewStateValidation.swift b/submodules/TelegramCore/Sources/HistoryViewStateValidation.swift index 29e86a3631..be92a00e73 100644 --- a/submodules/TelegramCore/Sources/HistoryViewStateValidation.swift +++ b/submodules/TelegramCore/Sources/HistoryViewStateValidation.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/Holes.swift b/submodules/TelegramCore/Sources/Holes.swift index cccfda604c..711946cc3d 100644 --- a/submodules/TelegramCore/Sources/Holes.swift +++ b/submodules/TelegramCore/Sources/Holes.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ImageRepresentationsUtils.swift b/submodules/TelegramCore/Sources/ImageRepresentationsUtils.swift index 4e95f26989..96f118189f 100644 --- a/submodules/TelegramCore/Sources/ImageRepresentationsUtils.swift +++ b/submodules/TelegramCore/Sources/ImageRepresentationsUtils.swift @@ -1,18 +1,6 @@ -#if os(macOS) - import PostboxMac - import TelegramApiMac - import MtProtoKitMac -#else - import Postbox - import UIKit - import TelegramApi -#if BUCK - import MtProtoKit -#else - import MtProtoKitDynamic -#endif -#endif - +import Postbox +import TelegramApi +import MtProtoKit import SyncCore public func smallestImageRepresentation(_ representations: [TelegramMediaImageRepresentation]) -> TelegramMediaImageRepresentation? { @@ -53,7 +41,7 @@ public func largestImageRepresentation(_ representations: [TelegramMediaImageRep } } -public func imageRepresentationLargerThan(_ representations: [TelegramMediaImageRepresentation], size: CGSize) -> TelegramMediaImageRepresentation? { +public func imageRepresentationLargerThan(_ representations: [TelegramMediaImageRepresentation], size: PixelDimensions) -> TelegramMediaImageRepresentation? { if representations.count == 0 { return nil } else { diff --git a/submodules/TelegramCore/Sources/ImportContact.swift b/submodules/TelegramCore/Sources/ImportContact.swift index 04aecfb348..0783431a6d 100644 --- a/submodules/TelegramCore/Sources/ImportContact.swift +++ b/submodules/TelegramCore/Sources/ImportContact.swift @@ -1,12 +1,6 @@ -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/InitializeAccountAfterLogin.swift b/submodules/TelegramCore/Sources/InitializeAccountAfterLogin.swift index a2bb3e5704..22c47f26f3 100644 --- a/submodules/TelegramCore/Sources/InitializeAccountAfterLogin.swift +++ b/submodules/TelegramCore/Sources/InitializeAccountAfterLogin.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -import PostboxMac -#else import SwiftSignalKit import Postbox -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/InstallInteractiveReadMessagesAction.swift b/submodules/TelegramCore/Sources/InstallInteractiveReadMessagesAction.swift index b546f5e722..d24d8915ef 100644 --- a/submodules/TelegramCore/Sources/InstallInteractiveReadMessagesAction.swift +++ b/submodules/TelegramCore/Sources/InstallInteractiveReadMessagesAction.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/InstantPage.swift b/submodules/TelegramCore/Sources/InstantPage.swift index 536c2bd55d..66b1b8dac3 100644 --- a/submodules/TelegramCore/Sources/InstantPage.swift +++ b/submodules/TelegramCore/Sources/InstantPage.swift @@ -1,12 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import UIKit - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore @@ -135,9 +129,9 @@ extension InstantPageBlock { case let .pageBlockCover(cover): self = .cover(InstantPageBlock(apiBlock: cover)) case let .pageBlockEmbed(flags, url, html, posterPhotoId, w, h, caption): - var dimensions: CGSize? + var dimensions: PixelDimensions? if let w = w, let h = h { - dimensions = CGSize(width: CGFloat(w), height: CGFloat(h)) + dimensions = PixelDimensions(width: w, height: h) } self = .webEmbed(url: url, html: html, dimensions: dimensions, caption: InstantPageCaption(apiCaption: caption), stretchToWidth: (flags & (1 << 0)) != 0, allowScrolling: (flags & (1 << 3)) != 0, coverId: posterPhotoId.flatMap { MediaId(namespace: Namespaces.Media.CloudImage, id: $0) }) case let .pageBlockEmbedPost(url, webpageId, authorPhotoId, author, date, blocks, caption): @@ -165,7 +159,7 @@ extension InstantPageBlock { case let .pageBlockMap(geo, zoom, w, h, caption): switch geo { case let .geoPoint(long, lat, _): - self = .map(latitude: lat, longitude: long, zoom: zoom, dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), caption: InstantPageCaption(apiCaption: caption)) + self = .map(latitude: lat, longitude: long, zoom: zoom, dimensions: PixelDimensions(width: w, height: h), caption: InstantPageCaption(apiCaption: caption)) default: self = .unsupported } diff --git a/submodules/TelegramCore/Sources/InvitationLinks.swift b/submodules/TelegramCore/Sources/InvitationLinks.swift index 8bc210127b..516ba47d0b 100644 --- a/submodules/TelegramCore/Sources/InvitationLinks.swift +++ b/submodules/TelegramCore/Sources/InvitationLinks.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/JSON.swift b/submodules/TelegramCore/Sources/JSON.swift index 5174d4861a..a902ae10de 100644 --- a/submodules/TelegramCore/Sources/JSON.swift +++ b/submodules/TelegramCore/Sources/JSON.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import PostboxMac -import TelegramApiMac -#else import Postbox import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/JoinChannel.swift b/submodules/TelegramCore/Sources/JoinChannel.swift index b9705d6163..e230dd947c 100644 --- a/submodules/TelegramCore/Sources/JoinChannel.swift +++ b/submodules/TelegramCore/Sources/JoinChannel.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/JoinLink.swift b/submodules/TelegramCore/Sources/JoinLink.swift index ffbfdb3618..b037b017c5 100644 --- a/submodules/TelegramCore/Sources/JoinLink.swift +++ b/submodules/TelegramCore/Sources/JoinLink.swift @@ -1,18 +1,7 @@ -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/LimitsConfiguration.swift b/submodules/TelegramCore/Sources/LimitsConfiguration.swift index ab8774fefb..f276164a35 100644 --- a/submodules/TelegramCore/Sources/LimitsConfiguration.swift +++ b/submodules/TelegramCore/Sources/LimitsConfiguration.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox import SyncCore diff --git a/submodules/TelegramCore/Sources/LoadMessagesIfNecessary.swift b/submodules/TelegramCore/Sources/LoadMessagesIfNecessary.swift index 0a39026554..deba93d87b 100644 --- a/submodules/TelegramCore/Sources/LoadMessagesIfNecessary.swift +++ b/submodules/TelegramCore/Sources/LoadMessagesIfNecessary.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/LoadedPeer.swift b/submodules/TelegramCore/Sources/LoadedPeer.swift index 225296214c..bc1ba40ed2 100644 --- a/submodules/TelegramCore/Sources/LoadedPeer.swift +++ b/submodules/TelegramCore/Sources/LoadedPeer.swift @@ -1,12 +1,6 @@ -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/LoadedPeerFromMessage.swift b/submodules/TelegramCore/Sources/LoadedPeerFromMessage.swift index fdb6c7a573..7137701715 100644 --- a/submodules/TelegramCore/Sources/LoadedPeerFromMessage.swift +++ b/submodules/TelegramCore/Sources/LoadedPeerFromMessage.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/LoadedStickerPack.swift b/submodules/TelegramCore/Sources/LoadedStickerPack.swift index b268f490b9..5a657b13b1 100644 --- a/submodules/TelegramCore/Sources/LoadedStickerPack.swift +++ b/submodules/TelegramCore/Sources/LoadedStickerPack.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/LocalizationInfo.swift b/submodules/TelegramCore/Sources/LocalizationInfo.swift index 2b0e3b928f..893d4de9a1 100644 --- a/submodules/TelegramCore/Sources/LocalizationInfo.swift +++ b/submodules/TelegramCore/Sources/LocalizationInfo.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/LocalizationListState.swift b/submodules/TelegramCore/Sources/LocalizationListState.swift index af8b286739..662173ff39 100644 --- a/submodules/TelegramCore/Sources/LocalizationListState.swift +++ b/submodules/TelegramCore/Sources/LocalizationListState.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import TelegramApiMac -#else import Postbox import SwiftSignalKit import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/LocalizationPreview.swift b/submodules/TelegramCore/Sources/LocalizationPreview.swift index 8502f0d5cd..919c74c013 100644 --- a/submodules/TelegramCore/Sources/LocalizationPreview.swift +++ b/submodules/TelegramCore/Sources/LocalizationPreview.swift @@ -1,18 +1,7 @@ -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else -import TelegramApi import Postbox import SwiftSignalKit - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/Localizations.swift b/submodules/TelegramCore/Sources/Localizations.swift index 3125095b8f..4f6e4fdef6 100644 --- a/submodules/TelegramCore/Sources/Localizations.swift +++ b/submodules/TelegramCore/Sources/Localizations.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/Log.swift b/submodules/TelegramCore/Sources/Log.swift index 7d9cf8a649..0341d6f8ea 100644 --- a/submodules/TelegramCore/Sources/Log.swift +++ b/submodules/TelegramCore/Sources/Log.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import SwiftSignalKitMac - import PostboxMac - import TelegramApiMac -#else - import SwiftSignalKit - import Postbox - import TelegramApi -#endif +import SwiftSignalKit +import Postbox +import TelegramApi private let queue = DispatchQueue(label: "org.telegram.Telegram.trace", qos: .utility) diff --git a/submodules/TelegramCore/Sources/LoggingSettings.swift b/submodules/TelegramCore/Sources/LoggingSettings.swift index 83ddd82f14..e76881ccf5 100644 --- a/submodules/TelegramCore/Sources/LoggingSettings.swift +++ b/submodules/TelegramCore/Sources/LoggingSettings.swift @@ -1,14 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac -#else - import Postbox - import SwiftSignalKit - import MtProtoKit -#endif - +import Postbox +import SwiftSignalKit +import MtProtoKit import SyncCore public func updateLoggingSettings(accountManager: AccountManager, _ f: @escaping (LoggingSettings) -> LoggingSettings) -> Signal { diff --git a/submodules/TelegramCore/Sources/MD5.swift b/submodules/TelegramCore/Sources/MD5.swift index a70571eae5..c970e11ad0 100644 --- a/submodules/TelegramCore/Sources/MD5.swift +++ b/submodules/TelegramCore/Sources/MD5.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public extension MemoryBuffer { func md5Digest() -> Data { diff --git a/submodules/TelegramCore/Sources/MacInternalUpdater.swift b/submodules/TelegramCore/Sources/MacInternalUpdater.swift index aa45d24ae8..68a02b46e4 100644 --- a/submodules/TelegramCore/Sources/MacInternalUpdater.swift +++ b/submodules/TelegramCore/Sources/MacInternalUpdater.swift @@ -1,8 +1,9 @@ #if os(macOS) -import TelegramApiMac -import SwiftSignalKitMac -import PostboxMac +import TelegramApi +import SwiftSignalKit +import Postbox +import SyncCore public enum InternalUpdaterError { case generic diff --git a/submodules/TelegramCore/Sources/ManageChannelDiscussionGroup.swift b/submodules/TelegramCore/Sources/ManageChannelDiscussionGroup.swift index 0c9b541273..12ba154557 100644 --- a/submodules/TelegramCore/Sources/ManageChannelDiscussionGroup.swift +++ b/submodules/TelegramCore/Sources/ManageChannelDiscussionGroup.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -import PostboxMac -import TelegramApiMac -#else import SwiftSignalKit import Postbox import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedAccountPresence.swift b/submodules/TelegramCore/Sources/ManagedAccountPresence.swift index c81fe98124..b14f0fbc95 100644 --- a/submodules/TelegramCore/Sources/ManagedAccountPresence.swift +++ b/submodules/TelegramCore/Sources/ManagedAccountPresence.swift @@ -1,25 +1,11 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import TelegramApi import Postbox import SwiftSignalKit -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit -#if os(macOS) -private typealias SignalKitTimer = SwiftSignalKitMac.Timer -#else private typealias SignalKitTimer = SwiftSignalKit.Timer -#endif + private final class AccountPresenceManagerImpl { private let queue: Queue diff --git a/submodules/TelegramCore/Sources/ManagedAnimatedEmojiUpdates.swift b/submodules/TelegramCore/Sources/ManagedAnimatedEmojiUpdates.swift index 4083e8209f..cf1c15e97c 100644 --- a/submodules/TelegramCore/Sources/ManagedAnimatedEmojiUpdates.swift +++ b/submodules/TelegramCore/Sources/ManagedAnimatedEmojiUpdates.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import Postbox import SwiftSignalKit import TelegramApi -#if BUCK import MtProtoKit -#else -import MtProtoKitDynamic -#endif -#endif func managedAnimatedEmojiUpdates(postbox: Postbox, network: Network) -> Signal { let poll = loadedStickerPack(postbox: postbox, network: network, reference: .animatedEmoji, forceActualized: false) diff --git a/submodules/TelegramCore/Sources/ManagedAppConfigurationUpdates.swift b/submodules/TelegramCore/Sources/ManagedAppConfigurationUpdates.swift index c5d5af7c87..78ef70938e 100644 --- a/submodules/TelegramCore/Sources/ManagedAppConfigurationUpdates.swift +++ b/submodules/TelegramCore/Sources/ManagedAppConfigurationUpdates.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedAutodownloadSettingsUpdates.swift b/submodules/TelegramCore/Sources/ManagedAutodownloadSettingsUpdates.swift index 5e3fcac489..620fe11e9c 100644 --- a/submodules/TelegramCore/Sources/ManagedAutodownloadSettingsUpdates.swift +++ b/submodules/TelegramCore/Sources/ManagedAutodownloadSettingsUpdates.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedAutoremoveMessageOperations.swift b/submodules/TelegramCore/Sources/ManagedAutoremoveMessageOperations.swift index 6c1eb22563..543ef83235 100644 --- a/submodules/TelegramCore/Sources/ManagedAutoremoveMessageOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedAutoremoveMessageOperations.swift @@ -1,27 +1,12 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore -#if os(macOS) - private typealias SignalKitTimer = SwiftSignalKitMac.Timer -#else - private typealias SignalKitTimer = SwiftSignalKit.Timer -#endif +private typealias SignalKitTimer = SwiftSignalKit.Timer private final class ManagedAutoremoveMessageOperationsHelper { var entry: (TimestampBasedMessageAttributesEntry, MetaDisposable)? diff --git a/submodules/TelegramCore/Sources/ManagedChatListHoles.swift b/submodules/TelegramCore/Sources/ManagedChatListHoles.swift index cf2462f09e..8dbe238d06 100644 --- a/submodules/TelegramCore/Sources/ManagedChatListHoles.swift +++ b/submodules/TelegramCore/Sources/ManagedChatListHoles.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit private final class ManagedChatListHolesState { private var holeDisposables: [ChatListHolesEntry: Disposable] = [:] diff --git a/submodules/TelegramCore/Sources/ManagedCloudChatRemoveMessagesOperations.swift b/submodules/TelegramCore/Sources/ManagedCloudChatRemoveMessagesOperations.swift index 27c209b072..ab0a9b1479 100644 --- a/submodules/TelegramCore/Sources/ManagedCloudChatRemoveMessagesOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedCloudChatRemoveMessagesOperations.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedConfigurationUpdates.swift b/submodules/TelegramCore/Sources/ManagedConfigurationUpdates.swift index 73466b6d2c..99512d4bf1 100644 --- a/submodules/TelegramCore/Sources/ManagedConfigurationUpdates.swift +++ b/submodules/TelegramCore/Sources/ManagedConfigurationUpdates.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedConsumePersonalMessagesActions.swift b/submodules/TelegramCore/Sources/ManagedConsumePersonalMessagesActions.swift index d01fa03578..6b61f851a5 100644 --- a/submodules/TelegramCore/Sources/ManagedConsumePersonalMessagesActions.swift +++ b/submodules/TelegramCore/Sources/ManagedConsumePersonalMessagesActions.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedGlobalNotificationSettings.swift b/submodules/TelegramCore/Sources/ManagedGlobalNotificationSettings.swift index c545d3d4d7..9987f93d5e 100644 --- a/submodules/TelegramCore/Sources/ManagedGlobalNotificationSettings.swift +++ b/submodules/TelegramCore/Sources/ManagedGlobalNotificationSettings.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedLocalInputActivities.swift b/submodules/TelegramCore/Sources/ManagedLocalInputActivities.swift index 49aeb75457..d60413963c 100644 --- a/submodules/TelegramCore/Sources/ManagedLocalInputActivities.swift +++ b/submodules/TelegramCore/Sources/ManagedLocalInputActivities.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedLocalizationUpdatesOperations.swift b/submodules/TelegramCore/Sources/ManagedLocalizationUpdatesOperations.swift index 4be6e72e7c..5fe08cb49b 100644 --- a/submodules/TelegramCore/Sources/ManagedLocalizationUpdatesOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedLocalizationUpdatesOperations.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedMessageHistoryHoles.swift b/submodules/TelegramCore/Sources/ManagedMessageHistoryHoles.swift index e4c4397184..aa18476599 100644 --- a/submodules/TelegramCore/Sources/ManagedMessageHistoryHoles.swift +++ b/submodules/TelegramCore/Sources/ManagedMessageHistoryHoles.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit private final class ManagedMessageHistoryHolesState { private var holeDisposables: [MessageHistoryHolesViewEntry: Disposable] = [:] diff --git a/submodules/TelegramCore/Sources/ManagedNotificationSettingsBehaviors.swift b/submodules/TelegramCore/Sources/ManagedNotificationSettingsBehaviors.swift index 98a16f66b0..8e05df8933 100644 --- a/submodules/TelegramCore/Sources/ManagedNotificationSettingsBehaviors.swift +++ b/submodules/TelegramCore/Sources/ManagedNotificationSettingsBehaviors.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -#else import Postbox import SwiftSignalKit -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedPendingPeerNotificationSettings.swift b/submodules/TelegramCore/Sources/ManagedPendingPeerNotificationSettings.swift index 7f4a4bec2f..40de26d393 100644 --- a/submodules/TelegramCore/Sources/ManagedPendingPeerNotificationSettings.swift +++ b/submodules/TelegramCore/Sources/ManagedPendingPeerNotificationSettings.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedProxyInfoUpdates.swift b/submodules/TelegramCore/Sources/ManagedProxyInfoUpdates.swift index 1f4f3e6949..9e98e06ae2 100644 --- a/submodules/TelegramCore/Sources/ManagedProxyInfoUpdates.swift +++ b/submodules/TelegramCore/Sources/ManagedProxyInfoUpdates.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import TelegramApi import Postbox import SwiftSignalKit -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedRecentStickers.swift b/submodules/TelegramCore/Sources/ManagedRecentStickers.swift index 3f17508b77..739fcd0034 100644 --- a/submodules/TelegramCore/Sources/ManagedRecentStickers.swift +++ b/submodules/TelegramCore/Sources/ManagedRecentStickers.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedSecretChatOutgoingOperations.swift b/submodules/TelegramCore/Sources/ManagedSecretChatOutgoingOperations.swift index c94fe4582d..6ee05fe6e0 100644 --- a/submodules/TelegramCore/Sources/ManagedSecretChatOutgoingOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedSecretChatOutgoingOperations.swift @@ -1,20 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif - import UIKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit +import MtProtoKit import SyncCore @@ -742,7 +730,7 @@ private func decryptedEntities101(_ entities: [MessageTextEntity]?) -> [SecretAp return result } -private func boxedDecryptedMessage(transaction: Transaction, message: Message, globallyUniqueId: Int64, uploadedFile: SecretChatOutgoingFile?, thumbnailData: [MediaId: (CGSize, Data)], layer: SecretChatLayer) -> BoxedDecryptedMessage { +private func boxedDecryptedMessage(transaction: Transaction, message: Message, globallyUniqueId: Int64, uploadedFile: SecretChatOutgoingFile?, thumbnailData: [MediaId: (PixelDimensions, Data)], layer: SecretChatLayer) -> BoxedDecryptedMessage { let media: Media? = message.media.first var messageAutoremoveTimeout: Int32 = 0 var replyGlobalId: Int64? = nil @@ -780,8 +768,8 @@ private func boxedDecryptedMessage(transaction: Transaction, message: Message, g let thumbH: Int32 let thumb: Buffer if let (thumbnailSize, data) = thumbnailData[image.imageId] { - thumbW = Int32(thumbnailSize.width) - thumbH = Int32(thumbnailSize.height) + thumbW = thumbnailSize.width + thumbH = thumbnailSize.height thumb = Buffer(data: data) } else { thumbW = 90 @@ -839,8 +827,8 @@ private func boxedDecryptedMessage(transaction: Transaction, message: Message, g let thumbH: Int32 let thumb: Buffer if let (thumbnailSize, data) = thumbnailData[file.fileId] { - thumbW = Int32(thumbnailSize.width) - thumbH = Int32(thumbnailSize.height) + thumbW = thumbnailSize.width + thumbH = thumbnailSize.height thumb = Buffer(data: data) } else { thumbW = 0 @@ -1326,10 +1314,10 @@ private func replaceOutgoingOperationWithEmptyMessage(transaction: Transaction, } } -private func resourceThumbnailData(auxiliaryMethods: AccountAuxiliaryMethods, mediaBox: MediaBox, resource: MediaResource, mediaId: MediaId) -> Signal<(MediaId, CGSize, Data)?, NoError> { +private func resourceThumbnailData(auxiliaryMethods: AccountAuxiliaryMethods, mediaBox: MediaBox, resource: MediaResource, mediaId: MediaId) -> Signal<(MediaId, PixelDimensions, Data)?, NoError> { return mediaBox.resourceData(resource, option: .complete(waitUntilFetchStatus: false)) |> take(1) - |> map { data -> (MediaId, CGSize, Data)? in + |> map { data -> (MediaId, PixelDimensions, Data)? in if data.complete, let (mappedSize, mappedData) = auxiliaryMethods.prepareSecretThumbnailData(data) { return (mediaId, mappedSize, mappedData) } else { @@ -1338,8 +1326,8 @@ private func resourceThumbnailData(auxiliaryMethods: AccountAuxiliaryMethods, me } } -private func messageWithThumbnailData(auxiliaryMethods: AccountAuxiliaryMethods, mediaBox: MediaBox, message: Message) -> Signal<[MediaId: (CGSize, Data)], NoError> { - var signals: [Signal<(MediaId, CGSize, Data)?, NoError>] = [] +private func messageWithThumbnailData(auxiliaryMethods: AccountAuxiliaryMethods, mediaBox: MediaBox, message: Message) -> Signal<[MediaId: (PixelDimensions, Data)], NoError> { + var signals: [Signal<(MediaId, PixelDimensions, Data)?, NoError>] = [] for media in message.media { if let image = media as? TelegramMediaImage { if let smallestRepresentation = smallestImageRepresentation(image.representations) { @@ -1353,7 +1341,7 @@ private func messageWithThumbnailData(auxiliaryMethods: AccountAuxiliaryMethods, } return combineLatest(signals) |> map { values in - var result: [MediaId: (CGSize, Data)] = [:] + var result: [MediaId: (PixelDimensions, Data)] = [:] for value in values { if let value = value { result[value.0] = (value.1, value.2) @@ -1364,7 +1352,7 @@ private func messageWithThumbnailData(auxiliaryMethods: AccountAuxiliaryMethods, } private func sendMessage(auxiliaryMethods: AccountAuxiliaryMethods, postbox: Postbox, network: Network, messageId: MessageId, file: SecretChatOutgoingFile?, tagLocalIndex: Int32, wasDelivered: Bool, layer: SecretChatLayer) -> Signal { - return postbox.transaction { transaction -> Signal<[MediaId: (CGSize, Data)], NoError> in + return postbox.transaction { transaction -> Signal<[MediaId: (PixelDimensions, Data)], NoError> in if let message = transaction.getMessage(messageId) { return messageWithThumbnailData(auxiliaryMethods: auxiliaryMethods, mediaBox: postbox.mediaBox, message: message) } else { diff --git a/submodules/TelegramCore/Sources/ManagedServiceViews.swift b/submodules/TelegramCore/Sources/ManagedServiceViews.swift index 93fd480cbc..03eaf49c90 100644 --- a/submodules/TelegramCore/Sources/ManagedServiceViews.swift +++ b/submodules/TelegramCore/Sources/ManagedServiceViews.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit func managedServiceViews(accountPeerId: PeerId, network: Network, postbox: Postbox, stateManager: AccountStateManager, pendingMessageManager: PendingMessageManager) -> Signal { return Signal { _ in diff --git a/submodules/TelegramCore/Sources/ManagedSynchronizeAppLogEventsOperations.swift b/submodules/TelegramCore/Sources/ManagedSynchronizeAppLogEventsOperations.swift index 8627918b47..74d8e82257 100644 --- a/submodules/TelegramCore/Sources/ManagedSynchronizeAppLogEventsOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedSynchronizeAppLogEventsOperations.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedSynchronizeChatInputStateOperations.swift b/submodules/TelegramCore/Sources/ManagedSynchronizeChatInputStateOperations.swift index 40399ec9cb..a24cc86557 100644 --- a/submodules/TelegramCore/Sources/ManagedSynchronizeChatInputStateOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedSynchronizeChatInputStateOperations.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedSynchronizeConsumeMessageContentsOperations.swift b/submodules/TelegramCore/Sources/ManagedSynchronizeConsumeMessageContentsOperations.swift index 4da9fb23b6..0c3e326348 100644 --- a/submodules/TelegramCore/Sources/ManagedSynchronizeConsumeMessageContentsOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedSynchronizeConsumeMessageContentsOperations.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedSynchronizeEmojiKeywordsOperations.swift b/submodules/TelegramCore/Sources/ManagedSynchronizeEmojiKeywordsOperations.swift index 4461e27d58..bbe1a92d9d 100644 --- a/submodules/TelegramCore/Sources/ManagedSynchronizeEmojiKeywordsOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedSynchronizeEmojiKeywordsOperations.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import TelegramApi import Postbox import SwiftSignalKit -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedSynchronizeGroupMessageStats.swift b/submodules/TelegramCore/Sources/ManagedSynchronizeGroupMessageStats.swift index b8c020dc97..6971259ca5 100644 --- a/submodules/TelegramCore/Sources/ManagedSynchronizeGroupMessageStats.swift +++ b/submodules/TelegramCore/Sources/ManagedSynchronizeGroupMessageStats.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import TelegramApiMac -#else import Postbox import SwiftSignalKit import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedSynchronizeGroupedPeersOperations.swift b/submodules/TelegramCore/Sources/ManagedSynchronizeGroupedPeersOperations.swift index 6a297cefb7..1a286a5da9 100644 --- a/submodules/TelegramCore/Sources/ManagedSynchronizeGroupedPeersOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedSynchronizeGroupedPeersOperations.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedSynchronizeInstalledStickerPacksOperations.swift b/submodules/TelegramCore/Sources/ManagedSynchronizeInstalledStickerPacksOperations.swift index a05eb632a4..4b3c294219 100644 --- a/submodules/TelegramCore/Sources/ManagedSynchronizeInstalledStickerPacksOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedSynchronizeInstalledStickerPacksOperations.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift b/submodules/TelegramCore/Sources/ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift index 18d82367af..9dc90ba65d 100644 --- a/submodules/TelegramCore/Sources/ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import TelegramApi import Postbox import SwiftSignalKit -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedSynchronizeMarkFeaturedStickerPacksAsSeenOperations.swift b/submodules/TelegramCore/Sources/ManagedSynchronizeMarkFeaturedStickerPacksAsSeenOperations.swift index 17bd941e78..174ee4d9e3 100644 --- a/submodules/TelegramCore/Sources/ManagedSynchronizeMarkFeaturedStickerPacksAsSeenOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedSynchronizeMarkFeaturedStickerPacksAsSeenOperations.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedSynchronizePeerReadStates.swift b/submodules/TelegramCore/Sources/ManagedSynchronizePeerReadStates.swift index 1e0f2382d7..ba0b8de09e 100644 --- a/submodules/TelegramCore/Sources/ManagedSynchronizePeerReadStates.swift +++ b/submodules/TelegramCore/Sources/ManagedSynchronizePeerReadStates.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit private final class ManagedSynchronizePeerReadStatesState { private var synchronizeDisposables: [PeerId: (PeerReadStateSynchronizationOperation, Disposable)] = [:] diff --git a/submodules/TelegramCore/Sources/ManagedSynchronizePinnedChatsOperations.swift b/submodules/TelegramCore/Sources/ManagedSynchronizePinnedChatsOperations.swift index 31773ee887..8de969c9f1 100644 --- a/submodules/TelegramCore/Sources/ManagedSynchronizePinnedChatsOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedSynchronizePinnedChatsOperations.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedSynchronizeRecentlyUsedMediaOperations.swift b/submodules/TelegramCore/Sources/ManagedSynchronizeRecentlyUsedMediaOperations.swift index fec1b03094..f451b9f4c1 100644 --- a/submodules/TelegramCore/Sources/ManagedSynchronizeRecentlyUsedMediaOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedSynchronizeRecentlyUsedMediaOperations.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import TelegramApi import Postbox import SwiftSignalKit -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedSynchronizeSavedGifsOperations.swift b/submodules/TelegramCore/Sources/ManagedSynchronizeSavedGifsOperations.swift index 8003ee0258..f82c9b2fce 100644 --- a/submodules/TelegramCore/Sources/ManagedSynchronizeSavedGifsOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedSynchronizeSavedGifsOperations.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedSynchronizeSavedStickersOperations.swift b/submodules/TelegramCore/Sources/ManagedSynchronizeSavedStickersOperations.swift index 080e26626e..3026b42eb1 100644 --- a/submodules/TelegramCore/Sources/ManagedSynchronizeSavedStickersOperations.swift +++ b/submodules/TelegramCore/Sources/ManagedSynchronizeSavedStickersOperations.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ManagedVoipConfigurationUpdates.swift b/submodules/TelegramCore/Sources/ManagedVoipConfigurationUpdates.swift index 0852dd7544..b3da17c751 100644 --- a/submodules/TelegramCore/Sources/ManagedVoipConfigurationUpdates.swift +++ b/submodules/TelegramCore/Sources/ManagedVoipConfigurationUpdates.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit func managedVoipConfigurationUpdates(postbox: Postbox, network: Network) -> Signal { let poll = Signal { subscriber in diff --git a/submodules/TelegramCore/Sources/MarkAllChatsAsRead.swift b/submodules/TelegramCore/Sources/MarkAllChatsAsRead.swift index 37d37c24f4..8a3481c9e5 100644 --- a/submodules/TelegramCore/Sources/MarkAllChatsAsRead.swift +++ b/submodules/TelegramCore/Sources/MarkAllChatsAsRead.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import TelegramApi import Postbox import SwiftSignalKit -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/MarkMessageContentAsConsumedInteractively.swift b/submodules/TelegramCore/Sources/MarkMessageContentAsConsumedInteractively.swift index 47cc924977..d3233fe88f 100644 --- a/submodules/TelegramCore/Sources/MarkMessageContentAsConsumedInteractively.swift +++ b/submodules/TelegramCore/Sources/MarkMessageContentAsConsumedInteractively.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/MediaResourceNetworkStatsTag.swift b/submodules/TelegramCore/Sources/MediaResourceNetworkStatsTag.swift index 0dd31adc82..8518603109 100644 --- a/submodules/TelegramCore/Sources/MediaResourceNetworkStatsTag.swift +++ b/submodules/TelegramCore/Sources/MediaResourceNetworkStatsTag.swift @@ -1,8 +1,4 @@ -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public enum MediaResourceStatsCategory { case generic diff --git a/submodules/TelegramCore/Sources/MemoryBufferExtensions.swift b/submodules/TelegramCore/Sources/MemoryBufferExtensions.swift index 10d3009e3b..91adc8d5b8 100644 --- a/submodules/TelegramCore/Sources/MemoryBufferExtensions.swift +++ b/submodules/TelegramCore/Sources/MemoryBufferExtensions.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi public extension MemoryBuffer { diff --git a/submodules/TelegramCore/Sources/MessageMediaPreuploadManager.swift b/submodules/TelegramCore/Sources/MessageMediaPreuploadManager.swift index cc4feb46b8..28bff2285f 100644 --- a/submodules/TelegramCore/Sources/MessageMediaPreuploadManager.swift +++ b/submodules/TelegramCore/Sources/MessageMediaPreuploadManager.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/MessageReactionList.swift b/submodules/TelegramCore/Sources/MessageReactionList.swift index 1b4682b058..3b7d205bf7 100644 --- a/submodules/TelegramCore/Sources/MessageReactionList.swift +++ b/submodules/TelegramCore/Sources/MessageReactionList.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import Postbox import SwiftSignalKit import TelegramApi -#if BUCK import MtProtoKit -#else -import MtProtoKitDynamic -#endif -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/MessageReactions.swift b/submodules/TelegramCore/Sources/MessageReactions.swift index 4a3cd265f0..6bc15de67e 100644 --- a/submodules/TelegramCore/Sources/MessageReactions.swift +++ b/submodules/TelegramCore/Sources/MessageReactions.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import Postbox import SwiftSignalKit import TelegramApi -#if BUCK import MtProtoKit -#else -import MtProtoKitDynamic -#endif -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/MessageUtils.swift b/submodules/TelegramCore/Sources/MessageUtils.swift index 796a47c760..da9ec6324a 100644 --- a/submodules/TelegramCore/Sources/MessageUtils.swift +++ b/submodules/TelegramCore/Sources/MessageUtils.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox import SyncCore diff --git a/submodules/TelegramCore/Sources/MultipartFetch.swift b/submodules/TelegramCore/Sources/MultipartFetch.swift index 84b071e7e0..85eff452bc 100644 --- a/submodules/TelegramCore/Sources/MultipartFetch.swift +++ b/submodules/TelegramCore/Sources/MultipartFetch.swift @@ -1,27 +1,12 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore -#if os(macOS) - private typealias SignalKitTimer = SwiftSignalKitMac.Timer -#else - private typealias SignalKitTimer = SwiftSignalKit.Timer -#endif +private typealias SignalKitTimer = SwiftSignalKit.Timer private final class MultipartDownloadState { let aesKey: Data diff --git a/submodules/TelegramCore/Sources/MultipartUpload.swift b/submodules/TelegramCore/Sources/MultipartUpload.swift index 4b3a2ac29b..39bbaa396e 100644 --- a/submodules/TelegramCore/Sources/MultipartUpload.swift +++ b/submodules/TelegramCore/Sources/MultipartUpload.swift @@ -1,27 +1,13 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import TelegramApi +import SwiftSignalKit +import MtProtoKit import SyncCore -#if os(macOS) - private typealias SignalKitTimer = SwiftSignalKitMac.Timer -#else - private typealias SignalKitTimer = SwiftSignalKit.Timer -#endif +private typealias SignalKitTimer = SwiftSignalKit.Timer + private struct UploadPart { let fileId: Int64 diff --git a/submodules/TelegramCore/Sources/MultiplexedRequestManager.swift b/submodules/TelegramCore/Sources/MultiplexedRequestManager.swift index 8917d87150..670659d81a 100644 --- a/submodules/TelegramCore/Sources/MultiplexedRequestManager.swift +++ b/submodules/TelegramCore/Sources/MultiplexedRequestManager.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import TelegramApi import Postbox import SwiftSignalKit -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit enum MultiplexedRequestTarget: Equatable, Hashable { case main(Int) @@ -78,11 +67,8 @@ private struct MultiplexedRequestTargetTimerKey: Equatable, Hashable { let id: Int32 } -#if os(macOS) -private typealias SignalKitTimer = SwiftSignalKitMac.Timer -#else private typealias SignalKitTimer = SwiftSignalKit.Timer -#endif + private final class MultiplexedRequestManagerContext { private let queue: Queue diff --git a/submodules/TelegramCore/Sources/Network.swift b/submodules/TelegramCore/Sources/Network.swift index 6908c0f947..4fca882c2f 100644 --- a/submodules/TelegramCore/Sources/Network.swift +++ b/submodules/TelegramCore/Sources/Network.swift @@ -1,18 +1,11 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif + +import Postbox +import TelegramApi +import SwiftSignalKit +import MtProtoKit + +#if os(iOS) import CloudData #endif @@ -423,8 +416,9 @@ public struct NetworkInitializationArguments { self.encryptionProvider = encryptionProvider } } - +#if os(iOS) private let cloudDataContext = Atomic(value: nil) +#endif func initializedNetwork(arguments: NetworkInitializationArguments, supplementary: Bool, datacenterId: Int, keychain: Keychain, basePath: String, testingEnvironment: Bool, languageCode: String?, proxySettings: ProxySettings?, networkSettings: NetworkSettings?, phoneNumber: String?) -> Signal { return Signal { subscriber in diff --git a/submodules/TelegramCore/Sources/NetworkLogging.m b/submodules/TelegramCore/Sources/NetworkLogging.m index 44d1e2ef7e..710c71d5d0 100644 --- a/submodules/TelegramCore/Sources/NetworkLogging.m +++ b/submodules/TelegramCore/Sources/NetworkLogging.m @@ -2,13 +2,7 @@ #import -#ifdef BUCK -# import -#elif TARGET_OS_IOS -# import -#else -# import -#endif +#import static void (*bridgingTrace)(NSString *, NSString *); void setBridgingTraceFunction(void (*f)(NSString *, NSString *)) { diff --git a/submodules/TelegramCore/Sources/NetworkSettings.swift b/submodules/TelegramCore/Sources/NetworkSettings.swift index b7e543c0bc..39d2f071c0 100644 --- a/submodules/TelegramCore/Sources/NetworkSettings.swift +++ b/submodules/TelegramCore/Sources/NetworkSettings.swift @@ -1,17 +1,7 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -#else import Postbox import SwiftSignalKit - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/NetworkType.swift b/submodules/TelegramCore/Sources/NetworkType.swift index c626628c6b..9cdf3833b6 100644 --- a/submodules/TelegramCore/Sources/NetworkType.swift +++ b/submodules/TelegramCore/Sources/NetworkType.swift @@ -1,8 +1,7 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -#else import SwiftSignalKit +import MtProtoKit +#if os(iOS) import CoreTelephony #endif diff --git a/submodules/TelegramCore/Sources/NotificationAutolockReportManager.swift b/submodules/TelegramCore/Sources/NotificationAutolockReportManager.swift index 13dd8da607..cdc0cd3fda 100644 --- a/submodules/TelegramCore/Sources/NotificationAutolockReportManager.swift +++ b/submodules/TelegramCore/Sources/NotificationAutolockReportManager.swift @@ -1,25 +1,11 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import TelegramApi import Postbox import SwiftSignalKit -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit -#if os(macOS) -private typealias SignalKitTimer = SwiftSignalKitMac.Timer -#else private typealias SignalKitTimer = SwiftSignalKit.Timer -#endif + private final class NotificationAutolockReportManagerImpl { private let queue: Queue diff --git a/submodules/TelegramCore/Sources/NotificationExceptionsList.swift b/submodules/TelegramCore/Sources/NotificationExceptionsList.swift index 46742dc7f8..e5fb3f8934 100644 --- a/submodules/TelegramCore/Sources/NotificationExceptionsList.swift +++ b/submodules/TelegramCore/Sources/NotificationExceptionsList.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -import PostboxMac -import TelegramApiMac -#else import SwiftSignalKit import Postbox import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/OutgoingMessageWithChatContextResult.swift b/submodules/TelegramCore/Sources/OutgoingMessageWithChatContextResult.swift index 7216745876..fb299307a9 100644 --- a/submodules/TelegramCore/Sources/OutgoingMessageWithChatContextResult.swift +++ b/submodules/TelegramCore/Sources/OutgoingMessageWithChatContextResult.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit - import UIKit -#endif - +import Postbox +import SwiftSignalKit import SyncCore -private func aspectFitSize(_ size: CGSize, to: CGSize) -> CGSize { - let scale = min(to.width / max(1.0, size.width), to.height / max(1.0, size.height)) - return CGSize(width: floor(size.width * scale), height: floor(size.height * scale)) -} public func outgoingMessageWithChatContextResult(to peerId: PeerId, results: ChatContextResultCollection, result: ChatContextResult, hideVia: Bool = false, scheduleTime: Int32? = nil) -> EnqueueMessage? { var attributes: [MessageAttribute] = [] @@ -65,7 +54,7 @@ public func outgoingMessageWithChatContextResult(to peerId: PeerId, results: Cha var randomId: Int64 = 0 arc4random_buf(&randomId, 8) let thumbnailResource = thumbnail.resource - let imageDimensions = thumbnail.dimensions ?? CGSize(width: 128.0, height: 128.0) + let imageDimensions = thumbnail.dimensions ?? PixelDimensions(width: 128, height: 128) let tmpImage = TelegramMediaImage(imageId: MediaId(namespace: Namespaces.Media.LocalImage, id: randomId), representations: [TelegramMediaImageRepresentation(dimensions: imageDimensions, resource: thumbnailResource)], immediateThumbnailData: nil, reference: nil, partialReference: nil) return .message(text: caption, attributes: attributes, mediaReference: .standalone(media: tmpImage), replyToMessageId: nil, localGroupingKey: nil) } else { @@ -77,7 +66,7 @@ public func outgoingMessageWithChatContextResult(to peerId: PeerId, results: Cha var randomId: Int64 = 0 arc4random_buf(&randomId, 8) let thumbnailResource = thumbnail.resource - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: thumbnail.dimensions ?? CGSize(width: 128.0, height: 128.0), resource: thumbnailResource)) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: thumbnail.dimensions ?? PixelDimensions(width: 128, height: 128), resource: thumbnailResource)) } var fileName = "file" if let content = content { diff --git a/submodules/TelegramCore/Sources/PeerAccessRestrictionInfo.swift b/submodules/TelegramCore/Sources/PeerAccessRestrictionInfo.swift index e2bc4e985a..f0d56ab74b 100644 --- a/submodules/TelegramCore/Sources/PeerAccessRestrictionInfo.swift +++ b/submodules/TelegramCore/Sources/PeerAccessRestrictionInfo.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/PeerAdmins.swift b/submodules/TelegramCore/Sources/PeerAdmins.swift index 1cb1ffee31..d5bc504a0c 100644 --- a/submodules/TelegramCore/Sources/PeerAdmins.swift +++ b/submodules/TelegramCore/Sources/PeerAdmins.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/PeerCommands.swift b/submodules/TelegramCore/Sources/PeerCommands.swift index 60e928dfb5..3f6686ae98 100644 --- a/submodules/TelegramCore/Sources/PeerCommands.swift +++ b/submodules/TelegramCore/Sources/PeerCommands.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/PeerContactSettings.swift b/submodules/TelegramCore/Sources/PeerContactSettings.swift index a69cac1d6c..34dfeacfb4 100644 --- a/submodules/TelegramCore/Sources/PeerContactSettings.swift +++ b/submodules/TelegramCore/Sources/PeerContactSettings.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/PeerInputActivity.swift b/submodules/TelegramCore/Sources/PeerInputActivity.swift index 350d2c4f93..a7ab25a7bd 100644 --- a/submodules/TelegramCore/Sources/PeerInputActivity.swift +++ b/submodules/TelegramCore/Sources/PeerInputActivity.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import TelegramApiMac -#else import TelegramApi -#endif public enum PeerInputActivity: Comparable { case typingText diff --git a/submodules/TelegramCore/Sources/PeerInputActivityManager.swift b/submodules/TelegramCore/Sources/PeerInputActivityManager.swift index 03bec756a0..6885576d96 100644 --- a/submodules/TelegramCore/Sources/PeerInputActivityManager.swift +++ b/submodules/TelegramCore/Sources/PeerInputActivityManager.swift @@ -1,17 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit -#if os(macOS) - private typealias SignalKitTimer = SwiftSignalKitMac.Timer -#else - private typealias SignalKitTimer = SwiftSignalKit.Timer -#endif +private typealias SignalKitTimer = SwiftSignalKit.Timer private struct ActivityRecord { let peerId: PeerId diff --git a/submodules/TelegramCore/Sources/PeerLiveLocationsContext.swift b/submodules/TelegramCore/Sources/PeerLiveLocationsContext.swift index 5f37477a14..3f6941bafc 100644 --- a/submodules/TelegramCore/Sources/PeerLiveLocationsContext.swift +++ b/submodules/TelegramCore/Sources/PeerLiveLocationsContext.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/PeerParticipants.swift b/submodules/TelegramCore/Sources/PeerParticipants.swift index 7587d8acbc..6f12d25956 100644 --- a/submodules/TelegramCore/Sources/PeerParticipants.swift +++ b/submodules/TelegramCore/Sources/PeerParticipants.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/PeerPhotoUpdater.swift b/submodules/TelegramCore/Sources/PeerPhotoUpdater.swift index 862a79b9f4..d41e73d73e 100644 --- a/submodules/TelegramCore/Sources/PeerPhotoUpdater.swift +++ b/submodules/TelegramCore/Sources/PeerPhotoUpdater.swift @@ -1,20 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif - import UIKit -#endif +import Postbox +import SwiftSignalKit +import MtProtoKit +import TelegramApi import SyncCore @@ -98,7 +86,7 @@ public func updatePeerPhotoInternal(postbox: Postbox, network: Network, stateMan case let .photoSize(_, location, w, h, _): switch location { case let .fileLocationToBeDeprecated(volumeId, localId): - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: CloudPeerPhotoSizeMediaResource(datacenterId: dcId, sizeSpec: w <= 200 ? .small : .fullSize, volumeId: volumeId, localId: localId))) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: CloudPeerPhotoSizeMediaResource(datacenterId: dcId, sizeSpec: w <= 200 ? .small : .fullSize, volumeId: volumeId, localId: localId))) } default: break diff --git a/submodules/TelegramCore/Sources/PeerSpecificStickerPack.swift b/submodules/TelegramCore/Sources/PeerSpecificStickerPack.swift index cd3981f6ed..0a9cea6eb7 100644 --- a/submodules/TelegramCore/Sources/PeerSpecificStickerPack.swift +++ b/submodules/TelegramCore/Sources/PeerSpecificStickerPack.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/PeerUtils.swift b/submodules/TelegramCore/Sources/PeerUtils.swift index 8d25fba940..bf457689a9 100644 --- a/submodules/TelegramCore/Sources/PeerUtils.swift +++ b/submodules/TelegramCore/Sources/PeerUtils.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import PostboxMac -#else import Postbox -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/PeersNearby.swift b/submodules/TelegramCore/Sources/PeersNearby.swift index 2b3899decd..b872ec5837 100644 --- a/submodules/TelegramCore/Sources/PeersNearby.swift +++ b/submodules/TelegramCore/Sources/PeersNearby.swift @@ -1,21 +1,12 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -import PostboxMac -import TelegramApiMac -#else import SwiftSignalKit import Postbox import TelegramApi -#endif import SyncCore -#if os(macOS) -private typealias SignalKitTimer = SwiftSignalKitMac.Timer -#else private typealias SignalKitTimer = SwiftSignalKit.Timer -#endif + public struct PeerNearby { diff --git a/submodules/TelegramCore/Sources/PendingMessageManager.swift b/submodules/TelegramCore/Sources/PendingMessageManager.swift index 039ab9f9ec..0be097728d 100644 --- a/submodules/TelegramCore/Sources/PendingMessageManager.swift +++ b/submodules/TelegramCore/Sources/PendingMessageManager.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/PendingMessageUploadedContent.swift b/submodules/TelegramCore/Sources/PendingMessageUploadedContent.swift index c5ec3c1bde..5c3cd4a7f5 100644 --- a/submodules/TelegramCore/Sources/PendingMessageUploadedContent.swift +++ b/submodules/TelegramCore/Sources/PendingMessageUploadedContent.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/Polls.swift b/submodules/TelegramCore/Sources/Polls.swift index b23ba9fb47..207cd11cfb 100644 --- a/submodules/TelegramCore/Sources/Polls.swift +++ b/submodules/TelegramCore/Sources/Polls.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import TelegramApi import Postbox import SwiftSignalKit -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/PrivacySettings.swift b/submodules/TelegramCore/Sources/PrivacySettings.swift index da5fc00f11..4bff7cb91f 100644 --- a/submodules/TelegramCore/Sources/PrivacySettings.swift +++ b/submodules/TelegramCore/Sources/PrivacySettings.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/ProcessRemovedMedia.swift b/submodules/TelegramCore/Sources/ProcessRemovedMedia.swift index 27b81e6f62..725c1fb04b 100644 --- a/submodules/TelegramCore/Sources/ProcessRemovedMedia.swift +++ b/submodules/TelegramCore/Sources/ProcessRemovedMedia.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import PostboxMac -#else import Postbox -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/ProcessSecretChatIncomingDecryptedOperations.swift b/submodules/TelegramCore/Sources/ProcessSecretChatIncomingDecryptedOperations.swift index 6465900ea8..65442005c6 100644 --- a/submodules/TelegramCore/Sources/ProcessSecretChatIncomingDecryptedOperations.swift +++ b/submodules/TelegramCore/Sources/ProcessSecretChatIncomingDecryptedOperations.swift @@ -1,12 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import UIKit - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore import EncryptionProvider @@ -555,7 +549,7 @@ extension TelegramMediaFileAttribute { case let .documentAttributeFilename(fileName): self = .FileName(fileName: fileName) case let .documentAttributeImageSize(w, h): - self = .ImageSize(size: CGSize(width: CGFloat(w), height: CGFloat(h))) + self = .ImageSize(size: PixelDimensions(width: w, height: h)) case let .documentAttributeSticker(alt, stickerset): let packReference: StickerPackReference? switch stickerset { @@ -566,7 +560,7 @@ extension TelegramMediaFileAttribute { } self = .Sticker(displayText: alt, packReference: packReference, maskData: nil) case let .documentAttributeVideo(duration, w, h): - self = .Video(duration: Int(duration), size: CGSize(width: CGFloat(w), height: CGFloat(h)), flags: []) + self = .Video(duration: Int(duration), size: PixelDimensions(width: w, height: h), flags: []) } } } @@ -588,7 +582,7 @@ extension TelegramMediaFileAttribute { case let .documentAttributeFilename(fileName): self = .FileName(fileName: fileName) case let .documentAttributeImageSize(w, h): - self = .ImageSize(size: CGSize(width: CGFloat(w), height: CGFloat(h))) + self = .ImageSize(size: PixelDimensions(width: w, height: h)) case let .documentAttributeSticker(alt, stickerset): let packReference: StickerPackReference? switch stickerset { @@ -603,7 +597,7 @@ extension TelegramMediaFileAttribute { if (flags & (1 << 0)) != 0 { videoFlags.insert(.instantRoundVideo) } - self = .Video(duration: Int(duration), size: CGSize(width: CGFloat(w), height: CGFloat(h)), flags: videoFlags) + self = .Video(duration: Int(duration), size: PixelDimensions(width: w, height: h), flags: videoFlags) } } } @@ -625,7 +619,7 @@ extension TelegramMediaFileAttribute { case let .documentAttributeFilename(fileName): self = .FileName(fileName: fileName) case let .documentAttributeImageSize(w, h): - self = .ImageSize(size: CGSize(width: CGFloat(w), height: CGFloat(h))) + self = .ImageSize(size: PixelDimensions(width: w, height: h)) case let .documentAttributeSticker(alt, stickerset): let packReference: StickerPackReference? switch stickerset { @@ -640,7 +634,7 @@ extension TelegramMediaFileAttribute { if (flags & (1 << 0)) != 0 { videoFlags.insert(.instantRoundVideo) } - self = .Video(duration: Int(duration), size: CGSize(width: CGFloat(w), height: CGFloat(h)), flags: videoFlags) + self = .Video(duration: Int(duration), size: PixelDimensions(width: w, height: h), flags: videoFlags) } } } @@ -714,10 +708,10 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 var representations: [TelegramMediaImageRepresentation] = [] if thumb.size != 0 { let resource = LocalFileMediaResource(fileId: arc4random64()) - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(thumbW), height: CGFloat(thumbH)), resource: resource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: thumbW, height: thumbH), resource: resource)) resources.append((resource, thumb.makeData())) } - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: file.resource(key: SecretFileEncryptionKey(aesKey: key.makeData(), aesIv: iv.makeData()), decryptedSize: size))) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: file.resource(key: SecretFileEncryptionKey(aesKey: key.makeData(), aesIv: iv.makeData()), decryptedSize: size))) let image = TelegramMediaImage(imageId: MediaId(namespace: Namespaces.Media.CloudSecretImage, id: file.id), representations: representations, immediateThumbnailData: nil, reference: nil, partialReference: nil) parsedMedia.append(image) } @@ -740,7 +734,7 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 var previewRepresentations: [TelegramMediaImageRepresentation] = [] if thumb.size != 0 { let resource = LocalFileMediaResource(fileId: arc4random64()) - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(thumbW), height: CGFloat(thumbH)), resource: resource)) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: thumbW, height: thumbH), resource: resource)) resources.append((resource, thumb.makeData())) } let fileMedia = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.CloudSecretFile, id: file.id), partialReference: nil, resource: file.resource(key: SecretFileEncryptionKey(aesKey: key.makeData(), aesIv: iv.makeData()), decryptedSize: size), previewRepresentations: previewRepresentations, immediateThumbnailData: nil, mimeType: mimeType, size: Int(size), attributes: parsedAttributes) @@ -751,11 +745,11 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 text = caption } if let file = file { - let parsedAttributes: [TelegramMediaFileAttribute] = [.Video(duration: Int(duration), size: CGSize(width: CGFloat(w), height: CGFloat(h)), flags: []), .FileName(fileName: "video.mov")] + let parsedAttributes: [TelegramMediaFileAttribute] = [.Video(duration: Int(duration), size: PixelDimensions(width: w, height: h), flags: []), .FileName(fileName: "video.mov")] var previewRepresentations: [TelegramMediaImageRepresentation] = [] if thumb.size != 0 { let resource = LocalFileMediaResource(fileId: arc4random64()) - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(thumbW), height: CGFloat(thumbH)), resource: resource)) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: thumbW, height: thumbH), resource: resource)) resources.append((resource, thumb.makeData())) } let fileMedia = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.CloudSecretFile, id: file.id), partialReference: nil, resource: file.resource(key: SecretFileEncryptionKey(aesKey: key.makeData(), aesIv: iv.makeData()), decryptedSize: size), previewRepresentations: previewRepresentations, immediateThumbnailData: nil, mimeType: mimeType, size: Int(size), attributes: parsedAttributes) @@ -773,7 +767,7 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 case let .photoSize(_, location, w, h, size): switch location { case let .fileLocation(dcId, volumeId, localId, secret): - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: CloudFileMediaResource(datacenterId: Int(dcId), volumeId: volumeId, localId: localId, secret: secret, size: size == 0 ? nil : Int(size), fileReference: nil))) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: CloudFileMediaResource(datacenterId: Int(dcId), volumeId: volumeId, localId: localId, secret: secret, size: size == 0 ? nil : Int(size), fileReference: nil))) case .fileLocationUnavailable: break } @@ -783,7 +777,7 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 case let .fileLocation(dcId, volumeId, localId, secret): let resource = CloudFileMediaResource(datacenterId: Int(dcId), volumeId: volumeId, localId: localId, secret: secret, size: bytes.size, fileReference: nil) resources.append((resource, bytes.makeData())) - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: resource)) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: resource)) case .fileLocationUnavailable: break } @@ -912,10 +906,10 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 var representations: [TelegramMediaImageRepresentation] = [] if thumb.size != 0 { let resource = LocalFileMediaResource(fileId: arc4random64()) - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(thumbW), height: CGFloat(thumbH)), resource: resource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: thumbW, height: thumbH), resource: resource)) resources.append((resource, thumb.makeData())) } - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: file.resource(key: SecretFileEncryptionKey(aesKey: key.makeData(), aesIv: iv.makeData()), decryptedSize: size))) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: file.resource(key: SecretFileEncryptionKey(aesKey: key.makeData(), aesIv: iv.makeData()), decryptedSize: size))) let image = TelegramMediaImage(imageId: MediaId(namespace: Namespaces.Media.CloudSecretImage, id: file.id), representations: representations, immediateThumbnailData: nil, reference: nil, partialReference: nil) parsedMedia.append(image) } @@ -939,7 +933,7 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 var previewRepresentations: [TelegramMediaImageRepresentation] = [] if thumb.size != 0 { let resource = LocalFileMediaResource(fileId: arc4random64()) - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(thumbW), height: CGFloat(thumbH)), resource: resource)) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: thumbW, height: thumbH), resource: resource)) resources.append((resource, thumb.makeData())) } let fileMedia = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.CloudSecretFile, id: file.id), partialReference: nil, resource: file.resource(key: SecretFileEncryptionKey(aesKey: key.makeData(), aesIv: iv.makeData()), decryptedSize: size), previewRepresentations: previewRepresentations, immediateThumbnailData: nil, mimeType: mimeType, size: Int(size), attributes: parsedAttributes) @@ -966,11 +960,11 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 text = caption } if let file = file { - let parsedAttributes: [TelegramMediaFileAttribute] = [.Video(duration: Int(duration), size: CGSize(width: CGFloat(w), height: CGFloat(h)), flags: []), .FileName(fileName: "video.mov")] + let parsedAttributes: [TelegramMediaFileAttribute] = [.Video(duration: Int(duration), size: PixelDimensions(width: w, height: h), flags: []), .FileName(fileName: "video.mov")] var previewRepresentations: [TelegramMediaImageRepresentation] = [] if thumb.size != 0 { let resource = LocalFileMediaResource(fileId: arc4random64()) - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(thumbW), height: CGFloat(thumbH)), resource: resource)) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: thumbW, height: thumbH), resource: resource)) resources.append((resource, thumb.makeData())) } let fileMedia = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.CloudSecretFile, id: file.id), partialReference: nil, resource: file.resource(key: SecretFileEncryptionKey(aesKey: key.makeData(), aesIv: iv.makeData()), decryptedSize: size), previewRepresentations: previewRepresentations, immediateThumbnailData: nil, mimeType: mimeType, size: Int(size), attributes: parsedAttributes) @@ -988,7 +982,7 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 case let .photoSize(_, location, w, h, size): switch location { case let .fileLocation(dcId, volumeId, localId, secret): - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: CloudFileMediaResource(datacenterId: Int(dcId), volumeId: volumeId, localId: localId, secret: secret, size: size == 0 ? nil : Int(size), fileReference: nil))) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: CloudFileMediaResource(datacenterId: Int(dcId), volumeId: volumeId, localId: localId, secret: secret, size: size == 0 ? nil : Int(size), fileReference: nil))) case .fileLocationUnavailable: break } @@ -998,7 +992,7 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 case let .fileLocation(dcId, volumeId, localId, secret): let resource = CloudFileMediaResource(datacenterId: Int(dcId), volumeId: volumeId, localId: localId, secret: secret, size: bytes.size, fileReference: nil) resources.append((resource, bytes.makeData())) - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: resource)) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: resource)) case .fileLocationUnavailable: break } @@ -1146,10 +1140,10 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 var representations: [TelegramMediaImageRepresentation] = [] if thumb.size != 0 { let resource = LocalFileMediaResource(fileId: arc4random64()) - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(thumbW), height: CGFloat(thumbH)), resource: resource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: thumbW, height: thumbH), resource: resource)) resources.append((resource, thumb.makeData())) } - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: file.resource(key: SecretFileEncryptionKey(aesKey: key.makeData(), aesIv: iv.makeData()), decryptedSize: size))) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: file.resource(key: SecretFileEncryptionKey(aesKey: key.makeData(), aesIv: iv.makeData()), decryptedSize: size))) let image = TelegramMediaImage(imageId: MediaId(namespace: Namespaces.Media.CloudSecretImage, id: file.id), representations: representations, immediateThumbnailData: nil, reference: nil, partialReference: nil) parsedMedia.append(image) } @@ -1173,7 +1167,7 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 var previewRepresentations: [TelegramMediaImageRepresentation] = [] if thumb.size != 0 { let resource = LocalFileMediaResource(fileId: arc4random64()) - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(thumbW), height: CGFloat(thumbH)), resource: resource)) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: thumbW, height: thumbH), resource: resource)) resources.append((resource, thumb.makeData())) } let fileMedia = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.CloudSecretFile, id: file.id), partialReference: nil, resource: file.resource(key: SecretFileEncryptionKey(aesKey: key.makeData(), aesIv: iv.makeData()), decryptedSize: size), previewRepresentations: previewRepresentations, immediateThumbnailData: nil, mimeType: mimeType, size: Int(size), attributes: parsedAttributes) @@ -1200,11 +1194,11 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 text = caption } if let file = file { - let parsedAttributes: [TelegramMediaFileAttribute] = [.Video(duration: Int(duration), size: CGSize(width: CGFloat(w), height: CGFloat(h)), flags: []), .FileName(fileName: "video.mov")] + let parsedAttributes: [TelegramMediaFileAttribute] = [.Video(duration: Int(duration), size: PixelDimensions(width: w, height: h), flags: []), .FileName(fileName: "video.mov")] var previewRepresentations: [TelegramMediaImageRepresentation] = [] if thumb.size != 0 { let resource = LocalFileMediaResource(fileId: arc4random64()) - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(thumbW), height: CGFloat(thumbH)), resource: resource)) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: thumbW, height: thumbH), resource: resource)) resources.append((resource, thumb.makeData())) } let fileMedia = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.CloudSecretFile, id: file.id), partialReference: nil, resource: file.resource(key: SecretFileEncryptionKey(aesKey: key.makeData(), aesIv: iv.makeData()), decryptedSize: size), previewRepresentations: previewRepresentations, immediateThumbnailData: nil, mimeType: mimeType, size: Int(size), attributes: parsedAttributes) @@ -1222,7 +1216,7 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 case let .photoSize(_, location, w, h, size): switch location { case let .fileLocation(dcId, volumeId, localId, secret): - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: CloudFileMediaResource(datacenterId: Int(dcId), volumeId: volumeId, localId: localId, secret: secret, size: size == 0 ? nil : Int(size), fileReference: nil))) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: CloudFileMediaResource(datacenterId: Int(dcId), volumeId: volumeId, localId: localId, secret: secret, size: size == 0 ? nil : Int(size), fileReference: nil))) case .fileLocationUnavailable: break } @@ -1232,7 +1226,7 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 case let .fileLocation(dcId, volumeId, localId, secret): let resource = CloudFileMediaResource(datacenterId: Int(dcId), volumeId: volumeId, localId: localId, secret: secret, size: bytes.size, fileReference: nil) resources.append((resource, bytes.makeData())) - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: resource)) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: resource)) case .fileLocationUnavailable: break } diff --git a/submodules/TelegramCore/Sources/ProcessSecretChatIncomingEncryptedOperations.swift b/submodules/TelegramCore/Sources/ProcessSecretChatIncomingEncryptedOperations.swift index e97d4c7eb4..3c2e0dd103 100644 --- a/submodules/TelegramCore/Sources/ProcessSecretChatIncomingEncryptedOperations.swift +++ b/submodules/TelegramCore/Sources/ProcessSecretChatIncomingEncryptedOperations.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/ProxyServersStatuses.swift b/submodules/TelegramCore/Sources/ProxyServersStatuses.swift index 24ac494c28..bd6c75c7fd 100644 --- a/submodules/TelegramCore/Sources/ProxyServersStatuses.swift +++ b/submodules/TelegramCore/Sources/ProxyServersStatuses.swift @@ -1,15 +1,6 @@ import Foundation -#if os(macOS) - import SwiftSignalKitMac - import MtProtoKitMac -#else - import SwiftSignalKit - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import SwiftSignalKit +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ProxySettings.swift b/submodules/TelegramCore/Sources/ProxySettings.swift index d1498bb0ad..82253e7fb4 100644 --- a/submodules/TelegramCore/Sources/ProxySettings.swift +++ b/submodules/TelegramCore/Sources/ProxySettings.swift @@ -1,14 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac -#else - import Postbox - import SwiftSignalKit - import MtProtoKit -#endif - +import Postbox +import SwiftSignalKit +import MtProtoKit import SyncCore public func updateProxySettingsInteractively(accountManager: AccountManager, _ f: @escaping (ProxySettings) -> ProxySettings) -> Signal { diff --git a/submodules/TelegramCore/Sources/RateCall.swift b/submodules/TelegramCore/Sources/RateCall.swift index d1727dfd8c..340236437a 100644 --- a/submodules/TelegramCore/Sources/RateCall.swift +++ b/submodules/TelegramCore/Sources/RateCall.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import MtProtoKitMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif - import SwiftSignalKit -#endif +import Postbox +import MtProtoKit +import SwiftSignalKit +import TelegramApi public func rateCall(account: Account, callId: CallId, starsCount: Int32, comment: String = "", userInitiated: Bool) -> Signal { var flags: Int32 = 0 diff --git a/submodules/TelegramCore/Sources/ReactionsMessageAttribute.swift b/submodules/TelegramCore/Sources/ReactionsMessageAttribute.swift index c70a20b726..625486d429 100644 --- a/submodules/TelegramCore/Sources/ReactionsMessageAttribute.swift +++ b/submodules/TelegramCore/Sources/ReactionsMessageAttribute.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import PostboxMac -import TelegramApiMac -#else import Postbox import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/RecentAccountSession.swift b/submodules/TelegramCore/Sources/RecentAccountSession.swift index d148cd0340..df7df1c088 100644 --- a/submodules/TelegramCore/Sources/RecentAccountSession.swift +++ b/submodules/TelegramCore/Sources/RecentAccountSession.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import TelegramApiMac -#else import TelegramApi -#endif public struct AccountSessionFlags: OptionSet { public var rawValue: Int32 diff --git a/submodules/TelegramCore/Sources/RecentAccountSessions.swift b/submodules/TelegramCore/Sources/RecentAccountSessions.swift index 5b4b09e90f..68ee35add2 100644 --- a/submodules/TelegramCore/Sources/RecentAccountSessions.swift +++ b/submodules/TelegramCore/Sources/RecentAccountSessions.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit public func requestRecentAccountSessions(account: Account) -> Signal<[RecentAccountSession], NoError> { return account.network.request(Api.functions.account.getAuthorizations()) diff --git a/submodules/TelegramCore/Sources/RecentPeers.swift b/submodules/TelegramCore/Sources/RecentPeers.swift index 3fe5226d85..eb44d97c28 100644 --- a/submodules/TelegramCore/Sources/RecentPeers.swift +++ b/submodules/TelegramCore/Sources/RecentPeers.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/RecentWebSessions.swift b/submodules/TelegramCore/Sources/RecentWebSessions.swift index 8a6b7bb0a6..5c8d25baa9 100644 --- a/submodules/TelegramCore/Sources/RecentWebSessions.swift +++ b/submodules/TelegramCore/Sources/RecentWebSessions.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/RecentlySearchedPeerIds.swift b/submodules/TelegramCore/Sources/RecentlySearchedPeerIds.swift index 084d01d6d0..ad9544f4dc 100644 --- a/submodules/TelegramCore/Sources/RecentlySearchedPeerIds.swift +++ b/submodules/TelegramCore/Sources/RecentlySearchedPeerIds.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/RecentlyUsedHashtags.swift b/submodules/TelegramCore/Sources/RecentlyUsedHashtags.swift index 04a7d8c981..0bd04d68a4 100644 --- a/submodules/TelegramCore/Sources/RecentlyUsedHashtags.swift +++ b/submodules/TelegramCore/Sources/RecentlyUsedHashtags.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/RegisterNotificationToken.swift b/submodules/TelegramCore/Sources/RegisterNotificationToken.swift index a317b93a8f..d57cb98c9b 100644 --- a/submodules/TelegramCore/Sources/RegisterNotificationToken.swift +++ b/submodules/TelegramCore/Sources/RegisterNotificationToken.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -import PostboxMac -import TelegramApiMac -#else import SwiftSignalKit import Postbox import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/RemoteStorageConfiguration.swift b/submodules/TelegramCore/Sources/RemoteStorageConfiguration.swift index 316835b6c7..174478236d 100644 --- a/submodules/TelegramCore/Sources/RemoteStorageConfiguration.swift +++ b/submodules/TelegramCore/Sources/RemoteStorageConfiguration.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -#else import Postbox import SwiftSignalKit -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/RemovePeerChat.swift b/submodules/TelegramCore/Sources/RemovePeerChat.swift index ae7d7f0a7b..34e4b76797 100644 --- a/submodules/TelegramCore/Sources/RemovePeerChat.swift +++ b/submodules/TelegramCore/Sources/RemovePeerChat.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/RemovePeerMember.swift b/submodules/TelegramCore/Sources/RemovePeerMember.swift index b92aa69288..5d1802b978 100644 --- a/submodules/TelegramCore/Sources/RemovePeerMember.swift +++ b/submodules/TelegramCore/Sources/RemovePeerMember.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ReplyMarkupMessageAttribute.swift b/submodules/TelegramCore/Sources/ReplyMarkupMessageAttribute.swift index 11300d8922..cf364c8429 100644 --- a/submodules/TelegramCore/Sources/ReplyMarkupMessageAttribute.swift +++ b/submodules/TelegramCore/Sources/ReplyMarkupMessageAttribute.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/ReportPeer.swift b/submodules/TelegramCore/Sources/ReportPeer.swift index d626351feb..ff58fd5061 100644 --- a/submodules/TelegramCore/Sources/ReportPeer.swift +++ b/submodules/TelegramCore/Sources/ReportPeer.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/RequestChatContextResults.swift b/submodules/TelegramCore/Sources/RequestChatContextResults.swift index 9bd5b48d63..4a9498878e 100644 --- a/submodules/TelegramCore/Sources/RequestChatContextResults.swift +++ b/submodules/TelegramCore/Sources/RequestChatContextResults.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore public enum RequestChatContextResultsError { diff --git a/submodules/TelegramCore/Sources/RequestEditMessage.swift b/submodules/TelegramCore/Sources/RequestEditMessage.swift index 4eeb177be4..94d775b546 100644 --- a/submodules/TelegramCore/Sources/RequestEditMessage.swift +++ b/submodules/TelegramCore/Sources/RequestEditMessage.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/RequestMessageActionCallback.swift b/submodules/TelegramCore/Sources/RequestMessageActionCallback.swift index 9625d12fde..7631d4bee6 100644 --- a/submodules/TelegramCore/Sources/RequestMessageActionCallback.swift +++ b/submodules/TelegramCore/Sources/RequestMessageActionCallback.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/RequestPhoneNumber.swift b/submodules/TelegramCore/Sources/RequestPhoneNumber.swift index 3668acad1d..2842feaa2e 100644 --- a/submodules/TelegramCore/Sources/RequestPhoneNumber.swift +++ b/submodules/TelegramCore/Sources/RequestPhoneNumber.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import TelegramApiMac -#else import Postbox import SwiftSignalKit import TelegramApi -#endif public func requestPhoneNumber(account: Account, peerId: PeerId) -> Signal { return .never() diff --git a/submodules/TelegramCore/Sources/RequestSecureIdForm.swift b/submodules/TelegramCore/Sources/RequestSecureIdForm.swift index e29ec1197d..6a79f35ff1 100644 --- a/submodules/TelegramCore/Sources/RequestSecureIdForm.swift +++ b/submodules/TelegramCore/Sources/RequestSecureIdForm.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import MtProtoKitMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif - import SwiftSignalKit -#endif +import Postbox +import MtProtoKit +import SwiftSignalKit +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/RequestStartBot.swift b/submodules/TelegramCore/Sources/RequestStartBot.swift index 8a514808ab..44e6b1118b 100644 --- a/submodules/TelegramCore/Sources/RequestStartBot.swift +++ b/submodules/TelegramCore/Sources/RequestStartBot.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/RequestUserPhotos.swift b/submodules/TelegramCore/Sources/RequestUserPhotos.swift index 8aa3ab5618..d31c7f52d9 100644 --- a/submodules/TelegramCore/Sources/RequestUserPhotos.swift +++ b/submodules/TelegramCore/Sources/RequestUserPhotos.swift @@ -1,20 +1,9 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/ResolvePeerByName.swift b/submodules/TelegramCore/Sources/ResolvePeerByName.swift index ac9851b251..2e4f7ec625 100644 --- a/submodules/TelegramCore/Sources/ResolvePeerByName.swift +++ b/submodules/TelegramCore/Sources/ResolvePeerByName.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/RichText.swift b/submodules/TelegramCore/Sources/RichText.swift index af86168ec9..dba1487045 100644 --- a/submodules/TelegramCore/Sources/RichText.swift +++ b/submodules/TelegramCore/Sources/RichText.swift @@ -1,12 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import UIKit - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore @@ -42,7 +36,7 @@ extension RichText { case let .textPhone(text, phone): self = .phone(text: RichText(apiText: text), phone: phone) case let .textImage(documentId, w, h): - self = .image(id: MediaId(namespace: Namespaces.Media.CloudFile, id: documentId), dimensions: CGSize(width: CGFloat(w), height: CGFloat(h))) + self = .image(id: MediaId(namespace: Namespaces.Media.CloudFile, id: documentId), dimensions: PixelDimensions(width: w, height: h)) case let .textAnchor(text, name): self = .anchor(text: RichText(apiText: text), name: name) } diff --git a/submodules/TelegramCore/Sources/SaveSecureIdValue.swift b/submodules/TelegramCore/Sources/SaveSecureIdValue.swift index e2da085f46..06fb9d5cdb 100644 --- a/submodules/TelegramCore/Sources/SaveSecureIdValue.swift +++ b/submodules/TelegramCore/Sources/SaveSecureIdValue.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import MtProtoKitMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif - import SwiftSignalKit -#endif +import Postbox +import MtProtoKit +import SwiftSignalKit +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/ScheduledMessages.swift b/submodules/TelegramCore/Sources/ScheduledMessages.swift index f89da8a6c0..d40720f44c 100644 --- a/submodules/TelegramCore/Sources/ScheduledMessages.swift +++ b/submodules/TelegramCore/Sources/ScheduledMessages.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi -#endif +import Postbox +import SwiftSignalKit +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/SearchGroupMembers.swift b/submodules/TelegramCore/Sources/SearchGroupMembers.swift index 74ce58454d..378e41837c 100644 --- a/submodules/TelegramCore/Sources/SearchGroupMembers.swift +++ b/submodules/TelegramCore/Sources/SearchGroupMembers.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SearchMessages.swift b/submodules/TelegramCore/Sources/SearchMessages.swift index 41b98ccbfc..3d63b79ef7 100644 --- a/submodules/TelegramCore/Sources/SearchMessages.swift +++ b/submodules/TelegramCore/Sources/SearchMessages.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SearchPeers.swift b/submodules/TelegramCore/Sources/SearchPeers.swift index 5248ee97ce..ab6b93a3e7 100644 --- a/submodules/TelegramCore/Sources/SearchPeers.swift +++ b/submodules/TelegramCore/Sources/SearchPeers.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SearchStickers.swift b/submodules/TelegramCore/Sources/SearchStickers.swift index c7f12c6dfa..c17bc64c94 100644 --- a/submodules/TelegramCore/Sources/SearchStickers.swift +++ b/submodules/TelegramCore/Sources/SearchStickers.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SecretChatEncryption.swift b/submodules/TelegramCore/Sources/SecretChatEncryption.swift index 4c20b69eb1..d559f9eb2f 100644 --- a/submodules/TelegramCore/Sources/SecretChatEncryption.swift +++ b/submodules/TelegramCore/Sources/SecretChatEncryption.swift @@ -1,15 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import MtProtoKitMac -#else - import Postbox - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SecretChatEncryptionConfig.swift b/submodules/TelegramCore/Sources/SecretChatEncryptionConfig.swift index e1337da0f7..5475efc558 100644 --- a/submodules/TelegramCore/Sources/SecretChatEncryptionConfig.swift +++ b/submodules/TelegramCore/Sources/SecretChatEncryptionConfig.swift @@ -1,15 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - import MtProtoKit -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SecretChatFileReference.swift b/submodules/TelegramCore/Sources/SecretChatFileReference.swift index cf689a4d37..c6cd02e3fd 100644 --- a/submodules/TelegramCore/Sources/SecretChatFileReference.swift +++ b/submodules/TelegramCore/Sources/SecretChatFileReference.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/SecretChatIncomingEncryptedOperation.swift b/submodules/TelegramCore/Sources/SecretChatIncomingEncryptedOperation.swift index 796e485e1c..ac842093b8 100644 --- a/submodules/TelegramCore/Sources/SecretChatIncomingEncryptedOperation.swift +++ b/submodules/TelegramCore/Sources/SecretChatIncomingEncryptedOperation.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/SecretChatLayerNegotiation.swift b/submodules/TelegramCore/Sources/SecretChatLayerNegotiation.swift index 03d71edab7..ed5c0fbad3 100644 --- a/submodules/TelegramCore/Sources/SecretChatLayerNegotiation.swift +++ b/submodules/TelegramCore/Sources/SecretChatLayerNegotiation.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SecretChatOutgoingOperation.swift b/submodules/TelegramCore/Sources/SecretChatOutgoingOperation.swift index adb6d6aeaf..7baaa3bef0 100644 --- a/submodules/TelegramCore/Sources/SecretChatOutgoingOperation.swift +++ b/submodules/TelegramCore/Sources/SecretChatOutgoingOperation.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/SecretChatRekeySession.swift b/submodules/TelegramCore/Sources/SecretChatRekeySession.swift index c05ef1d35c..d48e08b32f 100644 --- a/submodules/TelegramCore/Sources/SecretChatRekeySession.swift +++ b/submodules/TelegramCore/Sources/SecretChatRekeySession.swift @@ -1,15 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import MtProtoKitMac -#else - import Postbox - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import MtProtoKit import SyncCore import EncryptionProvider diff --git a/submodules/TelegramCore/Sources/SecureFileMediaResource.swift b/submodules/TelegramCore/Sources/SecureFileMediaResource.swift index 47632ffd04..1fdf6b63fa 100644 --- a/submodules/TelegramCore/Sources/SecureFileMediaResource.swift +++ b/submodules/TelegramCore/Sources/SecureFileMediaResource.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/SecureIdConfiguration.swift b/submodules/TelegramCore/Sources/SecureIdConfiguration.swift index ea1d560726..46c2336775 100644 --- a/submodules/TelegramCore/Sources/SecureIdConfiguration.swift +++ b/submodules/TelegramCore/Sources/SecureIdConfiguration.swift @@ -1,19 +1,7 @@ -import Foundation -#if os(macOS) -import PostboxMac -import MtProtoKitMac -import SwiftSignalKitMac -import TelegramApiMac -#else import Postbox -import TelegramApi -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif +import MtProtoKit import SwiftSignalKit -#endif +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/SecureIdDataTypes.swift b/submodules/TelegramCore/Sources/SecureIdDataTypes.swift index 059aec4ebc..adfca5c8ed 100644 --- a/submodules/TelegramCore/Sources/SecureIdDataTypes.swift +++ b/submodules/TelegramCore/Sources/SecureIdDataTypes.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import TelegramApiMac -#else import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/SecureIdForm.swift b/submodules/TelegramCore/Sources/SecureIdForm.swift index fa122c6969..08bb797061 100644 --- a/submodules/TelegramCore/Sources/SecureIdForm.swift +++ b/submodules/TelegramCore/Sources/SecureIdForm.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox public enum SecureIdRequestedFormField: Equatable { case just(SecureIdRequestedFormFieldValue) diff --git a/submodules/TelegramCore/Sources/SecureIdValueContentError.swift b/submodules/TelegramCore/Sources/SecureIdValueContentError.swift index cab7c59106..01b395bf0c 100644 --- a/submodules/TelegramCore/Sources/SecureIdValueContentError.swift +++ b/submodules/TelegramCore/Sources/SecureIdValueContentError.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import TelegramApiMac -#else import TelegramApi -#endif public enum SecureIdValueContentErrorKey: Hashable { diff --git a/submodules/TelegramCore/Sources/Serialization.swift b/submodules/TelegramCore/Sources/Serialization.swift index 13e450e052..5a2e8b38ef 100644 --- a/submodules/TelegramCore/Sources/Serialization.swift +++ b/submodules/TelegramCore/Sources/Serialization.swift @@ -1,15 +1,6 @@ import Foundation -#if os(macOS) - import MtProtoKitMac - import TelegramApiMac -#else - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit +import TelegramApi private let apiPrefix: String = { diff --git a/submodules/TelegramCore/Sources/SetSecretChatMessageAutoremoveTimeoutInteractively.swift b/submodules/TelegramCore/Sources/SetSecretChatMessageAutoremoveTimeoutInteractively.swift index 14b9bab855..eb1473f89c 100644 --- a/submodules/TelegramCore/Sources/SetSecretChatMessageAutoremoveTimeoutInteractively.swift +++ b/submodules/TelegramCore/Sources/SetSecretChatMessageAutoremoveTimeoutInteractively.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SingleMessageView.swift b/submodules/TelegramCore/Sources/SingleMessageView.swift index 14a5dd7207..f54bc1bc62 100644 --- a/submodules/TelegramCore/Sources/SingleMessageView.swift +++ b/submodules/TelegramCore/Sources/SingleMessageView.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SlowMode.swift b/submodules/TelegramCore/Sources/SlowMode.swift index 4436a17c49..4bb00f44e5 100644 --- a/submodules/TelegramCore/Sources/SlowMode.swift +++ b/submodules/TelegramCore/Sources/SlowMode.swift @@ -1,12 +1,6 @@ -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import TelegramApiMac -#else import Postbox import TelegramApi import SwiftSignalKit -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/SplitTest.swift b/submodules/TelegramCore/Sources/SplitTest.swift index a632f27935..10cac1b41e 100644 --- a/submodules/TelegramCore/Sources/SplitTest.swift +++ b/submodules/TelegramCore/Sources/SplitTest.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import PostboxMac -#else import Postbox -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/StandaloneSendMessage.swift b/submodules/TelegramCore/Sources/StandaloneSendMessage.swift index df3b8f1e0d..8a3b1aaa63 100644 --- a/submodules/TelegramCore/Sources/StandaloneSendMessage.swift +++ b/submodules/TelegramCore/Sources/StandaloneSendMessage.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/StandaloneUploadedMedia.swift b/submodules/TelegramCore/Sources/StandaloneUploadedMedia.swift index bad9d6c00a..05a73c353d 100644 --- a/submodules/TelegramCore/Sources/StandaloneUploadedMedia.swift +++ b/submodules/TelegramCore/Sources/StandaloneUploadedMedia.swift @@ -1,14 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import TelegramApi - import Postbox - import SwiftSignalKit - import UIKit -#endif +import TelegramApi +import Postbox +import SwiftSignalKit import SyncCore @@ -60,7 +53,7 @@ private func uploadedThumbnail(network: Network, postbox: Postbox, data: Data) - } } -public func standaloneUploadedImage(account: Account, peerId: PeerId, text: String, data: Data, thumbnailData: Data? = nil, dimensions: CGSize) -> Signal { +public func standaloneUploadedImage(account: Account, peerId: PeerId, text: String, data: Data, thumbnailData: Data? = nil, dimensions: PixelDimensions) -> Signal { return multipartUpload(network: account.network, postbox: account.postbox, source: .data(data), encrypt: peerId.namespace == Namespaces.Peer.SecretChat, tag: TelegramMediaResourceFetchTag(statsCategory: .image), hintFileSize: nil, hintFileIsLarge: false) |> mapError { _ -> StandaloneUploadMediaError in return .generic } |> mapToSignal { next -> Signal in diff --git a/submodules/TelegramCore/Sources/StickerManagement.swift b/submodules/TelegramCore/Sources/StickerManagement.swift index f12adda9cd..1ec8db6630 100644 --- a/submodules/TelegramCore/Sources/StickerManagement.swift +++ b/submodules/TelegramCore/Sources/StickerManagement.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import TelegramApi - import Postbox - import SwiftSignalKit -#endif +import TelegramApi +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/StickerPack.swift b/submodules/TelegramCore/Sources/StickerPack.swift index 01d1934342..c653fb9913 100644 --- a/submodules/TelegramCore/Sources/StickerPack.swift +++ b/submodules/TelegramCore/Sources/StickerPack.swift @@ -1,12 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import UIKit - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore @@ -16,13 +10,13 @@ func telegramStickerPachThumbnailRepresentationFromApiSize(datacenterId: Int32, switch location { case let .fileLocationToBeDeprecated(volumeId, localId): let resource = CloudStickerPackThumbnailMediaResource(datacenterId: datacenterId, volumeId: volumeId, localId: localId) - return TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: resource) + return TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: resource) } case let .photoSize(_, location, w, h, _): switch location { case let .fileLocationToBeDeprecated(volumeId, localId): let resource = CloudStickerPackThumbnailMediaResource(datacenterId: datacenterId, volumeId: volumeId, localId: localId) - return TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: resource) + return TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: resource) } case .photoStrippedSize: return nil diff --git a/submodules/TelegramCore/Sources/StickerPackInteractiveOperations.swift b/submodules/TelegramCore/Sources/StickerPackInteractiveOperations.swift index 8c2c9b90ff..28fa1e1a6d 100644 --- a/submodules/TelegramCore/Sources/StickerPackInteractiveOperations.swift +++ b/submodules/TelegramCore/Sources/StickerPackInteractiveOperations.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/StickerSetInstallation.swift b/submodules/TelegramCore/Sources/StickerSetInstallation.swift index 9fac2b1c00..f8f84a4e2d 100644 --- a/submodules/TelegramCore/Sources/StickerSetInstallation.swift +++ b/submodules/TelegramCore/Sources/StickerSetInstallation.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/StoreMessage_Telegram.swift b/submodules/TelegramCore/Sources/StoreMessage_Telegram.swift index e904a3612a..302f5ceefd 100644 --- a/submodules/TelegramCore/Sources/StoreMessage_Telegram.swift +++ b/submodules/TelegramCore/Sources/StoreMessage_Telegram.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/SuggestedLocalizationEntry.swift b/submodules/TelegramCore/Sources/SuggestedLocalizationEntry.swift index 8cb3a49c84..6ba5d1d739 100644 --- a/submodules/TelegramCore/Sources/SuggestedLocalizationEntry.swift +++ b/submodules/TelegramCore/Sources/SuggestedLocalizationEntry.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SupportPeerId.swift b/submodules/TelegramCore/Sources/SupportPeerId.swift index f50bb256d6..783c7c8552 100644 --- a/submodules/TelegramCore/Sources/SupportPeerId.swift +++ b/submodules/TelegramCore/Sources/SupportPeerId.swift @@ -1,18 +1,7 @@ -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SynchronizeAppLogEventsOperation.swift b/submodules/TelegramCore/Sources/SynchronizeAppLogEventsOperation.swift index 88183abcee..99669da865 100644 --- a/submodules/TelegramCore/Sources/SynchronizeAppLogEventsOperation.swift +++ b/submodules/TelegramCore/Sources/SynchronizeAppLogEventsOperation.swift @@ -1,17 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac -#else - import Postbox - import SwiftSignalKit - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SynchronizeChatInputStateOperation.swift b/submodules/TelegramCore/Sources/SynchronizeChatInputStateOperation.swift index 1c6220c78c..e00abb7bb5 100644 --- a/submodules/TelegramCore/Sources/SynchronizeChatInputStateOperation.swift +++ b/submodules/TelegramCore/Sources/SynchronizeChatInputStateOperation.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox import SyncCore diff --git a/submodules/TelegramCore/Sources/SynchronizeEmojiKeywordsOperation.swift b/submodules/TelegramCore/Sources/SynchronizeEmojiKeywordsOperation.swift index 28705e8289..52fb84441a 100644 --- a/submodules/TelegramCore/Sources/SynchronizeEmojiKeywordsOperation.swift +++ b/submodules/TelegramCore/Sources/SynchronizeEmojiKeywordsOperation.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import PostboxMac -#else import Postbox -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/SynchronizeGroupedPeersOperation.swift b/submodules/TelegramCore/Sources/SynchronizeGroupedPeersOperation.swift index 5cb52d0102..ccc308a736 100644 --- a/submodules/TelegramCore/Sources/SynchronizeGroupedPeersOperation.swift +++ b/submodules/TelegramCore/Sources/SynchronizeGroupedPeersOperation.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SynchronizeLocalizationUpdatesOperation.swift b/submodules/TelegramCore/Sources/SynchronizeLocalizationUpdatesOperation.swift index 615dfd17d7..f471030761 100644 --- a/submodules/TelegramCore/Sources/SynchronizeLocalizationUpdatesOperation.swift +++ b/submodules/TelegramCore/Sources/SynchronizeLocalizationUpdatesOperation.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SynchronizeMarkAllUnseenPersonalMessagesOperation.swift b/submodules/TelegramCore/Sources/SynchronizeMarkAllUnseenPersonalMessagesOperation.swift index b317103d97..143893c3ba 100644 --- a/submodules/TelegramCore/Sources/SynchronizeMarkAllUnseenPersonalMessagesOperation.swift +++ b/submodules/TelegramCore/Sources/SynchronizeMarkAllUnseenPersonalMessagesOperation.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -#else import Postbox import SwiftSignalKit -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/SynchronizePeerReadState.swift b/submodules/TelegramCore/Sources/SynchronizePeerReadState.swift index d24111b987..ef3f92bdb2 100644 --- a/submodules/TelegramCore/Sources/SynchronizePeerReadState.swift +++ b/submodules/TelegramCore/Sources/SynchronizePeerReadState.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SynchronizeRecentlyUsedMediaOperations.swift b/submodules/TelegramCore/Sources/SynchronizeRecentlyUsedMediaOperations.swift index 3145923a25..c8104c39fd 100644 --- a/submodules/TelegramCore/Sources/SynchronizeRecentlyUsedMediaOperations.swift +++ b/submodules/TelegramCore/Sources/SynchronizeRecentlyUsedMediaOperations.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -#else import Postbox import SwiftSignalKit -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/SynchronizeSavedGifsOperation.swift b/submodules/TelegramCore/Sources/SynchronizeSavedGifsOperation.swift index c25e90fed8..5fda808bcc 100644 --- a/submodules/TelegramCore/Sources/SynchronizeSavedGifsOperation.swift +++ b/submodules/TelegramCore/Sources/SynchronizeSavedGifsOperation.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/SynchronizeSavedStickersOperation.swift b/submodules/TelegramCore/Sources/SynchronizeSavedStickersOperation.swift index d42e164e0e..f606cfe342 100644 --- a/submodules/TelegramCore/Sources/SynchronizeSavedStickersOperation.swift +++ b/submodules/TelegramCore/Sources/SynchronizeSavedStickersOperation.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/TelegramChannel.swift b/submodules/TelegramCore/Sources/TelegramChannel.swift index a062834b3c..89702678e0 100644 --- a/submodules/TelegramCore/Sources/TelegramChannel.swift +++ b/submodules/TelegramCore/Sources/TelegramChannel.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox import SyncCore diff --git a/submodules/TelegramCore/Sources/TelegramChannelAdminRights.swift b/submodules/TelegramCore/Sources/TelegramChannelAdminRights.swift index 2bb6989f71..f4bb2bdb2b 100644 --- a/submodules/TelegramCore/Sources/TelegramChannelAdminRights.swift +++ b/submodules/TelegramCore/Sources/TelegramChannelAdminRights.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/TelegramChannelBannedRights.swift b/submodules/TelegramCore/Sources/TelegramChannelBannedRights.swift index 8a07c2c225..1c9c2dd520 100644 --- a/submodules/TelegramCore/Sources/TelegramChannelBannedRights.swift +++ b/submodules/TelegramCore/Sources/TelegramChannelBannedRights.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/TelegramDeviceContactImportInfo.swift b/submodules/TelegramCore/Sources/TelegramDeviceContactImportInfo.swift index e222b6d405..46c4b21893 100644 --- a/submodules/TelegramCore/Sources/TelegramDeviceContactImportInfo.swift +++ b/submodules/TelegramCore/Sources/TelegramDeviceContactImportInfo.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/TelegramGroup.swift b/submodules/TelegramCore/Sources/TelegramGroup.swift index 62ba4be67f..8c8f512713 100644 --- a/submodules/TelegramCore/Sources/TelegramGroup.swift +++ b/submodules/TelegramCore/Sources/TelegramGroup.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) - import PostboxMac -#else - import Postbox -#endif +import Postbox import SyncCore diff --git a/submodules/TelegramCore/Sources/TelegramMediaAction.swift b/submodules/TelegramCore/Sources/TelegramMediaAction.swift index ca16d3a200..e089045f3a 100644 --- a/submodules/TelegramCore/Sources/TelegramMediaAction.swift +++ b/submodules/TelegramCore/Sources/TelegramMediaAction.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/TelegramMediaFile.swift b/submodules/TelegramCore/Sources/TelegramMediaFile.swift index 04b5b56191..51edbe126b 100644 --- a/submodules/TelegramCore/Sources/TelegramMediaFile.swift +++ b/submodules/TelegramCore/Sources/TelegramMediaFile.swift @@ -1,16 +1,10 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import UIKit - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore -func dimensionsForFileAttributes(_ attributes: [TelegramMediaFileAttribute]) -> CGSize? { +func dimensionsForFileAttributes(_ attributes: [TelegramMediaFileAttribute]) -> PixelDimensions? { for attribute in attributes { switch attribute { case let .Video(_, size, _): @@ -39,11 +33,11 @@ func durationForFileAttributes(_ attributes: [TelegramMediaFileAttribute]) -> In } public extension TelegramMediaFile { - var dimensions: CGSize? { + var dimensions: PixelDimensions? { if let value = dimensionsForFileAttributes(self.attributes) { return value } else if self.isAnimatedSticker { - return CGSize(width: 512.0, height: 512.0) + return PixelDimensions(width: 512, height: 512) } else { return nil } @@ -89,7 +83,7 @@ func telegramMediaFileAttributesFromApiAttributes(_ attributes: [Api.DocumentAtt case .documentAttributeHasStickers: result.append(.HasLinkedStickers) case let .documentAttributeImageSize(w, h): - result.append(.ImageSize(size: CGSize(width: CGFloat(w), height: CGFloat(h)))) + result.append(.ImageSize(size: PixelDimensions(width: w, height: h))) case .documentAttributeAnimated: result.append(.Animated) case let .documentAttributeVideo(flags, duration, w, h): @@ -100,7 +94,7 @@ func telegramMediaFileAttributesFromApiAttributes(_ attributes: [Api.DocumentAtt if (flags & (1 << 1)) != 0 { videoFlags.insert(.supportsStreaming) } - result.append(.Video(duration: Int(duration), size: CGSize(width: CGFloat(w), height: CGFloat(h)), flags: videoFlags)) + result.append(.Video(duration: Int(duration), size: PixelDimensions(width: w, height: h), flags: videoFlags)) case let .documentAttributeAudio(flags, duration, title, performer, waveform): let isVoice = (flags & (1 << 10)) != 0 var waveformBuffer: MemoryBuffer? @@ -133,13 +127,13 @@ func telegramMediaFileThumbnailRepresentationsFromApiSizes(datacenterId: Int32, switch location { case let .fileLocationToBeDeprecated(volumeId, localId): let resource = CloudDocumentSizeMediaResource(datacenterId: datacenterId, documentId: documentId, accessHash: accessHash, sizeSpec: type, volumeId: volumeId, localId: localId, fileReference: fileReference) - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: resource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: resource)) } case let .photoSize(type, location, w, h, _): switch location { case let .fileLocationToBeDeprecated(volumeId, localId): let resource = CloudDocumentSizeMediaResource(datacenterId: datacenterId, documentId: documentId, accessHash: accessHash, sizeSpec: type, volumeId: volumeId, localId: localId, fileReference: fileReference) - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: resource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: resource)) } case let .photoStrippedSize(_, data): immediateThumbnailData = data.makeData() diff --git a/submodules/TelegramCore/Sources/TelegramMediaGame.swift b/submodules/TelegramCore/Sources/TelegramMediaGame.swift index 667f9c84dc..373c9790f4 100644 --- a/submodules/TelegramCore/Sources/TelegramMediaGame.swift +++ b/submodules/TelegramCore/Sources/TelegramMediaGame.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/TelegramMediaImage.swift b/submodules/TelegramCore/Sources/TelegramMediaImage.swift index 37fe0616ab..db04708bb2 100644 --- a/submodules/TelegramCore/Sources/TelegramMediaImage.swift +++ b/submodules/TelegramCore/Sources/TelegramMediaImage.swift @@ -1,12 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import UIKit - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore @@ -19,13 +13,13 @@ func telegramMediaImageRepresentationsFromApiSizes(datacenterId: Int32, photoId: switch location { case let .fileLocationToBeDeprecated(volumeId, localId): let resource = CloudPhotoSizeMediaResource(datacenterId: datacenterId, photoId: photoId, accessHash: accessHash, sizeSpec: type, volumeId: volumeId, localId: localId, fileReference: fileReference) - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: resource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: resource)) } case let .photoSize(type, location, w, h, _): switch location { case let .fileLocationToBeDeprecated(volumeId, localId): let resource = CloudPhotoSizeMediaResource(datacenterId: datacenterId, photoId: photoId, accessHash: accessHash, sizeSpec: type, volumeId: volumeId, localId: localId, fileReference: fileReference) - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: CGFloat(w), height: CGFloat(h)), resource: resource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: w, height: h), resource: resource)) } case let .photoStrippedSize(_, data): immediateThumbnailData = data.makeData() diff --git a/submodules/TelegramCore/Sources/TelegramMediaMap.swift b/submodules/TelegramCore/Sources/TelegramMediaMap.swift index 4ba223ba83..85c13e5e35 100644 --- a/submodules/TelegramCore/Sources/TelegramMediaMap.swift +++ b/submodules/TelegramCore/Sources/TelegramMediaMap.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/TelegramMediaPoll.swift b/submodules/TelegramCore/Sources/TelegramMediaPoll.swift index 6567b5bfc5..ab4e9fc689 100644 --- a/submodules/TelegramCore/Sources/TelegramMediaPoll.swift +++ b/submodules/TelegramCore/Sources/TelegramMediaPoll.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import PostboxMac -import TelegramApiMac -#else import Postbox import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/TelegramMediaWebDocument.swift b/submodules/TelegramCore/Sources/TelegramMediaWebDocument.swift index acd4a64b39..c27fafc5a1 100644 --- a/submodules/TelegramCore/Sources/TelegramMediaWebDocument.swift +++ b/submodules/TelegramCore/Sources/TelegramMediaWebDocument.swift @@ -1,12 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import UIKit - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/TelegramMediaWebFile.swift b/submodules/TelegramCore/Sources/TelegramMediaWebFile.swift index 0c147a9b57..7c87514738 100644 --- a/submodules/TelegramCore/Sources/TelegramMediaWebFile.swift +++ b/submodules/TelegramCore/Sources/TelegramMediaWebFile.swift @@ -1,13 +1,12 @@ import Postbox import SyncCore -import UIKit public extension TelegramMediaWebFile { - public var dimensions: CGSize? { + var dimensions: PixelDimensions? { return dimensionsForFileAttributes(self.attributes) } - public var duration: Int32? { + var duration: Int32? { return durationForFileAttributes(self.attributes) } } diff --git a/submodules/TelegramCore/Sources/TelegramMediaWebpage.swift b/submodules/TelegramCore/Sources/TelegramMediaWebpage.swift index fa97738796..371b2dde24 100644 --- a/submodules/TelegramCore/Sources/TelegramMediaWebpage.swift +++ b/submodules/TelegramCore/Sources/TelegramMediaWebpage.swift @@ -1,12 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import UIKit - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore @@ -17,9 +11,9 @@ func telegramMediaWebpageFromApiWebpage(_ webpage: Api.WebPage, url: String?) -> case let .webPagePending(id, date): return TelegramMediaWebpage(webpageId: MediaId(namespace: Namespaces.Media.CloudWebpage, id: id), content: .Pending(date, url)) case let .webPage(_, id, url, displayUrl, hash, type, siteName, title, description, photo, embedUrl, embedType, embedWidth, embedHeight, duration, author, document, documents, cachedPage): - var embedSize: CGSize? + var embedSize: PixelDimensions? if let embedWidth = embedWidth, let embedHeight = embedHeight { - embedSize = CGSize(width: CGFloat(embedWidth), height: CGFloat(embedHeight)) + embedSize = PixelDimensions(width: embedWidth, height: embedHeight) } var webpageDuration: Int? if let duration = duration { diff --git a/submodules/TelegramCore/Sources/TelegramPeerNotificationSettings.swift b/submodules/TelegramCore/Sources/TelegramPeerNotificationSettings.swift index 2ae5ad8c36..7276bfe940 100644 --- a/submodules/TelegramCore/Sources/TelegramPeerNotificationSettings.swift +++ b/submodules/TelegramCore/Sources/TelegramPeerNotificationSettings.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/TelegramUser.swift b/submodules/TelegramCore/Sources/TelegramUser.swift index ea75864e76..e2a925cd8e 100644 --- a/submodules/TelegramCore/Sources/TelegramUser.swift +++ b/submodules/TelegramCore/Sources/TelegramUser.swift @@ -1,12 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import UIKit - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore @@ -24,8 +18,8 @@ func parsedTelegramProfilePhoto(_ photo: Api.UserProfilePhoto) -> [TelegramMedia case let .fileLocationToBeDeprecated(volumeId, localId): fullSizeResource = CloudPeerPhotoSizeMediaResource(datacenterId: dcId, sizeSpec: .fullSize, volumeId: volumeId, localId: localId) } - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: 80.0, height: 80.0), resource: smallResource)) - representations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: 640.0, height: 640.0), resource: fullSizeResource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 80, height: 80), resource: smallResource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 640, height: 640), resource: fullSizeResource)) case .userProfilePhotoEmpty: break } diff --git a/submodules/TelegramCore/Sources/TelegramUserPresence.swift b/submodules/TelegramCore/Sources/TelegramUserPresence.swift index 785772cfec..4093901a79 100644 --- a/submodules/TelegramCore/Sources/TelegramUserPresence.swift +++ b/submodules/TelegramCore/Sources/TelegramUserPresence.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/TermsOfService.swift b/submodules/TelegramCore/Sources/TermsOfService.swift index 5d512d6b71..9e5af7f4b0 100644 --- a/submodules/TelegramCore/Sources/TermsOfService.swift +++ b/submodules/TelegramCore/Sources/TermsOfService.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import TelegramApi import Postbox import SwiftSignalKit -#if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/TextEntitiesMessageAttribute.swift b/submodules/TelegramCore/Sources/TextEntitiesMessageAttribute.swift index dc82936033..c898bed30f 100644 --- a/submodules/TelegramCore/Sources/TextEntitiesMessageAttribute.swift +++ b/submodules/TelegramCore/Sources/TextEntitiesMessageAttribute.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/Theme.swift b/submodules/TelegramCore/Sources/Theme.swift index 558693608a..43e65aee1e 100644 --- a/submodules/TelegramCore/Sources/Theme.swift +++ b/submodules/TelegramCore/Sources/Theme.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import TelegramApiMac -#else import Postbox import SwiftSignalKit import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/Themes.swift b/submodules/TelegramCore/Sources/Themes.swift index c7d25416b3..8082a5b0ca 100644 --- a/submodules/TelegramCore/Sources/Themes.swift +++ b/submodules/TelegramCore/Sources/Themes.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi -#endif +import Postbox +import SwiftSignalKit +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/ToggleChannelSignatures.swift b/submodules/TelegramCore/Sources/ToggleChannelSignatures.swift index 753848fffd..9505ce02db 100644 --- a/submodules/TelegramCore/Sources/ToggleChannelSignatures.swift +++ b/submodules/TelegramCore/Sources/ToggleChannelSignatures.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/TogglePeerChatPinned.swift b/submodules/TelegramCore/Sources/TogglePeerChatPinned.swift index 697bc6074a..12d2a0e2e4 100644 --- a/submodules/TelegramCore/Sources/TogglePeerChatPinned.swift +++ b/submodules/TelegramCore/Sources/TogglePeerChatPinned.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/TwoStepVerification.swift b/submodules/TelegramCore/Sources/TwoStepVerification.swift index d8686345b4..286db5bae4 100644 --- a/submodules/TelegramCore/Sources/TwoStepVerification.swift +++ b/submodules/TelegramCore/Sources/TwoStepVerification.swift @@ -1,15 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - import MtProtoKit -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/UpdateAccountPeerName.swift b/submodules/TelegramCore/Sources/UpdateAccountPeerName.swift index dd76c4d9b8..b759ced39e 100644 --- a/submodules/TelegramCore/Sources/UpdateAccountPeerName.swift +++ b/submodules/TelegramCore/Sources/UpdateAccountPeerName.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/UpdateCachedPeerData.swift b/submodules/TelegramCore/Sources/UpdateCachedPeerData.swift index 6987139d95..6ba93d2ea0 100644 --- a/submodules/TelegramCore/Sources/UpdateCachedPeerData.swift +++ b/submodules/TelegramCore/Sources/UpdateCachedPeerData.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/UpdateContactName.swift b/submodules/TelegramCore/Sources/UpdateContactName.swift index 23435bf431..cb5ba9f76e 100644 --- a/submodules/TelegramCore/Sources/UpdateContactName.swift +++ b/submodules/TelegramCore/Sources/UpdateContactName.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/UpdateGroup.swift b/submodules/TelegramCore/Sources/UpdateGroup.swift index 2504739e31..4613303c83 100644 --- a/submodules/TelegramCore/Sources/UpdateGroup.swift +++ b/submodules/TelegramCore/Sources/UpdateGroup.swift @@ -1,9 +1,5 @@ import Foundation -#if os(macOS) -import TelegramApiMac -#else import TelegramApi -#endif enum UpdateGroup { case withPts(updates: [Api.Update], users: [Api.User], chats: [Api.Chat]) diff --git a/submodules/TelegramCore/Sources/UpdateGroupSpecificStickerset.swift b/submodules/TelegramCore/Sources/UpdateGroupSpecificStickerset.swift index 1c3aa09d5f..860cdea9cc 100644 --- a/submodules/TelegramCore/Sources/UpdateGroupSpecificStickerset.swift +++ b/submodules/TelegramCore/Sources/UpdateGroupSpecificStickerset.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/UpdateMessageMedia.swift b/submodules/TelegramCore/Sources/UpdateMessageMedia.swift index 21c0a6f562..155e4274f4 100644 --- a/submodules/TelegramCore/Sources/UpdateMessageMedia.swift +++ b/submodules/TelegramCore/Sources/UpdateMessageMedia.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import PostboxMac -import TelegramApiMac -#else import Postbox import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/UpdateMessageService.swift b/submodules/TelegramCore/Sources/UpdateMessageService.swift index b493d4bc81..fe537679f7 100644 --- a/submodules/TelegramCore/Sources/UpdateMessageService.swift +++ b/submodules/TelegramCore/Sources/UpdateMessageService.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit class UpdateMessageService: NSObject, MTMessageService { var peerId: PeerId! diff --git a/submodules/TelegramCore/Sources/UpdatePeerChatInterfaceState.swift b/submodules/TelegramCore/Sources/UpdatePeerChatInterfaceState.swift index c6f7aa2d72..9b7435cda9 100644 --- a/submodules/TelegramCore/Sources/UpdatePeerChatInterfaceState.swift +++ b/submodules/TelegramCore/Sources/UpdatePeerChatInterfaceState.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac -#else - import Postbox - import SwiftSignalKit -#endif +import Postbox +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/UpdatePeerInfo.swift b/submodules/TelegramCore/Sources/UpdatePeerInfo.swift index 70504e31da..d70ded671a 100644 --- a/submodules/TelegramCore/Sources/UpdatePeerInfo.swift +++ b/submodules/TelegramCore/Sources/UpdatePeerInfo.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/UpdatePeers.swift b/submodules/TelegramCore/Sources/UpdatePeers.swift index bacf0de4ad..cbc5782285 100644 --- a/submodules/TelegramCore/Sources/UpdatePeers.swift +++ b/submodules/TelegramCore/Sources/UpdatePeers.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/UpdatePinnedMessage.swift b/submodules/TelegramCore/Sources/UpdatePinnedMessage.swift index 88fcbe0299..7e50ed5523 100644 --- a/submodules/TelegramCore/Sources/UpdatePinnedMessage.swift +++ b/submodules/TelegramCore/Sources/UpdatePinnedMessage.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/UpdateSecretChat.swift b/submodules/TelegramCore/Sources/UpdateSecretChat.swift index a20fcd13d5..4d251d2b7e 100644 --- a/submodules/TelegramCore/Sources/UpdateSecretChat.swift +++ b/submodules/TelegramCore/Sources/UpdateSecretChat.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/UpdatedAccountPrivacySettings.swift b/submodules/TelegramCore/Sources/UpdatedAccountPrivacySettings.swift index f9bdf7a095..055ca31218 100644 --- a/submodules/TelegramCore/Sources/UpdatedAccountPrivacySettings.swift +++ b/submodules/TelegramCore/Sources/UpdatedAccountPrivacySettings.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - import SwiftSignalKit -#endif +import Postbox +import TelegramApi +import SwiftSignalKit import SyncCore diff --git a/submodules/TelegramCore/Sources/UpdatesApiUtils.swift b/submodules/TelegramCore/Sources/UpdatesApiUtils.swift index 414151e066..33a510ac65 100644 --- a/submodules/TelegramCore/Sources/UpdatesApiUtils.swift +++ b/submodules/TelegramCore/Sources/UpdatesApiUtils.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) - import PostboxMac - import TelegramApiMac -#else - import Postbox - import TelegramApi -#endif +import Postbox +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/UploadSecureIdFile.swift b/submodules/TelegramCore/Sources/UploadSecureIdFile.swift index 12ccb34bc6..75a0e27255 100644 --- a/submodules/TelegramCore/Sources/UploadSecureIdFile.swift +++ b/submodules/TelegramCore/Sources/UploadSecureIdFile.swift @@ -1,17 +1,7 @@ import Foundation -#if os(macOS) - import PostboxMac - import MtProtoKitMac - import SwiftSignalKitMac -#else - import Postbox - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif - import SwiftSignalKit -#endif +import Postbox +import MtProtoKit +import SwiftSignalKit public struct UploadedSecureIdFile: Equatable { let id: Int64 diff --git a/submodules/TelegramCore/Sources/ValidateAddressNameInteractive.swift b/submodules/TelegramCore/Sources/ValidateAddressNameInteractive.swift index aca1c16b80..2b45f63e2e 100644 --- a/submodules/TelegramCore/Sources/ValidateAddressNameInteractive.swift +++ b/submodules/TelegramCore/Sources/ValidateAddressNameInteractive.swift @@ -1,11 +1,6 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -#else import Postbox import SwiftSignalKit -#endif public enum AddressNameValidationStatus: Equatable { case checking diff --git a/submodules/TelegramCore/Sources/VerifySecureIdValue.swift b/submodules/TelegramCore/Sources/VerifySecureIdValue.swift index aa5942dd64..d797063df2 100644 --- a/submodules/TelegramCore/Sources/VerifySecureIdValue.swift +++ b/submodules/TelegramCore/Sources/VerifySecureIdValue.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import MtProtoKitMac - import SwiftSignalKitMac - import TelegramApiMac -#else - import Postbox - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif - import SwiftSignalKit -#endif +import Postbox +import MtProtoKit +import SwiftSignalKit +import TelegramApi import SyncCore diff --git a/submodules/TelegramCore/Sources/Wallets.swift b/submodules/TelegramCore/Sources/Wallets.swift index 6d9dad4113..3bacdb2aeb 100644 --- a/submodules/TelegramCore/Sources/Wallets.swift +++ b/submodules/TelegramCore/Sources/Wallets.swift @@ -1,15 +1,8 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import MtProtoKitMac -import TelegramApiMac -#else import Postbox import SwiftSignalKit import MtProtoKit import TelegramApi -#endif public enum GetServerWalletSaltError { case generic diff --git a/submodules/TelegramCore/Sources/Wallpaper.swift b/submodules/TelegramCore/Sources/Wallpaper.swift index 5a6a1c7cfb..ff7b895163 100644 --- a/submodules/TelegramCore/Sources/Wallpaper.swift +++ b/submodules/TelegramCore/Sources/Wallpaper.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import TelegramApiMac -#else import Postbox import SwiftSignalKit import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/Wallpapers.swift b/submodules/TelegramCore/Sources/Wallpapers.swift index 3bc8eff506..061aa7d4ac 100644 --- a/submodules/TelegramCore/Sources/Wallpapers.swift +++ b/submodules/TelegramCore/Sources/Wallpapers.swift @@ -1,13 +1,7 @@ import Foundation -#if os(macOS) -import PostboxMac -import SwiftSignalKitMac -import TelegramApiMac -#else import Postbox import SwiftSignalKit import TelegramApi -#endif import SyncCore diff --git a/submodules/TelegramCore/Sources/WebpagePreview.swift b/submodules/TelegramCore/Sources/WebpagePreview.swift index 5b7b842b4d..45ab3955a1 100644 --- a/submodules/TelegramCore/Sources/WebpagePreview.swift +++ b/submodules/TelegramCore/Sources/WebpagePreview.swift @@ -1,19 +1,8 @@ import Foundation -#if os(macOS) - import PostboxMac - import SwiftSignalKitMac - import MtProtoKitMac - import TelegramApiMac -#else - import Postbox - import SwiftSignalKit - import TelegramApi - #if BUCK - import MtProtoKit - #else - import MtProtoKitDynamic - #endif -#endif +import Postbox +import SwiftSignalKit +import TelegramApi +import MtProtoKit import SyncCore diff --git a/submodules/TelegramCore/Sources/module.private-mac.modulemap b/submodules/TelegramCore/Sources/module.private-mac.modulemap deleted file mode 100644 index 4d71be2a5a..0000000000 --- a/submodules/TelegramCore/Sources/module.private-mac.modulemap +++ /dev/null @@ -1,3 +0,0 @@ -module TelegramCoreMac.TelegramCorePrivate { - export * -} diff --git a/submodules/TelegramCore/TelegramCoreMac/Info.plist b/submodules/TelegramCore/TelegramCoreMac/Info.plist deleted file mode 100644 index 6c6dba7bb1..0000000000 --- a/submodules/TelegramCore/TelegramCoreMac/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSHumanReadableCopyright - Copyright © 2016 Peter. All rights reserved. - NSPrincipalClass - - - diff --git a/submodules/TelegramCore/TelegramCoreMac/TelegramCoreMac.h b/submodules/TelegramCore/TelegramCoreMac/TelegramCoreMac.h deleted file mode 100644 index 1a7e5b057d..0000000000 --- a/submodules/TelegramCore/TelegramCoreMac/TelegramCoreMac.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// TelegramCoreMac.h -// TelegramCoreMac -// -// Created by Peter on 9/5/16. -// Copyright © 2016 Peter. All rights reserved. -// - -#import - -//! Project version number for TelegramCoreMac. -FOUNDATION_EXPORT double TelegramCoreMacVersionNumber; - -//! Project version string for TelegramCoreMac. -FOUNDATION_EXPORT const unsigned char TelegramCoreMacVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - - -#import -#import -#import -#import diff --git a/submodules/TelegramCore/TelegramCore_Xcode.xcodeproj/project.pbxproj b/submodules/TelegramCore/TelegramCore_Xcode.xcodeproj/project.pbxproj deleted file mode 100644 index d0895b1053..0000000000 --- a/submodules/TelegramCore/TelegramCore_Xcode.xcodeproj/project.pbxproj +++ /dev/null @@ -1,4161 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 0900555621E4A96E0030924C /* Wallpaper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0900555521E4A96D0030924C /* Wallpaper.swift */; }; - 09028386218E5DBB0067EFBD /* ManagedVoipConfigurationUpdates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09028385218E5DBB0067EFBD /* ManagedVoipConfigurationUpdates.swift */; }; - 090E778322A9862100CD99F5 /* ChannelOwnershipTransfer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 090E778222A9862100CD99F5 /* ChannelOwnershipTransfer.swift */; }; - 090E779022AAABC600CD99F5 /* PeersNearby.swift in Sources */ = {isa = PBXBuildFile; fileRef = 090E778F22AAABC600CD99F5 /* PeersNearby.swift */; }; - 0925903722F0D02D003D6283 /* ManagedAnimatedEmojiUpdates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0925903622F0D02D003D6283 /* ManagedAnimatedEmojiUpdates.swift */; }; - 093857A82243D87900EB6A54 /* ManagedSynchronizeEmojiKeywordsOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 093857A62243D87800EB6A54 /* ManagedSynchronizeEmojiKeywordsOperations.swift */; }; - 093857A92243D87900EB6A54 /* SynchronizeEmojiKeywordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 093857A72243D87900EB6A54 /* SynchronizeEmojiKeywordsOperation.swift */; }; - 093857AB2243D88D00EB6A54 /* EmojiKeywords.swift in Sources */ = {isa = PBXBuildFile; fileRef = 093857AA2243D88C00EB6A54 /* EmojiKeywords.swift */; }; - 0962E66721B59BAA00245FD9 /* ManagedAppConfigurationUpdates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0962E66621B59BAA00245FD9 /* ManagedAppConfigurationUpdates.swift */; }; - 0962E66921B5A11100245FD9 /* SynchronizeAppLogEventsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0962E66821B5A11100245FD9 /* SynchronizeAppLogEventsOperation.swift */; }; - 0962E66B21B5A41C00245FD9 /* ManagedSynchronizeAppLogEventsOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0962E66A21B5A41C00245FD9 /* ManagedSynchronizeAppLogEventsOperations.swift */; }; - 0962E66D21B5C56F00245FD9 /* JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0962E66C21B5C56F00245FD9 /* JSON.swift */; }; - 0962E66F21B6147600245FD9 /* AppConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0962E66E21B6147600245FD9 /* AppConfiguration.swift */; }; - 0962E67521B6437600245FD9 /* SplitTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0962E67421B6437600245FD9 /* SplitTest.swift */; }; - 0962E68121BAA20E00245FD9 /* SearchBotsConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0962E68021BAA20E00245FD9 /* SearchBotsConfiguration.swift */; }; - 09B4A9B4230FB70B005C2E08 /* Themes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09B4A9B3230FB70B005C2E08 /* Themes.swift */; }; - 09B4A9B6230FBB2B005C2E08 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09B4A9B5230FBB2B005C2E08 /* Theme.swift */; }; - 09EC0DE922C6825D00E7185B /* AppUpdate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EC0DE822C6825D00E7185B /* AppUpdate.swift */; }; - 09EDAD382213120C0012A50B /* AutodownloadSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EDAD372213120C0012A50B /* AutodownloadSettings.swift */; }; - 09EDAD3A22131D010012A50B /* ManagedAutodownloadSettingsUpdates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EDAD3922131D010012A50B /* ManagedAutodownloadSettingsUpdates.swift */; }; - 09FC986B22FD882200915E37 /* OutgoingScheduleInfoMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09FC986A22FD882200915E37 /* OutgoingScheduleInfoMessageAttribute.swift */; }; - 09FC986D22FD99D400915E37 /* ScheduledMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09FC986C22FD99D400915E37 /* ScheduledMessages.swift */; }; - 9F06831021A40DEC001D8EDB /* NotificationExceptionsList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F06830F21A40DEC001D8EDB /* NotificationExceptionsList.swift */; }; - 9F06831121A40DEC001D8EDB /* NotificationExceptionsList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F06830F21A40DEC001D8EDB /* NotificationExceptionsList.swift */; }; - 9F10CE8C20613CDB002DD61A /* TelegramDeviceContactImportInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B2F7732052DEF700D3BFB9 /* TelegramDeviceContactImportInfo.swift */; }; - 9F153D1021E8E0A200B95D82 /* Wallpaper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0900555521E4A96D0030924C /* Wallpaper.swift */; }; - 9F1BC1AB2244CFED00F21815 /* EmojiKeywords.swift in Sources */ = {isa = PBXBuildFile; fileRef = 093857AA2243D88C00EB6A54 /* EmojiKeywords.swift */; }; - 9F1BC1AC2244CFED00F21815 /* SynchronizeEmojiKeywordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 093857A72243D87900EB6A54 /* SynchronizeEmojiKeywordsOperation.swift */; }; - 9F1BC1AD2244CFED00F21815 /* ManagedSynchronizeEmojiKeywordsOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 093857A62243D87800EB6A54 /* ManagedSynchronizeEmojiKeywordsOperations.swift */; }; - 9F4EEF9B21DCF66F002C3B33 /* JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0962E66C21B5C56F00245FD9 /* JSON.swift */; }; - 9F4EEF9C21DCF66F002C3B33 /* AppConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0962E66E21B6147600245FD9 /* AppConfiguration.swift */; }; - 9F4EEF9D21DCF66F002C3B33 /* SearchBotsConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0962E68021BAA20E00245FD9 /* SearchBotsConfiguration.swift */; }; - 9F4EEF9E21DCF6E7002C3B33 /* ManagedVoipConfigurationUpdates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09028385218E5DBB0067EFBD /* ManagedVoipConfigurationUpdates.swift */; }; - 9F4EEF9F21DCF6E7002C3B33 /* ManagedAppConfigurationUpdates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0962E66621B59BAA00245FD9 /* ManagedAppConfigurationUpdates.swift */; }; - 9F4EEFA021DCF6E7002C3B33 /* SynchronizeAppLogEventsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0962E66821B5A11100245FD9 /* SynchronizeAppLogEventsOperation.swift */; }; - 9F4EEFA121DCF6E7002C3B33 /* ManagedSynchronizeAppLogEventsOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0962E66A21B5A41C00245FD9 /* ManagedSynchronizeAppLogEventsOperations.swift */; }; - 9F7D42262223FF49007B68BB /* AutodownloadSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EDAD372213120C0012A50B /* AutodownloadSettings.swift */; }; - 9F7D42272223FF49007B68BB /* ManagedAutodownloadSettingsUpdates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EDAD3922131D010012A50B /* ManagedAutodownloadSettingsUpdates.swift */; }; - 9FAA268820D457A300D26CF3 /* RemoteStorageConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EA188120D3D2B1001AEE19 /* RemoteStorageConfiguration.swift */; }; - 9FC8ADA9206BBD000094F7B4 /* SaveSecureIdValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D805206539D000BC3599 /* SaveSecureIdValue.swift */; }; - 9FC8ADAB206BBFF10094F7B4 /* RecentWebSessions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FC8ADAA206BBFF10094F7B4 /* RecentWebSessions.swift */; }; - 9FC8ADAC206BC00A0094F7B4 /* RecentWebSessions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FC8ADAA206BBFF10094F7B4 /* RecentWebSessions.swift */; }; - C205FEA81EB3B75900455808 /* ExportMessageLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = C205FEA71EB3B75900455808 /* ExportMessageLink.swift */; }; - C205FEA91EB3B75900455808 /* ExportMessageLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = C205FEA71EB3B75900455808 /* ExportMessageLink.swift */; }; - C210DD621FBDB90800F673D8 /* SourceReferenceMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = C210DD611FBDB90800F673D8 /* SourceReferenceMessageAttribute.swift */; }; - C210DD631FBDB90800F673D8 /* SourceReferenceMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = C210DD611FBDB90800F673D8 /* SourceReferenceMessageAttribute.swift */; }; - C22EE61B1E67418000334C38 /* ToggleChannelSignatures.swift in Sources */ = {isa = PBXBuildFile; fileRef = C22EE61A1E67418000334C38 /* ToggleChannelSignatures.swift */; }; - C22EE61C1E67418000334C38 /* ToggleChannelSignatures.swift in Sources */ = {isa = PBXBuildFile; fileRef = C22EE61A1E67418000334C38 /* ToggleChannelSignatures.swift */; }; - C230BEB61EE9A3760029586C /* ChannelAdminEventLogs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C230BEB51EE9A3760029586C /* ChannelAdminEventLogs.swift */; }; - C230BEB71EE9A3760029586C /* ChannelAdminEventLogs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C230BEB51EE9A3760029586C /* ChannelAdminEventLogs.swift */; }; - C2366C831E4F3EAA0097CCFF /* GroupReturnAndLeft.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2366C821E4F3EAA0097CCFF /* GroupReturnAndLeft.swift */; }; - C2366C841E4F3EAA0097CCFF /* GroupReturnAndLeft.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2366C821E4F3EAA0097CCFF /* GroupReturnAndLeft.swift */; }; - C2366C861E4F403C0097CCFF /* AddressNames.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2366C851E4F403C0097CCFF /* AddressNames.swift */; }; - C2366C871E4F403C0097CCFF /* AddressNames.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2366C851E4F403C0097CCFF /* AddressNames.swift */; }; - C2366C891E4F40480097CCFF /* SupportPeerId.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2366C881E4F40480097CCFF /* SupportPeerId.swift */; }; - C2366C8A1E4F40480097CCFF /* SupportPeerId.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2366C881E4F40480097CCFF /* SupportPeerId.swift */; }; - C239BE971E62EE1E00C2C453 /* LoadMessagesIfNecessary.swift in Sources */ = {isa = PBXBuildFile; fileRef = C239BE961E62EE1E00C2C453 /* LoadMessagesIfNecessary.swift */; }; - C239BE981E62F0D200C2C453 /* LoadMessagesIfNecessary.swift in Sources */ = {isa = PBXBuildFile; fileRef = C239BE961E62EE1E00C2C453 /* LoadMessagesIfNecessary.swift */; }; - C239BE9C1E630CA700C2C453 /* UpdatePinnedMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C239BE9B1E630CA700C2C453 /* UpdatePinnedMessage.swift */; }; - C239BE9D1E630CB300C2C453 /* UpdatePinnedMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C239BE9B1E630CA700C2C453 /* UpdatePinnedMessage.swift */; }; - C23BC3871E9BE3CA00D79F92 /* ImportContact.swift in Sources */ = {isa = PBXBuildFile; fileRef = C23BC3861E9BE3CA00D79F92 /* ImportContact.swift */; }; - C23BC3881E9BE3CB00D79F92 /* ImportContact.swift in Sources */ = {isa = PBXBuildFile; fileRef = C23BC3861E9BE3CA00D79F92 /* ImportContact.swift */; }; - C251D7431E65E50500283EDE /* StickerSetInstallation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C251D7421E65E50500283EDE /* StickerSetInstallation.swift */; }; - C251D7441E65E50500283EDE /* StickerSetInstallation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C251D7421E65E50500283EDE /* StickerSetInstallation.swift */; }; - C25638021E79E7FC00311607 /* TwoStepVerification.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA0ABC1E76C908005BB9B7 /* TwoStepVerification.swift */; }; - C26A37EF1E5E0C41006977AC /* ChannelParticipants.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BB7C591E5C8074001527C3 /* ChannelParticipants.swift */; }; - C28725421EF967E700613564 /* NotificationInfoMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28725411EF967E700613564 /* NotificationInfoMessageAttribute.swift */; }; - C28725431EF967E700613564 /* NotificationInfoMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28725411EF967E700613564 /* NotificationInfoMessageAttribute.swift */; }; - C28D3CF020D3DA900027F4D6 /* DeepLinkInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28D3CEF20D3DA900027F4D6 /* DeepLinkInfo.swift */; }; - C28D3CF120D3DAA30027F4D6 /* DeepLinkInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28D3CEF20D3DA900027F4D6 /* DeepLinkInfo.swift */; }; - C29340F31F5080FA0074991E /* UpdateGroupSpecificStickerset.swift in Sources */ = {isa = PBXBuildFile; fileRef = C29340F21F5080FA0074991E /* UpdateGroupSpecificStickerset.swift */; }; - C29340F41F5081280074991E /* UpdateGroupSpecificStickerset.swift in Sources */ = {isa = PBXBuildFile; fileRef = C29340F21F5080FA0074991E /* UpdateGroupSpecificStickerset.swift */; }; - C2A315C01E2E776A00D89000 /* RequestStartBot.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01749581E1092BC0057C89A /* RequestStartBot.swift */; }; - C2E064681ECEEF0A00387BB8 /* TelegramMediaInvoice.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2E064671ECEEF0A00387BB8 /* TelegramMediaInvoice.swift */; }; - C2E064691ECEEF0B00387BB8 /* TelegramMediaInvoice.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2E064671ECEEF0A00387BB8 /* TelegramMediaInvoice.swift */; }; - C2E0646D1ECF171D00387BB8 /* TelegramMediaWebDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2E0646C1ECF171D00387BB8 /* TelegramMediaWebDocument.swift */; }; - C2E0646E1ECF171E00387BB8 /* TelegramMediaWebDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2E0646C1ECF171D00387BB8 /* TelegramMediaWebDocument.swift */; }; - C2F4ED1D1EC60064005F2696 /* RateCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F4ED1C1EC60064005F2696 /* RateCall.swift */; }; - C2F4ED1E1EC60064005F2696 /* RateCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F4ED1C1EC60064005F2696 /* RateCall.swift */; }; - C2FD33E11E680E9E008D13D4 /* RequestUserPhotos.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FD33E01E680E9E008D13D4 /* RequestUserPhotos.swift */; }; - C2FD33E21E680E9E008D13D4 /* RequestUserPhotos.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FD33E01E680E9E008D13D4 /* RequestUserPhotos.swift */; }; - C2FD33E41E687BF1008D13D4 /* PeerPhotoUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FD33E31E687BF1008D13D4 /* PeerPhotoUpdater.swift */; }; - C2FD33E51E687BF1008D13D4 /* PeerPhotoUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FD33E31E687BF1008D13D4 /* PeerPhotoUpdater.swift */; }; - C2FD33EB1E696C78008D13D4 /* GroupsInCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FD33EA1E696C78008D13D4 /* GroupsInCommon.swift */; }; - C2FD33EC1E696C79008D13D4 /* GroupsInCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FD33EA1E696C78008D13D4 /* GroupsInCommon.swift */; }; - D001F3E81E128A1C007A8C60 /* ChannelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CFF1D62255C00955575 /* ChannelState.swift */; }; - D001F3E91E128A1C007A8C60 /* SecretChatState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0177B7A1DF8A16C00A5083A /* SecretChatState.swift */; }; - D001F3EA1E128A1C007A8C60 /* TelegramPeerNotificationSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03121011DA57E93006A2A60 /* TelegramPeerNotificationSettings.swift */; }; - D001F3EB1E128A1C007A8C60 /* EnqueueMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D001D62255C00955575 /* EnqueueMessage.swift */; }; - D001F3EC1E128A1C007A8C60 /* Holes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D011D62255C00955575 /* Holes.swift */; }; - D001F3EE1E128A1C007A8C60 /* AccountStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D017495D1E118F790057C89A /* AccountStateManager.swift */; }; - D001F3EF1E128A1C007A8C60 /* AccountIntermediateState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D017495F1E118FC30057C89A /* AccountIntermediateState.swift */; }; - D001F3F01E128A1C007A8C60 /* AccountStateManagementUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D031D62255C00955575 /* AccountStateManagementUtils.swift */; }; - D001F3F11E128A1C007A8C60 /* SynchronizePeerReadState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D041D62255C00955575 /* SynchronizePeerReadState.swift */; }; - D001F3F21E128A1C007A8C60 /* UpdateGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D051D62255C00955575 /* UpdateGroup.swift */; }; - D001F3F31E128A1C007A8C60 /* UpdateMessageService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D061D62255C00955575 /* UpdateMessageService.swift */; }; - D001F3F41E128A1C007A8C60 /* UpdatesApiUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D071D62255C00955575 /* UpdatesApiUtils.swift */; }; - D001F3F51E128A1C007A8C60 /* PendingMessageManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09BB6B31DB02C2B00A905C0 /* PendingMessageManager.swift */; }; - D001F3F61E128A1C007A8C60 /* PendingMessageUploadedContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09BB6B51DB0428000A905C0 /* PendingMessageUploadedContent.swift */; }; - D001F3F71E128A1C007A8C60 /* ApplyUpdateMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01AC9221DD5E9A200E8160F /* ApplyUpdateMessage.swift */; }; - D003702B1DA42586004308D3 /* PhoneNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = D003702A1DA42586004308D3 /* PhoneNumber.swift */; }; - D00422D321677F4500719B67 /* ManagedAccountPresence.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00422D221677F4500719B67 /* ManagedAccountPresence.swift */; }; - D00422D421677F4500719B67 /* ManagedAccountPresence.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00422D221677F4500719B67 /* ManagedAccountPresence.swift */; }; - D00580AE21E2A08900CB7CD3 /* AccountEnvironmentAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00580AD21E2A08900CB7CD3 /* AccountEnvironmentAttribute.swift */; }; - D00580AF21E2A08900CB7CD3 /* AccountEnvironmentAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00580AD21E2A08900CB7CD3 /* AccountEnvironmentAttribute.swift */; }; - D00BDA191EE593D600C64C5E /* TelegramChannelAdminRights.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00BDA181EE593D600C64C5E /* TelegramChannelAdminRights.swift */; }; - D00BDA1A1EE593D600C64C5E /* TelegramChannelAdminRights.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00BDA181EE593D600C64C5E /* TelegramChannelAdminRights.swift */; }; - D00BDA1C1EE5952A00C64C5E /* TelegramChannelBannedRights.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00BDA1B1EE5952A00C64C5E /* TelegramChannelBannedRights.swift */; }; - D00BDA1D1EE5952A00C64C5E /* TelegramChannelBannedRights.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00BDA1B1EE5952A00C64C5E /* TelegramChannelBannedRights.swift */; }; - D00C7CCC1E3620C30080C3D5 /* CachedChannelParticipants.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00C7CCB1E3620C30080C3D5 /* CachedChannelParticipants.swift */; }; - D00C7CCD1E3620C30080C3D5 /* CachedChannelParticipants.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00C7CCB1E3620C30080C3D5 /* CachedChannelParticipants.swift */; }; - D00C7CE01E3785710080C3D5 /* MarkMessageContentAsConsumedInteractively.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00C7CDF1E3785700080C3D5 /* MarkMessageContentAsConsumedInteractively.swift */; }; - D00C7CE11E3785710080C3D5 /* MarkMessageContentAsConsumedInteractively.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00C7CDF1E3785700080C3D5 /* MarkMessageContentAsConsumedInteractively.swift */; }; - D00C7CEB1E37A8540080C3D5 /* SetSecretChatMessageAutoremoveTimeoutInteractively.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00C7CEA1E37A8540080C3D5 /* SetSecretChatMessageAutoremoveTimeoutInteractively.swift */; }; - D00C7CEC1E37A8540080C3D5 /* SetSecretChatMessageAutoremoveTimeoutInteractively.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00C7CEA1E37A8540080C3D5 /* SetSecretChatMessageAutoremoveTimeoutInteractively.swift */; }; - D00D34391E6EC9520057B307 /* TeleramMediaUnsupported.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00D34381E6EC9520057B307 /* TeleramMediaUnsupported.swift */; }; - D00D343A1E6EC9520057B307 /* TeleramMediaUnsupported.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00D34381E6EC9520057B307 /* TeleramMediaUnsupported.swift */; }; - D00D343C1E6EC9770057B307 /* TelegramMediaGame.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00D343B1E6EC9770057B307 /* TelegramMediaGame.swift */; }; - D00D343D1E6EC9770057B307 /* TelegramMediaGame.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00D343B1E6EC9770057B307 /* TelegramMediaGame.swift */; }; - D00D343F1E6ED6E50057B307 /* ConsumableContentMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00D343E1E6ED6E50057B307 /* ConsumableContentMessageAttribute.swift */; }; - D00D34401E6ED6E50057B307 /* ConsumableContentMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00D343E1E6ED6E50057B307 /* ConsumableContentMessageAttribute.swift */; }; - D00D34421E6EDD2E0057B307 /* ManagedSynchronizeConsumeMessageContentsOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00D34411E6EDD2E0057B307 /* ManagedSynchronizeConsumeMessageContentsOperations.swift */; }; - D00D34431E6EDD2E0057B307 /* ManagedSynchronizeConsumeMessageContentsOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00D34411E6EDD2E0057B307 /* ManagedSynchronizeConsumeMessageContentsOperations.swift */; }; - D00D34451E6EDD420057B307 /* SynchronizeConsumeMessageContentsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00D34441E6EDD420057B307 /* SynchronizeConsumeMessageContentsOperation.swift */; }; - D00D34461E6EDD420057B307 /* SynchronizeConsumeMessageContentsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00D34441E6EDD420057B307 /* SynchronizeConsumeMessageContentsOperation.swift */; }; - D00D97C71E32901700E5C2B6 /* PeerInputActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00D97C61E32901700E5C2B6 /* PeerInputActivity.swift */; }; - D00D97C81E32901700E5C2B6 /* PeerInputActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00D97C61E32901700E5C2B6 /* PeerInputActivity.swift */; }; - D00D97CA1E32917C00E5C2B6 /* PeerInputActivityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00D97C91E32917C00E5C2B6 /* PeerInputActivityManager.swift */; }; - D00D97CB1E32917C00E5C2B6 /* PeerInputActivityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00D97C91E32917C00E5C2B6 /* PeerInputActivityManager.swift */; }; - D00DBBD71E64E41100DB5485 /* CreateSecretChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00DBBD61E64E41100DB5485 /* CreateSecretChat.swift */; }; - D00DBBD81E64E41100DB5485 /* CreateSecretChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00DBBD61E64E41100DB5485 /* CreateSecretChat.swift */; }; - D00DBBDA1E64E67E00DB5485 /* UpdateSecretChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00DBBD91E64E67E00DB5485 /* UpdateSecretChat.swift */; }; - D00DBBDB1E64E67E00DB5485 /* UpdateSecretChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00DBBD91E64E67E00DB5485 /* UpdateSecretChat.swift */; }; - D0119CB020CA9EA800895300 /* MarkAllChatsAsRead.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0119CAF20CA9EA800895300 /* MarkAllChatsAsRead.swift */; }; - D0119CB120CA9EA800895300 /* MarkAllChatsAsRead.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0119CAF20CA9EA800895300 /* MarkAllChatsAsRead.swift */; }; - D0136309208F3B0900EB3653 /* SecureIdValueContentError.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0136308208F3B0900EB3653 /* SecureIdValueContentError.swift */; }; - D013630A208F6E2800EB3653 /* SecureIdValueContentError.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0136308208F3B0900EB3653 /* SecureIdValueContentError.swift */; }; - D014193922AE6B85008667CB /* ChannelOwnershipTransfer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 090E778222A9862100CD99F5 /* ChannelOwnershipTransfer.swift */; }; - D014193A22AE6B85008667CB /* PeersNearby.swift in Sources */ = {isa = PBXBuildFile; fileRef = 090E778F22AAABC600CD99F5 /* PeersNearby.swift */; }; - D015E00E225CA61100CB9E8A /* FindChannelById.swift in Sources */ = {isa = PBXBuildFile; fileRef = D015E00D225CA61100CB9E8A /* FindChannelById.swift */; }; - D015E00F225CA61100CB9E8A /* FindChannelById.swift in Sources */ = {isa = PBXBuildFile; fileRef = D015E00D225CA61100CB9E8A /* FindChannelById.swift */; }; - D01749591E1092BC0057C89A /* RequestStartBot.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01749581E1092BC0057C89A /* RequestStartBot.swift */; }; - D017495E1E118F790057C89A /* AccountStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D017495D1E118F790057C89A /* AccountStateManager.swift */; }; - D01749601E118FC30057C89A /* AccountIntermediateState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D017495F1E118FC30057C89A /* AccountIntermediateState.swift */; }; - D0177B7B1DF8A16C00A5083A /* SecretChatState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0177B7A1DF8A16C00A5083A /* SecretChatState.swift */; }; - D01843A82190C28100278AFF /* ConfirmTwoStepRecoveryEmail.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01843A72190C28100278AFF /* ConfirmTwoStepRecoveryEmail.swift */; }; - D01843A92190C28100278AFF /* ConfirmTwoStepRecoveryEmail.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01843A72190C28100278AFF /* ConfirmTwoStepRecoveryEmail.swift */; }; - D018D3371E648ACF00C5E089 /* ChannelCreation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D018D3361E648ACF00C5E089 /* ChannelCreation.swift */; }; - D018D3381E648ACF00C5E089 /* ChannelCreation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D018D3361E648ACF00C5E089 /* ChannelCreation.swift */; }; - D018EE0220458E1E00CBB130 /* SecretChatLayerNegotiation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D018EE0120458E1E00CBB130 /* SecretChatLayerNegotiation.swift */; }; - D018EE0320458E1E00CBB130 /* SecretChatLayerNegotiation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D018EE0120458E1E00CBB130 /* SecretChatLayerNegotiation.swift */; }; - D018EE052045E95000CBB130 /* CheckPeerChatServiceActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D018EE042045E95000CBB130 /* CheckPeerChatServiceActions.swift */; }; - D018EE062045E95000CBB130 /* CheckPeerChatServiceActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D018EE042045E95000CBB130 /* CheckPeerChatServiceActions.swift */; }; - D019B1CC1E2E3B6A00F80DB3 /* SecretChatRekeySession.swift in Sources */ = {isa = PBXBuildFile; fileRef = D019B1CB1E2E3B6A00F80DB3 /* SecretChatRekeySession.swift */; }; - D019B1CD1E2E3B6A00F80DB3 /* SecretChatRekeySession.swift in Sources */ = {isa = PBXBuildFile; fileRef = D019B1CB1E2E3B6A00F80DB3 /* SecretChatRekeySession.swift */; }; - D01A21A61F38CDC700DDA104 /* SynchronizeSavedStickersOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01A21A51F38CDC700DDA104 /* SynchronizeSavedStickersOperation.swift */; }; - D01A21A71F38CDC700DDA104 /* SynchronizeSavedStickersOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01A21A51F38CDC700DDA104 /* SynchronizeSavedStickersOperation.swift */; }; - D01A21A91F38CDDC00DDA104 /* ManagedSynchronizeSavedStickersOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01A21A81F38CDDC00DDA104 /* ManagedSynchronizeSavedStickersOperations.swift */; }; - D01A21AA1F38CDDC00DDA104 /* ManagedSynchronizeSavedStickersOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01A21A81F38CDDC00DDA104 /* ManagedSynchronizeSavedStickersOperations.swift */; }; - D01A21AC1F38D10E00DDA104 /* SavedStickerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01A21AB1F38D10E00DDA104 /* SavedStickerItem.swift */; }; - D01A21AD1F38D10E00DDA104 /* SavedStickerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01A21AB1F38D10E00DDA104 /* SavedStickerItem.swift */; }; - D01AC91D1DD5DA5E00E8160F /* RequestMessageActionCallback.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01AC91C1DD5DA5E00E8160F /* RequestMessageActionCallback.swift */; }; - D01AC9211DD5E7E500E8160F /* RequestEditMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01AC9201DD5E7E500E8160F /* RequestEditMessage.swift */; }; - D01AC9231DD5E9A200E8160F /* ApplyUpdateMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01AC9221DD5E9A200E8160F /* ApplyUpdateMessage.swift */; }; - D01B264923324CF900A6448B /* Wallets.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01B264823324CF800A6448B /* Wallets.swift */; }; - D01B264A23324CF900A6448B /* Wallets.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01B264823324CF800A6448B /* Wallets.swift */; }; - D01B27A21E394D8B0022A4C0 /* PrivacySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01B27A11E394D8B0022A4C0 /* PrivacySettings.swift */; }; - D01C06B71FBBA269001561AB /* CanSendMessagesToPeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C06B61FBBA269001561AB /* CanSendMessagesToPeer.swift */; }; - D01C06B81FBBA269001561AB /* CanSendMessagesToPeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C06B61FBBA269001561AB /* CanSendMessagesToPeer.swift */; }; - D01C7ED31EF5DF83008305F1 /* LimitsConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C7ED21EF5DF83008305F1 /* LimitsConfiguration.swift */; }; - D01C7ED41EF5DF83008305F1 /* LimitsConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C7ED21EF5DF83008305F1 /* LimitsConfiguration.swift */; }; - D01C7ED61EF5E468008305F1 /* ProxySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C7ED51EF5E468008305F1 /* ProxySettings.swift */; }; - D01C7ED71EF5E468008305F1 /* ProxySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C7ED51EF5E468008305F1 /* ProxySettings.swift */; }; - D01C7F041EFC1C49008305F1 /* DeviceContact.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C7F031EFC1C49008305F1 /* DeviceContact.swift */; }; - D01C7F051EFC1C49008305F1 /* DeviceContact.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C7F031EFC1C49008305F1 /* DeviceContact.swift */; }; - D01D6BF91E42A713006151C6 /* SearchStickers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01D6BF81E42A713006151C6 /* SearchStickers.swift */; }; - D01D6BFA1E42A718006151C6 /* SearchStickers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01D6BF81E42A713006151C6 /* SearchStickers.swift */; }; - D0208AF42306E92B00A23503 /* libphonenumbermac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0208AF32306E92B00A23503 /* libphonenumbermac.framework */; }; - D020F00722F19C8F00BE699A /* ManagedAnimatedEmojiUpdates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0925903622F0D02D003D6283 /* ManagedAnimatedEmojiUpdates.swift */; }; - D021E0DF1DB539FC00C6B04F /* StickerPack.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021E0DE1DB539FC00C6B04F /* StickerPack.swift */; }; - D021E0E21DB5401A00C6B04F /* StickerManagement.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021E0E11DB5401A00C6B04F /* StickerManagement.swift */; }; - D021E7E82306EC03002F8BD1 /* OutgoingScheduleInfoMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09FC986A22FD882200915E37 /* OutgoingScheduleInfoMessageAttribute.swift */; }; - D021E7E92306EC03002F8BD1 /* ScheduledMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09FC986C22FD99D400915E37 /* ScheduledMessages.swift */; }; - D021E7EA2306EC03002F8BD1 /* ValidateAddressNameInteractive.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E416B2304D5B30049C28B /* ValidateAddressNameInteractive.swift */; }; - D0223A981EA564BD00211D94 /* MediaResourceNetworkStatsTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0223A971EA564BD00211D94 /* MediaResourceNetworkStatsTag.swift */; }; - D0223A991EA564BD00211D94 /* MediaResourceNetworkStatsTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0223A971EA564BD00211D94 /* MediaResourceNetworkStatsTag.swift */; }; - D0223A9B1EA5654D00211D94 /* TelegramMediaResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0223A9A1EA5654D00211D94 /* TelegramMediaResource.swift */; }; - D0223A9C1EA5654D00211D94 /* TelegramMediaResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0223A9A1EA5654D00211D94 /* TelegramMediaResource.swift */; }; - D02395D61F8D09A50070F5C2 /* ChannelHistoryAvailabilitySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02395D51F8D09A50070F5C2 /* ChannelHistoryAvailabilitySettings.swift */; }; - D02395D71F8D09A50070F5C2 /* ChannelHistoryAvailabilitySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02395D51F8D09A50070F5C2 /* ChannelHistoryAvailabilitySettings.swift */; }; - D023E67821540624008C27D1 /* UpdateMessageMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = D023E67721540624008C27D1 /* UpdateMessageMedia.swift */; }; - D023E67921540624008C27D1 /* UpdateMessageMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = D023E67721540624008C27D1 /* UpdateMessageMedia.swift */; }; - D026099E20C695AF006C34AC /* Wallpapers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D026099D20C695AF006C34AC /* Wallpapers.swift */; }; - D026099F20C695AF006C34AC /* Wallpapers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D026099D20C695AF006C34AC /* Wallpapers.swift */; }; - D02609BF20C6EC08006C34AC /* Crypto.m in Sources */ = {isa = PBXBuildFile; fileRef = D02609BE20C6EC08006C34AC /* Crypto.m */; }; - D02609C020C6EC08006C34AC /* Crypto.m in Sources */ = {isa = PBXBuildFile; fileRef = D02609BE20C6EC08006C34AC /* Crypto.m */; }; - D02ABC7B1E30058F00CAE539 /* DeleteMessagesInteractively.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02ABC7A1E30058F00CAE539 /* DeleteMessagesInteractively.swift */; }; - D02ABC7C1E30058F00CAE539 /* DeleteMessagesInteractively.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02ABC7A1E30058F00CAE539 /* DeleteMessagesInteractively.swift */; }; - D02ABC7E1E3109F000CAE539 /* CloudChatRemoveMessagesOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02ABC7D1E3109F000CAE539 /* CloudChatRemoveMessagesOperation.swift */; }; - D02ABC7F1E3109F000CAE539 /* CloudChatRemoveMessagesOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02ABC7D1E3109F000CAE539 /* CloudChatRemoveMessagesOperation.swift */; }; - D02ABC811E310E5D00CAE539 /* ManagedCloudChatRemoveMessagesOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02ABC801E310E5D00CAE539 /* ManagedCloudChatRemoveMessagesOperations.swift */; }; - D02ABC821E310E5D00CAE539 /* ManagedCloudChatRemoveMessagesOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02ABC801E310E5D00CAE539 /* ManagedCloudChatRemoveMessagesOperations.swift */; }; - D02B199021FB1D520094A764 /* RegisterNotificationToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02B198F21FB1D520094A764 /* RegisterNotificationToken.swift */; }; - D02D60A7206BA5F900FEFE1E /* SecureIdValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02D60A6206BA5F900FEFE1E /* SecureIdValue.swift */; }; - D02D60A8206BA5F900FEFE1E /* SecureIdValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02D60A6206BA5F900FEFE1E /* SecureIdValue.swift */; }; - D02D60AB206BA64100FEFE1E /* VerifySecureIdValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02D60AA206BA64100FEFE1E /* VerifySecureIdValue.swift */; }; - D02D60AC206BA64100FEFE1E /* VerifySecureIdValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02D60AA206BA64100FEFE1E /* VerifySecureIdValue.swift */; }; - D02DADC12139A1FC00116225 /* ContactSyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02DADC02139A1FC00116225 /* ContactSyncManager.swift */; }; - D02DADC22139A1FC00116225 /* ContactSyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02DADC02139A1FC00116225 /* ContactSyncManager.swift */; }; - D03121021DA57E93006A2A60 /* TelegramPeerNotificationSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03121011DA57E93006A2A60 /* TelegramPeerNotificationSettings.swift */; }; - D0329EA222FC5A7C00F9F071 /* MessageReactions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0329EA122FC5A7C00F9F071 /* MessageReactions.swift */; }; - D0329EA322FC5A7C00F9F071 /* MessageReactions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0329EA122FC5A7C00F9F071 /* MessageReactions.swift */; }; - D0329EA522FC5A9600F9F071 /* ReactionsMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0329EA422FC5A9600F9F071 /* ReactionsMessageAttribute.swift */; }; - D0329EA622FC5A9600F9F071 /* ReactionsMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0329EA422FC5A9600F9F071 /* ReactionsMessageAttribute.swift */; }; - D032F5BC20EF84FD00037B6C /* FetchedMediaResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D032F5BB20EF84FD00037B6C /* FetchedMediaResource.swift */; }; - D032F5BD20EF84FD00037B6C /* FetchedMediaResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D032F5BB20EF84FD00037B6C /* FetchedMediaResource.swift */; }; - D0338740223BD48B007A2CE4 /* ContactsSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D033873F223BD48B007A2CE4 /* ContactsSettings.swift */; }; - D0338741223BD48B007A2CE4 /* ContactsSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D033873F223BD48B007A2CE4 /* ContactsSettings.swift */; }; - D0338743223BD532007A2CE4 /* InitializeAccountAfterLogin.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0338742223BD532007A2CE4 /* InitializeAccountAfterLogin.swift */; }; - D0338744223BD532007A2CE4 /* InitializeAccountAfterLogin.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0338742223BD532007A2CE4 /* InitializeAccountAfterLogin.swift */; }; - D033FEB01E61EB0200644997 /* PeerContactSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D033FEAF1E61EB0200644997 /* PeerContactSettings.swift */; }; - D033FEB11E61EB0200644997 /* PeerContactSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D033FEAF1E61EB0200644997 /* PeerContactSettings.swift */; }; - D033FEB31E61F3C000644997 /* ReportPeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D033FEB21E61F3C000644997 /* ReportPeer.swift */; }; - D033FEB41E61F3C000644997 /* ReportPeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D033FEB21E61F3C000644997 /* ReportPeer.swift */; }; - D033FEB61E61F3F900644997 /* BlockedPeers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D033FEB51E61F3F900644997 /* BlockedPeers.swift */; }; - D033FEB71E61F3F900644997 /* BlockedPeers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D033FEB51E61F3F900644997 /* BlockedPeers.swift */; }; - D03413F1231323CE00B555F3 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09B4A9B5230FBB2B005C2E08 /* Theme.swift */; }; - D03413F3231325B300B555F3 /* Themes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09B4A9B3230FB70B005C2E08 /* Themes.swift */; }; - D035732F22B5C24F00F0920D /* TelegramApi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D035732E22B5C24F00F0920D /* TelegramApi.framework */; }; - D0380DBA204EF306000414AB /* MessageMediaPreuploadManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0380DB9204EF306000414AB /* MessageMediaPreuploadManager.swift */; }; - D0380DBB204EF306000414AB /* MessageMediaPreuploadManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0380DB9204EF306000414AB /* MessageMediaPreuploadManager.swift */; }; - D03B0CB91D62233400955575 /* Either.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CB81D62233400955575 /* Either.swift */; }; - D03B0CBD1D62234300955575 /* Regex.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CBC1D62234300955575 /* Regex.swift */; }; - D03B0CBF1D62234A00955575 /* Log.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CBE1D62234A00955575 /* Log.swift */; }; - D03B0CC11D62235000955575 /* StringFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CC01D62235000955575 /* StringFormat.swift */; }; - D03B0CCE1D62239600955575 /* PhoneNumbers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CCD1D62239600955575 /* PhoneNumbers.swift */; }; - D03B0CD31D62244300955575 /* Namespaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CD21D62244300955575 /* Namespaces.swift */; }; - D03B0CD61D62245300955575 /* TelegramUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CD41D62245300955575 /* TelegramUser.swift */; }; - D03B0CD71D62245300955575 /* TelegramGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CD51D62245300955575 /* TelegramGroup.swift */; }; - D03B0CD91D62245B00955575 /* PeerUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CD81D62245B00955575 /* PeerUtils.swift */; }; - D03B0CDB1D62245F00955575 /* ApiUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CDA1D62245F00955575 /* ApiUtils.swift */; }; - D03B0CE01D62249100955575 /* StoreMessage_Telegram.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CDF1D62249100955575 /* StoreMessage_Telegram.swift */; }; - D03B0CE21D62249B00955575 /* InlineBotMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CE11D62249B00955575 /* InlineBotMessageAttribute.swift */; }; - D03B0CE41D62249F00955575 /* TextEntitiesMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CE31D62249F00955575 /* TextEntitiesMessageAttribute.swift */; }; - D03B0CE61D6224A700955575 /* ReplyMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CE51D6224A700955575 /* ReplyMessageAttribute.swift */; }; - D03B0CE81D6224AD00955575 /* ViewCountMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CE71D6224AD00955575 /* ViewCountMessageAttribute.swift */; }; - D03B0CF41D62250800955575 /* TelegramMediaAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CEC1D62250800955575 /* TelegramMediaAction.swift */; }; - D03B0CF51D62250800955575 /* TelegramMediaContact.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CED1D62250800955575 /* TelegramMediaContact.swift */; }; - D03B0CF61D62250800955575 /* TelegramMediaFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CEE1D62250800955575 /* TelegramMediaFile.swift */; }; - D03B0CF71D62250800955575 /* TelegramMediaImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CEF1D62250800955575 /* TelegramMediaImage.swift */; }; - D03B0CF91D62250800955575 /* TelegramMediaMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CF11D62250800955575 /* TelegramMediaMap.swift */; }; - D03B0CFB1D62250800955575 /* TelegramMediaWebpage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CF31D62250800955575 /* TelegramMediaWebpage.swift */; }; - D03B0D081D62255C00955575 /* ChannelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CFF1D62255C00955575 /* ChannelState.swift */; }; - D03B0D091D62255C00955575 /* EnqueueMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D001D62255C00955575 /* EnqueueMessage.swift */; }; - D03B0D0A1D62255C00955575 /* Holes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D011D62255C00955575 /* Holes.swift */; }; - D03B0D0C1D62255C00955575 /* AccountStateManagementUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D031D62255C00955575 /* AccountStateManagementUtils.swift */; }; - D03B0D0D1D62255C00955575 /* SynchronizePeerReadState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D041D62255C00955575 /* SynchronizePeerReadState.swift */; }; - D03B0D0E1D62255C00955575 /* UpdateGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D051D62255C00955575 /* UpdateGroup.swift */; }; - D03B0D0F1D62255C00955575 /* UpdateMessageService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D061D62255C00955575 /* UpdateMessageService.swift */; }; - D03B0D101D62255C00955575 /* UpdatesApiUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D071D62255C00955575 /* UpdatesApiUtils.swift */; }; - D03B0D3D1D6319E200955575 /* Fetch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D391D6319E200955575 /* Fetch.swift */; }; - D03B0D441D6319F900955575 /* CloudFileMediaResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D431D6319F900955575 /* CloudFileMediaResource.swift */; }; - D03B0D5C1D631A6900955575 /* Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D561D631A6900955575 /* Download.swift */; }; - D03B0D5D1D631A6900955575 /* MultipartFetch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D571D631A6900955575 /* MultipartFetch.swift */; }; - D03B0D5E1D631A6900955575 /* Network.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D581D631A6900955575 /* Network.swift */; }; - D03B0D5F1D631A6900955575 /* Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D591D631A6900955575 /* Serialization.swift */; }; - D03B0D651D631A8B00955575 /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D611D631A8B00955575 /* Account.swift */; }; - D03B0D671D631A8B00955575 /* AccountViewTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D631D631A8B00955575 /* AccountViewTracker.swift */; }; - D03B0D681D631A8B00955575 /* RecentPeers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D641D631A8B00955575 /* RecentPeers.swift */; }; - D03B0D6D1D631AA300955575 /* ContactManagement.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D6C1D631AA300955575 /* ContactManagement.swift */; }; - D03B0D721D631ABA00955575 /* SearchMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D711D631ABA00955575 /* SearchMessages.swift */; }; - D03B0E431D631E6600955575 /* NetworkLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = D03B0E411D631E6600955575 /* NetworkLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03B0E441D631E6600955575 /* NetworkLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = D03B0E421D631E6600955575 /* NetworkLogging.m */; }; - D03C53671DAD5CA9004C17B3 /* ApiUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CDA1D62245F00955575 /* ApiUtils.swift */; }; - D03C53681DAD5CA9004C17B3 /* PeerUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CD81D62245B00955575 /* PeerUtils.swift */; }; - D03C53691DAD5CA9004C17B3 /* PeerAccessRestrictionInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09A2FEA1D7CDC320018FB72 /* PeerAccessRestrictionInfo.swift */; }; - D03C536A1DAD5CA9004C17B3 /* TelegramUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CD41D62245300955575 /* TelegramUser.swift */; }; - D03C536B1DAD5CA9004C17B3 /* TelegramGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CD51D62245300955575 /* TelegramGroup.swift */; }; - D03C536C1DAD5CA9004C17B3 /* TelegramChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09A2FE51D7CD4940018FB72 /* TelegramChannel.swift */; }; - D03C536D1DAD5CA9004C17B3 /* ApiGroupOrChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B417C01D7DCEEF004562A4 /* ApiGroupOrChannel.swift */; }; - D03C536E1DAD5CA9004C17B3 /* PhoneNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = D003702A1DA42586004308D3 /* PhoneNumber.swift */; }; - D03C536F1DAD5CA9004C17B3 /* BotInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B8438B1DA7CF50005F29E1 /* BotInfo.swift */; }; - D03C53701DAD5CA9004C17B3 /* ExportedInvitation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B843881DA7AB96005F29E1 /* ExportedInvitation.swift */; }; - D03C53711DAD5CA9004C17B3 /* CachedGroupParticipants.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B8438D1DA7D296005F29E1 /* CachedGroupParticipants.swift */; }; - D03C53721DAD5CA9004C17B3 /* CachedUserData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B843801DA6EDAE005F29E1 /* CachedUserData.swift */; }; - D03C53731DAD5CA9004C17B3 /* CachedGroupData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B843821DA6EDB8005F29E1 /* CachedGroupData.swift */; }; - D03C53741DAD5CA9004C17B3 /* CachedChannelData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B843841DA6EDC4005F29E1 /* CachedChannelData.swift */; }; - D03C53751DAD5CA9004C17B3 /* TelegramUserPresence.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B844521DAC0773005F29E1 /* TelegramUserPresence.swift */; }; - D03C53771DAFF20F004C17B3 /* MultipartUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03C53761DAFF20F004C17B3 /* MultipartUpload.swift */; }; - D03DC9101F82E344001D584C /* AccountStateReset.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03DC90F1F82E344001D584C /* AccountStateReset.swift */; }; - D03DC9111F82E344001D584C /* AccountStateReset.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03DC90F1F82E344001D584C /* AccountStateReset.swift */; }; - D03DC9131F82F89D001D584C /* RegularChatState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03DC9121F82F89D001D584C /* RegularChatState.swift */; }; - D03DC9141F82F89D001D584C /* RegularChatState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03DC9121F82F89D001D584C /* RegularChatState.swift */; }; - D03E3D28230447960049C28B /* RestrictedContentMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3D27230447960049C28B /* RestrictedContentMessageAttribute.swift */; }; - D03E3D29230447960049C28B /* RestrictedContentMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E3D27230447960049C28B /* RestrictedContentMessageAttribute.swift */; }; - D03E416C2304D5B30049C28B /* ValidateAddressNameInteractive.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E416B2304D5B30049C28B /* ValidateAddressNameInteractive.swift */; }; - D03E452E2305C15A0049C28B /* FormatPhoneNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E452C2305C15A0049C28B /* FormatPhoneNumber.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E452F2305C15A0049C28B /* FormatPhoneNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E452D2305C15A0049C28B /* FormatPhoneNumber.m */; }; - D03E45302305C1630049C28B /* FormatPhoneNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E452C2305C15A0049C28B /* FormatPhoneNumber.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E45D42305D44A0049C28B /* libphonenumber.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E45D32305D44A0049C28B /* libphonenumber.framework */; }; - D03E45D82305D66D0049C28B /* Crypto.h in Headers */ = {isa = PBXBuildFile; fileRef = D02609BB20C6EB97006C34AC /* Crypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E45D92305D66E0049C28B /* Crypto.h in Headers */ = {isa = PBXBuildFile; fileRef = D02609BB20C6EB97006C34AC /* Crypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E5E0C1E55E02D0029569A /* LoggedOutAccountAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E5E0B1E55E02D0029569A /* LoggedOutAccountAttribute.swift */; }; - D03E5E0D1E55E02D0029569A /* LoggedOutAccountAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03E5E0B1E55E02D0029569A /* LoggedOutAccountAttribute.swift */; }; - D041E3F51E535464008C24B4 /* AddPeerMember.swift in Sources */ = {isa = PBXBuildFile; fileRef = D041E3F41E535464008C24B4 /* AddPeerMember.swift */; }; - D041E3F61E535464008C24B4 /* AddPeerMember.swift in Sources */ = {isa = PBXBuildFile; fileRef = D041E3F41E535464008C24B4 /* AddPeerMember.swift */; }; - D041E3F81E535A88008C24B4 /* RemovePeerMember.swift in Sources */ = {isa = PBXBuildFile; fileRef = D041E3F71E535A88008C24B4 /* RemovePeerMember.swift */; }; - D041E3F91E535A88008C24B4 /* RemovePeerMember.swift in Sources */ = {isa = PBXBuildFile; fileRef = D041E3F71E535A88008C24B4 /* RemovePeerMember.swift */; }; - D042C6831E8D9DF800C863B0 /* Unixtime.swift in Sources */ = {isa = PBXBuildFile; fileRef = D042C6821E8D9DF800C863B0 /* Unixtime.swift */; }; - D042C6841E8D9DF800C863B0 /* Unixtime.swift in Sources */ = {isa = PBXBuildFile; fileRef = D042C6821E8D9DF800C863B0 /* Unixtime.swift */; }; - D0439B5D228ECB270067E026 /* RequestPhoneNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0439B5C228ECB270067E026 /* RequestPhoneNumber.swift */; }; - D0439B5E228ECB270067E026 /* RequestPhoneNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0439B5C228ECB270067E026 /* RequestPhoneNumber.swift */; }; - D0439B60228EDE430067E026 /* ContentRequiresValidationMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0439B5F228EDE430067E026 /* ContentRequiresValidationMessageAttribute.swift */; }; - D0439B61228EDE430067E026 /* ContentRequiresValidationMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0439B5F228EDE430067E026 /* ContentRequiresValidationMessageAttribute.swift */; }; - D0448C8E1E22993C005A61A7 /* ProcessSecretChatIncomingDecryptedOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0448C8D1E22993C005A61A7 /* ProcessSecretChatIncomingDecryptedOperations.swift */; }; - D0448C8F1E22993C005A61A7 /* ProcessSecretChatIncomingDecryptedOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0448C8D1E22993C005A61A7 /* ProcessSecretChatIncomingDecryptedOperations.swift */; }; - D0448C911E251F96005A61A7 /* SecretChatEncryption.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0448C901E251F96005A61A7 /* SecretChatEncryption.swift */; }; - D0448C921E251F96005A61A7 /* SecretChatEncryption.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0448C901E251F96005A61A7 /* SecretChatEncryption.swift */; }; - D0448C9F1E27F5EB005A61A7 /* Random.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0448C9E1E27F5EB005A61A7 /* Random.swift */; }; - D0448CA01E27F5EB005A61A7 /* Random.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0448C9E1E27F5EB005A61A7 /* Random.swift */; }; - D0448CA21E291B14005A61A7 /* FetchSecretFileResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0448CA11E291B14005A61A7 /* FetchSecretFileResource.swift */; }; - D0448CA31E291B14005A61A7 /* FetchSecretFileResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0448CA11E291B14005A61A7 /* FetchSecretFileResource.swift */; }; - D0448CA51E29215A005A61A7 /* MediaResourceApiUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0448CA41E29215A005A61A7 /* MediaResourceApiUtils.swift */; }; - D0448CA61E29215A005A61A7 /* MediaResourceApiUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0448CA41E29215A005A61A7 /* MediaResourceApiUtils.swift */; }; - D04554A621B43440007A6DD9 /* CancelAccountReset.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04554A521B43440007A6DD9 /* CancelAccountReset.swift */; }; - D04554A721B43440007A6DD9 /* CancelAccountReset.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04554A521B43440007A6DD9 /* CancelAccountReset.swift */; }; - D0458C881E69B4AB00FB34C1 /* OutgoingContentInfoMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0458C871E69B4AB00FB34C1 /* OutgoingContentInfoMessageAttribute.swift */; }; - D0458C891E69B4AB00FB34C1 /* OutgoingContentInfoMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0458C871E69B4AB00FB34C1 /* OutgoingContentInfoMessageAttribute.swift */; }; - D0467D0B20D7F1E60055C28F /* SynchronizeMarkAllUnseenPersonalMessagesOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0467D0A20D7F1E60055C28F /* SynchronizeMarkAllUnseenPersonalMessagesOperation.swift */; }; - D0467D0C20D7F1E60055C28F /* SynchronizeMarkAllUnseenPersonalMessagesOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0467D0A20D7F1E60055C28F /* SynchronizeMarkAllUnseenPersonalMessagesOperation.swift */; }; - D0467D1520D7F2C90055C28F /* ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0467D1420D7F2C90055C28F /* ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift */; }; - D0467D1620D7F2C90055C28F /* ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0467D1420D7F2C90055C28F /* ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift */; }; - D048B4AC20A5DA4300C79D31 /* ManagedProxyInfoUpdates.swift in Sources */ = {isa = PBXBuildFile; fileRef = D048B4AB20A5DA4300C79D31 /* ManagedProxyInfoUpdates.swift */; }; - D048B4AD20A5DA4300C79D31 /* ManagedProxyInfoUpdates.swift in Sources */ = {isa = PBXBuildFile; fileRef = D048B4AB20A5DA4300C79D31 /* ManagedProxyInfoUpdates.swift */; }; - D049EAD51E43D98500A2CD3A /* RecentMediaItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D049EAD41E43D98500A2CD3A /* RecentMediaItem.swift */; }; - D049EAD61E43D98500A2CD3A /* RecentMediaItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D049EAD41E43D98500A2CD3A /* RecentMediaItem.swift */; }; - D049EAD81E43DAD200A2CD3A /* ManagedRecentStickers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D049EAD71E43DAD200A2CD3A /* ManagedRecentStickers.swift */; }; - D049EAD91E43DAD200A2CD3A /* ManagedRecentStickers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D049EAD71E43DAD200A2CD3A /* ManagedRecentStickers.swift */; }; - D049EAE81E44B67100A2CD3A /* RecentPeerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D049EAE71E44B67100A2CD3A /* RecentPeerItem.swift */; }; - D049EAE91E44B67100A2CD3A /* RecentPeerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D049EAE71E44B67100A2CD3A /* RecentPeerItem.swift */; }; - D049EAEB1E44B71B00A2CD3A /* RecentlySearchedPeerIds.swift in Sources */ = {isa = PBXBuildFile; fileRef = D049EAEA1E44B71B00A2CD3A /* RecentlySearchedPeerIds.swift */; }; - D049EAEC1E44B71B00A2CD3A /* RecentlySearchedPeerIds.swift in Sources */ = {isa = PBXBuildFile; fileRef = D049EAEA1E44B71B00A2CD3A /* RecentlySearchedPeerIds.swift */; }; - D049EAF51E44DF3300A2CD3A /* AccountState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D049EAF41E44DF3300A2CD3A /* AccountState.swift */; }; - D049EAF61E44DF3300A2CD3A /* AccountState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D049EAF41E44DF3300A2CD3A /* AccountState.swift */; }; - D04CAA5A1E83310D0047E51F /* MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04CAA591E83310D0047E51F /* MD5.swift */; }; - D04CAA5B1E83310D0047E51F /* MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04CAA591E83310D0047E51F /* MD5.swift */; }; - D04D21372306EC9A00609388 /* MacInternalUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04D21362306EC9A00609388 /* MacInternalUpdater.swift */; }; - D04D21382306ECF600609388 /* FormatPhoneNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E452D2305C15A0049C28B /* FormatPhoneNumber.m */; }; - D04D213C230AC35A00609388 /* WasScheduledMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04D213B230AC35A00609388 /* WasScheduledMessageAttribute.swift */; }; - D04D213D230AC35A00609388 /* WasScheduledMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04D213B230AC35A00609388 /* WasScheduledMessageAttribute.swift */; }; - D04D8FF4209A4B0700865719 /* NetworkSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04D8FF3209A4B0700865719 /* NetworkSettings.swift */; }; - D04D8FF5209A4B0700865719 /* NetworkSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04D8FF3209A4B0700865719 /* NetworkSettings.swift */; }; - D050F2101E48AB0600988324 /* InteractivePhoneFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D050F20F1E48AB0600988324 /* InteractivePhoneFormatter.swift */; }; - D050F2111E48AB0600988324 /* InteractivePhoneFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D050F20F1E48AB0600988324 /* InteractivePhoneFormatter.swift */; }; - D050F2511E4A59C200988324 /* JoinLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = D050F2501E4A59C200988324 /* JoinLink.swift */; }; - D050F2521E4A59C200988324 /* JoinLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = D050F2501E4A59C200988324 /* JoinLink.swift */; }; - D050F2601E4A5AD500988324 /* AutoremoveTimeoutMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AAD1A71E32602500D5B9DE /* AutoremoveTimeoutMessageAttribute.swift */; }; - D050F2611E4A5AE700988324 /* PrivacySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01B27A11E394D8B0022A4C0 /* PrivacySettings.swift */; }; - D050F2621E4A5AE700988324 /* GlobalNotificationSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08774FD1E3E3A3500A97350 /* GlobalNotificationSettings.swift */; }; - D050F2631E4A5AEB00988324 /* SynchronizePinnedChatsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC38781E40BAF20044D6FE /* SynchronizePinnedChatsOperation.swift */; }; - D050F2641E4A5AEB00988324 /* ManagedSynchronizePinnedChatsOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC38761E40BAAA0044D6FE /* ManagedSynchronizePinnedChatsOperations.swift */; }; - D050F26A1E4A5B6D00988324 /* ManagedGlobalNotificationSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08774FB1E3E39F600A97350 /* ManagedGlobalNotificationSettings.swift */; }; - D050F26B1E4A5B6D00988324 /* ApplyMaxReadIndexInteractively.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AAD1A91E32638500D5B9DE /* ApplyMaxReadIndexInteractively.swift */; }; - D050F26C1E4A5B6D00988324 /* UpdatePeers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC386F1E40853E0044D6FE /* UpdatePeers.swift */; }; - D050F26D1E4A5B6D00988324 /* CreateGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC386D1E3FDAB70044D6FE /* CreateGroup.swift */; }; - D050F26E1E4A5B6D00988324 /* RemovePeerChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC38741E40A7F70044D6FE /* RemovePeerChat.swift */; }; - D051DB14215EC5A300F30F92 /* AppChangelogState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D051DB13215EC5A300F30F92 /* AppChangelogState.swift */; }; - D051DB15215EC5A300F30F92 /* AppChangelogState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D051DB13215EC5A300F30F92 /* AppChangelogState.swift */; }; - D051DB17215ECC4D00F30F92 /* AppChangelog.swift in Sources */ = {isa = PBXBuildFile; fileRef = D051DB16215ECC4D00F30F92 /* AppChangelog.swift */; }; - D051DB18215ECC4D00F30F92 /* AppChangelog.swift in Sources */ = {isa = PBXBuildFile; fileRef = D051DB16215ECC4D00F30F92 /* AppChangelog.swift */; }; - D0528E5A1E658B3600E2FEF5 /* ManagedLocalInputActivities.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0528E591E658B3600E2FEF5 /* ManagedLocalInputActivities.swift */; }; - D0528E5B1E658B3600E2FEF5 /* ManagedLocalInputActivities.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0528E591E658B3600E2FEF5 /* ManagedLocalInputActivities.swift */; }; - D0528E601E65B94E00E2FEF5 /* SingleMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0528E5F1E65B94E00E2FEF5 /* SingleMessageView.swift */; }; - D0528E611E65B94E00E2FEF5 /* SingleMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0528E5F1E65B94E00E2FEF5 /* SingleMessageView.swift */; }; - D0528E651E65C82400E2FEF5 /* UpdateContactName.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0528E641E65C82400E2FEF5 /* UpdateContactName.swift */; }; - D0528E661E65C82400E2FEF5 /* UpdateContactName.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0528E641E65C82400E2FEF5 /* UpdateContactName.swift */; }; - D0528E6A1E65DD2100E2FEF5 /* WebpagePreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0528E691E65DD2100E2FEF5 /* WebpagePreview.swift */; }; - D0528E6B1E65DD2100E2FEF5 /* WebpagePreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0528E691E65DD2100E2FEF5 /* WebpagePreview.swift */; }; - D0529D2421A4123400D7C3C4 /* SynchronizeRecentlyUsedMediaOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0529D2321A4123400D7C3C4 /* SynchronizeRecentlyUsedMediaOperations.swift */; }; - D0529D2521A4123400D7C3C4 /* SynchronizeRecentlyUsedMediaOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0529D2321A4123400D7C3C4 /* SynchronizeRecentlyUsedMediaOperations.swift */; }; - D0529D2721A4141800D7C3C4 /* ManagedSynchronizeRecentlyUsedMediaOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0529D2621A4141800D7C3C4 /* ManagedSynchronizeRecentlyUsedMediaOperations.swift */; }; - D0529D2821A4141800D7C3C4 /* ManagedSynchronizeRecentlyUsedMediaOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0529D2621A4141800D7C3C4 /* ManagedSynchronizeRecentlyUsedMediaOperations.swift */; }; - D053B4181F18DE4F00E2D58A /* AuthorSignatureMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D053B4171F18DE4F00E2D58A /* AuthorSignatureMessageAttribute.swift */; }; - D053B4191F18DE5000E2D58A /* AuthorSignatureMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D053B4171F18DE4F00E2D58A /* AuthorSignatureMessageAttribute.swift */; }; - D053B41B1F18DEF500E2D58A /* TelegramMediaExpiredContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D053B41A1F18DEF500E2D58A /* TelegramMediaExpiredContent.swift */; }; - D053B41C1F18DEF500E2D58A /* TelegramMediaExpiredContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D053B41A1F18DEF500E2D58A /* TelegramMediaExpiredContent.swift */; }; - D05452071E7B5093006EEF19 /* LoadedStickerPack.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05452061E7B5093006EEF19 /* LoadedStickerPack.swift */; }; - D05452081E7B5093006EEF19 /* LoadedStickerPack.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05452061E7B5093006EEF19 /* LoadedStickerPack.swift */; }; - D054648B2073854A002ECC1E /* SecureIdPersonalDetailsValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D054648A2073854A002ECC1E /* SecureIdPersonalDetailsValue.swift */; }; - D054648C2073854A002ECC1E /* SecureIdPersonalDetailsValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D054648A2073854A002ECC1E /* SecureIdPersonalDetailsValue.swift */; }; - D054648E20738626002ECC1E /* SecureIdDriversLicenseValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D054648D20738626002ECC1E /* SecureIdDriversLicenseValue.swift */; }; - D054648F20738626002ECC1E /* SecureIdDriversLicenseValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D054648D20738626002ECC1E /* SecureIdDriversLicenseValue.swift */; }; - D054649120738653002ECC1E /* SecureIdIDCardValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D054649020738653002ECC1E /* SecureIdIDCardValue.swift */; }; - D054649220738653002ECC1E /* SecureIdIDCardValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D054649020738653002ECC1E /* SecureIdIDCardValue.swift */; }; - D0546494207386D7002ECC1E /* SecureIdUtilityBillValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0546493207386D7002ECC1E /* SecureIdUtilityBillValue.swift */; }; - D0546495207386D7002ECC1E /* SecureIdUtilityBillValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0546493207386D7002ECC1E /* SecureIdUtilityBillValue.swift */; }; - D05464972073872C002ECC1E /* SecureIdBankStatementValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05464962073872C002ECC1E /* SecureIdBankStatementValue.swift */; }; - D05464982073872C002ECC1E /* SecureIdBankStatementValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05464962073872C002ECC1E /* SecureIdBankStatementValue.swift */; }; - D054649A20738760002ECC1E /* SecureIdRentalAgreementValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D054649920738760002ECC1E /* SecureIdRentalAgreementValue.swift */; }; - D054649B20738760002ECC1E /* SecureIdRentalAgreementValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D054649920738760002ECC1E /* SecureIdRentalAgreementValue.swift */; }; - D0561DE31E5737FC00E6B9E9 /* UpdatePeerInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0561DE21E5737FC00E6B9E9 /* UpdatePeerInfo.swift */; }; - D0561DE41E5737FC00E6B9E9 /* UpdatePeerInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0561DE21E5737FC00E6B9E9 /* UpdatePeerInfo.swift */; }; - D0561DEA1E5754FA00E6B9E9 /* ChannelAdmins.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0561DE91E5754FA00E6B9E9 /* ChannelAdmins.swift */; }; - D0561DEB1E5754FA00E6B9E9 /* ChannelAdmins.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0561DE91E5754FA00E6B9E9 /* ChannelAdmins.swift */; }; - D0575AF11E9FFA5D006F2541 /* SynchronizeSavedGifsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0575AF01E9FFA5D006F2541 /* SynchronizeSavedGifsOperation.swift */; }; - D0575AF21E9FFA5D006F2541 /* SynchronizeSavedGifsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0575AF01E9FFA5D006F2541 /* SynchronizeSavedGifsOperation.swift */; }; - D0575AF41E9FFDDE006F2541 /* ManagedSynchronizeSavedGifsOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0575AF31E9FFDDD006F2541 /* ManagedSynchronizeSavedGifsOperations.swift */; }; - D0575AF51E9FFDDE006F2541 /* ManagedSynchronizeSavedGifsOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0575AF31E9FFDDD006F2541 /* ManagedSynchronizeSavedGifsOperations.swift */; }; - D0575C2D22B922DF00A71A0E /* DeleteAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0575C2C22B922DF00A71A0E /* DeleteAccount.swift */; }; - D0575C2E22B922DF00A71A0E /* DeleteAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0575C2C22B922DF00A71A0E /* DeleteAccount.swift */; }; - D058E0D11E8AD65C00A442DE /* StandaloneSendMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D058E0D01E8AD65C00A442DE /* StandaloneSendMessage.swift */; }; - D058E0D21E8AD65C00A442DE /* StandaloneSendMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D058E0D01E8AD65C00A442DE /* StandaloneSendMessage.swift */; }; - D05A32E11E6F0982002760B4 /* UpdatedAccountPrivacySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05A32E01E6F0982002760B4 /* UpdatedAccountPrivacySettings.swift */; }; - D05A32E21E6F0982002760B4 /* UpdatedAccountPrivacySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05A32E01E6F0982002760B4 /* UpdatedAccountPrivacySettings.swift */; }; - D05A32E41E6F0B2E002760B4 /* RecentAccountSessions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05A32E31E6F0B2E002760B4 /* RecentAccountSessions.swift */; }; - D05A32E51E6F0B2E002760B4 /* RecentAccountSessions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05A32E31E6F0B2E002760B4 /* RecentAccountSessions.swift */; }; - D05A32E71E6F0B5C002760B4 /* RecentAccountSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05A32E61E6F0B5C002760B4 /* RecentAccountSession.swift */; }; - D05A32E81E6F0B5C002760B4 /* RecentAccountSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05A32E61E6F0B5C002760B4 /* RecentAccountSession.swift */; }; - D05D8B372192F8AF0064586F /* LocalizationListState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05D8B362192F8AF0064586F /* LocalizationListState.swift */; }; - D05D8B382192F8AF0064586F /* LocalizationListState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05D8B362192F8AF0064586F /* LocalizationListState.swift */; }; - D05FDC3922CA45070060BFE3 /* AppUpdate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EC0DE822C6825D00E7185B /* AppUpdate.swift */; }; - D0613FCA1E60440600202CDB /* InvitationLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0613FC91E60440600202CDB /* InvitationLinks.swift */; }; - D0613FCB1E60440600202CDB /* InvitationLinks.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0613FC91E60440600202CDB /* InvitationLinks.swift */; }; - D0613FCF1E60520700202CDB /* ChannelMembers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0613FCE1E60520700202CDB /* ChannelMembers.swift */; }; - D0613FD01E60520700202CDB /* ChannelMembers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0613FCE1E60520700202CDB /* ChannelMembers.swift */; }; - D0613FD71E606B3B00202CDB /* ConvertGroupToSupergroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0613FD61E606B3B00202CDB /* ConvertGroupToSupergroup.swift */; }; - D0613FD81E606B3B00202CDB /* ConvertGroupToSupergroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0613FD61E606B3B00202CDB /* ConvertGroupToSupergroup.swift */; }; - D0633CD22253A528003DD95F /* ChatOnlineMembers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0633CD12253A528003DD95F /* ChatOnlineMembers.swift */; }; - D0633CD32253A528003DD95F /* ChatOnlineMembers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0633CD12253A528003DD95F /* ChatOnlineMembers.swift */; }; - D0633CDB2253C0D3003DD95F /* CloudMediaResourceParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0633CDA2253C0D3003DD95F /* CloudMediaResourceParameters.swift */; }; - D0633CDC2253C0D3003DD95F /* CloudMediaResourceParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0633CDA2253C0D3003DD95F /* CloudMediaResourceParameters.swift */; }; - D0642EF91F3E05D700792790 /* EarliestUnseenPersonalMentionMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0642EF81F3E05D700792790 /* EarliestUnseenPersonalMentionMessage.swift */; }; - D0642EFA1F3E05D700792790 /* EarliestUnseenPersonalMentionMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0642EF81F3E05D700792790 /* EarliestUnseenPersonalMentionMessage.swift */; }; - D067066C1D512ADB00DED3E3 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D06706671D512ADB00DED3E3 /* Postbox.framework */; }; - D067066D1D512ADB00DED3E3 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D06706681D512ADB00DED3E3 /* SwiftSignalKit.framework */; }; - D069257122D8B526002FC021 /* SecretChatSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D069257022D8B526002FC021 /* SecretChatSettings.swift */; }; - D069257222D8B526002FC021 /* SecretChatSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D069257022D8B526002FC021 /* SecretChatSettings.swift */; }; - D06CA13522772EB20094E707 /* ManagedNotificationSettingsBehaviors.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06CA13422772EB20094E707 /* ManagedNotificationSettingsBehaviors.swift */; }; - D06CA13622772EB20094E707 /* ManagedNotificationSettingsBehaviors.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06CA13422772EB20094E707 /* ManagedNotificationSettingsBehaviors.swift */; }; - D06ECFC820B810D300C576C2 /* TermsOfService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06ECFC720B810D300C576C2 /* TermsOfService.swift */; }; - D06ECFC920B810D300C576C2 /* TermsOfService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06ECFC720B810D300C576C2 /* TermsOfService.swift */; }; - D07047B41F3DF1FE00F6A8D4 /* ConsumablePersonalMentionMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047B31F3DF1FE00F6A8D4 /* ConsumablePersonalMentionMessageAttribute.swift */; }; - D07047B51F3DF1FE00F6A8D4 /* ConsumablePersonalMentionMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047B31F3DF1FE00F6A8D4 /* ConsumablePersonalMentionMessageAttribute.swift */; }; - D07047B71F3DF2CD00F6A8D4 /* ManagedConsumePersonalMessagesActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047B61F3DF2CD00F6A8D4 /* ManagedConsumePersonalMessagesActions.swift */; }; - D07047B81F3DF2CD00F6A8D4 /* ManagedConsumePersonalMessagesActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047B61F3DF2CD00F6A8D4 /* ManagedConsumePersonalMessagesActions.swift */; }; - D07047BA1F3DF75500F6A8D4 /* ConsumePersonalMessageAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047B91F3DF75500F6A8D4 /* ConsumePersonalMessageAction.swift */; }; - D07047BB1F3DF75500F6A8D4 /* ConsumePersonalMessageAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07047B91F3DF75500F6A8D4 /* ConsumePersonalMessageAction.swift */; }; - D072F357231542740009E66F /* MessageReactionList.swift in Sources */ = {isa = PBXBuildFile; fileRef = D072F356231542740009E66F /* MessageReactionList.swift */; }; - D072F358231542740009E66F /* MessageReactionList.swift in Sources */ = {isa = PBXBuildFile; fileRef = D072F356231542740009E66F /* MessageReactionList.swift */; }; - D073CE5D1DCB97F6007511FD /* ForwardSourceInfoAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D073CE5C1DCB97F6007511FD /* ForwardSourceInfoAttribute.swift */; }; - D073CE601DCB9D14007511FD /* OutgoingMessageInfoAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D073CE5F1DCB9D14007511FD /* OutgoingMessageInfoAttribute.swift */; }; - D073CE6A1DCBCF17007511FD /* ViewCountMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CE71D6224AD00955575 /* ViewCountMessageAttribute.swift */; }; - D073CE6B1DCBCF17007511FD /* ReplyMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CE51D6224A700955575 /* ReplyMessageAttribute.swift */; }; - D073CE6C1DCBCF17007511FD /* TextEntitiesMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CE31D62249F00955575 /* TextEntitiesMessageAttribute.swift */; }; - D073CE6D1DCBCF17007511FD /* InlineBotMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CE11D62249B00955575 /* InlineBotMessageAttribute.swift */; }; - D073CE6E1DCBCF17007511FD /* ForwardSourceInfoAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D073CE5C1DCB97F6007511FD /* ForwardSourceInfoAttribute.swift */; }; - D073CE6F1DCBCF17007511FD /* OutgoingMessageInfoAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D073CE5F1DCB9D14007511FD /* OutgoingMessageInfoAttribute.swift */; }; - D073CEA11DCBF3D3007511FD /* StickerPack.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021E0DE1DB539FC00C6B04F /* StickerPack.swift */; }; - D073CEA41DCBF3EA007511FD /* MultipartUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03C53761DAFF20F004C17B3 /* MultipartUpload.swift */; }; - D073CEA51DCBF3F5007511FD /* StickerManagement.swift in Sources */ = {isa = PBXBuildFile; fileRef = D021E0E11DB5401A00C6B04F /* StickerManagement.swift */; }; - D0750C9022B2FD8300BE5F6E /* PeerAccessHash.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0750C8F22B2FD8300BE5F6E /* PeerAccessHash.swift */; }; - D0750C9122B2FD8300BE5F6E /* PeerAccessHash.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0750C8F22B2FD8300BE5F6E /* PeerAccessHash.swift */; }; - D0754D2A1EEE10FC00884F6E /* BotPaymentForm.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0754D291EEE10FC00884F6E /* BotPaymentForm.swift */; }; - D0754D2B1EEE10FC00884F6E /* BotPaymentForm.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0754D291EEE10FC00884F6E /* BotPaymentForm.swift */; }; - D076F8892296D8E9004F895A /* ManageChannelDiscussionGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D076F8882296D8E9004F895A /* ManageChannelDiscussionGroup.swift */; }; - D076F88A2296D8F6004F895A /* ManageChannelDiscussionGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D076F8882296D8E9004F895A /* ManageChannelDiscussionGroup.swift */; }; - D07827BB1E00451F00071108 /* SearchPeers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07827BA1E00451F00071108 /* SearchPeers.swift */; }; - D07827C91E02F59C00071108 /* InstantPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07827C81E02F59C00071108 /* InstantPage.swift */; }; - D07827CB1E02F5B200071108 /* RichText.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07827CA1E02F5B200071108 /* RichText.swift */; }; - D07E413F208A769D00FCA8F0 /* ProxyServersStatuses.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07E413E208A769D00FCA8F0 /* ProxyServersStatuses.swift */; }; - D07E4140208A769D00FCA8F0 /* ProxyServersStatuses.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07E413E208A769D00FCA8F0 /* ProxyServersStatuses.swift */; }; - D081E10A217F5ADE003CD921 /* LocalizationPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = D081E109217F5ADE003CD921 /* LocalizationPreview.swift */; }; - D081E10B217F5ADE003CD921 /* LocalizationPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = D081E109217F5ADE003CD921 /* LocalizationPreview.swift */; }; - D08774FC1E3E39F600A97350 /* ManagedGlobalNotificationSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08774FB1E3E39F600A97350 /* ManagedGlobalNotificationSettings.swift */; }; - D08774FE1E3E3A3500A97350 /* GlobalNotificationSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08774FD1E3E3A3500A97350 /* GlobalNotificationSettings.swift */; }; - D0879BC822F85A3E00C4D6B3 /* ImageRepresentationWithReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0879BC722F85A3E00C4D6B3 /* ImageRepresentationWithReference.swift */; }; - D0879BC922F85A3E00C4D6B3 /* ImageRepresentationWithReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0879BC722F85A3E00C4D6B3 /* ImageRepresentationWithReference.swift */; }; - D08984F22114B97400918162 /* ClearCloudDrafts.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08984F12114B97400918162 /* ClearCloudDrafts.swift */; }; - D08984F32114B97400918162 /* ClearCloudDrafts.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08984F12114B97400918162 /* ClearCloudDrafts.swift */; }; - D08984F521187ECA00918162 /* NetworkType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08984F421187ECA00918162 /* NetworkType.swift */; }; - D08984F621187ECA00918162 /* NetworkType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08984F421187ECA00918162 /* NetworkType.swift */; }; - D08984F92118816A00918162 /* Reachability.h in Headers */ = {isa = PBXBuildFile; fileRef = D08984F72118816900918162 /* Reachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D08984FA2118816A00918162 /* Reachability.h in Headers */ = {isa = PBXBuildFile; fileRef = D08984F72118816900918162 /* Reachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D08984FB2118816A00918162 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = D08984F82118816A00918162 /* Reachability.m */; }; - D08984FC2118816A00918162 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = D08984F82118816A00918162 /* Reachability.m */; }; - D08CAA7D1ED77EE90000FDA8 /* LocalizationSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08CAA7C1ED77EE90000FDA8 /* LocalizationSettings.swift */; }; - D08CAA7E1ED77EE90000FDA8 /* LocalizationSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08CAA7C1ED77EE90000FDA8 /* LocalizationSettings.swift */; }; - D08CAA801ED80ED20000FDA8 /* SuggestedLocalizationEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08CAA7F1ED80ED20000FDA8 /* SuggestedLocalizationEntry.swift */; }; - D08CAA811ED80ED20000FDA8 /* SuggestedLocalizationEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08CAA7F1ED80ED20000FDA8 /* SuggestedLocalizationEntry.swift */; }; - D08CAA841ED8164B0000FDA8 /* Localization.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08CAA831ED8164B0000FDA8 /* Localization.swift */; }; - D08CAA851ED8164B0000FDA8 /* Localization.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08CAA831ED8164B0000FDA8 /* Localization.swift */; }; - D08CAA871ED81DD40000FDA8 /* LocalizationInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08CAA861ED81DD40000FDA8 /* LocalizationInfo.swift */; }; - D08CAA881ED81DD40000FDA8 /* LocalizationInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08CAA861ED81DD40000FDA8 /* LocalizationInfo.swift */; }; - D08CAA8C1ED81EDF0000FDA8 /* Localizations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08CAA8B1ED81EDF0000FDA8 /* Localizations.swift */; }; - D08CAA8D1ED81EDF0000FDA8 /* Localizations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08CAA8B1ED81EDF0000FDA8 /* Localizations.swift */; }; - D08F4A661E79CC4A00A2AA15 /* SynchronizeInstalledStickerPacksOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08F4A651E79CC4A00A2AA15 /* SynchronizeInstalledStickerPacksOperations.swift */; }; - D08F4A671E79CC4A00A2AA15 /* SynchronizeInstalledStickerPacksOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08F4A651E79CC4A00A2AA15 /* SynchronizeInstalledStickerPacksOperations.swift */; }; - D08F4A691E79CECB00A2AA15 /* ManagedSynchronizeInstalledStickerPacksOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08F4A681E79CECB00A2AA15 /* ManagedSynchronizeInstalledStickerPacksOperations.swift */; }; - D08F4A6A1E79CECB00A2AA15 /* ManagedSynchronizeInstalledStickerPacksOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08F4A681E79CECB00A2AA15 /* ManagedSynchronizeInstalledStickerPacksOperations.swift */; }; - D093D7EE206413F600BC3599 /* SecureIdDataTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D7ED206413F600BC3599 /* SecureIdDataTypes.swift */; }; - D093D7EF206413F600BC3599 /* SecureIdDataTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D7ED206413F600BC3599 /* SecureIdDataTypes.swift */; }; - D093D7F520641A4900BC3599 /* SecureIdPhoneValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D7F420641A4900BC3599 /* SecureIdPhoneValue.swift */; }; - D093D7F620641A4900BC3599 /* SecureIdPhoneValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D7F420641A4900BC3599 /* SecureIdPhoneValue.swift */; }; - D093D7F920641AA500BC3599 /* SecureIdEmailValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D7F820641AA500BC3599 /* SecureIdEmailValue.swift */; }; - D093D7FA20641AA500BC3599 /* SecureIdEmailValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D7F820641AA500BC3599 /* SecureIdEmailValue.swift */; }; - D093D806206539D000BC3599 /* SaveSecureIdValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D805206539D000BC3599 /* SaveSecureIdValue.swift */; }; - D098907F22942E3B0053F151 /* ActiveSessionsContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D098907E22942E3B0053F151 /* ActiveSessionsContext.swift */; }; - D098908022942E3B0053F151 /* ActiveSessionsContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D098907E22942E3B0053F151 /* ActiveSessionsContext.swift */; }; - D099D7461EEF0C2700A3128C /* ChannelMessageStateVersionAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D099D7451EEF0C2700A3128C /* ChannelMessageStateVersionAttribute.swift */; }; - D099D7471EEF0C2700A3128C /* ChannelMessageStateVersionAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D099D7451EEF0C2700A3128C /* ChannelMessageStateVersionAttribute.swift */; }; - D099D7491EEF418D00A3128C /* HistoryViewStateValidation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D099D7481EEF418D00A3128C /* HistoryViewStateValidation.swift */; }; - D099D74A1EEF418D00A3128C /* HistoryViewStateValidation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D099D7481EEF418D00A3128C /* HistoryViewStateValidation.swift */; }; - D099E222229420D600561B75 /* BlockedPeersContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D099E221229420D600561B75 /* BlockedPeersContext.swift */; }; - D099E223229420D600561B75 /* BlockedPeersContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D099E221229420D600561B75 /* BlockedPeersContext.swift */; }; - D099EA1C1DE72867001AF5A8 /* PeerCommands.swift in Sources */ = {isa = PBXBuildFile; fileRef = D099EA1B1DE72867001AF5A8 /* PeerCommands.swift */; }; - D09A2FE61D7CD4940018FB72 /* TelegramChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09A2FE51D7CD4940018FB72 /* TelegramChannel.swift */; }; - D09A2FEB1D7CDC320018FB72 /* PeerAccessRestrictionInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09A2FEA1D7CDC320018FB72 /* PeerAccessRestrictionInfo.swift */; }; - D09BB6B41DB02C2B00A905C0 /* PendingMessageManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09BB6B31DB02C2B00A905C0 /* PendingMessageManager.swift */; }; - D09BB6B61DB0428000A905C0 /* PendingMessageUploadedContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09BB6B51DB0428000A905C0 /* PendingMessageUploadedContent.swift */; }; - D09D8C0B1D4FAB1D0081DBEC /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09D8C011D4FAB1D0081DBEC /* TelegramCore.framework */; }; - D09D8C101D4FAB1D0081DBEC /* TelegramCoreTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D09D8C0F1D4FAB1D0081DBEC /* TelegramCoreTests.m */; }; - D09D8C121D4FAB1D0081DBEC /* TelegramCore.h in Headers */ = {isa = PBXBuildFile; fileRef = D09D8C041D4FAB1D0081DBEC /* TelegramCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0A3E447214802C7008ACEF6 /* VoipConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A3E446214802C7008ACEF6 /* VoipConfiguration.swift */; }; - D0A3E448214802C7008ACEF6 /* VoipConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A3E446214802C7008ACEF6 /* VoipConfiguration.swift */; }; - D0A472B61F4CBE8B00E0EEDA /* LoadedPeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A472B51F4CBE8B00E0EEDA /* LoadedPeer.swift */; }; - D0A472B71F4CBE8B00E0EEDA /* LoadedPeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A472B51F4CBE8B00E0EEDA /* LoadedPeer.swift */; }; - D0A8998F217A37A000759EE6 /* NotificationAutolockReportManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A8998E217A37A000759EE6 /* NotificationAutolockReportManager.swift */; }; - D0A89990217A37A000759EE6 /* NotificationAutolockReportManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A8998E217A37A000759EE6 /* NotificationAutolockReportManager.swift */; }; - D0AAD1A81E32602500D5B9DE /* AutoremoveTimeoutMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AAD1A71E32602500D5B9DE /* AutoremoveTimeoutMessageAttribute.swift */; }; - D0AAD1AA1E32638500D5B9DE /* ApplyMaxReadIndexInteractively.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AAD1A91E32638500D5B9DE /* ApplyMaxReadIndexInteractively.swift */; }; - D0AAD1B81E326FE200D5B9DE /* ManagedAutoremoveMessageOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AAD1B71E326FE200D5B9DE /* ManagedAutoremoveMessageOperations.swift */; }; - D0AAD1B91E326FE200D5B9DE /* ManagedAutoremoveMessageOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AAD1B71E326FE200D5B9DE /* ManagedAutoremoveMessageOperations.swift */; }; - D0AB0B921D65E9FA002C78E7 /* ManagedServiceViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB0B911D65E9FA002C78E7 /* ManagedServiceViews.swift */; }; - D0AB0B941D662ECE002C78E7 /* ManagedMessageHistoryHoles.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB0B931D662ECE002C78E7 /* ManagedMessageHistoryHoles.swift */; }; - D0AB0B961D662F0B002C78E7 /* ManagedChatListHoles.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB0B951D662F0B002C78E7 /* ManagedChatListHoles.swift */; }; - D0AB0B9A1D666520002C78E7 /* ManagedSynchronizePeerReadStates.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB0B991D666520002C78E7 /* ManagedSynchronizePeerReadStates.swift */; }; - D0AB262621C2F991008F6685 /* TelegramMediaPoll.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB262521C2F991008F6685 /* TelegramMediaPoll.swift */; }; - D0AB262721C2F991008F6685 /* TelegramMediaPoll.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB262521C2F991008F6685 /* TelegramMediaPoll.swift */; }; - D0AB262B21C3CE80008F6685 /* Polls.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB262A21C3CE80008F6685 /* Polls.swift */; }; - D0AB262C21C3CE80008F6685 /* Polls.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB262A21C3CE80008F6685 /* Polls.swift */; }; - D0AD02E31FFFA14800C1DCFF /* PeerLiveLocationsContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AD02E21FFFA14800C1DCFF /* PeerLiveLocationsContext.swift */; }; - D0AD02E41FFFA14800C1DCFF /* PeerLiveLocationsContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AD02E21FFFA14800C1DCFF /* PeerLiveLocationsContext.swift */; }; - D0ADF911212B00DD00310BBC /* SecureIdConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0ADF910212B00DD00310BBC /* SecureIdConfiguration.swift */; }; - D0ADF912212B00DD00310BBC /* SecureIdConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0ADF910212B00DD00310BBC /* SecureIdConfiguration.swift */; }; - D0AF32221FAC95C20097362B /* StandaloneUploadedMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AF32211FAC95C20097362B /* StandaloneUploadedMedia.swift */; }; - D0AF32231FAC95C20097362B /* StandaloneUploadedMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AF32211FAC95C20097362B /* StandaloneUploadedMedia.swift */; }; - D0AF32311FACEDEC0097362B /* CoreSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AF32301FACEDEC0097362B /* CoreSettings.swift */; }; - D0AF32321FACEDEC0097362B /* CoreSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AF32301FACEDEC0097362B /* CoreSettings.swift */; }; - D0AF32351FAE8C6B0097362B /* MultipeerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AF32341FAE8C6B0097362B /* MultipeerManager.swift */; }; - D0B1671D1F9EA2C300976B40 /* ChatHistoryPreloadManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B1671C1F9EA2C300976B40 /* ChatHistoryPreloadManager.swift */; }; - D0B1671E1F9EA2C300976B40 /* ChatHistoryPreloadManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B1671C1F9EA2C300976B40 /* ChatHistoryPreloadManager.swift */; }; - D0B167231F9F972E00976B40 /* LoggingSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B167221F9F972E00976B40 /* LoggingSettings.swift */; }; - D0B167241F9F972E00976B40 /* LoggingSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B167221F9F972E00976B40 /* LoggingSettings.swift */; }; - D0B2F7742052DEF700D3BFB9 /* TelegramDeviceContactImportInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B2F7732052DEF700D3BFB9 /* TelegramDeviceContactImportInfo.swift */; }; - D0B417C11D7DCEEF004562A4 /* ApiGroupOrChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B417C01D7DCEEF004562A4 /* ApiGroupOrChannel.swift */; }; - D0B4186B1D7E03D5004562A4 /* TelegramCoreMac.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B418691D7E03D5004562A4 /* TelegramCoreMac.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0B418721D7E0409004562A4 /* PostboxMac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0B418701D7E0409004562A4 /* PostboxMac.framework */; }; - D0B418731D7E0409004562A4 /* SwiftSignalKitMac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0B418711D7E0409004562A4 /* SwiftSignalKitMac.framework */; }; - D0B4187F1D7E054E004562A4 /* MtProtoKitMac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0B4187E1D7E054E004562A4 /* MtProtoKitMac.framework */; }; - D0B418861D7E056D004562A4 /* Namespaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CD21D62244300955575 /* Namespaces.swift */; }; - D0B4188E1D7E0578004562A4 /* StoreMessage_Telegram.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CDF1D62249100955575 /* StoreMessage_Telegram.swift */; }; - D0B418941D7E0580004562A4 /* TelegramMediaAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CEC1D62250800955575 /* TelegramMediaAction.swift */; }; - D0B418951D7E0580004562A4 /* TelegramMediaContact.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CED1D62250800955575 /* TelegramMediaContact.swift */; }; - D0B418961D7E0580004562A4 /* TelegramMediaFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CEE1D62250800955575 /* TelegramMediaFile.swift */; }; - D0B418971D7E0580004562A4 /* TelegramMediaImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CEF1D62250800955575 /* TelegramMediaImage.swift */; }; - D0B418991D7E0580004562A4 /* TelegramMediaMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CF11D62250800955575 /* TelegramMediaMap.swift */; }; - D0B4189B1D7E0580004562A4 /* TelegramMediaWebpage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CF31D62250800955575 /* TelegramMediaWebpage.swift */; }; - D0B418A61D7E0592004562A4 /* CloudFileMediaResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D431D6319F900955575 /* CloudFileMediaResource.swift */; }; - D0B418A71D7E0592004562A4 /* Fetch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D391D6319E200955575 /* Fetch.swift */; }; - D0B418AA1D7E0597004562A4 /* Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D561D631A6900955575 /* Download.swift */; }; - D0B418AB1D7E0597004562A4 /* MultipartFetch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D571D631A6900955575 /* MultipartFetch.swift */; }; - D0B418AC1D7E0597004562A4 /* Network.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D581D631A6900955575 /* Network.swift */; }; - D0B418AD1D7E0597004562A4 /* Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D591D631A6900955575 /* Serialization.swift */; }; - D0B418B81D7E05A6004562A4 /* ContactManagement.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D6C1D631AA300955575 /* ContactManagement.swift */; }; - D0B418BA1D7E05BB004562A4 /* NetworkLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = D03B0E421D631E6600955575 /* NetworkLogging.m */; }; - D0B418BB1D7E05BE004562A4 /* NetworkLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = D03B0E411D631E6600955575 /* NetworkLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0B843811DA6EDAE005F29E1 /* CachedUserData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B843801DA6EDAE005F29E1 /* CachedUserData.swift */; }; - D0B843831DA6EDB8005F29E1 /* CachedGroupData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B843821DA6EDB8005F29E1 /* CachedGroupData.swift */; }; - D0B843851DA6EDC4005F29E1 /* CachedChannelData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B843841DA6EDC4005F29E1 /* CachedChannelData.swift */; }; - D0B843871DA6F705005F29E1 /* UpdateCachedPeerData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B843861DA6F705005F29E1 /* UpdateCachedPeerData.swift */; }; - D0B843891DA7AB96005F29E1 /* ExportedInvitation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B843881DA7AB96005F29E1 /* ExportedInvitation.swift */; }; - D0B8438C1DA7CF50005F29E1 /* BotInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B8438B1DA7CF50005F29E1 /* BotInfo.swift */; }; - D0B8438E1DA7D296005F29E1 /* CachedGroupParticipants.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B8438D1DA7D296005F29E1 /* CachedGroupParticipants.swift */; }; - D0B843971DA7FBBC005F29E1 /* ChangePeerNotificationSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B843961DA7FBBC005F29E1 /* ChangePeerNotificationSettings.swift */; }; - D0B8440D1DAB91CD005F29E1 /* ImageRepresentationsUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DF0C901D81A857008AEB01 /* ImageRepresentationsUtils.swift */; }; - D0B8440E1DAB91CD005F29E1 /* MessageUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DF0C921D81AD09008AEB01 /* MessageUtils.swift */; }; - D0B8440F1DAB91CD005F29E1 /* Either.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CB81D62233400955575 /* Either.swift */; }; - D0B844111DAB91CD005F29E1 /* Regex.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CBC1D62234300955575 /* Regex.swift */; }; - D0B844121DAB91CD005F29E1 /* Log.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CBE1D62234A00955575 /* Log.swift */; }; - D0B844131DAB91CD005F29E1 /* StringFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CC01D62235000955575 /* StringFormat.swift */; }; - D0B844141DAB91CD005F29E1 /* PhoneNumbers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0CCD1D62239600955575 /* PhoneNumbers.swift */; }; - D0B844431DAB91FD005F29E1 /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D611D631A8B00955575 /* Account.swift */; }; - D0B844451DAB91FD005F29E1 /* AccountViewTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D631D631A8B00955575 /* AccountViewTracker.swift */; }; - D0B844461DAB91FD005F29E1 /* RecentPeers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D641D631A8B00955575 /* RecentPeers.swift */; }; - D0B844471DAB91FD005F29E1 /* ManagedServiceViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB0B911D65E9FA002C78E7 /* ManagedServiceViews.swift */; }; - D0B844481DAB91FD005F29E1 /* ManagedMessageHistoryHoles.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB0B931D662ECE002C78E7 /* ManagedMessageHistoryHoles.swift */; }; - D0B844491DAB91FD005F29E1 /* ManagedChatListHoles.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB0B951D662F0B002C78E7 /* ManagedChatListHoles.swift */; }; - D0B8444B1DAB91FD005F29E1 /* ManagedSynchronizePeerReadStates.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB0B991D666520002C78E7 /* ManagedSynchronizePeerReadStates.swift */; }; - D0B8444C1DAB91FD005F29E1 /* UpdateCachedPeerData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B843861DA6F705005F29E1 /* UpdateCachedPeerData.swift */; }; - D0B844531DAC0773005F29E1 /* TelegramUserPresence.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B844521DAC0773005F29E1 /* TelegramUserPresence.swift */; }; - D0B85AC51F6B2B9400B8B5CE /* RecentlyUsedHashtags.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B85AC41F6B2B9400B8B5CE /* RecentlyUsedHashtags.swift */; }; - D0B85AC61F6B2B9400B8B5CE /* RecentlyUsedHashtags.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B85AC41F6B2B9400B8B5CE /* RecentlyUsedHashtags.swift */; }; - D0BAAA14230FDB4100AFC473 /* ProcessRemovedMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BAAA13230FDB4100AFC473 /* ProcessRemovedMedia.swift */; }; - D0BAAA15230FDB4100AFC473 /* ProcessRemovedMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BAAA13230FDB4100AFC473 /* ProcessRemovedMedia.swift */; }; - D0BB7C5A1E5C8074001527C3 /* ChannelParticipants.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BB7C591E5C8074001527C3 /* ChannelParticipants.swift */; }; - D0BC386E1E3FDAB70044D6FE /* CreateGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC386D1E3FDAB70044D6FE /* CreateGroup.swift */; }; - D0BC38701E40853E0044D6FE /* UpdatePeers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC386F1E40853E0044D6FE /* UpdatePeers.swift */; }; - D0BC38751E40A7F70044D6FE /* RemovePeerChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC38741E40A7F70044D6FE /* RemovePeerChat.swift */; }; - D0BC38771E40BAAA0044D6FE /* ManagedSynchronizePinnedChatsOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC38761E40BAAA0044D6FE /* ManagedSynchronizePinnedChatsOperations.swift */; }; - D0BC38791E40BAF20044D6FE /* SynchronizePinnedChatsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC38781E40BAF20044D6FE /* SynchronizePinnedChatsOperation.swift */; }; - D0BC387B1E40D2880044D6FE /* TogglePeerChatPinned.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC387A1E40D2880044D6FE /* TogglePeerChatPinned.swift */; }; - D0BC387C1E40D2880044D6FE /* TogglePeerChatPinned.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC387A1E40D2880044D6FE /* TogglePeerChatPinned.swift */; }; - D0BE303A20619EE800FBE6D8 /* SecureIdForm.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE303920619EE800FBE6D8 /* SecureIdForm.swift */; }; - D0BE303B20619EE800FBE6D8 /* SecureIdForm.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE303920619EE800FBE6D8 /* SecureIdForm.swift */; }; - D0BE303D2061A29100FBE6D8 /* RequestSecureIdForm.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE303C2061A29100FBE6D8 /* RequestSecureIdForm.swift */; }; - D0BE303E2061A29100FBE6D8 /* RequestSecureIdForm.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE303C2061A29100FBE6D8 /* RequestSecureIdForm.swift */; }; - D0BE304B20627D9800FBE6D8 /* AccessSecureId.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE304A20627D9800FBE6D8 /* AccessSecureId.swift */; }; - D0BE304C20627D9800FBE6D8 /* AccessSecureId.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE304A20627D9800FBE6D8 /* AccessSecureId.swift */; }; - D0BEAF5D1E54941B00BD963D /* Authorization.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEAF5C1E54941B00BD963D /* Authorization.swift */; }; - D0BEAF5E1E54941B00BD963D /* Authorization.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEAF5C1E54941B00BD963D /* Authorization.swift */; }; - D0BEAF601E54ACF900BD963D /* AccountManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEAF5F1E54ACF900BD963D /* AccountManager.swift */; }; - D0BEAF611E54ACF900BD963D /* AccountManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEAF5F1E54ACF900BD963D /* AccountManager.swift */; }; - D0C0B58A1ED9DA6B000F4D2C /* ManagedLocalizationUpdatesOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C0B5891ED9DA6B000F4D2C /* ManagedLocalizationUpdatesOperations.swift */; }; - D0C0B58B1ED9DA6B000F4D2C /* ManagedLocalizationUpdatesOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C0B5891ED9DA6B000F4D2C /* ManagedLocalizationUpdatesOperations.swift */; }; - D0C0B58D1ED9DC5A000F4D2C /* SynchronizeLocalizationUpdatesOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C0B58C1ED9DC5A000F4D2C /* SynchronizeLocalizationUpdatesOperation.swift */; }; - D0C0B58E1ED9DC5A000F4D2C /* SynchronizeLocalizationUpdatesOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C0B58C1ED9DC5A000F4D2C /* SynchronizeLocalizationUpdatesOperation.swift */; }; - D0C26D661FE022DB004ABF18 /* SynchronizeGroupedPeersOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C26D651FE022DB004ABF18 /* SynchronizeGroupedPeersOperation.swift */; }; - D0C26D671FE022DB004ABF18 /* SynchronizeGroupedPeersOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C26D651FE022DB004ABF18 /* SynchronizeGroupedPeersOperation.swift */; }; - D0C26D691FE02402004ABF18 /* ManagedSynchronizeGroupedPeersOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C26D681FE02402004ABF18 /* ManagedSynchronizeGroupedPeersOperations.swift */; }; - D0C26D6A1FE02402004ABF18 /* ManagedSynchronizeGroupedPeersOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C26D681FE02402004ABF18 /* ManagedSynchronizeGroupedPeersOperations.swift */; }; - D0C26D6C1FE286C3004ABF18 /* FetchChatList.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C26D6B1FE286C3004ABF18 /* FetchChatList.swift */; }; - D0C26D6D1FE286C3004ABF18 /* FetchChatList.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C26D6B1FE286C3004ABF18 /* FetchChatList.swift */; }; - D0C27B3F1F4B51D000A4E170 /* CachedStickerPack.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C27B3E1F4B51D000A4E170 /* CachedStickerPack.swift */; }; - D0C27B401F4B51D000A4E170 /* CachedStickerPack.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C27B3E1F4B51D000A4E170 /* CachedStickerPack.swift */; }; - D0C27B421F4B58C000A4E170 /* PeerSpecificStickerPack.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C27B411F4B58C000A4E170 /* PeerSpecificStickerPack.swift */; }; - D0C27B431F4B58C000A4E170 /* PeerSpecificStickerPack.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C27B411F4B58C000A4E170 /* PeerSpecificStickerPack.swift */; }; - D0C44B611FC616E200227BE0 /* SearchGroupMembers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C44B601FC616E200227BE0 /* SearchGroupMembers.swift */; }; - D0C44B621FC616E200227BE0 /* SearchGroupMembers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C44B601FC616E200227BE0 /* SearchGroupMembers.swift */; }; - D0C48F391E8138DF0075317D /* ArchivedStickerPacksInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C48F381E8138DF0075317D /* ArchivedStickerPacksInfo.swift */; }; - D0C48F3A1E8138DF0075317D /* ArchivedStickerPacksInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C48F381E8138DF0075317D /* ArchivedStickerPacksInfo.swift */; }; - D0C48F3C1E8142EF0075317D /* LoadedPeerFromMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C48F3B1E8142EF0075317D /* LoadedPeerFromMessage.swift */; }; - D0C48F3D1E8142EF0075317D /* LoadedPeerFromMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C48F3B1E8142EF0075317D /* LoadedPeerFromMessage.swift */; }; - D0C50E341E93A86600F62E39 /* CallSessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C50E331E93A86600F62E39 /* CallSessionManager.swift */; }; - D0C50E351E93A86600F62E39 /* CallSessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C50E331E93A86600F62E39 /* CallSessionManager.swift */; }; - D0CA3F84207391560042D2B6 /* SecureIdPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CA3F83207391560042D2B6 /* SecureIdPadding.swift */; }; - D0CA3F85207391560042D2B6 /* SecureIdPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CA3F83207391560042D2B6 /* SecureIdPadding.swift */; }; - D0CA8E4B227209C4008A74C3 /* ManagedSynchronizeGroupMessageStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CA8E4A227209C4008A74C3 /* ManagedSynchronizeGroupMessageStats.swift */; }; - D0CA8E4C227209C4008A74C3 /* ManagedSynchronizeGroupMessageStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CA8E4A227209C4008A74C3 /* ManagedSynchronizeGroupMessageStats.swift */; }; - D0CAF2EA1D75EC600011F558 /* MtProtoKitDynamic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0CAF2E91D75EC600011F558 /* MtProtoKitDynamic.framework */; }; - D0CC4ADC22BA47280088F36D /* TelegramApiMac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0CC4ADB22BA47280088F36D /* TelegramApiMac.framework */; }; - D0D1026C2212FE52003ADA5E /* AccountSortOrderAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D1026B2212FE52003ADA5E /* AccountSortOrderAttribute.swift */; }; - D0D1026D2212FE52003ADA5E /* AccountSortOrderAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D1026B2212FE52003ADA5E /* AccountSortOrderAttribute.swift */; }; - D0D376E622DCCFD600FA7D7C /* SlowMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D376E522DCCFD600FA7D7C /* SlowMode.swift */; }; - D0D376E722DCCFD600FA7D7C /* SlowMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D376E522DCCFD600FA7D7C /* SlowMode.swift */; }; - D0D748021E7AE98B00F4B1F6 /* StickerPackInteractiveOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D748011E7AE98B00F4B1F6 /* StickerPackInteractiveOperations.swift */; }; - D0D748031E7AE98B00F4B1F6 /* StickerPackInteractiveOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D748011E7AE98B00F4B1F6 /* StickerPackInteractiveOperations.swift */; }; - D0DA1D321F7043D50034E892 /* ManagedPendingPeerNotificationSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DA1D311F7043D50034E892 /* ManagedPendingPeerNotificationSettings.swift */; }; - D0DA1D331F7043D50034E892 /* ManagedPendingPeerNotificationSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DA1D311F7043D50034E892 /* ManagedPendingPeerNotificationSettings.swift */; }; - D0DB7F031F43030C00591D48 /* InstallInteractiveReadMessagesAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DB7F021F43030C00591D48 /* InstallInteractiveReadMessagesAction.swift */; }; - D0DB7F041F43030C00591D48 /* InstallInteractiveReadMessagesAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DB7F021F43030C00591D48 /* InstallInteractiveReadMessagesAction.swift */; }; - D0DC354E1DE368F7000195EB /* RequestChatContextResults.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DC354D1DE368F7000195EB /* RequestChatContextResults.swift */; }; - D0DC35501DE36900000195EB /* ChatContextResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DC354F1DE36900000195EB /* ChatContextResult.swift */; }; - D0DC35511DE36908000195EB /* RequestChatContextResults.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DC354D1DE368F7000195EB /* RequestChatContextResults.swift */; }; - D0DC35521DE36908000195EB /* ChatContextResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DC354F1DE36900000195EB /* ChatContextResult.swift */; }; - D0DF0C8A1D819C7E008AEB01 /* JoinChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DF0C891D819C7E008AEB01 /* JoinChannel.swift */; }; - D0DF0C911D81A857008AEB01 /* ImageRepresentationsUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DF0C901D81A857008AEB01 /* ImageRepresentationsUtils.swift */; }; - D0DF0C931D81AD09008AEB01 /* MessageUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DF0C921D81AD09008AEB01 /* MessageUtils.swift */; }; - D0DF0CA81D82BF32008AEB01 /* PeerParticipants.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DF0CA71D82BF32008AEB01 /* PeerParticipants.swift */; }; - D0DFD5DF1FCDBCFD0039B3B1 /* CachedSentMediaReferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DFD5DE1FCDBCFD0039B3B1 /* CachedSentMediaReferences.swift */; }; - D0DFD5E01FCDBCFD0039B3B1 /* CachedSentMediaReferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DFD5DE1FCDBCFD0039B3B1 /* CachedSentMediaReferences.swift */; }; - D0E23DD51E8042F500B9B6D2 /* FeaturedStickerPack.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E23DD41E8042F500B9B6D2 /* FeaturedStickerPack.swift */; }; - D0E23DD61E8042F500B9B6D2 /* FeaturedStickerPack.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E23DD41E8042F500B9B6D2 /* FeaturedStickerPack.swift */; }; - D0E23DDA1E806F7700B9B6D2 /* ManagedSynchronizeMarkFeaturedStickerPacksAsSeenOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E23DD91E806F7700B9B6D2 /* ManagedSynchronizeMarkFeaturedStickerPacksAsSeenOperations.swift */; }; - D0E23DDB1E806F7700B9B6D2 /* ManagedSynchronizeMarkFeaturedStickerPacksAsSeenOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E23DD91E806F7700B9B6D2 /* ManagedSynchronizeMarkFeaturedStickerPacksAsSeenOperations.swift */; }; - D0E23DDF1E8082A400B9B6D2 /* ArchivedStickerPacks.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E23DDE1E8082A400B9B6D2 /* ArchivedStickerPacks.swift */; }; - D0E23DE01E8082A400B9B6D2 /* ArchivedStickerPacks.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E23DDE1E8082A400B9B6D2 /* ArchivedStickerPacks.swift */; }; - D0E305A71E5B5CBE00D7A3A2 /* PeerAdmins.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E305A61E5B5CBE00D7A3A2 /* PeerAdmins.swift */; }; - D0E305A81E5B5CBE00D7A3A2 /* PeerAdmins.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E305A61E5B5CBE00D7A3A2 /* PeerAdmins.swift */; }; - D0E305AA1E5BA02D00D7A3A2 /* ChannelBlacklist.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E305A91E5BA02D00D7A3A2 /* ChannelBlacklist.swift */; }; - D0E305AB1E5BA02D00D7A3A2 /* ChannelBlacklist.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E305A91E5BA02D00D7A3A2 /* ChannelBlacklist.swift */; }; - D0E35A0E1DE4953E00BC6096 /* FetchHttpResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E35A0D1DE4953E00BC6096 /* FetchHttpResource.swift */; }; - D0E35A101DE49E1C00BC6096 /* OutgoingMessageWithChatContextResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E35A0F1DE49E1C00BC6096 /* OutgoingMessageWithChatContextResult.swift */; }; - D0E35A121DE4A25E00BC6096 /* OutgoingChatContextResultMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E35A111DE4A25E00BC6096 /* OutgoingChatContextResultMessageAttribute.swift */; }; - D0E35A131DE4C69100BC6096 /* OutgoingChatContextResultMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E35A111DE4A25E00BC6096 /* OutgoingChatContextResultMessageAttribute.swift */; }; - D0E35A141DE4C69C00BC6096 /* FetchHttpResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E35A0D1DE4953E00BC6096 /* FetchHttpResource.swift */; }; - D0E35A151DE4C6A200BC6096 /* OutgoingMessageWithChatContextResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E35A0F1DE49E1C00BC6096 /* OutgoingMessageWithChatContextResult.swift */; }; - D0E412D7206A866B00BEE4A2 /* UploadSecureIdFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412D6206A866B00BEE4A2 /* UploadSecureIdFile.swift */; }; - D0E412D8206A866B00BEE4A2 /* UploadSecureIdFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412D6206A866B00BEE4A2 /* UploadSecureIdFile.swift */; }; - D0E412DC206A99AE00BEE4A2 /* SecureIdValueAccessContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412DB206A99AE00BEE4A2 /* SecureIdValueAccessContext.swift */; }; - D0E412DD206A99AE00BEE4A2 /* SecureIdValueAccessContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412DB206A99AE00BEE4A2 /* SecureIdValueAccessContext.swift */; }; - D0E412E1206AB24700BEE4A2 /* SecureFileMediaResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412E0206AB24700BEE4A2 /* SecureFileMediaResource.swift */; }; - D0E412E2206AB24700BEE4A2 /* SecureFileMediaResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412E0206AB24700BEE4A2 /* SecureFileMediaResource.swift */; }; - D0E412E7206ABC7500BEE4A2 /* EncryptedMediaResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412E6206ABC7500BEE4A2 /* EncryptedMediaResource.swift */; }; - D0E412E8206ABC7500BEE4A2 /* EncryptedMediaResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412E6206ABC7500BEE4A2 /* EncryptedMediaResource.swift */; }; - D0E412EA206AD18E00BEE4A2 /* DecryptedResourceData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412E9206AD18E00BEE4A2 /* DecryptedResourceData.swift */; }; - D0E412EB206AD18E00BEE4A2 /* DecryptedResourceData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412E9206AD18E00BEE4A2 /* DecryptedResourceData.swift */; }; - D0E412EE206AF65500BEE4A2 /* GrantSecureIdAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412ED206AF65500BEE4A2 /* GrantSecureIdAccess.swift */; }; - D0E412EF206AF65500BEE4A2 /* GrantSecureIdAccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412ED206AF65500BEE4A2 /* GrantSecureIdAccess.swift */; }; - D0E412F1206B9BB700BEE4A2 /* SecureIdPassportValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412F0206B9BB700BEE4A2 /* SecureIdPassportValue.swift */; }; - D0E412F2206B9BB700BEE4A2 /* SecureIdPassportValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412F0206B9BB700BEE4A2 /* SecureIdPassportValue.swift */; }; - D0E412F4206B9BDC00BEE4A2 /* SecureIdVerificationDocumentReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412F3206B9BDC00BEE4A2 /* SecureIdVerificationDocumentReference.swift */; }; - D0E412F5206B9BDC00BEE4A2 /* SecureIdVerificationDocumentReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412F3206B9BDC00BEE4A2 /* SecureIdVerificationDocumentReference.swift */; }; - D0E41301206B9E6E00BEE4A2 /* SecureIdAddressValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E41300206B9E6E00BEE4A2 /* SecureIdAddressValue.swift */; }; - D0E41302206B9E6E00BEE4A2 /* SecureIdAddressValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E41300206B9E6E00BEE4A2 /* SecureIdAddressValue.swift */; }; - D0E6521F1E3A364A004EEA91 /* UpdateAccountPeerName.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E6521E1E3A364A004EEA91 /* UpdateAccountPeerName.swift */; }; - D0E652201E3A364A004EEA91 /* UpdateAccountPeerName.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E6521E1E3A364A004EEA91 /* UpdateAccountPeerName.swift */; }; - D0E817492010E7E300B82BBB /* ChannelAdminEventLogContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E817482010E7E300B82BBB /* ChannelAdminEventLogContext.swift */; }; - D0E8174A2010E7E300B82BBB /* ChannelAdminEventLogContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E817482010E7E300B82BBB /* ChannelAdminEventLogContext.swift */; }; - D0E8B8B32044706300605593 /* ForwardGame.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E8B8B22044706300605593 /* ForwardGame.swift */; }; - D0E8B8B42044706300605593 /* ForwardGame.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E8B8B22044706300605593 /* ForwardGame.swift */; }; - D0EA188220D3D2B1001AEE19 /* RemoteStorageConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EA188120D3D2B1001AEE19 /* RemoteStorageConfiguration.swift */; }; - D0EC559A2101ED0800D1992C /* DeleteMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EC55992101ED0800D1992C /* DeleteMessages.swift */; }; - D0EC559B2101ED0800D1992C /* DeleteMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EC55992101ED0800D1992C /* DeleteMessages.swift */; }; - D0EE7FC120986BF400981319 /* SecureIdInternalPassportValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EE7FC020986BF400981319 /* SecureIdInternalPassportValue.swift */; }; - D0EE7FC220986BF400981319 /* SecureIdInternalPassportValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EE7FC020986BF400981319 /* SecureIdInternalPassportValue.swift */; }; - D0EE7FC420986C5300981319 /* SecureIdPassportRegistrationValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EE7FC320986C5300981319 /* SecureIdPassportRegistrationValue.swift */; }; - D0EE7FC520986C5300981319 /* SecureIdPassportRegistrationValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EE7FC320986C5300981319 /* SecureIdPassportRegistrationValue.swift */; }; - D0EE7FC72098853100981319 /* SecureIdTemporaryRegistrationValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EE7FC62098853100981319 /* SecureIdTemporaryRegistrationValue.swift */; }; - D0EE7FC82098853100981319 /* SecureIdTemporaryRegistrationValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EE7FC62098853100981319 /* SecureIdTemporaryRegistrationValue.swift */; }; - D0F02CE51E9926C40065DEE2 /* ManagedConfigurationUpdates.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F02CE41E9926C40065DEE2 /* ManagedConfigurationUpdates.swift */; }; - D0F02CE61E9926C50065DEE2 /* ManagedConfigurationUpdates.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F02CE41E9926C40065DEE2 /* ManagedConfigurationUpdates.swift */; }; - D0F19F6620E6620D00EEC860 /* MultiplexedRequestManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F19F6520E6620D00EEC860 /* MultiplexedRequestManager.swift */; }; - D0F19F6720E6621000EEC860 /* MultiplexedRequestManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F19F6520E6620D00EEC860 /* MultiplexedRequestManager.swift */; }; - D0F3A89F1E82C65400B4C64C /* SynchronizeChatInputStateOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A89E1E82C65400B4C64C /* SynchronizeChatInputStateOperation.swift */; }; - D0F3A8A01E82C65400B4C64C /* SynchronizeChatInputStateOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A89E1E82C65400B4C64C /* SynchronizeChatInputStateOperation.swift */; }; - D0F3A8A21E82C65E00B4C64C /* ManagedSynchronizeChatInputStateOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A8A11E82C65E00B4C64C /* ManagedSynchronizeChatInputStateOperations.swift */; }; - D0F3A8A31E82C65E00B4C64C /* ManagedSynchronizeChatInputStateOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A8A11E82C65E00B4C64C /* ManagedSynchronizeChatInputStateOperations.swift */; }; - D0F3A8A51E82C94C00B4C64C /* SynchronizeableChatInputState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A8A41E82C94C00B4C64C /* SynchronizeableChatInputState.swift */; }; - D0F3A8A61E82C94C00B4C64C /* SynchronizeableChatInputState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A8A41E82C94C00B4C64C /* SynchronizeableChatInputState.swift */; }; - D0F3A8A81E82CD7D00B4C64C /* UpdatePeerChatInterfaceState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A8A71E82CD7D00B4C64C /* UpdatePeerChatInterfaceState.swift */; }; - D0F3A8A91E82CD7D00B4C64C /* UpdatePeerChatInterfaceState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A8A71E82CD7D00B4C64C /* UpdatePeerChatInterfaceState.swift */; }; - D0F3CC791DDE2859008148FA /* SearchMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0D711D631ABA00955575 /* SearchMessages.swift */; }; - D0F3CC7A1DDE2859008148FA /* RequestMessageActionCallback.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01AC91C1DD5DA5E00E8160F /* RequestMessageActionCallback.swift */; }; - D0F3CC7B1DDE2859008148FA /* RequestEditMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01AC9201DD5E7E500E8160F /* RequestEditMessage.swift */; }; - D0F3CC7D1DDE289E008148FA /* ResolvePeerByName.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3CC7C1DDE289E008148FA /* ResolvePeerByName.swift */; }; - D0F53BE91E784A4800117362 /* ChangeAccountPhoneNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F53BE81E784A4800117362 /* ChangeAccountPhoneNumber.swift */; }; - D0F53BEA1E784A4800117362 /* ChangeAccountPhoneNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F53BE81E784A4800117362 /* ChangeAccountPhoneNumber.swift */; }; - D0F760D822202FE20074F7E5 /* ChannelStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F760D722202FE20074F7E5 /* ChannelStats.swift */; }; - D0F760D922202FE20074F7E5 /* ChannelStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F760D722202FE20074F7E5 /* ChannelStats.swift */; }; - D0F7AB2C1DCE889D009AD9A1 /* EditedMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F7AB2B1DCE889D009AD9A1 /* EditedMessageAttribute.swift */; }; - D0F7AB2D1DCE889D009AD9A1 /* EditedMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F7AB2B1DCE889D009AD9A1 /* EditedMessageAttribute.swift */; }; - D0F7AB2F1DCF507E009AD9A1 /* ReplyMarkupMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F7AB2E1DCF507E009AD9A1 /* ReplyMarkupMessageAttribute.swift */; }; - D0F7AB301DCF507E009AD9A1 /* ReplyMarkupMessageAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F7AB2E1DCF507E009AD9A1 /* ReplyMarkupMessageAttribute.swift */; }; - D0F7B1E31E045C7B007EB8A5 /* RichText.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07827CA1E02F5B200071108 /* RichText.swift */; }; - D0F7B1E41E045C7B007EB8A5 /* InstantPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07827C81E02F59C00071108 /* InstantPage.swift */; }; - D0F7B1E71E045C87007EB8A5 /* JoinChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DF0C891D819C7E008AEB01 /* JoinChannel.swift */; }; - D0F7B1E81E045C87007EB8A5 /* PeerParticipants.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DF0CA71D82BF32008AEB01 /* PeerParticipants.swift */; }; - D0F7B1E91E045C87007EB8A5 /* PeerCommands.swift in Sources */ = {isa = PBXBuildFile; fileRef = D099EA1B1DE72867001AF5A8 /* PeerCommands.swift */; }; - D0F7B1EA1E045C87007EB8A5 /* ChangePeerNotificationSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B843961DA7FBBC005F29E1 /* ChangePeerNotificationSettings.swift */; }; - D0F7B1EB1E045C87007EB8A5 /* ResolvePeerByName.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3CC7C1DDE289E008148FA /* ResolvePeerByName.swift */; }; - D0F7B1EC1E045C87007EB8A5 /* SearchPeers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07827BA1E00451F00071108 /* SearchPeers.swift */; }; - D0F8C3A02017AF2700236FC5 /* GlobalTelegramCoreConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F8C39F2017AF2700236FC5 /* GlobalTelegramCoreConfiguration.swift */; }; - D0F8C3A12017AF2700236FC5 /* GlobalTelegramCoreConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F8C39F2017AF2700236FC5 /* GlobalTelegramCoreConfiguration.swift */; }; - D0FA08BB2046B37900DD23FC /* ContentPrivacySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA08BA2046B37900DD23FC /* ContentPrivacySettings.swift */; }; - D0FA08BC2046B37900DD23FC /* ContentPrivacySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA08BA2046B37900DD23FC /* ContentPrivacySettings.swift */; }; - D0FA0ABD1E76C908005BB9B7 /* TwoStepVerification.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA0ABC1E76C908005BB9B7 /* TwoStepVerification.swift */; }; - D0FA35051EA6135D00E56FFA /* CacheStorageSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA35041EA6135D00E56FFA /* CacheStorageSettings.swift */; }; - D0FA35061EA6135D00E56FFA /* CacheStorageSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA35041EA6135D00E56FFA /* CacheStorageSettings.swift */; }; - D0FA35081EA632E400E56FFA /* CollectCacheUsageStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA35071EA632E400E56FFA /* CollectCacheUsageStats.swift */; }; - D0FA35091EA632E400E56FFA /* CollectCacheUsageStats.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA35071EA632E400E56FFA /* CollectCacheUsageStats.swift */; }; - D0FA8B981E1E955C001E855B /* SecretChatOutgoingOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8B971E1E955C001E855B /* SecretChatOutgoingOperation.swift */; }; - D0FA8B991E1E955C001E855B /* SecretChatOutgoingOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8B971E1E955C001E855B /* SecretChatOutgoingOperation.swift */; }; - D0FA8B9E1E1F973B001E855B /* SecretChatIncomingEncryptedOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8B9D1E1F973B001E855B /* SecretChatIncomingEncryptedOperation.swift */; }; - D0FA8B9F1E1F973B001E855B /* SecretChatIncomingEncryptedOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8B9D1E1F973B001E855B /* SecretChatIncomingEncryptedOperation.swift */; }; - D0FA8BA11E1F99E1001E855B /* SecretChatFileReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BA01E1F99E1001E855B /* SecretChatFileReference.swift */; }; - D0FA8BA21E1F99E1001E855B /* SecretChatFileReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BA01E1F99E1001E855B /* SecretChatFileReference.swift */; }; - D0FA8BA41E1FA341001E855B /* SecretChatKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BA31E1FA341001E855B /* SecretChatKeychain.swift */; }; - D0FA8BA51E1FA341001E855B /* SecretChatKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BA31E1FA341001E855B /* SecretChatKeychain.swift */; }; - D0FA8BA71E1FA6DF001E855B /* TelegramSecretChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BA61E1FA6DF001E855B /* TelegramSecretChat.swift */; }; - D0FA8BA81E1FA6DF001E855B /* TelegramSecretChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BA61E1FA6DF001E855B /* TelegramSecretChat.swift */; }; - D0FA8BAA1E1FB76E001E855B /* ManagedSecretChatOutgoingOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BA91E1FB76E001E855B /* ManagedSecretChatOutgoingOperations.swift */; }; - D0FA8BAB1E1FB76E001E855B /* ManagedSecretChatOutgoingOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BA91E1FB76E001E855B /* ManagedSecretChatOutgoingOperations.swift */; }; - D0FA8BAD1E1FD6E2001E855B /* MemoryBufferExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BAC1E1FD6E2001E855B /* MemoryBufferExtensions.swift */; }; - D0FA8BAE1E1FD6E2001E855B /* MemoryBufferExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BAC1E1FD6E2001E855B /* MemoryBufferExtensions.swift */; }; - D0FA8BB01E1FEC7E001E855B /* SecretChatEncryptionConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BAF1E1FEC7E001E855B /* SecretChatEncryptionConfig.swift */; }; - D0FA8BB11E1FEC7E001E855B /* SecretChatEncryptionConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BAF1E1FEC7E001E855B /* SecretChatEncryptionConfig.swift */; }; - D0FA8BB31E201B02001E855B /* ProcessSecretChatIncomingEncryptedOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BB21E201B02001E855B /* ProcessSecretChatIncomingEncryptedOperations.swift */; }; - D0FA8BB41E201B02001E855B /* ProcessSecretChatIncomingEncryptedOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BB21E201B02001E855B /* ProcessSecretChatIncomingEncryptedOperations.swift */; }; - D0FA8BB91E2240B4001E855B /* SecretChatIncomingDecryptedOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BB81E2240B4001E855B /* SecretChatIncomingDecryptedOperation.swift */; }; - D0FA8BBA1E2240B4001E855B /* SecretChatIncomingDecryptedOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA8BB81E2240B4001E855B /* SecretChatIncomingDecryptedOperation.swift */; }; - D0FC195B2020D1CA00FEDBB2 /* PeerGroupMessageStateVersionAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FC195A2020D1CA00FEDBB2 /* PeerGroupMessageStateVersionAttribute.swift */; }; - D0FC195C2020D1CA00FEDBB2 /* PeerGroupMessageStateVersionAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FC195A2020D1CA00FEDBB2 /* PeerGroupMessageStateVersionAttribute.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - D09D8C0C1D4FAB1D0081DBEC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D09D8BF81D4FAB1D0081DBEC /* Project object */; - proxyType = 1; - remoteGlobalIDString = D09D8C001D4FAB1D0081DBEC; - remoteInfo = TelegramCore; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 0900555521E4A96D0030924C /* Wallpaper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Wallpaper.swift; sourceTree = ""; }; - 09028385218E5DBB0067EFBD /* ManagedVoipConfigurationUpdates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedVoipConfigurationUpdates.swift; sourceTree = ""; }; - 090E778222A9862100CD99F5 /* ChannelOwnershipTransfer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelOwnershipTransfer.swift; sourceTree = ""; }; - 090E778F22AAABC600CD99F5 /* PeersNearby.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeersNearby.swift; sourceTree = ""; }; - 0925903622F0D02D003D6283 /* ManagedAnimatedEmojiUpdates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedAnimatedEmojiUpdates.swift; sourceTree = ""; }; - 093857A62243D87800EB6A54 /* ManagedSynchronizeEmojiKeywordsOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedSynchronizeEmojiKeywordsOperations.swift; sourceTree = ""; }; - 093857A72243D87900EB6A54 /* SynchronizeEmojiKeywordsOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronizeEmojiKeywordsOperation.swift; sourceTree = ""; }; - 093857AA2243D88C00EB6A54 /* EmojiKeywords.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EmojiKeywords.swift; sourceTree = ""; }; - 0962E66621B59BAA00245FD9 /* ManagedAppConfigurationUpdates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedAppConfigurationUpdates.swift; sourceTree = ""; }; - 0962E66821B5A11100245FD9 /* SynchronizeAppLogEventsOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SynchronizeAppLogEventsOperation.swift; sourceTree = ""; }; - 0962E66A21B5A41C00245FD9 /* ManagedSynchronizeAppLogEventsOperations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedSynchronizeAppLogEventsOperations.swift; sourceTree = ""; }; - 0962E66C21B5C56F00245FD9 /* JSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSON.swift; sourceTree = ""; }; - 0962E66E21B6147600245FD9 /* AppConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppConfiguration.swift; sourceTree = ""; }; - 0962E67421B6437600245FD9 /* SplitTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitTest.swift; sourceTree = ""; }; - 0962E68021BAA20E00245FD9 /* SearchBotsConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchBotsConfiguration.swift; sourceTree = ""; }; - 09B4A9B3230FB70B005C2E08 /* Themes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Themes.swift; sourceTree = ""; }; - 09B4A9B5230FBB2B005C2E08 /* Theme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = ""; }; - 09EC0DE822C6825D00E7185B /* AppUpdate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdate.swift; sourceTree = ""; }; - 09EDAD372213120C0012A50B /* AutodownloadSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutodownloadSettings.swift; sourceTree = ""; }; - 09EDAD3922131D010012A50B /* ManagedAutodownloadSettingsUpdates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedAutodownloadSettingsUpdates.swift; sourceTree = ""; }; - 09FC986A22FD882200915E37 /* OutgoingScheduleInfoMessageAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OutgoingScheduleInfoMessageAttribute.swift; sourceTree = ""; }; - 09FC986C22FD99D400915E37 /* ScheduledMessages.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScheduledMessages.swift; sourceTree = ""; }; - 9F06830F21A40DEC001D8EDB /* NotificationExceptionsList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationExceptionsList.swift; sourceTree = ""; }; - 9FC8ADAA206BBFF10094F7B4 /* RecentWebSessions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentWebSessions.swift; sourceTree = ""; }; - C205FEA71EB3B75900455808 /* ExportMessageLink.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportMessageLink.swift; sourceTree = ""; }; - C210DD611FBDB90800F673D8 /* SourceReferenceMessageAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SourceReferenceMessageAttribute.swift; sourceTree = ""; }; - C22EE61A1E67418000334C38 /* ToggleChannelSignatures.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ToggleChannelSignatures.swift; sourceTree = ""; }; - C230BEB51EE9A3760029586C /* ChannelAdminEventLogs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChannelAdminEventLogs.swift; sourceTree = ""; }; - C2366C821E4F3EAA0097CCFF /* GroupReturnAndLeft.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupReturnAndLeft.swift; sourceTree = ""; }; - C2366C851E4F403C0097CCFF /* AddressNames.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddressNames.swift; sourceTree = ""; }; - C2366C881E4F40480097CCFF /* SupportPeerId.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SupportPeerId.swift; sourceTree = ""; }; - C239BE961E62EE1E00C2C453 /* LoadMessagesIfNecessary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadMessagesIfNecessary.swift; sourceTree = ""; }; - C239BE9B1E630CA700C2C453 /* UpdatePinnedMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdatePinnedMessage.swift; sourceTree = ""; }; - C23BC3861E9BE3CA00D79F92 /* ImportContact.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImportContact.swift; sourceTree = ""; }; - C251D7421E65E50500283EDE /* StickerSetInstallation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerSetInstallation.swift; sourceTree = ""; }; - C28725411EF967E700613564 /* NotificationInfoMessageAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationInfoMessageAttribute.swift; sourceTree = ""; }; - C28D3CEF20D3DA900027F4D6 /* DeepLinkInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepLinkInfo.swift; sourceTree = ""; }; - C29340F21F5080FA0074991E /* UpdateGroupSpecificStickerset.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateGroupSpecificStickerset.swift; sourceTree = ""; }; - C2E064671ECEEF0A00387BB8 /* TelegramMediaInvoice.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramMediaInvoice.swift; sourceTree = ""; }; - C2E0646C1ECF171D00387BB8 /* TelegramMediaWebDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramMediaWebDocument.swift; sourceTree = ""; }; - C2F4ED1C1EC60064005F2696 /* RateCall.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RateCall.swift; sourceTree = ""; }; - C2FD33E01E680E9E008D13D4 /* RequestUserPhotos.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestUserPhotos.swift; sourceTree = ""; }; - C2FD33E31E687BF1008D13D4 /* PeerPhotoUpdater.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerPhotoUpdater.swift; sourceTree = ""; }; - C2FD33EA1E696C78008D13D4 /* GroupsInCommon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupsInCommon.swift; sourceTree = ""; }; - D003702A1DA42586004308D3 /* PhoneNumber.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhoneNumber.swift; sourceTree = ""; }; - D00422D221677F4500719B67 /* ManagedAccountPresence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedAccountPresence.swift; sourceTree = ""; }; - D00580AD21E2A08900CB7CD3 /* AccountEnvironmentAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountEnvironmentAttribute.swift; sourceTree = ""; }; - D00BDA181EE593D600C64C5E /* TelegramChannelAdminRights.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramChannelAdminRights.swift; sourceTree = ""; }; - D00BDA1B1EE5952A00C64C5E /* TelegramChannelBannedRights.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramChannelBannedRights.swift; sourceTree = ""; }; - D00C7CCB1E3620C30080C3D5 /* CachedChannelParticipants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CachedChannelParticipants.swift; sourceTree = ""; }; - D00C7CDF1E3785700080C3D5 /* MarkMessageContentAsConsumedInteractively.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MarkMessageContentAsConsumedInteractively.swift; sourceTree = ""; }; - D00C7CEA1E37A8540080C3D5 /* SetSecretChatMessageAutoremoveTimeoutInteractively.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetSecretChatMessageAutoremoveTimeoutInteractively.swift; sourceTree = ""; }; - D00D34381E6EC9520057B307 /* TeleramMediaUnsupported.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TeleramMediaUnsupported.swift; sourceTree = ""; }; - D00D343B1E6EC9770057B307 /* TelegramMediaGame.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramMediaGame.swift; sourceTree = ""; }; - D00D343E1E6ED6E50057B307 /* ConsumableContentMessageAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConsumableContentMessageAttribute.swift; sourceTree = ""; }; - D00D34411E6EDD2E0057B307 /* ManagedSynchronizeConsumeMessageContentsOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedSynchronizeConsumeMessageContentsOperations.swift; sourceTree = ""; }; - D00D34441E6EDD420057B307 /* SynchronizeConsumeMessageContentsOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronizeConsumeMessageContentsOperation.swift; sourceTree = ""; }; - D00D97C61E32901700E5C2B6 /* PeerInputActivity.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerInputActivity.swift; sourceTree = ""; }; - D00D97C91E32917C00E5C2B6 /* PeerInputActivityManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerInputActivityManager.swift; sourceTree = ""; }; - D00DBBD61E64E41100DB5485 /* CreateSecretChat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateSecretChat.swift; sourceTree = ""; }; - D00DBBD91E64E67E00DB5485 /* UpdateSecretChat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateSecretChat.swift; sourceTree = ""; }; - D0119CAF20CA9EA800895300 /* MarkAllChatsAsRead.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkAllChatsAsRead.swift; sourceTree = ""; }; - D0136308208F3B0900EB3653 /* SecureIdValueContentError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdValueContentError.swift; sourceTree = ""; }; - D015E00D225CA61100CB9E8A /* FindChannelById.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindChannelById.swift; sourceTree = ""; }; - D01749581E1092BC0057C89A /* RequestStartBot.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestStartBot.swift; sourceTree = ""; }; - D017495D1E118F790057C89A /* AccountStateManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStateManager.swift; sourceTree = ""; }; - D017495F1E118FC30057C89A /* AccountIntermediateState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountIntermediateState.swift; sourceTree = ""; }; - D0177B7A1DF8A16C00A5083A /* SecretChatState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretChatState.swift; sourceTree = ""; }; - D01843A72190C28100278AFF /* ConfirmTwoStepRecoveryEmail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfirmTwoStepRecoveryEmail.swift; sourceTree = ""; }; - D018D3361E648ACF00C5E089 /* ChannelCreation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChannelCreation.swift; sourceTree = ""; }; - D018EE0120458E1E00CBB130 /* SecretChatLayerNegotiation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretChatLayerNegotiation.swift; sourceTree = ""; }; - D018EE042045E95000CBB130 /* CheckPeerChatServiceActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPeerChatServiceActions.swift; sourceTree = ""; }; - D019B1CB1E2E3B6A00F80DB3 /* SecretChatRekeySession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretChatRekeySession.swift; sourceTree = ""; }; - D01A21A51F38CDC700DDA104 /* SynchronizeSavedStickersOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronizeSavedStickersOperation.swift; sourceTree = ""; }; - D01A21A81F38CDDC00DDA104 /* ManagedSynchronizeSavedStickersOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedSynchronizeSavedStickersOperations.swift; sourceTree = ""; }; - D01A21AB1F38D10E00DDA104 /* SavedStickerItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SavedStickerItem.swift; sourceTree = ""; }; - D01AC91C1DD5DA5E00E8160F /* RequestMessageActionCallback.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestMessageActionCallback.swift; sourceTree = ""; }; - D01AC9201DD5E7E500E8160F /* RequestEditMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestEditMessage.swift; sourceTree = ""; }; - D01AC9221DD5E9A200E8160F /* ApplyUpdateMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApplyUpdateMessage.swift; sourceTree = ""; }; - D01B264823324CF800A6448B /* Wallets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Wallets.swift; sourceTree = ""; }; - D01B27A11E394D8B0022A4C0 /* PrivacySettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivacySettings.swift; sourceTree = ""; }; - D01C06B61FBBA269001561AB /* CanSendMessagesToPeer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CanSendMessagesToPeer.swift; sourceTree = ""; }; - D01C7ED21EF5DF83008305F1 /* LimitsConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LimitsConfiguration.swift; sourceTree = ""; }; - D01C7ED51EF5E468008305F1 /* ProxySettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProxySettings.swift; sourceTree = ""; }; - D01C7F031EFC1C49008305F1 /* DeviceContact.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceContact.swift; sourceTree = ""; }; - D01D6BF81E42A713006151C6 /* SearchStickers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchStickers.swift; sourceTree = ""; }; - D0208AF32306E92B00A23503 /* libphonenumbermac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = libphonenumbermac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D021E0DE1DB539FC00C6B04F /* StickerPack.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPack.swift; sourceTree = ""; }; - D021E0E11DB5401A00C6B04F /* StickerManagement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerManagement.swift; sourceTree = ""; }; - D0223A971EA564BD00211D94 /* MediaResourceNetworkStatsTag.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaResourceNetworkStatsTag.swift; sourceTree = ""; }; - D0223A9A1EA5654D00211D94 /* TelegramMediaResource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramMediaResource.swift; sourceTree = ""; }; - D02395D51F8D09A50070F5C2 /* ChannelHistoryAvailabilitySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelHistoryAvailabilitySettings.swift; sourceTree = ""; }; - D023E67721540624008C27D1 /* UpdateMessageMedia.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateMessageMedia.swift; sourceTree = ""; }; - D026099D20C695AF006C34AC /* Wallpapers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Wallpapers.swift; sourceTree = ""; }; - D02609BB20C6EB97006C34AC /* Crypto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Crypto.h; sourceTree = ""; }; - D02609BE20C6EC08006C34AC /* Crypto.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Crypto.m; sourceTree = ""; }; - D02ABC7A1E30058F00CAE539 /* DeleteMessagesInteractively.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeleteMessagesInteractively.swift; sourceTree = ""; }; - D02ABC7D1E3109F000CAE539 /* CloudChatRemoveMessagesOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CloudChatRemoveMessagesOperation.swift; sourceTree = ""; }; - D02ABC801E310E5D00CAE539 /* ManagedCloudChatRemoveMessagesOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedCloudChatRemoveMessagesOperations.swift; sourceTree = ""; }; - D02B198F21FB1D520094A764 /* RegisterNotificationToken.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterNotificationToken.swift; sourceTree = ""; }; - D02D60A6206BA5F900FEFE1E /* SecureIdValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdValue.swift; sourceTree = ""; }; - D02D60AA206BA64100FEFE1E /* VerifySecureIdValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifySecureIdValue.swift; sourceTree = ""; }; - D02DADC02139A1FC00116225 /* ContactSyncManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactSyncManager.swift; sourceTree = ""; }; - D03121011DA57E93006A2A60 /* TelegramPeerNotificationSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramPeerNotificationSettings.swift; sourceTree = ""; }; - D0329EA122FC5A7C00F9F071 /* MessageReactions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageReactions.swift; sourceTree = ""; }; - D0329EA422FC5A9600F9F071 /* ReactionsMessageAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionsMessageAttribute.swift; sourceTree = ""; }; - D032F5BB20EF84FD00037B6C /* FetchedMediaResource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchedMediaResource.swift; sourceTree = ""; }; - D033873F223BD48B007A2CE4 /* ContactsSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactsSettings.swift; sourceTree = ""; }; - D0338742223BD532007A2CE4 /* InitializeAccountAfterLogin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitializeAccountAfterLogin.swift; sourceTree = ""; }; - D033FEAF1E61EB0200644997 /* PeerContactSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerContactSettings.swift; sourceTree = ""; }; - D033FEB21E61F3C000644997 /* ReportPeer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReportPeer.swift; sourceTree = ""; }; - D033FEB51E61F3F900644997 /* BlockedPeers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlockedPeers.swift; sourceTree = ""; }; - D035732E22B5C24F00F0920D /* TelegramApi.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramApi.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0380DB9204EF306000414AB /* MessageMediaPreuploadManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageMediaPreuploadManager.swift; sourceTree = ""; }; - D03B0CB81D62233400955575 /* Either.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Either.swift; sourceTree = ""; }; - D03B0CBC1D62234300955575 /* Regex.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Regex.swift; sourceTree = ""; }; - D03B0CBE1D62234A00955575 /* Log.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Log.swift; sourceTree = ""; }; - D03B0CC01D62235000955575 /* StringFormat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringFormat.swift; sourceTree = ""; }; - D03B0CCD1D62239600955575 /* PhoneNumbers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhoneNumbers.swift; sourceTree = ""; }; - D03B0CD21D62244300955575 /* Namespaces.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Namespaces.swift; sourceTree = ""; }; - D03B0CD41D62245300955575 /* TelegramUser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramUser.swift; sourceTree = ""; }; - D03B0CD51D62245300955575 /* TelegramGroup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramGroup.swift; sourceTree = ""; }; - D03B0CD81D62245B00955575 /* PeerUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerUtils.swift; sourceTree = ""; }; - D03B0CDA1D62245F00955575 /* ApiUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApiUtils.swift; sourceTree = ""; }; - D03B0CDF1D62249100955575 /* StoreMessage_Telegram.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreMessage_Telegram.swift; sourceTree = ""; }; - D03B0CE11D62249B00955575 /* InlineBotMessageAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InlineBotMessageAttribute.swift; sourceTree = ""; }; - D03B0CE31D62249F00955575 /* TextEntitiesMessageAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextEntitiesMessageAttribute.swift; sourceTree = ""; }; - D03B0CE51D6224A700955575 /* ReplyMessageAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReplyMessageAttribute.swift; sourceTree = ""; }; - D03B0CE71D6224AD00955575 /* ViewCountMessageAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewCountMessageAttribute.swift; sourceTree = ""; }; - D03B0CEC1D62250800955575 /* TelegramMediaAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramMediaAction.swift; sourceTree = ""; }; - D03B0CED1D62250800955575 /* TelegramMediaContact.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramMediaContact.swift; sourceTree = ""; }; - D03B0CEE1D62250800955575 /* TelegramMediaFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramMediaFile.swift; sourceTree = ""; }; - D03B0CEF1D62250800955575 /* TelegramMediaImage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramMediaImage.swift; sourceTree = ""; }; - D03B0CF11D62250800955575 /* TelegramMediaMap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramMediaMap.swift; sourceTree = ""; }; - D03B0CF31D62250800955575 /* TelegramMediaWebpage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramMediaWebpage.swift; sourceTree = ""; }; - D03B0CFF1D62255C00955575 /* ChannelState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChannelState.swift; sourceTree = ""; }; - D03B0D001D62255C00955575 /* EnqueueMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnqueueMessage.swift; sourceTree = ""; }; - D03B0D011D62255C00955575 /* Holes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Holes.swift; sourceTree = ""; }; - D03B0D031D62255C00955575 /* AccountStateManagementUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStateManagementUtils.swift; sourceTree = ""; }; - D03B0D041D62255C00955575 /* SynchronizePeerReadState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronizePeerReadState.swift; sourceTree = ""; }; - D03B0D051D62255C00955575 /* UpdateGroup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateGroup.swift; sourceTree = ""; }; - D03B0D061D62255C00955575 /* UpdateMessageService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateMessageService.swift; sourceTree = ""; }; - D03B0D071D62255C00955575 /* UpdatesApiUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdatesApiUtils.swift; sourceTree = ""; }; - D03B0D391D6319E200955575 /* Fetch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Fetch.swift; sourceTree = ""; }; - D03B0D431D6319F900955575 /* CloudFileMediaResource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CloudFileMediaResource.swift; sourceTree = ""; }; - D03B0D561D631A6900955575 /* Download.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Download.swift; sourceTree = ""; }; - D03B0D571D631A6900955575 /* MultipartFetch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultipartFetch.swift; sourceTree = ""; }; - D03B0D581D631A6900955575 /* Network.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Network.swift; sourceTree = ""; }; - D03B0D591D631A6900955575 /* Serialization.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Serialization.swift; sourceTree = ""; }; - D03B0D611D631A8B00955575 /* Account.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; - D03B0D631D631A8B00955575 /* AccountViewTracker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountViewTracker.swift; sourceTree = ""; }; - D03B0D641D631A8B00955575 /* RecentPeers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecentPeers.swift; sourceTree = ""; }; - D03B0D6C1D631AA300955575 /* ContactManagement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactManagement.swift; sourceTree = ""; }; - D03B0D711D631ABA00955575 /* SearchMessages.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchMessages.swift; sourceTree = ""; }; - D03B0E411D631E6600955575 /* NetworkLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkLogging.h; sourceTree = ""; }; - D03B0E421D631E6600955575 /* NetworkLogging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NetworkLogging.m; sourceTree = ""; }; - D03B0E571D631EB900955575 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; - D03B0E591D63215200955575 /* TelegramCore.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = TelegramCore.xcconfig; path = TelegramCore/Config/TelegramCore.xcconfig; sourceTree = ""; }; - D03B0E5D1D6327F600955575 /* SSignalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = SSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D03B0E5F1D6327FF00955575 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - D03B0E611D63281A00955575 /* libavcodec.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavcodec.a; path = "third-party/FFmpeg-iOS/lib/libavcodec.a"; sourceTree = ""; }; - D03B0E621D63281A00955575 /* libavformat.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavformat.a; path = "third-party/FFmpeg-iOS/lib/libavformat.a"; sourceTree = ""; }; - D03B0E631D63281A00955575 /* libavutil.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavutil.a; path = "third-party/FFmpeg-iOS/lib/libavutil.a"; sourceTree = ""; }; - D03B0E641D63281A00955575 /* libswresample.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libswresample.a; path = "third-party/FFmpeg-iOS/lib/libswresample.a"; sourceTree = ""; }; - D03B0E691D63283000955575 /* libwebp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libwebp.a; path = "third-party/libwebp/lib/libwebp.a"; sourceTree = ""; }; - D03B0E6B1D63283C00955575 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; }; - D03C53761DAFF20F004C17B3 /* MultipartUpload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultipartUpload.swift; sourceTree = ""; }; - D03DC90F1F82E344001D584C /* AccountStateReset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountStateReset.swift; sourceTree = ""; }; - D03DC9121F82F89D001D584C /* RegularChatState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegularChatState.swift; sourceTree = ""; }; - D03E3D27230447960049C28B /* RestrictedContentMessageAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestrictedContentMessageAttribute.swift; sourceTree = ""; }; - D03E416B2304D5B30049C28B /* ValidateAddressNameInteractive.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValidateAddressNameInteractive.swift; sourceTree = ""; }; - D03E452C2305C15A0049C28B /* FormatPhoneNumber.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FormatPhoneNumber.h; sourceTree = ""; }; - D03E452D2305C15A0049C28B /* FormatPhoneNumber.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FormatPhoneNumber.m; sourceTree = ""; }; - D03E45D02305D34C0049C28B /* libphonenumber_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = libphonenumber_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D03E45D32305D44A0049C28B /* libphonenumber.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = libphonenumber.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D03E5E0B1E55E02D0029569A /* LoggedOutAccountAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoggedOutAccountAttribute.swift; sourceTree = ""; }; - D041E3F41E535464008C24B4 /* AddPeerMember.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddPeerMember.swift; sourceTree = ""; }; - D041E3F71E535A88008C24B4 /* RemovePeerMember.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RemovePeerMember.swift; sourceTree = ""; }; - D042C6821E8D9DF800C863B0 /* Unixtime.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Unixtime.swift; sourceTree = ""; }; - D0439B5C228ECB270067E026 /* RequestPhoneNumber.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestPhoneNumber.swift; sourceTree = ""; }; - D0439B5F228EDE430067E026 /* ContentRequiresValidationMessageAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentRequiresValidationMessageAttribute.swift; sourceTree = ""; }; - D0448C8D1E22993C005A61A7 /* ProcessSecretChatIncomingDecryptedOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProcessSecretChatIncomingDecryptedOperations.swift; sourceTree = ""; }; - D0448C901E251F96005A61A7 /* SecretChatEncryption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretChatEncryption.swift; sourceTree = ""; }; - D0448C9E1E27F5EB005A61A7 /* Random.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Random.swift; sourceTree = ""; }; - D0448CA11E291B14005A61A7 /* FetchSecretFileResource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchSecretFileResource.swift; sourceTree = ""; }; - D0448CA41E29215A005A61A7 /* MediaResourceApiUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaResourceApiUtils.swift; sourceTree = ""; }; - D04554A521B43440007A6DD9 /* CancelAccountReset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CancelAccountReset.swift; sourceTree = ""; }; - D0458C871E69B4AB00FB34C1 /* OutgoingContentInfoMessageAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OutgoingContentInfoMessageAttribute.swift; sourceTree = ""; }; - D0467D0A20D7F1E60055C28F /* SynchronizeMarkAllUnseenPersonalMessagesOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SynchronizeMarkAllUnseenPersonalMessagesOperation.swift; sourceTree = ""; }; - D0467D1420D7F2C90055C28F /* ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift; sourceTree = ""; }; - D048B4AB20A5DA4300C79D31 /* ManagedProxyInfoUpdates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedProxyInfoUpdates.swift; sourceTree = ""; }; - D049EAD41E43D98500A2CD3A /* RecentMediaItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecentMediaItem.swift; sourceTree = ""; }; - D049EAD71E43DAD200A2CD3A /* ManagedRecentStickers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedRecentStickers.swift; sourceTree = ""; }; - D049EAE71E44B67100A2CD3A /* RecentPeerItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecentPeerItem.swift; sourceTree = ""; }; - D049EAEA1E44B71B00A2CD3A /* RecentlySearchedPeerIds.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecentlySearchedPeerIds.swift; sourceTree = ""; }; - D049EAF41E44DF3300A2CD3A /* AccountState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountState.swift; sourceTree = ""; }; - D04CAA591E83310D0047E51F /* MD5.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MD5.swift; sourceTree = ""; }; - D04D21362306EC9A00609388 /* MacInternalUpdater.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MacInternalUpdater.swift; sourceTree = ""; }; - D04D213B230AC35A00609388 /* WasScheduledMessageAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WasScheduledMessageAttribute.swift; sourceTree = ""; }; - D04D8FF3209A4B0700865719 /* NetworkSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkSettings.swift; sourceTree = ""; }; - D050F20F1E48AB0600988324 /* InteractivePhoneFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InteractivePhoneFormatter.swift; sourceTree = ""; }; - D050F2501E4A59C200988324 /* JoinLink.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JoinLink.swift; sourceTree = ""; }; - D051DB13215EC5A300F30F92 /* AppChangelogState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppChangelogState.swift; sourceTree = ""; }; - D051DB16215ECC4D00F30F92 /* AppChangelog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppChangelog.swift; sourceTree = ""; }; - D0528E591E658B3600E2FEF5 /* ManagedLocalInputActivities.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedLocalInputActivities.swift; sourceTree = ""; }; - D0528E5F1E65B94E00E2FEF5 /* SingleMessageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SingleMessageView.swift; sourceTree = ""; }; - D0528E641E65C82400E2FEF5 /* UpdateContactName.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateContactName.swift; sourceTree = ""; }; - D0528E691E65DD2100E2FEF5 /* WebpagePreview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebpagePreview.swift; sourceTree = ""; }; - D0529D2321A4123400D7C3C4 /* SynchronizeRecentlyUsedMediaOperations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SynchronizeRecentlyUsedMediaOperations.swift; sourceTree = ""; }; - D0529D2621A4141800D7C3C4 /* ManagedSynchronizeRecentlyUsedMediaOperations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedSynchronizeRecentlyUsedMediaOperations.swift; sourceTree = ""; }; - D053B4171F18DE4F00E2D58A /* AuthorSignatureMessageAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorSignatureMessageAttribute.swift; sourceTree = ""; }; - D053B41A1F18DEF500E2D58A /* TelegramMediaExpiredContent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramMediaExpiredContent.swift; sourceTree = ""; }; - D05452061E7B5093006EEF19 /* LoadedStickerPack.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadedStickerPack.swift; sourceTree = ""; }; - D054648A2073854A002ECC1E /* SecureIdPersonalDetailsValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdPersonalDetailsValue.swift; sourceTree = ""; }; - D054648D20738626002ECC1E /* SecureIdDriversLicenseValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdDriversLicenseValue.swift; sourceTree = ""; }; - D054649020738653002ECC1E /* SecureIdIDCardValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdIDCardValue.swift; sourceTree = ""; }; - D0546493207386D7002ECC1E /* SecureIdUtilityBillValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdUtilityBillValue.swift; sourceTree = ""; }; - D05464962073872C002ECC1E /* SecureIdBankStatementValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdBankStatementValue.swift; sourceTree = ""; }; - D054649920738760002ECC1E /* SecureIdRentalAgreementValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdRentalAgreementValue.swift; sourceTree = ""; }; - D0561DE21E5737FC00E6B9E9 /* UpdatePeerInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdatePeerInfo.swift; sourceTree = ""; }; - D0561DE91E5754FA00E6B9E9 /* ChannelAdmins.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChannelAdmins.swift; sourceTree = ""; }; - D0575AF01E9FFA5D006F2541 /* SynchronizeSavedGifsOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronizeSavedGifsOperation.swift; sourceTree = ""; }; - D0575AF31E9FFDDD006F2541 /* ManagedSynchronizeSavedGifsOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedSynchronizeSavedGifsOperations.swift; sourceTree = ""; }; - D0575C2C22B922DF00A71A0E /* DeleteAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeleteAccount.swift; sourceTree = ""; }; - D058E0D01E8AD65C00A442DE /* StandaloneSendMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StandaloneSendMessage.swift; sourceTree = ""; }; - D05A32E01E6F0982002760B4 /* UpdatedAccountPrivacySettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdatedAccountPrivacySettings.swift; sourceTree = ""; }; - D05A32E31E6F0B2E002760B4 /* RecentAccountSessions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecentAccountSessions.swift; sourceTree = ""; }; - D05A32E61E6F0B5C002760B4 /* RecentAccountSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecentAccountSession.swift; sourceTree = ""; }; - D05D8B362192F8AF0064586F /* LocalizationListState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationListState.swift; sourceTree = ""; }; - D0613FC91E60440600202CDB /* InvitationLinks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InvitationLinks.swift; sourceTree = ""; }; - D0613FCE1E60520700202CDB /* ChannelMembers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChannelMembers.swift; sourceTree = ""; }; - D0613FD61E606B3B00202CDB /* ConvertGroupToSupergroup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConvertGroupToSupergroup.swift; sourceTree = ""; }; - D0633CD12253A528003DD95F /* ChatOnlineMembers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatOnlineMembers.swift; sourceTree = ""; }; - D0633CDA2253C0D3003DD95F /* CloudMediaResourceParameters.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudMediaResourceParameters.swift; sourceTree = ""; }; - D0642EF81F3E05D700792790 /* EarliestUnseenPersonalMentionMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EarliestUnseenPersonalMentionMessage.swift; sourceTree = ""; }; - D06706641D512ADB00DED3E3 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D06706651D512ADB00DED3E3 /* Display.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D06706671D512ADB00DED3E3 /* Postbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D06706681D512ADB00DED3E3 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D067066E1D512AEB00DED3E3 /* MtProtoKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MtProtoKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D069257022D8B526002FC021 /* SecretChatSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretChatSettings.swift; sourceTree = ""; }; - D06CA13422772EB20094E707 /* ManagedNotificationSettingsBehaviors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedNotificationSettingsBehaviors.swift; sourceTree = ""; }; - D06ECFC720B810D300C576C2 /* TermsOfService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermsOfService.swift; sourceTree = ""; }; - D07047B31F3DF1FE00F6A8D4 /* ConsumablePersonalMentionMessageAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConsumablePersonalMentionMessageAttribute.swift; sourceTree = ""; }; - D07047B61F3DF2CD00F6A8D4 /* ManagedConsumePersonalMessagesActions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedConsumePersonalMessagesActions.swift; sourceTree = ""; }; - D07047B91F3DF75500F6A8D4 /* ConsumePersonalMessageAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConsumePersonalMessageAction.swift; sourceTree = ""; }; - D072F356231542740009E66F /* MessageReactionList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageReactionList.swift; sourceTree = ""; }; - D073CE5C1DCB97F6007511FD /* ForwardSourceInfoAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ForwardSourceInfoAttribute.swift; sourceTree = ""; }; - D073CE5F1DCB9D14007511FD /* OutgoingMessageInfoAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OutgoingMessageInfoAttribute.swift; sourceTree = ""; }; - D0750C8F22B2FD8300BE5F6E /* PeerAccessHash.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerAccessHash.swift; sourceTree = ""; }; - D0754D291EEE10FC00884F6E /* BotPaymentForm.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BotPaymentForm.swift; sourceTree = ""; }; - D076F8882296D8E9004F895A /* ManageChannelDiscussionGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManageChannelDiscussionGroup.swift; sourceTree = ""; }; - D07827BA1E00451F00071108 /* SearchPeers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchPeers.swift; sourceTree = ""; }; - D07827C81E02F59C00071108 /* InstantPage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InstantPage.swift; sourceTree = ""; }; - D07827CA1E02F5B200071108 /* RichText.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RichText.swift; sourceTree = ""; }; - D07E413E208A769D00FCA8F0 /* ProxyServersStatuses.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyServersStatuses.swift; sourceTree = ""; }; - D081E109217F5ADE003CD921 /* LocalizationPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationPreview.swift; sourceTree = ""; }; - D08774FB1E3E39F600A97350 /* ManagedGlobalNotificationSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedGlobalNotificationSettings.swift; sourceTree = ""; }; - D08774FD1E3E3A3500A97350 /* GlobalNotificationSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlobalNotificationSettings.swift; sourceTree = ""; }; - D0879BC722F85A3E00C4D6B3 /* ImageRepresentationWithReference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageRepresentationWithReference.swift; sourceTree = ""; }; - D08984F12114B97400918162 /* ClearCloudDrafts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClearCloudDrafts.swift; sourceTree = ""; }; - D08984F421187ECA00918162 /* NetworkType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkType.swift; sourceTree = ""; }; - D08984F72118816900918162 /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = ""; }; - D08984F82118816A00918162 /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Reachability.m; sourceTree = ""; }; - D08CAA7C1ED77EE90000FDA8 /* LocalizationSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocalizationSettings.swift; sourceTree = ""; }; - D08CAA7F1ED80ED20000FDA8 /* SuggestedLocalizationEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SuggestedLocalizationEntry.swift; sourceTree = ""; }; - D08CAA831ED8164B0000FDA8 /* Localization.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Localization.swift; sourceTree = ""; }; - D08CAA861ED81DD40000FDA8 /* LocalizationInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocalizationInfo.swift; sourceTree = ""; }; - D08CAA8B1ED81EDF0000FDA8 /* Localizations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Localizations.swift; sourceTree = ""; }; - D08F4A651E79CC4A00A2AA15 /* SynchronizeInstalledStickerPacksOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronizeInstalledStickerPacksOperations.swift; sourceTree = ""; }; - D08F4A681E79CECB00A2AA15 /* ManagedSynchronizeInstalledStickerPacksOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedSynchronizeInstalledStickerPacksOperations.swift; sourceTree = ""; }; - D093D7ED206413F600BC3599 /* SecureIdDataTypes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdDataTypes.swift; sourceTree = ""; }; - D093D7F420641A4900BC3599 /* SecureIdPhoneValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdPhoneValue.swift; sourceTree = ""; }; - D093D7F820641AA500BC3599 /* SecureIdEmailValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdEmailValue.swift; sourceTree = ""; }; - D093D805206539D000BC3599 /* SaveSecureIdValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SaveSecureIdValue.swift; sourceTree = ""; }; - D098907E22942E3B0053F151 /* ActiveSessionsContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActiveSessionsContext.swift; sourceTree = ""; }; - D099D7451EEF0C2700A3128C /* ChannelMessageStateVersionAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChannelMessageStateVersionAttribute.swift; sourceTree = ""; }; - D099D7481EEF418D00A3128C /* HistoryViewStateValidation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HistoryViewStateValidation.swift; sourceTree = ""; }; - D099E221229420D600561B75 /* BlockedPeersContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockedPeersContext.swift; sourceTree = ""; }; - D099EA1B1DE72867001AF5A8 /* PeerCommands.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerCommands.swift; sourceTree = ""; }; - D09A2FE51D7CD4940018FB72 /* TelegramChannel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramChannel.swift; sourceTree = ""; }; - D09A2FEA1D7CDC320018FB72 /* PeerAccessRestrictionInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerAccessRestrictionInfo.swift; sourceTree = ""; }; - D09BB6B31DB02C2B00A905C0 /* PendingMessageManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PendingMessageManager.swift; sourceTree = ""; }; - D09BB6B51DB0428000A905C0 /* PendingMessageUploadedContent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PendingMessageUploadedContent.swift; sourceTree = ""; }; - D09D8C011D4FAB1D0081DBEC /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D09D8C041D4FAB1D0081DBEC /* TelegramCore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TelegramCore.h; sourceTree = ""; }; - D09D8C051D4FAB1D0081DBEC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D09D8C0A1D4FAB1D0081DBEC /* TelegramCoreTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TelegramCoreTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - D09D8C0F1D4FAB1D0081DBEC /* TelegramCoreTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TelegramCoreTests.m; sourceTree = ""; }; - D09D8C111D4FAB1D0081DBEC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0A3E446214802C7008ACEF6 /* VoipConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoipConfiguration.swift; sourceTree = ""; }; - D0A472B51F4CBE8B00E0EEDA /* LoadedPeer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadedPeer.swift; sourceTree = ""; }; - D0A8998E217A37A000759EE6 /* NotificationAutolockReportManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationAutolockReportManager.swift; sourceTree = ""; }; - D0AAD1A71E32602500D5B9DE /* AutoremoveTimeoutMessageAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutoremoveTimeoutMessageAttribute.swift; sourceTree = ""; }; - D0AAD1A91E32638500D5B9DE /* ApplyMaxReadIndexInteractively.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApplyMaxReadIndexInteractively.swift; sourceTree = ""; }; - D0AAD1B71E326FE200D5B9DE /* ManagedAutoremoveMessageOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedAutoremoveMessageOperations.swift; sourceTree = ""; }; - D0AB0B911D65E9FA002C78E7 /* ManagedServiceViews.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedServiceViews.swift; sourceTree = ""; }; - D0AB0B931D662ECE002C78E7 /* ManagedMessageHistoryHoles.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedMessageHistoryHoles.swift; sourceTree = ""; }; - D0AB0B951D662F0B002C78E7 /* ManagedChatListHoles.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedChatListHoles.swift; sourceTree = ""; }; - D0AB0B991D666520002C78E7 /* ManagedSynchronizePeerReadStates.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedSynchronizePeerReadStates.swift; sourceTree = ""; }; - D0AB262521C2F991008F6685 /* TelegramMediaPoll.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TelegramMediaPoll.swift; sourceTree = ""; }; - D0AB262A21C3CE80008F6685 /* Polls.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Polls.swift; sourceTree = ""; }; - D0AC49491D7097A400AA55DA /* SSignalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = SSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0AD02E21FFFA14800C1DCFF /* PeerLiveLocationsContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerLiveLocationsContext.swift; sourceTree = ""; }; - D0ADF910212B00DD00310BBC /* SecureIdConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdConfiguration.swift; sourceTree = ""; }; - D0AF32211FAC95C20097362B /* StandaloneUploadedMedia.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StandaloneUploadedMedia.swift; sourceTree = ""; }; - D0AF32301FACEDEC0097362B /* CoreSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreSettings.swift; sourceTree = ""; }; - D0AF32341FAE8C6B0097362B /* MultipeerManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipeerManager.swift; sourceTree = ""; }; - D0AF32371FAE8C910097362B /* MultipeerConnectivity.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MultipeerConnectivity.framework; path = System/Library/Frameworks/MultipeerConnectivity.framework; sourceTree = SDKROOT; }; - D0B1671C1F9EA2C300976B40 /* ChatHistoryPreloadManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatHistoryPreloadManager.swift; sourceTree = ""; }; - D0B167221F9F972E00976B40 /* LoggingSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggingSettings.swift; sourceTree = ""; }; - D0B2F7732052DEF700D3BFB9 /* TelegramDeviceContactImportInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TelegramDeviceContactImportInfo.swift; sourceTree = ""; }; - D0B417C01D7DCEEF004562A4 /* ApiGroupOrChannel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApiGroupOrChannel.swift; sourceTree = ""; }; - D0B418671D7E03D5004562A4 /* TelegramCoreMac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TelegramCoreMac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0B418691D7E03D5004562A4 /* TelegramCoreMac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TelegramCoreMac.h; sourceTree = ""; }; - D0B4186A1D7E03D5004562A4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0B418701D7E0409004562A4 /* PostboxMac.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = PostboxMac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0B418711D7E0409004562A4 /* SwiftSignalKitMac.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = SwiftSignalKitMac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0B4187E1D7E054E004562A4 /* MtProtoKitMac.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MtProtoKitMac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0B843801DA6EDAE005F29E1 /* CachedUserData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CachedUserData.swift; sourceTree = ""; }; - D0B843821DA6EDB8005F29E1 /* CachedGroupData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CachedGroupData.swift; sourceTree = ""; }; - D0B843841DA6EDC4005F29E1 /* CachedChannelData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CachedChannelData.swift; sourceTree = ""; }; - D0B843861DA6F705005F29E1 /* UpdateCachedPeerData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateCachedPeerData.swift; sourceTree = ""; }; - D0B843881DA7AB96005F29E1 /* ExportedInvitation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportedInvitation.swift; sourceTree = ""; }; - D0B8438B1DA7CF50005F29E1 /* BotInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BotInfo.swift; sourceTree = ""; }; - D0B8438D1DA7D296005F29E1 /* CachedGroupParticipants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CachedGroupParticipants.swift; sourceTree = ""; }; - D0B843961DA7FBBC005F29E1 /* ChangePeerNotificationSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChangePeerNotificationSettings.swift; sourceTree = ""; }; - D0B844521DAC0773005F29E1 /* TelegramUserPresence.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramUserPresence.swift; sourceTree = ""; }; - D0B85AC41F6B2B9400B8B5CE /* RecentlyUsedHashtags.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentlyUsedHashtags.swift; sourceTree = ""; }; - D0BAAA13230FDB4100AFC473 /* ProcessRemovedMedia.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProcessRemovedMedia.swift; sourceTree = ""; }; - D0BB7C591E5C8074001527C3 /* ChannelParticipants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChannelParticipants.swift; sourceTree = ""; }; - D0BC386D1E3FDAB70044D6FE /* CreateGroup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateGroup.swift; sourceTree = ""; }; - D0BC386F1E40853E0044D6FE /* UpdatePeers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdatePeers.swift; sourceTree = ""; }; - D0BC38741E40A7F70044D6FE /* RemovePeerChat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RemovePeerChat.swift; sourceTree = ""; }; - D0BC38761E40BAAA0044D6FE /* ManagedSynchronizePinnedChatsOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedSynchronizePinnedChatsOperations.swift; sourceTree = ""; }; - D0BC38781E40BAF20044D6FE /* SynchronizePinnedChatsOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronizePinnedChatsOperation.swift; sourceTree = ""; }; - D0BC387A1E40D2880044D6FE /* TogglePeerChatPinned.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TogglePeerChatPinned.swift; sourceTree = ""; }; - D0BE303920619EE800FBE6D8 /* SecureIdForm.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdForm.swift; sourceTree = ""; }; - D0BE303C2061A29100FBE6D8 /* RequestSecureIdForm.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestSecureIdForm.swift; sourceTree = ""; }; - D0BE304A20627D9800FBE6D8 /* AccessSecureId.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessSecureId.swift; sourceTree = ""; }; - D0BEAF5C1E54941B00BD963D /* Authorization.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Authorization.swift; sourceTree = ""; }; - D0BEAF5F1E54ACF900BD963D /* AccountManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountManager.swift; sourceTree = ""; }; - D0C0B5891ED9DA6B000F4D2C /* ManagedLocalizationUpdatesOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedLocalizationUpdatesOperations.swift; sourceTree = ""; }; - D0C0B58C1ED9DC5A000F4D2C /* SynchronizeLocalizationUpdatesOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronizeLocalizationUpdatesOperation.swift; sourceTree = ""; }; - D0C26D651FE022DB004ABF18 /* SynchronizeGroupedPeersOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SynchronizeGroupedPeersOperation.swift; sourceTree = ""; }; - D0C26D681FE02402004ABF18 /* ManagedSynchronizeGroupedPeersOperations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedSynchronizeGroupedPeersOperations.swift; sourceTree = ""; }; - D0C26D6B1FE286C3004ABF18 /* FetchChatList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchChatList.swift; sourceTree = ""; }; - D0C27B3E1F4B51D000A4E170 /* CachedStickerPack.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CachedStickerPack.swift; sourceTree = ""; }; - D0C27B411F4B58C000A4E170 /* PeerSpecificStickerPack.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerSpecificStickerPack.swift; sourceTree = ""; }; - D0C44B601FC616E200227BE0 /* SearchGroupMembers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchGroupMembers.swift; sourceTree = ""; }; - D0C48F381E8138DF0075317D /* ArchivedStickerPacksInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArchivedStickerPacksInfo.swift; sourceTree = ""; }; - D0C48F3B1E8142EF0075317D /* LoadedPeerFromMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadedPeerFromMessage.swift; sourceTree = ""; }; - D0C50E331E93A86600F62E39 /* CallSessionManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallSessionManager.swift; sourceTree = ""; }; - D0CA3F83207391560042D2B6 /* SecureIdPadding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdPadding.swift; sourceTree = ""; }; - D0CA8E4A227209C4008A74C3 /* ManagedSynchronizeGroupMessageStats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedSynchronizeGroupMessageStats.swift; sourceTree = ""; }; - D0CAF2E91D75EC600011F558 /* MtProtoKitDynamic.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MtProtoKitDynamic.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0CC4AA322BA44960088F36D /* TelegramApi.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramApi.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0CC4ADB22BA47280088F36D /* TelegramApiMac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramApiMac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0D1026B2212FE52003ADA5E /* AccountSortOrderAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountSortOrderAttribute.swift; sourceTree = ""; }; - D0D376E522DCCFD600FA7D7C /* SlowMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SlowMode.swift; sourceTree = ""; }; - D0D748011E7AE98B00F4B1F6 /* StickerPackInteractiveOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPackInteractiveOperations.swift; sourceTree = ""; }; - D0DA1D311F7043D50034E892 /* ManagedPendingPeerNotificationSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedPendingPeerNotificationSettings.swift; sourceTree = ""; }; - D0DB7F021F43030C00591D48 /* InstallInteractiveReadMessagesAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InstallInteractiveReadMessagesAction.swift; sourceTree = ""; }; - D0DC354D1DE368F7000195EB /* RequestChatContextResults.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestChatContextResults.swift; sourceTree = ""; }; - D0DC354F1DE36900000195EB /* ChatContextResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatContextResult.swift; sourceTree = ""; }; - D0DF0C891D819C7E008AEB01 /* JoinChannel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JoinChannel.swift; sourceTree = ""; }; - D0DF0C901D81A857008AEB01 /* ImageRepresentationsUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageRepresentationsUtils.swift; sourceTree = ""; }; - D0DF0C921D81AD09008AEB01 /* MessageUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageUtils.swift; sourceTree = ""; }; - D0DF0CA71D82BF32008AEB01 /* PeerParticipants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerParticipants.swift; sourceTree = ""; }; - D0DFD5DE1FCDBCFD0039B3B1 /* CachedSentMediaReferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachedSentMediaReferences.swift; sourceTree = ""; }; - D0E23DD41E8042F500B9B6D2 /* FeaturedStickerPack.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeaturedStickerPack.swift; sourceTree = ""; }; - D0E23DD91E806F7700B9B6D2 /* ManagedSynchronizeMarkFeaturedStickerPacksAsSeenOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedSynchronizeMarkFeaturedStickerPacksAsSeenOperations.swift; sourceTree = ""; }; - D0E23DDE1E8082A400B9B6D2 /* ArchivedStickerPacks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArchivedStickerPacks.swift; sourceTree = ""; }; - D0E305A61E5B5CBE00D7A3A2 /* PeerAdmins.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerAdmins.swift; sourceTree = ""; }; - D0E305A91E5BA02D00D7A3A2 /* ChannelBlacklist.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChannelBlacklist.swift; sourceTree = ""; }; - D0E35A0D1DE4953E00BC6096 /* FetchHttpResource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchHttpResource.swift; sourceTree = ""; }; - D0E35A0F1DE49E1C00BC6096 /* OutgoingMessageWithChatContextResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OutgoingMessageWithChatContextResult.swift; sourceTree = ""; }; - D0E35A111DE4A25E00BC6096 /* OutgoingChatContextResultMessageAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OutgoingChatContextResultMessageAttribute.swift; sourceTree = ""; }; - D0E412D6206A866B00BEE4A2 /* UploadSecureIdFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UploadSecureIdFile.swift; sourceTree = ""; }; - D0E412DB206A99AE00BEE4A2 /* SecureIdValueAccessContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdValueAccessContext.swift; sourceTree = ""; }; - D0E412E0206AB24700BEE4A2 /* SecureFileMediaResource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureFileMediaResource.swift; sourceTree = ""; }; - D0E412E6206ABC7500BEE4A2 /* EncryptedMediaResource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptedMediaResource.swift; sourceTree = ""; }; - D0E412E9206AD18E00BEE4A2 /* DecryptedResourceData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DecryptedResourceData.swift; sourceTree = ""; }; - D0E412ED206AF65500BEE4A2 /* GrantSecureIdAccess.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GrantSecureIdAccess.swift; sourceTree = ""; }; - D0E412F0206B9BB700BEE4A2 /* SecureIdPassportValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdPassportValue.swift; sourceTree = ""; }; - D0E412F3206B9BDC00BEE4A2 /* SecureIdVerificationDocumentReference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdVerificationDocumentReference.swift; sourceTree = ""; }; - D0E41300206B9E6E00BEE4A2 /* SecureIdAddressValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdAddressValue.swift; sourceTree = ""; }; - D0E6521E1E3A364A004EEA91 /* UpdateAccountPeerName.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateAccountPeerName.swift; sourceTree = ""; }; - D0E817482010E7E300B82BBB /* ChannelAdminEventLogContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelAdminEventLogContext.swift; sourceTree = ""; }; - D0E8B8B22044706300605593 /* ForwardGame.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForwardGame.swift; sourceTree = ""; }; - D0EA188120D3D2B1001AEE19 /* RemoteStorageConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteStorageConfiguration.swift; sourceTree = ""; }; - D0EC55992101ED0800D1992C /* DeleteMessages.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeleteMessages.swift; sourceTree = ""; }; - D0EE7FC020986BF400981319 /* SecureIdInternalPassportValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdInternalPassportValue.swift; sourceTree = ""; }; - D0EE7FC320986C5300981319 /* SecureIdPassportRegistrationValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdPassportRegistrationValue.swift; sourceTree = ""; }; - D0EE7FC62098853100981319 /* SecureIdTemporaryRegistrationValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdTemporaryRegistrationValue.swift; sourceTree = ""; }; - D0F02CE41E9926C40065DEE2 /* ManagedConfigurationUpdates.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedConfigurationUpdates.swift; sourceTree = ""; }; - D0F19F6520E6620D00EEC860 /* MultiplexedRequestManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiplexedRequestManager.swift; sourceTree = ""; }; - D0F3A89E1E82C65400B4C64C /* SynchronizeChatInputStateOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronizeChatInputStateOperation.swift; sourceTree = ""; }; - D0F3A8A11E82C65E00B4C64C /* ManagedSynchronizeChatInputStateOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedSynchronizeChatInputStateOperations.swift; sourceTree = ""; }; - D0F3A8A41E82C94C00B4C64C /* SynchronizeableChatInputState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronizeableChatInputState.swift; sourceTree = ""; }; - D0F3A8A71E82CD7D00B4C64C /* UpdatePeerChatInterfaceState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdatePeerChatInterfaceState.swift; sourceTree = ""; }; - D0F3CC7C1DDE289E008148FA /* ResolvePeerByName.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResolvePeerByName.swift; sourceTree = ""; }; - D0F53BE81E784A4800117362 /* ChangeAccountPhoneNumber.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChangeAccountPhoneNumber.swift; sourceTree = ""; }; - D0F760D722202FE20074F7E5 /* ChannelStats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelStats.swift; sourceTree = ""; }; - D0F7AB2B1DCE889D009AD9A1 /* EditedMessageAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EditedMessageAttribute.swift; sourceTree = ""; }; - D0F7AB2E1DCF507E009AD9A1 /* ReplyMarkupMessageAttribute.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReplyMarkupMessageAttribute.swift; sourceTree = ""; }; - D0F8C39F2017AF2700236FC5 /* GlobalTelegramCoreConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalTelegramCoreConfiguration.swift; sourceTree = ""; }; - D0FA08BA2046B37900DD23FC /* ContentPrivacySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentPrivacySettings.swift; sourceTree = ""; }; - D0FA0ABC1E76C908005BB9B7 /* TwoStepVerification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TwoStepVerification.swift; sourceTree = ""; }; - D0FA35041EA6135D00E56FFA /* CacheStorageSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CacheStorageSettings.swift; sourceTree = ""; }; - D0FA35071EA632E400E56FFA /* CollectCacheUsageStats.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectCacheUsageStats.swift; sourceTree = ""; }; - D0FA8B971E1E955C001E855B /* SecretChatOutgoingOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretChatOutgoingOperation.swift; sourceTree = ""; }; - D0FA8B9D1E1F973B001E855B /* SecretChatIncomingEncryptedOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretChatIncomingEncryptedOperation.swift; sourceTree = ""; }; - D0FA8BA01E1F99E1001E855B /* SecretChatFileReference.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretChatFileReference.swift; sourceTree = ""; }; - D0FA8BA31E1FA341001E855B /* SecretChatKeychain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretChatKeychain.swift; sourceTree = ""; }; - D0FA8BA61E1FA6DF001E855B /* TelegramSecretChat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramSecretChat.swift; sourceTree = ""; }; - D0FA8BA91E1FB76E001E855B /* ManagedSecretChatOutgoingOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedSecretChatOutgoingOperations.swift; sourceTree = ""; }; - D0FA8BAC1E1FD6E2001E855B /* MemoryBufferExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MemoryBufferExtensions.swift; sourceTree = ""; }; - D0FA8BAF1E1FEC7E001E855B /* SecretChatEncryptionConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretChatEncryptionConfig.swift; sourceTree = ""; }; - D0FA8BB21E201B02001E855B /* ProcessSecretChatIncomingEncryptedOperations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProcessSecretChatIncomingEncryptedOperations.swift; sourceTree = ""; }; - D0FA8BB81E2240B4001E855B /* SecretChatIncomingDecryptedOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretChatIncomingDecryptedOperation.swift; sourceTree = ""; }; - D0FC195A2020D1CA00FEDBB2 /* PeerGroupMessageStateVersionAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerGroupMessageStateVersionAttribute.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - D09D8BFD1D4FAB1D0081DBEC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E45D42305D44A0049C28B /* libphonenumber.framework in Frameworks */, - D035732F22B5C24F00F0920D /* TelegramApi.framework in Frameworks */, - D0CAF2EA1D75EC600011F558 /* MtProtoKitDynamic.framework in Frameworks */, - D067066C1D512ADB00DED3E3 /* Postbox.framework in Frameworks */, - D067066D1D512ADB00DED3E3 /* SwiftSignalKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D09D8C071D4FAB1D0081DBEC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D09D8C0B1D4FAB1D0081DBEC /* TelegramCore.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0B418631D7E03D5004562A4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D0208AF42306E92B00A23503 /* libphonenumbermac.framework in Frameworks */, - D0CC4ADC22BA47280088F36D /* TelegramApiMac.framework in Frameworks */, - D0B4187F1D7E054E004562A4 /* MtProtoKitMac.framework in Frameworks */, - D0B418721D7E0409004562A4 /* PostboxMac.framework in Frameworks */, - D0B418731D7E0409004562A4 /* SwiftSignalKitMac.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - D01B264723324CE600A6448B /* Wallet */ = { - isa = PBXGroup; - children = ( - D01B264823324CF800A6448B /* Wallets.swift */, - ); - name = Wallet; - sourceTree = ""; - }; - D01B27A01E394D7B0022A4C0 /* Settings */ = { - isa = PBXGroup; - children = ( - 0900555521E4A96D0030924C /* Wallpaper.swift */, - D01B27A11E394D8B0022A4C0 /* PrivacySettings.swift */, - D08774FD1E3E3A3500A97350 /* GlobalNotificationSettings.swift */, - D05A32E61E6F0B5C002760B4 /* RecentAccountSession.swift */, - D0FA35041EA6135D00E56FFA /* CacheStorageSettings.swift */, - D08CAA7C1ED77EE90000FDA8 /* LocalizationSettings.swift */, - D01C7ED21EF5DF83008305F1 /* LimitsConfiguration.swift */, - D0A3E446214802C7008ACEF6 /* VoipConfiguration.swift */, - D0EA188120D3D2B1001AEE19 /* RemoteStorageConfiguration.swift */, - D01C7ED51EF5E468008305F1 /* ProxySettings.swift */, - D04D8FF3209A4B0700865719 /* NetworkSettings.swift */, - D0B167221F9F972E00976B40 /* LoggingSettings.swift */, - D0AF32301FACEDEC0097362B /* CoreSettings.swift */, - D0FA08BA2046B37900DD23FC /* ContentPrivacySettings.swift */, - D051DB13215EC5A300F30F92 /* AppChangelogState.swift */, - 0962E66E21B6147600245FD9 /* AppConfiguration.swift */, - 0962E68021BAA20E00245FD9 /* SearchBotsConfiguration.swift */, - 09EDAD372213120C0012A50B /* AutodownloadSettings.swift */, - 09B4A9B5230FBB2B005C2E08 /* Theme.swift */, - ); - name = Settings; - sourceTree = ""; - }; - D021E0DD1DB539E800C6B04F /* Item Collections */ = { - isa = PBXGroup; - children = ( - D021E0DE1DB539FC00C6B04F /* StickerPack.swift */, - D049EAD41E43D98500A2CD3A /* RecentMediaItem.swift */, - D01A21AB1F38D10E00DDA104 /* SavedStickerItem.swift */, - D049EAE71E44B67100A2CD3A /* RecentPeerItem.swift */, - D0E23DD41E8042F500B9B6D2 /* FeaturedStickerPack.swift */, - D0C48F381E8138DF0075317D /* ArchivedStickerPacksInfo.swift */, - ); - name = "Item Collections"; - sourceTree = ""; - }; - D021E0E01DB5400200C6B04F /* Sticker Management */ = { - isa = PBXGroup; - children = ( - D021E0E11DB5401A00C6B04F /* StickerManagement.swift */, - D01D6BF81E42A713006151C6 /* SearchStickers.swift */, - D049EAD71E43DAD200A2CD3A /* ManagedRecentStickers.swift */, - C251D7421E65E50500283EDE /* StickerSetInstallation.swift */, - D0D748011E7AE98B00F4B1F6 /* StickerPackInteractiveOperations.swift */, - D05452061E7B5093006EEF19 /* LoadedStickerPack.swift */, - D0E23DDE1E8082A400B9B6D2 /* ArchivedStickerPacks.swift */, - D0C27B3E1F4B51D000A4E170 /* CachedStickerPack.swift */, - D0C27B411F4B58C000A4E170 /* PeerSpecificStickerPack.swift */, - C29340F21F5080FA0074991E /* UpdateGroupSpecificStickerset.swift */, - ); - name = "Sticker Management"; - sourceTree = ""; - }; - D03B0CB71D62232000955575 /* Utils */ = { - isa = PBXGroup; - children = ( - D0DF0C901D81A857008AEB01 /* ImageRepresentationsUtils.swift */, - D0DF0C921D81AD09008AEB01 /* MessageUtils.swift */, - D03B0CB81D62233400955575 /* Either.swift */, - D03B0CBC1D62234300955575 /* Regex.swift */, - D03B0CBE1D62234A00955575 /* Log.swift */, - D03B0CC01D62235000955575 /* StringFormat.swift */, - D03B0CCD1D62239600955575 /* PhoneNumbers.swift */, - D0FA8BAC1E1FD6E2001E855B /* MemoryBufferExtensions.swift */, - D0448C9E1E27F5EB005A61A7 /* Random.swift */, - D050F20F1E48AB0600988324 /* InteractivePhoneFormatter.swift */, - D04CAA591E83310D0047E51F /* MD5.swift */, - D042C6821E8D9DF800C863B0 /* Unixtime.swift */, - D01C7F031EFC1C49008305F1 /* DeviceContact.swift */, - D01C06B61FBBA269001561AB /* CanSendMessagesToPeer.swift */, - D0F8C39F2017AF2700236FC5 /* GlobalTelegramCoreConfiguration.swift */, - D0E412E9206AD18E00BEE4A2 /* DecryptedResourceData.swift */, - C28D3CEF20D3DA900027F4D6 /* DeepLinkInfo.swift */, - 0962E66C21B5C56F00245FD9 /* JSON.swift */, - 0962E67421B6437600245FD9 /* SplitTest.swift */, - D03E452C2305C15A0049C28B /* FormatPhoneNumber.h */, - D03E452D2305C15A0049C28B /* FormatPhoneNumber.m */, - ); - name = Utils; - sourceTree = ""; - }; - D03B0CCF1D62242200955575 /* Objects */ = { - isa = PBXGroup; - children = ( - D03B0CD21D62244300955575 /* Namespaces.swift */, - D03E5E0A1E55E0220029569A /* Accounts */, - D03B0CD01D62242C00955575 /* Peers */, - D03B0CD11D62242F00955575 /* Messages */, - D0FA8B961E1E952D001E855B /* Secret Chats */, - D021E0DD1DB539E800C6B04F /* Item Collections */, - D01B27A01E394D7B0022A4C0 /* Settings */, - D08CAA821ED816290000FDA8 /* Localization */, - ); - name = Objects; - sourceTree = ""; - }; - D03B0CD01D62242C00955575 /* Peers */ = { - isa = PBXGroup; - children = ( - D03B0CDA1D62245F00955575 /* ApiUtils.swift */, - D03B0CD81D62245B00955575 /* PeerUtils.swift */, - D09A2FEA1D7CDC320018FB72 /* PeerAccessRestrictionInfo.swift */, - D0750C8F22B2FD8300BE5F6E /* PeerAccessHash.swift */, - D03B0CD41D62245300955575 /* TelegramUser.swift */, - D03B0CD51D62245300955575 /* TelegramGroup.swift */, - D09A2FE51D7CD4940018FB72 /* TelegramChannel.swift */, - D0FA8BA61E1FA6DF001E855B /* TelegramSecretChat.swift */, - D0B417C01D7DCEEF004562A4 /* ApiGroupOrChannel.swift */, - D003702A1DA42586004308D3 /* PhoneNumber.swift */, - D0B8438B1DA7CF50005F29E1 /* BotInfo.swift */, - D0B843881DA7AB96005F29E1 /* ExportedInvitation.swift */, - D0B8438D1DA7D296005F29E1 /* CachedGroupParticipants.swift */, - D0B843801DA6EDAE005F29E1 /* CachedUserData.swift */, - D0B843821DA6EDB8005F29E1 /* CachedGroupData.swift */, - D00C7CCB1E3620C30080C3D5 /* CachedChannelParticipants.swift */, - D0B843841DA6EDC4005F29E1 /* CachedChannelData.swift */, - D0B844521DAC0773005F29E1 /* TelegramUserPresence.swift */, - D00D97C61E32901700E5C2B6 /* PeerInputActivity.swift */, - D033FEAF1E61EB0200644997 /* PeerContactSettings.swift */, - D0F3A8A41E82C94C00B4C64C /* SynchronizeableChatInputState.swift */, - D00BDA181EE593D600C64C5E /* TelegramChannelAdminRights.swift */, - D00BDA1B1EE5952A00C64C5E /* TelegramChannelBannedRights.swift */, - ); - name = Peers; - sourceTree = ""; - }; - D03B0CD11D62242F00955575 /* Messages */ = { - isa = PBXGroup; - children = ( - D03B0CDF1D62249100955575 /* StoreMessage_Telegram.swift */, - D03B0CDC1D62247800955575 /* Attributes */, - D03B0CDD1D62247D00955575 /* Media */, - ); - name = Messages; - sourceTree = ""; - }; - D03B0CDC1D62247800955575 /* Attributes */ = { - isa = PBXGroup; - children = ( - D0AAD1A71E32602500D5B9DE /* AutoremoveTimeoutMessageAttribute.swift */, - D03B0CE71D6224AD00955575 /* ViewCountMessageAttribute.swift */, - D03B0CE51D6224A700955575 /* ReplyMessageAttribute.swift */, - D03B0CE31D62249F00955575 /* TextEntitiesMessageAttribute.swift */, - D03B0CE11D62249B00955575 /* InlineBotMessageAttribute.swift */, - D053B4171F18DE4F00E2D58A /* AuthorSignatureMessageAttribute.swift */, - D073CE5C1DCB97F6007511FD /* ForwardSourceInfoAttribute.swift */, - D073CE5F1DCB9D14007511FD /* OutgoingMessageInfoAttribute.swift */, - D0F7AB2B1DCE889D009AD9A1 /* EditedMessageAttribute.swift */, - D0F7AB2E1DCF507E009AD9A1 /* ReplyMarkupMessageAttribute.swift */, - D0E35A111DE4A25E00BC6096 /* OutgoingChatContextResultMessageAttribute.swift */, - D0458C871E69B4AB00FB34C1 /* OutgoingContentInfoMessageAttribute.swift */, - D00D343E1E6ED6E50057B307 /* ConsumableContentMessageAttribute.swift */, - D07047B31F3DF1FE00F6A8D4 /* ConsumablePersonalMentionMessageAttribute.swift */, - D099D7451EEF0C2700A3128C /* ChannelMessageStateVersionAttribute.swift */, - D0FC195A2020D1CA00FEDBB2 /* PeerGroupMessageStateVersionAttribute.swift */, - C28725411EF967E700613564 /* NotificationInfoMessageAttribute.swift */, - C210DD611FBDB90800F673D8 /* SourceReferenceMessageAttribute.swift */, - D0439B5F228EDE430067E026 /* ContentRequiresValidationMessageAttribute.swift */, - 09FC986A22FD882200915E37 /* OutgoingScheduleInfoMessageAttribute.swift */, - D0329EA422FC5A9600F9F071 /* ReactionsMessageAttribute.swift */, - D03E3D27230447960049C28B /* RestrictedContentMessageAttribute.swift */, - D04D213B230AC35A00609388 /* WasScheduledMessageAttribute.swift */, - ); - name = Attributes; - sourceTree = ""; - }; - D03B0CDD1D62247D00955575 /* Media */ = { - isa = PBXGroup; - children = ( - D00D34381E6EC9520057B307 /* TeleramMediaUnsupported.swift */, - D03B0CEC1D62250800955575 /* TelegramMediaAction.swift */, - D03B0CED1D62250800955575 /* TelegramMediaContact.swift */, - D03B0CEE1D62250800955575 /* TelegramMediaFile.swift */, - D03B0CEF1D62250800955575 /* TelegramMediaImage.swift */, - D03B0CF11D62250800955575 /* TelegramMediaMap.swift */, - D03B0CF31D62250800955575 /* TelegramMediaWebpage.swift */, - D00D343B1E6EC9770057B307 /* TelegramMediaGame.swift */, - D053B41A1F18DEF500E2D58A /* TelegramMediaExpiredContent.swift */, - D07827CA1E02F5B200071108 /* RichText.swift */, - D07827C81E02F59C00071108 /* InstantPage.swift */, - C2E064671ECEEF0A00387BB8 /* TelegramMediaInvoice.swift */, - C2E0646C1ECF171D00387BB8 /* TelegramMediaWebDocument.swift */, - D0AB262521C2F991008F6685 /* TelegramMediaPoll.swift */, - ); - name = Media; - sourceTree = ""; - }; - D03B0CFE1D62252200955575 /* State */ = { - isa = PBXGroup; - children = ( - D03B0CFF1D62255C00955575 /* ChannelState.swift */, - D03DC9121F82F89D001D584C /* RegularChatState.swift */, - D03121011DA57E93006A2A60 /* TelegramPeerNotificationSettings.swift */, - D03B0D001D62255C00955575 /* EnqueueMessage.swift */, - D03B0D011D62255C00955575 /* Holes.swift */, - D017495D1E118F790057C89A /* AccountStateManager.swift */, - D017495F1E118FC30057C89A /* AccountIntermediateState.swift */, - D03B0D031D62255C00955575 /* AccountStateManagementUtils.swift */, - D03B0D051D62255C00955575 /* UpdateGroup.swift */, - D03DC90F1F82E344001D584C /* AccountStateReset.swift */, - D03B0D041D62255C00955575 /* SynchronizePeerReadState.swift */, - D03B0D061D62255C00955575 /* UpdateMessageService.swift */, - D03B0D071D62255C00955575 /* UpdatesApiUtils.swift */, - D09BB6B31DB02C2B00A905C0 /* PendingMessageManager.swift */, - D09BB6B51DB0428000A905C0 /* PendingMessageUploadedContent.swift */, - D01AC9221DD5E9A200E8160F /* ApplyUpdateMessage.swift */, - D02ABC7D1E3109F000CAE539 /* CloudChatRemoveMessagesOperation.swift */, - D02ABC801E310E5D00CAE539 /* ManagedCloudChatRemoveMessagesOperations.swift */, - D0AAD1B71E326FE200D5B9DE /* ManagedAutoremoveMessageOperations.swift */, - D00D97C91E32917C00E5C2B6 /* PeerInputActivityManager.swift */, - D0AB0B991D666520002C78E7 /* ManagedSynchronizePeerReadStates.swift */, - D0BC38781E40BAF20044D6FE /* SynchronizePinnedChatsOperation.swift */, - D0BC38761E40BAAA0044D6FE /* ManagedSynchronizePinnedChatsOperations.swift */, - D00DBBD91E64E67E00DB5485 /* UpdateSecretChat.swift */, - D00D34441E6EDD420057B307 /* SynchronizeConsumeMessageContentsOperation.swift */, - D00D34411E6EDD2E0057B307 /* ManagedSynchronizeConsumeMessageContentsOperations.swift */, - D08F4A651E79CC4A00A2AA15 /* SynchronizeInstalledStickerPacksOperations.swift */, - D08F4A681E79CECB00A2AA15 /* ManagedSynchronizeInstalledStickerPacksOperations.swift */, - D0E23DD91E806F7700B9B6D2 /* ManagedSynchronizeMarkFeaturedStickerPacksAsSeenOperations.swift */, - D0F3A89E1E82C65400B4C64C /* SynchronizeChatInputStateOperation.swift */, - D0F3A8A11E82C65E00B4C64C /* ManagedSynchronizeChatInputStateOperations.swift */, - D0575AF01E9FFA5D006F2541 /* SynchronizeSavedGifsOperation.swift */, - D0575AF31E9FFDDD006F2541 /* ManagedSynchronizeSavedGifsOperations.swift */, - D01A21A51F38CDC700DDA104 /* SynchronizeSavedStickersOperation.swift */, - D01A21A81F38CDDC00DDA104 /* ManagedSynchronizeSavedStickersOperations.swift */, - D058E0D01E8AD65C00A442DE /* StandaloneSendMessage.swift */, - D0F02CE41E9926C40065DEE2 /* ManagedConfigurationUpdates.swift */, - D0C0B58C1ED9DC5A000F4D2C /* SynchronizeLocalizationUpdatesOperation.swift */, - D0C0B5891ED9DA6B000F4D2C /* ManagedLocalizationUpdatesOperations.swift */, - D07047B91F3DF75500F6A8D4 /* ConsumePersonalMessageAction.swift */, - D07047B61F3DF2CD00F6A8D4 /* ManagedConsumePersonalMessagesActions.swift */, - D0C26D651FE022DB004ABF18 /* SynchronizeGroupedPeersOperation.swift */, - D0C26D681FE02402004ABF18 /* ManagedSynchronizeGroupedPeersOperations.swift */, - D0AF32211FAC95C20097362B /* StandaloneUploadedMedia.swift */, - D0380DB9204EF306000414AB /* MessageMediaPreuploadManager.swift */, - D048B4AB20A5DA4300C79D31 /* ManagedProxyInfoUpdates.swift */, - D0467D0A20D7F1E60055C28F /* SynchronizeMarkAllUnseenPersonalMessagesOperation.swift */, - D0467D1420D7F2C90055C28F /* ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift */, - D00422D221677F4500719B67 /* ManagedAccountPresence.swift */, - D0A8998E217A37A000759EE6 /* NotificationAutolockReportManager.swift */, - 09028385218E5DBB0067EFBD /* ManagedVoipConfigurationUpdates.swift */, - D0529D2321A4123400D7C3C4 /* SynchronizeRecentlyUsedMediaOperations.swift */, - D0529D2621A4141800D7C3C4 /* ManagedSynchronizeRecentlyUsedMediaOperations.swift */, - 0962E66621B59BAA00245FD9 /* ManagedAppConfigurationUpdates.swift */, - 0962E66821B5A11100245FD9 /* SynchronizeAppLogEventsOperation.swift */, - 0962E66A21B5A41C00245FD9 /* ManagedSynchronizeAppLogEventsOperations.swift */, - 09EDAD3922131D010012A50B /* ManagedAutodownloadSettingsUpdates.swift */, - 093857A72243D87900EB6A54 /* SynchronizeEmojiKeywordsOperation.swift */, - 093857A62243D87800EB6A54 /* ManagedSynchronizeEmojiKeywordsOperations.swift */, - D0CA8E4A227209C4008A74C3 /* ManagedSynchronizeGroupMessageStats.swift */, - D06CA13422772EB20094E707 /* ManagedNotificationSettingsBehaviors.swift */, - 0925903622F0D02D003D6283 /* ManagedAnimatedEmojiUpdates.swift */, - ); - name = State; - sourceTree = ""; - }; - D03B0D111D62256B00955575 /* Media */ = { - isa = PBXGroup; - children = ( - D03B0D121D62257600955575 /* Resources */, - D0DFD5DE1FCDBCFD0039B3B1 /* CachedSentMediaReferences.swift */, - D0879BC722F85A3E00C4D6B3 /* ImageRepresentationWithReference.swift */, - D0BAAA13230FDB4100AFC473 /* ProcessRemovedMedia.swift */, - ); - name = Media; - sourceTree = ""; - }; - D03B0D121D62257600955575 /* Resources */ = { - isa = PBXGroup; - children = ( - D032F5BB20EF84FD00037B6C /* FetchedMediaResource.swift */, - D0223A9A1EA5654D00211D94 /* TelegramMediaResource.swift */, - D03B0D431D6319F900955575 /* CloudFileMediaResource.swift */, - D0223A971EA564BD00211D94 /* MediaResourceNetworkStatsTag.swift */, - D03B0D391D6319E200955575 /* Fetch.swift */, - D0E35A0D1DE4953E00BC6096 /* FetchHttpResource.swift */, - D0448CA11E291B14005A61A7 /* FetchSecretFileResource.swift */, - D0448CA41E29215A005A61A7 /* MediaResourceApiUtils.swift */, - D0E412E6206ABC7500BEE4A2 /* EncryptedMediaResource.swift */, - D0E412E0206AB24700BEE4A2 /* SecureFileMediaResource.swift */, - D0633CDA2253C0D3003DD95F /* CloudMediaResourceParameters.swift */, - ); - name = Resources; - sourceTree = ""; - }; - D03B0D531D631A4400955575 /* Network */ = { - isa = PBXGroup; - children = ( - D03B0D561D631A6900955575 /* Download.swift */, - D03B0D571D631A6900955575 /* MultipartFetch.swift */, - D03C53761DAFF20F004C17B3 /* MultipartUpload.swift */, - D03B0D581D631A6900955575 /* Network.swift */, - D03B0D591D631A6900955575 /* Serialization.swift */, - D0F19F6520E6620D00EEC860 /* MultiplexedRequestManager.swift */, - D08984F421187ECA00918162 /* NetworkType.swift */, - ); - name = Network; - sourceTree = ""; - }; - D03B0D601D631A7200955575 /* Account */ = { - isa = PBXGroup; - children = ( - D03B0D611D631A8B00955575 /* Account.swift */, - D049EAF41E44DF3300A2CD3A /* AccountState.swift */, - D03B0D631D631A8B00955575 /* AccountViewTracker.swift */, - D03B0D641D631A8B00955575 /* RecentPeers.swift */, - D0AB0B911D65E9FA002C78E7 /* ManagedServiceViews.swift */, - D0AB0B931D662ECE002C78E7 /* ManagedMessageHistoryHoles.swift */, - D0AB0B951D662F0B002C78E7 /* ManagedChatListHoles.swift */, - D0B843861DA6F705005F29E1 /* UpdateCachedPeerData.swift */, - D0E6521E1E3A364A004EEA91 /* UpdateAccountPeerName.swift */, - D08774FB1E3E39F600A97350 /* ManagedGlobalNotificationSettings.swift */, - D0BEAF5C1E54941B00BD963D /* Authorization.swift */, - D0BEAF5F1E54ACF900BD963D /* AccountManager.swift */, - D0528E591E658B3600E2FEF5 /* ManagedLocalInputActivities.swift */, - D099D7481EEF418D00A3128C /* HistoryViewStateValidation.swift */, - D0B1671C1F9EA2C300976B40 /* ChatHistoryPreloadManager.swift */, - D06ECFC720B810D300C576C2 /* TermsOfService.swift */, - D051DB16215ECC4D00F30F92 /* AppChangelog.swift */, - D01843A72190C28100278AFF /* ConfirmTwoStepRecoveryEmail.swift */, - D02B198F21FB1D520094A764 /* RegisterNotificationToken.swift */, - D0338742223BD532007A2CE4 /* InitializeAccountAfterLogin.swift */, - D0575C2C22B922DF00A71A0E /* DeleteAccount.swift */, - 09EC0DE822C6825D00E7185B /* AppUpdate.swift */, - ); - name = Account; - sourceTree = ""; - }; - D03B0D691D631A9200955575 /* Contacts */ = { - isa = PBXGroup; - children = ( - D03B0D6C1D631AA300955575 /* ContactManagement.swift */, - D0B2F7732052DEF700D3BFB9 /* TelegramDeviceContactImportInfo.swift */, - D02DADC02139A1FC00116225 /* ContactSyncManager.swift */, - D0439B5C228ECB270067E026 /* RequestPhoneNumber.swift */, - ); - name = Contacts; - sourceTree = ""; - }; - D03B0D6E1D631AA900955575 /* Messages */ = { - isa = PBXGroup; - children = ( - D03B0D711D631ABA00955575 /* SearchMessages.swift */, - D0EC55992101ED0800D1992C /* DeleteMessages.swift */, - D01AC91C1DD5DA5E00E8160F /* RequestMessageActionCallback.swift */, - D0AB262A21C3CE80008F6685 /* Polls.swift */, - D0329EA122FC5A7C00F9F071 /* MessageReactions.swift */, - D072F356231542740009E66F /* MessageReactionList.swift */, - D01AC9201DD5E7E500E8160F /* RequestEditMessage.swift */, - D0DC354D1DE368F7000195EB /* RequestChatContextResults.swift */, - D0DC354F1DE36900000195EB /* ChatContextResult.swift */, - D0E35A0F1DE49E1C00BC6096 /* OutgoingMessageWithChatContextResult.swift */, - D01749581E1092BC0057C89A /* RequestStartBot.swift */, - D02ABC7A1E30058F00CAE539 /* DeleteMessagesInteractively.swift */, - D0AAD1A91E32638500D5B9DE /* ApplyMaxReadIndexInteractively.swift */, - D00C7CDF1E3785700080C3D5 /* MarkMessageContentAsConsumedInteractively.swift */, - C239BE961E62EE1E00C2C453 /* LoadMessagesIfNecessary.swift */, - D0528E5F1E65B94E00E2FEF5 /* SingleMessageView.swift */, - D0528E691E65DD2100E2FEF5 /* WebpagePreview.swift */, - D0FA35071EA632E400E56FFA /* CollectCacheUsageStats.swift */, - D0642EF81F3E05D700792790 /* EarliestUnseenPersonalMentionMessage.swift */, - D0DB7F021F43030C00591D48 /* InstallInteractiveReadMessagesAction.swift */, - D0B85AC41F6B2B9400B8B5CE /* RecentlyUsedHashtags.swift */, - D0E8B8B22044706300605593 /* ForwardGame.swift */, - D0119CAF20CA9EA800895300 /* MarkAllChatsAsRead.swift */, - D023E67721540624008C27D1 /* UpdateMessageMedia.swift */, - 09FC986C22FD99D400915E37 /* ScheduledMessages.swift */, - ); - name = Messages; - sourceTree = ""; - }; - D03B0E3A1D631E4400955575 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - D03B0E411D631E6600955575 /* NetworkLogging.h */, - D03B0E421D631E6600955575 /* NetworkLogging.m */, - D02609BB20C6EB97006C34AC /* Crypto.h */, - D02609BE20C6EC08006C34AC /* Crypto.m */, - D08984F72118816900918162 /* Reachability.h */, - D08984F82118816A00918162 /* Reachability.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D03E5E0A1E55E0220029569A /* Accounts */ = { - isa = PBXGroup; - children = ( - D03E5E0B1E55E02D0029569A /* LoggedOutAccountAttribute.swift */, - D00580AD21E2A08900CB7CD3 /* AccountEnvironmentAttribute.swift */, - D0D1026B2212FE52003ADA5E /* AccountSortOrderAttribute.swift */, - ); - name = Accounts; - sourceTree = ""; - }; - D04D21352306EC8700609388 /* Mac Internal Updater */ = { - isa = PBXGroup; - children = ( - D04D21362306EC9A00609388 /* MacInternalUpdater.swift */, - ); - name = "Mac Internal Updater"; - sourceTree = ""; - }; - D05A32DF1E6F096B002760B4 /* Settings */ = { - isa = PBXGroup; - children = ( - D026099D20C695AF006C34AC /* Wallpapers.swift */, - D05A32E01E6F0982002760B4 /* UpdatedAccountPrivacySettings.swift */, - D05A32E31E6F0B2E002760B4 /* RecentAccountSessions.swift */, - D0FA0ABC1E76C908005BB9B7 /* TwoStepVerification.swift */, - D0F53BE81E784A4800117362 /* ChangeAccountPhoneNumber.swift */, - 9FC8ADAA206BBFF10094F7B4 /* RecentWebSessions.swift */, - D07E413E208A769D00FCA8F0 /* ProxyServersStatuses.swift */, - D08984F12114B97400918162 /* ClearCloudDrafts.swift */, - D04554A521B43440007A6DD9 /* CancelAccountReset.swift */, - D033873F223BD48B007A2CE4 /* ContactsSettings.swift */, - D099E221229420D600561B75 /* BlockedPeersContext.swift */, - D098907E22942E3B0053F151 /* ActiveSessionsContext.swift */, - D069257022D8B526002FC021 /* SecretChatSettings.swift */, - 09B4A9B3230FB70B005C2E08 /* Themes.swift */, - ); - name = Settings; - sourceTree = ""; - }; - D06706631D512ADA00DED3E3 /* Frameworks */ = { - isa = PBXGroup; - children = ( - D0208AF32306E92B00A23503 /* libphonenumbermac.framework */, - D03E45D32305D44A0049C28B /* libphonenumber.framework */, - D03E45D02305D34C0049C28B /* libphonenumber_iOS.framework */, - D0CC4ADB22BA47280088F36D /* TelegramApiMac.framework */, - D0CC4AA322BA44960088F36D /* TelegramApi.framework */, - D035732E22B5C24F00F0920D /* TelegramApi.framework */, - D0AF32371FAE8C910097362B /* MultipeerConnectivity.framework */, - D0B4187E1D7E054E004562A4 /* MtProtoKitMac.framework */, - D0B418701D7E0409004562A4 /* PostboxMac.framework */, - D0B418711D7E0409004562A4 /* SwiftSignalKitMac.framework */, - D0CAF2E91D75EC600011F558 /* MtProtoKitDynamic.framework */, - D0AC49491D7097A400AA55DA /* SSignalKit.framework */, - D03B0E6B1D63283C00955575 /* libiconv.tbd */, - D03B0E691D63283000955575 /* libwebp.a */, - D03B0E611D63281A00955575 /* libavcodec.a */, - D03B0E621D63281A00955575 /* libavformat.a */, - D03B0E631D63281A00955575 /* libavutil.a */, - D03B0E641D63281A00955575 /* libswresample.a */, - D03B0E5F1D6327FF00955575 /* libz.tbd */, - D03B0E5D1D6327F600955575 /* SSignalKit.framework */, - D03B0E571D631EB900955575 /* CoreMedia.framework */, - D067066E1D512AEB00DED3E3 /* MtProtoKit.framework */, - D06706641D512ADB00DED3E3 /* AsyncDisplayKit.framework */, - D06706651D512ADB00DED3E3 /* Display.framework */, - D06706671D512ADB00DED3E3 /* Postbox.framework */, - D06706681D512ADB00DED3E3 /* SwiftSignalKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - D0754D281EEE10D800884F6E /* Bot Payments */ = { - isa = PBXGroup; - children = ( - D0754D291EEE10FC00884F6E /* BotPaymentForm.swift */, - ); - name = "Bot Payments"; - sourceTree = ""; - }; - D08CAA821ED816290000FDA8 /* Localization */ = { - isa = PBXGroup; - children = ( - D08CAA7F1ED80ED20000FDA8 /* SuggestedLocalizationEntry.swift */, - D08CAA831ED8164B0000FDA8 /* Localization.swift */, - D08CAA861ED81DD40000FDA8 /* LocalizationInfo.swift */, - D05D8B362192F8AF0064586F /* LocalizationListState.swift */, - 093857AA2243D88C00EB6A54 /* EmojiKeywords.swift */, - ); - name = Localization; - sourceTree = ""; - }; - D08CAA8A1ED81EA10000FDA8 /* Localization */ = { - isa = PBXGroup; - children = ( - D08CAA8B1ED81EDF0000FDA8 /* Localizations.swift */, - D081E109217F5ADE003CD921 /* LocalizationPreview.swift */, - ); - name = Localization; - sourceTree = ""; - }; - D093D7E82064135300BC3599 /* Values */ = { - isa = PBXGroup; - children = ( - D02D60A6206BA5F900FEFE1E /* SecureIdValue.swift */, - D0E412DB206A99AE00BEE4A2 /* SecureIdValueAccessContext.swift */, - D093D7ED206413F600BC3599 /* SecureIdDataTypes.swift */, - D0E412F3206B9BDC00BEE4A2 /* SecureIdVerificationDocumentReference.swift */, - D054648A2073854A002ECC1E /* SecureIdPersonalDetailsValue.swift */, - D0EE7FC020986BF400981319 /* SecureIdInternalPassportValue.swift */, - D0E412F0206B9BB700BEE4A2 /* SecureIdPassportValue.swift */, - D054648D20738626002ECC1E /* SecureIdDriversLicenseValue.swift */, - D054649020738653002ECC1E /* SecureIdIDCardValue.swift */, - D0E41300206B9E6E00BEE4A2 /* SecureIdAddressValue.swift */, - D0546493207386D7002ECC1E /* SecureIdUtilityBillValue.swift */, - D05464962073872C002ECC1E /* SecureIdBankStatementValue.swift */, - D054649920738760002ECC1E /* SecureIdRentalAgreementValue.swift */, - D093D7F420641A4900BC3599 /* SecureIdPhoneValue.swift */, - D093D7F820641AA500BC3599 /* SecureIdEmailValue.swift */, - D0EE7FC320986C5300981319 /* SecureIdPassportRegistrationValue.swift */, - D0EE7FC62098853100981319 /* SecureIdTemporaryRegistrationValue.swift */, - ); - name = Values; - sourceTree = ""; - }; - D09D8BF71D4FAB1D0081DBEC = { - isa = PBXGroup; - children = ( - D03B0E591D63215200955575 /* TelegramCore.xcconfig */, - D09D8C031D4FAB1D0081DBEC /* TelegramCore */, - D09D8C0E1D4FAB1D0081DBEC /* TelegramCoreTests */, - D0B418681D7E03D5004562A4 /* TelegramCoreMac */, - D09D8C021D4FAB1D0081DBEC /* Products */, - D06706631D512ADA00DED3E3 /* Frameworks */, - ); - sourceTree = ""; - }; - D09D8C021D4FAB1D0081DBEC /* Products */ = { - isa = PBXGroup; - children = ( - D09D8C011D4FAB1D0081DBEC /* TelegramCore.framework */, - D09D8C0A1D4FAB1D0081DBEC /* TelegramCoreTests.xctest */, - D0B418671D7E03D5004562A4 /* TelegramCoreMac.framework */, - ); - name = Products; - sourceTree = ""; - }; - D09D8C031D4FAB1D0081DBEC /* TelegramCore */ = { - isa = PBXGroup; - children = ( - D01B264723324CE600A6448B /* Wallet */, - D04D21352306EC8700609388 /* Mac Internal Updater */, - D03B0CB71D62232000955575 /* Utils */, - D03B0CCF1D62242200955575 /* Objects */, - D03B0CFE1D62252200955575 /* State */, - D03B0D111D62256B00955575 /* Media */, - D03B0D531D631A4400955575 /* Network */, - D03B0D601D631A7200955575 /* Account */, - D03B0D691D631A9200955575 /* Contacts */, - D03B0D6E1D631AA900955575 /* Messages */, - D0DF0C881D819C5F008AEB01 /* Peers */, - D0754D281EEE10D800884F6E /* Bot Payments */, - D0BE303820619E9E00FBE6D8 /* Secure ID */, - D0C50E2F1E93A83B00F62E39 /* Calls */, - D021E0E01DB5400200C6B04F /* Sticker Management */, - D05A32DF1E6F096B002760B4 /* Settings */, - D08CAA8A1ED81EA10000FDA8 /* Localization */, - D0AD02E61FFFA15C00C1DCFF /* Live Location */, - D0AF32331FAE8C540097362B /* Multipeer */, - D03B0E3A1D631E4400955575 /* Supporting Files */, - D09D8C041D4FAB1D0081DBEC /* TelegramCore.h */, - D09D8C051D4FAB1D0081DBEC /* Info.plist */, - ); - path = TelegramCore; - sourceTree = ""; - }; - D09D8C0E1D4FAB1D0081DBEC /* TelegramCoreTests */ = { - isa = PBXGroup; - children = ( - D09D8C0F1D4FAB1D0081DBEC /* TelegramCoreTests.m */, - D09D8C111D4FAB1D0081DBEC /* Info.plist */, - ); - path = TelegramCoreTests; - sourceTree = ""; - }; - D0AD02E61FFFA15C00C1DCFF /* Live Location */ = { - isa = PBXGroup; - children = ( - D0AD02E21FFFA14800C1DCFF /* PeerLiveLocationsContext.swift */, - ); - name = "Live Location"; - sourceTree = ""; - }; - D0AF32331FAE8C540097362B /* Multipeer */ = { - isa = PBXGroup; - children = ( - D0AF32341FAE8C6B0097362B /* MultipeerManager.swift */, - ); - name = Multipeer; - sourceTree = ""; - }; - D0B418681D7E03D5004562A4 /* TelegramCoreMac */ = { - isa = PBXGroup; - children = ( - D0B418691D7E03D5004562A4 /* TelegramCoreMac.h */, - D0B4186A1D7E03D5004562A4 /* Info.plist */, - ); - path = TelegramCoreMac; - sourceTree = ""; - }; - D0BE303820619E9E00FBE6D8 /* Secure ID */ = { - isa = PBXGroup; - children = ( - D0CA3F82207391450042D2B6 /* Utils */, - D0BE303C2061A29100FBE6D8 /* RequestSecureIdForm.swift */, - D0ADF910212B00DD00310BBC /* SecureIdConfiguration.swift */, - D0BE304A20627D9800FBE6D8 /* AccessSecureId.swift */, - D0BE303920619EE800FBE6D8 /* SecureIdForm.swift */, - D093D805206539D000BC3599 /* SaveSecureIdValue.swift */, - D0E412D6206A866B00BEE4A2 /* UploadSecureIdFile.swift */, - D0E412ED206AF65500BEE4A2 /* GrantSecureIdAccess.swift */, - D02D60AA206BA64100FEFE1E /* VerifySecureIdValue.swift */, - D0136308208F3B0900EB3653 /* SecureIdValueContentError.swift */, - D093D7E82064135300BC3599 /* Values */, - ); - name = "Secure ID"; - sourceTree = ""; - }; - D0C50E2F1E93A83B00F62E39 /* Calls */ = { - isa = PBXGroup; - children = ( - D0C50E331E93A86600F62E39 /* CallSessionManager.swift */, - C2F4ED1C1EC60064005F2696 /* RateCall.swift */, - ); - name = Calls; - sourceTree = ""; - }; - D0CA3F82207391450042D2B6 /* Utils */ = { - isa = PBXGroup; - children = ( - D0CA3F83207391560042D2B6 /* SecureIdPadding.swift */, - ); - name = Utils; - sourceTree = ""; - }; - D0DF0C881D819C5F008AEB01 /* Peers */ = { - isa = PBXGroup; - children = ( - D0C26D6B1FE286C3004ABF18 /* FetchChatList.swift */, - D0BC386F1E40853E0044D6FE /* UpdatePeers.swift */, - D0DF0C891D819C7E008AEB01 /* JoinChannel.swift */, - D0DF0CA71D82BF32008AEB01 /* PeerParticipants.swift */, - D099EA1B1DE72867001AF5A8 /* PeerCommands.swift */, - D0B843961DA7FBBC005F29E1 /* ChangePeerNotificationSettings.swift */, - D0F3CC7C1DDE289E008148FA /* ResolvePeerByName.swift */, - D07827BA1E00451F00071108 /* SearchPeers.swift */, - D0BC386D1E3FDAB70044D6FE /* CreateGroup.swift */, - D018D3361E648ACF00C5E089 /* ChannelCreation.swift */, - D00DBBD61E64E41100DB5485 /* CreateSecretChat.swift */, - D0BC38741E40A7F70044D6FE /* RemovePeerChat.swift */, - D0BC387A1E40D2880044D6FE /* TogglePeerChatPinned.swift */, - D049EAEA1E44B71B00A2CD3A /* RecentlySearchedPeerIds.swift */, - D050F2501E4A59C200988324 /* JoinLink.swift */, - C2366C821E4F3EAA0097CCFF /* GroupReturnAndLeft.swift */, - C2366C851E4F403C0097CCFF /* AddressNames.swift */, - D0613FC91E60440600202CDB /* InvitationLinks.swift */, - C2366C881E4F40480097CCFF /* SupportPeerId.swift */, - D0BB7C591E5C8074001527C3 /* ChannelParticipants.swift */, - D041E3F41E535464008C24B4 /* AddPeerMember.swift */, - D041E3F71E535A88008C24B4 /* RemovePeerMember.swift */, - D0561DE21E5737FC00E6B9E9 /* UpdatePeerInfo.swift */, - D0561DE91E5754FA00E6B9E9 /* ChannelAdmins.swift */, - D0613FCE1E60520700202CDB /* ChannelMembers.swift */, - D0E305A91E5BA02D00D7A3A2 /* ChannelBlacklist.swift */, - D0E305A61E5B5CBE00D7A3A2 /* PeerAdmins.swift */, - D0613FD61E606B3B00202CDB /* ConvertGroupToSupergroup.swift */, - D033FEB21E61F3C000644997 /* ReportPeer.swift */, - D033FEB51E61F3F900644997 /* BlockedPeers.swift */, - C239BE9B1E630CA700C2C453 /* UpdatePinnedMessage.swift */, - D0528E641E65C82400E2FEF5 /* UpdateContactName.swift */, - C22EE61A1E67418000334C38 /* ToggleChannelSignatures.swift */, - C2FD33E01E680E9E008D13D4 /* RequestUserPhotos.swift */, - C2FD33E31E687BF1008D13D4 /* PeerPhotoUpdater.swift */, - C2FD33EA1E696C78008D13D4 /* GroupsInCommon.swift */, - D0C48F3B1E8142EF0075317D /* LoadedPeerFromMessage.swift */, - D0F3A8A71E82CD7D00B4C64C /* UpdatePeerChatInterfaceState.swift */, - C23BC3861E9BE3CA00D79F92 /* ImportContact.swift */, - C205FEA71EB3B75900455808 /* ExportMessageLink.swift */, - C230BEB51EE9A3760029586C /* ChannelAdminEventLogs.swift */, - D0E817482010E7E300B82BBB /* ChannelAdminEventLogContext.swift */, - D0A472B51F4CBE8B00E0EEDA /* LoadedPeer.swift */, - D0DA1D311F7043D50034E892 /* ManagedPendingPeerNotificationSettings.swift */, - D02395D51F8D09A50070F5C2 /* ChannelHistoryAvailabilitySettings.swift */, - D0C44B601FC616E200227BE0 /* SearchGroupMembers.swift */, - D018EE042045E95000CBB130 /* CheckPeerChatServiceActions.swift */, - 9F06830F21A40DEC001D8EDB /* NotificationExceptionsList.swift */, - D0F760D722202FE20074F7E5 /* ChannelStats.swift */, - D0633CD12253A528003DD95F /* ChatOnlineMembers.swift */, - D015E00D225CA61100CB9E8A /* FindChannelById.swift */, - D076F8882296D8E9004F895A /* ManageChannelDiscussionGroup.swift */, - 090E778222A9862100CD99F5 /* ChannelOwnershipTransfer.swift */, - 090E778F22AAABC600CD99F5 /* PeersNearby.swift */, - D0D376E522DCCFD600FA7D7C /* SlowMode.swift */, - D03E416B2304D5B30049C28B /* ValidateAddressNameInteractive.swift */, - ); - name = Peers; - sourceTree = ""; - }; - D0FA8B961E1E952D001E855B /* Secret Chats */ = { - isa = PBXGroup; - children = ( - D0FA8BA31E1FA341001E855B /* SecretChatKeychain.swift */, - D0177B7A1DF8A16C00A5083A /* SecretChatState.swift */, - D0FA8BAF1E1FEC7E001E855B /* SecretChatEncryptionConfig.swift */, - D0448C901E251F96005A61A7 /* SecretChatEncryption.swift */, - D0FA8B9D1E1F973B001E855B /* SecretChatIncomingEncryptedOperation.swift */, - D0FA8BB81E2240B4001E855B /* SecretChatIncomingDecryptedOperation.swift */, - D0FA8B971E1E955C001E855B /* SecretChatOutgoingOperation.swift */, - D0FA8BA01E1F99E1001E855B /* SecretChatFileReference.swift */, - D0FA8BB21E201B02001E855B /* ProcessSecretChatIncomingEncryptedOperations.swift */, - D0448C8D1E22993C005A61A7 /* ProcessSecretChatIncomingDecryptedOperations.swift */, - D0FA8BA91E1FB76E001E855B /* ManagedSecretChatOutgoingOperations.swift */, - D019B1CB1E2E3B6A00F80DB3 /* SecretChatRekeySession.swift */, - D00C7CEA1E37A8540080C3D5 /* SetSecretChatMessageAutoremoveTimeoutInteractively.swift */, - D018EE0120458E1E00CBB130 /* SecretChatLayerNegotiation.swift */, - ); - name = "Secret Chats"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - D09D8BFE1D4FAB1D0081DBEC /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E45D82305D66D0049C28B /* Crypto.h in Headers */, - D03B0E431D631E6600955575 /* NetworkLogging.h in Headers */, - D09D8C121D4FAB1D0081DBEC /* TelegramCore.h in Headers */, - D03E452E2305C15A0049C28B /* FormatPhoneNumber.h in Headers */, - D08984F92118816A00918162 /* Reachability.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0B418641D7E03D5004562A4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E45D92305D66E0049C28B /* Crypto.h in Headers */, - D0B4186B1D7E03D5004562A4 /* TelegramCoreMac.h in Headers */, - D0B418BB1D7E05BE004562A4 /* NetworkLogging.h in Headers */, - D08984FA2118816A00918162 /* Reachability.h in Headers */, - D03E45302305C1630049C28B /* FormatPhoneNumber.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - D09D8C001D4FAB1D0081DBEC /* TelegramCore */ = { - isa = PBXNativeTarget; - buildConfigurationList = D09D8C151D4FAB1D0081DBEC /* Build configuration list for PBXNativeTarget "TelegramCore" */; - buildPhases = ( - D09D8BFC1D4FAB1D0081DBEC /* Sources */, - D09D8BFD1D4FAB1D0081DBEC /* Frameworks */, - D09D8BFE1D4FAB1D0081DBEC /* Headers */, - D09D8BFF1D4FAB1D0081DBEC /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = TelegramCore; - productName = TelegramCore; - productReference = D09D8C011D4FAB1D0081DBEC /* TelegramCore.framework */; - productType = "com.apple.product-type.framework"; - }; - D09D8C091D4FAB1D0081DBEC /* TelegramCoreTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = D09D8C181D4FAB1D0081DBEC /* Build configuration list for PBXNativeTarget "TelegramCoreTests" */; - buildPhases = ( - D09D8C061D4FAB1D0081DBEC /* Sources */, - D09D8C071D4FAB1D0081DBEC /* Frameworks */, - D09D8C081D4FAB1D0081DBEC /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - D09D8C0D1D4FAB1D0081DBEC /* PBXTargetDependency */, - ); - name = TelegramCoreTests; - productName = TelegramCoreTests; - productReference = D09D8C0A1D4FAB1D0081DBEC /* TelegramCoreTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - D0B418661D7E03D5004562A4 /* TelegramCoreMac */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0B4186C1D7E03D5004562A4 /* Build configuration list for PBXNativeTarget "TelegramCoreMac" */; - buildPhases = ( - D0B418621D7E03D5004562A4 /* Sources */, - D0B418631D7E03D5004562A4 /* Frameworks */, - D0B418641D7E03D5004562A4 /* Headers */, - D0B418651D7E03D5004562A4 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = TelegramCoreMac; - productName = TelegramCoreMac; - productReference = D0B418671D7E03D5004562A4 /* TelegramCoreMac.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D09D8BF81D4FAB1D0081DBEC /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0800; - ORGANIZATIONNAME = Peter; - TargetAttributes = { - D09D8C001D4FAB1D0081DBEC = { - CreatedOnToolsVersion = 8.0; - DevelopmentTeam = X834Q8SBVP; - DevelopmentTeamName = "TELEGRAM MESSENGER LLP"; - LastSwiftMigration = 0800; - ProvisioningStyle = Manual; - }; - D09D8C091D4FAB1D0081DBEC = { - CreatedOnToolsVersion = 8.0; - DevelopmentTeam = X834Q8SBVP; - DevelopmentTeamName = "TELEGRAM MESSENGER LLP"; - ProvisioningStyle = Automatic; - }; - D0B418661D7E03D5004562A4 = { - CreatedOnToolsVersion = 8.0; - ProvisioningStyle = Manual; - }; - }; - }; - buildConfigurationList = D09D8BFB1D4FAB1D0081DBEC /* Build configuration list for PBXProject "TelegramCore_Xcode" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - en, - ); - mainGroup = D09D8BF71D4FAB1D0081DBEC; - productRefGroup = D09D8C021D4FAB1D0081DBEC /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - D09D8C001D4FAB1D0081DBEC /* TelegramCore */, - D09D8C091D4FAB1D0081DBEC /* TelegramCoreTests */, - D0B418661D7E03D5004562A4 /* TelegramCoreMac */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - D09D8BFF1D4FAB1D0081DBEC /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D09D8C081D4FAB1D0081DBEC /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0B418651D7E03D5004562A4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - D09D8BFC1D4FAB1D0081DBEC /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D00DBBD71E64E41100DB5485 /* CreateSecretChat.swift in Sources */, - C2FD33EB1E696C78008D13D4 /* GroupsInCommon.swift in Sources */, - D0FA8BB01E1FEC7E001E855B /* SecretChatEncryptionConfig.swift in Sources */, - 09FC986B22FD882200915E37 /* OutgoingScheduleInfoMessageAttribute.swift in Sources */, - D021E0DF1DB539FC00C6B04F /* StickerPack.swift in Sources */, - D03B0D091D62255C00955575 /* EnqueueMessage.swift in Sources */, - D0CA8E4B227209C4008A74C3 /* ManagedSynchronizeGroupMessageStats.swift in Sources */, - D0DFD5DF1FCDBCFD0039B3B1 /* CachedSentMediaReferences.swift in Sources */, - D093D7EE206413F600BC3599 /* SecureIdDataTypes.swift in Sources */, - D00D343C1E6EC9770057B307 /* TelegramMediaGame.swift in Sources */, - D033FEB01E61EB0200644997 /* PeerContactSettings.swift in Sources */, - D050F2511E4A59C200988324 /* JoinLink.swift in Sources */, - 09FC986D22FD99D400915E37 /* ScheduledMessages.swift in Sources */, - D07827C91E02F59C00071108 /* InstantPage.swift in Sources */, - D0458C881E69B4AB00FB34C1 /* OutgoingContentInfoMessageAttribute.swift in Sources */, - D07827CB1E02F5B200071108 /* RichText.swift in Sources */, - D0613FD71E606B3B00202CDB /* ConvertGroupToSupergroup.swift in Sources */, - D0E412F4206B9BDC00BEE4A2 /* SecureIdVerificationDocumentReference.swift in Sources */, - D0A3E447214802C7008ACEF6 /* VoipConfiguration.swift in Sources */, - D00D34451E6EDD420057B307 /* SynchronizeConsumeMessageContentsOperation.swift in Sources */, - D02D60AB206BA64100FEFE1E /* VerifySecureIdValue.swift in Sources */, - D00D343F1E6ED6E50057B307 /* ConsumableContentMessageAttribute.swift in Sources */, - 090E778322A9862100CD99F5 /* ChannelOwnershipTransfer.swift in Sources */, - D03E3D28230447960049C28B /* RestrictedContentMessageAttribute.swift in Sources */, - D03B0CE01D62249100955575 /* StoreMessage_Telegram.swift in Sources */, - D03E416C2304D5B30049C28B /* ValidateAddressNameInteractive.swift in Sources */, - D08774FE1E3E3A3500A97350 /* GlobalNotificationSettings.swift in Sources */, - 09B4A9B6230FBB2B005C2E08 /* Theme.swift in Sources */, - D023E67821540624008C27D1 /* UpdateMessageMedia.swift in Sources */, - D0EE7FC420986C5300981319 /* SecureIdPassportRegistrationValue.swift in Sources */, - D03B0CB91D62233400955575 /* Either.swift in Sources */, - D0D748021E7AE98B00F4B1F6 /* StickerPackInteractiveOperations.swift in Sources */, - 0962E66D21B5C56F00245FD9 /* JSON.swift in Sources */, - D0338740223BD48B007A2CE4 /* ContactsSettings.swift in Sources */, - D03B0CBD1D62234300955575 /* Regex.swift in Sources */, - 09B4A9B4230FB70B005C2E08 /* Themes.swift in Sources */, - D00BDA191EE593D600C64C5E /* TelegramChannelAdminRights.swift in Sources */, - 09EDAD3A22131D010012A50B /* ManagedAutodownloadSettingsUpdates.swift in Sources */, - D0EA188220D3D2B1001AEE19 /* RemoteStorageConfiguration.swift in Sources */, - D09A2FE61D7CD4940018FB72 /* TelegramChannel.swift in Sources */, - D03B0D0E1D62255C00955575 /* UpdateGroup.swift in Sources */, - D053B4181F18DE4F00E2D58A /* AuthorSignatureMessageAttribute.swift in Sources */, - D0F3A89F1E82C65400B4C64C /* SynchronizeChatInputStateOperation.swift in Sources */, - D01AC9231DD5E9A200E8160F /* ApplyUpdateMessage.swift in Sources */, - D0E8B8B32044706300605593 /* ForwardGame.swift in Sources */, - D0BE303D2061A29100FBE6D8 /* RequestSecureIdForm.swift in Sources */, - D01A21AC1F38D10E00DDA104 /* SavedStickerItem.swift in Sources */, - D0642EF91F3E05D700792790 /* EarliestUnseenPersonalMentionMessage.swift in Sources */, - D03B0CF71D62250800955575 /* TelegramMediaImage.swift in Sources */, - D054648E20738626002ECC1E /* SecureIdDriversLicenseValue.swift in Sources */, - C210DD621FBDB90800F673D8 /* SourceReferenceMessageAttribute.swift in Sources */, - D06ECFC820B810D300C576C2 /* TermsOfService.swift in Sources */, - D0E23DDF1E8082A400B9B6D2 /* ArchivedStickerPacks.swift in Sources */, - D0546494207386D7002ECC1E /* SecureIdUtilityBillValue.swift in Sources */, - D0BC386E1E3FDAB70044D6FE /* CreateGroup.swift in Sources */, - D0FA8BB31E201B02001E855B /* ProcessSecretChatIncomingEncryptedOperations.swift in Sources */, - D098907F22942E3B0053F151 /* ActiveSessionsContext.swift in Sources */, - D026099E20C695AF006C34AC /* Wallpapers.swift in Sources */, - C205FEA81EB3B75900455808 /* ExportMessageLink.swift in Sources */, - D0E305AA1E5BA02D00D7A3A2 /* ChannelBlacklist.swift in Sources */, - D0EE7FC72098853100981319 /* SecureIdTemporaryRegistrationValue.swift in Sources */, - C22EE61B1E67418000334C38 /* ToggleChannelSignatures.swift in Sources */, - 090E779022AAABC600CD99F5 /* PeersNearby.swift in Sources */, - D073CE601DCB9D14007511FD /* OutgoingMessageInfoAttribute.swift in Sources */, - D0AAD1A81E32602500D5B9DE /* AutoremoveTimeoutMessageAttribute.swift in Sources */, - C2366C831E4F3EAA0097CCFF /* GroupReturnAndLeft.swift in Sources */, - 0900555621E4A96E0030924C /* Wallpaper.swift in Sources */, - C230BEB61EE9A3760029586C /* ChannelAdminEventLogs.swift in Sources */, - D0136309208F3B0900EB3653 /* SecureIdValueContentError.swift in Sources */, - D03B0D3D1D6319E200955575 /* Fetch.swift in Sources */, - D02D60A7206BA5F900FEFE1E /* SecureIdValue.swift in Sources */, - D0DF0C931D81AD09008AEB01 /* MessageUtils.swift in Sources */, - D03B0D681D631A8B00955575 /* RecentPeers.swift in Sources */, - D0DF0CA81D82BF32008AEB01 /* PeerParticipants.swift in Sources */, - D0FA8BA71E1FA6DF001E855B /* TelegramSecretChat.swift in Sources */, - D03B0D5F1D631A6900955575 /* Serialization.swift in Sources */, - D093D7F920641AA500BC3599 /* SecureIdEmailValue.swift in Sources */, - D0C44B611FC616E200227BE0 /* SearchGroupMembers.swift in Sources */, - D0467D1520D7F2C90055C28F /* ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift in Sources */, - D03B0D441D6319F900955575 /* CloudFileMediaResource.swift in Sources */, - D018D3371E648ACF00C5E089 /* ChannelCreation.swift in Sources */, - D01AC9211DD5E7E500E8160F /* RequestEditMessage.swift in Sources */, - D069257122D8B526002FC021 /* SecretChatSettings.swift in Sources */, - D0AF32221FAC95C20097362B /* StandaloneUploadedMedia.swift in Sources */, - D0F53BE91E784A4800117362 /* ChangeAccountPhoneNumber.swift in Sources */, - D0E35A0E1DE4953E00BC6096 /* FetchHttpResource.swift in Sources */, - D01AC91D1DD5DA5E00E8160F /* RequestMessageActionCallback.swift in Sources */, - D00C7CEB1E37A8540080C3D5 /* SetSecretChatMessageAutoremoveTimeoutInteractively.swift in Sources */, - D09BB6B61DB0428000A905C0 /* PendingMessageUploadedContent.swift in Sources */, - D0439B5D228ECB270067E026 /* RequestPhoneNumber.swift in Sources */, - D05D8B372192F8AF0064586F /* LocalizationListState.swift in Sources */, - D0F3CC7D1DDE289E008148FA /* ResolvePeerByName.swift in Sources */, - D0AB0B921D65E9FA002C78E7 /* ManagedServiceViews.swift in Sources */, - D0DB7F031F43030C00591D48 /* InstallInteractiveReadMessagesAction.swift in Sources */, - D0A472B61F4CBE8B00E0EEDA /* LoadedPeer.swift in Sources */, - D0AAD1B81E326FE200D5B9DE /* ManagedAutoremoveMessageOperations.swift in Sources */, - D01A21A91F38CDDC00DDA104 /* ManagedSynchronizeSavedStickersOperations.swift in Sources */, - D0338743223BD532007A2CE4 /* InitializeAccountAfterLogin.swift in Sources */, - D099EA1C1DE72867001AF5A8 /* PeerCommands.swift in Sources */, - D03B0CCE1D62239600955575 /* PhoneNumbers.swift in Sources */, - D00DBBDA1E64E67E00DB5485 /* UpdateSecretChat.swift in Sources */, - D0E23DD51E8042F500B9B6D2 /* FeaturedStickerPack.swift in Sources */, - D0FA8B981E1E955C001E855B /* SecretChatOutgoingOperation.swift in Sources */, - D0754D2A1EEE10FC00884F6E /* BotPaymentForm.swift in Sources */, - D0DF0C911D81A857008AEB01 /* ImageRepresentationsUtils.swift in Sources */, - D08CAA8C1ED81EDF0000FDA8 /* Localizations.swift in Sources */, - D0E6521F1E3A364A004EEA91 /* UpdateAccountPeerName.swift in Sources */, - D0F3A8A21E82C65E00B4C64C /* ManagedSynchronizeChatInputStateOperations.swift in Sources */, - D0439B60228EDE430067E026 /* ContentRequiresValidationMessageAttribute.swift in Sources */, - D01C7ED61EF5E468008305F1 /* ProxySettings.swift in Sources */, - D049EAE81E44B67100A2CD3A /* RecentPeerItem.swift in Sources */, - D02ABC7B1E30058F00CAE539 /* DeleteMessagesInteractively.swift in Sources */, - C2E064681ECEEF0A00387BB8 /* TelegramMediaInvoice.swift in Sources */, - D0448C9F1E27F5EB005A61A7 /* Random.swift in Sources */, - D0C27B3F1F4B51D000A4E170 /* CachedStickerPack.swift in Sources */, - D0A8998F217A37A000759EE6 /* NotificationAutolockReportManager.swift in Sources */, - D07047B71F3DF2CD00F6A8D4 /* ManagedConsumePersonalMessagesActions.swift in Sources */, - D03B0CDB1D62245F00955575 /* ApiUtils.swift in Sources */, - D08CAA801ED80ED20000FDA8 /* SuggestedLocalizationEntry.swift in Sources */, - D03B0CE61D6224A700955575 /* ReplyMessageAttribute.swift in Sources */, - D0D1026C2212FE52003ADA5E /* AccountSortOrderAttribute.swift in Sources */, - D0BEAF601E54ACF900BD963D /* AccountManager.swift in Sources */, - D0FA0ABD1E76C908005BB9B7 /* TwoStepVerification.swift in Sources */, - D02ABC7E1E3109F000CAE539 /* CloudChatRemoveMessagesOperation.swift in Sources */, - D0E412E1206AB24700BEE4A2 /* SecureFileMediaResource.swift in Sources */, - D0ADF911212B00DD00310BBC /* SecureIdConfiguration.swift in Sources */, - D0448CA51E29215A005A61A7 /* MediaResourceApiUtils.swift in Sources */, - D0C26D661FE022DB004ABF18 /* SynchronizeGroupedPeersOperation.swift in Sources */, - D01843A82190C28100278AFF /* ConfirmTwoStepRecoveryEmail.swift in Sources */, - D03C53771DAFF20F004C17B3 /* MultipartUpload.swift in Sources */, - D00C7CE01E3785710080C3D5 /* MarkMessageContentAsConsumedInteractively.swift in Sources */, - C2E0646D1ECF171D00387BB8 /* TelegramMediaWebDocument.swift in Sources */, - D0B843811DA6EDAE005F29E1 /* CachedUserData.swift in Sources */, - D049EAD51E43D98500A2CD3A /* RecentMediaItem.swift in Sources */, - D0C50E341E93A86600F62E39 /* CallSessionManager.swift in Sources */, - D00D34421E6EDD2E0057B307 /* ManagedSynchronizeConsumeMessageContentsOperations.swift in Sources */, - D08984FB2118816A00918162 /* Reachability.m in Sources */, - D0DA1D321F7043D50034E892 /* ManagedPendingPeerNotificationSettings.swift in Sources */, - 0925903722F0D02D003D6283 /* ManagedAnimatedEmojiUpdates.swift in Sources */, - D099D7491EEF418D00A3128C /* HistoryViewStateValidation.swift in Sources */, - C23BC3871E9BE3CA00D79F92 /* ImportContact.swift in Sources */, - D0D376E622DCCFD600FA7D7C /* SlowMode.swift in Sources */, - D00422D321677F4500719B67 /* ManagedAccountPresence.swift in Sources */, - D03B0D0A1D62255C00955575 /* Holes.swift in Sources */, - D05464972073872C002ECC1E /* SecureIdBankStatementValue.swift in Sources */, - D0633CDB2253C0D3003DD95F /* CloudMediaResourceParameters.swift in Sources */, - 0962E67521B6437600245FD9 /* SplitTest.swift in Sources */, - D03B0D5E1D631A6900955575 /* Network.swift in Sources */, - D0B8438E1DA7D296005F29E1 /* CachedGroupParticipants.swift in Sources */, - D03B0CF51D62250800955575 /* TelegramMediaContact.swift in Sources */, - D03B0CFB1D62250800955575 /* TelegramMediaWebpage.swift in Sources */, - 0962E66B21B5A41C00245FD9 /* ManagedSynchronizeAppLogEventsOperations.swift in Sources */, - D09A2FEB1D7CDC320018FB72 /* PeerAccessRestrictionInfo.swift in Sources */, - D0E35A101DE49E1C00BC6096 /* OutgoingMessageWithChatContextResult.swift in Sources */, - D0E23DDA1E806F7700B9B6D2 /* ManagedSynchronizeMarkFeaturedStickerPacksAsSeenOperations.swift in Sources */, - D049EAD81E43DAD200A2CD3A /* ManagedRecentStickers.swift in Sources */, - D0BE303A20619EE800FBE6D8 /* SecureIdForm.swift in Sources */, - D03DC9131F82F89D001D584C /* RegularChatState.swift in Sources */, - D04D213C230AC35A00609388 /* WasScheduledMessageAttribute.swift in Sources */, - 0962E66721B59BAA00245FD9 /* ManagedAppConfigurationUpdates.swift in Sources */, - D0613FCF1E60520700202CDB /* ChannelMembers.swift in Sources */, - D0B2F7742052DEF700D3BFB9 /* TelegramDeviceContactImportInfo.swift in Sources */, - C2366C891E4F40480097CCFF /* SupportPeerId.swift in Sources */, - D0AF32351FAE8C6B0097362B /* MultipeerManager.swift in Sources */, - D05A32E11E6F0982002760B4 /* UpdatedAccountPrivacySettings.swift in Sources */, - 0962E68121BAA20E00245FD9 /* SearchBotsConfiguration.swift in Sources */, - D003702B1DA42586004308D3 /* PhoneNumber.swift in Sources */, - D015E00E225CA61100CB9E8A /* FindChannelById.swift in Sources */, - D00BDA1C1EE5952A00C64C5E /* TelegramChannelBannedRights.swift in Sources */, - D03B0CF91D62250800955575 /* TelegramMediaMap.swift in Sources */, - D0E412E7206ABC7500BEE4A2 /* EncryptedMediaResource.swift in Sources */, - D0AB262621C2F991008F6685 /* TelegramMediaPoll.swift in Sources */, - D0BC38791E40BAF20044D6FE /* SynchronizePinnedChatsOperation.swift in Sources */, - D0750C9022B2FD8300BE5F6E /* PeerAccessHash.swift in Sources */, - D0FC195B2020D1CA00FEDBB2 /* PeerGroupMessageStateVersionAttribute.swift in Sources */, - D0B1671D1F9EA2C300976B40 /* ChatHistoryPreloadManager.swift in Sources */, - D02B199021FB1D520094A764 /* RegisterNotificationToken.swift in Sources */, - D050F2101E48AB0600988324 /* InteractivePhoneFormatter.swift in Sources */, - D0C48F3C1E8142EF0075317D /* LoadedPeerFromMessage.swift in Sources */, - D042C6831E8D9DF800C863B0 /* Unixtime.swift in Sources */, - D0C0B58A1ED9DA6B000F4D2C /* ManagedLocalizationUpdatesOperations.swift in Sources */, - D0EE7FC120986BF400981319 /* SecureIdInternalPassportValue.swift in Sources */, - D03B0D671D631A8B00955575 /* AccountViewTracker.swift in Sources */, - D0AB262B21C3CE80008F6685 /* Polls.swift in Sources */, - D0E412EA206AD18E00BEE4A2 /* DecryptedResourceData.swift in Sources */, - D03B0D101D62255C00955575 /* UpdatesApiUtils.swift in Sources */, - D0F7AB2C1DCE889D009AD9A1 /* EditedMessageAttribute.swift in Sources */, - D0FA8BAA1E1FB76E001E855B /* ManagedSecretChatOutgoingOperations.swift in Sources */, - D00D97C71E32901700E5C2B6 /* PeerInputActivity.swift in Sources */, - D0FA8BAD1E1FD6E2001E855B /* MemoryBufferExtensions.swift in Sources */, - D03B0CBF1D62234A00955575 /* Log.swift in Sources */, - C2FD33E41E687BF1008D13D4 /* PeerPhotoUpdater.swift in Sources */, - D0F8C3A02017AF2700236FC5 /* GlobalTelegramCoreConfiguration.swift in Sources */, - D01C06B71FBBA269001561AB /* CanSendMessagesToPeer.swift in Sources */, - D03E452F2305C15A0049C28B /* FormatPhoneNumber.m in Sources */, - D0EC559A2101ED0800D1992C /* DeleteMessages.swift in Sources */, - D02DADC12139A1FC00116225 /* ContactSyncManager.swift in Sources */, - D0C26D691FE02402004ABF18 /* ManagedSynchronizeGroupedPeersOperations.swift in Sources */, - D03B0CD61D62245300955575 /* TelegramUser.swift in Sources */, - D02395D61F8D09A50070F5C2 /* ChannelHistoryAvailabilitySettings.swift in Sources */, - D019B1CC1E2E3B6A00F80DB3 /* SecretChatRekeySession.swift in Sources */, - D081E10A217F5ADE003CD921 /* LocalizationPreview.swift in Sources */, - 09028386218E5DBB0067EFBD /* ManagedVoipConfigurationUpdates.swift in Sources */, - D03B0CD91D62245B00955575 /* PeerUtils.swift in Sources */, - D0F19F6620E6620D00EEC860 /* MultiplexedRequestManager.swift in Sources */, - D053B41B1F18DEF500E2D58A /* TelegramMediaExpiredContent.swift in Sources */, - D03B0CE41D62249F00955575 /* TextEntitiesMessageAttribute.swift in Sources */, - D0FA35081EA632E400E56FFA /* CollectCacheUsageStats.swift in Sources */, - D049EAEB1E44B71B00A2CD3A /* RecentlySearchedPeerIds.swift in Sources */, - D03B0CD31D62244300955575 /* Namespaces.swift in Sources */, - D01D6BF91E42A713006151C6 /* SearchStickers.swift in Sources */, - D08F4A691E79CECB00A2AA15 /* ManagedSynchronizeInstalledStickerPacksOperations.swift in Sources */, - D0575AF11E9FFA5D006F2541 /* SynchronizeSavedGifsOperation.swift in Sources */, - D07047B41F3DF1FE00F6A8D4 /* ConsumablePersonalMentionMessageAttribute.swift in Sources */, - D0119CB020CA9EA800895300 /* MarkAllChatsAsRead.swift in Sources */, - D099E222229420D600561B75 /* BlockedPeersContext.swift in Sources */, - D0FA8BB91E2240B4001E855B /* SecretChatIncomingDecryptedOperation.swift in Sources */, - D0561DE31E5737FC00E6B9E9 /* UpdatePeerInfo.swift in Sources */, - D0DF0C8A1D819C7E008AEB01 /* JoinChannel.swift in Sources */, - D051DB14215EC5A300F30F92 /* AppChangelogState.swift in Sources */, - D0329EA222FC5A7C00F9F071 /* MessageReactions.swift in Sources */, - D04554A621B43440007A6DD9 /* CancelAccountReset.swift in Sources */, - D04CAA5A1E83310D0047E51F /* MD5.swift in Sources */, - D0E817492010E7E300B82BBB /* ChannelAdminEventLogContext.swift in Sources */, - D05452071E7B5093006EEF19 /* LoadedStickerPack.swift in Sources */, - D01C7F041EFC1C49008305F1 /* DeviceContact.swift in Sources */, - D0E412D7206A866B00BEE4A2 /* UploadSecureIdFile.swift in Sources */, - D0F7AB2F1DCF507E009AD9A1 /* ReplyMarkupMessageAttribute.swift in Sources */, - D0AD02E31FFFA14800C1DCFF /* PeerLiveLocationsContext.swift in Sources */, - D0B843971DA7FBBC005F29E1 /* ChangePeerNotificationSettings.swift in Sources */, - D0448CA21E291B14005A61A7 /* FetchSecretFileResource.swift in Sources */, - D08CAA871ED81DD40000FDA8 /* LocalizationInfo.swift in Sources */, - D033FEB61E61F3F900644997 /* BlockedPeers.swift in Sources */, - D00C7CCC1E3620C30080C3D5 /* CachedChannelParticipants.swift in Sources */, - D09BB6B41DB02C2B00A905C0 /* PendingMessageManager.swift in Sources */, - D093D7F520641A4900BC3599 /* SecureIdPhoneValue.swift in Sources */, - D0B167231F9F972E00976B40 /* LoggingSettings.swift in Sources */, - D0BC387B1E40D2880044D6FE /* TogglePeerChatPinned.swift in Sources */, - D0BB7C5A1E5C8074001527C3 /* ChannelParticipants.swift in Sources */, - D0448C8E1E22993C005A61A7 /* ProcessSecretChatIncomingDecryptedOperations.swift in Sources */, - D0448C911E251F96005A61A7 /* SecretChatEncryption.swift in Sources */, - D0FA8BA11E1F99E1001E855B /* SecretChatFileReference.swift in Sources */, - D0223A981EA564BD00211D94 /* MediaResourceNetworkStatsTag.swift in Sources */, - D07827BB1E00451F00071108 /* SearchPeers.swift in Sources */, - 9FC8ADAB206BBFF10094F7B4 /* RecentWebSessions.swift in Sources */, - D0DC354E1DE368F7000195EB /* RequestChatContextResults.swift in Sources */, - D0BC38771E40BAAA0044D6FE /* ManagedSynchronizePinnedChatsOperations.swift in Sources */, - D0B843851DA6EDC4005F29E1 /* CachedChannelData.swift in Sources */, - C29340F31F5080FA0074991E /* UpdateGroupSpecificStickerset.swift in Sources */, - D01C7ED31EF5DF83008305F1 /* LimitsConfiguration.swift in Sources */, - 9F06831021A40DEC001D8EDB /* NotificationExceptionsList.swift in Sources */, - D0F02CE51E9926C40065DEE2 /* ManagedConfigurationUpdates.swift in Sources */, - D0528E6A1E65DD2100E2FEF5 /* WebpagePreview.swift in Sources */, - D0BE304B20627D9800FBE6D8 /* AccessSecureId.swift in Sources */, - D0BEAF5D1E54941B00BD963D /* Authorization.swift in Sources */, - D0C26D6C1FE286C3004ABF18 /* FetchChatList.swift in Sources */, - C28D3CF020D3DA900027F4D6 /* DeepLinkInfo.swift in Sources */, - D0B843831DA6EDB8005F29E1 /* CachedGroupData.swift in Sources */, - D0E35A121DE4A25E00BC6096 /* OutgoingChatContextResultMessageAttribute.swift in Sources */, - D093D806206539D000BC3599 /* SaveSecureIdValue.swift in Sources */, - C239BE9C1E630CA700C2C453 /* UpdatePinnedMessage.swift in Sources */, - D032F5BC20EF84FD00037B6C /* FetchedMediaResource.swift in Sources */, - D08CAA7D1ED77EE90000FDA8 /* LocalizationSettings.swift in Sources */, - D0B844531DAC0773005F29E1 /* TelegramUserPresence.swift in Sources */, - D08F4A661E79CC4A00A2AA15 /* SynchronizeInstalledStickerPacksOperations.swift in Sources */, - D05A32E71E6F0B5C002760B4 /* RecentAccountSession.swift in Sources */, - D0329EA522FC5A9600F9F071 /* ReactionsMessageAttribute.swift in Sources */, - D0E41301206B9E6E00BEE4A2 /* SecureIdAddressValue.swift in Sources */, - D0B843871DA6F705005F29E1 /* UpdateCachedPeerData.swift in Sources */, - D0E412F1206B9BB700BEE4A2 /* SecureIdPassportValue.swift in Sources */, - D03B0D6D1D631AA300955575 /* ContactManagement.swift in Sources */, - 09EC0DE922C6825D00E7185B /* AppUpdate.swift in Sources */, - D03B0D0F1D62255C00955575 /* UpdateMessageService.swift in Sources */, - D03B0CF61D62250800955575 /* TelegramMediaFile.swift in Sources */, - D03B0CE81D6224AD00955575 /* ViewCountMessageAttribute.swift in Sources */, - D0FA35051EA6135D00E56FFA /* CacheStorageSettings.swift in Sources */, - D03B0D0C1D62255C00955575 /* AccountStateManagementUtils.swift in Sources */, - D0633CD22253A528003DD95F /* ChatOnlineMembers.swift in Sources */, - D073CE5D1DCB97F6007511FD /* ForwardSourceInfoAttribute.swift in Sources */, - D0FA8B9E1E1F973B001E855B /* SecretChatIncomingEncryptedOperation.swift in Sources */, - D0561DEA1E5754FA00E6B9E9 /* ChannelAdmins.swift in Sources */, - D099D7461EEF0C2700A3128C /* ChannelMessageStateVersionAttribute.swift in Sources */, - D0E412DC206A99AE00BEE4A2 /* SecureIdValueAccessContext.swift in Sources */, - D0467D0B20D7F1E60055C28F /* SynchronizeMarkAllUnseenPersonalMessagesOperation.swift in Sources */, - D0613FCA1E60440600202CDB /* InvitationLinks.swift in Sources */, - D03B0D721D631ABA00955575 /* SearchMessages.swift in Sources */, - 093857A92243D87900EB6A54 /* SynchronizeEmojiKeywordsOperation.swift in Sources */, - D0DC35501DE36900000195EB /* ChatContextResult.swift in Sources */, - D00580AE21E2A08900CB7CD3 /* AccountEnvironmentAttribute.swift in Sources */, - D00D34391E6EC9520057B307 /* TeleramMediaUnsupported.swift in Sources */, - D00D97CA1E32917C00E5C2B6 /* PeerInputActivityManager.swift in Sources */, - 093857AB2243D88D00EB6A54 /* EmojiKeywords.swift in Sources */, - C2FD33E11E680E9E008D13D4 /* RequestUserPhotos.swift in Sources */, - D0177B7B1DF8A16C00A5083A /* SecretChatState.swift in Sources */, - D0AAD1AA1E32638500D5B9DE /* ApplyMaxReadIndexInteractively.swift in Sources */, - D03B0D5C1D631A6900955575 /* Download.swift in Sources */, - D0C27B421F4B58C000A4E170 /* PeerSpecificStickerPack.swift in Sources */, - D054648B2073854A002ECC1E /* SecureIdPersonalDetailsValue.swift in Sources */, - D01749591E1092BC0057C89A /* RequestStartBot.swift in Sources */, - D06CA13522772EB20094E707 /* ManagedNotificationSettingsBehaviors.swift in Sources */, - D03DC9101F82E344001D584C /* AccountStateReset.swift in Sources */, - D01B27A21E394D8B0022A4C0 /* PrivacySettings.swift in Sources */, - D0223A9B1EA5654D00211D94 /* TelegramMediaResource.swift in Sources */, - D048B4AC20A5DA4300C79D31 /* ManagedProxyInfoUpdates.swift in Sources */, - D017495E1E118F790057C89A /* AccountStateManager.swift in Sources */, - D0CA3F84207391560042D2B6 /* SecureIdPadding.swift in Sources */, - D0F760D822202FE20074F7E5 /* ChannelStats.swift in Sources */, - 0962E66921B5A11100245FD9 /* SynchronizeAppLogEventsOperation.swift in Sources */, - D049EAF51E44DF3300A2CD3A /* AccountState.swift in Sources */, - C28725421EF967E700613564 /* NotificationInfoMessageAttribute.swift in Sources */, - D03B0D5D1D631A6900955575 /* MultipartFetch.swift in Sources */, - D058E0D11E8AD65C00A442DE /* StandaloneSendMessage.swift in Sources */, - D0BC38751E40A7F70044D6FE /* RemovePeerChat.swift in Sources */, - 093857A82243D87900EB6A54 /* ManagedSynchronizeEmojiKeywordsOperations.swift in Sources */, - D0529D2721A4141800D7C3C4 /* ManagedSynchronizeRecentlyUsedMediaOperations.swift in Sources */, - D0AB0B961D662F0B002C78E7 /* ManagedChatListHoles.swift in Sources */, - D05A32E41E6F0B2E002760B4 /* RecentAccountSessions.swift in Sources */, - D01A21A61F38CDC700DDA104 /* SynchronizeSavedStickersOperation.swift in Sources */, - D03E5E0C1E55E02D0029569A /* LoggedOutAccountAttribute.swift in Sources */, - D054649120738653002ECC1E /* SecureIdIDCardValue.swift in Sources */, - D018EE052045E95000CBB130 /* CheckPeerChatServiceActions.swift in Sources */, - D0F3A8A51E82C94C00B4C64C /* SynchronizeableChatInputState.swift in Sources */, - D072F357231542740009E66F /* MessageReactionList.swift in Sources */, - D03B0CD71D62245300955575 /* TelegramGroup.swift in Sources */, - D02609BF20C6EC08006C34AC /* Crypto.m in Sources */, - D0B8438C1DA7CF50005F29E1 /* BotInfo.swift in Sources */, - D033FEB31E61F3C000644997 /* ReportPeer.swift in Sources */, - D04D8FF4209A4B0700865719 /* NetworkSettings.swift in Sources */, - D0575AF41E9FFDDE006F2541 /* ManagedSynchronizeSavedGifsOperations.swift in Sources */, - C2F4ED1D1EC60064005F2696 /* RateCall.swift in Sources */, - D021E0E21DB5401A00C6B04F /* StickerManagement.swift in Sources */, - D051DB17215ECC4D00F30F92 /* AppChangelog.swift in Sources */, - D0BC38701E40853E0044D6FE /* UpdatePeers.swift in Sources */, - D0F3A8A81E82CD7D00B4C64C /* UpdatePeerChatInterfaceState.swift in Sources */, - D03B0CE21D62249B00955575 /* InlineBotMessageAttribute.swift in Sources */, - D0AB0B9A1D666520002C78E7 /* ManagedSynchronizePeerReadStates.swift in Sources */, - D0B843891DA7AB96005F29E1 /* ExportedInvitation.swift in Sources */, - D0380DBA204EF306000414AB /* MessageMediaPreuploadManager.swift in Sources */, - D03B0E441D631E6600955575 /* NetworkLogging.m in Sources */, - D0528E651E65C82400E2FEF5 /* UpdateContactName.swift in Sources */, - D03121021DA57E93006A2A60 /* TelegramPeerNotificationSettings.swift in Sources */, - D018EE0220458E1E00CBB130 /* SecretChatLayerNegotiation.swift in Sources */, - D0C48F391E8138DF0075317D /* ArchivedStickerPacksInfo.swift in Sources */, - C239BE971E62EE1E00C2C453 /* LoadMessagesIfNecessary.swift in Sources */, - 09EDAD382213120C0012A50B /* AutodownloadSettings.swift in Sources */, - D08984F22114B97400918162 /* ClearCloudDrafts.swift in Sources */, - D03B0CC11D62235000955575 /* StringFormat.swift in Sources */, - D0B85AC51F6B2B9400B8B5CE /* RecentlyUsedHashtags.swift in Sources */, - C2366C861E4F403C0097CCFF /* AddressNames.swift in Sources */, - D0529D2421A4123400D7C3C4 /* SynchronizeRecentlyUsedMediaOperations.swift in Sources */, - D0FA08BB2046B37900DD23FC /* ContentPrivacySettings.swift in Sources */, - D0528E601E65B94E00E2FEF5 /* SingleMessageView.swift in Sources */, - D08CAA841ED8164B0000FDA8 /* Localization.swift in Sources */, - D0528E5A1E658B3600E2FEF5 /* ManagedLocalInputActivities.swift in Sources */, - D0879BC822F85A3E00C4D6B3 /* ImageRepresentationWithReference.swift in Sources */, - D0FA8BA41E1FA341001E855B /* SecretChatKeychain.swift in Sources */, - D01B264923324CF900A6448B /* Wallets.swift in Sources */, - D01749601E118FC30057C89A /* AccountIntermediateState.swift in Sources */, - D0E412EE206AF65500BEE4A2 /* GrantSecureIdAccess.swift in Sources */, - D02ABC811E310E5D00CAE539 /* ManagedCloudChatRemoveMessagesOperations.swift in Sources */, - D03B0D651D631A8B00955575 /* Account.swift in Sources */, - D0AB0B941D662ECE002C78E7 /* ManagedMessageHistoryHoles.swift in Sources */, - D08774FC1E3E39F600A97350 /* ManagedGlobalNotificationSettings.swift in Sources */, - D03B0CF41D62250800955575 /* TelegramMediaAction.swift in Sources */, - D041E3F81E535A88008C24B4 /* RemovePeerMember.swift in Sources */, - D076F8892296D8E9004F895A /* ManageChannelDiscussionGroup.swift in Sources */, - D0B417C11D7DCEEF004562A4 /* ApiGroupOrChannel.swift in Sources */, - D0BAAA14230FDB4100AFC473 /* ProcessRemovedMedia.swift in Sources */, - D041E3F51E535464008C24B4 /* AddPeerMember.swift in Sources */, - D0AF32311FACEDEC0097362B /* CoreSettings.swift in Sources */, - D054649A20738760002ECC1E /* SecureIdRentalAgreementValue.swift in Sources */, - D0E305A71E5B5CBE00D7A3A2 /* PeerAdmins.swift in Sources */, - D0575C2D22B922DF00A71A0E /* DeleteAccount.swift in Sources */, - D03B0D0D1D62255C00955575 /* SynchronizePeerReadState.swift in Sources */, - D03B0D081D62255C00955575 /* ChannelState.swift in Sources */, - D08984F521187ECA00918162 /* NetworkType.swift in Sources */, - C251D7431E65E50500283EDE /* StickerSetInstallation.swift in Sources */, - 0962E66F21B6147600245FD9 /* AppConfiguration.swift in Sources */, - D07047BA1F3DF75500F6A8D4 /* ConsumePersonalMessageAction.swift in Sources */, - D07E413F208A769D00FCA8F0 /* ProxyServersStatuses.swift in Sources */, - D0C0B58D1ED9DC5A000F4D2C /* SynchronizeLocalizationUpdatesOperation.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D09D8C061D4FAB1D0081DBEC /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D09D8C101D4FAB1D0081DBEC /* TelegramCoreTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0B418621D7E03D5004562A4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D03413F3231325B300B555F3 /* Themes.swift in Sources */, - D03413F1231323CE00B555F3 /* Theme.swift in Sources */, - D04D21382306ECF600609388 /* FormatPhoneNumber.m in Sources */, - D021E7E82306EC03002F8BD1 /* OutgoingScheduleInfoMessageAttribute.swift in Sources */, - D021E7E92306EC03002F8BD1 /* ScheduledMessages.swift in Sources */, - D021E7EA2306EC03002F8BD1 /* ValidateAddressNameInteractive.swift in Sources */, - D020F00722F19C8F00BE699A /* ManagedAnimatedEmojiUpdates.swift in Sources */, - D05FDC3922CA45070060BFE3 /* AppUpdate.swift in Sources */, - D014193922AE6B85008667CB /* ChannelOwnershipTransfer.swift in Sources */, - D014193A22AE6B85008667CB /* PeersNearby.swift in Sources */, - D076F88A2296D8F6004F895A /* ManageChannelDiscussionGroup.swift in Sources */, - 9F1BC1AB2244CFED00F21815 /* EmojiKeywords.swift in Sources */, - 9F1BC1AC2244CFED00F21815 /* SynchronizeEmojiKeywordsOperation.swift in Sources */, - 9F1BC1AD2244CFED00F21815 /* ManagedSynchronizeEmojiKeywordsOperations.swift in Sources */, - 9F7D42262223FF49007B68BB /* AutodownloadSettings.swift in Sources */, - 9F7D42272223FF49007B68BB /* ManagedAutodownloadSettingsUpdates.swift in Sources */, - 9F153D1021E8E0A200B95D82 /* Wallpaper.swift in Sources */, - 9F4EEF9E21DCF6E7002C3B33 /* ManagedVoipConfigurationUpdates.swift in Sources */, - 9F4EEF9F21DCF6E7002C3B33 /* ManagedAppConfigurationUpdates.swift in Sources */, - 9F4EEFA021DCF6E7002C3B33 /* SynchronizeAppLogEventsOperation.swift in Sources */, - 9F4EEFA121DCF6E7002C3B33 /* ManagedSynchronizeAppLogEventsOperations.swift in Sources */, - D0329EA622FC5A9600F9F071 /* ReactionsMessageAttribute.swift in Sources */, - 9F4EEF9B21DCF66F002C3B33 /* JSON.swift in Sources */, - 9F4EEF9C21DCF66F002C3B33 /* AppConfiguration.swift in Sources */, - 9F4EEF9D21DCF66F002C3B33 /* SearchBotsConfiguration.swift in Sources */, - 9FAA268820D457A300D26CF3 /* RemoteStorageConfiguration.swift in Sources */, - C28D3CF120D3DAA30027F4D6 /* DeepLinkInfo.swift in Sources */, - 9FC8ADAC206BC00A0094F7B4 /* RecentWebSessions.swift in Sources */, - 9FC8ADA9206BBD000094F7B4 /* SaveSecureIdValue.swift in Sources */, - 9F10CE8C20613CDB002DD61A /* TelegramDeviceContactImportInfo.swift in Sources */, - C29340F41F5081280074991E /* UpdateGroupSpecificStickerset.swift in Sources */, - C25638021E79E7FC00311607 /* TwoStepVerification.swift in Sources */, - D00DBBD81E64E41100DB5485 /* CreateSecretChat.swift in Sources */, - C2FD33EC1E696C79008D13D4 /* GroupsInCommon.swift in Sources */, - C239BE9D1E630CB300C2C453 /* UpdatePinnedMessage.swift in Sources */, - C239BE981E62F0D200C2C453 /* LoadMessagesIfNecessary.swift in Sources */, - D01C7ED41EF5DF83008305F1 /* LimitsConfiguration.swift in Sources */, - D051DB15215EC5A300F30F92 /* AppChangelogState.swift in Sources */, - C26A37EF1E5E0C41006977AC /* ChannelParticipants.swift in Sources */, - D00D343D1E6EC9770057B307 /* TelegramMediaGame.swift in Sources */, - D02609C020C6EC08006C34AC /* Crypto.m in Sources */, - D0AB262721C2F991008F6685 /* TelegramMediaPoll.swift in Sources */, - D0C26D6A1FE02402004ABF18 /* ManagedSynchronizeGroupedPeersOperations.swift in Sources */, - D01C7F051EFC1C49008305F1 /* DeviceContact.swift in Sources */, - D050F26A1E4A5B6D00988324 /* ManagedGlobalNotificationSettings.swift in Sources */, - D0750C9122B2FD8300BE5F6E /* PeerAccessHash.swift in Sources */, - D050F26B1E4A5B6D00988324 /* ApplyMaxReadIndexInteractively.swift in Sources */, - D033FEB11E61EB0200644997 /* PeerContactSettings.swift in Sources */, - D0458C891E69B4AB00FB34C1 /* OutgoingContentInfoMessageAttribute.swift in Sources */, - D050F26C1E4A5B6D00988324 /* UpdatePeers.swift in Sources */, - D08984F621187ECA00918162 /* NetworkType.swift in Sources */, - D050F26D1E4A5B6D00988324 /* CreateGroup.swift in Sources */, - D0575AF51E9FFDDE006F2541 /* ManagedSynchronizeSavedGifsOperations.swift in Sources */, - D00D34461E6EDD420057B307 /* SynchronizeConsumeMessageContentsOperation.swift in Sources */, - D0E412E8206ABC7500BEE4A2 /* EncryptedMediaResource.swift in Sources */, - D00D34401E6ED6E50057B307 /* ConsumableContentMessageAttribute.swift in Sources */, - D050F26E1E4A5B6D00988324 /* RemovePeerChat.swift in Sources */, - D0613FD81E606B3B00202CDB /* ConvertGroupToSupergroup.swift in Sources */, - D0DB7F041F43030C00591D48 /* InstallInteractiveReadMessagesAction.swift in Sources */, - D01D6BFA1E42A718006151C6 /* SearchStickers.swift in Sources */, - D0D748031E7AE98B00F4B1F6 /* StickerPackInteractiveOperations.swift in Sources */, - D0B167241F9F972E00976B40 /* LoggingSettings.swift in Sources */, - D0E41302206B9E6E00BEE4A2 /* SecureIdAddressValue.swift in Sources */, - C2A315C01E2E776A00D89000 /* RequestStartBot.swift in Sources */, - D0642EFA1F3E05D700792790 /* EarliestUnseenPersonalMentionMessage.swift in Sources */, - D0F7B1EA1E045C87007EB8A5 /* ChangePeerNotificationSettings.swift in Sources */, - D08984F32114B97400918162 /* ClearCloudDrafts.swift in Sources */, - D0B418A71D7E0592004562A4 /* Fetch.swift in Sources */, - D02ABC7C1E30058F00CAE539 /* DeleteMessagesInteractively.swift in Sources */, - D03DC9111F82E344001D584C /* AccountStateReset.swift in Sources */, - D0B1671E1F9EA2C300976B40 /* ChatHistoryPreloadManager.swift in Sources */, - D050F2111E48AB0600988324 /* InteractivePhoneFormatter.swift in Sources */, - D050F2631E4A5AEB00988324 /* SynchronizePinnedChatsOperation.swift in Sources */, - D0B418B81D7E05A6004562A4 /* ContactManagement.swift in Sources */, - D0E23DE01E8082A400B9B6D2 /* ArchivedStickerPacks.swift in Sources */, - D02D60AC206BA64100FEFE1E /* VerifySecureIdValue.swift in Sources */, - D0119CB120CA9EA800895300 /* MarkAllChatsAsRead.swift in Sources */, - D050F2521E4A59C200988324 /* JoinLink.swift in Sources */, - D018EE0320458E1E00CBB130 /* SecretChatLayerNegotiation.swift in Sources */, - D0F7B1E91E045C87007EB8A5 /* PeerCommands.swift in Sources */, - D00D97C81E32901700E5C2B6 /* PeerInputActivity.swift in Sources */, - D0754D2B1EEE10FC00884F6E /* BotPaymentForm.swift in Sources */, - D0E412EF206AF65500BEE4A2 /* GrantSecureIdAccess.swift in Sources */, - C22EE61C1E67418000334C38 /* ToggleChannelSignatures.swift in Sources */, - D0B418AC1D7E0597004562A4 /* Network.swift in Sources */, - D04CAA5B1E83310D0047E51F /* MD5.swift in Sources */, - D0B844141DAB91CD005F29E1 /* PhoneNumbers.swift in Sources */, - D0E305AB1E5BA02D00D7A3A2 /* ChannelBlacklist.swift in Sources */, - D00D97CB1E32917C00E5C2B6 /* PeerInputActivityManager.swift in Sources */, - D0B844491DAB91FD005F29E1 /* ManagedChatListHoles.swift in Sources */, - D03C53711DAD5CA9004C17B3 /* CachedGroupParticipants.swift in Sources */, - D07047B81F3DF2CD00F6A8D4 /* ManagedConsumePersonalMessagesActions.swift in Sources */, - C2366C841E4F3EAA0097CCFF /* GroupReturnAndLeft.swift in Sources */, - C2E0646E1ECF171E00387BB8 /* TelegramMediaWebDocument.swift in Sources */, - D03C53671DAD5CA9004C17B3 /* ApiUtils.swift in Sources */, - D0223A9C1EA5654D00211D94 /* TelegramMediaResource.swift in Sources */, - D0AAD1B91E326FE200D5B9DE /* ManagedAutoremoveMessageOperations.swift in Sources */, - D001F3F21E128A1C007A8C60 /* UpdateGroup.swift in Sources */, - D0338744223BD532007A2CE4 /* InitializeAccountAfterLogin.swift in Sources */, - D0F7B1EB1E045C87007EB8A5 /* ResolvePeerByName.swift in Sources */, - D018D3381E648ACF00C5E089 /* ChannelCreation.swift in Sources */, - D0F53BEA1E784A4800117362 /* ChangeAccountPhoneNumber.swift in Sources */, - C2E064691ECEEF0B00387BB8 /* TelegramMediaInvoice.swift in Sources */, - D001F3EE1E128A1C007A8C60 /* AccountStateManager.swift in Sources */, - C205FEA91EB3B75900455808 /* ExportMessageLink.swift in Sources */, - D0448CA31E291B14005A61A7 /* FetchSecretFileResource.swift in Sources */, - D0B8444C1DAB91FD005F29E1 /* UpdateCachedPeerData.swift in Sources */, - D0329EA322FC5A7C00F9F071 /* MessageReactions.swift in Sources */, - D0FA8B9F1E1F973B001E855B /* SecretChatIncomingEncryptedOperation.swift in Sources */, - D03C536C1DAD5CA9004C17B3 /* TelegramChannel.swift in Sources */, - D0B418951D7E0580004562A4 /* TelegramMediaContact.swift in Sources */, - D0F3CC7A1DDE2859008148FA /* RequestMessageActionCallback.swift in Sources */, - D073CEA11DCBF3D3007511FD /* StickerPack.swift in Sources */, - D0E23DD61E8042F500B9B6D2 /* FeaturedStickerPack.swift in Sources */, - C230BEB71EE9A3760029586C /* ChannelAdminEventLogs.swift in Sources */, - D00DBBDB1E64E67E00DB5485 /* UpdateSecretChat.swift in Sources */, - D0BE303E2061A29100FBE6D8 /* RequestSecureIdForm.swift in Sources */, - D0448C921E251F96005A61A7 /* SecretChatEncryption.swift in Sources */, - D00BDA1D1EE5952A00C64C5E /* TelegramChannelBannedRights.swift in Sources */, - D0E35A141DE4C69C00BC6096 /* FetchHttpResource.swift in Sources */, - D0B8440D1DAB91CD005F29E1 /* ImageRepresentationsUtils.swift in Sources */, - D03C536A1DAD5CA9004C17B3 /* TelegramUser.swift in Sources */, - D001F3EA1E128A1C007A8C60 /* TelegramPeerNotificationSettings.swift in Sources */, - D0E412F5206B9BDC00BEE4A2 /* SecureIdVerificationDocumentReference.swift in Sources */, - D0467D0C20D7F1E60055C28F /* SynchronizeMarkAllUnseenPersonalMessagesOperation.swift in Sources */, - D0FA8BA81E1FA6DF001E855B /* TelegramSecretChat.swift in Sources */, - C23BC3881E9BE3CB00D79F92 /* ImportContact.swift in Sources */, - D0B85AC61F6B2B9400B8B5CE /* RecentlyUsedHashtags.swift in Sources */, - D0E412F2206B9BB700BEE4A2 /* SecureIdPassportValue.swift in Sources */, - D001F3EB1E128A1C007A8C60 /* EnqueueMessage.swift in Sources */, - D01A21A71F38CDC700DDA104 /* SynchronizeSavedStickersOperation.swift in Sources */, - D00C7CEC1E37A8540080C3D5 /* SetSecretChatMessageAutoremoveTimeoutInteractively.swift in Sources */, - D048B4AD20A5DA4300C79D31 /* ManagedProxyInfoUpdates.swift in Sources */, - D0B844481DAB91FD005F29E1 /* ManagedMessageHistoryHoles.swift in Sources */, - D0F3CC7B1DDE2859008148FA /* RequestEditMessage.swift in Sources */, - D049EAEC1E44B71B00A2CD3A /* RecentlySearchedPeerIds.swift in Sources */, - D0F19F6720E6621000EEC860 /* MultiplexedRequestManager.swift in Sources */, - D0879BC922F85A3E00C4D6B3 /* ImageRepresentationWithReference.swift in Sources */, - D02D60A8206BA5F900FEFE1E /* SecureIdValue.swift in Sources */, - D0FA8B991E1E955C001E855B /* SecretChatOutgoingOperation.swift in Sources */, - D001F3F01E128A1C007A8C60 /* AccountStateManagementUtils.swift in Sources */, - D0BEAF611E54ACF900BD963D /* AccountManager.swift in Sources */, - D0CA3F85207391560042D2B6 /* SecureIdPadding.swift in Sources */, - D0F3CC791DDE2859008148FA /* SearchMessages.swift in Sources */, - D093D7EF206413F600BC3599 /* SecureIdDataTypes.swift in Sources */, - D03DC9141F82F89D001D584C /* RegularChatState.swift in Sources */, - D06CA13622772EB20094E707 /* ManagedNotificationSettingsBehaviors.swift in Sources */, - D0C44B621FC616E200227BE0 /* SearchGroupMembers.swift in Sources */, - D0F3A8A61E82C94C00B4C64C /* SynchronizeableChatInputState.swift in Sources */, - D00BDA1A1EE593D600C64C5E /* TelegramChannelAdminRights.swift in Sources */, - D00D34431E6EDD2E0057B307 /* ManagedSynchronizeConsumeMessageContentsOperations.swift in Sources */, - D049EAE91E44B67100A2CD3A /* RecentPeerItem.swift in Sources */, - D026099F20C695AF006C34AC /* Wallpapers.swift in Sources */, - D099E223229420D600561B75 /* BlockedPeersContext.swift in Sources */, - D0FA35091EA632E400E56FFA /* CollectCacheUsageStats.swift in Sources */, - D0E412EB206AD18E00BEE4A2 /* DecryptedResourceData.swift in Sources */, - D001F3F31E128A1C007A8C60 /* UpdateMessageService.swift in Sources */, - D0C50E351E93A86600F62E39 /* CallSessionManager.swift in Sources */, - D0A3E448214802C7008ACEF6 /* VoipConfiguration.swift in Sources */, - D018EE062045E95000CBB130 /* CheckPeerChatServiceActions.swift in Sources */, - D081E10B217F5ADE003CD921 /* LocalizationPreview.swift in Sources */, - D0C27B431F4B58C000A4E170 /* PeerSpecificStickerPack.swift in Sources */, - D0B844131DAB91CD005F29E1 /* StringFormat.swift in Sources */, - D0C0B58E1ED9DC5A000F4D2C /* SynchronizeLocalizationUpdatesOperation.swift in Sources */, - D0E35A131DE4C69100BC6096 /* OutgoingChatContextResultMessageAttribute.swift in Sources */, - D0B418961D7E0580004562A4 /* TelegramMediaFile.swift in Sources */, - D08CAA881ED81DD40000FDA8 /* LocalizationInfo.swift in Sources */, - D099D74A1EEF418D00A3128C /* HistoryViewStateValidation.swift in Sources */, - D0AF32231FAC95C20097362B /* StandaloneUploadedMedia.swift in Sources */, - D04554A721B43440007A6DD9 /* CancelAccountReset.swift in Sources */, - D001F3EC1E128A1C007A8C60 /* Holes.swift in Sources */, - D0B4189B1D7E0580004562A4 /* TelegramMediaWebpage.swift in Sources */, - D00C7CE11E3785710080C3D5 /* MarkMessageContentAsConsumedInteractively.swift in Sources */, - D0E23DDB1E806F7700B9B6D2 /* ManagedSynchronizeMarkFeaturedStickerPacksAsSeenOperations.swift in Sources */, - D07047B51F3DF1FE00F6A8D4 /* ConsumablePersonalMentionMessageAttribute.swift in Sources */, - D0448C8F1E22993C005A61A7 /* ProcessSecretChatIncomingDecryptedOperations.swift in Sources */, - D093D7F620641A4900BC3599 /* SecureIdPhoneValue.swift in Sources */, - D0C26D6D1FE286C3004ABF18 /* FetchChatList.swift in Sources */, - D073CE6E1DCBCF17007511FD /* ForwardSourceInfoAttribute.swift in Sources */, - D093D7FA20641AA500BC3599 /* SecureIdEmailValue.swift in Sources */, - D05A32E21E6F0982002760B4 /* UpdatedAccountPrivacySettings.swift in Sources */, - D0613FD01E60520700202CDB /* ChannelMembers.swift in Sources */, - D001F3E81E128A1C007A8C60 /* ChannelState.swift in Sources */, - C2366C8A1E4F40480097CCFF /* SupportPeerId.swift in Sources */, - D08CAA811ED80ED20000FDA8 /* SuggestedLocalizationEntry.swift in Sources */, - D0DA1D331F7043D50034E892 /* ManagedPendingPeerNotificationSettings.swift in Sources */, - D0B844451DAB91FD005F29E1 /* AccountViewTracker.swift in Sources */, - D0C48F3D1E8142EF0075317D /* LoadedPeerFromMessage.swift in Sources */, - D0F3A8A01E82C65400B4C64C /* SynchronizeChatInputStateOperation.swift in Sources */, - D050F2601E4A5AD500988324 /* AutoremoveTimeoutMessageAttribute.swift in Sources */, - D07E4140208A769D00FCA8F0 /* ProxyServersStatuses.swift in Sources */, - D049EAD91E43DAD200A2CD3A /* ManagedRecentStickers.swift in Sources */, - D0EE7FC220986BF400981319 /* SecureIdInternalPassportValue.swift in Sources */, - D0B418A61D7E0592004562A4 /* CloudFileMediaResource.swift in Sources */, - D073CEA51DCBF3F5007511FD /* StickerManagement.swift in Sources */, - D03C536D1DAD5CA9004C17B3 /* ApiGroupOrChannel.swift in Sources */, - D051DB18215ECC4D00F30F92 /* AppChangelog.swift in Sources */, - D01C06B81FBBA269001561AB /* CanSendMessagesToPeer.swift in Sources */, - D0E35A151DE4C6A200BC6096 /* OutgoingMessageWithChatContextResult.swift in Sources */, - D02ABC821E310E5D00CAE539 /* ManagedCloudChatRemoveMessagesOperations.swift in Sources */, - C2FD33E51E687BF1008D13D4 /* PeerPhotoUpdater.swift in Sources */, - D0BE304C20627D9800FBE6D8 /* AccessSecureId.swift in Sources */, - D01A21AD1F38D10E00DDA104 /* SavedStickerItem.swift in Sources */, - D03C53731DAD5CA9004C17B3 /* CachedGroupData.swift in Sources */, - D019B1CD1E2E3B6A00F80DB3 /* SecretChatRekeySession.swift in Sources */, - C2F4ED1E1EC60064005F2696 /* RateCall.swift in Sources */, - D0F7AB2D1DCE889D009AD9A1 /* EditedMessageAttribute.swift in Sources */, - D0B844121DAB91CD005F29E1 /* Log.swift in Sources */, - D03C53721DAD5CA9004C17B3 /* CachedUserData.swift in Sources */, - D0D1026D2212FE52003ADA5E /* AccountSortOrderAttribute.swift in Sources */, - D0AF32321FACEDEC0097362B /* CoreSettings.swift in Sources */, - D073CE6B1DCBCF17007511FD /* ReplyMessageAttribute.swift in Sources */, - D001F3E91E128A1C007A8C60 /* SecretChatState.swift in Sources */, - D08F4A6A1E79CECB00A2AA15 /* ManagedSynchronizeInstalledStickerPacksOperations.swift in Sources */, - D0B8444B1DAB91FD005F29E1 /* ManagedSynchronizePeerReadStates.swift in Sources */, - D0529D2521A4123400D7C3C4 /* SynchronizeRecentlyUsedMediaOperations.swift in Sources */, - D06ECFC920B810D300C576C2 /* TermsOfService.swift in Sources */, - 9F06831121A40DEC001D8EDB /* NotificationExceptionsList.swift in Sources */, - D0AB262C21C3CE80008F6685 /* Polls.swift in Sources */, - D073CE6C1DCBCF17007511FD /* TextEntitiesMessageAttribute.swift in Sources */, - D04D213D230AC35A00609388 /* WasScheduledMessageAttribute.swift in Sources */, - D03C53751DAD5CA9004C17B3 /* TelegramUserPresence.swift in Sources */, - D00580AF21E2A08900CB7CD3 /* AccountEnvironmentAttribute.swift in Sources */, - D03E3D29230447960049C28B /* RestrictedContentMessageAttribute.swift in Sources */, - D05452081E7B5093006EEF19 /* LoadedStickerPack.swift in Sources */, - D0561DE41E5737FC00E6B9E9 /* UpdatePeerInfo.swift in Sources */, - D042C6841E8D9DF800C863B0 /* Unixtime.swift in Sources */, - D0DC35521DE36908000195EB /* ChatContextResult.swift in Sources */, - D0F7AB301DCF507E009AD9A1 /* ReplyMarkupMessageAttribute.swift in Sources */, - D0F02CE61E9926C50065DEE2 /* ManagedConfigurationUpdates.swift in Sources */, - D073CE6D1DCBCF17007511FD /* InlineBotMessageAttribute.swift in Sources */, - D033FEB71E61F3F900644997 /* BlockedPeers.swift in Sources */, - D0E412D8206A866B00BEE4A2 /* UploadSecureIdFile.swift in Sources */, - D050F2611E4A5AE700988324 /* PrivacySettings.swift in Sources */, - C210DD631FBDB90800F673D8 /* SourceReferenceMessageAttribute.swift in Sources */, - D0B8440F1DAB91CD005F29E1 /* Either.swift in Sources */, - D0DC35511DE36908000195EB /* RequestChatContextResults.swift in Sources */, - D0FA08BC2046B37900DD23FC /* ContentPrivacySettings.swift in Sources */, - D08CAA8D1ED81EDF0000FDA8 /* Localizations.swift in Sources */, - D013630A208F6E2800EB3653 /* SecureIdValueContentError.swift in Sources */, - D0F7B1EC1E045C87007EB8A5 /* SearchPeers.swift in Sources */, - D02DADC22139A1FC00116225 /* ContactSyncManager.swift in Sources */, - D001F3EF1E128A1C007A8C60 /* AccountIntermediateState.swift in Sources */, - D0223A991EA564BD00211D94 /* MediaResourceNetworkStatsTag.swift in Sources */, - D00C7CCD1E3620C30080C3D5 /* CachedChannelParticipants.swift in Sources */, - D0A472B71F4CBE8B00E0EEDA /* LoadedPeer.swift in Sources */, - D03C536E1DAD5CA9004C17B3 /* PhoneNumber.swift in Sources */, - D0338741223BD48B007A2CE4 /* ContactsSettings.swift in Sources */, - D0BC387C1E40D2880044D6FE /* TogglePeerChatPinned.swift in Sources */, - D0528E6B1E65DD2100E2FEF5 /* WebpagePreview.swift in Sources */, - D0E8B8B42044706300605593 /* ForwardGame.swift in Sources */, - D0B844111DAB91CD005F29E1 /* Regex.swift in Sources */, - D0BEAF5E1E54941B00BD963D /* Authorization.swift in Sources */, - D073CEA41DCBF3EA007511FD /* MultipartUpload.swift in Sources */, - D03C53701DAD5CA9004C17B3 /* ExportedInvitation.swift in Sources */, - D0FA35061EA6135D00E56FFA /* CacheStorageSettings.swift in Sources */, - D08F4A671E79CC4A00A2AA15 /* SynchronizeInstalledStickerPacksOperations.swift in Sources */, - D05A32E81E6F0B5C002760B4 /* RecentAccountSession.swift in Sources */, - D0F7B1E31E045C7B007EB8A5 /* RichText.swift in Sources */, - D0575C2E22B922DF00A71A0E /* DeleteAccount.swift in Sources */, - D072F358231542740009E66F /* MessageReactionList.swift in Sources */, - D0FA8BB11E1FEC7E001E855B /* SecretChatEncryptionConfig.swift in Sources */, - D0B418AA1D7E0597004562A4 /* Download.swift in Sources */, - D001F3F41E128A1C007A8C60 /* UpdatesApiUtils.swift in Sources */, - D0D376E722DCCFD600FA7D7C /* SlowMode.swift in Sources */, - D015E00F225CA61100CB9E8A /* FindChannelById.swift in Sources */, - D04D8FF5209A4B0700865719 /* NetworkSettings.swift in Sources */, - D05464982073872C002ECC1E /* SecureIdBankStatementValue.swift in Sources */, - D069257222D8B526002FC021 /* SecretChatSettings.swift in Sources */, - D0B4188E1D7E0578004562A4 /* StoreMessage_Telegram.swift in Sources */, - D0B844461DAB91FD005F29E1 /* RecentPeers.swift in Sources */, - D0E412E2206AB24700BEE4A2 /* SecureFileMediaResource.swift in Sources */, - D0439B5E228ECB270067E026 /* RequestPhoneNumber.swift in Sources */, - D03C53681DAD5CA9004C17B3 /* PeerUtils.swift in Sources */, - D0BE303B20619EE800FBE6D8 /* SecureIdForm.swift in Sources */, - D07047BB1F3DF75500F6A8D4 /* ConsumePersonalMessageAction.swift in Sources */, - D0380DBB204EF306000414AB /* MessageMediaPreuploadManager.swift in Sources */, - D050F2621E4A5AE700988324 /* GlobalNotificationSettings.swift in Sources */, - D05D8B382192F8AF0064586F /* LocalizationListState.swift in Sources */, - D0DFD5E01FCDBCFD0039B3B1 /* CachedSentMediaReferences.swift in Sources */, - D0B418991D7E0580004562A4 /* TelegramMediaMap.swift in Sources */, - D0E8174A2010E7E300B82BBB /* ChannelAdminEventLogContext.swift in Sources */, - D054649B20738760002ECC1E /* SecureIdRentalAgreementValue.swift in Sources */, - D0561DEB1E5754FA00E6B9E9 /* ChannelAdmins.swift in Sources */, - D0AD02E41FFFA14800C1DCFF /* PeerLiveLocationsContext.swift in Sources */, - D0613FCB1E60440600202CDB /* InvitationLinks.swift in Sources */, - D0439B61228EDE430067E026 /* ContentRequiresValidationMessageAttribute.swift in Sources */, - D0633CD32253A528003DD95F /* ChatOnlineMembers.swift in Sources */, - D08984FC2118816A00918162 /* Reachability.m in Sources */, - D0B844471DAB91FD005F29E1 /* ManagedServiceViews.swift in Sources */, - D0F3A8A91E82CD7D00B4C64C /* UpdatePeerChatInterfaceState.swift in Sources */, - D00D343A1E6EC9520057B307 /* TeleramMediaUnsupported.swift in Sources */, - D03C53691DAD5CA9004C17B3 /* PeerAccessRestrictionInfo.swift in Sources */, - C2FD33E21E680E9E008D13D4 /* RequestUserPhotos.swift in Sources */, - D0B8440E1DAB91CD005F29E1 /* MessageUtils.swift in Sources */, - D0FA8BAB1E1FB76E001E855B /* ManagedSecretChatOutgoingOperations.swift in Sources */, - D0C26D671FE022DB004ABF18 /* SynchronizeGroupedPeersOperation.swift in Sources */, - D0B418BA1D7E05BB004562A4 /* NetworkLogging.m in Sources */, - D03C536B1DAD5CA9004C17B3 /* TelegramGroup.swift in Sources */, - D0E412DD206A99AE00BEE4A2 /* SecureIdValueAccessContext.swift in Sources */, - D0B418941D7E0580004562A4 /* TelegramMediaAction.swift in Sources */, - D0EC559B2101ED0800D1992C /* DeleteMessages.swift in Sources */, - D073CE6A1DCBCF17007511FD /* ViewCountMessageAttribute.swift in Sources */, - D0B418AB1D7E0597004562A4 /* MultipartFetch.swift in Sources */, - D01A21AA1F38CDDC00DDA104 /* ManagedSynchronizeSavedStickersOperations.swift in Sources */, - D0546495207386D7002ECC1E /* SecureIdUtilityBillValue.swift in Sources */, - D03C53741DAD5CA9004C17B3 /* CachedChannelData.swift in Sources */, - D032F5BD20EF84FD00037B6C /* FetchedMediaResource.swift in Sources */, - D0B418861D7E056D004562A4 /* Namespaces.swift in Sources */, - D05A32E51E6F0B2E002760B4 /* RecentAccountSessions.swift in Sources */, - D02395D71F8D09A50070F5C2 /* ChannelHistoryAvailabilitySettings.swift in Sources */, - D0F7B1E41E045C7B007EB8A5 /* InstantPage.swift in Sources */, - D03E5E0D1E55E02D0029569A /* LoggedOutAccountAttribute.swift in Sources */, - D0B418AD1D7E0597004562A4 /* Serialization.swift in Sources */, - D0F760D922202FE20074F7E5 /* ChannelStats.swift in Sources */, - D0ADF912212B00DD00310BBC /* SecureIdConfiguration.swift in Sources */, - C28725431EF967E700613564 /* NotificationInfoMessageAttribute.swift in Sources */, - D0A89990217A37A000759EE6 /* NotificationAutolockReportManager.swift in Sources */, - D054648C2073854A002ECC1E /* SecureIdPersonalDetailsValue.swift in Sources */, - D0F8C3A12017AF2700236FC5 /* GlobalTelegramCoreConfiguration.swift in Sources */, - D099D7471EEF0C2700A3128C /* ChannelMessageStateVersionAttribute.swift in Sources */, - D058E0D21E8AD65C00A442DE /* StandaloneSendMessage.swift in Sources */, - D03C536F1DAD5CA9004C17B3 /* BotInfo.swift in Sources */, - D0FA8BBA1E2240B4001E855B /* SecretChatIncomingDecryptedOperation.swift in Sources */, - D033FEB41E61F3C000644997 /* ReportPeer.swift in Sources */, - D0FA8BAE1E1FD6E2001E855B /* MemoryBufferExtensions.swift in Sources */, - D01B264A23324CF900A6448B /* Wallets.swift in Sources */, - D0FA8BB41E201B02001E855B /* ProcessSecretChatIncomingEncryptedOperations.swift in Sources */, - D0F3A8A31E82C65E00B4C64C /* ManagedSynchronizeChatInputStateOperations.swift in Sources */, - D098908022942E3B0053F151 /* ActiveSessionsContext.swift in Sources */, - D0448CA61E29215A005A61A7 /* MediaResourceApiUtils.swift in Sources */, - D0633CDC2253C0D3003DD95F /* CloudMediaResourceParameters.swift in Sources */, - D001F3F11E128A1C007A8C60 /* SynchronizePeerReadState.swift in Sources */, - D054648F20738626002ECC1E /* SecureIdDriversLicenseValue.swift in Sources */, - D0529D2821A4141800D7C3C4 /* ManagedSynchronizeRecentlyUsedMediaOperations.swift in Sources */, - D050F2641E4A5AEB00988324 /* ManagedSynchronizePinnedChatsOperations.swift in Sources */, - D04D21372306EC9A00609388 /* MacInternalUpdater.swift in Sources */, - D0575AF21E9FFA5D006F2541 /* SynchronizeSavedGifsOperation.swift in Sources */, - D0528E661E65C82400E2FEF5 /* UpdateContactName.swift in Sources */, - D0EE7FC82098853100981319 /* SecureIdTemporaryRegistrationValue.swift in Sources */, - D00422D421677F4500719B67 /* ManagedAccountPresence.swift in Sources */, - D023E67921540624008C27D1 /* UpdateMessageMedia.swift in Sources */, - D053B4191F18DE5000E2D58A /* AuthorSignatureMessageAttribute.swift in Sources */, - D0F7B1E81E045C87007EB8A5 /* PeerParticipants.swift in Sources */, - D0C48F3A1E8138DF0075317D /* ArchivedStickerPacksInfo.swift in Sources */, - D049EAD61E43D98500A2CD3A /* RecentMediaItem.swift in Sources */, - D0EE7FC520986C5300981319 /* SecureIdPassportRegistrationValue.swift in Sources */, - D0C0B58B1ED9DA6B000F4D2C /* ManagedLocalizationUpdatesOperations.swift in Sources */, - D001F3F51E128A1C007A8C60 /* PendingMessageManager.swift in Sources */, - D0C27B401F4B51D000A4E170 /* CachedStickerPack.swift in Sources */, - D001F3F61E128A1C007A8C60 /* PendingMessageUploadedContent.swift in Sources */, - D01C7ED71EF5E468008305F1 /* ProxySettings.swift in Sources */, - C2366C871E4F403C0097CCFF /* AddressNames.swift in Sources */, - D02ABC7F1E3109F000CAE539 /* CloudChatRemoveMessagesOperation.swift in Sources */, - D0528E611E65B94E00E2FEF5 /* SingleMessageView.swift in Sources */, - D0FC195C2020D1CA00FEDBB2 /* PeerGroupMessageStateVersionAttribute.swift in Sources */, - D0CA8E4C227209C4008A74C3 /* ManagedSynchronizeGroupMessageStats.swift in Sources */, - D08CAA851ED8164B0000FDA8 /* Localization.swift in Sources */, - D0528E5B1E658B3600E2FEF5 /* ManagedLocalInputActivities.swift in Sources */, - D0FA8BA51E1FA341001E855B /* SecretChatKeychain.swift in Sources */, - D0F7B1E71E045C87007EB8A5 /* JoinChannel.swift in Sources */, - D0E652201E3A364A004EEA91 /* UpdateAccountPeerName.swift in Sources */, - D0FA8BA21E1F99E1001E855B /* SecretChatFileReference.swift in Sources */, - D001F3F71E128A1C007A8C60 /* ApplyUpdateMessage.swift in Sources */, - D0B418971D7E0580004562A4 /* TelegramMediaImage.swift in Sources */, - D01843A92190C28100278AFF /* ConfirmTwoStepRecoveryEmail.swift in Sources */, - D041E3F91E535A88008C24B4 /* RemovePeerMember.swift in Sources */, - D0BAAA15230FDB4100AFC473 /* ProcessRemovedMedia.swift in Sources */, - D049EAF61E44DF3300A2CD3A /* AccountState.swift in Sources */, - D0467D1620D7F2C90055C28F /* ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift in Sources */, - D041E3F61E535464008C24B4 /* AddPeerMember.swift in Sources */, - D0E305A81E5B5CBE00D7A3A2 /* PeerAdmins.swift in Sources */, - D073CE6F1DCBCF17007511FD /* OutgoingMessageInfoAttribute.swift in Sources */, - D0B844431DAB91FD005F29E1 /* Account.swift in Sources */, - D08CAA7E1ED77EE90000FDA8 /* LocalizationSettings.swift in Sources */, - D054649220738653002ECC1E /* SecureIdIDCardValue.swift in Sources */, - D0448CA01E27F5EB005A61A7 /* Random.swift in Sources */, - C251D7441E65E50500283EDE /* StickerSetInstallation.swift in Sources */, - D053B41C1F18DEF500E2D58A /* TelegramMediaExpiredContent.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - D09D8C0D1D4FAB1D0081DBEC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D09D8C001D4FAB1D0081DBEC /* TelegramCore */; - targetProxy = D09D8C0C1D4FAB1D0081DBEC /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - C22069BE1E8EB4A200E82730 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyapp; - }; - C22069BF1E8EB4A200E82730 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = YES; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = TelegramCore/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/third-party/FFmpeg-iOS/lib", - "$(PROJECT_DIR)/third-party/libwebp/lib", - ); - MODULEMAP_PRIVATE_FILE = ""; - OTHER_LDFLAGS = "-Wl,-dead_strip"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramCore; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - }; - name = ReleaseHockeyapp; - }; - C22069C01E8EB4A200E82730 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - INFOPLIST_FILE = TelegramCoreTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseHockeyapp; - }; - C22069C11E8EB4A200E82730 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = TelegramCoreMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/TelegramCore/module.private-mac.modulemap"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = ReleaseHockeyapp; - }; - D021D508219CB1E40064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugFork; - }; - D021D509219CB1E40064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = TelegramCore/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/third-party/FFmpeg-iOS/lib", - "$(PROJECT_DIR)/third-party/libwebp/lib", - ); - MODULEMAP_PRIVATE_FILE = ""; - OTHER_LDFLAGS = "-Wl,-dead_strip"; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramCore; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - }; - name = DebugFork; - }; - D021D50A219CB1E40064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - INFOPLIST_FILE = TelegramCoreTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugFork; - }; - D021D50B219CB1E40064BEBA /* DebugFork */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = NO; - FRAMEWORK_VERSION = A; - GCC_OPTIMIZATION_LEVEL = 0; - INFOPLIST_FILE = TelegramCoreMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/TelegramCore/module.private-mac.modulemap"; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = DebugFork; - }; - D0364D4D22B3E37C002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = HockeyappMacAlpha; - }; - D0364D4E22B3E37C002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = TelegramCore/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/third-party/FFmpeg-iOS/lib", - "$(PROJECT_DIR)/third-party/libwebp/lib", - ); - MODULEMAP_PRIVATE_FILE = ""; - OTHER_LDFLAGS = "-Wl,-dead_strip"; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramCore; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - }; - name = HockeyappMacAlpha; - }; - D0364D4F22B3E37C002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - INFOPLIST_FILE = TelegramCoreTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = HockeyappMacAlpha; - }; - D0364D5022B3E37C002A6EF0 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = NO; - FRAMEWORK_VERSION = A; - GCC_OPTIMIZATION_LEVEL = 0; - INFOPLIST_FILE = TelegramCoreMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/TelegramCore/module.private-mac.modulemap"; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = HockeyappMacAlpha; - }; - D06706551D51162400DED3E3 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStore; - }; - D06706561D51162400DED3E3 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = YES; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = TelegramCore/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/third-party/FFmpeg-iOS/lib", - "$(PROJECT_DIR)/third-party/libwebp/lib", - ); - MODULEMAP_PRIVATE_FILE = ""; - OTHER_LDFLAGS = "-Wl,-dead_strip"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramCore; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - }; - name = ReleaseAppStore; - }; - D06706571D51162400DED3E3 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - INFOPLIST_FILE = TelegramCoreTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseAppStore; - }; - D0924FE81FE52C12003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyappInternal; - }; - D0924FE91FE52C12003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = YES; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = TelegramCore/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/third-party/FFmpeg-iOS/lib", - "$(PROJECT_DIR)/third-party/libwebp/lib", - ); - MODULEMAP_PRIVATE_FILE = ""; - OTHER_LDFLAGS = "-Wl,-dead_strip"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramCore; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - }; - name = ReleaseHockeyappInternal; - }; - D0924FEA1FE52C12003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - INFOPLIST_FILE = TelegramCoreTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseHockeyappInternal; - }; - D0924FEB1FE52C12003F693F /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = TelegramCoreMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/TelegramCore/module.private-mac.modulemap"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = ReleaseHockeyappInternal; - }; - D09D8C131D4FAB1D0081DBEC /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugHockeyapp; - }; - D09D8C141D4FAB1D0081DBEC /* DebugAppStore */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStore; - }; - D09D8C161D4FAB1D0081DBEC /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = TelegramCore/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/third-party/FFmpeg-iOS/lib", - "$(PROJECT_DIR)/third-party/libwebp/lib", - ); - MODULEMAP_PRIVATE_FILE = ""; - OTHER_LDFLAGS = "-Wl,-dead_strip"; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramCore; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - }; - name = DebugHockeyapp; - }; - D09D8C171D4FAB1D0081DBEC /* DebugAppStore */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_OPTIMIZATION_LEVEL = 0; - INFOPLIST_FILE = TelegramCore/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/third-party/FFmpeg-iOS/lib", - "$(PROJECT_DIR)/third-party/libwebp/lib", - ); - MODULEMAP_PRIVATE_FILE = ""; - OTHER_LDFLAGS = "-Wl,-dead_strip"; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramCore; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - }; - name = DebugAppStore; - }; - D09D8C191D4FAB1D0081DBEC /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - INFOPLIST_FILE = TelegramCoreTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugHockeyapp; - }; - D09D8C1A1D4FAB1D0081DBEC /* DebugAppStore */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - INFOPLIST_FILE = TelegramCoreTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugAppStore; - }; - D0ADF934212B3ADA00310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStoreLLC; - }; - D0ADF935212B3ADA00310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_OPTIMIZATION_LEVEL = 0; - INFOPLIST_FILE = TelegramCore/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/third-party/FFmpeg-iOS/lib", - "$(PROJECT_DIR)/third-party/libwebp/lib", - ); - MODULEMAP_PRIVATE_FILE = ""; - OTHER_LDFLAGS = "-Wl,-dead_strip"; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramCore; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - }; - name = DebugAppStoreLLC; - }; - D0ADF936212B3ADA00310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - INFOPLIST_FILE = TelegramCoreTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = DebugAppStoreLLC; - }; - D0ADF937212B3ADA00310BBC /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = TelegramCoreMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/TelegramCore/module.private-mac.modulemap"; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = DebugAppStoreLLC; - }; - D0B4186D1D7E03D5004562A4 /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = NO; - FRAMEWORK_VERSION = A; - GCC_OPTIMIZATION_LEVEL = 0; - INFOPLIST_FILE = TelegramCoreMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/TelegramCore/module.private-mac.modulemap"; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = DebugHockeyapp; - }; - D0B4186E1D7E03D5004562A4 /* DebugAppStore */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = TelegramCoreMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/TelegramCore/module.private-mac.modulemap"; - OTHER_SWIFT_FLAGS = "-DDEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = DebugAppStore; - }; - D0B4186F1D7E03D5004562A4 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = TelegramCoreMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/TelegramCore/module.private-mac.modulemap"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = ReleaseAppStore; - }; - D0CE6EF5213DC30700BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EF6213DC30700BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = YES; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = TelegramCore/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/third-party/FFmpeg-iOS/lib", - "$(PROJECT_DIR)/third-party/libwebp/lib", - ); - MODULEMAP_PRIVATE_FILE = ""; - OTHER_LDFLAGS = "-Wl,-dead_strip"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramCore; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_REFLECTION_METADATA_LEVEL = all; - SWIFT_VERSION = 5.0; - USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/third-party/FFmpeg-iOS/include"; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EF7213DC30700BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - INFOPLIST_FILE = TelegramCoreTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = ReleaseAppStoreLLC; - }; - D0CE6EF8213DC30700BCD44B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D03B0E591D63215200955575 /* TelegramCore.xcconfig */; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = TelegramCoreMac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_PRIVATE_FILE = "$(SRCROOT)/TelegramCore/module.private-mac.modulemap"; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.TelegramCoreMac; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = ReleaseAppStoreLLC; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - D09D8BFB1D4FAB1D0081DBEC /* Build configuration list for PBXProject "TelegramCore_Xcode" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D09D8C131D4FAB1D0081DBEC /* DebugHockeyapp */, - D0364D4D22B3E37C002A6EF0 /* HockeyappMacAlpha */, - D021D508219CB1E40064BEBA /* DebugFork */, - D09D8C141D4FAB1D0081DBEC /* DebugAppStore */, - D0ADF934212B3ADA00310BBC /* DebugAppStoreLLC */, - C22069BE1E8EB4A200E82730 /* ReleaseHockeyapp */, - D0924FE81FE52C12003F693F /* ReleaseHockeyappInternal */, - D06706551D51162400DED3E3 /* ReleaseAppStore */, - D0CE6EF5213DC30700BCD44B /* ReleaseAppStoreLLC */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = DebugAppStore; - }; - D09D8C151D4FAB1D0081DBEC /* Build configuration list for PBXNativeTarget "TelegramCore" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D09D8C161D4FAB1D0081DBEC /* DebugHockeyapp */, - D0364D4E22B3E37C002A6EF0 /* HockeyappMacAlpha */, - D021D509219CB1E40064BEBA /* DebugFork */, - D09D8C171D4FAB1D0081DBEC /* DebugAppStore */, - D0ADF935212B3ADA00310BBC /* DebugAppStoreLLC */, - C22069BF1E8EB4A200E82730 /* ReleaseHockeyapp */, - D0924FE91FE52C12003F693F /* ReleaseHockeyappInternal */, - D06706561D51162400DED3E3 /* ReleaseAppStore */, - D0CE6EF6213DC30700BCD44B /* ReleaseAppStoreLLC */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = DebugAppStore; - }; - D09D8C181D4FAB1D0081DBEC /* Build configuration list for PBXNativeTarget "TelegramCoreTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D09D8C191D4FAB1D0081DBEC /* DebugHockeyapp */, - D0364D4F22B3E37C002A6EF0 /* HockeyappMacAlpha */, - D021D50A219CB1E40064BEBA /* DebugFork */, - D09D8C1A1D4FAB1D0081DBEC /* DebugAppStore */, - D0ADF936212B3ADA00310BBC /* DebugAppStoreLLC */, - C22069C01E8EB4A200E82730 /* ReleaseHockeyapp */, - D0924FEA1FE52C12003F693F /* ReleaseHockeyappInternal */, - D06706571D51162400DED3E3 /* ReleaseAppStore */, - D0CE6EF7213DC30700BCD44B /* ReleaseAppStoreLLC */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = DebugAppStore; - }; - D0B4186C1D7E03D5004562A4 /* Build configuration list for PBXNativeTarget "TelegramCoreMac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0B4186D1D7E03D5004562A4 /* DebugHockeyapp */, - D0364D5022B3E37C002A6EF0 /* HockeyappMacAlpha */, - D021D50B219CB1E40064BEBA /* DebugFork */, - D0B4186E1D7E03D5004562A4 /* DebugAppStore */, - D0ADF937212B3ADA00310BBC /* DebugAppStoreLLC */, - C22069C11E8EB4A200E82730 /* ReleaseHockeyapp */, - D0924FEB1FE52C12003F693F /* ReleaseHockeyappInternal */, - D0B4186F1D7E03D5004562A4 /* ReleaseAppStore */, - D0CE6EF8213DC30700BCD44B /* ReleaseAppStoreLLC */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = DebugAppStore; - }; -/* End XCConfigurationList section */ - }; - rootObject = D09D8BF81D4FAB1D0081DBEC /* Project object */; -} diff --git a/submodules/TelegramCore/TelegramCore_Xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/submodules/TelegramCore/TelegramCore_Xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 48eb199cdd..0000000000 --- a/submodules/TelegramCore/TelegramCore_Xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/submodules/TelegramCore/TelegramCore_Xcode.xcodeproj/xcshareddata/xcschemes/TelegramCore.xcscheme b/submodules/TelegramCore/TelegramCore_Xcode.xcodeproj/xcshareddata/xcschemes/TelegramCore.xcscheme deleted file mode 100644 index 0eb420f857..0000000000 --- a/submodules/TelegramCore/TelegramCore_Xcode.xcodeproj/xcshareddata/xcschemes/TelegramCore.xcscheme +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift index d1728dc4e2..fd5450fd36 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift @@ -281,4805 +281,4824 @@ public final class PresentationStrings: Equatable { public func ShareFileTip_Text(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[89]!, self._r[89]!, [_0]) } - public var AccessDenied_LocationDenied: String { return self._s[90]! } - public var CallSettings_RecentCalls: String { return self._s[91]! } - public var ConversationProfile_LeaveDeleteAndExit: String { return self._s[92]! } - public var Channel_Members_AddAdminErrorBlacklisted: String { return self._s[93]! } - public var Passport_Authorize: String { return self._s[94]! } - public var StickerPacksSettings_ArchivedMasks_Info: String { return self._s[95]! } - public var AutoDownloadSettings_Videos: String { return self._s[96]! } - public var TwoStepAuth_ReEnterPasswordTitle: String { return self._s[97]! } - public var Wallet_Info_Send: String { return self._s[98]! } - public var Wallet_TransactionInfo_SendGrams: String { return self._s[99]! } - public var Tour_StartButton: String { return self._s[100]! } - public var Watch_AppName: String { return self._s[102]! } - public var StickerPack_ErrorNotFound: String { return self._s[103]! } - public var Channel_Info_Subscribers: String { return self._s[104]! } + public var Wallet_Configuration_BlockchainIdPlaceholder: String { return self._s[90]! } + public var AccessDenied_LocationDenied: String { return self._s[91]! } + public var CallSettings_RecentCalls: String { return self._s[92]! } + public var ConversationProfile_LeaveDeleteAndExit: String { return self._s[93]! } + public var Channel_Members_AddAdminErrorBlacklisted: String { return self._s[94]! } + public var Passport_Authorize: String { return self._s[95]! } + public var StickerPacksSettings_ArchivedMasks_Info: String { return self._s[96]! } + public var AutoDownloadSettings_Videos: String { return self._s[97]! } + public var TwoStepAuth_ReEnterPasswordTitle: String { return self._s[98]! } + public var Wallet_Info_Send: String { return self._s[99]! } + public var Wallet_TransactionInfo_SendGrams: String { return self._s[100]! } + public var Tour_StartButton: String { return self._s[101]! } + public var Watch_AppName: String { return self._s[103]! } + public var StickerPack_ErrorNotFound: String { return self._s[104]! } + public var Channel_Info_Subscribers: String { return self._s[105]! } public func Channel_AdminLog_MessageGroupPreHistoryVisible(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[105]!, self._r[105]!, [_0]) - } - public func DialogList_PinLimitError(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[106]!, self._r[106]!, [_0]) } - public var Appearance_RemoveTheme: String { return self._s[107]! } + public func DialogList_PinLimitError(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[107]!, self._r[107]!, [_0]) + } + public var Appearance_RemoveTheme: String { return self._s[108]! } public func Wallet_Info_TransactionBlockchainFee(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[108]!, self._r[108]!, [_0]) + return formatWithArgumentRanges(self._s[109]!, self._r[109]!, [_0]) } - public var Conversation_StopLiveLocation: String { return self._s[110]! } - public var Channel_AdminLogFilter_EventsAll: String { return self._s[111]! } - public var GroupInfo_InviteLink_CopyAlert_Success: String { return self._s[113]! } - public var Username_LinkCopied: String { return self._s[115]! } - public var GroupRemoved_Title: String { return self._s[116]! } - public var SecretVideo_Title: String { return self._s[117]! } + public var Conversation_StopLiveLocation: String { return self._s[111]! } + public var Channel_AdminLogFilter_EventsAll: String { return self._s[112]! } + public var GroupInfo_InviteLink_CopyAlert_Success: String { return self._s[114]! } + public var Username_LinkCopied: String { return self._s[116]! } + public var GroupRemoved_Title: String { return self._s[117]! } + public var SecretVideo_Title: String { return self._s[118]! } public func PUSH_PINNED_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[118]!, self._r[118]!, [_1]) + return formatWithArgumentRanges(self._s[119]!, self._r[119]!, [_1]) } - public var AccessDenied_PhotosAndVideos: String { return self._s[119]! } - public var Appearance_ThemePreview_Chat_1_Text: String { return self._s[120]! } + public var AccessDenied_PhotosAndVideos: String { return self._s[120]! } + public var Appearance_ThemePreview_Chat_1_Text: String { return self._s[121]! } public func PUSH_CHANNEL_MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[122]!, self._r[122]!, [_1]) + return formatWithArgumentRanges(self._s[123]!, self._r[123]!, [_1]) } - public var Map_OpenInGoogleMaps: String { return self._s[123]! } + public var Map_OpenInGoogleMaps: String { return self._s[124]! } public func Time_PreciseDate_m12(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[124]!, self._r[124]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[125]!, self._r[125]!, [_1, _2, _3]) } public func Channel_AdminLog_MessageKickedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[125]!, self._r[125]!, [_1, _2]) + return formatWithArgumentRanges(self._s[126]!, self._r[126]!, [_1, _2]) } - public var Call_StatusRinging: String { return self._s[126]! } - public var SettingsSearch_Synonyms_EditProfile_Username: String { return self._s[127]! } - public var Group_Username_InvalidStartsWithNumber: String { return self._s[128]! } - public var UserInfo_NotificationsEnabled: String { return self._s[129]! } - public var Map_Search: String { return self._s[130]! } - public var Login_TermsOfServiceHeader: String { return self._s[132]! } + public var Call_StatusRinging: String { return self._s[127]! } + public var SettingsSearch_Synonyms_EditProfile_Username: String { return self._s[128]! } + public var Group_Username_InvalidStartsWithNumber: String { return self._s[129]! } + public var UserInfo_NotificationsEnabled: String { return self._s[130]! } + public var Map_Search: String { return self._s[131]! } + public var Login_TermsOfServiceHeader: String { return self._s[133]! } public func Notification_PinnedVideoMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[133]!, self._r[133]!, [_0]) - } - public func Channel_AdminLog_MessageToggleSignaturesOn(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[134]!, self._r[134]!, [_0]) } - public var Wallet_Sent_Title: String { return self._s[135]! } - public var TwoStepAuth_SetupPasswordConfirmPassword: String { return self._s[136]! } - public var Weekday_Today: String { return self._s[137]! } + public func Channel_AdminLog_MessageToggleSignaturesOn(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[135]!, self._r[135]!, [_0]) + } + public var Wallet_Sent_Title: String { return self._s[136]! } + public var TwoStepAuth_SetupPasswordConfirmPassword: String { return self._s[137]! } + public var Weekday_Today: String { return self._s[138]! } public func InstantPage_AuthorAndDateTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[139]!, self._r[139]!, [_1, _2]) + return formatWithArgumentRanges(self._s[140]!, self._r[140]!, [_1, _2]) } public func Conversation_MessageDialogRetryAll(_ _1: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[140]!, self._r[140]!, ["\(_1)"]) + return formatWithArgumentRanges(self._s[141]!, self._r[141]!, ["\(_1)"]) } - public var Notification_PassportValuePersonalDetails: String { return self._s[142]! } - public var Channel_AdminLog_MessagePreviousLink: String { return self._s[143]! } - public var ChangePhoneNumberNumber_NewNumber: String { return self._s[144]! } - public var ApplyLanguage_LanguageNotSupportedError: String { return self._s[145]! } - public var TwoStepAuth_ChangePasswordDescription: String { return self._s[146]! } - public var PhotoEditor_BlurToolLinear: String { return self._s[147]! } - public var Contacts_PermissionsAllowInSettings: String { return self._s[148]! } - public var Weekday_ShortMonday: String { return self._s[149]! } - public var Cache_KeepMedia: String { return self._s[150]! } - public var Passport_FieldIdentitySelfieHelp: String { return self._s[151]! } + public var Notification_PassportValuePersonalDetails: String { return self._s[143]! } + public var Channel_AdminLog_MessagePreviousLink: String { return self._s[144]! } + public var ChangePhoneNumberNumber_NewNumber: String { return self._s[145]! } + public var ApplyLanguage_LanguageNotSupportedError: String { return self._s[146]! } + public var TwoStepAuth_ChangePasswordDescription: String { return self._s[147]! } + public var PhotoEditor_BlurToolLinear: String { return self._s[148]! } + public var Contacts_PermissionsAllowInSettings: String { return self._s[149]! } + public var Weekday_ShortMonday: String { return self._s[150]! } + public var Cache_KeepMedia: String { return self._s[151]! } + public var Passport_FieldIdentitySelfieHelp: String { return self._s[152]! } public func PUSH_PINNED_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[152]!, self._r[152]!, [_1, _2]) + return formatWithArgumentRanges(self._s[153]!, self._r[153]!, [_1, _2]) } public func Chat_SlowmodeTooltip(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[153]!, self._r[153]!, [_0]) + return formatWithArgumentRanges(self._s[154]!, self._r[154]!, [_0]) } - public var Wallet_Receive_ShareUrlInfo: String { return self._s[154]! } - public var Conversation_ClousStorageInfo_Description4: String { return self._s[155]! } - public var Wallet_RestoreFailed_Title: String { return self._s[156]! } - public var Passport_Language_ru: String { return self._s[157]! } + public var Wallet_Receive_ShareUrlInfo: String { return self._s[155]! } + public var Conversation_ClousStorageInfo_Description4: String { return self._s[156]! } + public var Wallet_RestoreFailed_Title: String { return self._s[157]! } + public var Passport_Language_ru: String { return self._s[158]! } public func Notification_CreatedChatWithTitle(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[158]!, self._r[158]!, [_0, _1]) + return formatWithArgumentRanges(self._s[159]!, self._r[159]!, [_0, _1]) } - public var WallpaperPreview_PatternIntensity: String { return self._s[159]! } - public var WebBrowser_InAppSafari: String { return self._s[160]! } - public var TwoStepAuth_RecoveryUnavailable: String { return self._s[161]! } - public var EnterPasscode_TouchId: String { return self._s[162]! } - public var PhotoEditor_QualityVeryHigh: String { return self._s[165]! } - public var Checkout_NewCard_SaveInfo: String { return self._s[167]! } - public var Gif_NoGifsPlaceholder: String { return self._s[169]! } - public var Conversation_OpenBotLinkTitle: String { return self._s[171]! } - public var ChatSettings_AutoDownloadEnabled: String { return self._s[172]! } - public var NetworkUsageSettings_BytesSent: String { return self._s[173]! } - public var Checkout_PasswordEntry_Pay: String { return self._s[174]! } - public var AuthSessions_TerminateSession: String { return self._s[175]! } - public var Message_File: String { return self._s[176]! } - public var MediaPicker_VideoMuteDescription: String { return self._s[177]! } - public var SocksProxySetup_ProxyStatusConnected: String { return self._s[178]! } - public var TwoStepAuth_RecoveryCode: String { return self._s[179]! } - public var EnterPasscode_EnterCurrentPasscode: String { return self._s[180]! } + public var WallpaperPreview_PatternIntensity: String { return self._s[160]! } + public var WebBrowser_InAppSafari: String { return self._s[161]! } + public var TwoStepAuth_RecoveryUnavailable: String { return self._s[162]! } + public var EnterPasscode_TouchId: String { return self._s[163]! } + public var PhotoEditor_QualityVeryHigh: String { return self._s[166]! } + public var Checkout_NewCard_SaveInfo: String { return self._s[168]! } + public var Gif_NoGifsPlaceholder: String { return self._s[170]! } + public var Conversation_OpenBotLinkTitle: String { return self._s[172]! } + public var ChatSettings_AutoDownloadEnabled: String { return self._s[173]! } + public var NetworkUsageSettings_BytesSent: String { return self._s[174]! } + public var Checkout_PasswordEntry_Pay: String { return self._s[175]! } + public var AuthSessions_TerminateSession: String { return self._s[176]! } + public var Message_File: String { return self._s[177]! } + public var MediaPicker_VideoMuteDescription: String { return self._s[178]! } + public var SocksProxySetup_ProxyStatusConnected: String { return self._s[179]! } + public var TwoStepAuth_RecoveryCode: String { return self._s[180]! } + public var EnterPasscode_EnterCurrentPasscode: String { return self._s[181]! } public func TwoStepAuth_EnterPasswordHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[181]!, self._r[181]!, [_0]) + return formatWithArgumentRanges(self._s[182]!, self._r[182]!, [_0]) } - public var Conversation_Moderate_Report: String { return self._s[183]! } - public var TwoStepAuth_EmailInvalid: String { return self._s[184]! } - public var Passport_Language_ms: String { return self._s[185]! } - public var Channel_Edit_AboutItem: String { return self._s[187]! } - public var DialogList_SearchSectionGlobal: String { return self._s[191]! } - public var AttachmentMenu_WebSearch: String { return self._s[192]! } - public var PasscodeSettings_TurnPasscodeOn: String { return self._s[193]! } - public var Channel_BanUser_Title: String { return self._s[194]! } - public var WallpaperPreview_SwipeTopText: String { return self._s[195]! } - public var ChatList_DeleteSavedMessagesConfirmationText: String { return self._s[196]! } - public var ArchivedChats_IntroText2: String { return self._s[197]! } - public var Notification_Exceptions_DeleteAll: String { return self._s[198]! } - public var ChatSearch_SearchPlaceholder: String { return self._s[200]! } + public var Conversation_Moderate_Report: String { return self._s[184]! } + public var TwoStepAuth_EmailInvalid: String { return self._s[185]! } + public var Passport_Language_ms: String { return self._s[186]! } + public var Channel_Edit_AboutItem: String { return self._s[188]! } + public var DialogList_SearchSectionGlobal: String { return self._s[192]! } + public var AttachmentMenu_WebSearch: String { return self._s[193]! } + public var PasscodeSettings_TurnPasscodeOn: String { return self._s[194]! } + public var Channel_BanUser_Title: String { return self._s[195]! } + public var WallpaperPreview_SwipeTopText: String { return self._s[196]! } + public var ChatList_DeleteSavedMessagesConfirmationText: String { return self._s[197]! } + public var ArchivedChats_IntroText2: String { return self._s[198]! } + public var Notification_Exceptions_DeleteAll: String { return self._s[199]! } + public var ChatSearch_SearchPlaceholder: String { return self._s[201]! } public func Channel_AdminLog_MessageTransferedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[201]!, self._r[201]!, [_1, _2]) + return formatWithArgumentRanges(self._s[202]!, self._r[202]!, [_1, _2]) } - public var Passport_FieldAddressTranslationHelp: String { return self._s[202]! } - public var NotificationsSound_Aurora: String { return self._s[203]! } + public var Passport_FieldAddressTranslationHelp: String { return self._s[203]! } + public var NotificationsSound_Aurora: String { return self._s[204]! } public func FileSize_GB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[204]!, self._r[204]!, [_0]) + return formatWithArgumentRanges(self._s[205]!, self._r[205]!, [_0]) } - public var AuthSessions_LoggedInWithTelegram: String { return self._s[207]! } + public var AuthSessions_LoggedInWithTelegram: String { return self._s[208]! } public func Privacy_GroupsAndChannels_InviteToGroupError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[208]!, self._r[208]!, [_0, _1]) + return formatWithArgumentRanges(self._s[209]!, self._r[209]!, [_0, _1]) } - public var Passport_PasswordNext: String { return self._s[209]! } - public var Bot_GroupStatusReadsHistory: String { return self._s[210]! } - public var EmptyGroupInfo_Line2: String { return self._s[211]! } - public var VoiceOver_Chat_SeenByRecipients: String { return self._s[212]! } - public var Settings_FAQ_Intro: String { return self._s[215]! } - public var PrivacySettings_PasscodeAndTouchId: String { return self._s[217]! } - public var FeaturedStickerPacks_Title: String { return self._s[218]! } - public var TwoStepAuth_PasswordRemoveConfirmation: String { return self._s[220]! } - public var Username_Title: String { return self._s[221]! } + public var Passport_PasswordNext: String { return self._s[210]! } + public var Bot_GroupStatusReadsHistory: String { return self._s[211]! } + public var EmptyGroupInfo_Line2: String { return self._s[212]! } + public var VoiceOver_Chat_SeenByRecipients: String { return self._s[213]! } + public var Settings_FAQ_Intro: String { return self._s[216]! } + public var PrivacySettings_PasscodeAndTouchId: String { return self._s[218]! } + public var FeaturedStickerPacks_Title: String { return self._s[219]! } + public var TwoStepAuth_PasswordRemoveConfirmation: String { return self._s[221]! } + public var Username_Title: String { return self._s[222]! } public func Message_StickerText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[222]!, self._r[222]!, [_0]) + return formatWithArgumentRanges(self._s[223]!, self._r[223]!, [_0]) } - public var PasscodeSettings_AlphanumericCode: String { return self._s[223]! } - public var Localization_LanguageOther: String { return self._s[224]! } - public var Stickers_SuggestStickers: String { return self._s[225]! } + public var PasscodeSettings_AlphanumericCode: String { return self._s[224]! } + public var Localization_LanguageOther: String { return self._s[225]! } + public var Stickers_SuggestStickers: String { return self._s[226]! } public func Channel_AdminLog_MessageRemovedGroupUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[226]!, self._r[226]!, [_0]) + return formatWithArgumentRanges(self._s[227]!, self._r[227]!, [_0]) } - public var NotificationSettings_ShowNotificationsFromAccountsSection: String { return self._s[227]! } - public var Channel_AdminLogFilter_EventsAdmins: String { return self._s[228]! } - public var Conversation_DefaultRestrictedStickers: String { return self._s[229]! } + public var NotificationSettings_ShowNotificationsFromAccountsSection: String { return self._s[228]! } + public var Channel_AdminLogFilter_EventsAdmins: String { return self._s[229]! } + public var Conversation_DefaultRestrictedStickers: String { return self._s[230]! } public func Notification_PinnedDeletedMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[230]!, self._r[230]!, [_0]) + return formatWithArgumentRanges(self._s[231]!, self._r[231]!, [_0]) } - public var Wallet_TransactionInfo_CopyAddress: String { return self._s[232]! } - public var Group_UpgradeConfirmation: String { return self._s[233]! } - public var DialogList_Unpin: String { return self._s[234]! } - public var Passport_Identity_DateOfBirth: String { return self._s[235]! } - public var Month_ShortOctober: String { return self._s[236]! } - public var SettingsSearch_Synonyms_Privacy_Data_ContactsSync: String { return self._s[237]! } - public var TwoFactorSetup_Done_Text: String { return self._s[238]! } - public var Notification_CallCanceledShort: String { return self._s[239]! } - public var Passport_Phone_Help: String { return self._s[240]! } - public var Passport_Language_az: String { return self._s[242]! } - public var CreatePoll_TextPlaceholder: String { return self._s[244]! } - public var VoiceOver_Chat_AnonymousPoll: String { return self._s[245]! } - public var Passport_Identity_DocumentNumber: String { return self._s[246]! } - public var PhotoEditor_CurvesRed: String { return self._s[247]! } - public var PhoneNumberHelp_Alert: String { return self._s[249]! } - public var SocksProxySetup_Port: String { return self._s[250]! } - public var Checkout_PayNone: String { return self._s[251]! } - public var AutoDownloadSettings_WiFi: String { return self._s[252]! } - public var GroupInfo_GroupType: String { return self._s[253]! } - public var StickerSettings_ContextHide: String { return self._s[254]! } - public var Passport_Address_OneOfTypeTemporaryRegistration: String { return self._s[255]! } - public var Group_Setup_HistoryTitle: String { return self._s[257]! } - public var Passport_Identity_FilesUploadNew: String { return self._s[258]! } - public var PasscodeSettings_AutoLock: String { return self._s[259]! } - public var Passport_Title: String { return self._s[260]! } - public var VoiceOver_Chat_ContactPhoneNumber: String { return self._s[261]! } - public var Channel_AdminLogFilter_EventsNewSubscribers: String { return self._s[262]! } - public var GroupPermission_NoSendGifs: String { return self._s[263]! } - public var PrivacySettings_PasscodeOn: String { return self._s[264]! } + public var Wallet_TransactionInfo_CopyAddress: String { return self._s[233]! } + public var Group_UpgradeConfirmation: String { return self._s[234]! } + public var DialogList_Unpin: String { return self._s[235]! } + public var Passport_Identity_DateOfBirth: String { return self._s[236]! } + public var Month_ShortOctober: String { return self._s[237]! } + public var SettingsSearch_Synonyms_Privacy_Data_ContactsSync: String { return self._s[238]! } + public var TwoFactorSetup_Done_Text: String { return self._s[239]! } + public var Notification_CallCanceledShort: String { return self._s[240]! } + public var Passport_Phone_Help: String { return self._s[241]! } + public var Passport_Language_az: String { return self._s[243]! } + public var CreatePoll_TextPlaceholder: String { return self._s[245]! } + public var VoiceOver_Chat_AnonymousPoll: String { return self._s[246]! } + public var Passport_Identity_DocumentNumber: String { return self._s[247]! } + public var PhotoEditor_CurvesRed: String { return self._s[248]! } + public var PhoneNumberHelp_Alert: String { return self._s[250]! } + public var SocksProxySetup_Port: String { return self._s[251]! } + public var Checkout_PayNone: String { return self._s[252]! } + public var AutoDownloadSettings_WiFi: String { return self._s[253]! } + public var GroupInfo_GroupType: String { return self._s[254]! } + public var StickerSettings_ContextHide: String { return self._s[255]! } + public var Passport_Address_OneOfTypeTemporaryRegistration: String { return self._s[256]! } + public var Group_Setup_HistoryTitle: String { return self._s[258]! } + public var Passport_Identity_FilesUploadNew: String { return self._s[259]! } + public var PasscodeSettings_AutoLock: String { return self._s[260]! } + public var Passport_Title: String { return self._s[261]! } + public var VoiceOver_Chat_ContactPhoneNumber: String { return self._s[262]! } + public var Channel_AdminLogFilter_EventsNewSubscribers: String { return self._s[263]! } + public var GroupPermission_NoSendGifs: String { return self._s[264]! } + public var PrivacySettings_PasscodeOn: String { return self._s[265]! } public func Conversation_ScheduleMessage_SendTomorrow(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[265]!, self._r[265]!, [_0]) + return formatWithArgumentRanges(self._s[266]!, self._r[266]!, [_0]) } - public var State_WaitingForNetwork: String { return self._s[267]! } + public var State_WaitingForNetwork: String { return self._s[268]! } public func Notification_Invited(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[268]!, self._r[268]!, [_0, _1]) + return formatWithArgumentRanges(self._s[269]!, self._r[269]!, [_0, _1]) } - public var Calls_NotNow: String { return self._s[270]! } + public var Calls_NotNow: String { return self._s[271]! } public func Channel_DiscussionGroup_HeaderSet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[271]!, self._r[271]!, [_0]) + return formatWithArgumentRanges(self._s[272]!, self._r[272]!, [_0]) } - public var UserInfo_SendMessage: String { return self._s[272]! } - public var TwoStepAuth_PasswordSet: String { return self._s[273]! } - public var Passport_DeleteDocument: String { return self._s[274]! } - public var SocksProxySetup_AddProxyTitle: String { return self._s[275]! } + public var UserInfo_SendMessage: String { return self._s[273]! } + public var TwoStepAuth_PasswordSet: String { return self._s[274]! } + public var Passport_DeleteDocument: String { return self._s[275]! } + public var SocksProxySetup_AddProxyTitle: String { return self._s[276]! } public func PUSH_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[276]!, self._r[276]!, [_1]) + return formatWithArgumentRanges(self._s[277]!, self._r[277]!, [_1]) } - public var GroupRemoved_Remove: String { return self._s[277]! } - public var Passport_FieldIdentity: String { return self._s[278]! } - public var Group_Setup_TypePrivateHelp: String { return self._s[279]! } - public var Conversation_Processing: String { return self._s[282]! } - public var Wallet_Settings_BackupWallet: String { return self._s[284]! } - public var ChatSettings_AutoPlayAnimations: String { return self._s[285]! } - public var AuthSessions_LogOutApplicationsHelp: String { return self._s[288]! } - public var Month_GenFebruary: String { return self._s[289]! } - public var Wallet_Send_NetworkErrorTitle: String { return self._s[290]! } + public var GroupRemoved_Remove: String { return self._s[278]! } + public var Passport_FieldIdentity: String { return self._s[279]! } + public var Group_Setup_TypePrivateHelp: String { return self._s[280]! } + public var Conversation_Processing: String { return self._s[283]! } + public var Wallet_Settings_BackupWallet: String { return self._s[285]! } + public var ChatSettings_AutoPlayAnimations: String { return self._s[286]! } + public var AuthSessions_LogOutApplicationsHelp: String { return self._s[289]! } + public var Month_GenFebruary: String { return self._s[290]! } + public var Wallet_Send_NetworkErrorTitle: String { return self._s[291]! } public func Login_InvalidPhoneEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[292]!, self._r[292]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[293]!, self._r[293]!, [_1, _2, _3, _4, _5]) } - public var Passport_Identity_TypeIdentityCard: String { return self._s[293]! } - public var Wallet_Month_ShortJune: String { return self._s[295]! } - public var AutoDownloadSettings_DataUsageMedium: String { return self._s[296]! } - public var GroupInfo_AddParticipant: String { return self._s[297]! } - public var KeyCommand_SendMessage: String { return self._s[298]! } - public var VoiceOver_Chat_YourContact: String { return self._s[300]! } - public var Map_LiveLocationShowAll: String { return self._s[301]! } - public var WallpaperSearch_ColorOrange: String { return self._s[303]! } - public var Appearance_AppIconDefaultX: String { return self._s[304]! } - public var Checkout_Receipt_Title: String { return self._s[305]! } - public var Group_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[306]! } - public var WallpaperPreview_PreviewTopText: String { return self._s[307]! } - public var Message_Contact: String { return self._s[308]! } - public var Call_StatusIncoming: String { return self._s[309]! } - public var Wallet_TransactionInfo_StorageFeeInfo: String { return self._s[310]! } + public var Passport_Identity_TypeIdentityCard: String { return self._s[294]! } + public var Wallet_Month_ShortJune: String { return self._s[296]! } + public var AutoDownloadSettings_DataUsageMedium: String { return self._s[297]! } + public var GroupInfo_AddParticipant: String { return self._s[298]! } + public var KeyCommand_SendMessage: String { return self._s[299]! } + public var VoiceOver_Chat_YourContact: String { return self._s[301]! } + public var Map_LiveLocationShowAll: String { return self._s[302]! } + public var WallpaperSearch_ColorOrange: String { return self._s[304]! } + public var Appearance_AppIconDefaultX: String { return self._s[305]! } + public var Checkout_Receipt_Title: String { return self._s[306]! } + public var Group_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[307]! } + public var WallpaperPreview_PreviewTopText: String { return self._s[308]! } + public var Message_Contact: String { return self._s[309]! } + public var Call_StatusIncoming: String { return self._s[310]! } + public var Wallet_TransactionInfo_StorageFeeInfo: String { return self._s[311]! } public func Channel_AdminLog_MessageKickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[311]!, self._r[311]!, [_1]) + return formatWithArgumentRanges(self._s[312]!, self._r[312]!, [_1]) } public func PUSH_ENCRYPTED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[313]!, self._r[313]!, [_1]) + return formatWithArgumentRanges(self._s[314]!, self._r[314]!, [_1]) } - public var VoiceOver_Media_PlaybackRate: String { return self._s[314]! } - public var Passport_FieldIdentityDetailsHelp: String { return self._s[315]! } - public var Conversation_ViewChannel: String { return self._s[316]! } + public var VoiceOver_Media_PlaybackRate: String { return self._s[315]! } + public var Passport_FieldIdentityDetailsHelp: String { return self._s[316]! } + public var Conversation_ViewChannel: String { return self._s[317]! } public func Time_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[317]!, self._r[317]!, [_0]) + return formatWithArgumentRanges(self._s[318]!, self._r[318]!, [_0]) } - public var Passport_Language_nl: String { return self._s[319]! } - public var Camera_Retake: String { return self._s[320]! } + public var Passport_Language_nl: String { return self._s[320]! } + public var Camera_Retake: String { return self._s[321]! } public func UserInfo_BlockActionTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[321]!, self._r[321]!, [_0]) + return formatWithArgumentRanges(self._s[322]!, self._r[322]!, [_0]) } - public var AuthSessions_LogOutApplications: String { return self._s[322]! } - public var ApplyLanguage_ApplySuccess: String { return self._s[323]! } - public var Tour_Title6: String { return self._s[324]! } - public var Map_ChooseAPlace: String { return self._s[325]! } - public var CallSettings_Never: String { return self._s[327]! } + public var AuthSessions_LogOutApplications: String { return self._s[323]! } + public var ApplyLanguage_ApplySuccess: String { return self._s[324]! } + public var Tour_Title6: String { return self._s[325]! } + public var Map_ChooseAPlace: String { return self._s[326]! } + public var CallSettings_Never: String { return self._s[328]! } public func Notification_ChangedGroupPhoto(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[328]!, self._r[328]!, [_0]) + return formatWithArgumentRanges(self._s[329]!, self._r[329]!, [_0]) } - public var ChannelRemoved_RemoveInfo: String { return self._s[329]! } + public var ChannelRemoved_RemoveInfo: String { return self._s[330]! } public func AutoDownloadSettings_PreloadVideoInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[330]!, self._r[330]!, [_0]) + return formatWithArgumentRanges(self._s[331]!, self._r[331]!, [_0]) } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsExceptions: String { return self._s[331]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsExceptions: String { return self._s[332]! } public func Conversation_ClearChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[332]!, self._r[332]!, [_0]) + return formatWithArgumentRanges(self._s[333]!, self._r[333]!, [_0]) } - public var GroupInfo_InviteLink_Title: String { return self._s[333]! } + public var GroupInfo_InviteLink_Title: String { return self._s[334]! } public func Channel_AdminLog_MessageUnkickedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[334]!, self._r[334]!, [_1, _2]) + return formatWithArgumentRanges(self._s[335]!, self._r[335]!, [_1, _2]) } - public var KeyCommand_ScrollUp: String { return self._s[335]! } - public var ContactInfo_URLLabelHomepage: String { return self._s[336]! } - public var Channel_OwnershipTransfer_ChangeOwner: String { return self._s[337]! } + public var KeyCommand_ScrollUp: String { return self._s[336]! } + public var ContactInfo_URLLabelHomepage: String { return self._s[337]! } + public var Channel_OwnershipTransfer_ChangeOwner: String { return self._s[338]! } public func Channel_AdminLog_DisabledSlowmode(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[338]!, self._r[338]!, [_0]) + return formatWithArgumentRanges(self._s[339]!, self._r[339]!, [_0]) } - public var TwoFactorSetup_Done_Title: String { return self._s[339]! } + public var TwoFactorSetup_Done_Title: String { return self._s[340]! } public func Conversation_EncryptedPlaceholderTitleOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[340]!, self._r[340]!, [_0]) + return formatWithArgumentRanges(self._s[341]!, self._r[341]!, [_0]) } - public var CallFeedback_ReasonDistortedSpeech: String { return self._s[341]! } - public var Watch_LastSeen_WithinAWeek: String { return self._s[342]! } - public var ContactList_Context_SendMessage: String { return self._s[344]! } - public var Weekday_Tuesday: String { return self._s[345]! } - public var Wallet_Created_Title: String { return self._s[347]! } - public var ScheduledMessages_Delete: String { return self._s[348]! } - public var UserInfo_StartSecretChat: String { return self._s[349]! } - public var Passport_Identity_FilesTitle: String { return self._s[350]! } - public var Permissions_NotificationsAllow_v0: String { return self._s[351]! } - public var DialogList_DeleteConversationConfirmation: String { return self._s[353]! } - public var ChatList_UndoArchiveRevealedTitle: String { return self._s[354]! } - public var AuthSessions_Sessions: String { return self._s[355]! } + public var CallFeedback_ReasonDistortedSpeech: String { return self._s[342]! } + public var Watch_LastSeen_WithinAWeek: String { return self._s[343]! } + public var ContactList_Context_SendMessage: String { return self._s[345]! } + public var Weekday_Tuesday: String { return self._s[346]! } + public var Wallet_Created_Title: String { return self._s[348]! } + public var ScheduledMessages_Delete: String { return self._s[349]! } + public var UserInfo_StartSecretChat: String { return self._s[350]! } + public var Passport_Identity_FilesTitle: String { return self._s[351]! } + public var Permissions_NotificationsAllow_v0: String { return self._s[352]! } + public var DialogList_DeleteConversationConfirmation: String { return self._s[354]! } + public var ChatList_UndoArchiveRevealedTitle: String { return self._s[355]! } + public func Wallet_Configuration_ApplyErrorTextURLUnreachable(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[356]!, self._r[356]!, [_0]) + } + public var AuthSessions_Sessions: String { return self._s[357]! } public func Settings_KeepPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[357]!, self._r[357]!, [_0]) + return formatWithArgumentRanges(self._s[359]!, self._r[359]!, [_0]) } - public var TwoStepAuth_RecoveryEmailChangeDescription: String { return self._s[358]! } - public var Call_StatusWaiting: String { return self._s[359]! } - public var CreateGroup_SoftUserLimitAlert: String { return self._s[360]! } - public var FastTwoStepSetup_HintHelp: String { return self._s[361]! } - public var WallpaperPreview_CustomColorBottomText: String { return self._s[362]! } - public var EditTheme_Expand_Preview_OutgoingText: String { return self._s[363]! } - public var LogoutOptions_AddAccountText: String { return self._s[364]! } - public var PasscodeSettings_6DigitCode: String { return self._s[365]! } - public var Settings_LogoutConfirmationText: String { return self._s[366]! } - public var Passport_Identity_TypePassport: String { return self._s[368]! } + public var TwoStepAuth_RecoveryEmailChangeDescription: String { return self._s[360]! } + public var Call_StatusWaiting: String { return self._s[361]! } + public var CreateGroup_SoftUserLimitAlert: String { return self._s[362]! } + public var FastTwoStepSetup_HintHelp: String { return self._s[363]! } + public var WallpaperPreview_CustomColorBottomText: String { return self._s[364]! } + public var EditTheme_Expand_Preview_OutgoingText: String { return self._s[365]! } + public var LogoutOptions_AddAccountText: String { return self._s[366]! } + public var PasscodeSettings_6DigitCode: String { return self._s[367]! } + public var Settings_LogoutConfirmationText: String { return self._s[368]! } + public var Passport_Identity_TypePassport: String { return self._s[370]! } public func PUSH_MESSAGE_VIDEOS(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[371]!, self._r[371]!, [_1, _2]) + return formatWithArgumentRanges(self._s[373]!, self._r[373]!, [_1, _2]) } - public var SocksProxySetup_SaveProxy: String { return self._s[372]! } - public var AccessDenied_SaveMedia: String { return self._s[373]! } - public var Checkout_ErrorInvoiceAlreadyPaid: String { return self._s[375]! } - public var Settings_Title: String { return self._s[377]! } - public var VoiceOver_Chat_RecordModeVideoMessageInfo: String { return self._s[378]! } - public var Contacts_InviteSearchLabel: String { return self._s[380]! } - public var ConvertToSupergroup_Title: String { return self._s[381]! } + public var SocksProxySetup_SaveProxy: String { return self._s[374]! } + public var AccessDenied_SaveMedia: String { return self._s[375]! } + public var Checkout_ErrorInvoiceAlreadyPaid: String { return self._s[377]! } + public var Settings_Title: String { return self._s[379]! } + public var VoiceOver_Chat_RecordModeVideoMessageInfo: String { return self._s[380]! } + public var Contacts_InviteSearchLabel: String { return self._s[382]! } + public var ConvertToSupergroup_Title: String { return self._s[383]! } public func Channel_AdminLog_CaptionEdited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[382]!, self._r[382]!, [_0]) + return formatWithArgumentRanges(self._s[384]!, self._r[384]!, [_0]) } - public var TwoFactorSetup_Hint_Text: String { return self._s[383]! } - public var InfoPlist_NSSiriUsageDescription: String { return self._s[384]! } + public var TwoFactorSetup_Hint_Text: String { return self._s[385]! } + public var InfoPlist_NSSiriUsageDescription: String { return self._s[386]! } public func PUSH_MESSAGE_CHANNEL_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[385]!, self._r[385]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[387]!, self._r[387]!, [_1, _2, _3]) } - public var ChatSettings_AutomaticPhotoDownload: String { return self._s[386]! } - public var UserInfo_BotHelp: String { return self._s[387]! } - public var PrivacySettings_LastSeenEverybody: String { return self._s[388]! } - public var Checkout_Name: String { return self._s[389]! } - public var AutoDownloadSettings_DataUsage: String { return self._s[390]! } - public var Channel_BanUser_BlockFor: String { return self._s[391]! } - public var Checkout_ShippingAddress: String { return self._s[392]! } - public var AutoDownloadSettings_MaxVideoSize: String { return self._s[393]! } - public var Privacy_PaymentsClearInfoDoneHelp: String { return self._s[394]! } - public var Privacy_Forwards: String { return self._s[395]! } - public var Channel_BanUser_PermissionSendPolls: String { return self._s[396]! } - public var Appearance_ThemeCarouselNewNight: String { return self._s[397]! } + public var ChatSettings_AutomaticPhotoDownload: String { return self._s[388]! } + public var UserInfo_BotHelp: String { return self._s[389]! } + public var PrivacySettings_LastSeenEverybody: String { return self._s[390]! } + public var Checkout_Name: String { return self._s[391]! } + public var AutoDownloadSettings_DataUsage: String { return self._s[392]! } + public var Channel_BanUser_BlockFor: String { return self._s[393]! } + public var Checkout_ShippingAddress: String { return self._s[394]! } + public var AutoDownloadSettings_MaxVideoSize: String { return self._s[395]! } + public var Privacy_PaymentsClearInfoDoneHelp: String { return self._s[396]! } + public var Privacy_Forwards: String { return self._s[397]! } + public var Channel_BanUser_PermissionSendPolls: String { return self._s[398]! } + public var Appearance_ThemeCarouselNewNight: String { return self._s[399]! } public func SecretVideo_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[400]!, self._r[400]!, [_0]) + return formatWithArgumentRanges(self._s[402]!, self._r[402]!, [_0]) } - public var Contacts_SortedByName: String { return self._s[401]! } - public var Group_OwnershipTransfer_Title: String { return self._s[402]! } - public var VoiceOver_Chat_OpenHint: String { return self._s[403]! } - public var Group_LeaveGroup: String { return self._s[404]! } - public var Settings_UsernameEmpty: String { return self._s[405]! } + public var Contacts_SortedByName: String { return self._s[403]! } + public var Group_OwnershipTransfer_Title: String { return self._s[404]! } + public var VoiceOver_Chat_OpenHint: String { return self._s[405]! } + public var Group_LeaveGroup: String { return self._s[406]! } + public var Settings_UsernameEmpty: String { return self._s[407]! } public func Notification_PinnedPollMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[406]!, self._r[406]!, [_0]) + return formatWithArgumentRanges(self._s[408]!, self._r[408]!, [_0]) } public func TwoStepAuth_ConfirmEmailDescription(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[407]!, self._r[407]!, [_1]) + return formatWithArgumentRanges(self._s[409]!, self._r[409]!, [_1]) } public func Channel_OwnershipTransfer_DescriptionInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[408]!, self._r[408]!, [_1, _2]) + return formatWithArgumentRanges(self._s[410]!, self._r[410]!, [_1, _2]) } - public var Message_ImageExpired: String { return self._s[409]! } - public var TwoStepAuth_RecoveryFailed: String { return self._s[411]! } - public var EditTheme_Edit_Preview_OutgoingText: String { return self._s[412]! } - public var UserInfo_AddToExisting: String { return self._s[413]! } - public var TwoStepAuth_EnabledSuccess: String { return self._s[414]! } - public var Wallet_Send_SyncInProgress: String { return self._s[415]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground_SetColor: String { return self._s[416]! } + public var Message_ImageExpired: String { return self._s[411]! } + public var TwoStepAuth_RecoveryFailed: String { return self._s[413]! } + public var EditTheme_Edit_Preview_OutgoingText: String { return self._s[414]! } + public var UserInfo_AddToExisting: String { return self._s[415]! } + public var TwoStepAuth_EnabledSuccess: String { return self._s[416]! } + public var Wallet_Send_SyncInProgress: String { return self._s[417]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground_SetColor: String { return self._s[418]! } public func PUSH_CHANNEL_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[417]!, self._r[417]!, [_1]) + return formatWithArgumentRanges(self._s[419]!, self._r[419]!, [_1]) } - public var Notifications_GroupNotificationsAlert: String { return self._s[418]! } - public var Passport_Language_km: String { return self._s[419]! } - public var SocksProxySetup_AdNoticeHelp: String { return self._s[421]! } - public var VoiceOver_Media_PlaybackPlay: String { return self._s[422]! } - public var Notification_CallMissedShort: String { return self._s[423]! } - public var Wallet_Info_YourBalance: String { return self._s[424]! } - public var ReportPeer_ReasonOther_Send: String { return self._s[425]! } - public var Watch_Compose_Send: String { return self._s[426]! } - public var Passport_Identity_TypeInternalPassportUploadScan: String { return self._s[429]! } - public var TwoFactorSetup_Email_Action: String { return self._s[430]! } - public var Conversation_HoldForVideo: String { return self._s[431]! } - public var Wallet_TransactionInfo_CommentHeader: String { return self._s[432]! } - public var CheckoutInfo_ErrorCityInvalid: String { return self._s[434]! } - public var Appearance_AutoNightThemeDisabled: String { return self._s[436]! } - public var Channel_LinkItem: String { return self._s[437]! } + public var Notifications_GroupNotificationsAlert: String { return self._s[420]! } + public var Passport_Language_km: String { return self._s[421]! } + public var SocksProxySetup_AdNoticeHelp: String { return self._s[423]! } + public var VoiceOver_Media_PlaybackPlay: String { return self._s[424]! } + public var Notification_CallMissedShort: String { return self._s[425]! } + public var Wallet_Info_YourBalance: String { return self._s[426]! } + public var ReportPeer_ReasonOther_Send: String { return self._s[427]! } + public var Watch_Compose_Send: String { return self._s[428]! } + public var Passport_Identity_TypeInternalPassportUploadScan: String { return self._s[431]! } + public var TwoFactorSetup_Email_Action: String { return self._s[432]! } + public var Conversation_HoldForVideo: String { return self._s[433]! } + public var Wallet_Configuration_ApplyErrorTextURLInvalidData: String { return self._s[434]! } + public var Wallet_TransactionInfo_CommentHeader: String { return self._s[435]! } + public var CheckoutInfo_ErrorCityInvalid: String { return self._s[437]! } + public var Appearance_AutoNightThemeDisabled: String { return self._s[439]! } + public var Channel_LinkItem: String { return self._s[440]! } public func PrivacySettings_LastSeenContactsMinusPlus(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[438]!, self._r[438]!, [_0, _1]) + return formatWithArgumentRanges(self._s[441]!, self._r[441]!, [_0, _1]) } public func Passport_Identity_NativeNameTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[441]!, self._r[441]!, [_0]) + return formatWithArgumentRanges(self._s[444]!, self._r[444]!, [_0]) } - public var VoiceOver_Recording_StopAndPreview: String { return self._s[442]! } - public var Passport_Language_dv: String { return self._s[443]! } - public var Undo_LeftChannel: String { return self._s[444]! } - public var Notifications_ExceptionsMuted: String { return self._s[445]! } - public var ChatList_UnhideAction: String { return self._s[446]! } - public var Conversation_ContextMenuShare: String { return self._s[447]! } - public var Conversation_ContextMenuStickerPackInfo: String { return self._s[448]! } - public var ShareFileTip_Title: String { return self._s[449]! } - public var NotificationsSound_Chord: String { return self._s[450]! } - public var Wallet_TransactionInfo_OtherFeeHeader: String { return self._s[451]! } + public var VoiceOver_Recording_StopAndPreview: String { return self._s[445]! } + public var Passport_Language_dv: String { return self._s[446]! } + public var Undo_LeftChannel: String { return self._s[447]! } + public var Notifications_ExceptionsMuted: String { return self._s[448]! } + public var ChatList_UnhideAction: String { return self._s[449]! } + public var Conversation_ContextMenuShare: String { return self._s[450]! } + public var Conversation_ContextMenuStickerPackInfo: String { return self._s[451]! } + public var ShareFileTip_Title: String { return self._s[452]! } + public var NotificationsSound_Chord: String { return self._s[453]! } + public var Wallet_TransactionInfo_OtherFeeHeader: String { return self._s[454]! } public func PUSH_CHAT_RETURNED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[452]!, self._r[452]!, [_1, _2]) + return formatWithArgumentRanges(self._s[455]!, self._r[455]!, [_1, _2]) } - public var Passport_Address_EditTemporaryRegistration: String { return self._s[453]! } + public var Passport_Address_EditTemporaryRegistration: String { return self._s[456]! } public func Notification_Joined(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[454]!, self._r[454]!, [_0]) + return formatWithArgumentRanges(self._s[457]!, self._r[457]!, [_0]) } public func Wallet_Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[455]!, self._r[455]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[458]!, self._r[458]!, [_1, _2, _3]) } - public var Wallpaper_ErrorNotFound: String { return self._s[456]! } - public var Notification_CallOutgoingShort: String { return self._s[458]! } - public var Wallet_WordImport_IncorrectText: String { return self._s[459]! } + public var Wallet_Settings_ConfigurationInfo: String { return self._s[459]! } + public var Wallpaper_ErrorNotFound: String { return self._s[460]! } + public var Notification_CallOutgoingShort: String { return self._s[462]! } + public var Wallet_WordImport_IncorrectText: String { return self._s[463]! } public func Watch_Time_ShortFullAt(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[460]!, self._r[460]!, [_1, _2]) + return formatWithArgumentRanges(self._s[464]!, self._r[464]!, [_1, _2]) } - public var Passport_Address_TypeUtilityBill: String { return self._s[461]! } - public var Privacy_Forwards_LinkIfAllowed: String { return self._s[462]! } - public var ReportPeer_Report: String { return self._s[463]! } - public var SettingsSearch_Synonyms_Proxy_Title: String { return self._s[464]! } - public var GroupInfo_DeactivatedStatus: String { return self._s[465]! } + public var Passport_Address_TypeUtilityBill: String { return self._s[465]! } + public var Privacy_Forwards_LinkIfAllowed: String { return self._s[466]! } + public var ReportPeer_Report: String { return self._s[467]! } + public var SettingsSearch_Synonyms_Proxy_Title: String { return self._s[468]! } + public var GroupInfo_DeactivatedStatus: String { return self._s[469]! } public func VoiceOver_Chat_MusicTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[466]!, self._r[466]!, [_1, _2]) + return formatWithArgumentRanges(self._s[470]!, self._r[470]!, [_1, _2]) } - public var StickerPack_Send: String { return self._s[467]! } - public var Login_CodeSentInternal: String { return self._s[468]! } - public var Wallet_Month_GenJanuary: String { return self._s[469]! } - public var GroupInfo_InviteLink_LinkSection: String { return self._s[470]! } + public var StickerPack_Send: String { return self._s[471]! } + public var Login_CodeSentInternal: String { return self._s[472]! } + public var Wallet_Month_GenJanuary: String { return self._s[473]! } + public var GroupInfo_InviteLink_LinkSection: String { return self._s[474]! } public func Channel_AdminLog_MessageDeleted(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[471]!, self._r[471]!, [_0]) + return formatWithArgumentRanges(self._s[475]!, self._r[475]!, [_0]) } public func Conversation_EncryptionWaiting(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[473]!, self._r[473]!, [_0]) + return formatWithArgumentRanges(self._s[477]!, self._r[477]!, [_0]) } - public var Channel_BanUser_PermissionSendStickersAndGifs: String { return self._s[474]! } + public var Channel_BanUser_PermissionSendStickersAndGifs: String { return self._s[478]! } public func PUSH_PINNED_GAME(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[475]!, self._r[475]!, [_1]) + return formatWithArgumentRanges(self._s[479]!, self._r[479]!, [_1]) } - public var ReportPeer_ReasonViolence: String { return self._s[477]! } - public var Map_Locating: String { return self._s[478]! } + public var ReportPeer_ReasonViolence: String { return self._s[481]! } + public var Map_Locating: String { return self._s[482]! } public func VoiceOver_Chat_VideoFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[479]!, self._r[479]!, [_0]) + return formatWithArgumentRanges(self._s[483]!, self._r[483]!, [_0]) } public func PUSH_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[480]!, self._r[480]!, [_1]) + return formatWithArgumentRanges(self._s[484]!, self._r[484]!, [_1]) } - public var AutoDownloadSettings_GroupChats: String { return self._s[482]! } - public var CheckoutInfo_SaveInfo: String { return self._s[483]! } - public var SharedMedia_EmptyLinksText: String { return self._s[485]! } - public var Passport_Address_CityPlaceholder: String { return self._s[486]! } - public var CheckoutInfo_ErrorStateInvalid: String { return self._s[487]! } - public var Privacy_ProfilePhoto_CustomHelp: String { return self._s[488]! } - public var Wallet_Send_OwnAddressAlertTitle: String { return self._s[490]! } - public var Channel_AdminLog_CanAddAdmins: String { return self._s[491]! } + public var AutoDownloadSettings_GroupChats: String { return self._s[486]! } + public var CheckoutInfo_SaveInfo: String { return self._s[487]! } + public var SharedMedia_EmptyLinksText: String { return self._s[489]! } + public var Passport_Address_CityPlaceholder: String { return self._s[490]! } + public var CheckoutInfo_ErrorStateInvalid: String { return self._s[491]! } + public var Privacy_ProfilePhoto_CustomHelp: String { return self._s[492]! } + public var Wallet_Send_OwnAddressAlertTitle: String { return self._s[494]! } + public var Channel_AdminLog_CanAddAdmins: String { return self._s[495]! } public func PUSH_CHANNEL_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[492]!, self._r[492]!, [_1]) + return formatWithArgumentRanges(self._s[496]!, self._r[496]!, [_1]) } public func Time_MonthOfYear_m8(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[493]!, self._r[493]!, [_0]) + return formatWithArgumentRanges(self._s[497]!, self._r[497]!, [_0]) } - public var InfoPlist_NSLocationWhenInUseUsageDescription: String { return self._s[494]! } - public var GroupInfo_InviteLink_RevokeAlert_Success: String { return self._s[495]! } - public var ChangePhoneNumberCode_Code: String { return self._s[496]! } - public var Appearance_CreateTheme: String { return self._s[497]! } + public var InfoPlist_NSLocationWhenInUseUsageDescription: String { return self._s[498]! } + public var GroupInfo_InviteLink_RevokeAlert_Success: String { return self._s[499]! } + public var ChangePhoneNumberCode_Code: String { return self._s[500]! } + public var Appearance_CreateTheme: String { return self._s[501]! } public func UserInfo_NotificationsDefaultSound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[498]!, self._r[498]!, [_0]) + return formatWithArgumentRanges(self._s[502]!, self._r[502]!, [_0]) } - public var TwoStepAuth_SetupEmail: String { return self._s[499]! } - public var HashtagSearch_AllChats: String { return self._s[500]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[502]! } + public var TwoStepAuth_SetupEmail: String { return self._s[503]! } + public var HashtagSearch_AllChats: String { return self._s[504]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[506]! } public func ChatList_DeleteForEveryone(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[503]!, self._r[503]!, [_0]) + return formatWithArgumentRanges(self._s[507]!, self._r[507]!, [_0]) } - public var PhotoEditor_QualityHigh: String { return self._s[505]! } + public var PhotoEditor_QualityHigh: String { return self._s[509]! } public func Passport_Phone_UseTelegramNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[506]!, self._r[506]!, [_0]) + return formatWithArgumentRanges(self._s[510]!, self._r[510]!, [_0]) } - public var ApplyLanguage_ApplyLanguageAction: String { return self._s[507]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[508]! } - public var Message_LiveLocation: String { return self._s[509]! } - public var Cache_LowDiskSpaceText: String { return self._s[510]! } - public var Wallet_Receive_ShareAddress: String { return self._s[511]! } - public var EditTheme_ErrorLinkTaken: String { return self._s[512]! } - public var Conversation_SendMessage: String { return self._s[513]! } - public var AuthSessions_EmptyTitle: String { return self._s[514]! } - public var Privacy_PhoneNumber: String { return self._s[515]! } - public var PeopleNearby_CreateGroup: String { return self._s[516]! } - public var CallSettings_UseLessData: String { return self._s[517]! } - public var NetworkUsageSettings_MediaDocumentDataSection: String { return self._s[518]! } - public var Stickers_AddToFavorites: String { return self._s[519]! } - public var Wallet_WordImport_Title: String { return self._s[520]! } - public var PhotoEditor_QualityLow: String { return self._s[521]! } - public var Watch_UserInfo_Unblock: String { return self._s[522]! } - public var Settings_Logout: String { return self._s[523]! } + public var ApplyLanguage_ApplyLanguageAction: String { return self._s[511]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[512]! } + public var Message_LiveLocation: String { return self._s[513]! } + public var Cache_LowDiskSpaceText: String { return self._s[514]! } + public var Wallet_Receive_ShareAddress: String { return self._s[515]! } + public var EditTheme_ErrorLinkTaken: String { return self._s[516]! } + public var Conversation_SendMessage: String { return self._s[517]! } + public var AuthSessions_EmptyTitle: String { return self._s[518]! } + public var Privacy_PhoneNumber: String { return self._s[519]! } + public var PeopleNearby_CreateGroup: String { return self._s[520]! } + public var CallSettings_UseLessData: String { return self._s[521]! } + public var NetworkUsageSettings_MediaDocumentDataSection: String { return self._s[522]! } + public var Stickers_AddToFavorites: String { return self._s[523]! } + public var Wallet_WordImport_Title: String { return self._s[524]! } + public var PhotoEditor_QualityLow: String { return self._s[525]! } + public var Watch_UserInfo_Unblock: String { return self._s[526]! } + public var Settings_Logout: String { return self._s[527]! } public func PUSH_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[524]!, self._r[524]!, [_1]) + return formatWithArgumentRanges(self._s[528]!, self._r[528]!, [_1]) } - public var ContactInfo_PhoneLabelWork: String { return self._s[525]! } - public var ChannelInfo_Stats: String { return self._s[526]! } - public var TextFormat_Link: String { return self._s[527]! } + public var ContactInfo_PhoneLabelWork: String { return self._s[529]! } + public var ChannelInfo_Stats: String { return self._s[530]! } + public var TextFormat_Link: String { return self._s[531]! } public func Date_ChatDateHeader(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[528]!, self._r[528]!, [_1, _2]) + return formatWithArgumentRanges(self._s[532]!, self._r[532]!, [_1, _2]) } - public var Wallet_TransactionInfo_Title: String { return self._s[529]! } + public var Wallet_TransactionInfo_Title: String { return self._s[533]! } public func Message_ForwardedMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[530]!, self._r[530]!, [_0]) + return formatWithArgumentRanges(self._s[534]!, self._r[534]!, [_0]) } - public var Watch_Notification_Joined: String { return self._s[531]! } - public var Group_Setup_TypePublicHelp: String { return self._s[532]! } - public var Passport_Scans_UploadNew: String { return self._s[533]! } - public var Checkout_LiabilityAlertTitle: String { return self._s[534]! } - public var DialogList_Title: String { return self._s[537]! } - public var NotificationSettings_ContactJoined: String { return self._s[538]! } - public var GroupInfo_LabelAdmin: String { return self._s[539]! } - public var KeyCommand_ChatInfo: String { return self._s[540]! } - public var Conversation_EditingCaptionPanelTitle: String { return self._s[541]! } - public var Call_ReportIncludeLog: String { return self._s[542]! } + public var Watch_Notification_Joined: String { return self._s[535]! } + public var Group_Setup_TypePublicHelp: String { return self._s[536]! } + public var Passport_Scans_UploadNew: String { return self._s[537]! } + public var Checkout_LiabilityAlertTitle: String { return self._s[538]! } + public var DialogList_Title: String { return self._s[541]! } + public var NotificationSettings_ContactJoined: String { return self._s[542]! } + public var GroupInfo_LabelAdmin: String { return self._s[543]! } + public var KeyCommand_ChatInfo: String { return self._s[544]! } + public var Conversation_EditingCaptionPanelTitle: String { return self._s[545]! } + public var Call_ReportIncludeLog: String { return self._s[546]! } public func Notifications_ExceptionsChangeSound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[545]!, self._r[545]!, [_0]) + return formatWithArgumentRanges(self._s[549]!, self._r[549]!, [_0]) } - public var LocalGroup_IrrelevantWarning: String { return self._s[546]! } - public var ChatAdmins_AllMembersAreAdmins: String { return self._s[547]! } - public var Conversation_DefaultRestrictedInline: String { return self._s[548]! } - public var Message_Sticker: String { return self._s[549]! } - public var LastSeen_JustNow: String { return self._s[551]! } - public var Passport_Email_EmailPlaceholder: String { return self._s[553]! } - public var SettingsSearch_Synonyms_AppLanguage: String { return self._s[554]! } - public var Channel_AdminLogFilter_EventsEditedMessages: String { return self._s[555]! } - public var Channel_EditAdmin_PermissionsHeader: String { return self._s[556]! } - public var TwoStepAuth_Email: String { return self._s[557]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsSound: String { return self._s[558]! } - public var PhotoEditor_BlurToolOff: String { return self._s[559]! } - public var Message_PinnedStickerMessage: String { return self._s[560]! } - public var ContactInfo_PhoneLabelPager: String { return self._s[561]! } - public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[562]! } - public var Passport_DiscardMessageTitle: String { return self._s[563]! } - public var Privacy_PaymentsTitle: String { return self._s[564]! } - public var EditTheme_Edit_Preview_IncomingReplyName: String { return self._s[565]! } - public var Channel_DiscussionGroup_Header: String { return self._s[567]! } - public var VoiceOver_Chat_OptionSelected: String { return self._s[568]! } - public var Appearance_ColorTheme: String { return self._s[569]! } - public var UserInfo_ShareContact: String { return self._s[570]! } - public var Passport_Address_TypePassportRegistration: String { return self._s[571]! } - public var Common_More: String { return self._s[572]! } - public var Watch_Message_Call: String { return self._s[573]! } - public var Profile_EncryptionKey: String { return self._s[576]! } - public var Privacy_TopPeers: String { return self._s[577]! } - public var Conversation_StopPollConfirmation: String { return self._s[578]! } - public var Wallet_Words_NotDoneText: String { return self._s[580]! } - public var Privacy_TopPeersWarning: String { return self._s[582]! } - public var SettingsSearch_Synonyms_Data_DownloadInBackground: String { return self._s[583]! } - public var SettingsSearch_Synonyms_Data_Storage_KeepMedia: String { return self._s[584]! } - public var Wallet_RestoreFailed_EnterWords: String { return self._s[587]! } - public var DialogList_SearchSectionMessages: String { return self._s[588]! } - public var Notifications_ChannelNotifications: String { return self._s[589]! } - public var CheckoutInfo_ShippingInfoAddress1Placeholder: String { return self._s[590]! } - public var Passport_Language_sk: String { return self._s[591]! } - public var Notification_MessageLifetime1h: String { return self._s[592]! } - public var Wallpaper_ResetWallpapersInfo: String { return self._s[593]! } - public var Call_ReportSkip: String { return self._s[595]! } - public var Cache_ServiceFiles: String { return self._s[596]! } - public var Group_ErrorAddTooMuchAdmins: String { return self._s[597]! } - public var VoiceOver_Chat_YourFile: String { return self._s[598]! } - public var Map_Hybrid: String { return self._s[599]! } - public var Contacts_SearchUsersAndGroupsLabel: String { return self._s[601]! } - public var ChatSettings_AutoDownloadVideos: String { return self._s[603]! } - public var Channel_BanUser_PermissionEmbedLinks: String { return self._s[604]! } - public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[605]! } - public var SocksProxySetup_ProxyTelegram: String { return self._s[608]! } + public var LocalGroup_IrrelevantWarning: String { return self._s[550]! } + public var ChatAdmins_AllMembersAreAdmins: String { return self._s[551]! } + public var Conversation_DefaultRestrictedInline: String { return self._s[552]! } + public var Message_Sticker: String { return self._s[553]! } + public var LastSeen_JustNow: String { return self._s[555]! } + public var Passport_Email_EmailPlaceholder: String { return self._s[557]! } + public var SettingsSearch_Synonyms_AppLanguage: String { return self._s[558]! } + public var Channel_AdminLogFilter_EventsEditedMessages: String { return self._s[559]! } + public var Channel_EditAdmin_PermissionsHeader: String { return self._s[560]! } + public var TwoStepAuth_Email: String { return self._s[561]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsSound: String { return self._s[562]! } + public var PhotoEditor_BlurToolOff: String { return self._s[563]! } + public var Message_PinnedStickerMessage: String { return self._s[564]! } + public var ContactInfo_PhoneLabelPager: String { return self._s[565]! } + public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[566]! } + public var Passport_DiscardMessageTitle: String { return self._s[567]! } + public var Privacy_PaymentsTitle: String { return self._s[568]! } + public var EditTheme_Edit_Preview_IncomingReplyName: String { return self._s[569]! } + public var Channel_DiscussionGroup_Header: String { return self._s[571]! } + public var VoiceOver_Chat_OptionSelected: String { return self._s[572]! } + public var Appearance_ColorTheme: String { return self._s[573]! } + public var UserInfo_ShareContact: String { return self._s[574]! } + public var Passport_Address_TypePassportRegistration: String { return self._s[575]! } + public var Common_More: String { return self._s[576]! } + public var Watch_Message_Call: String { return self._s[577]! } + public var Profile_EncryptionKey: String { return self._s[580]! } + public var Privacy_TopPeers: String { return self._s[581]! } + public var Conversation_StopPollConfirmation: String { return self._s[582]! } + public var Wallet_Words_NotDoneText: String { return self._s[584]! } + public var Privacy_TopPeersWarning: String { return self._s[586]! } + public var SettingsSearch_Synonyms_Data_DownloadInBackground: String { return self._s[587]! } + public var SettingsSearch_Synonyms_Data_Storage_KeepMedia: String { return self._s[588]! } + public var Wallet_RestoreFailed_EnterWords: String { return self._s[591]! } + public var DialogList_SearchSectionMessages: String { return self._s[592]! } + public var Notifications_ChannelNotifications: String { return self._s[593]! } + public var CheckoutInfo_ShippingInfoAddress1Placeholder: String { return self._s[594]! } + public var Passport_Language_sk: String { return self._s[595]! } + public var Notification_MessageLifetime1h: String { return self._s[596]! } + public var Wallpaper_ResetWallpapersInfo: String { return self._s[597]! } + public var Call_ReportSkip: String { return self._s[599]! } + public var Cache_ServiceFiles: String { return self._s[600]! } + public var Group_ErrorAddTooMuchAdmins: String { return self._s[601]! } + public var VoiceOver_Chat_YourFile: String { return self._s[602]! } + public var Map_Hybrid: String { return self._s[603]! } + public var Contacts_SearchUsersAndGroupsLabel: String { return self._s[605]! } + public var ChatSettings_AutoDownloadVideos: String { return self._s[607]! } + public var Channel_BanUser_PermissionEmbedLinks: String { return self._s[608]! } + public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[609]! } + public var SocksProxySetup_ProxyTelegram: String { return self._s[612]! } public func PUSH_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[609]!, self._r[609]!, [_1]) + return formatWithArgumentRanges(self._s[613]!, self._r[613]!, [_1]) } - public var Channel_Username_CreatePrivateLinkHelp: String { return self._s[611]! } - public var ScheduledMessages_ScheduledToday: String { return self._s[612]! } + public var Channel_Username_CreatePrivateLinkHelp: String { return self._s[615]! } + public var ScheduledMessages_ScheduledToday: String { return self._s[616]! } public func PUSH_CHAT_TITLE_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[613]!, self._r[613]!, [_1, _2]) + return formatWithArgumentRanges(self._s[617]!, self._r[617]!, [_1, _2]) } - public var Conversation_LiveLocationYou: String { return self._s[614]! } - public var SettingsSearch_Synonyms_Privacy_Calls: String { return self._s[615]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsPreview: String { return self._s[616]! } - public var UserInfo_ShareBot: String { return self._s[619]! } + public var Conversation_LiveLocationYou: String { return self._s[618]! } + public var SettingsSearch_Synonyms_Privacy_Calls: String { return self._s[619]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsPreview: String { return self._s[620]! } + public var UserInfo_ShareBot: String { return self._s[623]! } public func PUSH_AUTH_REGION(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[620]!, self._r[620]!, [_1, _2]) + return formatWithArgumentRanges(self._s[624]!, self._r[624]!, [_1, _2]) } - public var Conversation_ClearCache: String { return self._s[621]! } - public var PhotoEditor_ShadowsTint: String { return self._s[622]! } - public var Message_Audio: String { return self._s[623]! } - public var Passport_Language_lt: String { return self._s[624]! } + public var Conversation_ClearCache: String { return self._s[625]! } + public var PhotoEditor_ShadowsTint: String { return self._s[626]! } + public var Message_Audio: String { return self._s[627]! } + public var Passport_Language_lt: String { return self._s[628]! } public func Message_PinnedTextMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[625]!, self._r[625]!, [_0]) + return formatWithArgumentRanges(self._s[629]!, self._r[629]!, [_0]) } - public var Permissions_SiriText_v0: String { return self._s[626]! } - public var Conversation_FileICloudDrive: String { return self._s[627]! } - public var ChatList_DeleteForEveryoneConfirmationTitle: String { return self._s[628]! } - public var Notifications_Badge_IncludeMutedChats: String { return self._s[629]! } + public var Permissions_SiriText_v0: String { return self._s[630]! } + public var Conversation_FileICloudDrive: String { return self._s[631]! } + public var ChatList_DeleteForEveryoneConfirmationTitle: String { return self._s[632]! } + public var Notifications_Badge_IncludeMutedChats: String { return self._s[633]! } public func Notification_NewAuthDetected(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[630]!, self._r[630]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[634]!, self._r[634]!, [_1, _2, _3, _4, _5, _6]) } - public var DialogList_ProxyConnectionIssuesTooltip: String { return self._s[631]! } + public var DialogList_ProxyConnectionIssuesTooltip: String { return self._s[635]! } public func Time_MonthOfYear_m5(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[632]!, self._r[632]!, [_0]) + return formatWithArgumentRanges(self._s[636]!, self._r[636]!, [_0]) } - public var Channel_SignMessages: String { return self._s[633]! } + public var Channel_SignMessages: String { return self._s[637]! } public func PUSH_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[634]!, self._r[634]!, [_1]) + return formatWithArgumentRanges(self._s[638]!, self._r[638]!, [_1]) } - public var Compose_ChannelTokenListPlaceholder: String { return self._s[635]! } - public var Passport_ScanPassport: String { return self._s[636]! } - public var Watch_Suggestion_Thanks: String { return self._s[637]! } - public var BlockedUsers_AddNew: String { return self._s[638]! } + public var Compose_ChannelTokenListPlaceholder: String { return self._s[639]! } + public var Passport_ScanPassport: String { return self._s[640]! } + public var Watch_Suggestion_Thanks: String { return self._s[641]! } + public var BlockedUsers_AddNew: String { return self._s[642]! } public func PUSH_CHAT_MESSAGE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[639]!, self._r[639]!, [_1, _2]) + return formatWithArgumentRanges(self._s[643]!, self._r[643]!, [_1, _2]) } - public var Watch_Message_Invoice: String { return self._s[640]! } - public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[641]! } - public var Month_GenJuly: String { return self._s[642]! } - public var SocksProxySetup_ProxySocks5: String { return self._s[643]! } - public var Notification_Exceptions_DeleteAllConfirmation: String { return self._s[645]! } - public var Notification_ChannelInviterSelf: String { return self._s[646]! } - public var CheckoutInfo_ReceiverInfoEmail: String { return self._s[647]! } + public var Watch_Message_Invoice: String { return self._s[644]! } + public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[645]! } + public var Month_GenJuly: String { return self._s[646]! } + public var SocksProxySetup_ProxySocks5: String { return self._s[647]! } + public var Notification_Exceptions_DeleteAllConfirmation: String { return self._s[649]! } + public var Notification_ChannelInviterSelf: String { return self._s[650]! } + public var CheckoutInfo_ReceiverInfoEmail: String { return self._s[651]! } public func ApplyLanguage_ChangeLanguageUnofficialText(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[648]!, self._r[648]!, [_1, _2]) + return formatWithArgumentRanges(self._s[652]!, self._r[652]!, [_1, _2]) } - public var CheckoutInfo_Title: String { return self._s[649]! } - public var Watch_Stickers_RecentPlaceholder: String { return self._s[650]! } + public var CheckoutInfo_Title: String { return self._s[653]! } + public var Watch_Stickers_RecentPlaceholder: String { return self._s[654]! } public func Map_DistanceAway(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[651]!, self._r[651]!, [_0]) + return formatWithArgumentRanges(self._s[655]!, self._r[655]!, [_0]) } - public var Passport_Identity_MainPage: String { return self._s[652]! } - public var TwoStepAuth_ConfirmEmailResendCode: String { return self._s[653]! } - public var Passport_Language_de: String { return self._s[654]! } - public var Update_Title: String { return self._s[655]! } - public var ContactInfo_PhoneLabelWorkFax: String { return self._s[656]! } - public var Channel_AdminLog_BanEmbedLinks: String { return self._s[657]! } - public var Passport_Email_UseTelegramEmailHelp: String { return self._s[658]! } - public var Notifications_ChannelNotificationsPreview: String { return self._s[659]! } - public var NotificationsSound_Telegraph: String { return self._s[660]! } - public var Watch_LastSeen_ALongTimeAgo: String { return self._s[661]! } - public var ChannelMembers_WhoCanAddMembers: String { return self._s[662]! } + public var Passport_Identity_MainPage: String { return self._s[656]! } + public var TwoStepAuth_ConfirmEmailResendCode: String { return self._s[657]! } + public var Passport_Language_de: String { return self._s[658]! } + public var Update_Title: String { return self._s[659]! } + public var ContactInfo_PhoneLabelWorkFax: String { return self._s[660]! } + public var Channel_AdminLog_BanEmbedLinks: String { return self._s[661]! } + public var Passport_Email_UseTelegramEmailHelp: String { return self._s[662]! } + public var Notifications_ChannelNotificationsPreview: String { return self._s[663]! } + public var NotificationsSound_Telegraph: String { return self._s[664]! } + public var Watch_LastSeen_ALongTimeAgo: String { return self._s[665]! } + public var ChannelMembers_WhoCanAddMembers: String { return self._s[666]! } public func AutoDownloadSettings_UpTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[663]!, self._r[663]!, [_0]) + return formatWithArgumentRanges(self._s[667]!, self._r[667]!, [_0]) } - public var ClearCache_Description: String { return self._s[664]! } - public var Stickers_SuggestAll: String { return self._s[665]! } - public var Conversation_ForwardTitle: String { return self._s[666]! } - public var Appearance_ThemePreview_ChatList_7_Name: String { return self._s[667]! } + public var ClearCache_Description: String { return self._s[668]! } + public var Stickers_SuggestAll: String { return self._s[669]! } + public var Conversation_ForwardTitle: String { return self._s[670]! } + public var Appearance_ThemePreview_ChatList_7_Name: String { return self._s[671]! } public func Notification_JoinedChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[668]!, self._r[668]!, [_0]) + return formatWithArgumentRanges(self._s[672]!, self._r[672]!, [_0]) } - public var Calls_NewCall: String { return self._s[669]! } - public var Call_StatusEnded: String { return self._s[670]! } - public var AutoDownloadSettings_DataUsageLow: String { return self._s[671]! } - public var Settings_ProxyConnected: String { return self._s[672]! } - public var Channel_AdminLogFilter_EventsPinned: String { return self._s[673]! } - public var PhotoEditor_QualityVeryLow: String { return self._s[674]! } - public var Channel_AdminLogFilter_EventsDeletedMessages: String { return self._s[675]! } - public var Passport_PasswordPlaceholder: String { return self._s[676]! } - public var Message_PinnedInvoice: String { return self._s[677]! } - public var Passport_Identity_IssueDate: String { return self._s[678]! } - public var Passport_Language_pl: String { return self._s[679]! } + public var Calls_NewCall: String { return self._s[673]! } + public var Call_StatusEnded: String { return self._s[674]! } + public var AutoDownloadSettings_DataUsageLow: String { return self._s[675]! } + public var Settings_ProxyConnected: String { return self._s[676]! } + public var Channel_AdminLogFilter_EventsPinned: String { return self._s[677]! } + public var PhotoEditor_QualityVeryLow: String { return self._s[678]! } + public var Channel_AdminLogFilter_EventsDeletedMessages: String { return self._s[679]! } + public var Passport_PasswordPlaceholder: String { return self._s[680]! } + public var Message_PinnedInvoice: String { return self._s[681]! } + public var Passport_Identity_IssueDate: String { return self._s[682]! } + public var Passport_Language_pl: String { return self._s[683]! } public func ChannelInfo_ChannelForbidden(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[680]!, self._r[680]!, [_0]) + return formatWithArgumentRanges(self._s[684]!, self._r[684]!, [_0]) } - public var SocksProxySetup_PasteFromClipboard: String { return self._s[681]! } - public var Call_StatusConnecting: String { return self._s[682]! } + public var SocksProxySetup_PasteFromClipboard: String { return self._s[685]! } + public var Call_StatusConnecting: String { return self._s[686]! } public func Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[683]!, self._r[683]!, [_0]) + return formatWithArgumentRanges(self._s[687]!, self._r[687]!, [_0]) } - public var ChatSettings_ConnectionType_UseProxy: String { return self._s[685]! } - public var Common_Edit: String { return self._s[686]! } - public var PrivacySettings_LastSeenNobody: String { return self._s[687]! } + public var ChatSettings_ConnectionType_UseProxy: String { return self._s[689]! } + public var Common_Edit: String { return self._s[690]! } + public var PrivacySettings_LastSeenNobody: String { return self._s[691]! } public func Notification_LeftChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[688]!, self._r[688]!, [_0]) + return formatWithArgumentRanges(self._s[692]!, self._r[692]!, [_0]) } - public var GroupInfo_ChatAdmins: String { return self._s[689]! } - public var PrivateDataSettings_Title: String { return self._s[690]! } - public var Login_CancelPhoneVerificationStop: String { return self._s[691]! } - public var ChatList_Read: String { return self._s[692]! } - public var Wallet_WordImport_Text: String { return self._s[693]! } - public var Undo_ChatClearedForBothSides: String { return self._s[694]! } - public var GroupPermission_SectionTitle: String { return self._s[695]! } - public var TwoFactorSetup_Intro_Title: String { return self._s[697]! } + public var GroupInfo_ChatAdmins: String { return self._s[693]! } + public var PrivateDataSettings_Title: String { return self._s[694]! } + public var Login_CancelPhoneVerificationStop: String { return self._s[695]! } + public var ChatList_Read: String { return self._s[696]! } + public var Wallet_WordImport_Text: String { return self._s[697]! } + public var Undo_ChatClearedForBothSides: String { return self._s[698]! } + public var GroupPermission_SectionTitle: String { return self._s[699]! } + public var TwoFactorSetup_Intro_Title: String { return self._s[701]! } public func PUSH_CHAT_LEFT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[698]!, self._r[698]!, [_1, _2]) + return formatWithArgumentRanges(self._s[702]!, self._r[702]!, [_1, _2]) } - public var Checkout_ErrorPaymentFailed: String { return self._s[699]! } - public var Update_UpdateApp: String { return self._s[700]! } - public var Group_Username_RevokeExistingUsernamesInfo: String { return self._s[701]! } - public var Settings_Appearance: String { return self._s[702]! } - public var SettingsSearch_Synonyms_Stickers_SuggestStickers: String { return self._s[706]! } - public var Watch_Location_Access: String { return self._s[707]! } - public var ShareMenu_CopyShareLink: String { return self._s[709]! } - public var TwoStepAuth_SetupHintTitle: String { return self._s[710]! } - public var Conversation_Theme: String { return self._s[712]! } + public var Checkout_ErrorPaymentFailed: String { return self._s[703]! } + public var Update_UpdateApp: String { return self._s[704]! } + public var Group_Username_RevokeExistingUsernamesInfo: String { return self._s[705]! } + public var Settings_Appearance: String { return self._s[706]! } + public var SettingsSearch_Synonyms_Stickers_SuggestStickers: String { return self._s[710]! } + public var Watch_Location_Access: String { return self._s[711]! } + public var ShareMenu_CopyShareLink: String { return self._s[713]! } + public var TwoStepAuth_SetupHintTitle: String { return self._s[714]! } + public var Conversation_Theme: String { return self._s[716]! } public func DialogList_SingleRecordingVideoMessageSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[713]!, self._r[713]!, [_0]) + return formatWithArgumentRanges(self._s[717]!, self._r[717]!, [_0]) } - public var Notifications_ClassicTones: String { return self._s[714]! } - public var Weekday_ShortWednesday: String { return self._s[715]! } - public var WallpaperPreview_SwipeColorsBottomText: String { return self._s[716]! } - public var Undo_LeftGroup: String { return self._s[719]! } - public var Wallet_RestoreFailed_Text: String { return self._s[720]! } - public var Conversation_LinkDialogCopy: String { return self._s[721]! } - public var Wallet_TransactionInfo_NoAddress: String { return self._s[723]! } - public var Wallet_Navigation_Back: String { return self._s[724]! } - public var KeyCommand_FocusOnInputField: String { return self._s[725]! } - public var Contacts_SelectAll: String { return self._s[726]! } - public var Preview_SaveToCameraRoll: String { return self._s[727]! } - public var PrivacySettings_PasscodeOff: String { return self._s[728]! } - public var Appearance_ThemePreview_ChatList_6_Name: String { return self._s[729]! } - public var Wallpaper_Title: String { return self._s[730]! } - public var Conversation_FilePhotoOrVideo: String { return self._s[731]! } - public var AccessDenied_Camera: String { return self._s[732]! } - public var Watch_Compose_CurrentLocation: String { return self._s[733]! } - public var Channel_DiscussionGroup_MakeHistoryPublicProceed: String { return self._s[735]! } + public var Notifications_ClassicTones: String { return self._s[718]! } + public var Weekday_ShortWednesday: String { return self._s[719]! } + public var WallpaperPreview_SwipeColorsBottomText: String { return self._s[720]! } + public var Undo_LeftGroup: String { return self._s[723]! } + public var Wallet_RestoreFailed_Text: String { return self._s[724]! } + public var Conversation_LinkDialogCopy: String { return self._s[725]! } + public var Wallet_TransactionInfo_NoAddress: String { return self._s[727]! } + public var Wallet_Navigation_Back: String { return self._s[728]! } + public var KeyCommand_FocusOnInputField: String { return self._s[729]! } + public var Contacts_SelectAll: String { return self._s[730]! } + public var Preview_SaveToCameraRoll: String { return self._s[731]! } + public var PrivacySettings_PasscodeOff: String { return self._s[732]! } + public var Appearance_ThemePreview_ChatList_6_Name: String { return self._s[733]! } + public var Wallpaper_Title: String { return self._s[734]! } + public var Conversation_FilePhotoOrVideo: String { return self._s[735]! } + public var AccessDenied_Camera: String { return self._s[736]! } + public var Watch_Compose_CurrentLocation: String { return self._s[737]! } + public var Channel_DiscussionGroup_MakeHistoryPublicProceed: String { return self._s[739]! } public func SecretImage_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[736]!, self._r[736]!, [_0]) + return formatWithArgumentRanges(self._s[740]!, self._r[740]!, [_0]) } - public var GroupInfo_InvitationLinkDoesNotExist: String { return self._s[737]! } - public var Passport_Language_ro: String { return self._s[738]! } - public var EditTheme_UploadNewTheme: String { return self._s[739]! } - public var CheckoutInfo_SaveInfoHelp: String { return self._s[740]! } - public var Wallet_Intro_Terms: String { return self._s[741]! } + public var GroupInfo_InvitationLinkDoesNotExist: String { return self._s[741]! } + public var Passport_Language_ro: String { return self._s[742]! } + public var EditTheme_UploadNewTheme: String { return self._s[743]! } + public var CheckoutInfo_SaveInfoHelp: String { return self._s[744]! } + public var Wallet_Intro_Terms: String { return self._s[745]! } public func Notification_SecretChatMessageScreenshot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[742]!, self._r[742]!, [_0]) + return formatWithArgumentRanges(self._s[746]!, self._r[746]!, [_0]) } - public var Login_CancelPhoneVerification: String { return self._s[743]! } - public var State_ConnectingToProxy: String { return self._s[744]! } - public var Calls_RatingTitle: String { return self._s[745]! } - public var Generic_ErrorMoreInfo: String { return self._s[746]! } - public var Appearance_PreviewReplyText: String { return self._s[747]! } - public var CheckoutInfo_ShippingInfoPostcodePlaceholder: String { return self._s[748]! } + public var Login_CancelPhoneVerification: String { return self._s[747]! } + public var State_ConnectingToProxy: String { return self._s[748]! } + public var Calls_RatingTitle: String { return self._s[749]! } + public var Generic_ErrorMoreInfo: String { return self._s[750]! } + public var Appearance_PreviewReplyText: String { return self._s[751]! } + public var CheckoutInfo_ShippingInfoPostcodePlaceholder: String { return self._s[752]! } public func Wallet_Send_Balance(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[749]!, self._r[749]!, [_0]) + return formatWithArgumentRanges(self._s[753]!, self._r[753]!, [_0]) } - public var SharedMedia_CategoryLinks: String { return self._s[750]! } - public var Calls_Missed: String { return self._s[751]! } - public var Cache_Photos: String { return self._s[755]! } - public var GroupPermission_NoAddMembers: String { return self._s[756]! } - public var ScheduledMessages_Title: String { return self._s[757]! } + public var SharedMedia_CategoryLinks: String { return self._s[754]! } + public var Calls_Missed: String { return self._s[755]! } + public var Cache_Photos: String { return self._s[759]! } + public var GroupPermission_NoAddMembers: String { return self._s[760]! } + public var ScheduledMessages_Title: String { return self._s[761]! } public func Channel_AdminLog_MessageUnpinned(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[758]!, self._r[758]!, [_0]) - } - public var Conversation_ShareBotLocationConfirmationTitle: String { return self._s[759]! } - public var Settings_ProxyDisabled: String { return self._s[760]! } - public func Settings_ApplyProxyAlertCredentials(_ _1: String, _ _2: String, _ _3: String, _ _4: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[761]!, self._r[761]!, [_1, _2, _3, _4]) - } - public func Conversation_RestrictedMediaTimed(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[762]!, self._r[762]!, [_0]) } - public var ChatList_Context_RemoveFromRecents: String { return self._s[764]! } - public var Appearance_Title: String { return self._s[765]! } + public var Conversation_ShareBotLocationConfirmationTitle: String { return self._s[763]! } + public var Settings_ProxyDisabled: String { return self._s[764]! } + public func Settings_ApplyProxyAlertCredentials(_ _1: String, _ _2: String, _ _3: String, _ _4: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[765]!, self._r[765]!, [_1, _2, _3, _4]) + } + public func Conversation_RestrictedMediaTimed(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[766]!, self._r[766]!, [_0]) + } + public var ChatList_Context_RemoveFromRecents: String { return self._s[768]! } + public var Appearance_Title: String { return self._s[769]! } public func Time_MonthOfYear_m2(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[767]!, self._r[767]!, [_0]) + return formatWithArgumentRanges(self._s[771]!, self._r[771]!, [_0]) } - public var Conversation_WalletRequiredText: String { return self._s[768]! } - public var StickerPacksSettings_ShowStickersButtonHelp: String { return self._s[769]! } - public var Channel_EditMessageErrorGeneric: String { return self._s[770]! } - public var Privacy_Calls_IntegrationHelp: String { return self._s[771]! } - public var Preview_DeletePhoto: String { return self._s[772]! } - public var Appearance_AppIconFilledX: String { return self._s[773]! } - public var PrivacySettings_PrivacyTitle: String { return self._s[774]! } + public var Conversation_WalletRequiredText: String { return self._s[772]! } + public var StickerPacksSettings_ShowStickersButtonHelp: String { return self._s[773]! } + public var Channel_EditMessageErrorGeneric: String { return self._s[774]! } + public var Privacy_Calls_IntegrationHelp: String { return self._s[775]! } + public var Preview_DeletePhoto: String { return self._s[776]! } + public var Appearance_AppIconFilledX: String { return self._s[777]! } + public var PrivacySettings_PrivacyTitle: String { return self._s[778]! } public func Conversation_BotInteractiveUrlAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[775]!, self._r[775]!, [_0]) + return formatWithArgumentRanges(self._s[779]!, self._r[779]!, [_0]) } - public var Coub_TapForSound: String { return self._s[777]! } - public var Map_LocatingError: String { return self._s[778]! } - public var TwoStepAuth_EmailChangeSuccess: String { return self._s[780]! } - public var Conversation_SendMessage_SendSilently: String { return self._s[781]! } - public var VoiceOver_MessageContextOpenMessageMenu: String { return self._s[782]! } + public var Coub_TapForSound: String { return self._s[781]! } + public var Map_LocatingError: String { return self._s[782]! } + public var TwoStepAuth_EmailChangeSuccess: String { return self._s[784]! } + public var Conversation_SendMessage_SendSilently: String { return self._s[785]! } + public var VoiceOver_MessageContextOpenMessageMenu: String { return self._s[786]! } public func Wallet_Time_PreciseDate_m8(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[783]!, self._r[783]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[787]!, self._r[787]!, [_1, _2, _3]) } - public var Passport_ForgottenPassword: String { return self._s[784]! } - public var GroupInfo_InviteLink_RevokeLink: String { return self._s[785]! } - public var StickerPacksSettings_ArchivedPacks: String { return self._s[786]! } - public var Login_TermsOfServiceSignupDecline: String { return self._s[788]! } - public var Channel_Moderator_AccessLevelRevoke: String { return self._s[789]! } - public var Message_Location: String { return self._s[790]! } - public var Passport_Identity_NamePlaceholder: String { return self._s[791]! } - public var Channel_Management_Title: String { return self._s[792]! } - public var DialogList_SearchSectionDialogs: String { return self._s[794]! } - public var Compose_NewChannel_Members: String { return self._s[795]! } + public var Passport_ForgottenPassword: String { return self._s[788]! } + public var GroupInfo_InviteLink_RevokeLink: String { return self._s[789]! } + public var StickerPacksSettings_ArchivedPacks: String { return self._s[790]! } + public var Login_TermsOfServiceSignupDecline: String { return self._s[792]! } + public var Channel_Moderator_AccessLevelRevoke: String { return self._s[793]! } + public var Message_Location: String { return self._s[794]! } + public var Passport_Identity_NamePlaceholder: String { return self._s[795]! } + public var Channel_Management_Title: String { return self._s[796]! } + public var DialogList_SearchSectionDialogs: String { return self._s[798]! } + public var Compose_NewChannel_Members: String { return self._s[799]! } public func DialogList_SingleUploadingFileSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[796]!, self._r[796]!, [_0]) + return formatWithArgumentRanges(self._s[800]!, self._r[800]!, [_0]) } - public var GroupInfo_Location: String { return self._s[797]! } - public var Appearance_ThemePreview_ChatList_5_Name: String { return self._s[798]! } - public var AutoNightTheme_ScheduledFrom: String { return self._s[799]! } - public var PhotoEditor_WarmthTool: String { return self._s[800]! } - public var Passport_Language_tr: String { return self._s[801]! } + public var GroupInfo_Location: String { return self._s[801]! } + public var Appearance_ThemePreview_ChatList_5_Name: String { return self._s[802]! } + public var AutoNightTheme_ScheduledFrom: String { return self._s[803]! } + public var PhotoEditor_WarmthTool: String { return self._s[804]! } + public var Passport_Language_tr: String { return self._s[805]! } public func PUSH_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[802]!, self._r[802]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[806]!, self._r[806]!, [_1, _2, _3]) } - public var Login_ResetAccountProtected_Reset: String { return self._s[804]! } - public var Watch_PhotoView_Title: String { return self._s[805]! } - public var Passport_Phone_Delete: String { return self._s[806]! } - public var Undo_ChatDeletedForBothSides: String { return self._s[807]! } - public var Conversation_EditingMessageMediaEditCurrentPhoto: String { return self._s[808]! } - public var GroupInfo_Permissions: String { return self._s[809]! } - public var PasscodeSettings_TurnPasscodeOff: String { return self._s[810]! } - public var Profile_ShareContactButton: String { return self._s[811]! } - public var ChatSettings_Other: String { return self._s[812]! } - public var UserInfo_NotificationsDisabled: String { return self._s[813]! } - public var CheckoutInfo_ShippingInfoCity: String { return self._s[814]! } - public var LastSeen_WithinAMonth: String { return self._s[815]! } - public var VoiceOver_Chat_PlayHint: String { return self._s[816]! } - public var Conversation_ReportGroupLocation: String { return self._s[817]! } - public var Conversation_EncryptionCanceled: String { return self._s[818]! } - public var MediaPicker_GroupDescription: String { return self._s[819]! } - public var WebSearch_Images: String { return self._s[820]! } + public var Login_ResetAccountProtected_Reset: String { return self._s[808]! } + public var Watch_PhotoView_Title: String { return self._s[809]! } + public var Passport_Phone_Delete: String { return self._s[810]! } + public var Undo_ChatDeletedForBothSides: String { return self._s[811]! } + public var Conversation_EditingMessageMediaEditCurrentPhoto: String { return self._s[812]! } + public var GroupInfo_Permissions: String { return self._s[813]! } + public var PasscodeSettings_TurnPasscodeOff: String { return self._s[814]! } + public var Profile_ShareContactButton: String { return self._s[815]! } + public var ChatSettings_Other: String { return self._s[816]! } + public var UserInfo_NotificationsDisabled: String { return self._s[817]! } + public var CheckoutInfo_ShippingInfoCity: String { return self._s[818]! } + public var LastSeen_WithinAMonth: String { return self._s[819]! } + public var VoiceOver_Chat_PlayHint: String { return self._s[820]! } + public var Conversation_ReportGroupLocation: String { return self._s[821]! } + public var Conversation_EncryptionCanceled: String { return self._s[822]! } + public var MediaPicker_GroupDescription: String { return self._s[823]! } + public var WebSearch_Images: String { return self._s[824]! } public func Channel_Management_PromotedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[821]!, self._r[821]!, [_0]) + return formatWithArgumentRanges(self._s[825]!, self._r[825]!, [_0]) } - public var Message_Photo: String { return self._s[822]! } - public var PasscodeSettings_HelpBottom: String { return self._s[823]! } - public var AutoDownloadSettings_VideosTitle: String { return self._s[824]! } - public var VoiceOver_Media_PlaybackRateChange: String { return self._s[825]! } - public var Passport_Identity_AddDriversLicense: String { return self._s[826]! } - public var TwoStepAuth_EnterPasswordPassword: String { return self._s[827]! } - public var NotificationsSound_Calypso: String { return self._s[828]! } - public var Map_Map: String { return self._s[829]! } - public var CheckoutInfo_ReceiverInfoTitle: String { return self._s[831]! } - public var ChatSettings_TextSizeUnits: String { return self._s[832]! } + public var Message_Photo: String { return self._s[826]! } + public var PasscodeSettings_HelpBottom: String { return self._s[827]! } + public var AutoDownloadSettings_VideosTitle: String { return self._s[828]! } + public var VoiceOver_Media_PlaybackRateChange: String { return self._s[829]! } + public var Passport_Identity_AddDriversLicense: String { return self._s[830]! } + public var TwoStepAuth_EnterPasswordPassword: String { return self._s[831]! } + public var NotificationsSound_Calypso: String { return self._s[832]! } + public var Map_Map: String { return self._s[833]! } + public var CheckoutInfo_ReceiverInfoTitle: String { return self._s[835]! } + public var ChatSettings_TextSizeUnits: String { return self._s[836]! } public func VoiceOver_Chat_FileFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[833]!, self._r[833]!, [_0]) + return formatWithArgumentRanges(self._s[837]!, self._r[837]!, [_0]) } - public var Common_of: String { return self._s[834]! } - public var Conversation_ForwardContacts: String { return self._s[837]! } + public var Common_of: String { return self._s[838]! } + public var Conversation_ForwardContacts: String { return self._s[841]! } public func Call_AnsweringWithAccount(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[839]!, self._r[839]!, [_0]) + return formatWithArgumentRanges(self._s[843]!, self._r[843]!, [_0]) } - public var Passport_Language_hy: String { return self._s[840]! } - public var Notifications_MessageNotificationsHelp: String { return self._s[841]! } - public var AutoDownloadSettings_Reset: String { return self._s[842]! } - public var Wallet_TransactionInfo_AddressCopied: String { return self._s[843]! } - public var Paint_ClearConfirm: String { return self._s[844]! } - public var Camera_VideoMode: String { return self._s[845]! } + public var Passport_Language_hy: String { return self._s[844]! } + public var Notifications_MessageNotificationsHelp: String { return self._s[845]! } + public var AutoDownloadSettings_Reset: String { return self._s[846]! } + public var Wallet_TransactionInfo_AddressCopied: String { return self._s[847]! } + public var Paint_ClearConfirm: String { return self._s[848]! } + public var Camera_VideoMode: String { return self._s[849]! } public func Conversation_RestrictedStickersTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[846]!, self._r[846]!, [_0]) + return formatWithArgumentRanges(self._s[850]!, self._r[850]!, [_0]) } - public var Privacy_Calls_AlwaysAllow_Placeholder: String { return self._s[847]! } - public var Conversation_ViewBackground: String { return self._s[848]! } + public var Privacy_Calls_AlwaysAllow_Placeholder: String { return self._s[851]! } + public var Conversation_ViewBackground: String { return self._s[852]! } public func Wallet_Info_TransactionDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[849]!, self._r[849]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[853]!, self._r[853]!, [_1, _2, _3]) } - public var Passport_Language_el: String { return self._s[850]! } - public var PhotoEditor_Original: String { return self._s[851]! } - public var Settings_FAQ_Button: String { return self._s[853]! } - public var Channel_Setup_PublicNoLink: String { return self._s[855]! } - public var Conversation_UnsupportedMedia: String { return self._s[856]! } - public var Conversation_SlideToCancel: String { return self._s[857]! } - public var Appearance_ThemePreview_ChatList_4_Name: String { return self._s[858]! } - public var Passport_Identity_OneOfTypeInternalPassport: String { return self._s[859]! } - public var CheckoutInfo_ShippingInfoPostcode: String { return self._s[860]! } - public var Conversation_ReportSpamChannelConfirmation: String { return self._s[861]! } - public var AutoNightTheme_NotAvailable: String { return self._s[862]! } - public var Conversation_Owner: String { return self._s[863]! } - public var Common_Create: String { return self._s[864]! } - public var Settings_ApplyProxyAlertEnable: String { return self._s[865]! } - public var ContactList_Context_Call: String { return self._s[866]! } - public var Localization_ChooseLanguage: String { return self._s[868]! } - public var ChatList_Context_AddToContacts: String { return self._s[870]! } - public var Settings_Proxy: String { return self._s[872]! } - public var Privacy_TopPeersHelp: String { return self._s[873]! } - public var CheckoutInfo_ShippingInfoCountryPlaceholder: String { return self._s[874]! } - public var Chat_UnsendMyMessages: String { return self._s[875]! } + public var Passport_Language_el: String { return self._s[854]! } + public var PhotoEditor_Original: String { return self._s[855]! } + public var Settings_FAQ_Button: String { return self._s[857]! } + public var Channel_Setup_PublicNoLink: String { return self._s[859]! } + public var Conversation_UnsupportedMedia: String { return self._s[860]! } + public var Conversation_SlideToCancel: String { return self._s[861]! } + public var Appearance_ThemePreview_ChatList_4_Name: String { return self._s[862]! } + public var Passport_Identity_OneOfTypeInternalPassport: String { return self._s[863]! } + public var CheckoutInfo_ShippingInfoPostcode: String { return self._s[864]! } + public var Conversation_ReportSpamChannelConfirmation: String { return self._s[865]! } + public var AutoNightTheme_NotAvailable: String { return self._s[866]! } + public var Conversation_Owner: String { return self._s[867]! } + public var Common_Create: String { return self._s[868]! } + public var Settings_ApplyProxyAlertEnable: String { return self._s[869]! } + public var ContactList_Context_Call: String { return self._s[870]! } + public var Localization_ChooseLanguage: String { return self._s[872]! } + public var ChatList_Context_AddToContacts: String { return self._s[874]! } + public var Settings_Proxy: String { return self._s[876]! } + public var Privacy_TopPeersHelp: String { return self._s[877]! } + public var CheckoutInfo_ShippingInfoCountryPlaceholder: String { return self._s[878]! } + public var Chat_UnsendMyMessages: String { return self._s[879]! } public func VoiceOver_Chat_Duration(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[876]!, self._r[876]!, [_0]) + return formatWithArgumentRanges(self._s[880]!, self._r[880]!, [_0]) } - public var TwoStepAuth_ConfirmationAbort: String { return self._s[877]! } + public var TwoStepAuth_ConfirmationAbort: String { return self._s[881]! } public func Contacts_AccessDeniedHelpPortrait(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[879]!, self._r[879]!, [_0]) - } - public var Contacts_SortedByPresence: String { return self._s[880]! } - public var Passport_Identity_SurnamePlaceholder: String { return self._s[881]! } - public var Cache_Title: String { return self._s[882]! } - public func Login_PhoneBannedEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[883]!, self._r[883]!, [_0]) } - public var TwoStepAuth_EmailCodeExpired: String { return self._s[884]! } - public var Channel_Moderator_Title: String { return self._s[885]! } - public var InstantPage_AutoNightTheme: String { return self._s[887]! } + public var Contacts_SortedByPresence: String { return self._s[884]! } + public var Passport_Identity_SurnamePlaceholder: String { return self._s[885]! } + public var Cache_Title: String { return self._s[886]! } + public func Login_PhoneBannedEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[887]!, self._r[887]!, [_0]) + } + public var TwoStepAuth_EmailCodeExpired: String { return self._s[888]! } + public var Channel_Moderator_Title: String { return self._s[889]! } + public var InstantPage_AutoNightTheme: String { return self._s[891]! } public func PUSH_MESSAGE_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[890]!, self._r[890]!, [_1]) + return formatWithArgumentRanges(self._s[894]!, self._r[894]!, [_1]) } - public var Passport_Scans_Upload: String { return self._s[891]! } - public var Undo_Undo: String { return self._s[893]! } - public var Contacts_AccessDeniedHelpON: String { return self._s[894]! } - public var TwoStepAuth_RemovePassword: String { return self._s[895]! } - public var Common_Delete: String { return self._s[896]! } - public var Contacts_AddPeopleNearby: String { return self._s[898]! } - public var Conversation_ContextMenuDelete: String { return self._s[899]! } - public var SocksProxySetup_Credentials: String { return self._s[900]! } - public var Appearance_EditTheme: String { return self._s[902]! } - public var PasscodeSettings_AutoLock_Disabled: String { return self._s[903]! } - public var Wallet_Send_NetworkErrorText: String { return self._s[904]! } - public var Passport_Address_OneOfTypeRentalAgreement: String { return self._s[907]! } - public var Conversation_ShareBotContactConfirmationTitle: String { return self._s[908]! } - public var Passport_Language_id: String { return self._s[910]! } - public var WallpaperSearch_ColorTeal: String { return self._s[911]! } - public var ChannelIntro_Title: String { return self._s[912]! } + public var Passport_Scans_Upload: String { return self._s[895]! } + public var Undo_Undo: String { return self._s[897]! } + public var Contacts_AccessDeniedHelpON: String { return self._s[898]! } + public var TwoStepAuth_RemovePassword: String { return self._s[899]! } + public var Common_Delete: String { return self._s[900]! } + public var Contacts_AddPeopleNearby: String { return self._s[902]! } + public var Conversation_ContextMenuDelete: String { return self._s[903]! } + public var SocksProxySetup_Credentials: String { return self._s[904]! } + public var Appearance_EditTheme: String { return self._s[906]! } + public var PasscodeSettings_AutoLock_Disabled: String { return self._s[907]! } + public var Wallet_Send_NetworkErrorText: String { return self._s[908]! } + public var Passport_Address_OneOfTypeRentalAgreement: String { return self._s[911]! } + public var Conversation_ShareBotContactConfirmationTitle: String { return self._s[912]! } + public var Passport_Language_id: String { return self._s[914]! } + public var WallpaperSearch_ColorTeal: String { return self._s[915]! } + public var ChannelIntro_Title: String { return self._s[916]! } public func Channel_AdminLog_MessageToggleSignaturesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[913]!, self._r[913]!, [_0]) + return formatWithArgumentRanges(self._s[917]!, self._r[917]!, [_0]) } - public var VoiceOver_Chat_OpenLinkHint: String { return self._s[915]! } - public var VoiceOver_Chat_Reply: String { return self._s[916]! } - public var ScheduledMessages_BotActionUnavailable: String { return self._s[917]! } - public var Channel_Info_Description: String { return self._s[918]! } - public var Stickers_FavoriteStickers: String { return self._s[919]! } - public var Channel_BanUser_PermissionAddMembers: String { return self._s[920]! } - public var Notifications_DisplayNamesOnLockScreen: String { return self._s[921]! } - public var ChatSearch_ResultsTooltip: String { return self._s[922]! } - public var Wallet_VoiceOver_Editing_ClearText: String { return self._s[923]! } - public var Calls_NoMissedCallsPlacehoder: String { return self._s[924]! } - public var Group_PublicLink_Placeholder: String { return self._s[925]! } - public var Notifications_ExceptionsDefaultSound: String { return self._s[926]! } + public var VoiceOver_Chat_OpenLinkHint: String { return self._s[919]! } + public var VoiceOver_Chat_Reply: String { return self._s[920]! } + public var ScheduledMessages_BotActionUnavailable: String { return self._s[921]! } + public var Channel_Info_Description: String { return self._s[922]! } + public var Stickers_FavoriteStickers: String { return self._s[923]! } + public var Channel_BanUser_PermissionAddMembers: String { return self._s[924]! } + public var Notifications_DisplayNamesOnLockScreen: String { return self._s[925]! } + public var ChatSearch_ResultsTooltip: String { return self._s[926]! } + public var Wallet_VoiceOver_Editing_ClearText: String { return self._s[927]! } + public var Calls_NoMissedCallsPlacehoder: String { return self._s[928]! } + public var Group_PublicLink_Placeholder: String { return self._s[929]! } + public var Notifications_ExceptionsDefaultSound: String { return self._s[930]! } public func PUSH_CHANNEL_MESSAGE_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[927]!, self._r[927]!, [_1]) + return formatWithArgumentRanges(self._s[931]!, self._r[931]!, [_1]) } - public var TextFormat_Underline: String { return self._s[928]! } + public var TextFormat_Underline: String { return self._s[932]! } public func DialogList_SearchSubtitleFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[929]!, self._r[929]!, [_1, _2]) + return formatWithArgumentRanges(self._s[933]!, self._r[933]!, [_1, _2]) } public func Channel_AdminLog_MessageRemovedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[930]!, self._r[930]!, [_0]) + return formatWithArgumentRanges(self._s[934]!, self._r[934]!, [_0]) } - public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[931]! } + public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[935]! } public func Channel_OwnershipTransfer_TransferCompleted(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[932]!, self._r[932]!, [_1, _2]) + return formatWithArgumentRanges(self._s[936]!, self._r[936]!, [_1, _2]) } - public var Wallet_Intro_ImportExisting: String { return self._s[933]! } - public var GroupPermission_Delete: String { return self._s[934]! } - public var Passport_Language_uk: String { return self._s[935]! } - public var StickerPack_HideStickers: String { return self._s[937]! } - public var ChangePhoneNumberNumber_NumberPlaceholder: String { return self._s[938]! } + public var Wallet_Intro_ImportExisting: String { return self._s[937]! } + public var GroupPermission_Delete: String { return self._s[938]! } + public var Passport_Language_uk: String { return self._s[939]! } + public var StickerPack_HideStickers: String { return self._s[941]! } + public var ChangePhoneNumberNumber_NumberPlaceholder: String { return self._s[942]! } public func PUSH_CHAT_MESSAGE_PHOTO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[939]!, self._r[939]!, [_1, _2]) + return formatWithArgumentRanges(self._s[943]!, self._r[943]!, [_1, _2]) } - public var Activity_UploadingVideoMessage: String { return self._s[940]! } + public var Activity_UploadingVideoMessage: String { return self._s[944]! } public func GroupPermission_ApplyAlertText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[941]!, self._r[941]!, [_0]) + return formatWithArgumentRanges(self._s[945]!, self._r[945]!, [_0]) } - public var Channel_TitleInfo: String { return self._s[942]! } - public var StickerPacksSettings_ArchivedPacks_Info: String { return self._s[943]! } - public var Settings_CallSettings: String { return self._s[944]! } - public var Camera_SquareMode: String { return self._s[945]! } - public var Conversation_SendMessage_ScheduleMessage: String { return self._s[946]! } - public var GroupInfo_SharedMediaNone: String { return self._s[947]! } + public var Channel_TitleInfo: String { return self._s[946]! } + public var StickerPacksSettings_ArchivedPacks_Info: String { return self._s[947]! } + public var Settings_CallSettings: String { return self._s[948]! } + public var Camera_SquareMode: String { return self._s[949]! } + public var Conversation_SendMessage_ScheduleMessage: String { return self._s[950]! } + public var GroupInfo_SharedMediaNone: String { return self._s[951]! } public func PUSH_MESSAGE_VIDEO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[948]!, self._r[948]!, [_1]) + return formatWithArgumentRanges(self._s[952]!, self._r[952]!, [_1]) } - public var Bot_GenericBotStatus: String { return self._s[949]! } - public var Application_Update: String { return self._s[951]! } - public var Month_ShortJanuary: String { return self._s[952]! } - public var Contacts_PermissionsKeepDisabled: String { return self._s[953]! } - public var Channel_AdminLog_BanReadMessages: String { return self._s[954]! } - public var Settings_AppLanguage_Unofficial: String { return self._s[955]! } - public var Passport_Address_Street2Placeholder: String { return self._s[956]! } + public var Bot_GenericBotStatus: String { return self._s[953]! } + public var Application_Update: String { return self._s[955]! } + public var Month_ShortJanuary: String { return self._s[956]! } + public var Contacts_PermissionsKeepDisabled: String { return self._s[957]! } + public var Channel_AdminLog_BanReadMessages: String { return self._s[958]! } + public var Settings_AppLanguage_Unofficial: String { return self._s[959]! } + public var Passport_Address_Street2Placeholder: String { return self._s[960]! } public func Map_LiveLocationShortHour(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[957]!, self._r[957]!, [_0]) + return formatWithArgumentRanges(self._s[961]!, self._r[961]!, [_0]) } - public var NetworkUsageSettings_Cellular: String { return self._s[958]! } - public var Appearance_PreviewOutgoingText: String { return self._s[959]! } - public var Notifications_PermissionsAllowInSettings: String { return self._s[960]! } - public var AutoDownloadSettings_OnForAll: String { return self._s[962]! } - public var Map_Directions: String { return self._s[963]! } - public var Passport_FieldIdentityTranslationHelp: String { return self._s[965]! } - public var Appearance_ThemeDay: String { return self._s[966]! } - public var LogoutOptions_LogOut: String { return self._s[967]! } - public var Group_PublicLink_Title: String { return self._s[969]! } - public var Channel_AddBotErrorNoRights: String { return self._s[970]! } - public var Passport_Identity_AddPassport: String { return self._s[971]! } - public var LocalGroup_ButtonTitle: String { return self._s[972]! } - public var Call_Message: String { return self._s[973]! } - public var PhotoEditor_ExposureTool: String { return self._s[974]! } - public var Wallet_Receive_CommentInfo: String { return self._s[976]! } - public var Passport_FieldOneOf_Delimeter: String { return self._s[977]! } - public var Channel_AdminLog_CanBanUsers: String { return self._s[979]! } - public var Appearance_ThemePreview_ChatList_2_Name: String { return self._s[980]! } - public var Appearance_Preview: String { return self._s[981]! } - public var Compose_ChannelMembers: String { return self._s[982]! } - public var Conversation_DeleteManyMessages: String { return self._s[983]! } - public var ReportPeer_ReasonOther_Title: String { return self._s[984]! } - public var Checkout_ErrorProviderAccountTimeout: String { return self._s[985]! } - public var TwoStepAuth_ResetAccountConfirmation: String { return self._s[986]! } - public var Channel_Stickers_CreateYourOwn: String { return self._s[989]! } - public var Conversation_UpdateTelegram: String { return self._s[990]! } - public var EditTheme_Create_TopInfo: String { return self._s[991]! } + public var NetworkUsageSettings_Cellular: String { return self._s[962]! } + public var Appearance_PreviewOutgoingText: String { return self._s[963]! } + public var Notifications_PermissionsAllowInSettings: String { return self._s[964]! } + public var AutoDownloadSettings_OnForAll: String { return self._s[966]! } + public var Map_Directions: String { return self._s[967]! } + public var Passport_FieldIdentityTranslationHelp: String { return self._s[969]! } + public var Appearance_ThemeDay: String { return self._s[970]! } + public var LogoutOptions_LogOut: String { return self._s[971]! } + public var Group_PublicLink_Title: String { return self._s[973]! } + public var Channel_AddBotErrorNoRights: String { return self._s[974]! } + public var Passport_Identity_AddPassport: String { return self._s[975]! } + public var LocalGroup_ButtonTitle: String { return self._s[976]! } + public var Call_Message: String { return self._s[977]! } + public var PhotoEditor_ExposureTool: String { return self._s[978]! } + public var Wallet_Receive_CommentInfo: String { return self._s[980]! } + public var Passport_FieldOneOf_Delimeter: String { return self._s[981]! } + public var Channel_AdminLog_CanBanUsers: String { return self._s[983]! } + public var Appearance_ThemePreview_ChatList_2_Name: String { return self._s[984]! } + public var Appearance_Preview: String { return self._s[985]! } + public var Compose_ChannelMembers: String { return self._s[986]! } + public var Conversation_DeleteManyMessages: String { return self._s[987]! } + public var ReportPeer_ReasonOther_Title: String { return self._s[988]! } + public var Checkout_ErrorProviderAccountTimeout: String { return self._s[989]! } + public var TwoStepAuth_ResetAccountConfirmation: String { return self._s[990]! } + public var Channel_Stickers_CreateYourOwn: String { return self._s[993]! } + public var Conversation_UpdateTelegram: String { return self._s[994]! } + public var EditTheme_Create_TopInfo: String { return self._s[995]! } public func Notification_PinnedPhotoMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[992]!, self._r[992]!, [_0]) + return formatWithArgumentRanges(self._s[996]!, self._r[996]!, [_0]) } - public var Wallet_WordCheck_Continue: String { return self._s[993]! } - public var TwoFactorSetup_Hint_Action: String { return self._s[994]! } + public var Wallet_WordCheck_Continue: String { return self._s[997]! } + public var TwoFactorSetup_Hint_Action: String { return self._s[998]! } public func PUSH_PINNED_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[995]!, self._r[995]!, [_1]) + return formatWithArgumentRanges(self._s[999]!, self._r[999]!, [_1]) } - public var GroupInfo_Administrators_Title: String { return self._s[996]! } - public var Privacy_Forwards_PreviewMessageText: String { return self._s[997]! } + public var GroupInfo_Administrators_Title: String { return self._s[1000]! } + public var Privacy_Forwards_PreviewMessageText: String { return self._s[1001]! } public func PrivacySettings_LastSeenNobodyPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[998]!, self._r[998]!, [_0]) + return formatWithArgumentRanges(self._s[1002]!, self._r[1002]!, [_0]) } - public var Tour_Title3: String { return self._s[999]! } - public var Channel_EditAdmin_PermissionInviteSubscribers: String { return self._s[1000]! } - public var Clipboard_SendPhoto: String { return self._s[1004]! } - public var MediaPicker_Videos: String { return self._s[1005]! } - public var Passport_Email_Title: String { return self._s[1006]! } + public var Tour_Title3: String { return self._s[1003]! } + public var Channel_EditAdmin_PermissionInviteSubscribers: String { return self._s[1004]! } + public var Clipboard_SendPhoto: String { return self._s[1008]! } + public var MediaPicker_Videos: String { return self._s[1009]! } + public var Passport_Email_Title: String { return self._s[1010]! } public func PrivacySettings_LastSeenEverybodyMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1007]!, self._r[1007]!, [_0]) + return formatWithArgumentRanges(self._s[1011]!, self._r[1011]!, [_0]) } - public var StickerPacksSettings_Title: String { return self._s[1008]! } - public var Conversation_MessageDialogDelete: String { return self._s[1009]! } - public var Privacy_Calls_CustomHelp: String { return self._s[1011]! } - public var Message_Wallpaper: String { return self._s[1012]! } - public var MemberSearch_BotSection: String { return self._s[1013]! } - public var GroupInfo_SetSound: String { return self._s[1014]! } - public var Core_ServiceUserStatus: String { return self._s[1015]! } - public var LiveLocationUpdated_JustNow: String { return self._s[1016]! } - public var Call_StatusFailed: String { return self._s[1017]! } - public var TwoFactorSetup_Email_Placeholder: String { return self._s[1018]! } - public var TwoStepAuth_SetupPasswordDescription: String { return self._s[1019]! } - public var TwoStepAuth_SetPassword: String { return self._s[1020]! } - public var Permissions_PeopleNearbyText_v0: String { return self._s[1021]! } + public var StickerPacksSettings_Title: String { return self._s[1012]! } + public var Conversation_MessageDialogDelete: String { return self._s[1013]! } + public var Privacy_Calls_CustomHelp: String { return self._s[1015]! } + public var Message_Wallpaper: String { return self._s[1016]! } + public var MemberSearch_BotSection: String { return self._s[1017]! } + public var GroupInfo_SetSound: String { return self._s[1018]! } + public var Core_ServiceUserStatus: String { return self._s[1019]! } + public var LiveLocationUpdated_JustNow: String { return self._s[1020]! } + public var Call_StatusFailed: String { return self._s[1021]! } + public var TwoFactorSetup_Email_Placeholder: String { return self._s[1022]! } + public var TwoStepAuth_SetupPasswordDescription: String { return self._s[1023]! } + public var TwoStepAuth_SetPassword: String { return self._s[1024]! } + public var Permissions_PeopleNearbyText_v0: String { return self._s[1025]! } public func SocksProxySetup_ProxyStatusPing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1023]!, self._r[1023]!, [_0]) + return formatWithArgumentRanges(self._s[1027]!, self._r[1027]!, [_0]) } - public var Calls_SubmitRating: String { return self._s[1024]! } - public var Profile_Username: String { return self._s[1025]! } - public var Bot_DescriptionTitle: String { return self._s[1026]! } - public var MaskStickerSettings_Title: String { return self._s[1027]! } - public var SharedMedia_CategoryOther: String { return self._s[1028]! } - public var GroupInfo_SetGroupPhoto: String { return self._s[1029]! } - public var Common_NotNow: String { return self._s[1030]! } - public var CallFeedback_IncludeLogsInfo: String { return self._s[1031]! } - public var Conversation_ShareMyPhoneNumber: String { return self._s[1032]! } - public var Map_Location: String { return self._s[1033]! } - public var Invitation_JoinGroup: String { return self._s[1034]! } - public var AutoDownloadSettings_Title: String { return self._s[1036]! } - public var Conversation_DiscardVoiceMessageDescription: String { return self._s[1037]! } - public var Channel_ErrorAddBlocked: String { return self._s[1038]! } - public var Conversation_UnblockUser: String { return self._s[1039]! } - public var EditTheme_Edit_TopInfo: String { return self._s[1040]! } - public var Watch_Bot_Restart: String { return self._s[1041]! } - public var TwoStepAuth_Title: String { return self._s[1042]! } - public var Channel_AdminLog_BanSendMessages: String { return self._s[1043]! } - public var Checkout_ShippingMethod: String { return self._s[1044]! } - public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[1045]! } + public var Calls_SubmitRating: String { return self._s[1028]! } + public var Profile_Username: String { return self._s[1029]! } + public var Bot_DescriptionTitle: String { return self._s[1030]! } + public var MaskStickerSettings_Title: String { return self._s[1031]! } + public var SharedMedia_CategoryOther: String { return self._s[1032]! } + public var GroupInfo_SetGroupPhoto: String { return self._s[1033]! } + public var Common_NotNow: String { return self._s[1034]! } + public var CallFeedback_IncludeLogsInfo: String { return self._s[1035]! } + public var Conversation_ShareMyPhoneNumber: String { return self._s[1036]! } + public var Map_Location: String { return self._s[1037]! } + public var Invitation_JoinGroup: String { return self._s[1038]! } + public var AutoDownloadSettings_Title: String { return self._s[1040]! } + public var Conversation_DiscardVoiceMessageDescription: String { return self._s[1041]! } + public var Channel_ErrorAddBlocked: String { return self._s[1042]! } + public var Conversation_UnblockUser: String { return self._s[1043]! } + public var EditTheme_Edit_TopInfo: String { return self._s[1044]! } + public var Watch_Bot_Restart: String { return self._s[1045]! } + public var TwoStepAuth_Title: String { return self._s[1046]! } + public var Channel_AdminLog_BanSendMessages: String { return self._s[1047]! } + public var Checkout_ShippingMethod: String { return self._s[1048]! } + public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[1049]! } public func PUSH_CHAT_MESSAGE_STICKER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1046]!, self._r[1046]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1050]!, self._r[1050]!, [_1, _2, _3]) } public func Chat_UnsendMyMessagesAlertTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1048]!, self._r[1048]!, [_0]) + return formatWithArgumentRanges(self._s[1052]!, self._r[1052]!, [_0]) } public func Channel_Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1049]!, self._r[1049]!, [_0]) + return formatWithArgumentRanges(self._s[1053]!, self._r[1053]!, [_0]) } - public var Appearance_ThemePreview_ChatList_1_Name: String { return self._s[1050]! } - public var SettingsSearch_Synonyms_Data_AutoplayGifs: String { return self._s[1051]! } - public var AuthSessions_TerminateOtherSessions: String { return self._s[1052]! } - public var Contacts_FailedToSendInvitesMessage: String { return self._s[1053]! } - public var PrivacySettings_TwoStepAuth: String { return self._s[1054]! } - public var Notification_Exceptions_PreviewAlwaysOn: String { return self._s[1055]! } - public var SettingsSearch_Synonyms_Privacy_Passcode: String { return self._s[1056]! } - public var Conversation_EditingMessagePanelMedia: String { return self._s[1057]! } - public var Checkout_PaymentMethod_Title: String { return self._s[1058]! } - public var SocksProxySetup_Connection: String { return self._s[1059]! } - public var Group_MessagePhotoRemoved: String { return self._s[1060]! } - public var Channel_Stickers_NotFound: String { return self._s[1063]! } - public var Group_About_Help: String { return self._s[1064]! } - public var Notification_PassportValueProofOfIdentity: String { return self._s[1065]! } - public var PeopleNearby_Title: String { return self._s[1067]! } + public var Appearance_ThemePreview_ChatList_1_Name: String { return self._s[1054]! } + public var SettingsSearch_Synonyms_Data_AutoplayGifs: String { return self._s[1055]! } + public var AuthSessions_TerminateOtherSessions: String { return self._s[1056]! } + public var Contacts_FailedToSendInvitesMessage: String { return self._s[1057]! } + public var PrivacySettings_TwoStepAuth: String { return self._s[1058]! } + public var Notification_Exceptions_PreviewAlwaysOn: String { return self._s[1059]! } + public var SettingsSearch_Synonyms_Privacy_Passcode: String { return self._s[1060]! } + public var Conversation_EditingMessagePanelMedia: String { return self._s[1061]! } + public var Checkout_PaymentMethod_Title: String { return self._s[1062]! } + public var SocksProxySetup_Connection: String { return self._s[1063]! } + public var Group_MessagePhotoRemoved: String { return self._s[1064]! } + public var Channel_Stickers_NotFound: String { return self._s[1067]! } + public var Group_About_Help: String { return self._s[1068]! } + public var Notification_PassportValueProofOfIdentity: String { return self._s[1069]! } + public var PeopleNearby_Title: String { return self._s[1071]! } public func ApplyLanguage_ChangeLanguageOfficialText(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1068]!, self._r[1068]!, [_1]) + return formatWithArgumentRanges(self._s[1072]!, self._r[1072]!, [_1]) } - public var CheckoutInfo_ShippingInfoStatePlaceholder: String { return self._s[1070]! } - public var Notifications_GroupNotificationsExceptionsHelp: String { return self._s[1071]! } - public var SocksProxySetup_Password: String { return self._s[1072]! } - public var Notifications_PermissionsEnable: String { return self._s[1073]! } - public var TwoStepAuth_ChangeEmail: String { return self._s[1075]! } + public var CheckoutInfo_ShippingInfoStatePlaceholder: String { return self._s[1074]! } + public var Notifications_GroupNotificationsExceptionsHelp: String { return self._s[1075]! } + public var SocksProxySetup_Password: String { return self._s[1076]! } + public var Notifications_PermissionsEnable: String { return self._s[1077]! } + public var TwoStepAuth_ChangeEmail: String { return self._s[1079]! } public func Channel_AdminLog_MessageInvitedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1076]!, self._r[1076]!, [_1]) + return formatWithArgumentRanges(self._s[1080]!, self._r[1080]!, [_1]) } public func Time_MonthOfYear_m10(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1078]!, self._r[1078]!, [_0]) + return formatWithArgumentRanges(self._s[1082]!, self._r[1082]!, [_0]) } - public var Passport_Identity_TypeDriversLicense: String { return self._s[1079]! } - public var ArchivedPacksAlert_Title: String { return self._s[1080]! } - public var Wallet_Receive_InvoiceUrlCopied: String { return self._s[1081]! } + public var Passport_Identity_TypeDriversLicense: String { return self._s[1083]! } + public var ArchivedPacksAlert_Title: String { return self._s[1084]! } + public var Wallet_Receive_InvoiceUrlCopied: String { return self._s[1085]! } public func Time_PreciseDate_m7(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1082]!, self._r[1082]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1086]!, self._r[1086]!, [_1, _2, _3]) } - public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[1083]! } - public var Privacy_Calls_NeverAllow_Placeholder: String { return self._s[1085]! } - public var Conversation_StatusTyping: String { return self._s[1086]! } - public var Broadcast_AdminLog_EmptyText: String { return self._s[1087]! } - public var Notification_PassportValueProofOfAddress: String { return self._s[1088]! } - public var UserInfo_CreateNewContact: String { return self._s[1089]! } - public var Passport_Identity_FrontSide: String { return self._s[1090]! } - public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[1091]! } - public var Calls_CallTabTitle: String { return self._s[1092]! } - public var Channel_AdminLog_ChannelEmptyText: String { return self._s[1093]! } + public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[1087]! } + public var Privacy_Calls_NeverAllow_Placeholder: String { return self._s[1089]! } + public var Conversation_StatusTyping: String { return self._s[1090]! } + public var Broadcast_AdminLog_EmptyText: String { return self._s[1091]! } + public var Notification_PassportValueProofOfAddress: String { return self._s[1092]! } + public var UserInfo_CreateNewContact: String { return self._s[1093]! } + public var Passport_Identity_FrontSide: String { return self._s[1094]! } + public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[1095]! } + public var Calls_CallTabTitle: String { return self._s[1096]! } + public var Channel_AdminLog_ChannelEmptyText: String { return self._s[1097]! } public func Login_BannedPhoneBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1095]!, self._r[1095]!, [_0]) + return formatWithArgumentRanges(self._s[1099]!, self._r[1099]!, [_0]) } - public var Watch_UserInfo_MuteTitle: String { return self._s[1096]! } - public var Group_EditAdmin_RankAdminPlaceholder: String { return self._s[1097]! } - public var SharedMedia_EmptyMusicText: String { return self._s[1098]! } - public var Wallet_Completed_Text: String { return self._s[1099]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[1100]! } - public var Paint_Stickers: String { return self._s[1101]! } - public var Privacy_GroupsAndChannels: String { return self._s[1102]! } - public var ChatList_Context_Delete: String { return self._s[1104]! } - public var UserInfo_AddContact: String { return self._s[1105]! } + public var Watch_UserInfo_MuteTitle: String { return self._s[1100]! } + public var Group_EditAdmin_RankAdminPlaceholder: String { return self._s[1101]! } + public var SharedMedia_EmptyMusicText: String { return self._s[1102]! } + public var Wallet_Completed_Text: String { return self._s[1103]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[1104]! } + public var Paint_Stickers: String { return self._s[1105]! } + public var Privacy_GroupsAndChannels: String { return self._s[1106]! } + public var ChatList_Context_Delete: String { return self._s[1108]! } + public var UserInfo_AddContact: String { return self._s[1109]! } public func Conversation_MessageViaUser(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1106]!, self._r[1106]!, [_0]) - } - public var PhoneNumberHelp_ChangeNumber: String { return self._s[1108]! } - public func ChatList_ClearChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1110]!, self._r[1110]!, [_0]) } - public var DialogList_NoMessagesTitle: String { return self._s[1111]! } - public var EditProfile_NameAndPhotoHelp: String { return self._s[1112]! } - public var BlockedUsers_BlockUser: String { return self._s[1113]! } - public var Notifications_PermissionsOpenSettings: String { return self._s[1114]! } - public var MediaPicker_UngroupDescription: String { return self._s[1115]! } - public var Watch_NoConnection: String { return self._s[1116]! } - public var Month_GenSeptember: String { return self._s[1117]! } - public var Conversation_ViewGroup: String { return self._s[1119]! } - public var Channel_AdminLogFilter_EventsLeavingSubscribers: String { return self._s[1122]! } - public var Privacy_Forwards_AlwaysLink: String { return self._s[1123]! } - public var Channel_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[1124]! } - public var Passport_FieldOneOf_FinalDelimeter: String { return self._s[1125]! } - public var Wallet_WordCheck_IncorrectHeader: String { return self._s[1126]! } - public var MediaPicker_CameraRoll: String { return self._s[1128]! } - public var Month_GenAugust: String { return self._s[1129]! } - public var AccessDenied_VideoMessageMicrophone: String { return self._s[1130]! } - public var SharedMedia_EmptyText: String { return self._s[1131]! } - public var Map_ShareLiveLocation: String { return self._s[1132]! } - public var Calls_All: String { return self._s[1133]! } - public var Appearance_ThemeNight: String { return self._s[1136]! } - public var Conversation_HoldForAudio: String { return self._s[1137]! } - public var SettingsSearch_Synonyms_Support: String { return self._s[1140]! } - public var GroupInfo_GroupHistoryHidden: String { return self._s[1141]! } - public var SocksProxySetup_Secret: String { return self._s[1142]! } + public var PhoneNumberHelp_ChangeNumber: String { return self._s[1112]! } + public func ChatList_ClearChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1114]!, self._r[1114]!, [_0]) + } + public var DialogList_NoMessagesTitle: String { return self._s[1115]! } + public var EditProfile_NameAndPhotoHelp: String { return self._s[1116]! } + public var BlockedUsers_BlockUser: String { return self._s[1117]! } + public var Notifications_PermissionsOpenSettings: String { return self._s[1118]! } + public var MediaPicker_UngroupDescription: String { return self._s[1119]! } + public var Watch_NoConnection: String { return self._s[1120]! } + public var Month_GenSeptember: String { return self._s[1121]! } + public var Conversation_ViewGroup: String { return self._s[1123]! } + public var Channel_AdminLogFilter_EventsLeavingSubscribers: String { return self._s[1126]! } + public var Privacy_Forwards_AlwaysLink: String { return self._s[1127]! } + public var Channel_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[1128]! } + public var Passport_FieldOneOf_FinalDelimeter: String { return self._s[1129]! } + public var Wallet_WordCheck_IncorrectHeader: String { return self._s[1130]! } + public var MediaPicker_CameraRoll: String { return self._s[1132]! } + public var Month_GenAugust: String { return self._s[1133]! } + public var Wallet_Configuration_SourceHeader: String { return self._s[1134]! } + public var AccessDenied_VideoMessageMicrophone: String { return self._s[1135]! } + public var SharedMedia_EmptyText: String { return self._s[1136]! } + public var Map_ShareLiveLocation: String { return self._s[1137]! } + public var Calls_All: String { return self._s[1138]! } + public var Appearance_ThemeNight: String { return self._s[1141]! } + public var Conversation_HoldForAudio: String { return self._s[1142]! } + public var SettingsSearch_Synonyms_Support: String { return self._s[1145]! } + public var GroupInfo_GroupHistoryHidden: String { return self._s[1146]! } + public var SocksProxySetup_Secret: String { return self._s[1147]! } public func Activity_RemindAboutChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1143]!, self._r[1143]!, [_0]) + return formatWithArgumentRanges(self._s[1148]!, self._r[1148]!, [_0]) } - public var Channel_BanList_RestrictedTitle: String { return self._s[1145]! } - public var Conversation_Location: String { return self._s[1146]! } + public var Channel_BanList_RestrictedTitle: String { return self._s[1150]! } + public var Conversation_Location: String { return self._s[1151]! } public func AutoDownloadSettings_UpToFor(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1147]!, self._r[1147]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1152]!, self._r[1152]!, [_1, _2]) } - public var ChatSettings_AutoDownloadPhotos: String { return self._s[1149]! } - public var SettingsSearch_Synonyms_Privacy_Title: String { return self._s[1150]! } - public var Notifications_PermissionsText: String { return self._s[1151]! } - public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[1152]! } - public var Call_Flip: String { return self._s[1153]! } - public var Channel_AdminLog_CanDeleteMessagesOfOthers: String { return self._s[1155]! } - public var SocksProxySetup_ProxyStatusConnecting: String { return self._s[1156]! } - public var Wallet_TransactionInfo_StorageFeeInfoUrl: String { return self._s[1157]! } - public var PrivacyPhoneNumberSettings_DiscoveryHeader: String { return self._s[1158]! } - public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[1160]! } - public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[1162]! } - public var Channel_TooMuchBots: String { return self._s[1164]! } - public var Passport_DeletePassportConfirmation: String { return self._s[1165]! } - public var Login_InvalidCodeError: String { return self._s[1166]! } - public var StickerPacksSettings_FeaturedPacks: String { return self._s[1167]! } + public var ChatSettings_AutoDownloadPhotos: String { return self._s[1154]! } + public var SettingsSearch_Synonyms_Privacy_Title: String { return self._s[1155]! } + public var Notifications_PermissionsText: String { return self._s[1156]! } + public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[1157]! } + public var Call_Flip: String { return self._s[1158]! } + public var Channel_AdminLog_CanDeleteMessagesOfOthers: String { return self._s[1160]! } + public var SocksProxySetup_ProxyStatusConnecting: String { return self._s[1161]! } + public var Wallet_TransactionInfo_StorageFeeInfoUrl: String { return self._s[1162]! } + public var PrivacyPhoneNumberSettings_DiscoveryHeader: String { return self._s[1163]! } + public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[1165]! } + public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[1167]! } + public var Channel_TooMuchBots: String { return self._s[1169]! } + public var Passport_DeletePassportConfirmation: String { return self._s[1170]! } + public var Login_InvalidCodeError: String { return self._s[1171]! } + public var StickerPacksSettings_FeaturedPacks: String { return self._s[1172]! } public func ChatList_DeleteSecretChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1168]!, self._r[1168]!, [_0]) + return formatWithArgumentRanges(self._s[1173]!, self._r[1173]!, [_0]) } public func GroupInfo_InvitationLinkAcceptChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1169]!, self._r[1169]!, [_0]) + return formatWithArgumentRanges(self._s[1174]!, self._r[1174]!, [_0]) } - public var VoiceOver_Navigation_ProxySettings: String { return self._s[1170]! } - public var Call_CallInProgressTitle: String { return self._s[1171]! } - public var Month_ShortSeptember: String { return self._s[1172]! } - public var Watch_ChannelInfo_Title: String { return self._s[1173]! } - public var ChatList_DeleteSavedMessagesConfirmation: String { return self._s[1176]! } - public var DialogList_PasscodeLockHelp: String { return self._s[1177]! } - public var Chat_MultipleTextMessagesDisabled: String { return self._s[1178]! } - public var Wallet_Receive_Title: String { return self._s[1179]! } - public var Notifications_Badge_IncludePublicGroups: String { return self._s[1180]! } - public var Channel_AdminLogFilter_EventsTitle: String { return self._s[1181]! } - public var PhotoEditor_CropReset: String { return self._s[1182]! } - public var Group_Username_CreatePrivateLinkHelp: String { return self._s[1184]! } - public var Channel_Management_LabelEditor: String { return self._s[1185]! } - public var Passport_Identity_LatinNameHelp: String { return self._s[1187]! } - public var PhotoEditor_HighlightsTool: String { return self._s[1188]! } - public var Wallet_Info_WalletCreated: String { return self._s[1189]! } - public var UserInfo_Title: String { return self._s[1190]! } - public var ChatList_HideAction: String { return self._s[1191]! } - public var AccessDenied_Title: String { return self._s[1192]! } - public var DialogList_SearchLabel: String { return self._s[1193]! } - public var Group_Setup_HistoryHidden: String { return self._s[1194]! } - public var TwoStepAuth_PasswordChangeSuccess: String { return self._s[1195]! } - public var State_Updating: String { return self._s[1197]! } - public var Contacts_TabTitle: String { return self._s[1198]! } - public var Notifications_Badge_CountUnreadMessages: String { return self._s[1200]! } - public var GroupInfo_GroupHistory: String { return self._s[1201]! } - public var Conversation_UnsupportedMediaPlaceholder: String { return self._s[1202]! } - public var Wallpaper_SetColor: String { return self._s[1203]! } - public var CheckoutInfo_ShippingInfoCountry: String { return self._s[1204]! } - public var SettingsSearch_Synonyms_SavedMessages: String { return self._s[1205]! } - public var Chat_AttachmentLimitReached: String { return self._s[1206]! } - public var Passport_Identity_OneOfTypeDriversLicense: String { return self._s[1207]! } - public var Contacts_NotRegisteredSection: String { return self._s[1208]! } + public var VoiceOver_Navigation_ProxySettings: String { return self._s[1175]! } + public var Call_CallInProgressTitle: String { return self._s[1176]! } + public var Month_ShortSeptember: String { return self._s[1177]! } + public var Watch_ChannelInfo_Title: String { return self._s[1178]! } + public var ChatList_DeleteSavedMessagesConfirmation: String { return self._s[1181]! } + public var DialogList_PasscodeLockHelp: String { return self._s[1182]! } + public var Chat_MultipleTextMessagesDisabled: String { return self._s[1183]! } + public var Wallet_Receive_Title: String { return self._s[1184]! } + public var Notifications_Badge_IncludePublicGroups: String { return self._s[1185]! } + public var Channel_AdminLogFilter_EventsTitle: String { return self._s[1186]! } + public var PhotoEditor_CropReset: String { return self._s[1187]! } + public var Group_Username_CreatePrivateLinkHelp: String { return self._s[1189]! } + public var Channel_Management_LabelEditor: String { return self._s[1190]! } + public var Passport_Identity_LatinNameHelp: String { return self._s[1192]! } + public var PhotoEditor_HighlightsTool: String { return self._s[1193]! } + public var Wallet_Info_WalletCreated: String { return self._s[1194]! } + public var UserInfo_Title: String { return self._s[1195]! } + public var ChatList_HideAction: String { return self._s[1196]! } + public var AccessDenied_Title: String { return self._s[1197]! } + public var DialogList_SearchLabel: String { return self._s[1198]! } + public var Group_Setup_HistoryHidden: String { return self._s[1199]! } + public var TwoStepAuth_PasswordChangeSuccess: String { return self._s[1200]! } + public var State_Updating: String { return self._s[1202]! } + public var Contacts_TabTitle: String { return self._s[1203]! } + public var Notifications_Badge_CountUnreadMessages: String { return self._s[1205]! } + public var GroupInfo_GroupHistory: String { return self._s[1206]! } + public var Conversation_UnsupportedMediaPlaceholder: String { return self._s[1207]! } + public var Wallpaper_SetColor: String { return self._s[1208]! } + public var CheckoutInfo_ShippingInfoCountry: String { return self._s[1209]! } + public var SettingsSearch_Synonyms_SavedMessages: String { return self._s[1210]! } + public var Chat_AttachmentLimitReached: String { return self._s[1211]! } + public var Passport_Identity_OneOfTypeDriversLicense: String { return self._s[1212]! } + public var Contacts_NotRegisteredSection: String { return self._s[1213]! } public func Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1209]!, self._r[1209]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1214]!, self._r[1214]!, [_1, _2, _3]) } - public var Paint_Clear: String { return self._s[1210]! } - public var StickerPacksSettings_ArchivedMasks: String { return self._s[1211]! } - public var SocksProxySetup_Connecting: String { return self._s[1212]! } - public var ExplicitContent_AlertChannel: String { return self._s[1213]! } - public var CreatePoll_AllOptionsAdded: String { return self._s[1214]! } - public var Conversation_Contact: String { return self._s[1215]! } - public var Login_CodeExpired: String { return self._s[1216]! } - public var Passport_DiscardMessageAction: String { return self._s[1217]! } - public var ChatList_Context_Unpin: String { return self._s[1218]! } - public var Channel_AdminLog_MessagePreviousDescription: String { return self._s[1219]! } + public var Paint_Clear: String { return self._s[1215]! } + public var StickerPacksSettings_ArchivedMasks: String { return self._s[1216]! } + public var SocksProxySetup_Connecting: String { return self._s[1217]! } + public var ExplicitContent_AlertChannel: String { return self._s[1218]! } + public var CreatePoll_AllOptionsAdded: String { return self._s[1219]! } + public var Conversation_Contact: String { return self._s[1220]! } + public var Login_CodeExpired: String { return self._s[1221]! } + public var Passport_DiscardMessageAction: String { return self._s[1222]! } + public var ChatList_Context_Unpin: String { return self._s[1223]! } + public var Channel_AdminLog_MessagePreviousDescription: String { return self._s[1224]! } public func VoiceOver_Chat_MusicFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1220]!, self._r[1220]!, [_0]) + return formatWithArgumentRanges(self._s[1225]!, self._r[1225]!, [_0]) } - public var Channel_AdminLog_EmptyMessageText: String { return self._s[1221]! } - public var SettingsSearch_Synonyms_Data_NetworkUsage: String { return self._s[1222]! } + public var Channel_AdminLog_EmptyMessageText: String { return self._s[1226]! } + public var SettingsSearch_Synonyms_Data_NetworkUsage: String { return self._s[1227]! } public func Group_EditAdmin_RankInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1223]!, self._r[1223]!, [_0]) + return formatWithArgumentRanges(self._s[1228]!, self._r[1228]!, [_0]) } - public var Month_ShortApril: String { return self._s[1224]! } - public var AuthSessions_CurrentSession: String { return self._s[1225]! } - public var Chat_AttachmentMultipleFilesDisabled: String { return self._s[1228]! } - public var Wallet_Navigation_Cancel: String { return self._s[1230]! } - public var WallpaperPreview_CropTopText: String { return self._s[1231]! } - public var PrivacySettings_DeleteAccountIfAwayFor: String { return self._s[1232]! } - public var CheckoutInfo_ShippingInfoTitle: String { return self._s[1233]! } + public var Month_ShortApril: String { return self._s[1229]! } + public var AuthSessions_CurrentSession: String { return self._s[1230]! } + public var Chat_AttachmentMultipleFilesDisabled: String { return self._s[1233]! } + public var Wallet_Navigation_Cancel: String { return self._s[1235]! } + public var WallpaperPreview_CropTopText: String { return self._s[1236]! } + public var PrivacySettings_DeleteAccountIfAwayFor: String { return self._s[1237]! } + public var CheckoutInfo_ShippingInfoTitle: String { return self._s[1238]! } public func Conversation_ScheduleMessage_SendOn(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1234]!, self._r[1234]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1239]!, self._r[1239]!, [_0, _1]) } - public var Appearance_ThemePreview_Chat_2_Text: String { return self._s[1235]! } - public var Channel_Setup_TypePrivate: String { return self._s[1237]! } - public var Forward_ChannelReadOnly: String { return self._s[1240]! } - public var PhotoEditor_CurvesBlue: String { return self._s[1241]! } - public var AddContact_SharedContactException: String { return self._s[1242]! } - public var UserInfo_BotPrivacy: String { return self._s[1244]! } - public var Wallet_CreateInvoice_Title: String { return self._s[1245]! } - public var Notification_PassportValueEmail: String { return self._s[1246]! } - public var EmptyGroupInfo_Subtitle: String { return self._s[1247]! } - public var GroupPermission_NewTitle: String { return self._s[1248]! } - public var CallFeedback_ReasonDropped: String { return self._s[1249]! } - public var GroupInfo_Permissions_AddException: String { return self._s[1250]! } - public var Channel_SignMessages_Help: String { return self._s[1252]! } - public var Undo_ChatDeleted: String { return self._s[1254]! } - public var Conversation_ChatBackground: String { return self._s[1255]! } + public var Appearance_ThemePreview_Chat_2_Text: String { return self._s[1240]! } + public var Channel_Setup_TypePrivate: String { return self._s[1242]! } + public var Forward_ChannelReadOnly: String { return self._s[1245]! } + public var PhotoEditor_CurvesBlue: String { return self._s[1246]! } + public var AddContact_SharedContactException: String { return self._s[1247]! } + public var UserInfo_BotPrivacy: String { return self._s[1249]! } + public var Wallet_CreateInvoice_Title: String { return self._s[1250]! } + public var Notification_PassportValueEmail: String { return self._s[1251]! } + public var EmptyGroupInfo_Subtitle: String { return self._s[1252]! } + public var GroupPermission_NewTitle: String { return self._s[1253]! } + public var CallFeedback_ReasonDropped: String { return self._s[1254]! } + public var GroupInfo_Permissions_AddException: String { return self._s[1255]! } + public var Channel_SignMessages_Help: String { return self._s[1257]! } + public var Undo_ChatDeleted: String { return self._s[1259]! } + public var Conversation_ChatBackground: String { return self._s[1260]! } public func Wallet_WordCheck_Text(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1256]!, self._r[1256]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1261]!, self._r[1261]!, [_1, _2, _3]) } - public var ChannelMembers_WhoCanAddMembers_Admins: String { return self._s[1257]! } - public var FastTwoStepSetup_EmailPlaceholder: String { return self._s[1258]! } - public var Passport_Language_pt: String { return self._s[1259]! } - public var VoiceOver_Chat_YourVoiceMessage: String { return self._s[1260]! } - public var NotificationsSound_Popcorn: String { return self._s[1263]! } - public var AutoNightTheme_Disabled: String { return self._s[1264]! } - public var BlockedUsers_LeavePrefix: String { return self._s[1265]! } - public var WallpaperPreview_CustomColorTopText: String { return self._s[1266]! } - public var Contacts_PermissionsSuppressWarningText: String { return self._s[1267]! } - public var WallpaperSearch_ColorBlue: String { return self._s[1268]! } + public var ChannelMembers_WhoCanAddMembers_Admins: String { return self._s[1262]! } + public var FastTwoStepSetup_EmailPlaceholder: String { return self._s[1263]! } + public var Passport_Language_pt: String { return self._s[1264]! } + public var VoiceOver_Chat_YourVoiceMessage: String { return self._s[1265]! } + public var NotificationsSound_Popcorn: String { return self._s[1268]! } + public var AutoNightTheme_Disabled: String { return self._s[1269]! } + public var BlockedUsers_LeavePrefix: String { return self._s[1270]! } + public var WallpaperPreview_CustomColorTopText: String { return self._s[1271]! } + public var Contacts_PermissionsSuppressWarningText: String { return self._s[1272]! } + public var WallpaperSearch_ColorBlue: String { return self._s[1273]! } public func CancelResetAccount_TextSMS(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1269]!, self._r[1269]!, [_0]) + return formatWithArgumentRanges(self._s[1274]!, self._r[1274]!, [_0]) } - public var CheckoutInfo_ErrorNameInvalid: String { return self._s[1270]! } - public var SocksProxySetup_UseForCalls: String { return self._s[1271]! } - public var Passport_DeleteDocumentConfirmation: String { return self._s[1273]! } + public var CheckoutInfo_ErrorNameInvalid: String { return self._s[1275]! } + public var SocksProxySetup_UseForCalls: String { return self._s[1276]! } + public var Passport_DeleteDocumentConfirmation: String { return self._s[1278]! } public func Conversation_Megabytes(_ _0: Float) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1274]!, self._r[1274]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1279]!, self._r[1279]!, ["\(_0)"]) } - public var SocksProxySetup_Hostname: String { return self._s[1277]! } - public var ChatSettings_AutoDownloadSettings_OffForAll: String { return self._s[1278]! } - public var Compose_NewEncryptedChat: String { return self._s[1279]! } - public var Login_CodeFloodError: String { return self._s[1280]! } - public var Calls_TabTitle: String { return self._s[1281]! } - public var Privacy_ProfilePhoto: String { return self._s[1282]! } - public var Passport_Language_he: String { return self._s[1283]! } + public var SocksProxySetup_Hostname: String { return self._s[1282]! } + public var ChatSettings_AutoDownloadSettings_OffForAll: String { return self._s[1283]! } + public var Compose_NewEncryptedChat: String { return self._s[1284]! } + public var Login_CodeFloodError: String { return self._s[1285]! } + public var Calls_TabTitle: String { return self._s[1286]! } + public var Privacy_ProfilePhoto: String { return self._s[1287]! } + public var Passport_Language_he: String { return self._s[1288]! } public func Conversation_SetReminder_RemindToday(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1284]!, self._r[1284]!, [_0]) + return formatWithArgumentRanges(self._s[1289]!, self._r[1289]!, [_0]) } - public var GroupPermission_Title: String { return self._s[1285]! } + public var GroupPermission_Title: String { return self._s[1290]! } public func Channel_AdminLog_MessageGroupPreHistoryHidden(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1286]!, self._r[1286]!, [_0]) + return formatWithArgumentRanges(self._s[1291]!, self._r[1291]!, [_0]) } - public var Wallet_TransactionInfo_SenderHeader: String { return self._s[1287]! } - public var GroupPermission_NoChangeInfo: String { return self._s[1288]! } - public var ChatList_DeleteForCurrentUser: String { return self._s[1289]! } - public var Tour_Text1: String { return self._s[1290]! } - public var Channel_EditAdmin_TransferOwnership: String { return self._s[1291]! } - public var Month_ShortFebruary: String { return self._s[1292]! } - public var TwoStepAuth_EmailSkip: String { return self._s[1293]! } + public var Wallet_TransactionInfo_SenderHeader: String { return self._s[1292]! } + public var GroupPermission_NoChangeInfo: String { return self._s[1293]! } + public var ChatList_DeleteForCurrentUser: String { return self._s[1294]! } + public var Tour_Text1: String { return self._s[1295]! } + public var Channel_EditAdmin_TransferOwnership: String { return self._s[1296]! } + public var Month_ShortFebruary: String { return self._s[1297]! } + public var TwoStepAuth_EmailSkip: String { return self._s[1298]! } public func Wallet_Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1294]!, self._r[1294]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1299]!, self._r[1299]!, [_1, _2, _3]) } - public var NotificationsSound_Glass: String { return self._s[1295]! } - public var Appearance_ThemeNightBlue: String { return self._s[1296]! } - public var CheckoutInfo_Pay: String { return self._s[1297]! } - public var Invite_LargeRecipientsCountWarning: String { return self._s[1299]! } - public var Call_CallAgain: String { return self._s[1301]! } - public var AttachmentMenu_SendAsFile: String { return self._s[1302]! } - public var AccessDenied_MicrophoneRestricted: String { return self._s[1303]! } - public var Passport_InvalidPasswordError: String { return self._s[1304]! } - public var Watch_Message_Game: String { return self._s[1305]! } - public var Stickers_Install: String { return self._s[1306]! } - public var VoiceOver_Chat_Message: String { return self._s[1307]! } - public var PrivacyLastSeenSettings_NeverShareWith: String { return self._s[1308]! } - public var Passport_Identity_ResidenceCountry: String { return self._s[1310]! } - public var Notifications_GroupNotificationsHelp: String { return self._s[1311]! } - public var AuthSessions_OtherSessions: String { return self._s[1312]! } - public var Channel_Username_Help: String { return self._s[1313]! } - public var Camera_Title: String { return self._s[1314]! } - public var GroupInfo_SetGroupPhotoDelete: String { return self._s[1316]! } - public var Privacy_ProfilePhoto_NeverShareWith_Title: String { return self._s[1317]! } - public var Channel_AdminLog_SendPolls: String { return self._s[1318]! } - public var Channel_AdminLog_TitleAllEvents: String { return self._s[1319]! } - public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[1320]! } - public var Contacts_MemberSearchSectionTitleGroup: String { return self._s[1321]! } - public var ScheduledMessages_DeleteMany: String { return self._s[1322]! } - public var Conversation_RestrictedStickers: String { return self._s[1323]! } - public var Notifications_ExceptionsResetToDefaults: String { return self._s[1325]! } - public var UserInfo_TelegramCall: String { return self._s[1327]! } - public var TwoStepAuth_SetupResendEmailCode: String { return self._s[1328]! } - public var CreatePoll_OptionsHeader: String { return self._s[1329]! } - public var SettingsSearch_Synonyms_Data_CallsUseLessData: String { return self._s[1330]! } - public var ArchivedChats_IntroTitle1: String { return self._s[1331]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Title: String { return self._s[1332]! } - public var Passport_Identity_EditPersonalDetails: String { return self._s[1333]! } + public var NotificationsSound_Glass: String { return self._s[1300]! } + public var Appearance_ThemeNightBlue: String { return self._s[1301]! } + public var CheckoutInfo_Pay: String { return self._s[1302]! } + public var Invite_LargeRecipientsCountWarning: String { return self._s[1304]! } + public var Call_CallAgain: String { return self._s[1306]! } + public var AttachmentMenu_SendAsFile: String { return self._s[1307]! } + public var AccessDenied_MicrophoneRestricted: String { return self._s[1308]! } + public var Passport_InvalidPasswordError: String { return self._s[1309]! } + public var Watch_Message_Game: String { return self._s[1310]! } + public var Stickers_Install: String { return self._s[1311]! } + public var VoiceOver_Chat_Message: String { return self._s[1312]! } + public var PrivacyLastSeenSettings_NeverShareWith: String { return self._s[1313]! } + public var Passport_Identity_ResidenceCountry: String { return self._s[1315]! } + public var Notifications_GroupNotificationsHelp: String { return self._s[1316]! } + public var AuthSessions_OtherSessions: String { return self._s[1317]! } + public var Channel_Username_Help: String { return self._s[1318]! } + public var Camera_Title: String { return self._s[1319]! } + public var GroupInfo_SetGroupPhotoDelete: String { return self._s[1321]! } + public var Privacy_ProfilePhoto_NeverShareWith_Title: String { return self._s[1322]! } + public var Channel_AdminLog_SendPolls: String { return self._s[1323]! } + public var Channel_AdminLog_TitleAllEvents: String { return self._s[1324]! } + public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[1325]! } + public var Contacts_MemberSearchSectionTitleGroup: String { return self._s[1326]! } + public var ScheduledMessages_DeleteMany: String { return self._s[1327]! } + public var Conversation_RestrictedStickers: String { return self._s[1328]! } + public var Notifications_ExceptionsResetToDefaults: String { return self._s[1330]! } + public var UserInfo_TelegramCall: String { return self._s[1332]! } + public var TwoStepAuth_SetupResendEmailCode: String { return self._s[1333]! } + public var CreatePoll_OptionsHeader: String { return self._s[1334]! } + public var SettingsSearch_Synonyms_Data_CallsUseLessData: String { return self._s[1335]! } + public var ArchivedChats_IntroTitle1: String { return self._s[1336]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Title: String { return self._s[1337]! } + public var Passport_Identity_EditPersonalDetails: String { return self._s[1338]! } public func Time_PreciseDate_m1(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1334]!, self._r[1334]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1339]!, self._r[1339]!, [_1, _2, _3]) } - public var Wallet_Month_GenAugust: String { return self._s[1335]! } - public var Settings_SaveEditedPhotos: String { return self._s[1336]! } - public var TwoStepAuth_ConfirmationTitle: String { return self._s[1337]! } - public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[1338]! } - public var Conversation_MessageDialogRetry: String { return self._s[1339]! } - public var ChatList_Context_MarkAsUnread: String { return self._s[1340]! } - public var Conversation_DiscardVoiceMessageAction: String { return self._s[1341]! } - public var Permissions_PeopleNearbyTitle_v0: String { return self._s[1342]! } - public var Group_Setup_TypeHeader: String { return self._s[1343]! } - public var Paint_RecentStickers: String { return self._s[1344]! } - public var PhotoEditor_GrainTool: String { return self._s[1345]! } - public var CheckoutInfo_ShippingInfoState: String { return self._s[1346]! } - public var EmptyGroupInfo_Line4: String { return self._s[1347]! } - public var Watch_AuthRequired: String { return self._s[1349]! } + public var Wallet_Month_GenAugust: String { return self._s[1340]! } + public var Settings_SaveEditedPhotos: String { return self._s[1341]! } + public var TwoStepAuth_ConfirmationTitle: String { return self._s[1342]! } + public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[1343]! } + public var Conversation_MessageDialogRetry: String { return self._s[1344]! } + public var ChatList_Context_MarkAsUnread: String { return self._s[1345]! } + public var Conversation_DiscardVoiceMessageAction: String { return self._s[1346]! } + public var Permissions_PeopleNearbyTitle_v0: String { return self._s[1347]! } + public var Group_Setup_TypeHeader: String { return self._s[1348]! } + public var Paint_RecentStickers: String { return self._s[1349]! } + public var PhotoEditor_GrainTool: String { return self._s[1350]! } + public var CheckoutInfo_ShippingInfoState: String { return self._s[1351]! } + public var EmptyGroupInfo_Line4: String { return self._s[1352]! } + public var Watch_AuthRequired: String { return self._s[1354]! } public func Passport_Email_UseTelegramEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1350]!, self._r[1350]!, [_0]) + return formatWithArgumentRanges(self._s[1355]!, self._r[1355]!, [_0]) } - public var Conversation_EncryptedDescriptionTitle: String { return self._s[1351]! } - public var ChannelIntro_Text: String { return self._s[1352]! } - public var DialogList_DeleteBotConfirmation: String { return self._s[1353]! } - public var GroupPermission_NoSendMedia: String { return self._s[1354]! } - public var Calls_AddTab: String { return self._s[1355]! } - public var Message_ReplyActionButtonShowReceipt: String { return self._s[1356]! } - public var Channel_AdminLog_EmptyFilterText: String { return self._s[1357]! } - public var Conversation_WalletRequiredSetup: String { return self._s[1358]! } - public var Notification_MessageLifetime1d: String { return self._s[1359]! } - public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[1360]! } - public var Channel_BanUser_PermissionsHeader: String { return self._s[1361]! } - public var Passport_Identity_GenderFemale: String { return self._s[1362]! } - public var BlockedUsers_BlockTitle: String { return self._s[1363]! } + public var Conversation_EncryptedDescriptionTitle: String { return self._s[1356]! } + public var ChannelIntro_Text: String { return self._s[1357]! } + public var DialogList_DeleteBotConfirmation: String { return self._s[1358]! } + public var GroupPermission_NoSendMedia: String { return self._s[1359]! } + public var Calls_AddTab: String { return self._s[1360]! } + public var Message_ReplyActionButtonShowReceipt: String { return self._s[1361]! } + public var Channel_AdminLog_EmptyFilterText: String { return self._s[1362]! } + public var Conversation_WalletRequiredSetup: String { return self._s[1363]! } + public var Notification_MessageLifetime1d: String { return self._s[1364]! } + public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[1365]! } + public var Channel_BanUser_PermissionsHeader: String { return self._s[1366]! } + public var Passport_Identity_GenderFemale: String { return self._s[1367]! } + public var BlockedUsers_BlockTitle: String { return self._s[1368]! } public func PUSH_CHANNEL_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1364]!, self._r[1364]!, [_1]) + return formatWithArgumentRanges(self._s[1369]!, self._r[1369]!, [_1]) } - public var Weekday_Yesterday: String { return self._s[1365]! } - public var WallpaperSearch_ColorBlack: String { return self._s[1366]! } - public var Settings_Context_Logout: String { return self._s[1367]! } - public var Wallet_Info_UnknownTransaction: String { return self._s[1368]! } - public var ChatList_ArchiveAction: String { return self._s[1369]! } - public var AutoNightTheme_Scheduled: String { return self._s[1370]! } - public var TwoFactorSetup_Email_SkipAction: String { return self._s[1371]! } + public var Weekday_Yesterday: String { return self._s[1370]! } + public var WallpaperSearch_ColorBlack: String { return self._s[1371]! } + public var Settings_Context_Logout: String { return self._s[1372]! } + public var Wallet_Info_UnknownTransaction: String { return self._s[1373]! } + public var ChatList_ArchiveAction: String { return self._s[1374]! } + public var AutoNightTheme_Scheduled: String { return self._s[1375]! } + public var TwoFactorSetup_Email_SkipAction: String { return self._s[1376]! } public func Login_PhoneGenericEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1372]!, self._r[1372]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[1377]!, self._r[1377]!, [_1, _2, _3, _4, _5, _6]) } - public var EditTheme_ThemeTemplateAlertTitle: String { return self._s[1373]! } - public var Wallet_Receive_CreateInvoice: String { return self._s[1374]! } - public var PrivacyPolicy_DeclineDeleteNow: String { return self._s[1375]! } + public var EditTheme_ThemeTemplateAlertTitle: String { return self._s[1378]! } + public var Wallet_Receive_CreateInvoice: String { return self._s[1379]! } + public var PrivacyPolicy_DeclineDeleteNow: String { return self._s[1380]! } public func PUSH_CHAT_JOINED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1376]!, self._r[1376]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1381]!, self._r[1381]!, [_1, _2]) } - public var CreatePoll_Create: String { return self._s[1377]! } - public var Channel_Members_AddBannedErrorAdmin: String { return self._s[1378]! } + public var CreatePoll_Create: String { return self._s[1382]! } + public var Channel_Members_AddBannedErrorAdmin: String { return self._s[1383]! } public func Notification_CallFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1379]!, self._r[1379]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1384]!, self._r[1384]!, [_1, _2]) } - public var ScheduledMessages_ClearAllConfirmation: String { return self._s[1380]! } - public var Checkout_ErrorProviderAccountInvalid: String { return self._s[1381]! } - public var Notifications_InAppNotificationsSounds: String { return self._s[1383]! } + public var ScheduledMessages_ClearAllConfirmation: String { return self._s[1385]! } + public var Checkout_ErrorProviderAccountInvalid: String { return self._s[1386]! } + public var Notifications_InAppNotificationsSounds: String { return self._s[1388]! } public func PUSH_PINNED_GAME_SCORE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1384]!, self._r[1384]!, [_1]) + return formatWithArgumentRanges(self._s[1389]!, self._r[1389]!, [_1]) } - public var Preview_OpenInInstagram: String { return self._s[1385]! } - public var Notification_MessageLifetimeRemovedOutgoing: String { return self._s[1386]! } + public var Preview_OpenInInstagram: String { return self._s[1390]! } + public var Notification_MessageLifetimeRemovedOutgoing: String { return self._s[1391]! } public func PUSH_CHAT_ADD_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1387]!, self._r[1387]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1392]!, self._r[1392]!, [_1, _2, _3]) } public func Passport_PrivacyPolicy(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1388]!, self._r[1388]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1393]!, self._r[1393]!, [_1, _2]) } - public var Channel_AdminLog_InfoPanelAlertTitle: String { return self._s[1389]! } - public var ArchivedChats_IntroText3: String { return self._s[1390]! } - public var ChatList_UndoArchiveHiddenText: String { return self._s[1391]! } - public var NetworkUsageSettings_TotalSection: String { return self._s[1392]! } - public var Wallet_Month_GenSeptember: String { return self._s[1393]! } - public var Channel_Setup_TypePrivateHelp: String { return self._s[1394]! } + public var Channel_AdminLog_InfoPanelAlertTitle: String { return self._s[1394]! } + public var ArchivedChats_IntroText3: String { return self._s[1395]! } + public var ChatList_UndoArchiveHiddenText: String { return self._s[1396]! } + public var NetworkUsageSettings_TotalSection: String { return self._s[1397]! } + public var Wallet_Month_GenSeptember: String { return self._s[1398]! } + public var Channel_Setup_TypePrivateHelp: String { return self._s[1399]! } public func PUSH_CHAT_MESSAGE_POLL(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1395]!, self._r[1395]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1400]!, self._r[1400]!, [_1, _2, _3]) } - public var Privacy_GroupsAndChannels_NeverAllow_Placeholder: String { return self._s[1397]! } - public var FastTwoStepSetup_HintSection: String { return self._s[1398]! } - public var Wallpaper_PhotoLibrary: String { return self._s[1399]! } - public var TwoStepAuth_SetupResendEmailCodeAlert: String { return self._s[1400]! } - public var Gif_NoGifsFound: String { return self._s[1401]! } - public var Watch_LastSeen_WithinAMonth: String { return self._s[1402]! } - public var VoiceOver_MessageContextDelete: String { return self._s[1403]! } - public var EditTheme_Preview: String { return self._s[1404]! } - public var GroupInfo_ActionPromote: String { return self._s[1405]! } - public var PasscodeSettings_SimplePasscode: String { return self._s[1406]! } - public var GroupInfo_Permissions_Title: String { return self._s[1407]! } - public var Permissions_ContactsText_v0: String { return self._s[1408]! } - public var PrivacyPhoneNumberSettings_CustomDisabledHelp: String { return self._s[1409]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedPublicGroups: String { return self._s[1410]! } - public var PrivacySettings_DataSettingsHelp: String { return self._s[1413]! } - public var Passport_FieldEmailHelp: String { return self._s[1414]! } + public var Privacy_GroupsAndChannels_NeverAllow_Placeholder: String { return self._s[1402]! } + public var FastTwoStepSetup_HintSection: String { return self._s[1403]! } + public var Wallpaper_PhotoLibrary: String { return self._s[1404]! } + public var TwoStepAuth_SetupResendEmailCodeAlert: String { return self._s[1405]! } + public var Gif_NoGifsFound: String { return self._s[1406]! } + public var Watch_LastSeen_WithinAMonth: String { return self._s[1407]! } + public var VoiceOver_MessageContextDelete: String { return self._s[1408]! } + public var EditTheme_Preview: String { return self._s[1409]! } + public var GroupInfo_ActionPromote: String { return self._s[1410]! } + public var PasscodeSettings_SimplePasscode: String { return self._s[1411]! } + public var GroupInfo_Permissions_Title: String { return self._s[1412]! } + public var Permissions_ContactsText_v0: String { return self._s[1413]! } + public var PrivacyPhoneNumberSettings_CustomDisabledHelp: String { return self._s[1414]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedPublicGroups: String { return self._s[1415]! } + public var PrivacySettings_DataSettingsHelp: String { return self._s[1418]! } + public var Passport_FieldEmailHelp: String { return self._s[1419]! } public func Activity_RemindAboutUser(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1415]!, self._r[1415]!, [_0]) + return formatWithArgumentRanges(self._s[1420]!, self._r[1420]!, [_0]) } - public var Passport_Identity_GenderPlaceholder: String { return self._s[1416]! } - public var Weekday_ShortSaturday: String { return self._s[1417]! } - public var ContactInfo_PhoneLabelMain: String { return self._s[1418]! } - public var Watch_Conversation_UserInfo: String { return self._s[1419]! } - public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[1420]! } - public var PrivacyLastSeenSettings_Title: String { return self._s[1421]! } - public var Conversation_ShareBotLocationConfirmation: String { return self._s[1422]! } - public var PhotoEditor_VignetteTool: String { return self._s[1423]! } - public var Passport_Address_Street1Placeholder: String { return self._s[1424]! } - public var Passport_Language_et: String { return self._s[1425]! } - public var AppUpgrade_Running: String { return self._s[1426]! } - public var Channel_DiscussionGroup_Info: String { return self._s[1428]! } - public var EditTheme_Create_Preview_IncomingReplyName: String { return self._s[1429]! } - public var Passport_Language_bg: String { return self._s[1430]! } - public var Stickers_NoStickersFound: String { return self._s[1432]! } + public var Passport_Identity_GenderPlaceholder: String { return self._s[1421]! } + public var Weekday_ShortSaturday: String { return self._s[1422]! } + public var ContactInfo_PhoneLabelMain: String { return self._s[1423]! } + public var Watch_Conversation_UserInfo: String { return self._s[1424]! } + public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[1425]! } + public var PrivacyLastSeenSettings_Title: String { return self._s[1426]! } + public var Conversation_ShareBotLocationConfirmation: String { return self._s[1427]! } + public var PhotoEditor_VignetteTool: String { return self._s[1428]! } + public var Passport_Address_Street1Placeholder: String { return self._s[1429]! } + public var Passport_Language_et: String { return self._s[1430]! } + public var AppUpgrade_Running: String { return self._s[1431]! } + public var Channel_DiscussionGroup_Info: String { return self._s[1433]! } + public var EditTheme_Create_Preview_IncomingReplyName: String { return self._s[1434]! } + public var Passport_Language_bg: String { return self._s[1435]! } + public var Stickers_NoStickersFound: String { return self._s[1437]! } public func PUSH_CHANNEL_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1434]!, self._r[1434]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1439]!, self._r[1439]!, [_1, _2]) } public func VoiceOver_Chat_ContactFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1435]!, self._r[1435]!, [_0]) + return formatWithArgumentRanges(self._s[1440]!, self._r[1440]!, [_0]) } - public var Wallet_Month_GenJuly: String { return self._s[1436]! } - public var Wallet_Receive_AddressHeader: String { return self._s[1437]! } - public var Wallet_Send_AmountText: String { return self._s[1438]! } - public var Settings_About: String { return self._s[1439]! } + public var Wallet_Month_GenJuly: String { return self._s[1441]! } + public var Wallet_Receive_AddressHeader: String { return self._s[1442]! } + public var Wallet_Send_AmountText: String { return self._s[1443]! } + public var Settings_About: String { return self._s[1444]! } public func Channel_AdminLog_MessageRestricted(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1440]!, self._r[1440]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1445]!, self._r[1445]!, [_0, _1, _2]) } - public var ChatList_Context_MarkAsRead: String { return self._s[1442]! } - public var KeyCommand_NewMessage: String { return self._s[1443]! } - public var Group_ErrorAddBlocked: String { return self._s[1444]! } + public var ChatList_Context_MarkAsRead: String { return self._s[1447]! } + public var KeyCommand_NewMessage: String { return self._s[1448]! } + public var Group_ErrorAddBlocked: String { return self._s[1449]! } public func Message_PaymentSent(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1445]!, self._r[1445]!, [_0]) - } - public var Map_LocationTitle: String { return self._s[1446]! } - public var ReportGroupLocation_Title: String { return self._s[1447]! } - public var CallSettings_UseLessDataLongDescription: String { return self._s[1448]! } - public var Cache_ClearProgress: String { return self._s[1449]! } - public func Channel_Management_ErrorNotMember(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1450]!, self._r[1450]!, [_0]) } - public var GroupRemoved_AddToGroup: String { return self._s[1451]! } - public var Passport_UpdateRequiredError: String { return self._s[1452]! } - public var Wallet_SecureStorageNotAvailable_Text: String { return self._s[1453]! } + public var Map_LocationTitle: String { return self._s[1451]! } + public var ReportGroupLocation_Title: String { return self._s[1452]! } + public var CallSettings_UseLessDataLongDescription: String { return self._s[1453]! } + public var Cache_ClearProgress: String { return self._s[1454]! } + public func Channel_Management_ErrorNotMember(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1455]!, self._r[1455]!, [_0]) + } + public var GroupRemoved_AddToGroup: String { return self._s[1456]! } + public var Passport_UpdateRequiredError: String { return self._s[1457]! } + public var Wallet_SecureStorageNotAvailable_Text: String { return self._s[1458]! } public func PUSH_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1454]!, self._r[1454]!, [_1]) + return formatWithArgumentRanges(self._s[1459]!, self._r[1459]!, [_1]) } - public var Notifications_PermissionsSuppressWarningText: String { return self._s[1456]! } - public var Passport_Identity_MainPageHelp: String { return self._s[1457]! } - public var Conversation_StatusKickedFromGroup: String { return self._s[1458]! } - public var Passport_Language_ka: String { return self._s[1459]! } + public var Notifications_PermissionsSuppressWarningText: String { return self._s[1461]! } + public var Passport_Identity_MainPageHelp: String { return self._s[1462]! } + public var Conversation_StatusKickedFromGroup: String { return self._s[1463]! } + public var Passport_Language_ka: String { return self._s[1464]! } public func Wallet_Time_PreciseDate_m12(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1460]!, self._r[1460]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1465]!, self._r[1465]!, [_1, _2, _3]) } - public var Call_Decline: String { return self._s[1461]! } - public var SocksProxySetup_ProxyEnabled: String { return self._s[1462]! } - public var TwoFactorSetup_Email_SkipConfirmationText: String { return self._s[1465]! } + public var Call_Decline: String { return self._s[1466]! } + public var SocksProxySetup_ProxyEnabled: String { return self._s[1467]! } + public var TwoFactorSetup_Email_SkipConfirmationText: String { return self._s[1470]! } public func AuthCode_Alert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1466]!, self._r[1466]!, [_0]) + return formatWithArgumentRanges(self._s[1471]!, self._r[1471]!, [_0]) } - public var CallFeedback_Send: String { return self._s[1467]! } - public var EditTheme_EditTitle: String { return self._s[1468]! } + public var CallFeedback_Send: String { return self._s[1472]! } + public var EditTheme_EditTitle: String { return self._s[1473]! } public func Channel_AdminLog_MessagePromotedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1469]!, self._r[1469]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1474]!, self._r[1474]!, [_1, _2]) } - public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[1470]! } + public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[1475]! } public func Wallet_Updated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1472]!, self._r[1472]!, [_0]) + return formatWithArgumentRanges(self._s[1477]!, self._r[1477]!, [_0]) } - public var SettingsSearch_Synonyms_Data_Title: String { return self._s[1473]! } - public var Passport_DeletePassport: String { return self._s[1474]! } - public var Appearance_AppIconFilled: String { return self._s[1475]! } - public var Privacy_Calls_P2PAlways: String { return self._s[1476]! } - public var Month_ShortDecember: String { return self._s[1477]! } - public var Channel_AdminLog_CanEditMessages: String { return self._s[1479]! } + public var SettingsSearch_Synonyms_Data_Title: String { return self._s[1478]! } + public var Passport_DeletePassport: String { return self._s[1479]! } + public var Appearance_AppIconFilled: String { return self._s[1480]! } + public var Privacy_Calls_P2PAlways: String { return self._s[1481]! } + public var Month_ShortDecember: String { return self._s[1482]! } + public var Channel_AdminLog_CanEditMessages: String { return self._s[1484]! } public func Contacts_AccessDeniedHelpLandscape(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1480]!, self._r[1480]!, [_0]) + return formatWithArgumentRanges(self._s[1485]!, self._r[1485]!, [_0]) } - public var Channel_Stickers_Searching: String { return self._s[1481]! } - public var Conversation_EncryptedDescription1: String { return self._s[1482]! } - public var Conversation_EncryptedDescription2: String { return self._s[1483]! } - public var PasscodeSettings_PasscodeOptions: String { return self._s[1484]! } - public var Conversation_EncryptedDescription3: String { return self._s[1486]! } - public var PhotoEditor_SharpenTool: String { return self._s[1487]! } - public var Wallet_Configuration_Title: String { return self._s[1488]! } + public var Channel_Stickers_Searching: String { return self._s[1486]! } + public var Conversation_EncryptedDescription1: String { return self._s[1487]! } + public var Conversation_EncryptedDescription2: String { return self._s[1488]! } + public var PasscodeSettings_PasscodeOptions: String { return self._s[1489]! } + public var Conversation_EncryptedDescription3: String { return self._s[1491]! } + public var PhotoEditor_SharpenTool: String { return self._s[1492]! } + public var Wallet_Configuration_Title: String { return self._s[1493]! } public func Conversation_AddNameToContacts(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1489]!, self._r[1489]!, [_0]) + return formatWithArgumentRanges(self._s[1494]!, self._r[1494]!, [_0]) } - public var Conversation_EncryptedDescription4: String { return self._s[1491]! } - public var Channel_Members_AddMembers: String { return self._s[1492]! } - public var Wallpaper_Search: String { return self._s[1493]! } - public var Weekday_Friday: String { return self._s[1494]! } - public var Privacy_ContactsSync: String { return self._s[1495]! } - public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[1496]! } - public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1497]! } + public var Conversation_EncryptedDescription4: String { return self._s[1496]! } + public var Channel_Members_AddMembers: String { return self._s[1497]! } + public var Wallpaper_Search: String { return self._s[1498]! } + public var Weekday_Friday: String { return self._s[1499]! } + public var Privacy_ContactsSync: String { return self._s[1500]! } + public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[1501]! } + public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1502]! } public func Channel_Management_RestrictedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1498]!, self._r[1498]!, [_0]) + return formatWithArgumentRanges(self._s[1503]!, self._r[1503]!, [_0]) } - public var GroupInfo_Permissions_Removed: String { return self._s[1499]! } - public var ScheduledMessages_ScheduledOnline: String { return self._s[1500]! } - public var Passport_Identity_GenderMale: String { return self._s[1501]! } + public var Wallet_Configuration_BlockchainIdHeader: String { return self._s[1504]! } + public var GroupInfo_Permissions_Removed: String { return self._s[1505]! } + public var ScheduledMessages_ScheduledOnline: String { return self._s[1506]! } + public var Passport_Identity_GenderMale: String { return self._s[1507]! } public func Call_StatusBar(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1502]!, self._r[1502]!, [_0]) + return formatWithArgumentRanges(self._s[1508]!, self._r[1508]!, [_0]) } - public var Notifications_PermissionsKeepDisabled: String { return self._s[1503]! } - public var Conversation_JumpToDate: String { return self._s[1504]! } - public var Contacts_GlobalSearch: String { return self._s[1505]! } - public var AutoDownloadSettings_ResetHelp: String { return self._s[1506]! } - public var SettingsSearch_Synonyms_FAQ: String { return self._s[1507]! } - public var Profile_MessageLifetime1d: String { return self._s[1508]! } + public var Notifications_PermissionsKeepDisabled: String { return self._s[1509]! } + public var Conversation_JumpToDate: String { return self._s[1510]! } + public var Contacts_GlobalSearch: String { return self._s[1511]! } + public var AutoDownloadSettings_ResetHelp: String { return self._s[1512]! } + public var SettingsSearch_Synonyms_FAQ: String { return self._s[1513]! } + public var Profile_MessageLifetime1d: String { return self._s[1514]! } public func MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1509]!, self._r[1509]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1515]!, self._r[1515]!, [_1, _2]) } - public var StickerPack_BuiltinPackName: String { return self._s[1512]! } + public var StickerPack_BuiltinPackName: String { return self._s[1518]! } public func PUSH_CHAT_MESSAGE_AUDIO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1513]!, self._r[1513]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1519]!, self._r[1519]!, [_1, _2]) } - public var VoiceOver_Chat_RecordModeVoiceMessageInfo: String { return self._s[1514]! } - public var Passport_InfoTitle: String { return self._s[1516]! } - public var Notifications_PermissionsUnreachableText: String { return self._s[1517]! } + public var VoiceOver_Chat_RecordModeVoiceMessageInfo: String { return self._s[1520]! } + public var Passport_InfoTitle: String { return self._s[1522]! } + public var Notifications_PermissionsUnreachableText: String { return self._s[1523]! } public func NetworkUsageSettings_CellularUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1521]!, self._r[1521]!, [_0]) + return formatWithArgumentRanges(self._s[1527]!, self._r[1527]!, [_0]) } public func PUSH_CHAT_MESSAGE_GEO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1522]!, self._r[1522]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1528]!, self._r[1528]!, [_1, _2]) } - public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[1523]! } - public var Profile_BotInfo: String { return self._s[1524]! } - public var Watch_Compose_CreateMessage: String { return self._s[1525]! } - public var AutoDownloadSettings_VoiceMessagesInfo: String { return self._s[1526]! } - public var Month_ShortNovember: String { return self._s[1527]! } - public var Conversation_ScamWarning: String { return self._s[1528]! } - public var Wallpaper_SetCustomBackground: String { return self._s[1529]! } - public var Passport_Identity_TranslationsHelp: String { return self._s[1530]! } - public var NotificationsSound_Chime: String { return self._s[1531]! } - public var Passport_Language_ko: String { return self._s[1533]! } - public var InviteText_URL: String { return self._s[1534]! } - public var TextFormat_Monospace: String { return self._s[1535]! } + public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[1529]! } + public var Profile_BotInfo: String { return self._s[1530]! } + public var Watch_Compose_CreateMessage: String { return self._s[1531]! } + public var AutoDownloadSettings_VoiceMessagesInfo: String { return self._s[1532]! } + public var Month_ShortNovember: String { return self._s[1533]! } + public var Conversation_ScamWarning: String { return self._s[1534]! } + public var Wallpaper_SetCustomBackground: String { return self._s[1535]! } + public var Passport_Identity_TranslationsHelp: String { return self._s[1536]! } + public var NotificationsSound_Chime: String { return self._s[1537]! } + public var Passport_Language_ko: String { return self._s[1539]! } + public var InviteText_URL: String { return self._s[1540]! } + public var TextFormat_Monospace: String { return self._s[1541]! } public func Time_PreciseDate_m11(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1536]!, self._r[1536]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1542]!, self._r[1542]!, [_1, _2, _3]) } - public var EditTheme_Edit_BottomInfo: String { return self._s[1537]! } + public var EditTheme_Edit_BottomInfo: String { return self._s[1543]! } public func Login_WillSendSms(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1538]!, self._r[1538]!, [_0]) + return formatWithArgumentRanges(self._s[1544]!, self._r[1544]!, [_0]) } public func Watch_Time_ShortWeekdayAt(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1539]!, self._r[1539]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1545]!, self._r[1545]!, [_1, _2]) } - public var Wallet_Words_Title: String { return self._s[1540]! } - public var Wallet_Month_ShortMay: String { return self._s[1541]! } - public var EditTheme_CreateTitle: String { return self._s[1543]! } - public var Passport_InfoLearnMore: String { return self._s[1544]! } - public var TwoStepAuth_EmailPlaceholder: String { return self._s[1545]! } - public var Passport_Identity_AddIdentityCard: String { return self._s[1546]! } - public var Your_card_has_expired: String { return self._s[1547]! } - public var StickerPacksSettings_StickerPacksSection: String { return self._s[1548]! } - public var GroupInfo_InviteLink_Help: String { return self._s[1549]! } - public var TwoFactorSetup_EmailVerification_ResendAction: String { return self._s[1553]! } - public var Conversation_Report: String { return self._s[1554]! } - public var Notifications_MessageNotificationsSound: String { return self._s[1555]! } - public var Notification_MessageLifetime1m: String { return self._s[1556]! } - public var Privacy_ContactsTitle: String { return self._s[1557]! } - public var Conversation_ShareMyContactInfo: String { return self._s[1558]! } - public var Wallet_WordCheck_Title: String { return self._s[1559]! } - public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[1560]! } - public var Channel_Members_Title: String { return self._s[1561]! } - public var Map_OpenInWaze: String { return self._s[1562]! } - public var Login_PhoneBannedError: String { return self._s[1563]! } + public var Wallet_Words_Title: String { return self._s[1546]! } + public var Wallet_Month_ShortMay: String { return self._s[1547]! } + public var EditTheme_CreateTitle: String { return self._s[1549]! } + public var Passport_InfoLearnMore: String { return self._s[1550]! } + public var TwoStepAuth_EmailPlaceholder: String { return self._s[1551]! } + public var Passport_Identity_AddIdentityCard: String { return self._s[1552]! } + public var Your_card_has_expired: String { return self._s[1553]! } + public var StickerPacksSettings_StickerPacksSection: String { return self._s[1554]! } + public var GroupInfo_InviteLink_Help: String { return self._s[1555]! } + public var TwoFactorSetup_EmailVerification_ResendAction: String { return self._s[1559]! } + public var Conversation_Report: String { return self._s[1560]! } + public var Notifications_MessageNotificationsSound: String { return self._s[1561]! } + public var Notification_MessageLifetime1m: String { return self._s[1562]! } + public var Privacy_ContactsTitle: String { return self._s[1563]! } + public var Conversation_ShareMyContactInfo: String { return self._s[1564]! } + public var Wallet_WordCheck_Title: String { return self._s[1565]! } + public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[1566]! } + public var Channel_Members_Title: String { return self._s[1567]! } + public var Map_OpenInWaze: String { return self._s[1568]! } + public var Login_PhoneBannedError: String { return self._s[1569]! } public func LiveLocationUpdated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1564]!, self._r[1564]!, [_0]) + return formatWithArgumentRanges(self._s[1570]!, self._r[1570]!, [_0]) } - public var Group_Management_AddModeratorHelp: String { return self._s[1565]! } - public var AutoDownloadSettings_WifiTitle: String { return self._s[1566]! } - public var Common_OK: String { return self._s[1567]! } - public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[1568]! } - public var Wallet_Words_NotDoneResponse: String { return self._s[1569]! } - public var Cache_Music: String { return self._s[1570]! } - public var SettingsSearch_Synonyms_EditProfile_PhoneNumber: String { return self._s[1571]! } - public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1572]! } - public var TwoStepAuth_HintPlaceholder: String { return self._s[1573]! } + public var Group_Management_AddModeratorHelp: String { return self._s[1571]! } + public var AutoDownloadSettings_WifiTitle: String { return self._s[1572]! } + public var Common_OK: String { return self._s[1573]! } + public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[1574]! } + public var Wallet_Words_NotDoneResponse: String { return self._s[1575]! } + public var Cache_Music: String { return self._s[1576]! } + public var Wallet_Configuration_SourceURL: String { return self._s[1577]! } + public var SettingsSearch_Synonyms_EditProfile_PhoneNumber: String { return self._s[1578]! } + public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1579]! } + public var TwoStepAuth_HintPlaceholder: String { return self._s[1580]! } public func PUSH_PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1574]!, self._r[1574]!, [_1]) + return formatWithArgumentRanges(self._s[1581]!, self._r[1581]!, [_1]) } public func Passport_RequestHeader(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1575]!, self._r[1575]!, [_0]) + return formatWithArgumentRanges(self._s[1582]!, self._r[1582]!, [_0]) } - public var TwoFactorSetup_Done_Action: String { return self._s[1576]! } + public var TwoFactorSetup_Done_Action: String { return self._s[1583]! } public func VoiceOver_Chat_ContactOrganization(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1577]!, self._r[1577]!, [_0]) + return formatWithArgumentRanges(self._s[1584]!, self._r[1584]!, [_0]) } - public var Wallet_Send_ErrorNotEnoughFundsText: String { return self._s[1578]! } - public var Watch_MessageView_ViewOnPhone: String { return self._s[1580]! } - public var Privacy_Calls_CustomShareHelp: String { return self._s[1581]! } - public var Wallet_Receive_CreateInvoiceInfo: String { return self._s[1583]! } - public var ChangePhoneNumberNumber_Title: String { return self._s[1584]! } - public var State_ConnectingToProxyInfo: String { return self._s[1585]! } - public var Conversation_SwipeToReplyHintTitle: String { return self._s[1586]! } - public var Message_VideoMessage: String { return self._s[1588]! } - public var ChannelInfo_DeleteChannel: String { return self._s[1589]! } - public var ContactInfo_PhoneLabelOther: String { return self._s[1590]! } - public var Channel_EditAdmin_CannotEdit: String { return self._s[1591]! } - public var Passport_DeleteAddressConfirmation: String { return self._s[1592]! } + public var Wallet_Send_ErrorNotEnoughFundsText: String { return self._s[1585]! } + public var Watch_MessageView_ViewOnPhone: String { return self._s[1587]! } + public var Privacy_Calls_CustomShareHelp: String { return self._s[1588]! } + public var Wallet_Receive_CreateInvoiceInfo: String { return self._s[1590]! } + public var ChangePhoneNumberNumber_Title: String { return self._s[1591]! } + public var State_ConnectingToProxyInfo: String { return self._s[1592]! } + public var Conversation_SwipeToReplyHintTitle: String { return self._s[1593]! } + public var Message_VideoMessage: String { return self._s[1595]! } + public var ChannelInfo_DeleteChannel: String { return self._s[1596]! } + public var ContactInfo_PhoneLabelOther: String { return self._s[1597]! } + public var Channel_EditAdmin_CannotEdit: String { return self._s[1598]! } + public var Passport_DeleteAddressConfirmation: String { return self._s[1599]! } public func Wallet_Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1593]!, self._r[1593]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1600]!, self._r[1600]!, [_1, _2, _3]) } - public var WallpaperPreview_SwipeBottomText: String { return self._s[1594]! } - public var Activity_RecordingAudio: String { return self._s[1595]! } - public var SettingsSearch_Synonyms_Watch: String { return self._s[1596]! } - public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[1597]! } - public var Wallet_Info_Address: String { return self._s[1598]! } + public var WallpaperPreview_SwipeBottomText: String { return self._s[1601]! } + public var Activity_RecordingAudio: String { return self._s[1602]! } + public var SettingsSearch_Synonyms_Watch: String { return self._s[1603]! } + public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[1604]! } + public var Wallet_Info_Address: String { return self._s[1605]! } public func Notification_ChangedGroupName(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1600]!, self._r[1600]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1607]!, self._r[1607]!, [_0, _1]) } public func EmptyGroupInfo_Line1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1604]!, self._r[1604]!, [_0]) + return formatWithArgumentRanges(self._s[1611]!, self._r[1611]!, [_0]) } - public var Conversation_ApplyLocalization: String { return self._s[1605]! } - public var TwoFactorSetup_Intro_Action: String { return self._s[1606]! } - public var UserInfo_AddPhone: String { return self._s[1607]! } - public var Map_ShareLiveLocationHelp: String { return self._s[1608]! } + public var Conversation_ApplyLocalization: String { return self._s[1612]! } + public var TwoFactorSetup_Intro_Action: String { return self._s[1613]! } + public var UserInfo_AddPhone: String { return self._s[1614]! } + public var Map_ShareLiveLocationHelp: String { return self._s[1615]! } public func Passport_Identity_NativeNameGenericHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1609]!, self._r[1609]!, [_0]) + return formatWithArgumentRanges(self._s[1616]!, self._r[1616]!, [_0]) } - public var Passport_Scans: String { return self._s[1611]! } - public var BlockedUsers_Unblock: String { return self._s[1612]! } + public var Passport_Scans: String { return self._s[1618]! } + public var BlockedUsers_Unblock: String { return self._s[1619]! } public func PUSH_ENCRYPTION_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1613]!, self._r[1613]!, [_1]) + return formatWithArgumentRanges(self._s[1620]!, self._r[1620]!, [_1]) } - public var Channel_Management_LabelCreator: String { return self._s[1614]! } - public var Conversation_ReportSpamAndLeave: String { return self._s[1615]! } - public var SettingsSearch_Synonyms_EditProfile_Bio: String { return self._s[1616]! } - public var ChatList_UndoArchiveMultipleTitle: String { return self._s[1617]! } - public var Passport_Identity_NativeNameGenericTitle: String { return self._s[1618]! } + public var Channel_Management_LabelCreator: String { return self._s[1621]! } + public var Conversation_ReportSpamAndLeave: String { return self._s[1622]! } + public var SettingsSearch_Synonyms_EditProfile_Bio: String { return self._s[1623]! } + public var ChatList_UndoArchiveMultipleTitle: String { return self._s[1624]! } + public var Passport_Identity_NativeNameGenericTitle: String { return self._s[1625]! } public func Login_EmailPhoneBody(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1619]!, self._r[1619]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1626]!, self._r[1626]!, [_0, _1, _2]) } - public var Login_PhoneNumberHelp: String { return self._s[1620]! } - public var LastSeen_ALongTimeAgo: String { return self._s[1621]! } - public var Channel_AdminLog_CanPinMessages: String { return self._s[1622]! } - public var ChannelIntro_CreateChannel: String { return self._s[1623]! } - public var Conversation_UnreadMessages: String { return self._s[1624]! } - public var SettingsSearch_Synonyms_Stickers_ArchivedPacks: String { return self._s[1625]! } - public var Channel_AdminLog_EmptyText: String { return self._s[1626]! } - public var Theme_Context_Apply: String { return self._s[1627]! } - public var Notification_GroupActivated: String { return self._s[1628]! } - public var NotificationSettings_ContactJoinedInfo: String { return self._s[1629]! } - public var Wallet_Intro_CreateWallet: String { return self._s[1630]! } + public var Login_PhoneNumberHelp: String { return self._s[1627]! } + public var LastSeen_ALongTimeAgo: String { return self._s[1628]! } + public var Channel_AdminLog_CanPinMessages: String { return self._s[1629]! } + public var ChannelIntro_CreateChannel: String { return self._s[1630]! } + public var Conversation_UnreadMessages: String { return self._s[1631]! } + public var SettingsSearch_Synonyms_Stickers_ArchivedPacks: String { return self._s[1632]! } + public var Channel_AdminLog_EmptyText: String { return self._s[1633]! } + public var Theme_Context_Apply: String { return self._s[1634]! } + public var Notification_GroupActivated: String { return self._s[1635]! } + public var NotificationSettings_ContactJoinedInfo: String { return self._s[1636]! } + public var Wallet_Intro_CreateWallet: String { return self._s[1637]! } public func Notification_PinnedContactMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1631]!, self._r[1631]!, [_0]) - } - public func DownloadingStatus(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1632]!, self._r[1632]!, [_0, _1]) - } - public var GroupInfo_ConvertToSupergroup: String { return self._s[1634]! } - public func PrivacyPolicy_AgeVerificationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1635]!, self._r[1635]!, [_0]) - } - public var Undo_DeletedChannel: String { return self._s[1636]! } - public var CallFeedback_AddComment: String { return self._s[1637]! } - public func Conversation_OpenBotLinkAllowMessages(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1638]!, self._r[1638]!, [_0]) } - public var Document_TargetConfirmationFormat: String { return self._s[1639]! } + public func DownloadingStatus(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1639]!, self._r[1639]!, [_0, _1]) + } + public var GroupInfo_ConvertToSupergroup: String { return self._s[1641]! } + public func PrivacyPolicy_AgeVerificationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1642]!, self._r[1642]!, [_0]) + } + public var Undo_DeletedChannel: String { return self._s[1643]! } + public var CallFeedback_AddComment: String { return self._s[1644]! } + public func Conversation_OpenBotLinkAllowMessages(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1645]!, self._r[1645]!, [_0]) + } + public var Document_TargetConfirmationFormat: String { return self._s[1646]! } public func Call_StatusOngoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1640]!, self._r[1640]!, [_0]) + return formatWithArgumentRanges(self._s[1647]!, self._r[1647]!, [_0]) } - public var LogoutOptions_SetPasscodeTitle: String { return self._s[1641]! } + public var LogoutOptions_SetPasscodeTitle: String { return self._s[1648]! } public func PUSH_CHAT_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String, _ _4: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1642]!, self._r[1642]!, [_1, _2, _3, _4]) + return formatWithArgumentRanges(self._s[1649]!, self._r[1649]!, [_1, _2, _3, _4]) } - public var Wallet_SecureStorageChanged_PasscodeText: String { return self._s[1643]! } - public var Theme_ErrorNotFound: String { return self._s[1644]! } - public var Contacts_SortByName: String { return self._s[1645]! } - public var SettingsSearch_Synonyms_Privacy_Forwards: String { return self._s[1646]! } + public var Wallet_SecureStorageChanged_PasscodeText: String { return self._s[1650]! } + public var Theme_ErrorNotFound: String { return self._s[1651]! } + public var Contacts_SortByName: String { return self._s[1652]! } + public var SettingsSearch_Synonyms_Privacy_Forwards: String { return self._s[1653]! } public func CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1648]!, self._r[1648]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1655]!, self._r[1655]!, [_1, _2, _3]) } - public var Notification_Exceptions_RemoveFromExceptions: String { return self._s[1649]! } - public var ScheduledMessages_EditTime: String { return self._s[1650]! } - public var Conversation_ClearSelfHistory: String { return self._s[1651]! } - public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[1652]! } - public var PasscodeSettings_DoNotMatch: String { return self._s[1653]! } - public var Stickers_SuggestNone: String { return self._s[1654]! } - public var ChatSettings_Cache: String { return self._s[1655]! } - public var Settings_SaveIncomingPhotos: String { return self._s[1656]! } - public var Media_ShareThisPhoto: String { return self._s[1657]! } - public var Chat_SlowmodeTooltipPending: String { return self._s[1658]! } - public var InfoPlist_NSContactsUsageDescription: String { return self._s[1659]! } - public var Conversation_ContextMenuCopyLink: String { return self._s[1660]! } - public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[1661]! } - public var SettingsSearch_Synonyms_Stickers_Masks: String { return self._s[1662]! } - public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[1663]! } + public var Notification_Exceptions_RemoveFromExceptions: String { return self._s[1656]! } + public var ScheduledMessages_EditTime: String { return self._s[1657]! } + public var Conversation_ClearSelfHistory: String { return self._s[1658]! } + public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[1659]! } + public var PasscodeSettings_DoNotMatch: String { return self._s[1660]! } + public var Stickers_SuggestNone: String { return self._s[1661]! } + public var ChatSettings_Cache: String { return self._s[1662]! } + public var Settings_SaveIncomingPhotos: String { return self._s[1663]! } + public var Media_ShareThisPhoto: String { return self._s[1664]! } + public var Chat_SlowmodeTooltipPending: String { return self._s[1665]! } + public var InfoPlist_NSContactsUsageDescription: String { return self._s[1666]! } + public var Conversation_ContextMenuCopyLink: String { return self._s[1667]! } + public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[1668]! } + public var SettingsSearch_Synonyms_Stickers_Masks: String { return self._s[1669]! } + public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[1670]! } public func Wallet_SecureStorageReset_BiometryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1664]!, self._r[1664]!, [_0]) + return formatWithArgumentRanges(self._s[1671]!, self._r[1671]!, [_0]) } - public var Permissions_CellularDataTitle_v0: String { return self._s[1665]! } - public var WallpaperSearch_ColorWhite: String { return self._s[1667]! } - public var Channel_AdminLog_DefaultRestrictionsUpdated: String { return self._s[1668]! } - public var Conversation_ErrorInaccessibleMessage: String { return self._s[1669]! } - public var Map_OpenIn: String { return self._s[1670]! } + public var Permissions_CellularDataTitle_v0: String { return self._s[1672]! } + public var WallpaperSearch_ColorWhite: String { return self._s[1674]! } + public var Channel_AdminLog_DefaultRestrictionsUpdated: String { return self._s[1675]! } + public var Conversation_ErrorInaccessibleMessage: String { return self._s[1676]! } + public var Map_OpenIn: String { return self._s[1677]! } public func PUSH_PHONE_CALL_MISSED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1673]!, self._r[1673]!, [_1]) + return formatWithArgumentRanges(self._s[1680]!, self._r[1680]!, [_1]) } public func ChannelInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1674]!, self._r[1674]!, [_0]) + return formatWithArgumentRanges(self._s[1681]!, self._r[1681]!, [_0]) } - public var GroupInfo_Permissions_SlowmodeHeader: String { return self._s[1675]! } - public var MessagePoll_LabelClosed: String { return self._s[1676]! } - public var GroupPermission_PermissionGloballyDisabled: String { return self._s[1678]! } - public var Wallet_Send_SendAnyway: String { return self._s[1679]! } - public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1680]! } - public var UserInfo_FirstNamePlaceholder: String { return self._s[1681]! } - public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1682]! } - public var Login_SelectCountry_Title: String { return self._s[1683]! } - public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1684]! } + public var GroupInfo_Permissions_SlowmodeHeader: String { return self._s[1682]! } + public var MessagePoll_LabelClosed: String { return self._s[1683]! } + public var GroupPermission_PermissionGloballyDisabled: String { return self._s[1685]! } + public var Wallet_Send_SendAnyway: String { return self._s[1686]! } + public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1687]! } + public var UserInfo_FirstNamePlaceholder: String { return self._s[1688]! } + public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1689]! } + public var Login_SelectCountry_Title: String { return self._s[1690]! } + public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1691]! } public func Conversation_OpenBotLinkLogin(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1685]!, self._r[1685]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1692]!, self._r[1692]!, [_1, _2]) } - public var Channel_AdminLog_ChangeInfo: String { return self._s[1686]! } - public var Watch_Suggestion_BRB: String { return self._s[1687]! } - public var Passport_Identity_EditIdentityCard: String { return self._s[1688]! } - public var Contacts_PermissionsTitle: String { return self._s[1689]! } - public var Conversation_RestrictedInline: String { return self._s[1690]! } - public var StickerPack_ViewPack: String { return self._s[1692]! } - public var Wallet_UnknownError: String { return self._s[1693]! } + public var Channel_AdminLog_ChangeInfo: String { return self._s[1693]! } + public var Watch_Suggestion_BRB: String { return self._s[1694]! } + public var Passport_Identity_EditIdentityCard: String { return self._s[1695]! } + public var Contacts_PermissionsTitle: String { return self._s[1696]! } + public var Conversation_RestrictedInline: String { return self._s[1697]! } + public var StickerPack_ViewPack: String { return self._s[1699]! } + public var Wallet_UnknownError: String { return self._s[1700]! } public func Update_AppVersion(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1694]!, self._r[1694]!, [_0]) + return formatWithArgumentRanges(self._s[1701]!, self._r[1701]!, [_0]) } - public var Compose_NewChannel: String { return self._s[1696]! } - public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[1699]! } - public var Conversation_ReportSpamGroupConfirmation: String { return self._s[1701]! } - public var Channel_Info_Stickers: String { return self._s[1702]! } - public var AutoNightTheme_PreferredTheme: String { return self._s[1703]! } - public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1704]! } - public var Passport_DeletePersonalDetails: String { return self._s[1705]! } - public var LogoutOptions_AddAccountTitle: String { return self._s[1706]! } - public var Channel_DiscussionGroupInfo: String { return self._s[1707]! } - public var Group_EditAdmin_RankOwnerPlaceholder: String { return self._s[1708]! } - public var Conversation_SearchNoResults: String { return self._s[1710]! } - public var MessagePoll_LabelAnonymous: String { return self._s[1711]! } - public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1712]! } - public var Login_Code: String { return self._s[1713]! } - public var EditTheme_Create_BottomInfo: String { return self._s[1714]! } - public var Watch_Suggestion_WhatsUp: String { return self._s[1715]! } - public var Weekday_ShortThursday: String { return self._s[1716]! } - public var Resolve_ErrorNotFound: String { return self._s[1718]! } - public var LastSeen_Offline: String { return self._s[1719]! } - public var PeopleNearby_NoMembers: String { return self._s[1720]! } - public var GroupPermission_AddMembersNotAvailable: String { return self._s[1721]! } - public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1722]! } - public var GroupInfo_Title: String { return self._s[1724]! } - public var NotificationsSound_Note: String { return self._s[1725]! } - public var Conversation_EditingMessagePanelTitle: String { return self._s[1726]! } - public var Watch_Message_Poll: String { return self._s[1727]! } - public var Privacy_Calls: String { return self._s[1728]! } + public var Compose_NewChannel: String { return self._s[1703]! } + public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[1706]! } + public var Conversation_ReportSpamGroupConfirmation: String { return self._s[1708]! } + public var Channel_Info_Stickers: String { return self._s[1709]! } + public var AutoNightTheme_PreferredTheme: String { return self._s[1710]! } + public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1711]! } + public var Passport_DeletePersonalDetails: String { return self._s[1712]! } + public var LogoutOptions_AddAccountTitle: String { return self._s[1713]! } + public var Channel_DiscussionGroupInfo: String { return self._s[1714]! } + public var Group_EditAdmin_RankOwnerPlaceholder: String { return self._s[1715]! } + public var Conversation_SearchNoResults: String { return self._s[1717]! } + public var Wallet_Configuration_ApplyErrorTextURLInvalid: String { return self._s[1718]! } + public var MessagePoll_LabelAnonymous: String { return self._s[1719]! } + public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1720]! } + public var Login_Code: String { return self._s[1721]! } + public var EditTheme_Create_BottomInfo: String { return self._s[1722]! } + public var Watch_Suggestion_WhatsUp: String { return self._s[1723]! } + public var Weekday_ShortThursday: String { return self._s[1724]! } + public var Resolve_ErrorNotFound: String { return self._s[1726]! } + public var LastSeen_Offline: String { return self._s[1727]! } + public var PeopleNearby_NoMembers: String { return self._s[1728]! } + public var GroupPermission_AddMembersNotAvailable: String { return self._s[1729]! } + public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1730]! } + public var GroupInfo_Title: String { return self._s[1732]! } + public var NotificationsSound_Note: String { return self._s[1733]! } + public var Conversation_EditingMessagePanelTitle: String { return self._s[1734]! } + public var Watch_Message_Poll: String { return self._s[1735]! } + public var Privacy_Calls: String { return self._s[1736]! } public func Channel_AdminLog_MessageRankUsername(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1729]!, self._r[1729]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1737]!, self._r[1737]!, [_1, _2, _3]) } - public var Month_ShortAugust: String { return self._s[1730]! } - public var TwoStepAuth_SetPasswordHelp: String { return self._s[1731]! } - public var Notifications_Reset: String { return self._s[1732]! } - public var Conversation_Pin: String { return self._s[1733]! } - public var Passport_Language_lv: String { return self._s[1734]! } - public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1735]! } - public var BlockedUsers_Info: String { return self._s[1736]! } - public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[1738]! } - public var Watch_Conversation_Unblock: String { return self._s[1740]! } + public var Month_ShortAugust: String { return self._s[1738]! } + public var TwoStepAuth_SetPasswordHelp: String { return self._s[1739]! } + public var Notifications_Reset: String { return self._s[1740]! } + public var Conversation_Pin: String { return self._s[1741]! } + public var Passport_Language_lv: String { return self._s[1742]! } + public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1743]! } + public var BlockedUsers_Info: String { return self._s[1744]! } + public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[1746]! } + public var Watch_Conversation_Unblock: String { return self._s[1748]! } public func Time_MonthOfYear_m9(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1741]!, self._r[1741]!, [_0]) + return formatWithArgumentRanges(self._s[1749]!, self._r[1749]!, [_0]) } - public var CloudStorage_Title: String { return self._s[1742]! } - public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1743]! } + public var CloudStorage_Title: String { return self._s[1750]! } + public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1751]! } public func NetworkUsageSettings_WifiUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1744]!, self._r[1744]!, [_0]) + return formatWithArgumentRanges(self._s[1752]!, self._r[1752]!, [_0]) } - public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1745]! } - public var Watch_Suggestion_OnMyWay: String { return self._s[1746]! } - public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1747]! } - public var Passport_Address_EditBankStatement: String { return self._s[1748]! } + public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1753]! } + public var Watch_Suggestion_OnMyWay: String { return self._s[1754]! } + public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1755]! } + public var Passport_Address_EditBankStatement: String { return self._s[1756]! } public func Channel_AdminLog_MessageChangedUnlinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1749]!, self._r[1749]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1757]!, self._r[1757]!, [_1, _2]) } - public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1750]! } - public var ShareMenu_Comment: String { return self._s[1751]! } - public var Permissions_ContactsTitle_v0: String { return self._s[1752]! } - public var Notifications_PermissionsTitle: String { return self._s[1753]! } - public var GroupPermission_NoSendLinks: String { return self._s[1754]! } - public var Privacy_Forwards_NeverAllow_Title: String { return self._s[1755]! } - public var Wallet_SecureStorageChanged_ImportWallet: String { return self._s[1756]! } - public var Settings_Support: String { return self._s[1757]! } - public var Notifications_ChannelNotificationsSound: String { return self._s[1758]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[1759]! } - public var Privacy_Forwards_Preview: String { return self._s[1760]! } - public var GroupPermission_ApplyAlertAction: String { return self._s[1761]! } - public var Watch_Stickers_StickerPacks: String { return self._s[1762]! } - public var Common_Select: String { return self._s[1764]! } - public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1765]! } - public var WallpaperSearch_ColorGray: String { return self._s[1768]! } - public var TwoFactorSetup_Password_PlaceholderPassword: String { return self._s[1769]! } - public var TwoFactorSetup_Hint_SkipAction: String { return self._s[1770]! } - public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1771]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1772]! } - public var Appearance_PreviewReplyAuthor: String { return self._s[1773]! } - public var TwoStepAuth_RecoveryTitle: String { return self._s[1774]! } - public var Widget_AuthRequired: String { return self._s[1775]! } - public var Camera_FlashOn: String { return self._s[1776]! } - public var Conversation_ContextMenuLookUp: String { return self._s[1777]! } - public var Channel_Stickers_NotFoundHelp: String { return self._s[1778]! } - public var Watch_Suggestion_OK: String { return self._s[1779]! } + public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1758]! } + public var ShareMenu_Comment: String { return self._s[1759]! } + public var Permissions_ContactsTitle_v0: String { return self._s[1760]! } + public var Notifications_PermissionsTitle: String { return self._s[1761]! } + public var GroupPermission_NoSendLinks: String { return self._s[1762]! } + public var Privacy_Forwards_NeverAllow_Title: String { return self._s[1763]! } + public var Wallet_SecureStorageChanged_ImportWallet: String { return self._s[1764]! } + public var Settings_Support: String { return self._s[1765]! } + public var Notifications_ChannelNotificationsSound: String { return self._s[1766]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[1767]! } + public var Privacy_Forwards_Preview: String { return self._s[1768]! } + public var GroupPermission_ApplyAlertAction: String { return self._s[1769]! } + public var Watch_Stickers_StickerPacks: String { return self._s[1770]! } + public var Common_Select: String { return self._s[1772]! } + public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1773]! } + public var WallpaperSearch_ColorGray: String { return self._s[1776]! } + public var TwoFactorSetup_Password_PlaceholderPassword: String { return self._s[1777]! } + public var TwoFactorSetup_Hint_SkipAction: String { return self._s[1778]! } + public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1779]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1780]! } + public var Appearance_PreviewReplyAuthor: String { return self._s[1781]! } + public var TwoStepAuth_RecoveryTitle: String { return self._s[1782]! } + public var Widget_AuthRequired: String { return self._s[1783]! } + public var Camera_FlashOn: String { return self._s[1784]! } + public var Conversation_ContextMenuLookUp: String { return self._s[1785]! } + public var Channel_Stickers_NotFoundHelp: String { return self._s[1786]! } + public var Watch_Suggestion_OK: String { return self._s[1787]! } public func Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1781]!, self._r[1781]!, [_0]) + return formatWithArgumentRanges(self._s[1789]!, self._r[1789]!, [_0]) } public func Notification_PinnedLiveLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1783]!, self._r[1783]!, [_0]) + return formatWithArgumentRanges(self._s[1791]!, self._r[1791]!, [_0]) } - public var TextFormat_Strikethrough: String { return self._s[1784]! } - public var DialogList_AdLabel: String { return self._s[1785]! } - public var WatchRemote_NotificationText: String { return self._s[1786]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[1787]! } - public var Conversation_ReportSpam: String { return self._s[1788]! } - public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[1789]! } - public var Settings_LogoutConfirmationTitle: String { return self._s[1791]! } - public var PhoneLabel_Title: String { return self._s[1792]! } - public var Passport_Address_EditRentalAgreement: String { return self._s[1793]! } - public var Settings_ChangePhoneNumber: String { return self._s[1794]! } - public var Notifications_ExceptionsTitle: String { return self._s[1795]! } - public var Notifications_AlertTones: String { return self._s[1796]! } - public var Call_ReportIncludeLogDescription: String { return self._s[1797]! } - public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[1798]! } - public var AutoDownloadSettings_PrivateChats: String { return self._s[1799]! } - public var VoiceOver_Chat_Photo: String { return self._s[1801]! } - public var TwoStepAuth_AddHintTitle: String { return self._s[1802]! } - public var ReportPeer_ReasonOther: String { return self._s[1803]! } - public var ChatList_Context_JoinChannel: String { return self._s[1804]! } - public var KeyCommand_ScrollDown: String { return self._s[1806]! } - public var Conversation_ScheduleMessage_Title: String { return self._s[1807]! } + public var TextFormat_Strikethrough: String { return self._s[1792]! } + public var DialogList_AdLabel: String { return self._s[1793]! } + public var WatchRemote_NotificationText: String { return self._s[1794]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[1795]! } + public var Conversation_ReportSpam: String { return self._s[1796]! } + public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[1797]! } + public var Settings_LogoutConfirmationTitle: String { return self._s[1799]! } + public var PhoneLabel_Title: String { return self._s[1800]! } + public var Passport_Address_EditRentalAgreement: String { return self._s[1801]! } + public var Settings_ChangePhoneNumber: String { return self._s[1802]! } + public var Notifications_ExceptionsTitle: String { return self._s[1803]! } + public var Notifications_AlertTones: String { return self._s[1804]! } + public var Call_ReportIncludeLogDescription: String { return self._s[1805]! } + public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[1806]! } + public var AutoDownloadSettings_PrivateChats: String { return self._s[1807]! } + public var VoiceOver_Chat_Photo: String { return self._s[1809]! } + public var TwoStepAuth_AddHintTitle: String { return self._s[1810]! } + public var ReportPeer_ReasonOther: String { return self._s[1811]! } + public var ChatList_Context_JoinChannel: String { return self._s[1812]! } + public var KeyCommand_ScrollDown: String { return self._s[1814]! } + public var Conversation_ScheduleMessage_Title: String { return self._s[1815]! } public func Login_BannedPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1808]!, self._r[1808]!, [_0]) + return formatWithArgumentRanges(self._s[1816]!, self._r[1816]!, [_0]) } - public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1809]! } - public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1810]! } - public var AuthSessions_LogOut: String { return self._s[1811]! } - public var Passport_Identity_TypeInternalPassport: String { return self._s[1812]! } - public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1813]! } - public var Passport_Phone_Title: String { return self._s[1814]! } - public var ContactList_Context_StartSecretChat: String { return self._s[1815]! } - public var Settings_PhoneNumber: String { return self._s[1816]! } + public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1817]! } + public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1818]! } + public var AuthSessions_LogOut: String { return self._s[1819]! } + public var Passport_Identity_TypeInternalPassport: String { return self._s[1820]! } + public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1821]! } + public var Passport_Phone_Title: String { return self._s[1822]! } + public var ContactList_Context_StartSecretChat: String { return self._s[1823]! } + public var Settings_PhoneNumber: String { return self._s[1824]! } public func Conversation_ScheduleMessage_SendToday(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1817]!, self._r[1817]!, [_0]) + return formatWithArgumentRanges(self._s[1825]!, self._r[1825]!, [_0]) } - public var NotificationsSound_Alert: String { return self._s[1818]! } - public var Wallet_SecureStorageChanged_CreateWallet: String { return self._s[1819]! } - public var WebSearch_SearchNoResults: String { return self._s[1820]! } - public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[1822]! } - public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1823]! } - public var SettingsSearch_Synonyms_Passport: String { return self._s[1824]! } - public var PhotoEditor_CurvesTool: String { return self._s[1825]! } - public var Checkout_PaymentMethod: String { return self._s[1827]! } + public var NotificationsSound_Alert: String { return self._s[1826]! } + public var Wallet_SecureStorageChanged_CreateWallet: String { return self._s[1827]! } + public var WebSearch_SearchNoResults: String { return self._s[1828]! } + public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[1830]! } + public var Wallet_Configuration_SourceInfo: String { return self._s[1831]! } + public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1832]! } + public var SettingsSearch_Synonyms_Passport: String { return self._s[1833]! } + public var PhotoEditor_CurvesTool: String { return self._s[1834]! } + public var Checkout_PaymentMethod: String { return self._s[1836]! } public func PUSH_CHAT_ADD_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1828]!, self._r[1828]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1837]!, self._r[1837]!, [_1, _2]) } - public var Contacts_AccessDeniedError: String { return self._s[1829]! } - public var Camera_PhotoMode: String { return self._s[1832]! } - public var EditTheme_Expand_Preview_IncomingText: String { return self._s[1833]! } - public var Passport_Address_AddUtilityBill: String { return self._s[1835]! } - public var CallSettings_OnMobile: String { return self._s[1836]! } - public var Tour_Text2: String { return self._s[1837]! } + public var Contacts_AccessDeniedError: String { return self._s[1838]! } + public var Camera_PhotoMode: String { return self._s[1841]! } + public var EditTheme_Expand_Preview_IncomingText: String { return self._s[1842]! } + public var Passport_Address_AddUtilityBill: String { return self._s[1844]! } + public var CallSettings_OnMobile: String { return self._s[1845]! } + public var Tour_Text2: String { return self._s[1846]! } public func PUSH_CHAT_MESSAGE_ROUND(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1838]!, self._r[1838]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1847]!, self._r[1847]!, [_1, _2]) } - public var DialogList_EncryptionProcessing: String { return self._s[1840]! } - public var Permissions_Skip: String { return self._s[1841]! } - public var Wallet_Words_NotDoneOk: String { return self._s[1842]! } - public var SecretImage_Title: String { return self._s[1843]! } - public var Watch_MessageView_Title: String { return self._s[1844]! } - public var Channel_DiscussionGroupAdd: String { return self._s[1845]! } - public var AttachmentMenu_Poll: String { return self._s[1846]! } + public var DialogList_EncryptionProcessing: String { return self._s[1849]! } + public var Permissions_Skip: String { return self._s[1850]! } + public var Wallet_Words_NotDoneOk: String { return self._s[1851]! } + public var SecretImage_Title: String { return self._s[1852]! } + public var Watch_MessageView_Title: String { return self._s[1853]! } + public var Channel_DiscussionGroupAdd: String { return self._s[1854]! } + public var AttachmentMenu_Poll: String { return self._s[1855]! } public func Notification_GroupInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1847]!, self._r[1847]!, [_0]) + return formatWithArgumentRanges(self._s[1856]!, self._r[1856]!, [_0]) } public func Channel_DiscussionGroup_PrivateChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1848]!, self._r[1848]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1857]!, self._r[1857]!, [_1, _2]) } - public var Notification_CallCanceled: String { return self._s[1849]! } - public var WallpaperPreview_Title: String { return self._s[1850]! } - public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1851]! } - public var Settings_ProxyConnecting: String { return self._s[1852]! } - public var Settings_CheckPhoneNumberText: String { return self._s[1854]! } - public var VoiceOver_Chat_YourVideo: String { return self._s[1855]! } - public var Wallet_Intro_Title: String { return self._s[1856]! } - public var TwoFactorSetup_Password_Action: String { return self._s[1857]! } - public var Profile_MessageLifetime5s: String { return self._s[1858]! } - public var Username_InvalidCharacters: String { return self._s[1859]! } - public var VoiceOver_Media_PlaybackRateFast: String { return self._s[1860]! } - public var ScheduledMessages_ClearAll: String { return self._s[1861]! } - public var WallpaperPreview_CropBottomText: String { return self._s[1862]! } - public var AutoDownloadSettings_LimitBySize: String { return self._s[1863]! } - public var Settings_AddAccount: String { return self._s[1864]! } - public var Notification_CreatedChannel: String { return self._s[1867]! } + public var Notification_CallCanceled: String { return self._s[1858]! } + public var WallpaperPreview_Title: String { return self._s[1859]! } + public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1860]! } + public var Settings_ProxyConnecting: String { return self._s[1861]! } + public var Settings_CheckPhoneNumberText: String { return self._s[1863]! } + public var VoiceOver_Chat_YourVideo: String { return self._s[1864]! } + public var Wallet_Intro_Title: String { return self._s[1865]! } + public var TwoFactorSetup_Password_Action: String { return self._s[1866]! } + public var Profile_MessageLifetime5s: String { return self._s[1867]! } + public var Username_InvalidCharacters: String { return self._s[1868]! } + public var VoiceOver_Media_PlaybackRateFast: String { return self._s[1869]! } + public var ScheduledMessages_ClearAll: String { return self._s[1870]! } + public var WallpaperPreview_CropBottomText: String { return self._s[1871]! } + public var AutoDownloadSettings_LimitBySize: String { return self._s[1872]! } + public var Settings_AddAccount: String { return self._s[1873]! } + public var Notification_CreatedChannel: String { return self._s[1876]! } public func PUSH_CHAT_DELETE_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1868]!, self._r[1868]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1877]!, self._r[1877]!, [_1, _2, _3]) } - public var Passcode_AppLockedAlert: String { return self._s[1870]! } - public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[1871]! } - public var VoiceOver_Media_PlaybackStop: String { return self._s[1872]! } - public var Contacts_TopSection: String { return self._s[1873]! } - public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[1874]! } + public var Passcode_AppLockedAlert: String { return self._s[1879]! } + public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[1880]! } + public var VoiceOver_Media_PlaybackStop: String { return self._s[1881]! } + public var Contacts_TopSection: String { return self._s[1882]! } + public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[1883]! } public func Conversation_SetReminder_RemindOn(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1875]!, self._r[1875]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1884]!, self._r[1884]!, [_0, _1]) } - public var Wallet_Info_Receive: String { return self._s[1876]! } - public var Wallet_Completed_ViewWallet: String { return self._s[1877]! } + public var Wallet_Info_Receive: String { return self._s[1885]! } + public var Wallet_Completed_ViewWallet: String { return self._s[1886]! } public func Time_MonthOfYear_m6(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1878]!, self._r[1878]!, [_0]) + return formatWithArgumentRanges(self._s[1887]!, self._r[1887]!, [_0]) } - public var ReportPeer_ReasonSpam: String { return self._s[1879]! } - public var UserInfo_TapToCall: String { return self._s[1880]! } - public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[1882]! } - public var AutoDownloadSettings_DataUsageCustom: String { return self._s[1883]! } - public var Common_Search: String { return self._s[1884]! } - public var ScheduledMessages_EmptyPlaceholder: String { return self._s[1885]! } + public var ReportPeer_ReasonSpam: String { return self._s[1888]! } + public var UserInfo_TapToCall: String { return self._s[1889]! } + public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[1891]! } + public var AutoDownloadSettings_DataUsageCustom: String { return self._s[1892]! } + public var Common_Search: String { return self._s[1893]! } + public var ScheduledMessages_EmptyPlaceholder: String { return self._s[1894]! } public func Channel_AdminLog_MessageChangedGroupGeoLocation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1886]!, self._r[1886]!, [_0]) + return formatWithArgumentRanges(self._s[1895]!, self._r[1895]!, [_0]) } - public var Wallet_Month_ShortJuly: String { return self._s[1887]! } - public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1888]! } - public var Message_InvoiceLabel: String { return self._s[1889]! } - public var Conversation_InputTextPlaceholder: String { return self._s[1890]! } - public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1891]! } + public var Wallet_Month_ShortJuly: String { return self._s[1896]! } + public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1897]! } + public var Message_InvoiceLabel: String { return self._s[1898]! } + public var Conversation_InputTextPlaceholder: String { return self._s[1899]! } + public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1900]! } public func Passport_Address_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1892]!, self._r[1892]!, [_0]) + return formatWithArgumentRanges(self._s[1901]!, self._r[1901]!, [_0]) } - public var Conversation_Info: String { return self._s[1893]! } - public var Login_InfoDeletePhoto: String { return self._s[1894]! } - public var Passport_Language_vi: String { return self._s[1896]! } - public var UserInfo_ScamUserWarning: String { return self._s[1897]! } - public var Conversation_Search: String { return self._s[1898]! } - public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1900]! } - public var ReportPeer_ReasonPornography: String { return self._s[1901]! } - public var AutoDownloadSettings_PhotosTitle: String { return self._s[1902]! } - public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1903]! } - public var Map_LiveLocationGroupDescription: String { return self._s[1904]! } - public var Channel_Setup_TypeHeader: String { return self._s[1905]! } - public var AuthSessions_LoggedIn: String { return self._s[1906]! } - public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[1907]! } - public var Login_SmsRequestState3: String { return self._s[1908]! } - public var Passport_Address_EditUtilityBill: String { return self._s[1909]! } - public var Appearance_ReduceMotionInfo: String { return self._s[1910]! } - public var Join_ChannelsTooMuch: String { return self._s[1911]! } - public var Channel_Edit_LinkItem: String { return self._s[1912]! } - public var Privacy_Calls_P2PNever: String { return self._s[1913]! } - public var Conversation_AddToReadingList: String { return self._s[1915]! } - public var Share_MultipleMessagesDisabled: String { return self._s[1916]! } - public var Message_Animation: String { return self._s[1917]! } - public var Conversation_DefaultRestrictedMedia: String { return self._s[1918]! } - public var Map_Unknown: String { return self._s[1919]! } - public var AutoDownloadSettings_LastDelimeter: String { return self._s[1920]! } + public var Conversation_Info: String { return self._s[1902]! } + public var Login_InfoDeletePhoto: String { return self._s[1903]! } + public var Passport_Language_vi: String { return self._s[1905]! } + public var UserInfo_ScamUserWarning: String { return self._s[1906]! } + public var Conversation_Search: String { return self._s[1907]! } + public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1909]! } + public var ReportPeer_ReasonPornography: String { return self._s[1910]! } + public var AutoDownloadSettings_PhotosTitle: String { return self._s[1911]! } + public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1912]! } + public var Map_LiveLocationGroupDescription: String { return self._s[1913]! } + public var Channel_Setup_TypeHeader: String { return self._s[1914]! } + public var AuthSessions_LoggedIn: String { return self._s[1915]! } + public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[1916]! } + public var Login_SmsRequestState3: String { return self._s[1917]! } + public var Passport_Address_EditUtilityBill: String { return self._s[1918]! } + public var Appearance_ReduceMotionInfo: String { return self._s[1919]! } + public var Join_ChannelsTooMuch: String { return self._s[1920]! } + public var Channel_Edit_LinkItem: String { return self._s[1921]! } + public var Privacy_Calls_P2PNever: String { return self._s[1922]! } + public var Conversation_AddToReadingList: String { return self._s[1924]! } + public var Share_MultipleMessagesDisabled: String { return self._s[1925]! } + public var Message_Animation: String { return self._s[1926]! } + public var Conversation_DefaultRestrictedMedia: String { return self._s[1927]! } + public var Map_Unknown: String { return self._s[1928]! } + public var AutoDownloadSettings_LastDelimeter: String { return self._s[1929]! } public func PUSH_PINNED_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1921]!, self._r[1921]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1930]!, self._r[1930]!, [_1, _2]) } public func Passport_FieldOneOf_Or(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1922]!, self._r[1922]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1931]!, self._r[1931]!, [_1, _2]) } - public var Call_StatusRequesting: String { return self._s[1923]! } - public var Conversation_SecretChatContextBotAlert: String { return self._s[1924]! } - public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1925]! } + public var Call_StatusRequesting: String { return self._s[1932]! } + public var Conversation_SecretChatContextBotAlert: String { return self._s[1933]! } + public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1934]! } public func PUSH_CHAT_MESSAGE_DOC(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1926]!, self._r[1926]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1935]!, self._r[1935]!, [_1, _2]) } public func Notification_PinnedLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1927]!, self._r[1927]!, [_0]) + return formatWithArgumentRanges(self._s[1936]!, self._r[1936]!, [_0]) } - public var Update_Skip: String { return self._s[1928]! } - public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[1929]! } - public var Message_PinnedPollMessage: String { return self._s[1930]! } - public var BlockedUsers_Title: String { return self._s[1931]! } + public var Update_Skip: String { return self._s[1937]! } + public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[1938]! } + public var Message_PinnedPollMessage: String { return self._s[1939]! } + public var BlockedUsers_Title: String { return self._s[1940]! } public func PUSH_CHANNEL_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1932]!, self._r[1932]!, [_1]) + return formatWithArgumentRanges(self._s[1941]!, self._r[1941]!, [_1]) } - public var Username_CheckingUsername: String { return self._s[1933]! } - public var NotificationsSound_Bell: String { return self._s[1934]! } - public var Conversation_SendMessageErrorFlood: String { return self._s[1935]! } - public var Weekday_Monday: String { return self._s[1936]! } - public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[1937]! } - public var ChannelMembers_ChannelAdminsTitle: String { return self._s[1938]! } - public var ChatSettings_Groups: String { return self._s[1939]! } + public var Username_CheckingUsername: String { return self._s[1942]! } + public var NotificationsSound_Bell: String { return self._s[1943]! } + public var Conversation_SendMessageErrorFlood: String { return self._s[1944]! } + public var Weekday_Monday: String { return self._s[1945]! } + public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[1946]! } + public var ChannelMembers_ChannelAdminsTitle: String { return self._s[1947]! } + public var ChatSettings_Groups: String { return self._s[1948]! } public func Conversation_SetReminder_RemindTomorrow(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1940]!, self._r[1940]!, [_0]) + return formatWithArgumentRanges(self._s[1949]!, self._r[1949]!, [_0]) } - public var Your_card_was_declined: String { return self._s[1941]! } - public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1943]! } - public var Wallet_Month_ShortApril: String { return self._s[1944]! } - public var ChatList_Unmute: String { return self._s[1945]! } - public var PhotoEditor_CurvesAll: String { return self._s[1946]! } - public var Weekday_ShortTuesday: String { return self._s[1947]! } - public var DialogList_Read: String { return self._s[1948]! } - public var Appearance_AppIconClassic: String { return self._s[1949]! } - public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[1950]! } - public var Passport_Identity_Gender: String { return self._s[1951]! } + public var Your_card_was_declined: String { return self._s[1950]! } + public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1952]! } + public var Wallet_Month_ShortApril: String { return self._s[1953]! } + public var ChatList_Unmute: String { return self._s[1954]! } + public var PhotoEditor_CurvesAll: String { return self._s[1955]! } + public var Weekday_ShortTuesday: String { return self._s[1956]! } + public var DialogList_Read: String { return self._s[1957]! } + public var Appearance_AppIconClassic: String { return self._s[1958]! } + public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[1959]! } + public var Passport_Identity_Gender: String { return self._s[1960]! } public func Target_ShareGameConfirmationPrivate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1952]!, self._r[1952]!, [_0]) + return formatWithArgumentRanges(self._s[1961]!, self._r[1961]!, [_0]) } - public var Target_SelectGroup: String { return self._s[1953]! } + public var Target_SelectGroup: String { return self._s[1962]! } public func DialogList_EncryptedChatStartedIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1955]!, self._r[1955]!, [_0]) + return formatWithArgumentRanges(self._s[1964]!, self._r[1964]!, [_0]) } - public var Passport_Language_en: String { return self._s[1956]! } - public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[1957]! } - public var Channel_Username_CreatePublicLinkHelp: String { return self._s[1958]! } - public var Login_CancelPhoneVerificationContinue: String { return self._s[1959]! } - public var ScheduledMessages_SendNow: String { return self._s[1960]! } - public var Checkout_NewCard_PaymentCard: String { return self._s[1962]! } - public var Login_InfoHelp: String { return self._s[1963]! } - public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1964]! } - public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[1965]! } + public var Passport_Language_en: String { return self._s[1965]! } + public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[1966]! } + public var Channel_Username_CreatePublicLinkHelp: String { return self._s[1967]! } + public var Login_CancelPhoneVerificationContinue: String { return self._s[1968]! } + public var ScheduledMessages_SendNow: String { return self._s[1969]! } + public var Checkout_NewCard_PaymentCard: String { return self._s[1971]! } + public var Login_InfoHelp: String { return self._s[1972]! } + public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1973]! } + public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[1974]! } public func Channel_AdminLog_MessageChangedLinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1966]!, self._r[1966]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1975]!, self._r[1975]!, [_1, _2]) } - public var SocksProxySetup_AddProxy: String { return self._s[1969]! } - public var CreatePoll_Title: String { return self._s[1970]! } - public var Conversation_ViewTheme: String { return self._s[1971]! } - public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[1972]! } - public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[1973]! } - public var TwoFactorSetup_Intro_Text: String { return self._s[1974]! } - public var UserInfo_GroupsInCommon: String { return self._s[1975]! } - public var TelegramWallet_Intro_TermsUrl: String { return self._s[1976]! } - public var Call_AudioRouteHide: String { return self._s[1977]! } + public var SocksProxySetup_AddProxy: String { return self._s[1978]! } + public var CreatePoll_Title: String { return self._s[1979]! } + public var Conversation_ViewTheme: String { return self._s[1980]! } + public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[1981]! } + public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[1982]! } + public var TwoFactorSetup_Intro_Text: String { return self._s[1983]! } + public var UserInfo_GroupsInCommon: String { return self._s[1984]! } + public var TelegramWallet_Intro_TermsUrl: String { return self._s[1985]! } + public var Call_AudioRouteHide: String { return self._s[1986]! } public func Wallet_Info_TransactionDateHeader(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1979]!, self._r[1979]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1988]!, self._r[1988]!, [_1, _2]) } - public var ContactInfo_PhoneLabelMobile: String { return self._s[1980]! } + public var ContactInfo_PhoneLabelMobile: String { return self._s[1989]! } public func ChatList_LeaveGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1981]!, self._r[1981]!, [_0]) + return formatWithArgumentRanges(self._s[1990]!, self._r[1990]!, [_0]) } - public var TextFormat_Bold: String { return self._s[1982]! } - public var FastTwoStepSetup_EmailSection: String { return self._s[1983]! } - public var Notifications_Title: String { return self._s[1984]! } - public var Group_Username_InvalidTooShort: String { return self._s[1985]! } - public var Channel_ErrorAddTooMuch: String { return self._s[1986]! } + public var TextFormat_Bold: String { return self._s[1991]! } + public var FastTwoStepSetup_EmailSection: String { return self._s[1992]! } + public var Notifications_Title: String { return self._s[1993]! } + public var Group_Username_InvalidTooShort: String { return self._s[1994]! } + public var Channel_ErrorAddTooMuch: String { return self._s[1995]! } public func DialogList_MultipleTypingSuffix(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1987]!, self._r[1987]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1996]!, self._r[1996]!, ["\(_0)"]) } - public var VoiceOver_DiscardPreparedContent: String { return self._s[1989]! } - public var Stickers_SuggestAdded: String { return self._s[1990]! } - public var Login_CountryCode: String { return self._s[1991]! } - public var ChatSettings_AutoPlayVideos: String { return self._s[1992]! } - public var Map_GetDirections: String { return self._s[1993]! } - public var Wallet_Receive_ShareInvoiceUrl: String { return self._s[1994]! } - public var Login_PhoneFloodError: String { return self._s[1995]! } + public var VoiceOver_DiscardPreparedContent: String { return self._s[1998]! } + public var Stickers_SuggestAdded: String { return self._s[1999]! } + public var Login_CountryCode: String { return self._s[2000]! } + public var ChatSettings_AutoPlayVideos: String { return self._s[2001]! } + public var Map_GetDirections: String { return self._s[2002]! } + public var Wallet_Receive_ShareInvoiceUrl: String { return self._s[2003]! } + public var Login_PhoneFloodError: String { return self._s[2004]! } public func Time_MonthOfYear_m3(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1996]!, self._r[1996]!, [_0]) + return formatWithArgumentRanges(self._s[2005]!, self._r[2005]!, [_0]) } public func Wallet_Time_PreciseDate_m10(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1997]!, self._r[1997]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2006]!, self._r[2006]!, [_1, _2, _3]) } - public var Settings_SetUsername: String { return self._s[1999]! } - public var Group_Location_ChangeLocation: String { return self._s[2000]! } - public var Notification_GroupInviterSelf: String { return self._s[2001]! } - public var InstantPage_TapToOpenLink: String { return self._s[2002]! } + public var Settings_SetUsername: String { return self._s[2008]! } + public var Group_Location_ChangeLocation: String { return self._s[2009]! } + public var Notification_GroupInviterSelf: String { return self._s[2010]! } + public var InstantPage_TapToOpenLink: String { return self._s[2011]! } public func Notification_ChannelInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2003]!, self._r[2003]!, [_0]) + return formatWithArgumentRanges(self._s[2012]!, self._r[2012]!, [_0]) } - public var Watch_Suggestion_TalkLater: String { return self._s[2004]! } - public var SecretChat_Title: String { return self._s[2005]! } - public var Group_UpgradeNoticeText1: String { return self._s[2006]! } - public var AuthSessions_Title: String { return self._s[2007]! } + public var Watch_Suggestion_TalkLater: String { return self._s[2013]! } + public var SecretChat_Title: String { return self._s[2014]! } + public var Group_UpgradeNoticeText1: String { return self._s[2015]! } + public var AuthSessions_Title: String { return self._s[2016]! } public func TextFormat_AddLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2008]!, self._r[2008]!, [_0]) + return formatWithArgumentRanges(self._s[2017]!, self._r[2017]!, [_0]) } - public var PhotoEditor_CropAuto: String { return self._s[2009]! } - public var Channel_About_Title: String { return self._s[2010]! } - public var FastTwoStepSetup_EmailHelp: String { return self._s[2011]! } + public var PhotoEditor_CropAuto: String { return self._s[2018]! } + public var Channel_About_Title: String { return self._s[2019]! } + public var FastTwoStepSetup_EmailHelp: String { return self._s[2020]! } public func Conversation_Bytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2013]!, self._r[2013]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[2022]!, self._r[2022]!, ["\(_0)"]) } - public var VoiceOver_MessageContextReport: String { return self._s[2014]! } - public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[2016]! } - public var Group_Setup_HistoryVisibleHelp: String { return self._s[2017]! } + public var VoiceOver_MessageContextReport: String { return self._s[2023]! } + public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[2025]! } + public var Group_Setup_HistoryVisibleHelp: String { return self._s[2026]! } public func PUSH_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2018]!, self._r[2018]!, [_1]) + return formatWithArgumentRanges(self._s[2027]!, self._r[2027]!, [_1]) } public func SharedMedia_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2020]!, self._r[2020]!, [_0]) + return formatWithArgumentRanges(self._s[2029]!, self._r[2029]!, [_0]) } public func TwoStepAuth_RecoveryEmailUnavailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2021]!, self._r[2021]!, [_0]) + return formatWithArgumentRanges(self._s[2030]!, self._r[2030]!, [_0]) } - public var Privacy_PaymentsClearInfoHelp: String { return self._s[2022]! } - public var Presence_online: String { return self._s[2025]! } - public var PasscodeSettings_Title: String { return self._s[2026]! } - public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[2027]! } - public var Web_OpenExternal: String { return self._s[2028]! } - public var AutoDownloadSettings_AutoDownload: String { return self._s[2030]! } - public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[2031]! } - public var LocalGroup_Title: String { return self._s[2032]! } + public var Privacy_PaymentsClearInfoHelp: String { return self._s[2031]! } + public var Presence_online: String { return self._s[2034]! } + public var PasscodeSettings_Title: String { return self._s[2035]! } + public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[2036]! } + public var Web_OpenExternal: String { return self._s[2037]! } + public var AutoDownloadSettings_AutoDownload: String { return self._s[2039]! } + public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[2040]! } + public var LocalGroup_Title: String { return self._s[2041]! } public func AutoNightTheme_AutomaticHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2033]!, self._r[2033]!, [_0]) + return formatWithArgumentRanges(self._s[2042]!, self._r[2042]!, [_0]) } - public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[2034]! } - public var Map_YouAreHere: String { return self._s[2035]! } + public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[2043]! } + public var Map_YouAreHere: String { return self._s[2044]! } public func AuthSessions_Message(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2036]!, self._r[2036]!, [_0]) - } - public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2037]!, self._r[2037]!, [_0]) - } - public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[2038]! } - public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[2039]! } - public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2040]!, self._r[2040]!, [_0]) - } - public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2041]!, self._r[2041]!, [_0]) - } - public var SocksProxySetup_Username: String { return self._s[2042]! } - public var Bot_Start: String { return self._s[2043]! } - public func Channel_AdminLog_EmptyFilterQueryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2044]!, self._r[2044]!, [_0]) - } - public func Channel_AdminLog_MessagePinned(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2045]!, self._r[2045]!, [_0]) } - public var Contacts_SortByPresence: String { return self._s[2046]! } - public var AccentColor_Title: String { return self._s[2048]! } - public var Conversation_DiscardVoiceMessageTitle: String { return self._s[2049]! } + public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2046]!, self._r[2046]!, [_0]) + } + public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[2047]! } + public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[2048]! } + public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2049]!, self._r[2049]!, [_0]) + } + public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2050]!, self._r[2050]!, [_0]) + } + public var SocksProxySetup_Username: String { return self._s[2051]! } + public var Bot_Start: String { return self._s[2052]! } + public func Channel_AdminLog_EmptyFilterQueryText(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2053]!, self._r[2053]!, [_0]) + } + public func Channel_AdminLog_MessagePinned(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2054]!, self._r[2054]!, [_0]) + } + public var Contacts_SortByPresence: String { return self._s[2055]! } + public var AccentColor_Title: String { return self._s[2057]! } + public var Conversation_DiscardVoiceMessageTitle: String { return self._s[2058]! } public func PUSH_CHAT_CREATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2050]!, self._r[2050]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2059]!, self._r[2059]!, [_1, _2]) } public func PrivacySettings_LastSeenContactsMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2051]!, self._r[2051]!, [_0]) + return formatWithArgumentRanges(self._s[2060]!, self._r[2060]!, [_0]) } public func Channel_AdminLog_MessageChangedLinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2052]!, self._r[2052]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2061]!, self._r[2061]!, [_1, _2]) } - public var Passport_Email_EnterOtherEmail: String { return self._s[2053]! } - public var Login_InfoAvatarPhoto: String { return self._s[2054]! } - public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[2055]! } - public var Tour_Title4: String { return self._s[2056]! } - public var Passport_Identity_Translation: String { return self._s[2057]! } - public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[2058]! } - public var Login_TermsOfServiceLabel: String { return self._s[2060]! } - public var Passport_Language_it: String { return self._s[2061]! } - public var KeyCommand_JumpToNextUnreadChat: String { return self._s[2062]! } - public var Passport_Identity_SelfieHelp: String { return self._s[2063]! } - public var Conversation_ClearAll: String { return self._s[2065]! } - public var Wallet_Send_UninitializedText: String { return self._s[2067]! } - public var Channel_OwnershipTransfer_Title: String { return self._s[2068]! } - public var TwoStepAuth_FloodError: String { return self._s[2069]! } + public var Passport_Email_EnterOtherEmail: String { return self._s[2062]! } + public var Login_InfoAvatarPhoto: String { return self._s[2063]! } + public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[2064]! } + public var Tour_Title4: String { return self._s[2065]! } + public var Passport_Identity_Translation: String { return self._s[2066]! } + public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[2067]! } + public var Login_TermsOfServiceLabel: String { return self._s[2069]! } + public var Passport_Language_it: String { return self._s[2070]! } + public var KeyCommand_JumpToNextUnreadChat: String { return self._s[2071]! } + public var Passport_Identity_SelfieHelp: String { return self._s[2072]! } + public var Conversation_ClearAll: String { return self._s[2074]! } + public var Wallet_Send_UninitializedText: String { return self._s[2076]! } + public var Channel_OwnershipTransfer_Title: String { return self._s[2077]! } + public var TwoStepAuth_FloodError: String { return self._s[2078]! } public func PUSH_CHANNEL_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2070]!, self._r[2070]!, [_1]) + return formatWithArgumentRanges(self._s[2079]!, self._r[2079]!, [_1]) } - public var Paint_Delete: String { return self._s[2071]! } + public var Paint_Delete: String { return self._s[2080]! } public func Wallet_Sent_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2072]!, self._r[2072]!, [_0]) + return formatWithArgumentRanges(self._s[2081]!, self._r[2081]!, [_0]) } - public var Privacy_AddNewPeer: String { return self._s[2073]! } + public var Privacy_AddNewPeer: String { return self._s[2082]! } public func Channel_AdminLog_MessageRank(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2074]!, self._r[2074]!, [_1]) + return formatWithArgumentRanges(self._s[2083]!, self._r[2083]!, [_1]) } - public var LogoutOptions_SetPasscodeText: String { return self._s[2075]! } + public var LogoutOptions_SetPasscodeText: String { return self._s[2084]! } public func Passport_AcceptHelp(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2076]!, self._r[2076]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2085]!, self._r[2085]!, [_1, _2]) } - public var Message_PinnedAudioMessage: String { return self._s[2077]! } + public var Message_PinnedAudioMessage: String { return self._s[2086]! } public func Watch_Time_ShortTodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2078]!, self._r[2078]!, [_0]) + return formatWithArgumentRanges(self._s[2087]!, self._r[2087]!, [_0]) } - public var Notification_Mute1hMin: String { return self._s[2079]! } - public var Notifications_GroupNotificationsSound: String { return self._s[2080]! } - public var Wallet_Month_GenNovember: String { return self._s[2081]! } - public var SocksProxySetup_ShareProxyList: String { return self._s[2082]! } - public var Conversation_MessageEditedLabel: String { return self._s[2083]! } + public var Notification_Mute1hMin: String { return self._s[2088]! } + public var Notifications_GroupNotificationsSound: String { return self._s[2089]! } + public var Wallet_Month_GenNovember: String { return self._s[2090]! } + public var SocksProxySetup_ShareProxyList: String { return self._s[2091]! } + public var Conversation_MessageEditedLabel: String { return self._s[2092]! } public func ClearCache_Success(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2084]!, self._r[2084]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2093]!, self._r[2093]!, [_0, _1]) } - public var Notification_Exceptions_AlwaysOff: String { return self._s[2085]! } - public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[2086]! } + public var Notification_Exceptions_AlwaysOff: String { return self._s[2094]! } + public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[2095]! } public func Channel_AdminLog_MessageAdmin(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2087]!, self._r[2087]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[2096]!, self._r[2096]!, [_0, _1, _2]) } - public var NetworkUsageSettings_ResetStats: String { return self._s[2088]! } + public var NetworkUsageSettings_ResetStats: String { return self._s[2097]! } public func PUSH_MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2089]!, self._r[2089]!, [_1]) + return formatWithArgumentRanges(self._s[2098]!, self._r[2098]!, [_1]) } - public var AccessDenied_LocationTracking: String { return self._s[2090]! } - public var Month_GenOctober: String { return self._s[2091]! } - public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[2092]! } - public var EnterPasscode_EnterPasscode: String { return self._s[2093]! } - public var MediaPicker_TimerTooltip: String { return self._s[2095]! } - public var SharedMedia_TitleAll: String { return self._s[2096]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[2099]! } - public var Conversation_RestrictedMedia: String { return self._s[2100]! } - public var AccessDenied_PhotosRestricted: String { return self._s[2101]! } - public var Privacy_Forwards_WhoCanForward: String { return self._s[2103]! } - public var ChangePhoneNumberCode_Called: String { return self._s[2104]! } + public var AccessDenied_LocationTracking: String { return self._s[2099]! } + public var Month_GenOctober: String { return self._s[2100]! } + public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[2101]! } + public var EnterPasscode_EnterPasscode: String { return self._s[2102]! } + public var MediaPicker_TimerTooltip: String { return self._s[2104]! } + public var SharedMedia_TitleAll: String { return self._s[2105]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[2108]! } + public var Conversation_RestrictedMedia: String { return self._s[2109]! } + public var AccessDenied_PhotosRestricted: String { return self._s[2110]! } + public var Privacy_Forwards_WhoCanForward: String { return self._s[2112]! } + public var ChangePhoneNumberCode_Called: String { return self._s[2113]! } public func Notification_PinnedDocumentMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2105]!, self._r[2105]!, [_0]) + return formatWithArgumentRanges(self._s[2114]!, self._r[2114]!, [_0]) } - public var Conversation_SavedMessages: String { return self._s[2108]! } - public var Your_cards_expiration_month_is_invalid: String { return self._s[2110]! } - public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[2111]! } + public var Conversation_SavedMessages: String { return self._s[2117]! } + public var Your_cards_expiration_month_is_invalid: String { return self._s[2119]! } + public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[2120]! } public func Target_ShareGameConfirmationGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2113]!, self._r[2113]!, [_0]) + return formatWithArgumentRanges(self._s[2122]!, self._r[2122]!, [_0]) } - public var VoiceOver_Chat_YourMessage: String { return self._s[2114]! } + public var VoiceOver_Chat_YourMessage: String { return self._s[2123]! } public func VoiceOver_Chat_Title(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2115]!, self._r[2115]!, [_0]) + return formatWithArgumentRanges(self._s[2124]!, self._r[2124]!, [_0]) } - public var ReportPeer_AlertSuccess: String { return self._s[2116]! } - public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[2117]! } + public var ReportPeer_AlertSuccess: String { return self._s[2125]! } + public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[2126]! } public func InstantPage_RelatedArticleAuthorAndDateTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2118]!, self._r[2118]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2127]!, self._r[2127]!, [_1, _2]) } - public var Checkout_PasswordEntry_Title: String { return self._s[2119]! } - public var PhotoEditor_FadeTool: String { return self._s[2120]! } - public var Privacy_ContactsReset: String { return self._s[2121]! } + public var Checkout_PasswordEntry_Title: String { return self._s[2128]! } + public var PhotoEditor_FadeTool: String { return self._s[2129]! } + public var Privacy_ContactsReset: String { return self._s[2130]! } public func Channel_AdminLog_MessageRestrictedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2123]!, self._r[2123]!, [_0]) + return formatWithArgumentRanges(self._s[2132]!, self._r[2132]!, [_0]) } - public var Message_PinnedVideoMessage: String { return self._s[2124]! } - public var ChatList_Mute: String { return self._s[2125]! } + public var Message_PinnedVideoMessage: String { return self._s[2133]! } + public var ChatList_Mute: String { return self._s[2134]! } public func Wallet_Time_PreciseDate_m5(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2126]!, self._r[2126]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2135]!, self._r[2135]!, [_1, _2, _3]) } - public var Permissions_CellularDataText_v0: String { return self._s[2127]! } - public var ShareMenu_SelectChats: String { return self._s[2130]! } - public var ChatList_Context_Unarchive: String { return self._s[2131]! } - public var MusicPlayer_VoiceNote: String { return self._s[2132]! } - public var Conversation_RestrictedText: String { return self._s[2133]! } - public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[2134]! } - public var Wallet_Month_GenApril: String { return self._s[2135]! } - public var Wallet_Month_ShortMarch: String { return self._s[2136]! } - public var TwoStepAuth_DisableSuccess: String { return self._s[2137]! } - public var Cache_Videos: String { return self._s[2138]! } - public var PrivacySettings_PhoneNumber: String { return self._s[2139]! } - public var Wallet_Month_GenFebruary: String { return self._s[2140]! } - public var FeatureDisabled_Oops: String { return self._s[2142]! } - public var Passport_Address_PostcodePlaceholder: String { return self._s[2143]! } + public var Permissions_CellularDataText_v0: String { return self._s[2136]! } + public var ShareMenu_SelectChats: String { return self._s[2139]! } + public var ChatList_Context_Unarchive: String { return self._s[2140]! } + public var MusicPlayer_VoiceNote: String { return self._s[2141]! } + public var Conversation_RestrictedText: String { return self._s[2142]! } + public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[2143]! } + public var Wallet_Month_GenApril: String { return self._s[2144]! } + public var Wallet_Month_ShortMarch: String { return self._s[2145]! } + public var TwoStepAuth_DisableSuccess: String { return self._s[2146]! } + public var Cache_Videos: String { return self._s[2147]! } + public var PrivacySettings_PhoneNumber: String { return self._s[2148]! } + public var Wallet_Month_GenFebruary: String { return self._s[2149]! } + public var FeatureDisabled_Oops: String { return self._s[2151]! } + public var Passport_Address_PostcodePlaceholder: String { return self._s[2152]! } public func AddContact_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2144]!, self._r[2144]!, [_0]) + return formatWithArgumentRanges(self._s[2153]!, self._r[2153]!, [_0]) } - public var Stickers_GroupStickersHelp: String { return self._s[2145]! } - public var GroupPermission_NoSendPolls: String { return self._s[2146]! } - public var Wallet_Qr_ScanCode: String { return self._s[2147]! } - public var Message_VideoExpired: String { return self._s[2149]! } - public var Notifications_Badge: String { return self._s[2150]! } - public var GroupInfo_GroupHistoryVisible: String { return self._s[2151]! } - public var Wallet_Receive_AddressCopied: String { return self._s[2152]! } - public var CreatePoll_OptionPlaceholder: String { return self._s[2153]! } - public var Username_InvalidTooShort: String { return self._s[2154]! } - public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[2155]! } - public var Channel_AdminLog_PinMessages: String { return self._s[2156]! } - public var ArchivedChats_IntroTitle3: String { return self._s[2157]! } + public var Stickers_GroupStickersHelp: String { return self._s[2154]! } + public var GroupPermission_NoSendPolls: String { return self._s[2155]! } + public var Wallet_Qr_ScanCode: String { return self._s[2156]! } + public var Message_VideoExpired: String { return self._s[2158]! } + public var Notifications_Badge: String { return self._s[2159]! } + public var GroupInfo_GroupHistoryVisible: String { return self._s[2160]! } + public var Wallet_Receive_AddressCopied: String { return self._s[2161]! } + public var CreatePoll_OptionPlaceholder: String { return self._s[2162]! } + public var Username_InvalidTooShort: String { return self._s[2163]! } + public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[2164]! } + public var Channel_AdminLog_PinMessages: String { return self._s[2165]! } + public var ArchivedChats_IntroTitle3: String { return self._s[2166]! } public func Notification_MessageLifetimeRemoved(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2158]!, self._r[2158]!, [_1]) + return formatWithArgumentRanges(self._s[2167]!, self._r[2167]!, [_1]) } - public var Permissions_SiriAllowInSettings_v0: String { return self._s[2159]! } - public var Conversation_DefaultRestrictedText: String { return self._s[2160]! } - public var SharedMedia_CategoryDocs: String { return self._s[2163]! } + public var Permissions_SiriAllowInSettings_v0: String { return self._s[2168]! } + public var Conversation_DefaultRestrictedText: String { return self._s[2169]! } + public var SharedMedia_CategoryDocs: String { return self._s[2172]! } public func PUSH_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2164]!, self._r[2164]!, [_1]) + return formatWithArgumentRanges(self._s[2173]!, self._r[2173]!, [_1]) } - public var Wallet_Send_UninitializedTitle: String { return self._s[2165]! } - public var Privacy_Forwards_NeverLink: String { return self._s[2167]! } + public var Wallet_Send_UninitializedTitle: String { return self._s[2174]! } + public var Privacy_Forwards_NeverLink: String { return self._s[2176]! } public func Notification_MessageLifetimeChangedOutgoing(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2168]!, self._r[2168]!, [_1]) + return formatWithArgumentRanges(self._s[2177]!, self._r[2177]!, [_1]) } - public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[2169]! } + public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[2178]! } public func Time_MonthOfYear_m12(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2170]!, self._r[2170]!, [_0]) + return formatWithArgumentRanges(self._s[2179]!, self._r[2179]!, [_0]) } - public var ChatSettings_PrivateChats: String { return self._s[2171]! } - public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[2172]! } - public var Conversation_PrivateMessageLinkCopied: String { return self._s[2173]! } - public var Channel_UpdatePhotoItem: String { return self._s[2174]! } - public var GroupInfo_LeftStatus: String { return self._s[2175]! } - public var Watch_MessageView_Forward: String { return self._s[2177]! } - public var ReportPeer_ReasonChildAbuse: String { return self._s[2178]! } - public var Cache_ClearEmpty: String { return self._s[2180]! } - public var Localization_LanguageName: String { return self._s[2181]! } - public var WebSearch_GIFs: String { return self._s[2182]! } - public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[2183]! } - public var Username_InvalidStartsWithNumber: String { return self._s[2184]! } - public var Common_Back: String { return self._s[2185]! } - public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[2186]! } - public var Wallet_Send_Send: String { return self._s[2187]! } + public var ChatSettings_PrivateChats: String { return self._s[2180]! } + public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[2181]! } + public var Conversation_PrivateMessageLinkCopied: String { return self._s[2182]! } + public var Channel_UpdatePhotoItem: String { return self._s[2183]! } + public var GroupInfo_LeftStatus: String { return self._s[2184]! } + public var Watch_MessageView_Forward: String { return self._s[2186]! } + public var ReportPeer_ReasonChildAbuse: String { return self._s[2187]! } + public var Cache_ClearEmpty: String { return self._s[2189]! } + public var Localization_LanguageName: String { return self._s[2190]! } + public var WebSearch_GIFs: String { return self._s[2191]! } + public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[2192]! } + public var Username_InvalidStartsWithNumber: String { return self._s[2193]! } + public var Common_Back: String { return self._s[2194]! } + public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[2195]! } + public var Wallet_Send_Send: String { return self._s[2196]! } public func PUSH_CHANNEL_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2188]!, self._r[2188]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2197]!, self._r[2197]!, [_1, _2]) } - public var Wallet_Info_RefreshErrorTitle: String { return self._s[2189]! } - public var Wallet_Month_GenJune: String { return self._s[2190]! } - public var Passport_Email_Help: String { return self._s[2191]! } - public var Watch_Conversation_Reply: String { return self._s[2193]! } - public var Conversation_EditingMessageMediaChange: String { return self._s[2195]! } - public var Passport_Identity_IssueDatePlaceholder: String { return self._s[2196]! } - public var Channel_BanUser_Unban: String { return self._s[2198]! } - public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[2199]! } - public var Group_Username_CreatePublicLinkHelp: String { return self._s[2200]! } - public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[2202]! } - public var Wallet_Send_AddressHeader: String { return self._s[2203]! } - public var Passport_Identity_Name: String { return self._s[2204]! } + public var Wallet_Info_RefreshErrorTitle: String { return self._s[2198]! } + public var Wallet_Month_GenJune: String { return self._s[2199]! } + public var Passport_Email_Help: String { return self._s[2200]! } + public var Watch_Conversation_Reply: String { return self._s[2202]! } + public var Conversation_EditingMessageMediaChange: String { return self._s[2204]! } + public var Passport_Identity_IssueDatePlaceholder: String { return self._s[2205]! } + public var Channel_BanUser_Unban: String { return self._s[2207]! } + public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[2208]! } + public var Group_Username_CreatePublicLinkHelp: String { return self._s[2209]! } + public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[2211]! } + public var Wallet_Send_AddressHeader: String { return self._s[2212]! } + public var Passport_Identity_Name: String { return self._s[2213]! } public func Channel_DiscussionGroup_HeaderGroupSet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2205]!, self._r[2205]!, [_0]) + return formatWithArgumentRanges(self._s[2214]!, self._r[2214]!, [_0]) } - public var GroupRemoved_ViewUserInfo: String { return self._s[2206]! } - public var Conversation_BlockUser: String { return self._s[2207]! } - public var Month_GenJanuary: String { return self._s[2208]! } - public var ChatSettings_TextSize: String { return self._s[2209]! } - public var Notification_PassportValuePhone: String { return self._s[2210]! } - public var Passport_Language_ne: String { return self._s[2211]! } - public var Notification_CallBack: String { return self._s[2212]! } - public var Wallet_SecureStorageReset_BiometryTouchId: String { return self._s[2213]! } - public var TwoStepAuth_EmailHelp: String { return self._s[2214]! } + public var GroupRemoved_ViewUserInfo: String { return self._s[2215]! } + public var Conversation_BlockUser: String { return self._s[2216]! } + public var Month_GenJanuary: String { return self._s[2217]! } + public var ChatSettings_TextSize: String { return self._s[2218]! } + public var Notification_PassportValuePhone: String { return self._s[2219]! } + public var Passport_Language_ne: String { return self._s[2220]! } + public var Notification_CallBack: String { return self._s[2221]! } + public var Wallet_SecureStorageReset_BiometryTouchId: String { return self._s[2222]! } + public var TwoStepAuth_EmailHelp: String { return self._s[2223]! } public func Time_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2215]!, self._r[2215]!, [_0]) + return formatWithArgumentRanges(self._s[2224]!, self._r[2224]!, [_0]) } - public var Channel_Info_Management: String { return self._s[2216]! } - public var Passport_FieldIdentityUploadHelp: String { return self._s[2217]! } - public var Stickers_FrequentlyUsed: String { return self._s[2218]! } - public var Channel_BanUser_PermissionSendMessages: String { return self._s[2219]! } - public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[2221]! } + public var Channel_Info_Management: String { return self._s[2225]! } + public var Passport_FieldIdentityUploadHelp: String { return self._s[2226]! } + public var Stickers_FrequentlyUsed: String { return self._s[2227]! } + public var Channel_BanUser_PermissionSendMessages: String { return self._s[2228]! } + public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[2230]! } public func LOCAL_CHANNEL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2222]!, self._r[2222]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[2231]!, self._r[2231]!, [_1, "\(_2)"]) } - public var TwoFactorSetup_Password_Title: String { return self._s[2223]! } - public var Passport_Address_EditResidentialAddress: String { return self._s[2224]! } - public var PrivacyPolicy_DeclineTitle: String { return self._s[2225]! } - public var CreatePoll_TextHeader: String { return self._s[2226]! } + public var TwoFactorSetup_Password_Title: String { return self._s[2232]! } + public var Passport_Address_EditResidentialAddress: String { return self._s[2233]! } + public var PrivacyPolicy_DeclineTitle: String { return self._s[2234]! } + public var CreatePoll_TextHeader: String { return self._s[2235]! } public func Checkout_SavePasswordTimeoutAndTouchId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2227]!, self._r[2227]!, [_0]) + return formatWithArgumentRanges(self._s[2236]!, self._r[2236]!, [_0]) } - public var PhotoEditor_QualityMedium: String { return self._s[2228]! } - public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[2229]! } - public var Conversation_StatusKickedFromChannel: String { return self._s[2231]! } - public var CheckoutInfo_ReceiverInfoName: String { return self._s[2232]! } - public var Group_ErrorSendRestrictedStickers: String { return self._s[2233]! } + public var PhotoEditor_QualityMedium: String { return self._s[2237]! } + public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[2238]! } + public var Conversation_StatusKickedFromChannel: String { return self._s[2240]! } + public var CheckoutInfo_ReceiverInfoName: String { return self._s[2241]! } + public var Group_ErrorSendRestrictedStickers: String { return self._s[2242]! } public func Conversation_RestrictedInlineTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2234]!, self._r[2234]!, [_0]) + return formatWithArgumentRanges(self._s[2243]!, self._r[2243]!, [_0]) } public func Channel_AdminLog_MessageTransferedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2235]!, self._r[2235]!, [_1]) + return formatWithArgumentRanges(self._s[2244]!, self._r[2244]!, [_1]) } - public var LogoutOptions_LogOutWalletInfo: String { return self._s[2236]! } - public var TwoFactorSetup_Email_SkipConfirmationTitle: String { return self._s[2237]! } - public var Conversation_LinkDialogOpen: String { return self._s[2239]! } - public var TwoFactorSetup_Hint_Title: String { return self._s[2240]! } - public var VoiceOver_Chat_PollNoVotes: String { return self._s[2241]! } - public var Settings_Username: String { return self._s[2243]! } - public var Conversation_Block: String { return self._s[2245]! } - public var Wallpaper_Wallpaper: String { return self._s[2246]! } - public var SocksProxySetup_UseProxy: String { return self._s[2248]! } - public var Wallet_Send_Confirmation: String { return self._s[2249]! } - public var EditTheme_UploadEditedTheme: String { return self._s[2250]! } - public var UserInfo_ShareMyContactInfo: String { return self._s[2251]! } - public var MessageTimer_Forever: String { return self._s[2252]! } - public var Privacy_Calls_WhoCanCallMe: String { return self._s[2253]! } - public var PhotoEditor_DiscardChanges: String { return self._s[2254]! } - public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[2255]! } - public var Passport_Language_da: String { return self._s[2256]! } - public var SocksProxySetup_PortPlaceholder: String { return self._s[2257]! } + public var LogoutOptions_LogOutWalletInfo: String { return self._s[2245]! } + public var TwoFactorSetup_Email_SkipConfirmationTitle: String { return self._s[2246]! } + public var Conversation_LinkDialogOpen: String { return self._s[2248]! } + public var TwoFactorSetup_Hint_Title: String { return self._s[2249]! } + public var VoiceOver_Chat_PollNoVotes: String { return self._s[2250]! } + public var Settings_Username: String { return self._s[2252]! } + public var Conversation_Block: String { return self._s[2254]! } + public var Wallpaper_Wallpaper: String { return self._s[2255]! } + public var SocksProxySetup_UseProxy: String { return self._s[2257]! } + public var Wallet_Send_Confirmation: String { return self._s[2258]! } + public var EditTheme_UploadEditedTheme: String { return self._s[2259]! } + public var UserInfo_ShareMyContactInfo: String { return self._s[2260]! } + public var MessageTimer_Forever: String { return self._s[2261]! } + public var Privacy_Calls_WhoCanCallMe: String { return self._s[2262]! } + public var PhotoEditor_DiscardChanges: String { return self._s[2263]! } + public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[2264]! } + public var Passport_Language_da: String { return self._s[2265]! } + public var SocksProxySetup_PortPlaceholder: String { return self._s[2266]! } public func SecretGIF_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2258]!, self._r[2258]!, [_0]) + return formatWithArgumentRanges(self._s[2267]!, self._r[2267]!, [_0]) } - public var Passport_Address_EditPassportRegistration: String { return self._s[2259]! } + public var Passport_Address_EditPassportRegistration: String { return self._s[2268]! } public func Channel_AdminLog_MessageChangedGroupAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2261]!, self._r[2261]!, [_0]) - } - public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[2263]! } - public var Conversation_SearchByName_Prefix: String { return self._s[2264]! } - public var Conversation_PinnedPoll: String { return self._s[2265]! } - public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[2266]! } - public func PUSH_ENCRYPTION_ACCEPT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2267]!, self._r[2267]!, [_1]) - } - public var WallpaperSearch_ColorPurple: String { return self._s[2268]! } - public var Cache_ByPeerHeader: String { return self._s[2269]! } - public func Conversation_EncryptedPlaceholderTitleIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2270]!, self._r[2270]!, [_0]) } - public var ChatSettings_AutoDownloadDocuments: String { return self._s[2271]! } - public var Appearance_ThemePreview_Chat_3_Text: String { return self._s[2274]! } - public var Wallet_Completed_Title: String { return self._s[2275]! } - public var Notification_PinnedMessage: String { return self._s[2276]! } - public var TwoFactorSetup_EmailVerification_Placeholder: String { return self._s[2277]! } - public var VoiceOver_Chat_RecordModeVideoMessage: String { return self._s[2279]! } - public var Contacts_SortBy: String { return self._s[2280]! } + public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[2272]! } + public var Conversation_SearchByName_Prefix: String { return self._s[2273]! } + public var Conversation_PinnedPoll: String { return self._s[2274]! } + public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[2275]! } + public func PUSH_ENCRYPTION_ACCEPT(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2276]!, self._r[2276]!, [_1]) + } + public var WallpaperSearch_ColorPurple: String { return self._s[2277]! } + public var Cache_ByPeerHeader: String { return self._s[2278]! } + public func Conversation_EncryptedPlaceholderTitleIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2279]!, self._r[2279]!, [_0]) + } + public var ChatSettings_AutoDownloadDocuments: String { return self._s[2280]! } + public var Appearance_ThemePreview_Chat_3_Text: String { return self._s[2283]! } + public var Wallet_Completed_Title: String { return self._s[2284]! } + public var Notification_PinnedMessage: String { return self._s[2285]! } + public var TwoFactorSetup_EmailVerification_Placeholder: String { return self._s[2286]! } + public var VoiceOver_Chat_RecordModeVideoMessage: String { return self._s[2288]! } + public var Contacts_SortBy: String { return self._s[2289]! } public func PUSH_CHANNEL_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2281]!, self._r[2281]!, [_1]) + return formatWithArgumentRanges(self._s[2290]!, self._r[2290]!, [_1]) } public func PUSH_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2283]!, self._r[2283]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2292]!, self._r[2292]!, [_1, _2]) } - public var Call_EncryptionKey_Title: String { return self._s[2284]! } - public var Watch_UserInfo_Service: String { return self._s[2285]! } - public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[2287]! } - public var Conversation_Unpin: String { return self._s[2289]! } - public var CancelResetAccount_Title: String { return self._s[2290]! } - public var Map_LiveLocationFor15Minutes: String { return self._s[2291]! } + public var Call_EncryptionKey_Title: String { return self._s[2293]! } + public var Watch_UserInfo_Service: String { return self._s[2294]! } + public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[2296]! } + public var Conversation_Unpin: String { return self._s[2298]! } + public var CancelResetAccount_Title: String { return self._s[2299]! } + public var Map_LiveLocationFor15Minutes: String { return self._s[2300]! } public func Time_PreciseDate_m8(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2293]!, self._r[2293]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2302]!, self._r[2302]!, [_1, _2, _3]) } - public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[2294]! } - public var CallSettings_Title: String { return self._s[2295]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[2296]! } - public var PasscodeSettings_EncryptDataHelp: String { return self._s[2298]! } - public var AutoDownloadSettings_Contacts: String { return self._s[2299]! } + public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[2303]! } + public var CallSettings_Title: String { return self._s[2304]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[2305]! } + public var PasscodeSettings_EncryptDataHelp: String { return self._s[2307]! } + public var AutoDownloadSettings_Contacts: String { return self._s[2308]! } public func Channel_AdminLog_MessageRankName(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2300]!, self._r[2300]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2309]!, self._r[2309]!, [_1, _2]) } - public var Passport_Identity_DocumentDetails: String { return self._s[2301]! } - public var LoginPassword_PasswordHelp: String { return self._s[2302]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[2303]! } - public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2304]! } - public var Checkout_TotalPaidAmount: String { return self._s[2305]! } + public var Passport_Identity_DocumentDetails: String { return self._s[2310]! } + public var LoginPassword_PasswordHelp: String { return self._s[2311]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[2312]! } + public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2313]! } + public var Checkout_TotalPaidAmount: String { return self._s[2314]! } public func FileSize_KB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2306]!, self._r[2306]!, [_0]) + return formatWithArgumentRanges(self._s[2315]!, self._r[2315]!, [_0]) } - public var PasscodeSettings_ChangePasscode: String { return self._s[2307]! } - public var Conversation_SecretLinkPreviewAlert: String { return self._s[2309]! } - public var Privacy_SecretChatsLinkPreviews: String { return self._s[2310]! } + public var PasscodeSettings_ChangePasscode: String { return self._s[2316]! } + public var Conversation_SecretLinkPreviewAlert: String { return self._s[2318]! } + public var Privacy_SecretChatsLinkPreviews: String { return self._s[2319]! } public func PUSH_CHANNEL_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2311]!, self._r[2311]!, [_1]) + return formatWithArgumentRanges(self._s[2320]!, self._r[2320]!, [_1]) } - public var VoiceOver_Chat_ReplyToYourMessage: String { return self._s[2312]! } - public var Contacts_InviteFriends: String { return self._s[2314]! } - public var Map_ChooseLocationTitle: String { return self._s[2315]! } - public var Conversation_StopPoll: String { return self._s[2317]! } + public var VoiceOver_Chat_ReplyToYourMessage: String { return self._s[2321]! } + public var Contacts_InviteFriends: String { return self._s[2323]! } + public var Map_ChooseLocationTitle: String { return self._s[2324]! } + public var Conversation_StopPoll: String { return self._s[2326]! } public func WebSearch_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2318]!, self._r[2318]!, [_0]) + return formatWithArgumentRanges(self._s[2327]!, self._r[2327]!, [_0]) } - public var Call_Camera: String { return self._s[2319]! } - public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2320]! } - public var AppWallet_Intro_Text: String { return self._s[2321]! } - public var Calls_RatingFeedback: String { return self._s[2322]! } - public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[2323]! } - public var Wallet_Alert_OK: String { return self._s[2324]! } - public var NotificationsSound_Pulse: String { return self._s[2325]! } - public var Watch_LastSeen_Lately: String { return self._s[2326]! } - public var ReportGroupLocation_Report: String { return self._s[2329]! } - public var Widget_NoUsers: String { return self._s[2330]! } - public var Conversation_UnvotePoll: String { return self._s[2331]! } - public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[2333]! } - public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[2334]! } - public var NotificationsSound_Circles: String { return self._s[2335]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[2338]! } - public var Wallet_Settings_DeleteWallet: String { return self._s[2339]! } - public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2340]! } - public var Proxy_TooltipUnavailable: String { return self._s[2341]! } - public var Passport_Identity_CountryPlaceholder: String { return self._s[2343]! } - public var GroupInfo_Permissions_SlowmodeInfo: String { return self._s[2345]! } - public var Conversation_FileDropbox: String { return self._s[2346]! } - public var Notifications_ExceptionsUnmuted: String { return self._s[2347]! } - public var Tour_Text3: String { return self._s[2349]! } - public var Login_ResetAccountProtected_Title: String { return self._s[2351]! } - public var GroupPermission_NoSendMessages: String { return self._s[2352]! } - public var WallpaperSearch_ColorTitle: String { return self._s[2353]! } - public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2354]! } + public var Call_Camera: String { return self._s[2328]! } + public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2329]! } + public var AppWallet_Intro_Text: String { return self._s[2330]! } + public var Calls_RatingFeedback: String { return self._s[2331]! } + public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[2332]! } + public var Wallet_Alert_OK: String { return self._s[2333]! } + public var NotificationsSound_Pulse: String { return self._s[2334]! } + public var Watch_LastSeen_Lately: String { return self._s[2335]! } + public var ReportGroupLocation_Report: String { return self._s[2338]! } + public var Widget_NoUsers: String { return self._s[2339]! } + public var Conversation_UnvotePoll: String { return self._s[2340]! } + public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[2342]! } + public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[2343]! } + public var NotificationsSound_Circles: String { return self._s[2344]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[2347]! } + public var Wallet_Settings_DeleteWallet: String { return self._s[2348]! } + public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2349]! } + public var Proxy_TooltipUnavailable: String { return self._s[2350]! } + public var Passport_Identity_CountryPlaceholder: String { return self._s[2352]! } + public var GroupInfo_Permissions_SlowmodeInfo: String { return self._s[2354]! } + public var Conversation_FileDropbox: String { return self._s[2355]! } + public var Notifications_ExceptionsUnmuted: String { return self._s[2356]! } + public var Tour_Text3: String { return self._s[2358]! } + public var Login_ResetAccountProtected_Title: String { return self._s[2360]! } + public var GroupPermission_NoSendMessages: String { return self._s[2361]! } + public var WallpaperSearch_ColorTitle: String { return self._s[2362]! } + public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2363]! } public func Conversation_LiveLocationYouAnd(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2356]!, self._r[2356]!, [_0]) + return formatWithArgumentRanges(self._s[2365]!, self._r[2365]!, [_0]) } - public var GroupInfo_AddParticipantTitle: String { return self._s[2357]! } - public var Checkout_ShippingOption_Title: String { return self._s[2358]! } - public var ChatSettings_AutoDownloadTitle: String { return self._s[2359]! } + public var GroupInfo_AddParticipantTitle: String { return self._s[2366]! } + public var Checkout_ShippingOption_Title: String { return self._s[2367]! } + public var ChatSettings_AutoDownloadTitle: String { return self._s[2368]! } public func DialogList_SingleTypingSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2360]!, self._r[2360]!, [_0]) + return formatWithArgumentRanges(self._s[2369]!, self._r[2369]!, [_0]) } public func ChatSettings_AutoDownloadSettings_TypeVideo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2361]!, self._r[2361]!, [_0]) + return formatWithArgumentRanges(self._s[2370]!, self._r[2370]!, [_0]) } - public var Channel_Management_LabelAdministrator: String { return self._s[2362]! } - public var EditTheme_FileReadError: String { return self._s[2363]! } - public var OwnershipTransfer_ComeBackLater: String { return self._s[2364]! } - public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[2365]! } - public var AutoDownloadSettings_Photos: String { return self._s[2367]! } - public var Appearance_PreviewIncomingText: String { return self._s[2368]! } - public var ChatList_Context_MarkAllAsRead: String { return self._s[2369]! } - public var ChannelInfo_ConfirmLeave: String { return self._s[2370]! } - public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[2371]! } - public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2372]! } - public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[2373]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[2374]! } - public var GroupInfo_SetGroupPhotoStop: String { return self._s[2375]! } - public var Notification_SecretChatScreenshot: String { return self._s[2376]! } - public var AccessDenied_Wallpapers: String { return self._s[2377]! } - public var ChatList_Context_Mute: String { return self._s[2379]! } - public var Passport_Address_City: String { return self._s[2380]! } - public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[2381]! } - public var Appearance_ThemeCarouselClassic: String { return self._s[2382]! } - public var SocksProxySetup_SecretPlaceholder: String { return self._s[2383]! } - public var AccessDenied_LocationDisabled: String { return self._s[2384]! } - public var Group_Location_Title: String { return self._s[2385]! } - public var SocksProxySetup_HostnamePlaceholder: String { return self._s[2387]! } - public var GroupInfo_Sound: String { return self._s[2388]! } - public var SettingsSearch_Synonyms_ChatSettings_OpenLinksIn: String { return self._s[2389]! } - public var ChannelInfo_ScamChannelWarning: String { return self._s[2390]! } - public var Stickers_RemoveFromFavorites: String { return self._s[2391]! } - public var Contacts_Title: String { return self._s[2392]! } - public var EditTheme_ThemeTemplateAlertText: String { return self._s[2393]! } - public var Passport_Language_fr: String { return self._s[2394]! } - public var TwoFactorSetup_EmailVerification_Action: String { return self._s[2395]! } - public var Notifications_ResetAllNotifications: String { return self._s[2396]! } - public var PrivacySettings_SecurityTitle: String { return self._s[2399]! } - public var Checkout_NewCard_Title: String { return self._s[2400]! } - public var Login_HaveNotReceivedCodeInternal: String { return self._s[2401]! } - public var Conversation_ForwardChats: String { return self._s[2402]! } - public var Wallet_SecureStorageReset_PasscodeText: String { return self._s[2404]! } - public var PasscodeSettings_4DigitCode: String { return self._s[2405]! } - public var Settings_FAQ: String { return self._s[2407]! } - public var AutoDownloadSettings_DocumentsTitle: String { return self._s[2408]! } - public var Conversation_ContextMenuForward: String { return self._s[2409]! } - public var VoiceOver_Chat_YourPhoto: String { return self._s[2412]! } - public var PrivacyPolicy_Title: String { return self._s[2415]! } - public var Notifications_TextTone: String { return self._s[2416]! } - public var Profile_CreateNewContact: String { return self._s[2417]! } - public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[2418]! } - public var TwoFactorSetup_EmailVerification_Title: String { return self._s[2420]! } - public var Call_Speaker: String { return self._s[2421]! } - public var AutoNightTheme_AutomaticSection: String { return self._s[2422]! } - public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2424]! } - public var Channel_Username_InvalidCharacters: String { return self._s[2425]! } + public var Channel_Management_LabelAdministrator: String { return self._s[2371]! } + public var EditTheme_FileReadError: String { return self._s[2372]! } + public var OwnershipTransfer_ComeBackLater: String { return self._s[2373]! } + public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[2374]! } + public var AutoDownloadSettings_Photos: String { return self._s[2376]! } + public var Appearance_PreviewIncomingText: String { return self._s[2377]! } + public var ChatList_Context_MarkAllAsRead: String { return self._s[2378]! } + public var ChannelInfo_ConfirmLeave: String { return self._s[2379]! } + public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[2380]! } + public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2381]! } + public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[2382]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[2383]! } + public var GroupInfo_SetGroupPhotoStop: String { return self._s[2384]! } + public var Notification_SecretChatScreenshot: String { return self._s[2385]! } + public var AccessDenied_Wallpapers: String { return self._s[2386]! } + public var ChatList_Context_Mute: String { return self._s[2388]! } + public var Passport_Address_City: String { return self._s[2389]! } + public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[2390]! } + public var Appearance_ThemeCarouselClassic: String { return self._s[2391]! } + public var SocksProxySetup_SecretPlaceholder: String { return self._s[2392]! } + public var AccessDenied_LocationDisabled: String { return self._s[2393]! } + public var Group_Location_Title: String { return self._s[2394]! } + public var SocksProxySetup_HostnamePlaceholder: String { return self._s[2396]! } + public var GroupInfo_Sound: String { return self._s[2397]! } + public var SettingsSearch_Synonyms_ChatSettings_OpenLinksIn: String { return self._s[2398]! } + public var ChannelInfo_ScamChannelWarning: String { return self._s[2399]! } + public var Stickers_RemoveFromFavorites: String { return self._s[2400]! } + public var Contacts_Title: String { return self._s[2401]! } + public var EditTheme_ThemeTemplateAlertText: String { return self._s[2402]! } + public var Passport_Language_fr: String { return self._s[2403]! } + public var TwoFactorSetup_EmailVerification_Action: String { return self._s[2404]! } + public var Notifications_ResetAllNotifications: String { return self._s[2405]! } + public var PrivacySettings_SecurityTitle: String { return self._s[2408]! } + public var Checkout_NewCard_Title: String { return self._s[2409]! } + public var Login_HaveNotReceivedCodeInternal: String { return self._s[2410]! } + public var Conversation_ForwardChats: String { return self._s[2411]! } + public var Wallet_SecureStorageReset_PasscodeText: String { return self._s[2413]! } + public var PasscodeSettings_4DigitCode: String { return self._s[2414]! } + public var Settings_FAQ: String { return self._s[2416]! } + public var AutoDownloadSettings_DocumentsTitle: String { return self._s[2417]! } + public var Conversation_ContextMenuForward: String { return self._s[2418]! } + public var VoiceOver_Chat_YourPhoto: String { return self._s[2421]! } + public var PrivacyPolicy_Title: String { return self._s[2424]! } + public var Notifications_TextTone: String { return self._s[2425]! } + public var Profile_CreateNewContact: String { return self._s[2426]! } + public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[2427]! } + public var TwoFactorSetup_EmailVerification_Title: String { return self._s[2429]! } + public var Call_Speaker: String { return self._s[2430]! } + public var AutoNightTheme_AutomaticSection: String { return self._s[2431]! } + public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2433]! } + public var Channel_Username_InvalidCharacters: String { return self._s[2434]! } public func Channel_AdminLog_MessageChangedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2426]!, self._r[2426]!, [_0]) + return formatWithArgumentRanges(self._s[2435]!, self._r[2435]!, [_0]) } - public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[2427]! } - public var PrivacySettings_LastSeenTitle: String { return self._s[2428]! } - public var Channel_AdminLog_CanInviteUsers: String { return self._s[2429]! } - public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[2430]! } - public var OwnershipTransfer_SecurityCheck: String { return self._s[2431]! } - public var Conversation_MessageDeliveryFailed: String { return self._s[2432]! } - public var Watch_ChatList_NoConversationsText: String { return self._s[2433]! } - public var Bot_Unblock: String { return self._s[2434]! } - public var TextFormat_Italic: String { return self._s[2435]! } - public var WallpaperSearch_ColorPink: String { return self._s[2436]! } - public var Settings_About_Help: String { return self._s[2437]! } - public var SearchImages_Title: String { return self._s[2438]! } - public var Weekday_Wednesday: String { return self._s[2439]! } - public var Conversation_ClousStorageInfo_Description1: String { return self._s[2440]! } - public var ExplicitContent_AlertTitle: String { return self._s[2441]! } + public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[2436]! } + public var PrivacySettings_LastSeenTitle: String { return self._s[2437]! } + public var Channel_AdminLog_CanInviteUsers: String { return self._s[2438]! } + public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[2439]! } + public var OwnershipTransfer_SecurityCheck: String { return self._s[2440]! } + public var Conversation_MessageDeliveryFailed: String { return self._s[2441]! } + public var Watch_ChatList_NoConversationsText: String { return self._s[2442]! } + public var Bot_Unblock: String { return self._s[2443]! } + public var TextFormat_Italic: String { return self._s[2444]! } + public var WallpaperSearch_ColorPink: String { return self._s[2445]! } + public var Settings_About_Help: String { return self._s[2446]! } + public var SearchImages_Title: String { return self._s[2447]! } + public var Weekday_Wednesday: String { return self._s[2448]! } + public var Conversation_ClousStorageInfo_Description1: String { return self._s[2449]! } + public var ExplicitContent_AlertTitle: String { return self._s[2450]! } public func Time_PreciseDate_m5(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2442]!, self._r[2442]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2451]!, self._r[2451]!, [_1, _2, _3]) } - public var Channel_DiscussionGroup_Create: String { return self._s[2443]! } - public var Weekday_Thursday: String { return self._s[2444]! } - public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[2445]! } - public var Channel_Members_AddMembersHelp: String { return self._s[2446]! } + public var Channel_DiscussionGroup_Create: String { return self._s[2452]! } + public var Weekday_Thursday: String { return self._s[2453]! } + public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[2454]! } + public var Channel_Members_AddMembersHelp: String { return self._s[2455]! } public func Checkout_SavePasswordTimeout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2447]!, self._r[2447]!, [_0]) + return formatWithArgumentRanges(self._s[2456]!, self._r[2456]!, [_0]) } - public var Channel_DiscussionGroup_LinkGroup: String { return self._s[2448]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2449]! } - public var Passport_RequestedInformation: String { return self._s[2450]! } - public var Login_PhoneAndCountryHelp: String { return self._s[2451]! } - public var Conversation_EncryptionProcessing: String { return self._s[2453]! } - public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[2454]! } - public var PhotoEditor_EnhanceTool: String { return self._s[2456]! } - public var Channel_Setup_Title: String { return self._s[2457]! } - public var Conversation_SearchPlaceholder: String { return self._s[2458]! } - public var AccessDenied_LocationAlwaysDenied: String { return self._s[2459]! } - public var Checkout_ErrorGeneric: String { return self._s[2460]! } - public var Passport_Language_hu: String { return self._s[2461]! } - public var Wallet_Month_ShortSeptember: String { return self._s[2462]! } + public var Channel_DiscussionGroup_LinkGroup: String { return self._s[2457]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2458]! } + public var Passport_RequestedInformation: String { return self._s[2459]! } + public var Login_PhoneAndCountryHelp: String { return self._s[2460]! } + public var Conversation_EncryptionProcessing: String { return self._s[2462]! } + public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[2463]! } + public var PhotoEditor_EnhanceTool: String { return self._s[2465]! } + public var Channel_Setup_Title: String { return self._s[2466]! } + public var Conversation_SearchPlaceholder: String { return self._s[2467]! } + public var AccessDenied_LocationAlwaysDenied: String { return self._s[2468]! } + public var Checkout_ErrorGeneric: String { return self._s[2469]! } + public var Passport_Language_hu: String { return self._s[2470]! } + public var Wallet_Month_ShortSeptember: String { return self._s[2471]! } public func Passport_Identity_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2464]!, self._r[2464]!, [_0]) + return formatWithArgumentRanges(self._s[2473]!, self._r[2473]!, [_0]) } public func PUSH_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2467]!, self._r[2467]!, [_1]) + return formatWithArgumentRanges(self._s[2476]!, self._r[2476]!, [_1]) } - public var ChatList_DeleteSavedMessagesConfirmationTitle: String { return self._s[2468]! } + public var ChatList_DeleteSavedMessagesConfirmationTitle: String { return self._s[2477]! } public func UserInfo_BlockConfirmationTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2469]!, self._r[2469]!, [_0]) + return formatWithArgumentRanges(self._s[2478]!, self._r[2478]!, [_0]) } - public var Conversation_CloudStorageInfo_Title: String { return self._s[2470]! } - public var Group_Location_Info: String { return self._s[2471]! } - public var PhotoEditor_CropAspectRatioSquare: String { return self._s[2472]! } - public var Permissions_PeopleNearbyAllow_v0: String { return self._s[2473]! } + public var Conversation_CloudStorageInfo_Title: String { return self._s[2479]! } + public var Group_Location_Info: String { return self._s[2480]! } + public var PhotoEditor_CropAspectRatioSquare: String { return self._s[2481]! } + public var Permissions_PeopleNearbyAllow_v0: String { return self._s[2482]! } public func Notification_Exceptions_MutedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2474]!, self._r[2474]!, [_0]) + return formatWithArgumentRanges(self._s[2483]!, self._r[2483]!, [_0]) } - public var Conversation_ClearPrivateHistory: String { return self._s[2475]! } - public var ContactInfo_PhoneLabelHome: String { return self._s[2476]! } - public var Appearance_RemoveThemeConfirmation: String { return self._s[2477]! } - public var PrivacySettings_LastSeenContacts: String { return self._s[2478]! } + public var Conversation_ClearPrivateHistory: String { return self._s[2484]! } + public var ContactInfo_PhoneLabelHome: String { return self._s[2485]! } + public var Appearance_RemoveThemeConfirmation: String { return self._s[2486]! } + public var PrivacySettings_LastSeenContacts: String { return self._s[2487]! } public func ChangePhone_ErrorOccupied(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2479]!, self._r[2479]!, [_0]) + return formatWithArgumentRanges(self._s[2488]!, self._r[2488]!, [_0]) } - public var Passport_Language_cs: String { return self._s[2480]! } - public var Message_PinnedAnimationMessage: String { return self._s[2482]! } - public var Passport_Identity_ReverseSideHelp: String { return self._s[2484]! } - public var SettingsSearch_Synonyms_Data_Storage_Title: String { return self._s[2485]! } - public var Wallet_Info_TransactionTo: String { return self._s[2487]! } - public var ChatList_DeleteForEveryoneConfirmationText: String { return self._s[2488]! } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[2489]! } - public var Embed_PlayingInPIP: String { return self._s[2490]! } - public var AutoNightTheme_ScheduleSection: String { return self._s[2491]! } + public var Passport_Language_cs: String { return self._s[2489]! } + public var Message_PinnedAnimationMessage: String { return self._s[2491]! } + public var Passport_Identity_ReverseSideHelp: String { return self._s[2493]! } + public var SettingsSearch_Synonyms_Data_Storage_Title: String { return self._s[2494]! } + public var Wallet_Info_TransactionTo: String { return self._s[2496]! } + public var ChatList_DeleteForEveryoneConfirmationText: String { return self._s[2497]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[2498]! } + public var Embed_PlayingInPIP: String { return self._s[2499]! } + public var AutoNightTheme_ScheduleSection: String { return self._s[2500]! } public func Call_EmojiDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2492]!, self._r[2492]!, [_0]) + return formatWithArgumentRanges(self._s[2501]!, self._r[2501]!, [_0]) } - public var MediaPicker_LivePhotoDescription: String { return self._s[2493]! } + public var MediaPicker_LivePhotoDescription: String { return self._s[2502]! } public func Channel_AdminLog_MessageRestrictedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2494]!, self._r[2494]!, [_1]) + return formatWithArgumentRanges(self._s[2503]!, self._r[2503]!, [_1]) } - public var Notification_PaymentSent: String { return self._s[2495]! } - public var PhotoEditor_CurvesGreen: String { return self._s[2496]! } - public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[2497]! } - public var AutoNightTheme_System: String { return self._s[2498]! } - public var SaveIncomingPhotosSettings_Title: String { return self._s[2499]! } - public var NotificationSettings_ShowNotificationsAllAccounts: String { return self._s[2500]! } - public var VoiceOver_Chat_PagePreview: String { return self._s[2501]! } + public var Notification_PaymentSent: String { return self._s[2504]! } + public var PhotoEditor_CurvesGreen: String { return self._s[2505]! } + public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[2506]! } + public var AutoNightTheme_System: String { return self._s[2507]! } + public var SaveIncomingPhotosSettings_Title: String { return self._s[2508]! } + public var NotificationSettings_ShowNotificationsAllAccounts: String { return self._s[2509]! } + public var VoiceOver_Chat_PagePreview: String { return self._s[2510]! } public func PUSH_MESSAGE_SCREENSHOT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2504]!, self._r[2504]!, [_1]) + return formatWithArgumentRanges(self._s[2513]!, self._r[2513]!, [_1]) } public func PUSH_MESSAGE_PHOTO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2505]!, self._r[2505]!, [_1]) + return formatWithArgumentRanges(self._s[2514]!, self._r[2514]!, [_1]) } public func ApplyLanguage_UnsufficientDataText(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2506]!, self._r[2506]!, [_1]) + return formatWithArgumentRanges(self._s[2515]!, self._r[2515]!, [_1]) } - public var NetworkUsageSettings_CallDataSection: String { return self._s[2508]! } - public var PasscodeSettings_HelpTop: String { return self._s[2509]! } - public var Conversation_WalletRequiredTitle: String { return self._s[2510]! } - public var Group_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[2511]! } - public var Passport_Address_TypeRentalAgreement: String { return self._s[2512]! } - public var EditTheme_ShortLink: String { return self._s[2513]! } - public var ProxyServer_VoiceOver_Active: String { return self._s[2514]! } - public var ReportPeer_ReasonOther_Placeholder: String { return self._s[2515]! } - public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[2516]! } - public var Call_Accept: String { return self._s[2518]! } - public var GroupRemoved_RemoveInfo: String { return self._s[2519]! } - public var Month_GenMarch: String { return self._s[2521]! } - public var PhotoEditor_ShadowsTool: String { return self._s[2522]! } - public var LoginPassword_Title: String { return self._s[2523]! } - public var Call_End: String { return self._s[2524]! } - public var Watch_Conversation_GroupInfo: String { return self._s[2525]! } - public var VoiceOver_Chat_Contact: String { return self._s[2526]! } - public var EditTheme_Create_Preview_IncomingText: String { return self._s[2527]! } - public var CallSettings_Always: String { return self._s[2528]! } - public var CallFeedback_Success: String { return self._s[2529]! } - public var TwoStepAuth_SetupHint: String { return self._s[2530]! } + public var NetworkUsageSettings_CallDataSection: String { return self._s[2517]! } + public var PasscodeSettings_HelpTop: String { return self._s[2518]! } + public var Conversation_WalletRequiredTitle: String { return self._s[2519]! } + public var Group_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[2520]! } + public var Passport_Address_TypeRentalAgreement: String { return self._s[2521]! } + public var EditTheme_ShortLink: String { return self._s[2522]! } + public var ProxyServer_VoiceOver_Active: String { return self._s[2523]! } + public var ReportPeer_ReasonOther_Placeholder: String { return self._s[2524]! } + public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[2525]! } + public var Call_Accept: String { return self._s[2527]! } + public var GroupRemoved_RemoveInfo: String { return self._s[2528]! } + public var Month_GenMarch: String { return self._s[2530]! } + public var PhotoEditor_ShadowsTool: String { return self._s[2531]! } + public var LoginPassword_Title: String { return self._s[2532]! } + public var Call_End: String { return self._s[2533]! } + public var Watch_Conversation_GroupInfo: String { return self._s[2534]! } + public var VoiceOver_Chat_Contact: String { return self._s[2535]! } + public var EditTheme_Create_Preview_IncomingText: String { return self._s[2536]! } + public var CallSettings_Always: String { return self._s[2537]! } + public var CallFeedback_Success: String { return self._s[2538]! } + public var TwoStepAuth_SetupHint: String { return self._s[2539]! } public func AddContact_ContactWillBeSharedAfterMutual(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2531]!, self._r[2531]!, [_1]) + return formatWithArgumentRanges(self._s[2540]!, self._r[2540]!, [_1]) } - public var ConversationProfile_UsersTooMuchError: String { return self._s[2532]! } - public var Login_PhoneTitle: String { return self._s[2533]! } - public var Passport_FieldPhoneHelp: String { return self._s[2534]! } - public var Weekday_ShortSunday: String { return self._s[2535]! } - public var Passport_InfoFAQ_URL: String { return self._s[2536]! } - public var ContactInfo_Job: String { return self._s[2538]! } - public var UserInfo_InviteBotToGroup: String { return self._s[2539]! } - public var Appearance_ThemeCarouselNightBlue: String { return self._s[2540]! } - public var TwoFactorSetup_Email_Text: String { return self._s[2541]! } - public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[2542]! } - public var Invite_ChannelsTooMuch: String { return self._s[2543]! } - public var Wallet_Send_ConfirmationConfirm: String { return self._s[2544]! } - public var Wallet_TransactionInfo_OtherFeeInfo: String { return self._s[2545]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsPreview: String { return self._s[2546]! } - public var Wallet_Receive_AmountText: String { return self._s[2547]! } - public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[2548]! } - public var CallFeedback_ReasonNoise: String { return self._s[2549]! } - public var Appearance_AppIconDefault: String { return self._s[2551]! } - public var Passport_Identity_AddInternalPassport: String { return self._s[2552]! } - public var MediaPicker_AddCaption: String { return self._s[2553]! } - public var CallSettings_TabIconDescription: String { return self._s[2554]! } + public var ConversationProfile_UsersTooMuchError: String { return self._s[2541]! } + public var Login_PhoneTitle: String { return self._s[2542]! } + public var Passport_FieldPhoneHelp: String { return self._s[2543]! } + public var Weekday_ShortSunday: String { return self._s[2544]! } + public var Passport_InfoFAQ_URL: String { return self._s[2545]! } + public var ContactInfo_Job: String { return self._s[2547]! } + public var UserInfo_InviteBotToGroup: String { return self._s[2548]! } + public var Appearance_ThemeCarouselNightBlue: String { return self._s[2549]! } + public var TwoFactorSetup_Email_Text: String { return self._s[2550]! } + public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[2551]! } + public var Invite_ChannelsTooMuch: String { return self._s[2552]! } + public var Wallet_Send_ConfirmationConfirm: String { return self._s[2553]! } + public var Wallet_TransactionInfo_OtherFeeInfo: String { return self._s[2554]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsPreview: String { return self._s[2555]! } + public var Wallet_Receive_AmountText: String { return self._s[2556]! } + public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[2557]! } + public var CallFeedback_ReasonNoise: String { return self._s[2558]! } + public var Appearance_AppIconDefault: String { return self._s[2560]! } + public var Passport_Identity_AddInternalPassport: String { return self._s[2561]! } + public var MediaPicker_AddCaption: String { return self._s[2562]! } + public var CallSettings_TabIconDescription: String { return self._s[2563]! } public func VoiceOver_Chat_Caption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2555]!, self._r[2555]!, [_0]) + return formatWithArgumentRanges(self._s[2564]!, self._r[2564]!, [_0]) } - public var ChatList_UndoArchiveHiddenTitle: String { return self._s[2556]! } - public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[2557]! } - public var Passport_Identity_TypePersonalDetails: String { return self._s[2558]! } - public var DialogList_SearchSectionRecent: String { return self._s[2559]! } - public var PrivacyPolicy_DeclineMessage: String { return self._s[2560]! } - public var LogoutOptions_ClearCacheText: String { return self._s[2563]! } - public var LastSeen_WithinAWeek: String { return self._s[2564]! } - public var ChannelMembers_GroupAdminsTitle: String { return self._s[2565]! } - public var Conversation_CloudStorage_ChatStatus: String { return self._s[2567]! } - public var VoiceOver_Media_PlaybackRateNormal: String { return self._s[2568]! } + public var ChatList_UndoArchiveHiddenTitle: String { return self._s[2565]! } + public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[2566]! } + public var Passport_Identity_TypePersonalDetails: String { return self._s[2567]! } + public var DialogList_SearchSectionRecent: String { return self._s[2568]! } + public var PrivacyPolicy_DeclineMessage: String { return self._s[2569]! } + public var LogoutOptions_ClearCacheText: String { return self._s[2572]! } + public var LastSeen_WithinAWeek: String { return self._s[2573]! } + public var ChannelMembers_GroupAdminsTitle: String { return self._s[2574]! } + public var Conversation_CloudStorage_ChatStatus: String { return self._s[2576]! } + public var VoiceOver_Media_PlaybackRateNormal: String { return self._s[2577]! } public func AddContact_SharedContactExceptionInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2569]!, self._r[2569]!, [_0]) + return formatWithArgumentRanges(self._s[2578]!, self._r[2578]!, [_0]) } - public var Passport_Address_TypeResidentialAddress: String { return self._s[2570]! } - public var Conversation_StatusLeftGroup: String { return self._s[2571]! } - public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[2572]! } - public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[2574]! } - public var GroupPermission_AddSuccess: String { return self._s[2575]! } - public var PhotoEditor_BlurToolRadial: String { return self._s[2577]! } - public var Conversation_ContextMenuCopy: String { return self._s[2578]! } - public var AccessDenied_CallMicrophone: String { return self._s[2579]! } + public var Passport_Address_TypeResidentialAddress: String { return self._s[2579]! } + public var Conversation_StatusLeftGroup: String { return self._s[2580]! } + public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[2581]! } + public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[2583]! } + public var GroupPermission_AddSuccess: String { return self._s[2584]! } + public var PhotoEditor_BlurToolRadial: String { return self._s[2586]! } + public var Conversation_ContextMenuCopy: String { return self._s[2587]! } + public var AccessDenied_CallMicrophone: String { return self._s[2588]! } public func Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2580]!, self._r[2580]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2589]!, self._r[2589]!, [_1, _2, _3]) } - public var Login_InvalidFirstNameError: String { return self._s[2581]! } - public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[2582]! } - public var Checkout_PaymentMethod_New: String { return self._s[2583]! } - public var ShareMenu_CopyShareLinkGame: String { return self._s[2584]! } - public var PhotoEditor_QualityTool: String { return self._s[2585]! } - public var Login_SendCodeViaSms: String { return self._s[2586]! } - public var SettingsSearch_Synonyms_Privacy_DeleteAccountIfAwayFor: String { return self._s[2587]! } - public var Chat_SlowmodeAttachmentLimitReached: String { return self._s[2588]! } - public var Wallet_Receive_CopyAddress: String { return self._s[2589]! } - public var Login_EmailNotConfiguredError: String { return self._s[2590]! } - public var SocksProxySetup_Status: String { return self._s[2591]! } - public var Conversation_ScheduleMessage_SendWhenOnline: String { return self._s[2592]! } - public var PrivacyPolicy_Accept: String { return self._s[2593]! } - public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[2594]! } - public var Appearance_AppIconClassicX: String { return self._s[2595]! } + public var Login_InvalidFirstNameError: String { return self._s[2590]! } + public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[2591]! } + public var Checkout_PaymentMethod_New: String { return self._s[2592]! } + public var ShareMenu_CopyShareLinkGame: String { return self._s[2593]! } + public var PhotoEditor_QualityTool: String { return self._s[2594]! } + public var Login_SendCodeViaSms: String { return self._s[2595]! } + public var SettingsSearch_Synonyms_Privacy_DeleteAccountIfAwayFor: String { return self._s[2596]! } + public var Chat_SlowmodeAttachmentLimitReached: String { return self._s[2597]! } + public var Wallet_Receive_CopyAddress: String { return self._s[2598]! } + public var Login_EmailNotConfiguredError: String { return self._s[2599]! } + public var SocksProxySetup_Status: String { return self._s[2600]! } + public var Conversation_ScheduleMessage_SendWhenOnline: String { return self._s[2601]! } + public var PrivacyPolicy_Accept: String { return self._s[2602]! } + public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[2603]! } + public var Appearance_AppIconClassicX: String { return self._s[2604]! } public func PUSH_CHAT_MESSAGE_TEXT(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2596]!, self._r[2596]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2605]!, self._r[2605]!, [_1, _2, _3]) } - public var OwnershipTransfer_SecurityRequirements: String { return self._s[2597]! } - public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2599]! } - public var AutoNightTheme_Automatic: String { return self._s[2600]! } - public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2601]! } - public var Privacy_ContactsSyncHelp: String { return self._s[2602]! } - public var Cache_Help: String { return self._s[2603]! } - public var Group_ErrorAccessDenied: String { return self._s[2604]! } - public var Passport_Language_fa: String { return self._s[2605]! } - public var Wallet_Intro_Text: String { return self._s[2606]! } - public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2607]! } - public var VoiceOver_Chat_YourVideoMessage: String { return self._s[2608]! } - public var PrivacySettings_LastSeen: String { return self._s[2609]! } + public var OwnershipTransfer_SecurityRequirements: String { return self._s[2606]! } + public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2608]! } + public var AutoNightTheme_Automatic: String { return self._s[2609]! } + public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2610]! } + public var Privacy_ContactsSyncHelp: String { return self._s[2611]! } + public var Cache_Help: String { return self._s[2612]! } + public var Group_ErrorAccessDenied: String { return self._s[2613]! } + public var Passport_Language_fa: String { return self._s[2614]! } + public var Wallet_Intro_Text: String { return self._s[2615]! } + public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2616]! } + public var VoiceOver_Chat_YourVideoMessage: String { return self._s[2617]! } + public var PrivacySettings_LastSeen: String { return self._s[2618]! } public func DialogList_MultipleTyping(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2610]!, self._r[2610]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2619]!, self._r[2619]!, [_0, _1]) } - public var Wallet_Configuration_Apply: String { return self._s[2614]! } - public var Preview_SaveGif: String { return self._s[2615]! } - public var SettingsSearch_Synonyms_Privacy_TwoStepAuth: String { return self._s[2616]! } - public var Profile_About: String { return self._s[2617]! } - public var Channel_About_Placeholder: String { return self._s[2618]! } - public var Login_InfoTitle: String { return self._s[2619]! } + public var Wallet_Configuration_Apply: String { return self._s[2623]! } + public var Preview_SaveGif: String { return self._s[2624]! } + public var SettingsSearch_Synonyms_Privacy_TwoStepAuth: String { return self._s[2625]! } + public var Profile_About: String { return self._s[2626]! } + public var Channel_About_Placeholder: String { return self._s[2627]! } + public var Login_InfoTitle: String { return self._s[2628]! } public func TwoStepAuth_SetupPendingEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2620]!, self._r[2620]!, [_0]) + return formatWithArgumentRanges(self._s[2629]!, self._r[2629]!, [_0]) } - public var EditTheme_Expand_Preview_IncomingReplyText: String { return self._s[2621]! } - public var Watch_Suggestion_CantTalk: String { return self._s[2623]! } - public var ContactInfo_Title: String { return self._s[2624]! } - public var Media_ShareThisVideo: String { return self._s[2625]! } - public var Weekday_ShortFriday: String { return self._s[2626]! } - public var AccessDenied_Contacts: String { return self._s[2628]! } - public var Notification_CallIncomingShort: String { return self._s[2629]! } - public var Group_Setup_TypePublic: String { return self._s[2630]! } - public var Notifications_MessageNotificationsExceptions: String { return self._s[2631]! } - public var Notifications_Badge_IncludeChannels: String { return self._s[2632]! } - public var Notifications_MessageNotificationsPreview: String { return self._s[2635]! } - public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2636]! } - public var Group_ErrorAddTooMuchBots: String { return self._s[2637]! } - public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2638]! } - public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2639]! } + public var EditTheme_Expand_Preview_IncomingReplyText: String { return self._s[2630]! } + public var Watch_Suggestion_CantTalk: String { return self._s[2632]! } + public var ContactInfo_Title: String { return self._s[2633]! } + public var Media_ShareThisVideo: String { return self._s[2634]! } + public var Weekday_ShortFriday: String { return self._s[2635]! } + public var AccessDenied_Contacts: String { return self._s[2637]! } + public var Notification_CallIncomingShort: String { return self._s[2638]! } + public var Group_Setup_TypePublic: String { return self._s[2639]! } + public var Notifications_MessageNotificationsExceptions: String { return self._s[2640]! } + public var Notifications_Badge_IncludeChannels: String { return self._s[2641]! } + public var Notifications_MessageNotificationsPreview: String { return self._s[2644]! } + public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2645]! } + public var Group_ErrorAddTooMuchBots: String { return self._s[2646]! } + public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2647]! } + public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2648]! } public func Wallet_SecureStorageChanged_BiometryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2640]!, self._r[2640]!, [_0]) + return formatWithArgumentRanges(self._s[2649]!, self._r[2649]!, [_0]) } - public var DialogList_Typing: String { return self._s[2641]! } - public var CallFeedback_IncludeLogs: String { return self._s[2643]! } - public var Checkout_Phone: String { return self._s[2645]! } - public var Login_InfoFirstNamePlaceholder: String { return self._s[2648]! } - public var Privacy_Calls_Integration: String { return self._s[2649]! } - public var Notifications_PermissionsAllow: String { return self._s[2650]! } - public var TwoStepAuth_AddHintDescription: String { return self._s[2654]! } - public var Settings_ChatSettings: String { return self._s[2655]! } + public var DialogList_Typing: String { return self._s[2650]! } + public var CallFeedback_IncludeLogs: String { return self._s[2652]! } + public var Checkout_Phone: String { return self._s[2654]! } + public var Login_InfoFirstNamePlaceholder: String { return self._s[2657]! } + public var Privacy_Calls_Integration: String { return self._s[2658]! } + public var Notifications_PermissionsAllow: String { return self._s[2659]! } + public var TwoStepAuth_AddHintDescription: String { return self._s[2663]! } + public var Settings_ChatSettings: String { return self._s[2664]! } public func Channel_AdminLog_MessageInvitedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2656]!, self._r[2656]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2665]!, self._r[2665]!, [_1, _2]) } - public var GroupRemoved_DeleteUser: String { return self._s[2658]! } + public var GroupRemoved_DeleteUser: String { return self._s[2667]! } public func Channel_AdminLog_PollStopped(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2659]!, self._r[2659]!, [_0]) + return formatWithArgumentRanges(self._s[2668]!, self._r[2668]!, [_0]) } public func PUSH_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2660]!, self._r[2660]!, [_1]) + return formatWithArgumentRanges(self._s[2669]!, self._r[2669]!, [_1]) } - public var Login_ContinueWithLocalization: String { return self._s[2661]! } - public var Watch_Message_ForwardedFrom: String { return self._s[2662]! } - public var TwoStepAuth_EnterEmailCode: String { return self._s[2664]! } - public var Conversation_Unblock: String { return self._s[2665]! } - public var PrivacySettings_DataSettings: String { return self._s[2666]! } - public var Group_PublicLink_Info: String { return self._s[2667]! } + public var Login_ContinueWithLocalization: String { return self._s[2670]! } + public var Watch_Message_ForwardedFrom: String { return self._s[2671]! } + public var TwoStepAuth_EnterEmailCode: String { return self._s[2673]! } + public var Conversation_Unblock: String { return self._s[2674]! } + public var PrivacySettings_DataSettings: String { return self._s[2675]! } + public var Group_PublicLink_Info: String { return self._s[2676]! } public func Wallet_Time_PreciseDate_m1(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2668]!, self._r[2668]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2677]!, self._r[2677]!, [_1, _2, _3]) } - public var Notifications_InAppNotificationsVibrate: String { return self._s[2669]! } + public var Notifications_InAppNotificationsVibrate: String { return self._s[2678]! } public func Privacy_GroupsAndChannels_InviteToChannelError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2670]!, self._r[2670]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2679]!, self._r[2679]!, [_0, _1]) } - public var Wallet_RestoreFailed_CreateWallet: String { return self._s[2672]! } - public var PrivacySettings_Passcode: String { return self._s[2674]! } - public var Call_Mute: String { return self._s[2675]! } - public var Wallet_Weekday_Yesterday: String { return self._s[2676]! } - public var Passport_Language_dz: String { return self._s[2677]! } - public var Wallet_Receive_AmountHeader: String { return self._s[2678]! } - public var Wallet_TransactionInfo_OtherFeeInfoUrl: String { return self._s[2679]! } - public var Passport_Language_tk: String { return self._s[2680]! } + public var Wallet_RestoreFailed_CreateWallet: String { return self._s[2681]! } + public var PrivacySettings_Passcode: String { return self._s[2683]! } + public var Call_Mute: String { return self._s[2684]! } + public var Wallet_Weekday_Yesterday: String { return self._s[2685]! } + public var Passport_Language_dz: String { return self._s[2686]! } + public var Wallet_Receive_AmountHeader: String { return self._s[2687]! } + public var Wallet_TransactionInfo_OtherFeeInfoUrl: String { return self._s[2688]! } + public var Passport_Language_tk: String { return self._s[2689]! } public func Login_EmailCodeSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2681]!, self._r[2681]!, [_0]) + return formatWithArgumentRanges(self._s[2690]!, self._r[2690]!, [_0]) } - public var Settings_Search: String { return self._s[2682]! } - public var Wallet_Month_ShortFebruary: String { return self._s[2683]! } - public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2684]! } - public var Conversation_ContextMenuReply: String { return self._s[2685]! } - public var WallpaperSearch_ColorBrown: String { return self._s[2686]! } - public var Chat_AttachmentMultipleForwardDisabled: String { return self._s[2687]! } - public var Tour_Title1: String { return self._s[2688]! } - public var Wallet_Alert_Cancel: String { return self._s[2689]! } - public var Conversation_ClearGroupHistory: String { return self._s[2691]! } - public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[2692]! } - public var WallpaperPreview_Motion: String { return self._s[2693]! } + public var Settings_Search: String { return self._s[2691]! } + public var Wallet_Month_ShortFebruary: String { return self._s[2692]! } + public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2693]! } + public var Wallet_Configuration_SourceJSON: String { return self._s[2694]! } + public var Conversation_ContextMenuReply: String { return self._s[2695]! } + public var WallpaperSearch_ColorBrown: String { return self._s[2696]! } + public var Chat_AttachmentMultipleForwardDisabled: String { return self._s[2697]! } + public var Tour_Title1: String { return self._s[2698]! } + public var Wallet_Alert_Cancel: String { return self._s[2699]! } + public var Conversation_ClearGroupHistory: String { return self._s[2701]! } + public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[2702]! } + public var WallpaperPreview_Motion: String { return self._s[2703]! } public func Checkout_PasswordEntry_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2694]!, self._r[2694]!, [_0]) + return formatWithArgumentRanges(self._s[2704]!, self._r[2704]!, [_0]) } - public var Call_RateCall: String { return self._s[2695]! } - public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[2696]! } - public var Passport_PasswordCompleteSetup: String { return self._s[2697]! } - public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2698]! } - public var UserInfo_LastNamePlaceholder: String { return self._s[2700]! } + public var Wallet_Configuration_ApplyErrorTextJSONInvalidData: String { return self._s[2705]! } + public var Call_RateCall: String { return self._s[2706]! } + public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[2707]! } + public var Passport_PasswordCompleteSetup: String { return self._s[2708]! } + public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2709]! } + public var UserInfo_LastNamePlaceholder: String { return self._s[2711]! } public func Login_WillCallYou(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2702]!, self._r[2702]!, [_0]) + return formatWithArgumentRanges(self._s[2713]!, self._r[2713]!, [_0]) } - public var Compose_Create: String { return self._s[2703]! } - public var Contacts_InviteToTelegram: String { return self._s[2704]! } - public var GroupInfo_Notifications: String { return self._s[2705]! } - public var ChatList_DeleteSavedMessagesConfirmationAction: String { return self._s[2707]! } - public var Message_PinnedLiveLocationMessage: String { return self._s[2708]! } - public var Month_GenApril: String { return self._s[2709]! } - public var Appearance_AutoNightTheme: String { return self._s[2710]! } - public var ChatSettings_AutomaticAudioDownload: String { return self._s[2712]! } - public var Login_CodeSentSms: String { return self._s[2714]! } + public var Compose_Create: String { return self._s[2714]! } + public var Contacts_InviteToTelegram: String { return self._s[2715]! } + public var GroupInfo_Notifications: String { return self._s[2716]! } + public var ChatList_DeleteSavedMessagesConfirmationAction: String { return self._s[2718]! } + public var Message_PinnedLiveLocationMessage: String { return self._s[2719]! } + public var Month_GenApril: String { return self._s[2720]! } + public var Appearance_AutoNightTheme: String { return self._s[2721]! } + public var ChatSettings_AutomaticAudioDownload: String { return self._s[2723]! } + public var Login_CodeSentSms: String { return self._s[2725]! } public func UserInfo_UnblockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2715]!, self._r[2715]!, [_0]) + return formatWithArgumentRanges(self._s[2726]!, self._r[2726]!, [_0]) } - public var EmptyGroupInfo_Line3: String { return self._s[2716]! } - public var LogoutOptions_ContactSupportText: String { return self._s[2717]! } - public var Passport_Language_hr: String { return self._s[2718]! } - public var Common_ActionNotAllowedError: String { return self._s[2719]! } + public var EmptyGroupInfo_Line3: String { return self._s[2727]! } + public var LogoutOptions_ContactSupportText: String { return self._s[2728]! } + public var Passport_Language_hr: String { return self._s[2729]! } + public var Common_ActionNotAllowedError: String { return self._s[2730]! } public func Channel_AdminLog_MessageRestrictedNewSetting(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2720]!, self._r[2720]!, [_0]) + return formatWithArgumentRanges(self._s[2731]!, self._r[2731]!, [_0]) } - public var GroupInfo_InviteLink_CopyLink: String { return self._s[2721]! } - public var Wallet_Info_TransactionFrom: String { return self._s[2722]! } - public var Wallet_Send_ErrorDecryptionFailed: String { return self._s[2723]! } - public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2724]! } - public var Privacy_SecretChatsTitle: String { return self._s[2725]! } - public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2727]! } - public var GroupInfo_AddUserLeftError: String { return self._s[2728]! } - public var AutoDownloadSettings_TypePrivateChats: String { return self._s[2729]! } - public var LogoutOptions_ContactSupportTitle: String { return self._s[2730]! } - public var Channel_AddBotErrorHaveRights: String { return self._s[2731]! } - public var Preview_DeleteGif: String { return self._s[2732]! } - public var GroupInfo_Permissions_Exceptions: String { return self._s[2733]! } - public var Group_ErrorNotMutualContact: String { return self._s[2734]! } - public var Notification_MessageLifetime5s: String { return self._s[2735]! } - public var Wallet_Send_OwnAddressAlertText: String { return self._s[2736]! } + public var GroupInfo_InviteLink_CopyLink: String { return self._s[2732]! } + public var Wallet_Info_TransactionFrom: String { return self._s[2733]! } + public var Wallet_Send_ErrorDecryptionFailed: String { return self._s[2734]! } + public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2735]! } + public var Privacy_SecretChatsTitle: String { return self._s[2736]! } + public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2738]! } + public var GroupInfo_AddUserLeftError: String { return self._s[2739]! } + public var AutoDownloadSettings_TypePrivateChats: String { return self._s[2740]! } + public var LogoutOptions_ContactSupportTitle: String { return self._s[2741]! } + public var Channel_AddBotErrorHaveRights: String { return self._s[2742]! } + public var Preview_DeleteGif: String { return self._s[2743]! } + public var GroupInfo_Permissions_Exceptions: String { return self._s[2744]! } + public var Group_ErrorNotMutualContact: String { return self._s[2745]! } + public var Notification_MessageLifetime5s: String { return self._s[2746]! } + public var Wallet_Send_OwnAddressAlertText: String { return self._s[2747]! } public func Watch_LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2737]!, self._r[2737]!, [_0]) + return formatWithArgumentRanges(self._s[2748]!, self._r[2748]!, [_0]) } - public var VoiceOver_Chat_Video: String { return self._s[2738]! } - public var Channel_OwnershipTransfer_ErrorPublicChannelsTooMuch: String { return self._s[2740]! } - public var ReportSpam_DeleteThisChat: String { return self._s[2741]! } - public var Passport_Address_AddBankStatement: String { return self._s[2742]! } - public var Notification_CallIncoming: String { return self._s[2743]! } - public var Wallet_Words_NotDoneTitle: String { return self._s[2744]! } - public var Compose_NewGroupTitle: String { return self._s[2745]! } - public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2747]! } - public var Passport_Address_Postcode: String { return self._s[2749]! } + public var VoiceOver_Chat_Video: String { return self._s[2749]! } + public var Channel_OwnershipTransfer_ErrorPublicChannelsTooMuch: String { return self._s[2751]! } + public var ReportSpam_DeleteThisChat: String { return self._s[2752]! } + public var Passport_Address_AddBankStatement: String { return self._s[2753]! } + public var Notification_CallIncoming: String { return self._s[2754]! } + public var Wallet_Words_NotDoneTitle: String { return self._s[2755]! } + public var Compose_NewGroupTitle: String { return self._s[2756]! } + public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2758]! } + public var Passport_Address_Postcode: String { return self._s[2760]! } public func LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2750]!, self._r[2750]!, [_0]) + return formatWithArgumentRanges(self._s[2761]!, self._r[2761]!, [_0]) } - public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2751]! } - public var Wallet_Month_ShortOctober: String { return self._s[2752]! } - public var VoiceOver_Chat_YourMusic: String { return self._s[2753]! } - public var WallpaperColors_Title: String { return self._s[2754]! } - public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[2755]! } - public var VoiceOver_MessageContextForward: String { return self._s[2756]! } - public var GroupPermission_Duration: String { return self._s[2757]! } + public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2762]! } + public var Wallet_Month_ShortOctober: String { return self._s[2763]! } + public var VoiceOver_Chat_YourMusic: String { return self._s[2764]! } + public var WallpaperColors_Title: String { return self._s[2765]! } + public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[2766]! } + public var VoiceOver_MessageContextForward: String { return self._s[2767]! } + public var GroupPermission_Duration: String { return self._s[2768]! } public func Cache_Clear(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2758]!, self._r[2758]!, [_0]) + return formatWithArgumentRanges(self._s[2769]!, self._r[2769]!, [_0]) } - public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2759]! } - public var Username_Placeholder: String { return self._s[2760]! } - public var CallFeedback_WhatWentWrong: String { return self._s[2761]! } - public var Passport_FieldAddressUploadHelp: String { return self._s[2762]! } - public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2763]! } + public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2770]! } + public var Username_Placeholder: String { return self._s[2771]! } + public var CallFeedback_WhatWentWrong: String { return self._s[2772]! } + public var Passport_FieldAddressUploadHelp: String { return self._s[2773]! } + public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2774]! } public func Channel_AdminLog_MessageChangedUnlinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2765]!, self._r[2765]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2776]!, self._r[2776]!, [_1, _2]) } - public var Passport_PasswordDescription: String { return self._s[2766]! } - public var Channel_MessagePhotoUpdated: String { return self._s[2767]! } - public var MediaPicker_TapToUngroupDescription: String { return self._s[2768]! } - public var SettingsSearch_Synonyms_Notifications_BadgeCountUnreadMessages: String { return self._s[2769]! } - public var AttachmentMenu_PhotoOrVideo: String { return self._s[2770]! } - public var Conversation_ContextMenuMore: String { return self._s[2771]! } - public var Privacy_PaymentsClearInfo: String { return self._s[2772]! } - public var CallSettings_TabIcon: String { return self._s[2773]! } - public var KeyCommand_Find: String { return self._s[2774]! } - public var ClearCache_FreeSpaceDescription: String { return self._s[2775]! } - public var Appearance_ThemePreview_ChatList_7_Text: String { return self._s[2776]! } - public var EditTheme_Edit_Preview_IncomingText: String { return self._s[2777]! } - public var Message_PinnedGame: String { return self._s[2778]! } - public var VoiceOver_Chat_ForwardedFromYou: String { return self._s[2779]! } - public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2781]! } - public var Login_CallRequestState2: String { return self._s[2783]! } - public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2785]! } + public var Passport_PasswordDescription: String { return self._s[2777]! } + public var Channel_MessagePhotoUpdated: String { return self._s[2778]! } + public var MediaPicker_TapToUngroupDescription: String { return self._s[2779]! } + public var SettingsSearch_Synonyms_Notifications_BadgeCountUnreadMessages: String { return self._s[2780]! } + public var AttachmentMenu_PhotoOrVideo: String { return self._s[2781]! } + public var Conversation_ContextMenuMore: String { return self._s[2782]! } + public var Privacy_PaymentsClearInfo: String { return self._s[2783]! } + public var CallSettings_TabIcon: String { return self._s[2784]! } + public var KeyCommand_Find: String { return self._s[2785]! } + public var ClearCache_FreeSpaceDescription: String { return self._s[2786]! } + public var Appearance_ThemePreview_ChatList_7_Text: String { return self._s[2787]! } + public var EditTheme_Edit_Preview_IncomingText: String { return self._s[2788]! } + public var Message_PinnedGame: String { return self._s[2789]! } + public var VoiceOver_Chat_ForwardedFromYou: String { return self._s[2790]! } + public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2792]! } + public var Login_CallRequestState2: String { return self._s[2794]! } + public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2796]! } public func VoiceOver_Chat_PhotoFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2786]!, self._r[2786]!, [_0]) + return formatWithArgumentRanges(self._s[2797]!, self._r[2797]!, [_0]) } public func Checkout_PayPrice(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2788]!, self._r[2788]!, [_0]) + return formatWithArgumentRanges(self._s[2799]!, self._r[2799]!, [_0]) } - public var WallpaperPreview_Blurred: String { return self._s[2789]! } - public var Conversation_InstantPagePreview: String { return self._s[2790]! } + public var WallpaperPreview_Blurred: String { return self._s[2800]! } + public var Conversation_InstantPagePreview: String { return self._s[2801]! } public func DialogList_SingleUploadingVideoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2791]!, self._r[2791]!, [_0]) + return formatWithArgumentRanges(self._s[2802]!, self._r[2802]!, [_0]) } - public var SecretTimer_VideoDescription: String { return self._s[2794]! } - public var WallpaperSearch_ColorRed: String { return self._s[2795]! } - public var GroupPermission_NoPinMessages: String { return self._s[2796]! } - public var Passport_Language_es: String { return self._s[2797]! } - public var Permissions_ContactsAllow_v0: String { return self._s[2799]! } - public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2800]! } + public var SecretTimer_VideoDescription: String { return self._s[2805]! } + public var WallpaperSearch_ColorRed: String { return self._s[2806]! } + public var GroupPermission_NoPinMessages: String { return self._s[2807]! } + public var Passport_Language_es: String { return self._s[2808]! } + public var Permissions_ContactsAllow_v0: String { return self._s[2810]! } + public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2811]! } public func PUSH_CHAT_MESSAGE_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2801]!, self._r[2801]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2812]!, self._r[2812]!, [_1, _2]) } - public var Privacy_Forwards_CustomHelp: String { return self._s[2802]! } - public var WebPreview_GettingLinkInfo: String { return self._s[2803]! } - public var Watch_UserInfo_Unmute: String { return self._s[2804]! } - public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2805]! } - public var AccessDenied_CameraRestricted: String { return self._s[2807]! } + public var Privacy_Forwards_CustomHelp: String { return self._s[2813]! } + public var WebPreview_GettingLinkInfo: String { return self._s[2814]! } + public var Watch_UserInfo_Unmute: String { return self._s[2815]! } + public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2816]! } + public var AccessDenied_CameraRestricted: String { return self._s[2818]! } public func Conversation_Kilobytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2808]!, self._r[2808]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[2819]!, self._r[2819]!, ["\(_0)"]) } - public var ChatList_ReadAll: String { return self._s[2810]! } - public var Settings_CopyUsername: String { return self._s[2811]! } - public var Contacts_SearchLabel: String { return self._s[2812]! } - public var Map_OpenInYandexNavigator: String { return self._s[2814]! } - public var PasscodeSettings_EncryptData: String { return self._s[2815]! } - public var Settings_Wallet: String { return self._s[2816]! } - public var WallpaperSearch_ColorPrefix: String { return self._s[2817]! } - public var Notifications_GroupNotificationsPreview: String { return self._s[2818]! } - public var DialogList_AdNoticeAlert: String { return self._s[2819]! } - public var Wallet_Month_GenMay: String { return self._s[2821]! } - public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2822]! } - public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2823]! } - public var Localization_LanguageCustom: String { return self._s[2824]! } - public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2825]! } - public var CallFeedback_Title: String { return self._s[2826]! } - public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[2829]! } - public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2830]! } - public var Wallet_Intro_CreateErrorTitle: String { return self._s[2831]! } - public var Conversation_InfoGroup: String { return self._s[2832]! } - public var Compose_NewMessage: String { return self._s[2833]! } - public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2834]! } - public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2835]! } - public var Wallet_SecureStorageReset_BiometryFaceId: String { return self._s[2836]! } - public var Channel_DiscussionGroup_UnlinkChannel: String { return self._s[2837]! } + public var ChatList_ReadAll: String { return self._s[2821]! } + public var Settings_CopyUsername: String { return self._s[2822]! } + public var Contacts_SearchLabel: String { return self._s[2823]! } + public var Map_OpenInYandexNavigator: String { return self._s[2825]! } + public var PasscodeSettings_EncryptData: String { return self._s[2826]! } + public var Settings_Wallet: String { return self._s[2827]! } + public var Group_ErrorSupergroupConversionNotPossible: String { return self._s[2828]! } + public var WallpaperSearch_ColorPrefix: String { return self._s[2829]! } + public var Notifications_GroupNotificationsPreview: String { return self._s[2830]! } + public var DialogList_AdNoticeAlert: String { return self._s[2831]! } + public var Wallet_Month_GenMay: String { return self._s[2833]! } + public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2834]! } + public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2835]! } + public var Localization_LanguageCustom: String { return self._s[2836]! } + public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2837]! } + public var CallFeedback_Title: String { return self._s[2838]! } + public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[2841]! } + public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2842]! } + public var Wallet_Intro_CreateErrorTitle: String { return self._s[2843]! } + public var Conversation_InfoGroup: String { return self._s[2844]! } + public var Compose_NewMessage: String { return self._s[2845]! } + public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2846]! } + public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2847]! } + public var Wallet_SecureStorageReset_BiometryFaceId: String { return self._s[2848]! } + public var Channel_DiscussionGroup_UnlinkChannel: String { return self._s[2849]! } public func Passport_Scans_ScanIndex(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2838]!, self._r[2838]!, [_0]) + return formatWithArgumentRanges(self._s[2850]!, self._r[2850]!, [_0]) } - public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2839]! } - public var Login_CancelSignUpConfirmation: String { return self._s[2840]! } - public var ChangePhoneNumberCode_Help: String { return self._s[2841]! } - public var PrivacySettings_DeleteAccountHelp: String { return self._s[2842]! } - public var Channel_BlackList_Title: String { return self._s[2843]! } - public var UserInfo_PhoneCall: String { return self._s[2844]! } - public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2846]! } - public var Wallet_Month_ShortJanuary: String { return self._s[2847]! } - public var State_connecting: String { return self._s[2848]! } - public var Appearance_ThemePreview_ChatList_6_Text: String { return self._s[2849]! } - public var Wallet_Month_GenMarch: String { return self._s[2850]! } - public var EditTheme_Expand_BottomInfo: String { return self._s[2851]! } + public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2851]! } + public var Login_CancelSignUpConfirmation: String { return self._s[2852]! } + public var ChangePhoneNumberCode_Help: String { return self._s[2853]! } + public var PrivacySettings_DeleteAccountHelp: String { return self._s[2854]! } + public var Channel_BlackList_Title: String { return self._s[2855]! } + public var UserInfo_PhoneCall: String { return self._s[2856]! } + public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2858]! } + public var Wallet_Month_ShortJanuary: String { return self._s[2859]! } + public var State_connecting: String { return self._s[2860]! } + public var Appearance_ThemePreview_ChatList_6_Text: String { return self._s[2861]! } + public var Wallet_Month_GenMarch: String { return self._s[2862]! } + public var EditTheme_Expand_BottomInfo: String { return self._s[2863]! } public func LastSeen_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2852]!, self._r[2852]!, [_0]) + return formatWithArgumentRanges(self._s[2864]!, self._r[2864]!, [_0]) } public func DialogList_SingleRecordingAudioSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2853]!, self._r[2853]!, [_0]) + return formatWithArgumentRanges(self._s[2865]!, self._r[2865]!, [_0]) } - public var Notifications_GroupNotifications: String { return self._s[2854]! } - public var Conversation_SendMessageErrorTooMuchScheduled: String { return self._s[2855]! } - public var Passport_Identity_EditPassport: String { return self._s[2856]! } - public var EnterPasscode_RepeatNewPasscode: String { return self._s[2858]! } - public var Localization_EnglishLanguageName: String { return self._s[2859]! } - public var Share_AuthDescription: String { return self._s[2860]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsAlert: String { return self._s[2861]! } - public var Passport_Identity_Surname: String { return self._s[2862]! } - public var Compose_TokenListPlaceholder: String { return self._s[2863]! } - public var Passport_Identity_OneOfTypePassport: String { return self._s[2864]! } - public var Settings_AboutEmpty: String { return self._s[2865]! } - public var Conversation_Unmute: String { return self._s[2866]! } - public var CreateGroup_ChannelsTooMuch: String { return self._s[2868]! } - public var Wallet_Sending_Text: String { return self._s[2869]! } + public var Notifications_GroupNotifications: String { return self._s[2866]! } + public var Conversation_SendMessageErrorTooMuchScheduled: String { return self._s[2867]! } + public var Passport_Identity_EditPassport: String { return self._s[2868]! } + public var EnterPasscode_RepeatNewPasscode: String { return self._s[2870]! } + public var Localization_EnglishLanguageName: String { return self._s[2871]! } + public var Share_AuthDescription: String { return self._s[2872]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsAlert: String { return self._s[2873]! } + public var Passport_Identity_Surname: String { return self._s[2874]! } + public var Compose_TokenListPlaceholder: String { return self._s[2875]! } + public var Passport_Identity_OneOfTypePassport: String { return self._s[2876]! } + public var Settings_AboutEmpty: String { return self._s[2877]! } + public var Conversation_Unmute: String { return self._s[2878]! } + public var CreateGroup_ChannelsTooMuch: String { return self._s[2880]! } + public var Wallet_Sending_Text: String { return self._s[2881]! } public func PUSH_CONTACT_JOINED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2870]!, self._r[2870]!, [_1]) + return formatWithArgumentRanges(self._s[2882]!, self._r[2882]!, [_1]) } - public var Login_CodeSentCall: String { return self._s[2871]! } - public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2873]! } - public var ChatSettings_Appearance: String { return self._s[2874]! } - public var ClearCache_StorageUsage: String { return self._s[2875]! } - public var Appearance_PickAccentColor: String { return self._s[2876]! } + public var Login_CodeSentCall: String { return self._s[2883]! } + public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2885]! } + public var ChatSettings_Appearance: String { return self._s[2886]! } + public var ClearCache_StorageUsage: String { return self._s[2887]! } + public var Appearance_PickAccentColor: String { return self._s[2888]! } public func PUSH_CHAT_MESSAGE_NOTEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2877]!, self._r[2877]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2889]!, self._r[2889]!, [_1, _2]) } public func PUSH_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2878]!, self._r[2878]!, [_1]) + return formatWithArgumentRanges(self._s[2890]!, self._r[2890]!, [_1]) } - public var Notification_CallMissed: String { return self._s[2879]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground_Custom: String { return self._s[2880]! } - public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2881]! } - public var Wallet_Month_GenOctober: String { return self._s[2883]! } - public var ChatAdmins_AdminLabel: String { return self._s[2884]! } - public var KeyCommand_JumpToNextChat: String { return self._s[2885]! } - public var Conversation_StopPollConfirmationTitle: String { return self._s[2887]! } - public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[2888]! } - public var Month_GenJune: String { return self._s[2889]! } - public var Watch_Location_Current: String { return self._s[2890]! } - public var Wallet_Receive_CopyInvoiceUrl: String { return self._s[2891]! } - public var Conversation_TitleMute: String { return self._s[2892]! } + public var Notification_CallMissed: String { return self._s[2891]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground_Custom: String { return self._s[2892]! } + public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2893]! } + public var Wallet_Month_GenOctober: String { return self._s[2895]! } + public var ChatAdmins_AdminLabel: String { return self._s[2896]! } + public var KeyCommand_JumpToNextChat: String { return self._s[2897]! } + public var Conversation_StopPollConfirmationTitle: String { return self._s[2899]! } + public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[2900]! } + public var Month_GenJune: String { return self._s[2901]! } + public var Watch_Location_Current: String { return self._s[2902]! } + public var Wallet_Receive_CopyInvoiceUrl: String { return self._s[2903]! } + public var Conversation_TitleMute: String { return self._s[2904]! } public func PUSH_CHANNEL_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2893]!, self._r[2893]!, [_1]) + return formatWithArgumentRanges(self._s[2905]!, self._r[2905]!, [_1]) } - public var GroupInfo_DeleteAndExit: String { return self._s[2894]! } + public var GroupInfo_DeleteAndExit: String { return self._s[2906]! } public func Conversation_Moderate_DeleteAllMessages(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2895]!, self._r[2895]!, [_0]) + return formatWithArgumentRanges(self._s[2907]!, self._r[2907]!, [_0]) } - public var Call_ReportPlaceholder: String { return self._s[2896]! } - public var Chat_SlowmodeSendError: String { return self._s[2897]! } - public var MaskStickerSettings_Info: String { return self._s[2898]! } - public var EditTheme_Expand_TopInfo: String { return self._s[2899]! } + public var Call_ReportPlaceholder: String { return self._s[2908]! } + public var Chat_SlowmodeSendError: String { return self._s[2909]! } + public var MaskStickerSettings_Info: String { return self._s[2910]! } + public var EditTheme_Expand_TopInfo: String { return self._s[2911]! } public func GroupInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2900]!, self._r[2900]!, [_0]) + return formatWithArgumentRanges(self._s[2912]!, self._r[2912]!, [_0]) } - public var Checkout_NewCard_PostcodeTitle: String { return self._s[2901]! } - public var Passport_Address_RegionPlaceholder: String { return self._s[2903]! } - public var Contacts_ShareTelegram: String { return self._s[2904]! } - public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[2905]! } - public var Channel_ErrorAccessDenied: String { return self._s[2906]! } - public var UserInfo_ScamBotWarning: String { return self._s[2908]! } - public var Stickers_GroupChooseStickerPack: String { return self._s[2909]! } - public var Call_ConnectionErrorTitle: String { return self._s[2910]! } - public var UserInfo_NotificationsEnable: String { return self._s[2911]! } - public var ArchivedChats_IntroText1: String { return self._s[2912]! } - public var Tour_Text4: String { return self._s[2915]! } - public var WallpaperSearch_Recent: String { return self._s[2916]! } - public var GroupInfo_ScamGroupWarning: String { return self._s[2917]! } - public var Profile_MessageLifetime2s: String { return self._s[2919]! } - public var Appearance_ThemePreview_ChatList_5_Text: String { return self._s[2920]! } - public var Notification_MessageLifetime2s: String { return self._s[2921]! } + public var Checkout_NewCard_PostcodeTitle: String { return self._s[2913]! } + public var Passport_Address_RegionPlaceholder: String { return self._s[2915]! } + public var Contacts_ShareTelegram: String { return self._s[2916]! } + public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[2917]! } + public var Channel_ErrorAccessDenied: String { return self._s[2918]! } + public var UserInfo_ScamBotWarning: String { return self._s[2920]! } + public var Stickers_GroupChooseStickerPack: String { return self._s[2921]! } + public var Call_ConnectionErrorTitle: String { return self._s[2922]! } + public var UserInfo_NotificationsEnable: String { return self._s[2923]! } + public var ArchivedChats_IntroText1: String { return self._s[2924]! } + public var Tour_Text4: String { return self._s[2927]! } + public var WallpaperSearch_Recent: String { return self._s[2928]! } + public var GroupInfo_ScamGroupWarning: String { return self._s[2929]! } + public var Profile_MessageLifetime2s: String { return self._s[2931]! } + public var Appearance_ThemePreview_ChatList_5_Text: String { return self._s[2932]! } + public var Notification_MessageLifetime2s: String { return self._s[2933]! } public func Time_PreciseDate_m10(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2922]!, self._r[2922]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2934]!, self._r[2934]!, [_1, _2, _3]) } - public var Cache_ClearCache: String { return self._s[2923]! } - public var AutoNightTheme_UpdateLocation: String { return self._s[2924]! } - public var Permissions_NotificationsUnreachableText_v0: String { return self._s[2925]! } + public var Cache_ClearCache: String { return self._s[2935]! } + public var AutoNightTheme_UpdateLocation: String { return self._s[2936]! } + public var Permissions_NotificationsUnreachableText_v0: String { return self._s[2937]! } public func Channel_AdminLog_MessageChangedGroupUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2929]!, self._r[2929]!, [_0]) + return formatWithArgumentRanges(self._s[2941]!, self._r[2941]!, [_0]) } public func Conversation_ShareMyPhoneNumber_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2931]!, self._r[2931]!, [_0]) + return formatWithArgumentRanges(self._s[2943]!, self._r[2943]!, [_0]) } - public var LocalGroup_Text: String { return self._s[2932]! } - public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[2933]! } - public var SocksProxySetup_TypeSocks: String { return self._s[2934]! } - public var ChatList_UnarchiveAction: String { return self._s[2935]! } - public var AutoNightTheme_Title: String { return self._s[2936]! } - public var InstantPage_FeedbackButton: String { return self._s[2937]! } - public var Passport_FieldAddress: String { return self._s[2938]! } + public var LocalGroup_Text: String { return self._s[2944]! } + public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[2945]! } + public var SocksProxySetup_TypeSocks: String { return self._s[2946]! } + public var ChatList_UnarchiveAction: String { return self._s[2947]! } + public var AutoNightTheme_Title: String { return self._s[2948]! } + public var InstantPage_FeedbackButton: String { return self._s[2949]! } + public var Passport_FieldAddress: String { return self._s[2950]! } public func Channel_AdminLog_SetSlowmode(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2939]!, self._r[2939]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2951]!, self._r[2951]!, [_1, _2]) } - public var Month_ShortMarch: String { return self._s[2940]! } + public var Month_ShortMarch: String { return self._s[2952]! } public func PUSH_MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2941]!, self._r[2941]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2953]!, self._r[2953]!, [_1, _2]) } - public var SocksProxySetup_UsernamePlaceholder: String { return self._s[2942]! } - public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[2943]! } - public var Passport_FloodError: String { return self._s[2944]! } - public var SecretGif_Title: String { return self._s[2945]! } - public var NotificationSettings_ShowNotificationsAllAccountsInfoOn: String { return self._s[2946]! } - public var ChatList_Context_UnhideArchive: String { return self._s[2947]! } - public var Passport_Language_th: String { return self._s[2949]! } - public var Passport_Address_Address: String { return self._s[2950]! } - public var Login_InvalidLastNameError: String { return self._s[2951]! } - public var Notifications_InAppNotificationsPreview: String { return self._s[2952]! } - public var Notifications_PermissionsUnreachableTitle: String { return self._s[2953]! } - public var ChatList_Context_Archive: String { return self._s[2954]! } - public var SettingsSearch_FAQ: String { return self._s[2955]! } - public var ShareMenu_Send: String { return self._s[2956]! } - public var WallpaperSearch_ColorYellow: String { return self._s[2958]! } - public var Month_GenNovember: String { return self._s[2960]! } - public var SettingsSearch_Synonyms_Appearance_LargeEmoji: String { return self._s[2962]! } + public var SocksProxySetup_UsernamePlaceholder: String { return self._s[2954]! } + public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[2955]! } + public var Passport_FloodError: String { return self._s[2956]! } + public var SecretGif_Title: String { return self._s[2957]! } + public var NotificationSettings_ShowNotificationsAllAccountsInfoOn: String { return self._s[2958]! } + public var ChatList_Context_UnhideArchive: String { return self._s[2959]! } + public var Passport_Language_th: String { return self._s[2961]! } + public var Passport_Address_Address: String { return self._s[2962]! } + public var Login_InvalidLastNameError: String { return self._s[2963]! } + public var Notifications_InAppNotificationsPreview: String { return self._s[2964]! } + public var Notifications_PermissionsUnreachableTitle: String { return self._s[2965]! } + public var ChatList_Context_Archive: String { return self._s[2966]! } + public var SettingsSearch_FAQ: String { return self._s[2967]! } + public var ShareMenu_Send: String { return self._s[2968]! } + public var WallpaperSearch_ColorYellow: String { return self._s[2970]! } + public var Month_GenNovember: String { return self._s[2972]! } + public var SettingsSearch_Synonyms_Appearance_LargeEmoji: String { return self._s[2974]! } public func Conversation_ShareMyPhoneNumberConfirmation(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2963]!, self._r[2963]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2975]!, self._r[2975]!, [_1, _2]) } - public var Conversation_SwipeToReplyHintText: String { return self._s[2964]! } - public var Checkout_Email: String { return self._s[2965]! } - public var NotificationsSound_Tritone: String { return self._s[2966]! } - public var StickerPacksSettings_ManagingHelp: String { return self._s[2968]! } - public var Wallet_ContextMenuCopy: String { return self._s[2970]! } + public var Conversation_SwipeToReplyHintText: String { return self._s[2976]! } + public var Checkout_Email: String { return self._s[2977]! } + public var NotificationsSound_Tritone: String { return self._s[2978]! } + public var StickerPacksSettings_ManagingHelp: String { return self._s[2980]! } + public var Wallet_ContextMenuCopy: String { return self._s[2982]! } public func Wallet_Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2972]!, self._r[2972]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2984]!, self._r[2984]!, [_1, _2, _3]) } public func PUSH_PINNED_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2973]!, self._r[2973]!, [_1]) + return formatWithArgumentRanges(self._s[2985]!, self._r[2985]!, [_1]) } - public var ChangePhoneNumberNumber_Help: String { return self._s[2974]! } + public var ChangePhoneNumberNumber_Help: String { return self._s[2986]! } public func Checkout_LiabilityAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2975]!, self._r[2975]!, [_1, _1, _1, _2]) + return formatWithArgumentRanges(self._s[2987]!, self._r[2987]!, [_1, _1, _1, _2]) } - public var ChatList_UndoArchiveTitle: String { return self._s[2976]! } - public var Notification_Exceptions_Add: String { return self._s[2977]! } - public var DialogList_You: String { return self._s[2978]! } - public var MediaPicker_Send: String { return self._s[2981]! } - public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[2982]! } - public var Appearance_ThemePreview_ChatList_4_Text: String { return self._s[2983]! } - public var Call_AudioRouteSpeaker: String { return self._s[2984]! } - public var Watch_UserInfo_Title: String { return self._s[2985]! } - public var VoiceOver_Chat_PollFinalResults: String { return self._s[2986]! } - public var Appearance_AccentColor: String { return self._s[2988]! } + public var ChatList_UndoArchiveTitle: String { return self._s[2988]! } + public var Notification_Exceptions_Add: String { return self._s[2989]! } + public var DialogList_You: String { return self._s[2990]! } + public var MediaPicker_Send: String { return self._s[2993]! } + public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[2994]! } + public var Appearance_ThemePreview_ChatList_4_Text: String { return self._s[2995]! } + public var Call_AudioRouteSpeaker: String { return self._s[2996]! } + public var Watch_UserInfo_Title: String { return self._s[2997]! } + public var VoiceOver_Chat_PollFinalResults: String { return self._s[2998]! } + public var Appearance_AccentColor: String { return self._s[3000]! } public func Login_EmailPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2989]!, self._r[2989]!, [_0]) + return formatWithArgumentRanges(self._s[3001]!, self._r[3001]!, [_0]) } - public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2990]! } + public var Permissions_ContactsAllowInSettings_v0: String { return self._s[3002]! } public func PUSH_CHANNEL_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2991]!, self._r[2991]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3003]!, self._r[3003]!, [_1, _2]) } - public var Conversation_ClousStorageInfo_Description2: String { return self._s[2992]! } - public var WebSearch_RecentClearConfirmation: String { return self._s[2993]! } - public var Notification_CallOutgoing: String { return self._s[2994]! } - public var PrivacySettings_PasscodeAndFaceId: String { return self._s[2995]! } - public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[2996]! } - public var Call_RecordingDisabledMessage: String { return self._s[2997]! } - public var Message_Game: String { return self._s[2998]! } - public var Conversation_PressVolumeButtonForSound: String { return self._s[2999]! } - public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[3000]! } - public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[3001]! } - public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[3002]! } - public var Date_DialogDateFormat: String { return self._s[3003]! } - public var WallpaperColors_SetCustomColor: String { return self._s[3004]! } - public var Notifications_InAppNotifications: String { return self._s[3005]! } + public var Conversation_ClousStorageInfo_Description2: String { return self._s[3004]! } + public var WebSearch_RecentClearConfirmation: String { return self._s[3005]! } + public var Notification_CallOutgoing: String { return self._s[3006]! } + public var PrivacySettings_PasscodeAndFaceId: String { return self._s[3007]! } + public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[3008]! } + public var Call_RecordingDisabledMessage: String { return self._s[3009]! } + public var Message_Game: String { return self._s[3010]! } + public var Conversation_PressVolumeButtonForSound: String { return self._s[3011]! } + public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[3012]! } + public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[3013]! } + public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[3014]! } + public var Date_DialogDateFormat: String { return self._s[3015]! } + public var WallpaperColors_SetCustomColor: String { return self._s[3016]! } + public var Notifications_InAppNotifications: String { return self._s[3017]! } public func Channel_Management_RemovedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3006]!, self._r[3006]!, [_0]) + return formatWithArgumentRanges(self._s[3018]!, self._r[3018]!, [_0]) } public func Settings_ApplyProxyAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3007]!, self._r[3007]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3019]!, self._r[3019]!, [_1, _2]) } - public var NewContact_Title: String { return self._s[3008]! } + public var NewContact_Title: String { return self._s[3020]! } public func AutoDownloadSettings_UpToForAll(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3009]!, self._r[3009]!, [_0]) + return formatWithArgumentRanges(self._s[3021]!, self._r[3021]!, [_0]) } - public var Conversation_ViewContactDetails: String { return self._s[3010]! } + public var Conversation_ViewContactDetails: String { return self._s[3022]! } public func PUSH_CHANNEL_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3012]!, self._r[3012]!, [_1]) + return formatWithArgumentRanges(self._s[3024]!, self._r[3024]!, [_1]) } - public var Checkout_NewCard_CardholderNameTitle: String { return self._s[3013]! } - public var Passport_Identity_ExpiryDateNone: String { return self._s[3014]! } - public var PrivacySettings_Title: String { return self._s[3015]! } - public var Conversation_SilentBroadcastTooltipOff: String { return self._s[3018]! } - public var GroupRemoved_UsersSectionTitle: String { return self._s[3019]! } - public var VoiceOver_Chat_ContactEmail: String { return self._s[3020]! } - public var Contacts_PhoneNumber: String { return self._s[3021]! } - public var TwoFactorSetup_Password_PlaceholderConfirmPassword: String { return self._s[3023]! } - public var Map_ShowPlaces: String { return self._s[3024]! } - public var ChatAdmins_Title: String { return self._s[3025]! } - public var InstantPage_Reference: String { return self._s[3027]! } - public var Wallet_Info_Updating: String { return self._s[3028]! } - public var ReportGroupLocation_Text: String { return self._s[3029]! } + public var Checkout_NewCard_CardholderNameTitle: String { return self._s[3025]! } + public var Passport_Identity_ExpiryDateNone: String { return self._s[3026]! } + public var PrivacySettings_Title: String { return self._s[3027]! } + public var Conversation_SilentBroadcastTooltipOff: String { return self._s[3030]! } + public var GroupRemoved_UsersSectionTitle: String { return self._s[3031]! } + public var VoiceOver_Chat_ContactEmail: String { return self._s[3032]! } + public var Contacts_PhoneNumber: String { return self._s[3033]! } + public var TwoFactorSetup_Password_PlaceholderConfirmPassword: String { return self._s[3035]! } + public var Map_ShowPlaces: String { return self._s[3036]! } + public var ChatAdmins_Title: String { return self._s[3037]! } + public var InstantPage_Reference: String { return self._s[3039]! } + public var Wallet_Info_Updating: String { return self._s[3040]! } + public var ReportGroupLocation_Text: String { return self._s[3041]! } public func PUSH_CHAT_MESSAGE_FWD(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3030]!, self._r[3030]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3042]!, self._r[3042]!, [_1, _2]) } - public var Camera_FlashOff: String { return self._s[3031]! } - public var Watch_UserInfo_Block: String { return self._s[3032]! } - public var ChatSettings_Stickers: String { return self._s[3033]! } - public var ChatSettings_DownloadInBackground: String { return self._s[3034]! } - public var Appearance_ThemeCarouselTintedNight: String { return self._s[3035]! } + public var Camera_FlashOff: String { return self._s[3043]! } + public var Watch_UserInfo_Block: String { return self._s[3044]! } + public var ChatSettings_Stickers: String { return self._s[3045]! } + public var ChatSettings_DownloadInBackground: String { return self._s[3046]! } + public var Appearance_ThemeCarouselTintedNight: String { return self._s[3047]! } public func UserInfo_BlockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3036]!, self._r[3036]!, [_0]) + return formatWithArgumentRanges(self._s[3048]!, self._r[3048]!, [_0]) } - public var Settings_ViewPhoto: String { return self._s[3037]! } - public var Login_CheckOtherSessionMessages: String { return self._s[3038]! } - public var AutoDownloadSettings_Cellular: String { return self._s[3039]! } - public var Wallet_Created_ExportErrorTitle: String { return self._s[3040]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[3041]! } - public var VoiceOver_MessageContextShare: String { return self._s[3042]! } + public var Settings_ViewPhoto: String { return self._s[3049]! } + public var Login_CheckOtherSessionMessages: String { return self._s[3050]! } + public var AutoDownloadSettings_Cellular: String { return self._s[3051]! } + public var Wallet_Created_ExportErrorTitle: String { return self._s[3052]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[3053]! } + public var VoiceOver_MessageContextShare: String { return self._s[3054]! } public func Target_InviteToGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3044]!, self._r[3044]!, [_0]) - } - public var Privacy_DeleteDrafts: String { return self._s[3045]! } - public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[3046]! } - public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3047]!, self._r[3047]!, [_0]) - } - public var DialogList_SavedMessagesHelp: String { return self._s[3048]! } - public var Wallet_SecureStorageNotAvailable_Title: String { return self._s[3049]! } - public var DialogList_SavedMessages: String { return self._s[3050]! } - public var GroupInfo_UpgradeButton: String { return self._s[3051]! } - public var Appearance_ThemePreview_ChatList_3_Text: String { return self._s[3053]! } - public var DialogList_Pin: String { return self._s[3054]! } - public func ForwardedAuthors2(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3055]!, self._r[3055]!, [_0, _1]) - } - public func Login_PhoneGenericEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3056]!, self._r[3056]!, [_0]) } - public var Notification_Exceptions_AlwaysOn: String { return self._s[3057]! } - public var UserInfo_NotificationsDisable: String { return self._s[3058]! } - public var Paint_Outlined: String { return self._s[3059]! } - public var Activity_PlayingGame: String { return self._s[3060]! } - public var SearchImages_NoImagesFound: String { return self._s[3061]! } - public var SocksProxySetup_ProxyType: String { return self._s[3062]! } - public var AppleWatch_ReplyPresetsHelp: String { return self._s[3064]! } - public var Conversation_ContextMenuCancelSending: String { return self._s[3065]! } - public var Settings_AppLanguage: String { return self._s[3066]! } - public var TwoStepAuth_ResetAccountHelp: String { return self._s[3067]! } - public var Common_ChoosePhoto: String { return self._s[3068]! } - public var CallFeedback_ReasonEcho: String { return self._s[3069]! } - public func PUSH_PINNED_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3070]!, self._r[3070]!, [_1]) + public var Privacy_DeleteDrafts: String { return self._s[3057]! } + public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[3058]! } + public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3059]!, self._r[3059]!, [_0]) } - public var Privacy_Calls_AlwaysAllow: String { return self._s[3071]! } - public var Activity_UploadingVideo: String { return self._s[3072]! } - public var Conversation_WalletRequiredNotNow: String { return self._s[3073]! } - public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[3074]! } - public var NetworkUsageSettings_Wifi: String { return self._s[3075]! } - public var VoiceOver_Editing_ClearText: String { return self._s[3076]! } - public var PUSH_SENDER_YOU: String { return self._s[3077]! } - public var Channel_BanUser_PermissionReadMessages: String { return self._s[3078]! } - public var Checkout_PayWithTouchId: String { return self._s[3079]! } - public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[3080]! } - public func PUSH_LOCKED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { + public var DialogList_SavedMessagesHelp: String { return self._s[3060]! } + public var Wallet_SecureStorageNotAvailable_Title: String { return self._s[3061]! } + public var DialogList_SavedMessages: String { return self._s[3062]! } + public var GroupInfo_UpgradeButton: String { return self._s[3063]! } + public var Appearance_ThemePreview_ChatList_3_Text: String { return self._s[3065]! } + public var DialogList_Pin: String { return self._s[3066]! } + public func ForwardedAuthors2(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3067]!, self._r[3067]!, [_0, _1]) + } + public func Login_PhoneGenericEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3068]!, self._r[3068]!, [_0]) + } + public var Notification_Exceptions_AlwaysOn: String { return self._s[3069]! } + public var UserInfo_NotificationsDisable: String { return self._s[3070]! } + public var Paint_Outlined: String { return self._s[3071]! } + public var Activity_PlayingGame: String { return self._s[3072]! } + public var SearchImages_NoImagesFound: String { return self._s[3073]! } + public var SocksProxySetup_ProxyType: String { return self._s[3074]! } + public var AppleWatch_ReplyPresetsHelp: String { return self._s[3076]! } + public var Conversation_ContextMenuCancelSending: String { return self._s[3077]! } + public var Settings_AppLanguage: String { return self._s[3078]! } + public var TwoStepAuth_ResetAccountHelp: String { return self._s[3079]! } + public var Common_ChoosePhoto: String { return self._s[3080]! } + public var CallFeedback_ReasonEcho: String { return self._s[3081]! } + public func PUSH_PINNED_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3082]!, self._r[3082]!, [_1]) } - public var Notifications_ExceptionsNone: String { return self._s[3083]! } + public var Privacy_Calls_AlwaysAllow: String { return self._s[3083]! } + public var Activity_UploadingVideo: String { return self._s[3084]! } + public var Conversation_WalletRequiredNotNow: String { return self._s[3085]! } + public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[3086]! } + public var NetworkUsageSettings_Wifi: String { return self._s[3087]! } + public var VoiceOver_Editing_ClearText: String { return self._s[3088]! } + public var PUSH_SENDER_YOU: String { return self._s[3089]! } + public var Channel_BanUser_PermissionReadMessages: String { return self._s[3090]! } + public var Checkout_PayWithTouchId: String { return self._s[3091]! } + public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[3092]! } + public func PUSH_LOCKED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3094]!, self._r[3094]!, [_1]) + } + public var Notifications_ExceptionsNone: String { return self._s[3095]! } public func Message_ForwardedMessageShort(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3084]!, self._r[3084]!, [_0]) + return formatWithArgumentRanges(self._s[3096]!, self._r[3096]!, [_0]) } public func PUSH_PINNED_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3085]!, self._r[3085]!, [_1]) + return formatWithArgumentRanges(self._s[3097]!, self._r[3097]!, [_1]) } - public var AuthSessions_IncompleteAttempts: String { return self._s[3087]! } - public var Passport_Address_Region: String { return self._s[3090]! } - public var ChatList_DeleteChat: String { return self._s[3091]! } - public var LogoutOptions_ClearCacheTitle: String { return self._s[3092]! } - public var PhotoEditor_TiltShift: String { return self._s[3093]! } - public var Settings_FAQ_URL: String { return self._s[3094]! } - public var TwoFactorSetup_EmailVerification_ChangeAction: String { return self._s[3095]! } - public var Passport_Language_sl: String { return self._s[3096]! } - public var Settings_PrivacySettings: String { return self._s[3098]! } - public var SharedMedia_TitleLink: String { return self._s[3099]! } - public var Passport_Identity_TypePassportUploadScan: String { return self._s[3100]! } - public var Settings_SetProfilePhoto: String { return self._s[3101]! } - public var Channel_About_Help: String { return self._s[3102]! } - public var Contacts_PermissionsEnable: String { return self._s[3103]! } - public var Wallet_Sending_Title: String { return self._s[3104]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[3105]! } - public var AttachmentMenu_SendAsFiles: String { return self._s[3106]! } - public var CallFeedback_ReasonInterruption: String { return self._s[3108]! } - public var Passport_Address_AddTemporaryRegistration: String { return self._s[3109]! } - public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[3110]! } - public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[3111]! } - public var PrivacySettings_DeleteAccountTitle: String { return self._s[3112]! } - public var AccessDenied_VideoMessageCamera: String { return self._s[3114]! } - public var Map_OpenInYandexMaps: String { return self._s[3116]! } - public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[3117]! } - public var VoiceOver_MessageContextReply: String { return self._s[3118]! } - public var PhotoEditor_SaturationTool: String { return self._s[3119]! } + public var AuthSessions_IncompleteAttempts: String { return self._s[3099]! } + public var Passport_Address_Region: String { return self._s[3102]! } + public var ChatList_DeleteChat: String { return self._s[3103]! } + public var LogoutOptions_ClearCacheTitle: String { return self._s[3104]! } + public var PhotoEditor_TiltShift: String { return self._s[3105]! } + public var Settings_FAQ_URL: String { return self._s[3106]! } + public var TwoFactorSetup_EmailVerification_ChangeAction: String { return self._s[3107]! } + public var Passport_Language_sl: String { return self._s[3108]! } + public var Settings_PrivacySettings: String { return self._s[3110]! } + public var SharedMedia_TitleLink: String { return self._s[3111]! } + public var Passport_Identity_TypePassportUploadScan: String { return self._s[3112]! } + public var Settings_SetProfilePhoto: String { return self._s[3113]! } + public var Channel_About_Help: String { return self._s[3114]! } + public var Contacts_PermissionsEnable: String { return self._s[3115]! } + public var Wallet_Sending_Title: String { return self._s[3116]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[3117]! } + public var AttachmentMenu_SendAsFiles: String { return self._s[3118]! } + public var CallFeedback_ReasonInterruption: String { return self._s[3120]! } + public var Passport_Address_AddTemporaryRegistration: String { return self._s[3121]! } + public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[3122]! } + public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[3123]! } + public var PrivacySettings_DeleteAccountTitle: String { return self._s[3124]! } + public var AccessDenied_VideoMessageCamera: String { return self._s[3126]! } + public var Map_OpenInYandexMaps: String { return self._s[3128]! } + public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[3129]! } + public var VoiceOver_MessageContextReply: String { return self._s[3130]! } + public var PhotoEditor_SaturationTool: String { return self._s[3131]! } public func PUSH_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3120]!, self._r[3120]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3132]!, self._r[3132]!, [_1, _2]) } - public var PrivacyPhoneNumberSettings_CustomHelp: String { return self._s[3121]! } - public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[3122]! } - public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[3123]! } - public var Appearance_TextSize: String { return self._s[3124]! } + public var PrivacyPhoneNumberSettings_CustomHelp: String { return self._s[3133]! } + public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[3134]! } + public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[3135]! } + public var Appearance_TextSize: String { return self._s[3136]! } public func LOCAL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3125]!, self._r[3125]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[3137]!, self._r[3137]!, [_1, "\(_2)"]) } - public var Appearance_ThemePreview_ChatList_2_Text: String { return self._s[3126]! } - public var Channel_Username_InvalidTooShort: String { return self._s[3128]! } - public var SettingsSearch_Synonyms_Wallet: String { return self._s[3129]! } + public var Appearance_ThemePreview_ChatList_2_Text: String { return self._s[3138]! } + public var Channel_Username_InvalidTooShort: String { return self._s[3140]! } + public var SettingsSearch_Synonyms_Wallet: String { return self._s[3141]! } public func Group_OwnershipTransfer_DescriptionInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3130]!, self._r[3130]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3142]!, self._r[3142]!, [_1, _2]) } public func PUSH_CHAT_MESSAGE_GAME(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3131]!, self._r[3131]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3143]!, self._r[3143]!, [_1, _2, _3]) } - public var GroupInfo_PublicLinkAdd: String { return self._s[3132]! } - public var Passport_PassportInformation: String { return self._s[3135]! } - public var Theme_Unsupported: String { return self._s[3136]! } - public var WatchRemote_AlertTitle: String { return self._s[3137]! } - public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[3138]! } - public var ConvertToSupergroup_HelpText: String { return self._s[3140]! } + public var GroupInfo_PublicLinkAdd: String { return self._s[3144]! } + public var Passport_PassportInformation: String { return self._s[3147]! } + public var Theme_Unsupported: String { return self._s[3148]! } + public var WatchRemote_AlertTitle: String { return self._s[3149]! } + public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[3150]! } + public var ConvertToSupergroup_HelpText: String { return self._s[3152]! } public func Time_MonthOfYear_m7(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3141]!, self._r[3141]!, [_0]) + return formatWithArgumentRanges(self._s[3153]!, self._r[3153]!, [_0]) } public func PUSH_PHONE_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3142]!, self._r[3142]!, [_1]) + return formatWithArgumentRanges(self._s[3154]!, self._r[3154]!, [_1]) } - public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[3143]! } - public var Wallet_Navigation_Done: String { return self._s[3145]! } - public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[3146]! } - public var AccessDenied_CameraDisabled: String { return self._s[3147]! } + public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[3155]! } + public var Wallet_Navigation_Done: String { return self._s[3157]! } + public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[3158]! } + public var AccessDenied_CameraDisabled: String { return self._s[3159]! } public func Channel_Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3148]!, self._r[3148]!, [_0]) + return formatWithArgumentRanges(self._s[3160]!, self._r[3160]!, [_0]) } - public var PhotoEditor_ContrastTool: String { return self._s[3151]! } + public var PhotoEditor_ContrastTool: String { return self._s[3163]! } public func PUSH_PINNED_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3152]!, self._r[3152]!, [_1]) + return formatWithArgumentRanges(self._s[3164]!, self._r[3164]!, [_1]) } - public var DialogList_Draft: String { return self._s[3153]! } - public var Privacy_TopPeersDelete: String { return self._s[3155]! } - public var LoginPassword_PasswordPlaceholder: String { return self._s[3156]! } - public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[3157]! } - public var WebSearch_RecentSectionClear: String { return self._s[3158]! } - public var EditTheme_ErrorInvalidCharacters: String { return self._s[3159]! } - public var Watch_ChatList_NoConversationsTitle: String { return self._s[3161]! } - public var Common_Done: String { return self._s[3163]! } - public var AuthSessions_EmptyText: String { return self._s[3164]! } - public var Conversation_ShareBotContactConfirmation: String { return self._s[3165]! } - public var Tour_Title5: String { return self._s[3166]! } - public var Wallet_Settings_Title: String { return self._s[3167]! } + public var DialogList_Draft: String { return self._s[3165]! } + public var Wallet_Configuration_BlockchainIdInfo: String { return self._s[3166]! } + public var Privacy_TopPeersDelete: String { return self._s[3168]! } + public var LoginPassword_PasswordPlaceholder: String { return self._s[3169]! } + public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[3170]! } + public var WebSearch_RecentSectionClear: String { return self._s[3171]! } + public var EditTheme_ErrorInvalidCharacters: String { return self._s[3172]! } + public var Watch_ChatList_NoConversationsTitle: String { return self._s[3174]! } + public var Common_Done: String { return self._s[3176]! } + public var AuthSessions_EmptyText: String { return self._s[3177]! } + public var Wallet_Configuration_BlockchainNameChangedTitle: String { return self._s[3178]! } + public var Conversation_ShareBotContactConfirmation: String { return self._s[3179]! } + public var Tour_Title5: String { return self._s[3180]! } + public var Wallet_Settings_Title: String { return self._s[3181]! } public func Map_DirectionsDriveEta(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3168]!, self._r[3168]!, [_0]) + return formatWithArgumentRanges(self._s[3182]!, self._r[3182]!, [_0]) } - public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[3169]! } - public var Conversation_LinkDialogSave: String { return self._s[3170]! } - public var GroupInfo_ActionRestrict: String { return self._s[3171]! } - public var Checkout_Title: String { return self._s[3172]! } - public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[3174]! } - public var Channel_AdminLog_CanChangeInfo: String { return self._s[3176]! } - public var Notification_RenamedGroup: String { return self._s[3177]! } - public var PeopleNearby_Groups: String { return self._s[3178]! } - public var Checkout_PayWithFaceId: String { return self._s[3179]! } - public var Channel_BanList_BlockedTitle: String { return self._s[3180]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[3182]! } - public var Checkout_WebConfirmation_Title: String { return self._s[3183]! } - public var Notifications_MessageNotificationsAlert: String { return self._s[3184]! } + public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[3183]! } + public var Conversation_LinkDialogSave: String { return self._s[3184]! } + public var GroupInfo_ActionRestrict: String { return self._s[3185]! } + public var Checkout_Title: String { return self._s[3186]! } + public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[3188]! } + public var Channel_AdminLog_CanChangeInfo: String { return self._s[3190]! } + public var Notification_RenamedGroup: String { return self._s[3191]! } + public var PeopleNearby_Groups: String { return self._s[3192]! } + public var Checkout_PayWithFaceId: String { return self._s[3193]! } + public var Channel_BanList_BlockedTitle: String { return self._s[3194]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[3196]! } + public var Checkout_WebConfirmation_Title: String { return self._s[3197]! } + public var Notifications_MessageNotificationsAlert: String { return self._s[3198]! } public func Activity_RemindAboutGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3185]!, self._r[3185]!, [_0]) - } - public var Profile_AddToExisting: String { return self._s[3187]! } - public func Profile_CreateEncryptedChatOutdatedError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3188]!, self._r[3188]!, [_0, _1]) - } - public var Cache_Files: String { return self._s[3190]! } - public var Permissions_PrivacyPolicy: String { return self._s[3191]! } - public var SocksProxySetup_ConnectAndSave: String { return self._s[3192]! } - public var UserInfo_NotificationsDefaultDisabled: String { return self._s[3193]! } - public var AutoDownloadSettings_TypeContacts: String { return self._s[3195]! } - public var Appearance_ThemePreview_ChatList_1_Text: String { return self._s[3197]! } - public var Calls_NoCallsPlaceholder: String { return self._s[3198]! } - public func Wallet_Receive_ShareInvoiceUrlInfo(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3199]!, self._r[3199]!, [_0]) } - public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[3200]! } - public var VoiceOver_AttachMedia: String { return self._s[3202]! } - public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[3203]! } + public var Profile_AddToExisting: String { return self._s[3201]! } + public func Profile_CreateEncryptedChatOutdatedError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3202]!, self._r[3202]!, [_0, _1]) + } + public var Cache_Files: String { return self._s[3204]! } + public var Permissions_PrivacyPolicy: String { return self._s[3205]! } + public var SocksProxySetup_ConnectAndSave: String { return self._s[3206]! } + public var UserInfo_NotificationsDefaultDisabled: String { return self._s[3207]! } + public var AutoDownloadSettings_TypeContacts: String { return self._s[3209]! } + public var Appearance_ThemePreview_ChatList_1_Text: String { return self._s[3211]! } + public var Calls_NoCallsPlaceholder: String { return self._s[3212]! } + public func Wallet_Receive_ShareInvoiceUrlInfo(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3213]!, self._r[3213]!, [_0]) + } + public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[3214]! } + public var VoiceOver_AttachMedia: String { return self._s[3216]! } + public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[3217]! } public func PUSH_CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3204]!, self._r[3204]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3218]!, self._r[3218]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[3205]! } - public var Conversation_SetReminder_Title: String { return self._s[3206]! } - public var Passport_FieldAddressHelp: String { return self._s[3207]! } - public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[3208]! } - public var PUSH_REMINDER_TITLE: String { return self._s[3209]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[3219]! } + public var Conversation_SetReminder_Title: String { return self._s[3220]! } + public var Passport_FieldAddressHelp: String { return self._s[3221]! } + public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[3222]! } + public var PUSH_REMINDER_TITLE: String { return self._s[3223]! } public func Login_TermsOfService_ProceedBot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3210]!, self._r[3210]!, [_0]) + return formatWithArgumentRanges(self._s[3224]!, self._r[3224]!, [_0]) } - public var Channel_AdminLog_EmptyTitle: String { return self._s[3211]! } - public var Privacy_Calls_NeverAllow_Title: String { return self._s[3212]! } - public var Login_UnknownError: String { return self._s[3213]! } - public var Group_UpgradeNoticeText2: String { return self._s[3216]! } - public var Watch_Compose_AddContact: String { return self._s[3217]! } - public var Web_Error: String { return self._s[3218]! } - public var Gif_Search: String { return self._s[3219]! } - public var Profile_MessageLifetime1h: String { return self._s[3220]! } - public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[3221]! } - public var Channel_Username_CheckingUsername: String { return self._s[3222]! } - public var CallFeedback_ReasonSilentRemote: String { return self._s[3223]! } - public var AutoDownloadSettings_TypeChannels: String { return self._s[3224]! } - public var Channel_AboutItem: String { return self._s[3225]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[3227]! } - public var VoiceOver_Chat_VoiceMessage: String { return self._s[3228]! } - public var GroupInfo_SharedMedia: String { return self._s[3229]! } + public var Channel_AdminLog_EmptyTitle: String { return self._s[3225]! } + public var Privacy_Calls_NeverAllow_Title: String { return self._s[3226]! } + public var Login_UnknownError: String { return self._s[3227]! } + public var Group_UpgradeNoticeText2: String { return self._s[3230]! } + public var Watch_Compose_AddContact: String { return self._s[3231]! } + public var Web_Error: String { return self._s[3232]! } + public var Gif_Search: String { return self._s[3233]! } + public var Profile_MessageLifetime1h: String { return self._s[3234]! } + public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[3235]! } + public var Channel_Username_CheckingUsername: String { return self._s[3236]! } + public var CallFeedback_ReasonSilentRemote: String { return self._s[3237]! } + public var AutoDownloadSettings_TypeChannels: String { return self._s[3238]! } + public var Channel_AboutItem: String { return self._s[3239]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[3241]! } + public var VoiceOver_Chat_VoiceMessage: String { return self._s[3242]! } + public var GroupInfo_SharedMedia: String { return self._s[3243]! } public func Channel_AdminLog_MessagePromotedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3230]!, self._r[3230]!, [_1]) + return formatWithArgumentRanges(self._s[3244]!, self._r[3244]!, [_1]) } - public var Call_PhoneCallInProgressMessage: String { return self._s[3231]! } + public var Call_PhoneCallInProgressMessage: String { return self._s[3245]! } public func PUSH_CHANNEL_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3232]!, self._r[3232]!, [_1]) + return formatWithArgumentRanges(self._s[3246]!, self._r[3246]!, [_1]) } - public var ChatList_UndoArchiveRevealedText: String { return self._s[3233]! } - public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[3234]! } - public var Conversation_SearchByName_Placeholder: String { return self._s[3235]! } - public var CreatePoll_AddOption: String { return self._s[3236]! } - public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[3237]! } - public var Group_UpgradeNoticeHeader: String { return self._s[3238]! } - public var Channel_Management_AddModerator: String { return self._s[3239]! } - public var AutoDownloadSettings_MaxFileSize: String { return self._s[3240]! } - public var StickerPacksSettings_ShowStickersButton: String { return self._s[3241]! } - public var Wallet_Info_RefreshErrorNetworkText: String { return self._s[3242]! } - public var NotificationsSound_Hello: String { return self._s[3244]! } - public var SocksProxySetup_SavedProxies: String { return self._s[3245]! } - public var Channel_Stickers_Placeholder: String { return self._s[3247]! } + public var ChatList_UndoArchiveRevealedText: String { return self._s[3247]! } + public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[3248]! } + public var Conversation_SearchByName_Placeholder: String { return self._s[3249]! } + public var CreatePoll_AddOption: String { return self._s[3250]! } + public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[3251]! } + public var Group_UpgradeNoticeHeader: String { return self._s[3252]! } + public var Channel_Management_AddModerator: String { return self._s[3253]! } + public var AutoDownloadSettings_MaxFileSize: String { return self._s[3254]! } + public var StickerPacksSettings_ShowStickersButton: String { return self._s[3255]! } + public var Wallet_Info_RefreshErrorNetworkText: String { return self._s[3256]! } + public var NotificationsSound_Hello: String { return self._s[3258]! } + public var SocksProxySetup_SavedProxies: String { return self._s[3259]! } + public var Channel_Stickers_Placeholder: String { return self._s[3261]! } public func Login_EmailCodeBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3248]!, self._r[3248]!, [_0]) + return formatWithArgumentRanges(self._s[3262]!, self._r[3262]!, [_0]) } - public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[3249]! } - public var Channel_Management_AddModeratorHelp: String { return self._s[3250]! } - public var ContactInfo_BirthdayLabel: String { return self._s[3251]! } - public var ChangePhoneNumberCode_RequestingACall: String { return self._s[3252]! } - public var AutoDownloadSettings_Channels: String { return self._s[3253]! } - public var Passport_Language_mn: String { return self._s[3254]! } - public var Notifications_ResetAllNotificationsHelp: String { return self._s[3257]! } - public var GroupInfo_Permissions_SlowmodeValue_Off: String { return self._s[3258]! } - public var Passport_Language_ja: String { return self._s[3260]! } - public var Settings_About_Title: String { return self._s[3261]! } - public var Settings_NotificationsAndSounds: String { return self._s[3262]! } - public var ChannelInfo_DeleteGroup: String { return self._s[3263]! } - public var Settings_BlockedUsers: String { return self._s[3264]! } + public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[3263]! } + public var Channel_Management_AddModeratorHelp: String { return self._s[3264]! } + public var ContactInfo_BirthdayLabel: String { return self._s[3265]! } + public var ChangePhoneNumberCode_RequestingACall: String { return self._s[3266]! } + public var AutoDownloadSettings_Channels: String { return self._s[3267]! } + public var Passport_Language_mn: String { return self._s[3268]! } + public var Notifications_ResetAllNotificationsHelp: String { return self._s[3271]! } + public var GroupInfo_Permissions_SlowmodeValue_Off: String { return self._s[3272]! } + public var Passport_Language_ja: String { return self._s[3274]! } + public var Settings_About_Title: String { return self._s[3275]! } + public var Settings_NotificationsAndSounds: String { return self._s[3276]! } + public var ChannelInfo_DeleteGroup: String { return self._s[3277]! } + public var Settings_BlockedUsers: String { return self._s[3278]! } public func Time_MonthOfYear_m4(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3265]!, self._r[3265]!, [_0]) + return formatWithArgumentRanges(self._s[3279]!, self._r[3279]!, [_0]) } - public var EditTheme_Create_Preview_OutgoingText: String { return self._s[3266]! } - public var Wallet_Weekday_Today: String { return self._s[3267]! } - public var AutoDownloadSettings_PreloadVideo: String { return self._s[3268]! } - public var Widget_ApplicationLocked: String { return self._s[3269]! } - public var Passport_Address_AddResidentialAddress: String { return self._s[3270]! } - public var Channel_Username_Title: String { return self._s[3271]! } + public var EditTheme_Create_Preview_OutgoingText: String { return self._s[3280]! } + public var Wallet_Weekday_Today: String { return self._s[3281]! } + public var AutoDownloadSettings_PreloadVideo: String { return self._s[3282]! } + public var Widget_ApplicationLocked: String { return self._s[3283]! } + public var Passport_Address_AddResidentialAddress: String { return self._s[3284]! } + public var Channel_Username_Title: String { return self._s[3285]! } public func Notification_RemovedGroupPhoto(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3272]!, self._r[3272]!, [_0]) + return formatWithArgumentRanges(self._s[3286]!, self._r[3286]!, [_0]) } - public var AttachmentMenu_File: String { return self._s[3274]! } - public var AppleWatch_Title: String { return self._s[3275]! } - public var Activity_RecordingVideoMessage: String { return self._s[3276]! } + public var AttachmentMenu_File: String { return self._s[3288]! } + public var AppleWatch_Title: String { return self._s[3289]! } + public var Activity_RecordingVideoMessage: String { return self._s[3290]! } public func Channel_DiscussionGroup_PublicChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3277]!, self._r[3277]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3291]!, self._r[3291]!, [_1, _2]) } - public var Weekday_Saturday: String { return self._s[3278]! } - public var WallpaperPreview_SwipeColorsTopText: String { return self._s[3279]! } - public var Profile_CreateEncryptedChatError: String { return self._s[3280]! } - public var Common_Next: String { return self._s[3282]! } - public var Channel_Stickers_YourStickers: String { return self._s[3284]! } - public var Message_Theme: String { return self._s[3285]! } - public var Call_AudioRouteHeadphones: String { return self._s[3286]! } - public var TwoStepAuth_EnterPasswordForgot: String { return self._s[3288]! } - public var Watch_Contacts_NoResults: String { return self._s[3290]! } - public var PhotoEditor_TintTool: String { return self._s[3293]! } - public var LoginPassword_ResetAccount: String { return self._s[3295]! } - public var Settings_SavedMessages: String { return self._s[3296]! } - public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[3297]! } - public var Bot_GenericSupportStatus: String { return self._s[3298]! } - public var StickerPack_Add: String { return self._s[3299]! } - public var Checkout_TotalAmount: String { return self._s[3300]! } - public var Your_cards_number_is_invalid: String { return self._s[3301]! } - public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[3302]! } - public var VoiceOver_Chat_VideoMessage: String { return self._s[3303]! } + public var Weekday_Saturday: String { return self._s[3292]! } + public var WallpaperPreview_SwipeColorsTopText: String { return self._s[3293]! } + public var Profile_CreateEncryptedChatError: String { return self._s[3294]! } + public var Common_Next: String { return self._s[3296]! } + public var Channel_Stickers_YourStickers: String { return self._s[3298]! } + public var Message_Theme: String { return self._s[3299]! } + public var Call_AudioRouteHeadphones: String { return self._s[3300]! } + public var TwoStepAuth_EnterPasswordForgot: String { return self._s[3302]! } + public var Watch_Contacts_NoResults: String { return self._s[3304]! } + public var PhotoEditor_TintTool: String { return self._s[3307]! } + public var LoginPassword_ResetAccount: String { return self._s[3309]! } + public var Settings_SavedMessages: String { return self._s[3310]! } + public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[3311]! } + public var Bot_GenericSupportStatus: String { return self._s[3312]! } + public var StickerPack_Add: String { return self._s[3313]! } + public var Checkout_TotalAmount: String { return self._s[3314]! } + public var Your_cards_number_is_invalid: String { return self._s[3315]! } + public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[3316]! } + public var VoiceOver_Chat_VideoMessage: String { return self._s[3317]! } public func ChangePhoneNumberCode_CallTimer(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3304]!, self._r[3304]!, [_0]) + return formatWithArgumentRanges(self._s[3318]!, self._r[3318]!, [_0]) } public func GroupPermission_AddedInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3305]!, self._r[3305]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3319]!, self._r[3319]!, [_1, _2]) } - public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[3306]! } + public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[3320]! } public func PUSH_CHAT_PHOTO_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3308]!, self._r[3308]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3322]!, self._r[3322]!, [_1, _2]) } public func Conversation_RestrictedTextTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3309]!, self._r[3309]!, [_0]) + return formatWithArgumentRanges(self._s[3323]!, self._r[3323]!, [_0]) } - public var GroupInfo_InviteLink_ShareLink: String { return self._s[3310]! } - public var StickerPack_Share: String { return self._s[3311]! } - public var Passport_DeleteAddress: String { return self._s[3312]! } - public var Settings_Passport: String { return self._s[3313]! } - public var SharedMedia_EmptyFilesText: String { return self._s[3314]! } - public var Conversation_DeleteMessagesForMe: String { return self._s[3315]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[3316]! } - public var Contacts_PermissionsText: String { return self._s[3317]! } - public var Group_Setup_HistoryVisible: String { return self._s[3318]! } - public var Wallet_Month_ShortDecember: String { return self._s[3320]! } - public var Passport_Address_AddRentalAgreement: String { return self._s[3321]! } - public var SocksProxySetup_Title: String { return self._s[3322]! } - public var Notification_Mute1h: String { return self._s[3323]! } + public var GroupInfo_InviteLink_ShareLink: String { return self._s[3324]! } + public var StickerPack_Share: String { return self._s[3325]! } + public var Passport_DeleteAddress: String { return self._s[3326]! } + public var Settings_Passport: String { return self._s[3327]! } + public var SharedMedia_EmptyFilesText: String { return self._s[3328]! } + public var Conversation_DeleteMessagesForMe: String { return self._s[3329]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[3330]! } + public var Contacts_PermissionsText: String { return self._s[3331]! } + public var Group_Setup_HistoryVisible: String { return self._s[3332]! } + public var Wallet_Month_ShortDecember: String { return self._s[3334]! } + public var Passport_Address_AddRentalAgreement: String { return self._s[3335]! } + public var SocksProxySetup_Title: String { return self._s[3336]! } + public var Notification_Mute1h: String { return self._s[3337]! } public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3324]!, self._r[3324]!, [_0]) + return formatWithArgumentRanges(self._s[3338]!, self._r[3338]!, [_0]) } - public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[3325]! } + public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[3339]! } public func PUSH_PINNED_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3326]!, self._r[3326]!, [_1]) + return formatWithArgumentRanges(self._s[3340]!, self._r[3340]!, [_1]) } - public var FastTwoStepSetup_PasswordSection: String { return self._s[3327]! } - public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[3330]! } - public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[3332]! } - public var DialogList_NoMessagesText: String { return self._s[3333]! } - public var Privacy_ContactsResetConfirmation: String { return self._s[3334]! } - public var Privacy_Calls_P2PHelp: String { return self._s[3335]! } - public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[3337]! } - public var Your_cards_expiration_year_is_invalid: String { return self._s[3338]! } - public var Common_TakePhotoOrVideo: String { return self._s[3339]! } - public var Wallet_Words_Text: String { return self._s[3340]! } - public var Call_StatusBusy: String { return self._s[3341]! } - public var Conversation_PinnedMessage: String { return self._s[3342]! } - public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[3343]! } - public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[3344]! } - public var Undo_ChatCleared: String { return self._s[3345]! } - public var AppleWatch_ReplyPresets: String { return self._s[3346]! } - public var Passport_DiscardMessageDescription: String { return self._s[3348]! } - public var Login_NetworkError: String { return self._s[3349]! } + public var FastTwoStepSetup_PasswordSection: String { return self._s[3341]! } + public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[3344]! } + public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[3346]! } + public var DialogList_NoMessagesText: String { return self._s[3347]! } + public var Privacy_ContactsResetConfirmation: String { return self._s[3348]! } + public var Privacy_Calls_P2PHelp: String { return self._s[3349]! } + public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[3351]! } + public var Your_cards_expiration_year_is_invalid: String { return self._s[3352]! } + public var Common_TakePhotoOrVideo: String { return self._s[3353]! } + public var Wallet_Words_Text: String { return self._s[3354]! } + public var Call_StatusBusy: String { return self._s[3355]! } + public var Conversation_PinnedMessage: String { return self._s[3356]! } + public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[3357]! } + public var Wallet_Configuration_BlockchainNameChangedProceed: String { return self._s[3358]! } + public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[3359]! } + public var Undo_ChatCleared: String { return self._s[3360]! } + public var AppleWatch_ReplyPresets: String { return self._s[3361]! } + public var Passport_DiscardMessageDescription: String { return self._s[3363]! } + public var Login_NetworkError: String { return self._s[3364]! } public func Notification_PinnedRoundMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3350]!, self._r[3350]!, [_0]) + return formatWithArgumentRanges(self._s[3365]!, self._r[3365]!, [_0]) } public func Channel_AdminLog_MessageRemovedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3351]!, self._r[3351]!, [_0]) + return formatWithArgumentRanges(self._s[3366]!, self._r[3366]!, [_0]) } - public var SocksProxySetup_PasswordPlaceholder: String { return self._s[3352]! } - public var Wallet_WordCheck_ViewWords: String { return self._s[3354]! } - public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[3355]! } + public var SocksProxySetup_PasswordPlaceholder: String { return self._s[3367]! } + public var Wallet_WordCheck_ViewWords: String { return self._s[3369]! } + public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[3370]! } public func Watch_LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3357]!, self._r[3357]!, [_0]) - } - public var Call_ConnectionErrorMessage: String { return self._s[3358]! } - public var VoiceOver_Chat_Music: String { return self._s[3359]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsSound: String { return self._s[3360]! } - public var Compose_GroupTokenListPlaceholder: String { return self._s[3362]! } - public var ConversationMedia_Title: String { return self._s[3363]! } - public var EncryptionKey_Title: String { return self._s[3365]! } - public var TwoStepAuth_EnterPasswordTitle: String { return self._s[3366]! } - public var Notification_Exceptions_AddException: String { return self._s[3367]! } - public var PrivacySettings_BlockedPeersEmpty: String { return self._s[3368]! } - public var Profile_MessageLifetime1m: String { return self._s[3369]! } - public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3370]!, self._r[3370]!, [_1]) - } - public var Month_GenMay: String { return self._s[3371]! } - public func LiveLocationUpdated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3372]!, self._r[3372]!, [_0]) } - public var PeopleNearby_Users: String { return self._s[3373]! } - public var Wallet_Send_AddressInfo: String { return self._s[3374]! } - public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[3375]! } - public var AutoDownloadSettings_ResetSettings: String { return self._s[3376]! } + public var Call_ConnectionErrorMessage: String { return self._s[3373]! } + public var VoiceOver_Chat_Music: String { return self._s[3374]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsSound: String { return self._s[3375]! } + public var Compose_GroupTokenListPlaceholder: String { return self._s[3377]! } + public var ConversationMedia_Title: String { return self._s[3378]! } + public var EncryptionKey_Title: String { return self._s[3380]! } + public var TwoStepAuth_EnterPasswordTitle: String { return self._s[3381]! } + public var Notification_Exceptions_AddException: String { return self._s[3382]! } + public var PrivacySettings_BlockedPeersEmpty: String { return self._s[3383]! } + public var Profile_MessageLifetime1m: String { return self._s[3384]! } + public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3385]!, self._r[3385]!, [_1]) + } + public var Month_GenMay: String { return self._s[3386]! } + public func LiveLocationUpdated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3387]!, self._r[3387]!, [_0]) + } + public var PeopleNearby_Users: String { return self._s[3388]! } + public var Wallet_Send_AddressInfo: String { return self._s[3389]! } + public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[3390]! } + public var AutoDownloadSettings_ResetSettings: String { return self._s[3391]! } public func Wallet_Updated_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3378]!, self._r[3378]!, [_0]) + return formatWithArgumentRanges(self._s[3393]!, self._r[3393]!, [_0]) } - public var Conversation_EmptyPlaceholder: String { return self._s[3379]! } - public var Passport_Address_AddPassportRegistration: String { return self._s[3380]! } - public var Notifications_ChannelNotificationsAlert: String { return self._s[3381]! } - public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[3382]! } - public var Camera_TapAndHoldForVideo: String { return self._s[3383]! } - public var Channel_JoinChannel: String { return self._s[3385]! } - public var Appearance_Animations: String { return self._s[3388]! } + public var Conversation_EmptyPlaceholder: String { return self._s[3394]! } + public var Passport_Address_AddPassportRegistration: String { return self._s[3395]! } + public var Notifications_ChannelNotificationsAlert: String { return self._s[3396]! } + public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[3397]! } + public var Camera_TapAndHoldForVideo: String { return self._s[3398]! } + public var Channel_JoinChannel: String { return self._s[3400]! } + public var Appearance_Animations: String { return self._s[3403]! } public func Notification_MessageLifetimeChanged(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3389]!, self._r[3389]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3404]!, self._r[3404]!, [_1, _2]) } - public var Stickers_GroupStickers: String { return self._s[3391]! } - public var Appearance_ShareTheme: String { return self._s[3392]! } - public var TwoFactorSetup_Hint_Placeholder: String { return self._s[3393]! } - public var ConvertToSupergroup_HelpTitle: String { return self._s[3395]! } - public var Passport_Address_Street: String { return self._s[3396]! } - public var Conversation_AddContact: String { return self._s[3397]! } - public var Login_PhonePlaceholder: String { return self._s[3398]! } - public var Channel_Members_InviteLink: String { return self._s[3400]! } - public var Bot_Stop: String { return self._s[3401]! } - public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[3403]! } - public var Notification_PassportValueAddress: String { return self._s[3404]! } - public var Month_ShortJuly: String { return self._s[3405]! } - public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[3406]! } - public var Channel_AdminLog_BanSendMedia: String { return self._s[3407]! } - public var Passport_Identity_ReverseSide: String { return self._s[3408]! } - public var Watch_Stickers_Recents: String { return self._s[3411]! } - public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[3413]! } - public var Map_SendThisLocation: String { return self._s[3414]! } + public var Stickers_GroupStickers: String { return self._s[3406]! } + public var Appearance_ShareTheme: String { return self._s[3407]! } + public var TwoFactorSetup_Hint_Placeholder: String { return self._s[3408]! } + public var ConvertToSupergroup_HelpTitle: String { return self._s[3410]! } + public var Passport_Address_Street: String { return self._s[3411]! } + public var Conversation_AddContact: String { return self._s[3412]! } + public var Login_PhonePlaceholder: String { return self._s[3413]! } + public var Channel_Members_InviteLink: String { return self._s[3415]! } + public var Bot_Stop: String { return self._s[3416]! } + public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[3418]! } + public var Notification_PassportValueAddress: String { return self._s[3419]! } + public var Month_ShortJuly: String { return self._s[3420]! } + public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[3421]! } + public var Channel_AdminLog_BanSendMedia: String { return self._s[3422]! } + public var Passport_Identity_ReverseSide: String { return self._s[3423]! } + public var Watch_Stickers_Recents: String { return self._s[3426]! } + public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[3428]! } + public var Map_SendThisLocation: String { return self._s[3429]! } public func Time_MonthOfYear_m1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3415]!, self._r[3415]!, [_0]) + return formatWithArgumentRanges(self._s[3430]!, self._r[3430]!, [_0]) } public func InviteText_SingleContact(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3416]!, self._r[3416]!, [_0]) + return formatWithArgumentRanges(self._s[3431]!, self._r[3431]!, [_0]) } - public var ConvertToSupergroup_Note: String { return self._s[3417]! } - public var Wallet_Intro_NotNow: String { return self._s[3418]! } + public var ConvertToSupergroup_Note: String { return self._s[3432]! } + public var Wallet_Intro_NotNow: String { return self._s[3433]! } public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3419]!, self._r[3419]!, [_0]) + return formatWithArgumentRanges(self._s[3434]!, self._r[3434]!, [_0]) } - public var NetworkUsageSettings_GeneralDataSection: String { return self._s[3420]! } + public var NetworkUsageSettings_GeneralDataSection: String { return self._s[3435]! } public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3421]!, self._r[3421]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3436]!, self._r[3436]!, [_0, _1]) } - public var Login_CallRequestState3: String { return self._s[3423]! } - public var Wallpaper_SearchShort: String { return self._s[3424]! } - public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[3426]! } - public var PasscodeSettings_UnlockWithFaceId: String { return self._s[3427]! } - public var Channel_BotDoesntSupportGroups: String { return self._s[3428]! } + public var Login_CallRequestState3: String { return self._s[3438]! } + public var Wallpaper_SearchShort: String { return self._s[3439]! } + public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[3441]! } + public var PasscodeSettings_UnlockWithFaceId: String { return self._s[3442]! } + public var Channel_BotDoesntSupportGroups: String { return self._s[3443]! } public func PUSH_CHAT_MESSAGE_GEOLIVE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3429]!, self._r[3429]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3444]!, self._r[3444]!, [_1, _2]) } - public var Channel_AdminLogFilter_Title: String { return self._s[3430]! } - public var Notifications_GroupNotificationsExceptions: String { return self._s[3434]! } + public var Channel_AdminLogFilter_Title: String { return self._s[3445]! } + public var Notifications_GroupNotificationsExceptions: String { return self._s[3449]! } public func FileSize_B(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3435]!, self._r[3435]!, [_0]) + return formatWithArgumentRanges(self._s[3450]!, self._r[3450]!, [_0]) } - public var Passport_CorrectErrors: String { return self._s[3436]! } - public var VoiceOver_Chat_YourAnonymousPoll: String { return self._s[3437]! } + public var Passport_CorrectErrors: String { return self._s[3451]! } + public var VoiceOver_Chat_YourAnonymousPoll: String { return self._s[3452]! } public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3438]!, self._r[3438]!, [_0]) + return formatWithArgumentRanges(self._s[3453]!, self._r[3453]!, [_0]) } - public var Map_SendMyCurrentLocation: String { return self._s[3439]! } - public var Channel_DiscussionGroup: String { return self._s[3440]! } - public var TwoFactorSetup_Email_SkipConfirmationSkip: String { return self._s[3441]! } + public var Map_SendMyCurrentLocation: String { return self._s[3454]! } + public var Channel_DiscussionGroup: String { return self._s[3455]! } + public var TwoFactorSetup_Email_SkipConfirmationSkip: String { return self._s[3456]! } public func PUSH_PINNED_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3442]!, self._r[3442]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3457]!, self._r[3457]!, [_1, _2]) } - public var SharedMedia_SearchNoResults: String { return self._s[3443]! } - public var Permissions_NotificationsText_v0: String { return self._s[3444]! } - public var Channel_EditAdmin_PermissionDeleteMessagesOfOthers: String { return self._s[3445]! } - public var Appearance_AppIcon: String { return self._s[3446]! } - public var Appearance_ThemePreview_ChatList_3_AuthorName: String { return self._s[3447]! } - public var LoginPassword_FloodError: String { return self._s[3448]! } - public var Wallet_Send_OwnAddressAlertProceed: String { return self._s[3450]! } - public var Group_Setup_HistoryHiddenHelp: String { return self._s[3451]! } + public var SharedMedia_SearchNoResults: String { return self._s[3458]! } + public var Permissions_NotificationsText_v0: String { return self._s[3459]! } + public var Channel_EditAdmin_PermissionDeleteMessagesOfOthers: String { return self._s[3460]! } + public var Appearance_AppIcon: String { return self._s[3461]! } + public var Appearance_ThemePreview_ChatList_3_AuthorName: String { return self._s[3462]! } + public var LoginPassword_FloodError: String { return self._s[3463]! } + public var Wallet_Send_OwnAddressAlertProceed: String { return self._s[3465]! } + public var Group_Setup_HistoryHiddenHelp: String { return self._s[3466]! } public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3452]!, self._r[3452]!, [_0]) + return formatWithArgumentRanges(self._s[3467]!, self._r[3467]!, [_0]) } - public var Passport_Language_bn: String { return self._s[3453]! } + public var Passport_Language_bn: String { return self._s[3468]! } public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3454]!, self._r[3454]!, [_0]) + return formatWithArgumentRanges(self._s[3469]!, self._r[3469]!, [_0]) } - public var ChatList_Context_Pin: String { return self._s[3455]! } + public var ChatList_Context_Pin: String { return self._s[3470]! } public func Notification_PinnedAudioMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3456]!, self._r[3456]!, [_0]) + return formatWithArgumentRanges(self._s[3471]!, self._r[3471]!, [_0]) } public func Channel_AdminLog_MessageChangedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3457]!, self._r[3457]!, [_0]) + return formatWithArgumentRanges(self._s[3472]!, self._r[3472]!, [_0]) } - public var Wallet_Navigation_Close: String { return self._s[3458]! } - public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3462]! } - public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3464]! } - public var Wallet_Month_GenDecember: String { return self._s[3465]! } - public var Contacts_PermissionsAllow: String { return self._s[3466]! } - public var ReportPeer_ReasonCopyright: String { return self._s[3467]! } - public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[3468]! } - public var WallpaperPreview_Pattern: String { return self._s[3469]! } - public var Paint_Duplicate: String { return self._s[3470]! } - public var Passport_Address_Country: String { return self._s[3471]! } - public var Notification_RenamedChannel: String { return self._s[3473]! } - public var ChatList_Context_Unmute: String { return self._s[3474]! } - public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3475]! } - public var Group_MessagePhotoUpdated: String { return self._s[3476]! } - public var Channel_BanUser_PermissionSendMedia: String { return self._s[3477]! } - public var Conversation_ContextMenuBan: String { return self._s[3478]! } - public var TwoStepAuth_EmailSent: String { return self._s[3479]! } - public var MessagePoll_NoVotes: String { return self._s[3480]! } - public var Wallet_Send_ErrorNotEnoughFundsTitle: String { return self._s[3481]! } - public var Passport_Language_is: String { return self._s[3482]! } - public var PeopleNearby_UsersEmpty: String { return self._s[3484]! } - public var Tour_Text5: String { return self._s[3485]! } + public var Wallet_Navigation_Close: String { return self._s[3473]! } + public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3477]! } + public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3479]! } + public var Wallet_Month_GenDecember: String { return self._s[3480]! } + public var Contacts_PermissionsAllow: String { return self._s[3481]! } + public var ReportPeer_ReasonCopyright: String { return self._s[3482]! } + public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[3483]! } + public var WallpaperPreview_Pattern: String { return self._s[3484]! } + public var Paint_Duplicate: String { return self._s[3485]! } + public var Passport_Address_Country: String { return self._s[3486]! } + public var Notification_RenamedChannel: String { return self._s[3488]! } + public var ChatList_Context_Unmute: String { return self._s[3489]! } + public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3490]! } + public var Group_MessagePhotoUpdated: String { return self._s[3491]! } + public var Channel_BanUser_PermissionSendMedia: String { return self._s[3492]! } + public var Conversation_ContextMenuBan: String { return self._s[3493]! } + public var TwoStepAuth_EmailSent: String { return self._s[3494]! } + public var MessagePoll_NoVotes: String { return self._s[3495]! } + public var Wallet_Send_ErrorNotEnoughFundsTitle: String { return self._s[3496]! } + public var Passport_Language_is: String { return self._s[3497]! } + public var PeopleNearby_UsersEmpty: String { return self._s[3499]! } + public var Tour_Text5: String { return self._s[3500]! } public func Call_GroupFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3487]!, self._r[3487]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3502]!, self._r[3502]!, [_1, _2]) } - public var Undo_SecretChatDeleted: String { return self._s[3488]! } - public var SocksProxySetup_ShareQRCode: String { return self._s[3489]! } + public var Undo_SecretChatDeleted: String { return self._s[3503]! } + public var SocksProxySetup_ShareQRCode: String { return self._s[3504]! } public func VoiceOver_Chat_Size(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3490]!, self._r[3490]!, [_0]) + return formatWithArgumentRanges(self._s[3505]!, self._r[3505]!, [_0]) } - public var LogoutOptions_ChangePhoneNumberText: String { return self._s[3491]! } - public var Paint_Edit: String { return self._s[3493]! } - public var ScheduledMessages_ReminderNotification: String { return self._s[3495]! } - public var Undo_DeletedGroup: String { return self._s[3497]! } - public var LoginPassword_ForgotPassword: String { return self._s[3498]! } - public var Wallet_WordImport_IncorrectTitle: String { return self._s[3499]! } - public var GroupInfo_GroupNamePlaceholder: String { return self._s[3500]! } + public var LogoutOptions_ChangePhoneNumberText: String { return self._s[3506]! } + public var Paint_Edit: String { return self._s[3508]! } + public var ScheduledMessages_ReminderNotification: String { return self._s[3510]! } + public var Undo_DeletedGroup: String { return self._s[3512]! } + public var LoginPassword_ForgotPassword: String { return self._s[3513]! } + public var Wallet_WordImport_IncorrectTitle: String { return self._s[3514]! } + public var GroupInfo_GroupNamePlaceholder: String { return self._s[3515]! } public func Notification_Kicked(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3501]!, self._r[3501]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3516]!, self._r[3516]!, [_0, _1]) } - public var AppWallet_TransactionInfo_FeeInfoURL: String { return self._s[3502]! } - public var Conversation_InputTextCaptionPlaceholder: String { return self._s[3503]! } - public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3504]! } - public var Passport_Language_uz: String { return self._s[3505]! } - public var Conversation_PinMessageAlertGroup: String { return self._s[3506]! } - public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[3507]! } - public var Map_StopLiveLocation: String { return self._s[3509]! } - public var VoiceOver_MessageContextSend: String { return self._s[3511]! } - public var PasscodeSettings_Help: String { return self._s[3512]! } - public var NotificationsSound_Input: String { return self._s[3513]! } - public var Share_Title: String { return self._s[3516]! } - public var LogoutOptions_Title: String { return self._s[3517]! } - public var Wallet_Send_AddressText: String { return self._s[3518]! } - public var Login_TermsOfServiceAgree: String { return self._s[3519]! } - public var Compose_NewEncryptedChatTitle: String { return self._s[3520]! } - public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[3521]! } - public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[3522]! } - public var EnterPasscode_EnterTitle: String { return self._s[3523]! } + public var AppWallet_TransactionInfo_FeeInfoURL: String { return self._s[3517]! } + public var Conversation_InputTextCaptionPlaceholder: String { return self._s[3518]! } + public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3519]! } + public var Passport_Language_uz: String { return self._s[3520]! } + public var Conversation_PinMessageAlertGroup: String { return self._s[3521]! } + public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[3522]! } + public var Map_StopLiveLocation: String { return self._s[3524]! } + public var VoiceOver_MessageContextSend: String { return self._s[3526]! } + public var PasscodeSettings_Help: String { return self._s[3527]! } + public var NotificationsSound_Input: String { return self._s[3528]! } + public var Share_Title: String { return self._s[3531]! } + public var LogoutOptions_Title: String { return self._s[3532]! } + public var Wallet_Send_AddressText: String { return self._s[3533]! } + public var Login_TermsOfServiceAgree: String { return self._s[3534]! } + public var Compose_NewEncryptedChatTitle: String { return self._s[3535]! } + public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[3536]! } + public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[3537]! } + public var EnterPasscode_EnterTitle: String { return self._s[3538]! } public func Call_PrivacyErrorMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3524]!, self._r[3524]!, [_0]) + return formatWithArgumentRanges(self._s[3539]!, self._r[3539]!, [_0]) } - public var Settings_CopyPhoneNumber: String { return self._s[3525]! } - public var Conversation_AddToContacts: String { return self._s[3526]! } + public var Settings_CopyPhoneNumber: String { return self._s[3540]! } + public var Conversation_AddToContacts: String { return self._s[3541]! } public func VoiceOver_Chat_ReplyFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3527]!, self._r[3527]!, [_0]) + return formatWithArgumentRanges(self._s[3542]!, self._r[3542]!, [_0]) } - public var NotificationsSound_Keys: String { return self._s[3528]! } + public var NotificationsSound_Keys: String { return self._s[3543]! } public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3529]!, self._r[3529]!, [_0]) + return formatWithArgumentRanges(self._s[3544]!, self._r[3544]!, [_0]) } - public var Notification_MessageLifetime1w: String { return self._s[3530]! } - public var Message_Video: String { return self._s[3531]! } - public var AutoDownloadSettings_CellularTitle: String { return self._s[3532]! } + public var Notification_MessageLifetime1w: String { return self._s[3545]! } + public var Message_Video: String { return self._s[3546]! } + public var AutoDownloadSettings_CellularTitle: String { return self._s[3547]! } public func PUSH_CHANNEL_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3533]!, self._r[3533]!, [_1]) + return formatWithArgumentRanges(self._s[3548]!, self._r[3548]!, [_1]) } - public var Wallet_Receive_AmountInfo: String { return self._s[3536]! } + public var Wallet_Receive_AmountInfo: String { return self._s[3551]! } public func Notification_JoinedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3537]!, self._r[3537]!, [_0]) - } - public func PrivacySettings_LastSeenContactsPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3538]!, self._r[3538]!, [_0]) - } - public var Passport_Language_mk: String { return self._s[3539]! } - public func Wallet_Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3540]!, self._r[3540]!, [_1, _2, _3]) - } - public var CreatePoll_CancelConfirmation: String { return self._s[3541]! } - public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3543]! } - public var PrivacyPolicy_Decline: String { return self._s[3544]! } - public var Passport_Identity_DoesNotExpire: String { return self._s[3545]! } - public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[3546]! } - public var Permissions_SiriAllow_v0: String { return self._s[3548]! } - public var Wallet_Month_ShortAugust: String { return self._s[3549]! } - public var Appearance_ThemeCarouselNight: String { return self._s[3550]! } - public func LOCAL_CHAT_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3551]!, self._r[3551]!, [_1, "\(_2)"]) - } - public func Notification_RenamedChat(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3552]!, self._r[3552]!, [_0]) } - public var Paint_Regular: String { return self._s[3553]! } - public var ChatSettings_AutoDownloadReset: String { return self._s[3554]! } - public var SocksProxySetup_ShareLink: String { return self._s[3555]! } - public var Wallet_Qr_Title: String { return self._s[3556]! } - public var BlockedUsers_SelectUserTitle: String { return self._s[3557]! } - public var VoiceOver_Chat_RecordModeVoiceMessage: String { return self._s[3559]! } - public var Wallet_Settings_Configuration: String { return self._s[3560]! } - public var GroupInfo_InviteByLink: String { return self._s[3561]! } - public var MessageTimer_Custom: String { return self._s[3562]! } - public var UserInfo_NotificationsDefaultEnabled: String { return self._s[3563]! } - public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3565]! } - public var Conversation_SendMessage_SetReminder: String { return self._s[3566]! } - public var VoiceOver_Chat_Selected: String { return self._s[3567]! } - public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[3568]! } - public var Channel_Username_InvalidTaken: String { return self._s[3569]! } - public var Conversation_ClousStorageInfo_Description3: String { return self._s[3570]! } - public var Wallet_WordCheck_TryAgain: String { return self._s[3571]! } - public var Wallet_Info_TransactionPendingHeader: String { return self._s[3572]! } - public var Settings_ChatBackground: String { return self._s[3573]! } - public var Channel_Subscribers_Title: String { return self._s[3574]! } - public var Wallet_Receive_InvoiceUrlHeader: String { return self._s[3575]! } - public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[3576]! } - public var Watch_ConnectionDescription: String { return self._s[3577]! } - public var ChatList_ArchivedChatsTitle: String { return self._s[3581]! } - public var Wallpaper_ResetWallpapers: String { return self._s[3582]! } - public var Wallet_Send_TransactionInProgress: String { return self._s[3583]! } - public var EditProfile_Title: String { return self._s[3584]! } - public var NotificationsSound_Bamboo: String { return self._s[3586]! } - public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[3588]! } - public var Login_SmsRequestState2: String { return self._s[3589]! } - public var Passport_Language_ar: String { return self._s[3590]! } + public func PrivacySettings_LastSeenContactsPlus(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3553]!, self._r[3553]!, [_0]) + } + public var Passport_Language_mk: String { return self._s[3554]! } + public func Wallet_Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3555]!, self._r[3555]!, [_1, _2, _3]) + } + public var CreatePoll_CancelConfirmation: String { return self._s[3556]! } + public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3558]! } + public var PrivacyPolicy_Decline: String { return self._s[3559]! } + public var Passport_Identity_DoesNotExpire: String { return self._s[3560]! } + public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[3561]! } + public var Permissions_SiriAllow_v0: String { return self._s[3563]! } + public var Wallet_Month_ShortAugust: String { return self._s[3564]! } + public var Appearance_ThemeCarouselNight: String { return self._s[3565]! } + public func LOCAL_CHAT_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3566]!, self._r[3566]!, [_1, "\(_2)"]) + } + public func Notification_RenamedChat(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3567]!, self._r[3567]!, [_0]) + } + public var Paint_Regular: String { return self._s[3568]! } + public var ChatSettings_AutoDownloadReset: String { return self._s[3569]! } + public var SocksProxySetup_ShareLink: String { return self._s[3570]! } + public var Wallet_Qr_Title: String { return self._s[3571]! } + public var BlockedUsers_SelectUserTitle: String { return self._s[3572]! } + public var VoiceOver_Chat_RecordModeVoiceMessage: String { return self._s[3574]! } + public var Wallet_Settings_Configuration: String { return self._s[3575]! } + public var GroupInfo_InviteByLink: String { return self._s[3576]! } + public var MessageTimer_Custom: String { return self._s[3577]! } + public var UserInfo_NotificationsDefaultEnabled: String { return self._s[3578]! } + public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3580]! } + public var Conversation_SendMessage_SetReminder: String { return self._s[3581]! } + public var VoiceOver_Chat_Selected: String { return self._s[3582]! } + public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[3583]! } + public var Channel_Username_InvalidTaken: String { return self._s[3584]! } + public var Conversation_ClousStorageInfo_Description3: String { return self._s[3585]! } + public var Wallet_WordCheck_TryAgain: String { return self._s[3586]! } + public var Wallet_Info_TransactionPendingHeader: String { return self._s[3587]! } + public var Settings_ChatBackground: String { return self._s[3588]! } + public var Channel_Subscribers_Title: String { return self._s[3589]! } + public var Wallet_Receive_InvoiceUrlHeader: String { return self._s[3590]! } + public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[3591]! } + public var Watch_ConnectionDescription: String { return self._s[3592]! } + public var Wallet_Configuration_ApplyErrorTitle: String { return self._s[3595]! } + public var ChatList_ArchivedChatsTitle: String { return self._s[3597]! } + public var Wallpaper_ResetWallpapers: String { return self._s[3598]! } + public var Wallet_Send_TransactionInProgress: String { return self._s[3599]! } + public var EditProfile_Title: String { return self._s[3600]! } + public var NotificationsSound_Bamboo: String { return self._s[3602]! } + public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[3604]! } + public var Login_SmsRequestState2: String { return self._s[3605]! } + public var Passport_Language_ar: String { return self._s[3606]! } public func Message_AuthorPinnedGame(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3591]!, self._r[3591]!, [_0]) + return formatWithArgumentRanges(self._s[3607]!, self._r[3607]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[3592]! } - public var Wallet_Created_Text: String { return self._s[3593]! } - public var Conversation_MessageDialogEdit: String { return self._s[3594]! } - public var Wallet_Created_Proceed: String { return self._s[3595]! } - public var Wallet_Words_Done: String { return self._s[3596]! } - public var VoiceOver_Media_PlaybackPause: String { return self._s[3597]! } + public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[3608]! } + public var Wallet_Created_Text: String { return self._s[3609]! } + public var Conversation_MessageDialogEdit: String { return self._s[3610]! } + public var Wallet_Created_Proceed: String { return self._s[3611]! } + public var Wallet_Words_Done: String { return self._s[3612]! } + public var VoiceOver_Media_PlaybackPause: String { return self._s[3613]! } public func PUSH_AUTH_UNKNOWN(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3598]!, self._r[3598]!, [_1]) + return formatWithArgumentRanges(self._s[3614]!, self._r[3614]!, [_1]) } - public var Common_Close: String { return self._s[3599]! } - public var GroupInfo_PublicLink: String { return self._s[3600]! } - public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[3601]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[3602]! } + public var Common_Close: String { return self._s[3615]! } + public var GroupInfo_PublicLink: String { return self._s[3616]! } + public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[3617]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[3618]! } public func Channel_AdminLog_MessageToggleInvitesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3606]!, self._r[3606]!, [_0]) + return formatWithArgumentRanges(self._s[3622]!, self._r[3622]!, [_0]) } - public var UserInfo_About_Placeholder: String { return self._s[3607]! } + public var UserInfo_About_Placeholder: String { return self._s[3623]! } public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3608]!, self._r[3608]!, [_0]) + return formatWithArgumentRanges(self._s[3624]!, self._r[3624]!, [_0]) } - public var GroupInfo_Permissions_SectionTitle: String { return self._s[3609]! } - public var Channel_Info_Banned: String { return self._s[3611]! } + public var GroupInfo_Permissions_SectionTitle: String { return self._s[3625]! } + public var Channel_Info_Banned: String { return self._s[3627]! } public func Time_MonthOfYear_m11(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3612]!, self._r[3612]!, [_0]) + return formatWithArgumentRanges(self._s[3628]!, self._r[3628]!, [_0]) } - public var Appearance_Other: String { return self._s[3613]! } - public var Passport_Language_my: String { return self._s[3614]! } - public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[3615]! } + public var Appearance_Other: String { return self._s[3629]! } + public var Passport_Language_my: String { return self._s[3630]! } + public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[3631]! } public func Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3616]!, self._r[3616]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3632]!, self._r[3632]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[3617]! } - public var Preview_CopyAddress: String { return self._s[3618]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[3633]! } + public var Preview_CopyAddress: String { return self._s[3634]! } public func DialogList_SinglePlayingGameSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3619]!, self._r[3619]!, [_0]) + return formatWithArgumentRanges(self._s[3635]!, self._r[3635]!, [_0]) } - public var KeyCommand_JumpToPreviousChat: String { return self._s[3620]! } - public var UserInfo_BotSettings: String { return self._s[3621]! } - public var LiveLocation_MenuStopAll: String { return self._s[3623]! } - public var Passport_PasswordCreate: String { return self._s[3624]! } - public var StickerSettings_MaskContextInfo: String { return self._s[3625]! } - public var Message_PinnedLocationMessage: String { return self._s[3626]! } - public var Map_Satellite: String { return self._s[3627]! } - public var Watch_Message_Unsupported: String { return self._s[3628]! } - public var Username_TooManyPublicUsernamesError: String { return self._s[3629]! } - public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[3630]! } + public var KeyCommand_JumpToPreviousChat: String { return self._s[3636]! } + public var UserInfo_BotSettings: String { return self._s[3637]! } + public var LiveLocation_MenuStopAll: String { return self._s[3639]! } + public var Passport_PasswordCreate: String { return self._s[3640]! } + public var StickerSettings_MaskContextInfo: String { return self._s[3641]! } + public var Message_PinnedLocationMessage: String { return self._s[3642]! } + public var Map_Satellite: String { return self._s[3643]! } + public var Watch_Message_Unsupported: String { return self._s[3644]! } + public var Username_TooManyPublicUsernamesError: String { return self._s[3645]! } + public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[3646]! } public func Notification_PinnedTextMessage(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3631]!, self._r[3631]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3647]!, self._r[3647]!, [_0, _1]) } public func Conversation_OpenBotLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3632]!, self._r[3632]!, [_0]) + return formatWithArgumentRanges(self._s[3648]!, self._r[3648]!, [_0]) } - public var Wallet_WordImport_Continue: String { return self._s[3633]! } + public var Wallet_WordImport_Continue: String { return self._s[3649]! } public func TwoFactorSetup_EmailVerification_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3634]!, self._r[3634]!, [_0]) + return formatWithArgumentRanges(self._s[3650]!, self._r[3650]!, [_0]) } - public var Notifications_ChannelNotificationsHelp: String { return self._s[3635]! } - public var Privacy_Calls_P2PContacts: String { return self._s[3636]! } - public var NotificationsSound_None: String { return self._s[3637]! } - public var Wallet_TransactionInfo_StorageFeeHeader: String { return self._s[3638]! } - public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3640]! } - public var AccessDenied_VoiceMicrophone: String { return self._s[3641]! } + public var Notifications_ChannelNotificationsHelp: String { return self._s[3651]! } + public var Privacy_Calls_P2PContacts: String { return self._s[3652]! } + public var NotificationsSound_None: String { return self._s[3653]! } + public var Wallet_TransactionInfo_StorageFeeHeader: String { return self._s[3654]! } + public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3656]! } + public var AccessDenied_VoiceMicrophone: String { return self._s[3657]! } public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3642]!, self._r[3642]!, [_1]) + return formatWithArgumentRanges(self._s[3658]!, self._r[3658]!, [_1]) } - public var Cache_Indexing: String { return self._s[3643]! } - public var DialogList_RecentTitlePeople: String { return self._s[3645]! } - public var DialogList_EncryptionRejected: String { return self._s[3646]! } - public var GroupInfo_Administrators: String { return self._s[3647]! } - public var Passport_ScanPassportHelp: String { return self._s[3648]! } - public var Application_Name: String { return self._s[3649]! } - public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[3650]! } - public var Appearance_ThemeCarouselDay: String { return self._s[3652]! } - public var Passport_Identity_TranslationHelp: String { return self._s[3653]! } + public var Cache_Indexing: String { return self._s[3659]! } + public var DialogList_RecentTitlePeople: String { return self._s[3661]! } + public var DialogList_EncryptionRejected: String { return self._s[3662]! } + public var GroupInfo_Administrators: String { return self._s[3663]! } + public var Passport_ScanPassportHelp: String { return self._s[3664]! } + public var Application_Name: String { return self._s[3665]! } + public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[3666]! } + public var Appearance_ThemeCarouselDay: String { return self._s[3668]! } + public var Passport_Identity_TranslationHelp: String { return self._s[3669]! } public func VoiceOver_Chat_VideoMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3654]!, self._r[3654]!, [_0]) + return formatWithArgumentRanges(self._s[3670]!, self._r[3670]!, [_0]) } public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3655]!, self._r[3655]!, [_0]) + return formatWithArgumentRanges(self._s[3671]!, self._r[3671]!, [_0]) } public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3656]!, self._r[3656]!, [_0]) + return formatWithArgumentRanges(self._s[3672]!, self._r[3672]!, [_0]) } - public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3657]! } - public var Privacy_ChatsTitle: String { return self._s[3658]! } - public var DialogList_ClearHistoryConfirmation: String { return self._s[3659]! } - public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[3660]! } - public var Watch_Suggestion_HoldOn: String { return self._s[3661]! } - public var Group_EditAdmin_TransferOwnership: String { return self._s[3662]! } - public var WebBrowser_Title: String { return self._s[3663]! } - public var Group_LinkedChannel: String { return self._s[3664]! } - public var VoiceOver_Chat_SeenByRecipient: String { return self._s[3665]! } - public var SocksProxySetup_RequiredCredentials: String { return self._s[3666]! } - public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[3667]! } - public var TwoStepAuth_EmailSkipAlert: String { return self._s[3668]! } - public var ScheduledMessages_RemindersTitle: String { return self._s[3670]! } - public var Channel_Setup_TypePublic: String { return self._s[3672]! } + public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3673]! } + public var Privacy_ChatsTitle: String { return self._s[3674]! } + public var DialogList_ClearHistoryConfirmation: String { return self._s[3675]! } + public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[3676]! } + public var Watch_Suggestion_HoldOn: String { return self._s[3677]! } + public var Group_EditAdmin_TransferOwnership: String { return self._s[3678]! } + public var WebBrowser_Title: String { return self._s[3679]! } + public var Group_LinkedChannel: String { return self._s[3680]! } + public var VoiceOver_Chat_SeenByRecipient: String { return self._s[3681]! } + public var SocksProxySetup_RequiredCredentials: String { return self._s[3682]! } + public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[3683]! } + public var TwoStepAuth_EmailSkipAlert: String { return self._s[3684]! } + public var ScheduledMessages_RemindersTitle: String { return self._s[3686]! } + public var Channel_Setup_TypePublic: String { return self._s[3688]! } public func Channel_AdminLog_MessageToggleInvitesOn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3673]!, self._r[3673]!, [_0]) + return formatWithArgumentRanges(self._s[3689]!, self._r[3689]!, [_0]) } - public var Channel_TypeSetup_Title: String { return self._s[3675]! } - public var Map_OpenInMaps: String { return self._s[3677]! } + public var Channel_TypeSetup_Title: String { return self._s[3691]! } + public var Map_OpenInMaps: String { return self._s[3693]! } public func PUSH_PINNED_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3678]!, self._r[3678]!, [_1]) + return formatWithArgumentRanges(self._s[3694]!, self._r[3694]!, [_1]) } - public var NotificationsSound_Tremolo: String { return self._s[3680]! } + public var NotificationsSound_Tremolo: String { return self._s[3696]! } public func Date_ChatDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3681]!, self._r[3681]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3697]!, self._r[3697]!, [_1, _2, _3]) } - public var ConversationProfile_UnknownAddMemberError: String { return self._s[3682]! } - public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[3683]! } - public var Passport_PasswordHelp: String { return self._s[3684]! } - public var Login_CodeExpiredError: String { return self._s[3685]! } - public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[3686]! } - public var Conversation_TitleUnmute: String { return self._s[3687]! } - public var Passport_Identity_ScansHelp: String { return self._s[3688]! } - public var Passport_Language_lo: String { return self._s[3689]! } - public var Camera_FlashAuto: String { return self._s[3690]! } - public var Conversation_OpenBotLinkOpen: String { return self._s[3691]! } - public var Common_Cancel: String { return self._s[3692]! } - public var DialogList_SavedMessagesTooltip: String { return self._s[3693]! } - public var TwoStepAuth_SetupPasswordTitle: String { return self._s[3694]! } - public var Appearance_TintAllColors: String { return self._s[3695]! } + public var ConversationProfile_UnknownAddMemberError: String { return self._s[3698]! } + public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[3699]! } + public var Passport_PasswordHelp: String { return self._s[3700]! } + public var Login_CodeExpiredError: String { return self._s[3701]! } + public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[3702]! } + public var Conversation_TitleUnmute: String { return self._s[3703]! } + public var Passport_Identity_ScansHelp: String { return self._s[3704]! } + public var Passport_Language_lo: String { return self._s[3705]! } + public var Camera_FlashAuto: String { return self._s[3706]! } + public var Conversation_OpenBotLinkOpen: String { return self._s[3707]! } + public var Common_Cancel: String { return self._s[3708]! } + public var DialogList_SavedMessagesTooltip: String { return self._s[3709]! } + public var TwoStepAuth_SetupPasswordTitle: String { return self._s[3710]! } + public var Appearance_TintAllColors: String { return self._s[3711]! } public func PUSH_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3696]!, self._r[3696]!, [_1]) + return formatWithArgumentRanges(self._s[3712]!, self._r[3712]!, [_1]) } - public var Conversation_ReportSpamConfirmation: String { return self._s[3697]! } - public var ChatSettings_Title: String { return self._s[3699]! } - public var Passport_PasswordReset: String { return self._s[3700]! } - public var SocksProxySetup_TypeNone: String { return self._s[3701]! } - public var EditTheme_Title: String { return self._s[3703]! } - public var PhoneNumberHelp_Help: String { return self._s[3704]! } - public var Checkout_EnterPassword: String { return self._s[3705]! } - public var Share_AuthTitle: String { return self._s[3707]! } - public var Activity_UploadingDocument: String { return self._s[3708]! } - public var State_Connecting: String { return self._s[3709]! } - public var Profile_MessageLifetime1w: String { return self._s[3710]! } - public var Conversation_ContextMenuReport: String { return self._s[3711]! } - public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[3712]! } - public var AutoNightTheme_ScheduledTo: String { return self._s[3713]! } + public var Conversation_ReportSpamConfirmation: String { return self._s[3713]! } + public var ChatSettings_Title: String { return self._s[3715]! } + public var Passport_PasswordReset: String { return self._s[3716]! } + public var SocksProxySetup_TypeNone: String { return self._s[3717]! } + public var EditTheme_Title: String { return self._s[3719]! } + public var PhoneNumberHelp_Help: String { return self._s[3720]! } + public var Checkout_EnterPassword: String { return self._s[3721]! } + public var Share_AuthTitle: String { return self._s[3723]! } + public var Activity_UploadingDocument: String { return self._s[3724]! } + public var State_Connecting: String { return self._s[3725]! } + public var Profile_MessageLifetime1w: String { return self._s[3726]! } + public var Conversation_ContextMenuReport: String { return self._s[3727]! } + public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[3728]! } + public var AutoNightTheme_ScheduledTo: String { return self._s[3729]! } public func VoiceOver_Chat_AnonymousPollFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3714]!, self._r[3714]!, [_0]) + return formatWithArgumentRanges(self._s[3730]!, self._r[3730]!, [_0]) } - public var AuthSessions_Terminate: String { return self._s[3715]! } - public var Wallet_WordImport_CanNotRemember: String { return self._s[3716]! } - public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[3717]! } - public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[3718]! } - public var PhotoEditor_Set: String { return self._s[3719]! } - public var EmptyGroupInfo_Title: String { return self._s[3720]! } - public var Login_PadPhoneHelp: String { return self._s[3721]! } - public var AutoDownloadSettings_TypeGroupChats: String { return self._s[3723]! } - public var PrivacyPolicy_DeclineLastWarning: String { return self._s[3725]! } - public var NotificationsSound_Complete: String { return self._s[3726]! } - public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[3727]! } - public var Group_Info_AdminLog: String { return self._s[3728]! } - public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[3729]! } + public var AuthSessions_Terminate: String { return self._s[3731]! } + public var Wallet_WordImport_CanNotRemember: String { return self._s[3732]! } + public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[3733]! } + public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[3734]! } + public var PhotoEditor_Set: String { return self._s[3735]! } + public var EmptyGroupInfo_Title: String { return self._s[3736]! } + public var Login_PadPhoneHelp: String { return self._s[3737]! } + public var AutoDownloadSettings_TypeGroupChats: String { return self._s[3739]! } + public var PrivacyPolicy_DeclineLastWarning: String { return self._s[3741]! } + public var NotificationsSound_Complete: String { return self._s[3742]! } + public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[3743]! } + public var Group_Info_AdminLog: String { return self._s[3744]! } + public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[3745]! } public func Wallet_Time_PreciseDate_m11(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3730]!, self._r[3730]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3746]!, self._r[3746]!, [_1, _2, _3]) } - public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[3731]! } - public var Conversation_Admin: String { return self._s[3733]! } - public var Conversation_GifTooltip: String { return self._s[3734]! } - public var Passport_NotLoggedInMessage: String { return self._s[3735]! } + public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[3747]! } + public var Conversation_Admin: String { return self._s[3749]! } + public var Conversation_GifTooltip: String { return self._s[3750]! } + public var Passport_NotLoggedInMessage: String { return self._s[3751]! } public func AutoDownloadSettings_OnFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3737]!, self._r[3737]!, [_0]) + return formatWithArgumentRanges(self._s[3753]!, self._r[3753]!, [_0]) } - public var Profile_MessageLifetimeForever: String { return self._s[3738]! } - public var SharedMedia_EmptyTitle: String { return self._s[3740]! } - public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[3742]! } - public var Username_Help: String { return self._s[3743]! } - public var DialogList_LanguageTooltip: String { return self._s[3745]! } - public var Map_LoadError: String { return self._s[3746]! } - public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[3747]! } - public var Channel_AdminLog_AddMembers: String { return self._s[3748]! } - public var ArchivedChats_IntroTitle2: String { return self._s[3749]! } - public var Notification_Exceptions_NewException: String { return self._s[3750]! } - public var TwoStepAuth_EmailTitle: String { return self._s[3751]! } - public var WatchRemote_AlertText: String { return self._s[3752]! } + public var Profile_MessageLifetimeForever: String { return self._s[3754]! } + public var SharedMedia_EmptyTitle: String { return self._s[3756]! } + public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[3758]! } + public var Username_Help: String { return self._s[3759]! } + public var DialogList_LanguageTooltip: String { return self._s[3761]! } + public var Map_LoadError: String { return self._s[3762]! } + public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[3763]! } + public var Channel_AdminLog_AddMembers: String { return self._s[3764]! } + public var ArchivedChats_IntroTitle2: String { return self._s[3765]! } + public var Notification_Exceptions_NewException: String { return self._s[3766]! } + public var TwoStepAuth_EmailTitle: String { return self._s[3767]! } + public var WatchRemote_AlertText: String { return self._s[3768]! } public func Wallet_Send_ConfirmationText(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3753]!, self._r[3753]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3769]!, self._r[3769]!, [_1, _2, _3]) } - public var ChatSettings_ConnectionType_Title: String { return self._s[3757]! } - public var WebBrowser_DefaultBrowser: String { return self._s[3758]! } + public var ChatSettings_ConnectionType_Title: String { return self._s[3773]! } + public var WebBrowser_DefaultBrowser: String { return self._s[3774]! } public func Settings_CheckPhoneNumberTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3759]!, self._r[3759]!, [_0]) - } - public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[3760]! } - public var Passport_Address_CountryPlaceholder: String { return self._s[3761]! } - public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3762]!, self._r[3762]!, [_0]) - } - public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3763]!, self._r[3763]!, [_1, _2, _3]) - } - public var Group_AdminLog_EmptyText: String { return self._s[3764]! } - public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[3765]! } - public var Conversation_PrivateChannelTooltip: String { return self._s[3767]! } - public var Wallet_Created_ExportErrorText: String { return self._s[3768]! } - public var ChatList_UndoArchiveText1: String { return self._s[3769]! } - public var AccessDenied_VideoMicrophone: String { return self._s[3770]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[3771]! } - public var Cache_ClearNone: String { return self._s[3772]! } - public var SocksProxySetup_FailedToConnect: String { return self._s[3773]! } - public var Permissions_NotificationsTitle_v0: String { return self._s[3774]! } - public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3775]!, self._r[3775]!, [_0]) } - public var Passport_Identity_Country: String { return self._s[3776]! } - public func ChatSettings_AutoDownloadSettings_TypeFile(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3777]!, self._r[3777]!, [_0]) - } - public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { + public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[3776]! } + public var Passport_Address_CountryPlaceholder: String { return self._s[3777]! } + public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3778]!, self._r[3778]!, [_0]) } - public var Exceptions_AddToExceptions: String { return self._s[3779]! } - public var AccessDenied_Settings: String { return self._s[3780]! } - public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[3781]! } - public var Month_ShortMay: String { return self._s[3782]! } - public var Compose_NewGroup: String { return self._s[3784]! } - public var Group_Setup_TypePrivate: String { return self._s[3786]! } - public var Login_PadPhoneHelpTitle: String { return self._s[3788]! } - public var Appearance_ThemeDayClassic: String { return self._s[3789]! } - public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[3790]! } - public var AutoDownloadSettings_OffForAll: String { return self._s[3791]! } - public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3792]! } - public var Conversation_typing: String { return self._s[3794]! } - public var Undo_ScheduledMessagesCleared: String { return self._s[3795]! } - public var Paint_Masks: String { return self._s[3796]! } - public var Contacts_DeselectAll: String { return self._s[3797]! } - public func Wallet_Updated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3798]!, self._r[3798]!, [_0]) + public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3779]!, self._r[3779]!, [_1, _2, _3]) } - public var Username_InvalidTaken: String { return self._s[3799]! } - public var Call_StatusNoAnswer: String { return self._s[3800]! } - public var TwoStepAuth_EmailAddSuccess: String { return self._s[3801]! } - public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[3802]! } - public var Passport_Identity_Selfie: String { return self._s[3803]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[3804]! } - public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[3805]! } - public var Conversation_ClearSecretHistory: String { return self._s[3806]! } - public var PeopleNearby_Description: String { return self._s[3808]! } - public var NetworkUsageSettings_Title: String { return self._s[3809]! } - public var Your_cards_security_code_is_invalid: String { return self._s[3811]! } + public var Group_AdminLog_EmptyText: String { return self._s[3780]! } + public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[3781]! } + public var Conversation_PrivateChannelTooltip: String { return self._s[3783]! } + public var Wallet_Created_ExportErrorText: String { return self._s[3784]! } + public var ChatList_UndoArchiveText1: String { return self._s[3785]! } + public var AccessDenied_VideoMicrophone: String { return self._s[3786]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[3787]! } + public var Cache_ClearNone: String { return self._s[3788]! } + public var SocksProxySetup_FailedToConnect: String { return self._s[3789]! } + public var Permissions_NotificationsTitle_v0: String { return self._s[3790]! } + public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3791]!, self._r[3791]!, [_0]) + } + public var Passport_Identity_Country: String { return self._s[3792]! } + public func ChatSettings_AutoDownloadSettings_TypeFile(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3793]!, self._r[3793]!, [_0]) + } + public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3794]!, self._r[3794]!, [_0]) + } + public var Exceptions_AddToExceptions: String { return self._s[3795]! } + public var AccessDenied_Settings: String { return self._s[3796]! } + public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[3797]! } + public var Month_ShortMay: String { return self._s[3798]! } + public var Compose_NewGroup: String { return self._s[3800]! } + public var Group_Setup_TypePrivate: String { return self._s[3802]! } + public var Login_PadPhoneHelpTitle: String { return self._s[3804]! } + public var Appearance_ThemeDayClassic: String { return self._s[3805]! } + public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[3806]! } + public var AutoDownloadSettings_OffForAll: String { return self._s[3807]! } + public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3808]! } + public var Conversation_typing: String { return self._s[3810]! } + public var Undo_ScheduledMessagesCleared: String { return self._s[3811]! } + public var Paint_Masks: String { return self._s[3812]! } + public var Contacts_DeselectAll: String { return self._s[3813]! } + public func Wallet_Updated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3814]!, self._r[3814]!, [_0]) + } + public var Username_InvalidTaken: String { return self._s[3815]! } + public var Call_StatusNoAnswer: String { return self._s[3816]! } + public var TwoStepAuth_EmailAddSuccess: String { return self._s[3817]! } + public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[3818]! } + public var Passport_Identity_Selfie: String { return self._s[3819]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[3820]! } + public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[3821]! } + public var Conversation_ClearSecretHistory: String { return self._s[3822]! } + public var PeopleNearby_Description: String { return self._s[3824]! } + public var NetworkUsageSettings_Title: String { return self._s[3825]! } + public var Your_cards_security_code_is_invalid: String { return self._s[3827]! } public func Notification_LeftChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3813]!, self._r[3813]!, [_0]) + return formatWithArgumentRanges(self._s[3829]!, self._r[3829]!, [_0]) } public func Call_CallInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3814]!, self._r[3814]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3830]!, self._r[3830]!, [_1, _2]) } - public var SaveIncomingPhotosSettings_From: String { return self._s[3816]! } - public var VoiceOver_Navigation_Search: String { return self._s[3817]! } - public var Map_LiveLocationTitle: String { return self._s[3818]! } - public var Login_InfoAvatarAdd: String { return self._s[3819]! } - public var Passport_Identity_FilesView: String { return self._s[3820]! } - public var UserInfo_GenericPhoneLabel: String { return self._s[3821]! } - public var Privacy_Calls_NeverAllow: String { return self._s[3822]! } - public var VoiceOver_Chat_File: String { return self._s[3823]! } - public var Wallet_Settings_DeleteWalletInfo: String { return self._s[3824]! } + public var SaveIncomingPhotosSettings_From: String { return self._s[3832]! } + public var VoiceOver_Navigation_Search: String { return self._s[3833]! } + public var Map_LiveLocationTitle: String { return self._s[3834]! } + public var Login_InfoAvatarAdd: String { return self._s[3835]! } + public var Passport_Identity_FilesView: String { return self._s[3836]! } + public var UserInfo_GenericPhoneLabel: String { return self._s[3837]! } + public var Privacy_Calls_NeverAllow: String { return self._s[3838]! } + public var VoiceOver_Chat_File: String { return self._s[3839]! } + public var Wallet_Settings_DeleteWalletInfo: String { return self._s[3840]! } public func Contacts_AddPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3825]!, self._r[3825]!, [_0]) + return formatWithArgumentRanges(self._s[3841]!, self._r[3841]!, [_0]) } - public var ContactInfo_PhoneNumberHidden: String { return self._s[3826]! } - public var TwoStepAuth_ConfirmationText: String { return self._s[3827]! } - public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[3828]! } + public var ContactInfo_PhoneNumberHidden: String { return self._s[3842]! } + public var TwoStepAuth_ConfirmationText: String { return self._s[3843]! } + public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[3844]! } public func PUSH_CHAT_MESSAGE_VIDEOS(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3829]!, self._r[3829]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3845]!, self._r[3845]!, [_1, _2, _3]) } - public var Channel_AdminLogFilter_AdminsAll: String { return self._s[3830]! } - public var Wallet_Intro_CreateErrorText: String { return self._s[3831]! } - public var Tour_Title2: String { return self._s[3832]! } - public var Wallet_Sent_ViewWallet: String { return self._s[3833]! } - public var Conversation_FileOpenIn: String { return self._s[3834]! } - public var Checkout_ErrorPrecheckoutFailed: String { return self._s[3835]! } - public var Wallet_Send_ErrorInvalidAddress: String { return self._s[3836]! } - public var Wallpaper_Set: String { return self._s[3837]! } - public var Passport_Identity_Translations: String { return self._s[3839]! } + public var Channel_AdminLogFilter_AdminsAll: String { return self._s[3846]! } + public var Wallet_Intro_CreateErrorText: String { return self._s[3847]! } + public var Tour_Title2: String { return self._s[3848]! } + public var Wallet_Sent_ViewWallet: String { return self._s[3849]! } + public var Conversation_FileOpenIn: String { return self._s[3850]! } + public var Checkout_ErrorPrecheckoutFailed: String { return self._s[3851]! } + public var Wallet_Send_ErrorInvalidAddress: String { return self._s[3852]! } + public var Wallpaper_Set: String { return self._s[3853]! } + public var Passport_Identity_Translations: String { return self._s[3855]! } public func Channel_AdminLog_MessageChangedChannelAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3840]!, self._r[3840]!, [_0]) + return formatWithArgumentRanges(self._s[3856]!, self._r[3856]!, [_0]) } - public var Channel_LeaveChannel: String { return self._s[3841]! } + public var Channel_LeaveChannel: String { return self._s[3857]! } public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3842]!, self._r[3842]!, [_1]) + return formatWithArgumentRanges(self._s[3858]!, self._r[3858]!, [_1]) } - public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[3844]! } - public var PhotoEditor_HighlightsTint: String { return self._s[3845]! } - public var Passport_Email_Delete: String { return self._s[3846]! } - public var Conversation_Mute: String { return self._s[3848]! } - public var Channel_AddBotAsAdmin: String { return self._s[3849]! } - public var Channel_AdminLog_CanSendMessages: String { return self._s[3851]! } - public var Channel_Management_LabelOwner: String { return self._s[3853]! } + public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[3860]! } + public var PhotoEditor_HighlightsTint: String { return self._s[3861]! } + public var Passport_Email_Delete: String { return self._s[3862]! } + public var Conversation_Mute: String { return self._s[3864]! } + public var Channel_AddBotAsAdmin: String { return self._s[3865]! } + public var Channel_AdminLog_CanSendMessages: String { return self._s[3867]! } + public var Wallet_Configuration_BlockchainNameChangedText: String { return self._s[3868]! } + public var Channel_Management_LabelOwner: String { return self._s[3870]! } public func Notification_PassportValuesSentMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3854]!, self._r[3854]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3871]!, self._r[3871]!, [_1, _2]) } - public var Calls_CallTabDescription: String { return self._s[3855]! } - public var Passport_Identity_NativeNameHelp: String { return self._s[3856]! } - public var Common_No: String { return self._s[3857]! } - public var Weekday_Sunday: String { return self._s[3858]! } - public var Notification_Reply: String { return self._s[3859]! } - public var Conversation_ViewMessage: String { return self._s[3860]! } + public var Calls_CallTabDescription: String { return self._s[3872]! } + public var Passport_Identity_NativeNameHelp: String { return self._s[3873]! } + public var Common_No: String { return self._s[3874]! } + public var Weekday_Sunday: String { return self._s[3875]! } + public var Notification_Reply: String { return self._s[3876]! } + public var Conversation_ViewMessage: String { return self._s[3877]! } public func Checkout_SavePasswordTimeoutAndFaceId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3861]!, self._r[3861]!, [_0]) - } - public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3862]!, self._r[3862]!, [_0]) - } - public func Wallet_Time_PreciseDate_m7(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3863]!, self._r[3863]!, [_1, _2, _3]) - } - public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[3864]! } - public var Wallet_Send_Title: String { return self._s[3865]! } - public var Message_PinnedDocumentMessage: String { return self._s[3866]! } - public var Wallet_Info_RefreshErrorText: String { return self._s[3867]! } - public var DialogList_TabTitle: String { return self._s[3869]! } - public var ChatSettings_AutoPlayTitle: String { return self._s[3870]! } - public var Passport_FieldEmail: String { return self._s[3871]! } - public var Conversation_UnpinMessageAlert: String { return self._s[3872]! } - public var Passport_Address_TypeBankStatement: String { return self._s[3873]! } - public var Wallet_SecureStorageReset_Title: String { return self._s[3874]! } - public var Passport_Identity_ExpiryDate: String { return self._s[3875]! } - public var Privacy_Calls_P2P: String { return self._s[3876]! } - public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3878]!, self._r[3878]!, [_0]) } - public var SocksProxySetup_UseForCallsHelp: String { return self._s[3879]! } - public func PUSH_CHAT_ALBUM(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3880]!, self._r[3880]!, [_1, _2]) + public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3879]!, self._r[3879]!, [_0]) } - public var Stickers_ClearRecent: String { return self._s[3881]! } - public var EnterPasscode_ChangeTitle: String { return self._s[3882]! } - public var TwoFactorSetup_Email_Title: String { return self._s[3883]! } - public var Passport_InfoText: String { return self._s[3884]! } - public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[3885]! } + public func Wallet_Time_PreciseDate_m7(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3880]!, self._r[3880]!, [_1, _2, _3]) + } + public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[3881]! } + public var Wallet_Send_Title: String { return self._s[3882]! } + public var Message_PinnedDocumentMessage: String { return self._s[3883]! } + public var Wallet_Info_RefreshErrorText: String { return self._s[3884]! } + public var DialogList_TabTitle: String { return self._s[3886]! } + public var ChatSettings_AutoPlayTitle: String { return self._s[3887]! } + public var Passport_FieldEmail: String { return self._s[3888]! } + public var Conversation_UnpinMessageAlert: String { return self._s[3889]! } + public var Passport_Address_TypeBankStatement: String { return self._s[3890]! } + public var Wallet_SecureStorageReset_Title: String { return self._s[3891]! } + public var Passport_Identity_ExpiryDate: String { return self._s[3892]! } + public var Privacy_Calls_P2P: String { return self._s[3893]! } + public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3895]!, self._r[3895]!, [_0]) + } + public var SocksProxySetup_UseForCallsHelp: String { return self._s[3896]! } + public func PUSH_CHAT_ALBUM(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3897]!, self._r[3897]!, [_1, _2]) + } + public var Stickers_ClearRecent: String { return self._s[3898]! } + public var EnterPasscode_ChangeTitle: String { return self._s[3899]! } + public var TwoFactorSetup_Email_Title: String { return self._s[3900]! } + public var Passport_InfoText: String { return self._s[3901]! } + public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[3902]! } public func Login_InvalidPhoneEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3886]!, self._r[3886]!, [_0]) + return formatWithArgumentRanges(self._s[3903]!, self._r[3903]!, [_0]) } public func Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3887]!, self._r[3887]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3904]!, self._r[3904]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[3888]! } - public var ScheduledMessages_PollUnavailable: String { return self._s[3889]! } - public var VoiceOver_Navigation_Compose: String { return self._s[3890]! } - public var Passport_Identity_EditDriversLicense: String { return self._s[3891]! } - public var Conversation_TapAndHoldToRecord: String { return self._s[3893]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[3894]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[3905]! } + public var ScheduledMessages_PollUnavailable: String { return self._s[3906]! } + public var VoiceOver_Navigation_Compose: String { return self._s[3907]! } + public var Passport_Identity_EditDriversLicense: String { return self._s[3908]! } + public var Conversation_TapAndHoldToRecord: String { return self._s[3910]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[3911]! } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3895]!, self._r[3895]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3912]!, self._r[3912]!, [_1, _2]) } - public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[3897]! } - public var ChatSettings_OpenLinksIn: String { return self._s[3898]! } + public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[3914]! } + public var ChatSettings_OpenLinksIn: String { return self._s[3915]! } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3900]!, self._r[3900]!, [_0]) + return formatWithArgumentRanges(self._s[3917]!, self._r[3917]!, [_0]) } - public var DialogList_Unread: String { return self._s[3901]! } + public var DialogList_Unread: String { return self._s[3918]! } public func PUSH_CHAT_MESSAGE_GIF(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3902]!, self._r[3902]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3919]!, self._r[3919]!, [_1, _2]) } - public var User_DeletedAccount: String { return self._s[3903]! } - public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[3904]! } + public var User_DeletedAccount: String { return self._s[3920]! } + public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[3921]! } public func Watch_Time_ShortYesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3905]!, self._r[3905]!, [_0]) + return formatWithArgumentRanges(self._s[3922]!, self._r[3922]!, [_0]) } - public var UserInfo_NotificationsDefault: String { return self._s[3906]! } - public var SharedMedia_CategoryMedia: String { return self._s[3907]! } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[3908]! } - public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[3909]! } - public var Watch_ChatList_Compose: String { return self._s[3910]! } - public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[3911]! } - public var AutoDownloadSettings_Delimeter: String { return self._s[3912]! } - public var Watch_Microphone_Access: String { return self._s[3913]! } - public var Group_Setup_HistoryHeader: String { return self._s[3914]! } - public var Map_SetThisLocation: String { return self._s[3915]! } - public var Appearance_ThemePreview_Chat_2_ReplyName: String { return self._s[3916]! } - public var Activity_UploadingPhoto: String { return self._s[3917]! } - public var Conversation_Edit: String { return self._s[3919]! } - public var Group_ErrorSendRestrictedMedia: String { return self._s[3920]! } - public var Login_TermsOfServiceDecline: String { return self._s[3921]! } - public var Message_PinnedContactMessage: String { return self._s[3922]! } + public var UserInfo_NotificationsDefault: String { return self._s[3923]! } + public var SharedMedia_CategoryMedia: String { return self._s[3924]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[3925]! } + public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[3926]! } + public var Watch_ChatList_Compose: String { return self._s[3927]! } + public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[3928]! } + public var AutoDownloadSettings_Delimeter: String { return self._s[3929]! } + public var Watch_Microphone_Access: String { return self._s[3930]! } + public var Group_Setup_HistoryHeader: String { return self._s[3931]! } + public var Map_SetThisLocation: String { return self._s[3932]! } + public var Appearance_ThemePreview_Chat_2_ReplyName: String { return self._s[3933]! } + public var Activity_UploadingPhoto: String { return self._s[3934]! } + public var Conversation_Edit: String { return self._s[3936]! } + public var Group_ErrorSendRestrictedMedia: String { return self._s[3937]! } + public var Login_TermsOfServiceDecline: String { return self._s[3938]! } + public var Message_PinnedContactMessage: String { return self._s[3939]! } public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3923]!, self._r[3923]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3940]!, self._r[3940]!, [_1, _2]) } public func Login_PhoneBannedEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3924]!, self._r[3924]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[3941]!, self._r[3941]!, [_1, _2, _3, _4, _5]) } - public var Appearance_LargeEmoji: String { return self._s[3925]! } - public var TwoStepAuth_AdditionalPassword: String { return self._s[3927]! } - public var EditTheme_Edit_Preview_IncomingReplyText: String { return self._s[3928]! } + public var Appearance_LargeEmoji: String { return self._s[3942]! } + public var TwoStepAuth_AdditionalPassword: String { return self._s[3944]! } + public var EditTheme_Edit_Preview_IncomingReplyText: String { return self._s[3945]! } public func PUSH_CHAT_DELETE_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3929]!, self._r[3929]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3946]!, self._r[3946]!, [_1, _2]) } - public var Passport_Phone_EnterOtherNumber: String { return self._s[3930]! } - public var Message_PinnedPhotoMessage: String { return self._s[3931]! } - public var Passport_FieldPhone: String { return self._s[3932]! } - public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3933]! } - public var ChatSettings_AutoPlayGifs: String { return self._s[3934]! } - public var InfoPlist_NSCameraUsageDescription: String { return self._s[3936]! } - public var Conversation_Call: String { return self._s[3937]! } - public var Common_TakePhoto: String { return self._s[3939]! } - public var Group_EditAdmin_RankTitle: String { return self._s[3940]! } - public var Wallet_Receive_CommentHeader: String { return self._s[3941]! } - public var Channel_NotificationLoading: String { return self._s[3942]! } + public var Passport_Phone_EnterOtherNumber: String { return self._s[3947]! } + public var Message_PinnedPhotoMessage: String { return self._s[3948]! } + public var Passport_FieldPhone: String { return self._s[3949]! } + public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3950]! } + public var ChatSettings_AutoPlayGifs: String { return self._s[3951]! } + public var InfoPlist_NSCameraUsageDescription: String { return self._s[3953]! } + public var Conversation_Call: String { return self._s[3954]! } + public var Common_TakePhoto: String { return self._s[3956]! } + public var Group_EditAdmin_RankTitle: String { return self._s[3957]! } + public var Wallet_Receive_CommentHeader: String { return self._s[3958]! } + public var Channel_NotificationLoading: String { return self._s[3959]! } public func Notification_Exceptions_Sound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3943]!, self._r[3943]!, [_0]) + return formatWithArgumentRanges(self._s[3960]!, self._r[3960]!, [_0]) } public func ScheduledMessages_ScheduledDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3944]!, self._r[3944]!, [_0]) + return formatWithArgumentRanges(self._s[3961]!, self._r[3961]!, [_0]) } public func PUSH_CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3945]!, self._r[3945]!, [_1]) + return formatWithArgumentRanges(self._s[3962]!, self._r[3962]!, [_1]) } - public var Permissions_SiriTitle_v0: String { return self._s[3946]! } + public var Permissions_SiriTitle_v0: String { return self._s[3963]! } public func VoiceOver_Chat_VoiceMessageFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3947]!, self._r[3947]!, [_0]) + return formatWithArgumentRanges(self._s[3964]!, self._r[3964]!, [_0]) } public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3948]!, self._r[3948]!, [_0]) + return formatWithArgumentRanges(self._s[3965]!, self._r[3965]!, [_0]) } - public var Channel_MessagePhotoRemoved: String { return self._s[3949]! } - public var Wallet_Info_ReceiveGrams: String { return self._s[3950]! } - public var ClearCache_FreeSpace: String { return self._s[3951]! } - public var Common_edit: String { return self._s[3952]! } - public var PrivacySettings_AuthSessions: String { return self._s[3953]! } - public var Month_ShortJune: String { return self._s[3954]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3955]! } - public var Call_ReportSend: String { return self._s[3956]! } - public var Watch_LastSeen_JustNow: String { return self._s[3957]! } - public var Notifications_MessageNotifications: String { return self._s[3958]! } - public var WallpaperSearch_ColorGreen: String { return self._s[3959]! } - public var BroadcastListInfo_AddRecipient: String { return self._s[3961]! } - public var Group_Status: String { return self._s[3962]! } + public var Channel_MessagePhotoRemoved: String { return self._s[3966]! } + public var Wallet_Info_ReceiveGrams: String { return self._s[3967]! } + public var ClearCache_FreeSpace: String { return self._s[3968]! } + public var Common_edit: String { return self._s[3969]! } + public var PrivacySettings_AuthSessions: String { return self._s[3970]! } + public var Month_ShortJune: String { return self._s[3971]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3972]! } + public var Call_ReportSend: String { return self._s[3973]! } + public var Watch_LastSeen_JustNow: String { return self._s[3974]! } + public var Notifications_MessageNotifications: String { return self._s[3975]! } + public var WallpaperSearch_ColorGreen: String { return self._s[3976]! } + public var BroadcastListInfo_AddRecipient: String { return self._s[3978]! } + public var Group_Status: String { return self._s[3979]! } public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3963]!, self._r[3963]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3980]!, self._r[3980]!, [_0, _1]) } - public var TextFormat_AddLinkTitle: String { return self._s[3964]! } - public var ShareMenu_ShareTo: String { return self._s[3965]! } - public var Conversation_Moderate_Ban: String { return self._s[3966]! } + public var TextFormat_AddLinkTitle: String { return self._s[3981]! } + public var ShareMenu_ShareTo: String { return self._s[3982]! } + public var Conversation_Moderate_Ban: String { return self._s[3983]! } public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3967]!, self._r[3967]!, [_0]) + return formatWithArgumentRanges(self._s[3984]!, self._r[3984]!, [_0]) } - public var SharedMedia_ViewInChat: String { return self._s[3968]! } - public var Map_LiveLocationFor8Hours: String { return self._s[3969]! } + public var SharedMedia_ViewInChat: String { return self._s[3985]! } + public var Map_LiveLocationFor8Hours: String { return self._s[3986]! } public func PUSH_PINNED_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3970]!, self._r[3970]!, [_1]) + return formatWithArgumentRanges(self._s[3987]!, self._r[3987]!, [_1]) } public func PUSH_PINNED_POLL(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3971]!, self._r[3971]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3988]!, self._r[3988]!, [_1, _2]) } public func Map_AccurateTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3973]!, self._r[3973]!, [_0]) + return formatWithArgumentRanges(self._s[3990]!, self._r[3990]!, [_0]) } - public var Map_OpenInHereMaps: String { return self._s[3974]! } - public var Appearance_ReduceMotion: String { return self._s[3975]! } + public var Map_OpenInHereMaps: String { return self._s[3991]! } + public var Appearance_ReduceMotion: String { return self._s[3992]! } public func PUSH_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3976]!, self._r[3976]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3993]!, self._r[3993]!, [_1, _2]) } - public var Channel_Setup_TypePublicHelp: String { return self._s[3977]! } - public var Passport_Identity_EditInternalPassport: String { return self._s[3978]! } - public var PhotoEditor_Skip: String { return self._s[3979]! } - public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { + public var Channel_Setup_TypePublicHelp: String { return self._s[3994]! } + public var Passport_Identity_EditInternalPassport: String { return self._s[3995]! } + public var PhotoEditor_Skip: String { return self._s[3996]! } + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue) } - public func Call_ShortSeconds(_ value: Int32) -> String { + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Call_ShortMinutes(_ value: Int32) -> String { + public func LastSeen_HoursAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, _0, _1) - } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, stringValue) } public func Invitation_Members(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_SelectedMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_StickerCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue) - } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusMembers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) - } - public func InviteText_ContactsCountText(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedStickers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedVideos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedPhotos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) - } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue) } public func MessageTimer_ShortHours(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteExpires_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_File(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedContacts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteExpires_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_Seconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedFiles(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Photo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAudios(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Weeks(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortDays(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Video(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_Exceptions(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteFor_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) - } - public func UserCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Months(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Map_ETAHours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedLocations(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteExpires_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue) } public func MessageTimer_Minutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func MessageTimer_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Map_ETAMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_ShareItem(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Contacts_ImportersCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MessageTimer_Seconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_ShareVideo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedVideoMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessagePoll_VotedCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Passport_Scans(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedPolls(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func MuteFor_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, _1, _2) + return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue) } public func SharedMedia_Link(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue) } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { + public func Call_ShortMinutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_SharePhoto(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Theme_UsersCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue) } public func ChatList_SelectedChats(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, stringValue) } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + public func Media_SharePhoto(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_Generic(_ value: Int32) -> String { + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, _1, _2) + return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue) } public func MessageTimer_Years(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + public func SharedMedia_Photo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedGifs(_ value: Int32) -> String { + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) } - public func QuickSend_Photos(_ value: Int32) -> String { + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Theme_UsersCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, _0, _1) + } + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_AddStickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Map_ETAMinutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) } public func Notification_GameScoreExtended(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Months(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_File(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Media_ShareItem(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func SharedMedia_Generic(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusMembers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedFiles(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) + } + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedVideos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendItem(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Contacts_ImportersCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Map_ETAHours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) + } + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) + } + public func InviteText_ContactsCountText(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedLocations(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Passport_Scans(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue) + } + public func QuickSend_Photos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MuteFor_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_SelectedMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessagePoll_VotedCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_Exceptions(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortDays(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedAudios(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_Seconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedGifs(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedContacts(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendGif(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Call_ShortSeconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedPolls(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func ForwardedPhotos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) } public func Conversation_StatusOnline(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MessageTimer_Seconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Conversation_StatusSubscribers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) + } + public func UserCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedVideoMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_ShareVideo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_StickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Video(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteFor_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Watch_UserInfo_Mute(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_AddMaskCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedStickers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Weeks(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, stringValue) diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceCodeEntryControllerNode.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceCodeEntryControllerNode.swift index 6a13e9ac2d..642949cf49 100644 --- a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceCodeEntryControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceCodeEntryControllerNode.swift @@ -215,11 +215,7 @@ final class AuthorizationSequenceCodeEntryControllerNode: ASDisplayNode, UITextF insets.top = navigationBarHeight if let inputHeight = layout.inputHeight { - if abs(inputHeight - (layout.standardInputHeight - 44.0)) < 2.0 { - insets.bottom += layout.standardInputHeight - } else { - insets.bottom += inputHeight - } + insets.bottom += max(inputHeight, layout.standardInputHeight) } if max(layout.size.width, layout.size.height) > 1023.0 { diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequencePasswordEntryControllerNode.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequencePasswordEntryControllerNode.swift index 1eaa5b1108..7bb6c9fe68 100644 --- a/submodules/TelegramUI/TelegramUI/AuthorizationSequencePasswordEntryControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequencePasswordEntryControllerNode.swift @@ -111,11 +111,7 @@ final class AuthorizationSequencePasswordEntryControllerNode: ASDisplayNode, UIT insets.top = navigationBarHeight if let inputHeight = layout.inputHeight { - if abs(inputHeight - (layout.standardInputHeight - 44.0)) < 2.0 { - insets.bottom += layout.standardInputHeight - } else { - insets.bottom += inputHeight - } + insets.bottom += max(inputHeight, layout.standardInputHeight) } if max(layout.size.width, layout.size.height) > 1023.0 { diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryControllerNode.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryControllerNode.swift index ab4ed4921b..af8e2af666 100644 --- a/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryControllerNode.swift @@ -297,12 +297,8 @@ final class AuthorizationSequencePhoneEntryControllerNode: ASDisplayNode { var insets = layout.insets(options: []) insets.top = navigationBarHeight - if let inputHeight = layout.inputHeight { - if abs(inputHeight - (layout.standardInputHeight - 44.0)) < 2.0 { - insets.bottom += layout.standardInputHeight - } else { - insets.bottom += inputHeight - } + if let inputHeight = layout.inputHeight, !inputHeight.isZero { + insets.bottom += max(inputHeight, layout.standardInputHeight) } if max(layout.size.width, layout.size.height) > 1023.0 { diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSignUpControllerNode.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSignUpControllerNode.swift index ec90b2aa2d..c20b22fda6 100644 --- a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSignUpControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSignUpControllerNode.swift @@ -191,11 +191,7 @@ final class AuthorizationSequenceSignUpControllerNode: ASDisplayNode, UITextFiel var insets = layout.insets(options: [.statusBar]) if let inputHeight = layout.inputHeight { - if abs(inputHeight - (layout.standardInputHeight - 44.0)) < 2.0 { - insets.bottom += layout.standardInputHeight - } else { - insets.bottom += inputHeight - } + insets.bottom += max(inputHeight, layout.standardInputHeight) } let availableHeight = max(1.0, layout.size.height - insets.top - insets.bottom) diff --git a/submodules/TelegramUI/TelegramUI/ChatContextResultPeekContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatContextResultPeekContentNode.swift index 33493ee366..bf3529fd36 100644 --- a/submodules/TelegramUI/TelegramUI/ChatContextResultPeekContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatContextResultPeekContentNode.swift @@ -159,7 +159,7 @@ private final class ChatContextResultPeekNode: ASDisplayNode, PeekControllerCont } else if let thumbnail = thumbnail { imageResource = thumbnail.resource } - imageDimensions = content?.dimensions + imageDimensions = content?.dimensions?.cgSize if let content = content, type == "gif", let thumbnailResource = imageResource , let dimensions = content.dimensions { videoFileReference = .standalone(media: TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: 0), partialReference: nil, resource: content.resource, previewRepresentations: [TelegramMediaImageRepresentation(dimensions: dimensions, resource: thumbnailResource)], immediateThumbnailData: nil, mimeType: "video/mp4", size: nil, attributes: [.Animated, .Video(duration: 0, size: dimensions, flags: [])])) @@ -168,14 +168,14 @@ private final class ChatContextResultPeekNode: ASDisplayNode, PeekControllerCont case let .internalReference(_, _, _, title, _, image, file, _): if let image = image { if let largestRepresentation = largestImageRepresentation(image.representations) { - imageDimensions = largestRepresentation.dimensions + imageDimensions = largestRepresentation.dimensions.cgSize } - imageResource = imageRepresentationLargerThan(image.representations, size: CGSize(width: 200.0, height: 100.0))?.resource + imageResource = imageRepresentationLargerThan(image.representations, size: PixelDimensions(width: 200, height: 100))?.resource } else if let file = file { if let dimensions = file.dimensions { - imageDimensions = dimensions + imageDimensions = dimensions.cgSize } else if let largestRepresentation = largestImageRepresentation(file.previewRepresentations) { - imageDimensions = largestRepresentation.dimensions + imageDimensions = largestRepresentation.dimensions.cgSize } imageResource = smallestImageRepresentation(file.previewRepresentations)?.resource } @@ -224,7 +224,7 @@ private final class ChatContextResultPeekNode: ASDisplayNode, PeekControllerCont if updatedImageResource { if let imageResource = imageResource { - let tmpRepresentation = TelegramMediaImageRepresentation(dimensions: CGSize(width: fittedImageDimensions.width * 2.0, height: fittedImageDimensions.height * 2.0), resource: imageResource) + let tmpRepresentation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: Int32(fittedImageDimensions.width * 2.0), height: Int32(fittedImageDimensions.height * 2.0)), resource: imageResource) let tmpImage = TelegramMediaImage(imageId: MediaId(namespace: 0, id: 0), representations: [tmpRepresentation], immediateThumbnailData: nil, reference: nil, partialReference: nil) updateImageSignal = chatMessagePhoto(postbox: self.account.postbox, photoReference: .standalone(media: tmpImage)) } else { diff --git a/submodules/TelegramUI/TelegramUI/ChatController.swift b/submodules/TelegramUI/TelegramUI/ChatController.swift index cb80abc408..b8f159f12d 100644 --- a/submodules/TelegramUI/TelegramUI/ChatController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatController.swift @@ -5609,7 +5609,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G let mimeType = guessMimeTypeByFileExtension((item.fileName as NSString).pathExtension) var previewRepresentations: [TelegramMediaImageRepresentation] = [] if mimeType == "application/pdf" { - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: CGSize(width: 320.0, height: 320.0), resource: ICloudFileResource(urlData: item.urlData, thumbnail: true))) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 320, height: 320), resource: ICloudFileResource(urlData: item.urlData, thumbnail: true))) } let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: fileId), partialReference: nil, resource: ICloudFileResource(urlData: item.urlData, thumbnail: false), previewRepresentations: previewRepresentations, immediateThumbnailData: nil, mimeType: mimeType, size: item.fileSize, attributes: [.FileName(fileName: item.fileName)]) let message: EnqueueMessage = .message(text: "", attributes: [], mediaReference: .standalone(media: file), replyToMessageId: replyMessageId, localGroupingKey: nil) @@ -6078,7 +6078,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G var fileAttributes: [TelegramMediaFileAttribute] = [] fileAttributes.append(.FileName(fileName: "sticker.webp")) fileAttributes.append(.Sticker(displayText: "", packReference: nil, maskData: nil)) - fileAttributes.append(.ImageSize(size: size)) + fileAttributes.append(.ImageSize(size: PixelDimensions(size))) let media = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: arc4random64()), partialReference: nil, resource: resource, previewRepresentations: [], immediateThumbnailData: nil, mimeType: "image/webp", size: data.count, attributes: fileAttributes) let message = EnqueueMessage.message(text: "", attributes: [], mediaReference: .standalone(media: media), replyToMessageId: nil, localGroupingKey: nil) @@ -8187,6 +8187,8 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent let navigationController: NavigationController? = nil + let passthroughTouches: Bool = false + init(controller: ViewController, sourceNode: ASDisplayNode?) { self.controller = controller self.sourceNode = sourceNode @@ -8202,4 +8204,7 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent } }) } + + func animatedIn() { + } } diff --git a/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift index 8fea24ebed..8babf32cbc 100644 --- a/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift @@ -99,6 +99,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { private var inputPanelNode: ChatInputPanelNode? private var accessoryPanelNode: AccessoryPanelNode? private var inputContextPanelNode: ChatInputContextPanelNode? + private let inputContextPanelContainer: ChatControllerTitlePanelNodeContainer private var overlayContextPanelNode: ChatInputContextPanelNode? private var inputNode: ChatInputNode? @@ -201,6 +202,8 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { self.titleAccessoryPanelContainer = ChatControllerTitlePanelNodeContainer() self.titleAccessoryPanelContainer.clipsToBounds = true + self.inputContextPanelContainer = ChatControllerTitlePanelNodeContainer() + self.historyNode = ChatHistoryListNode(context: context, chatLocation: chatLocation, tagMask: nil, subject: subject, controllerInteraction: controllerInteraction, selectedMessages: self.selectedMessagesPromise.get()) self.historyNode.rotated = true self.historyNodeContainer = ASDisplayNode() @@ -269,6 +272,8 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { self.addSubnode(self.inputPanelBackgroundNode) self.addSubnode(self.inputPanelBackgroundSeparatorNode) + self.addSubnode(self.inputContextPanelContainer) + self.addSubnode(self.navigateButtons) self.historyNode.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:)))) @@ -678,6 +683,8 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { transition.updateFrame(node: self.titleAccessoryPanelContainer, frame: CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: 56.0))) + transition.updateFrame(node: self.inputContextPanelContainer, frame: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: layout.size.width, height: layout.size.height))) + var titleAccessoryPanelFrame: CGRect? if let _ = self.titleAccessoryPanelNode, let panelHeight = titleAccessoryPanelHeight { titleAccessoryPanelFrame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: layout.size.width, height: panelHeight)) @@ -768,7 +775,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { dismissedInputContextPanelNode = self.inputContextPanelNode self.inputContextPanelNode = inputContextPanelNode - self.addSubnode(inputContextPanelNode) + self.inputContextPanelContainer.addSubnode(inputContextPanelNode) immediatelyLayoutInputContextPanelAndAnimateAppearance = true } } else if let inputContextPanelNode = self.inputContextPanelNode { @@ -1081,16 +1088,21 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { let inputContextPanelsFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: max(0.0, layout.size.height - insets.bottom - inputPanelsHeight - insets.top))) let inputContextPanelsOverMainPanelFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: max(0.0, layout.size.height - insets.bottom - (inputPanelSize == nil ? CGFloat(0.0) : inputPanelSize!.height) - insets.top))) + if transition.isAnimated, let derivedLayoutState = self.derivedLayoutState { + let offset = derivedLayoutState.inputContextPanelsOverMainPanelFrame.maxY - inputContextPanelsOverMainPanelFrame.maxY + transition.animateOffsetAdditive(node: self.inputContextPanelContainer, offset: -offset) + } + if let inputContextPanelNode = self.inputContextPanelNode { let panelFrame = inputContextPanelNode.placement == .overTextInput ? inputContextPanelsOverMainPanelFrame : inputContextPanelsFrame if immediatelyLayoutInputContextPanelAndAnimateAppearance { - var startPanelFrame = panelFrame + /*var startPanelFrame = panelFrame if let derivedLayoutState = self.derivedLayoutState { let referenceFrame = inputContextPanelNode.placement == .overTextInput ? derivedLayoutState.inputContextPanelsOverMainPanelFrame : derivedLayoutState.inputContextPanelsFrame startPanelFrame.origin.y = referenceFrame.maxY - panelFrame.height - } - inputContextPanelNode.frame = startPanelFrame - inputContextPanelNode.updateLayout(size: startPanelFrame.size, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right, bottomInset: 0.0, transition: .immediate, interfaceState: self.chatPresentationInterfaceState) + }*/ + inputContextPanelNode.frame = panelFrame + inputContextPanelNode.updateLayout(size: panelFrame.size, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right, bottomInset: 0.0, transition: .immediate, interfaceState: self.chatPresentationInterfaceState) } if !inputContextPanelNode.frame.equalTo(panelFrame) || inputContextPanelNode.theme !== self.chatPresentationInterfaceState.theme { diff --git a/submodules/TelegramUI/TelegramUI/ChatMediaInputGifPane.swift b/submodules/TelegramUI/TelegramUI/ChatMediaInputGifPane.swift index 8c3ff74e11..73fc9515e6 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMediaInputGifPane.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMediaInputGifPane.swift @@ -7,18 +7,19 @@ import TelegramCore import SyncCore import SwiftSignalKit import TelegramPresentationData +import ContextUI private func fixListScrolling(_ multiplexedNode: MultiplexedVideoNode) { let searchBarHeight: CGFloat = 56.0 - let contentOffset = multiplexedNode.view.contentOffset.y + let contentOffset = multiplexedNode.scrollNode.view.contentOffset.y let transition = ContainedViewLayoutTransition.animated(duration: 0.3, curve: .easeInOut) if contentOffset < 60.0 { if contentOffset < searchBarHeight * 0.6 { - transition.updateBounds(layer: multiplexedNode.layer, bounds: CGRect(origin: CGPoint(), size: multiplexedNode.bounds.size)) + transition.updateBounds(layer: multiplexedNode.scrollNode.layer, bounds: CGRect(origin: CGPoint(), size: multiplexedNode.bounds.size)) } else { - transition.updateBounds(layer: multiplexedNode.layer, bounds: CGRect(origin: CGPoint(x: 0.0, y: 60.0), size: multiplexedNode.bounds.size)) + transition.updateBounds(layer: multiplexedNode.scrollNode.layer, bounds: CGRect(origin: CGPoint(x: 0.0, y: 60.0), size: multiplexedNode.bounds.size)) } } } @@ -29,6 +30,7 @@ final class ChatMediaInputGifPane: ChatMediaInputPane, UIScrollViewDelegate { private let paneDidScroll: (ChatMediaInputPane, ChatMediaInputPaneScrollState, ContainedViewLayoutTransition) -> Void private let fixPaneScroll: (ChatMediaInputPane, ChatMediaInputPaneScrollState) -> Void + private let openGifContextMenu: (FileMediaReference, ASDisplayNode, CGRect, ContextGesture) -> Void let searchPlaceholderNode: PaneSearchBarPlaceholderNode private var multiplexedNode: MultiplexedVideoNode? @@ -42,11 +44,12 @@ final class ChatMediaInputGifPane: ChatMediaInputPane, UIScrollViewDelegate { private var didScrollPreviousState: ChatMediaInputPaneScrollState? - init(account: Account, theme: PresentationTheme, strings: PresentationStrings, controllerInteraction: ChatControllerInteraction, paneDidScroll: @escaping (ChatMediaInputPane, ChatMediaInputPaneScrollState, ContainedViewLayoutTransition) -> Void, fixPaneScroll: @escaping (ChatMediaInputPane, ChatMediaInputPaneScrollState) -> Void) { + init(account: Account, theme: PresentationTheme, strings: PresentationStrings, controllerInteraction: ChatControllerInteraction, paneDidScroll: @escaping (ChatMediaInputPane, ChatMediaInputPaneScrollState, ContainedViewLayoutTransition) -> Void, fixPaneScroll: @escaping (ChatMediaInputPane, ChatMediaInputPaneScrollState) -> Void, openGifContextMenu: @escaping (FileMediaReference, ASDisplayNode, CGRect, ContextGesture) -> Void) { self.account = account self.controllerInteraction = controllerInteraction self.paneDidScroll = paneDidScroll self.fixPaneScroll = fixPaneScroll + self.openGifContextMenu = openGifContextMenu self.searchPlaceholderNode = PaneSearchBarPlaceholderNode() @@ -94,7 +97,7 @@ final class ChatMediaInputGifPane: ChatMediaInputPane, UIScrollViewDelegate { transition.updateFrame(node: self.emptyNode, frame: CGRect(origin: CGPoint(x: floor(size.width - emptySize.width) / 2.0, y: topInset + floor(size.height - topInset - emptySize.height) / 2.0), size: emptySize)) if let multiplexedNode = self.multiplexedNode { - let previousBounds = multiplexedNode.layer.bounds + let previousBounds = multiplexedNode.scrollNode.layer.bounds multiplexedNode.topInset = topInset + 60.0 multiplexedNode.bottomInset = bottomInset @@ -111,8 +114,8 @@ final class ChatMediaInputGifPane: ChatMediaInputPane, UIScrollViewDelegate { targetBounds.origin.y = isExpanded || multiplexedNode.files.isEmpty ? 0.0 : 60.0 } - transition.updateBounds(layer: multiplexedNode.layer, bounds: targetBounds) - transition.updatePosition(layer: multiplexedNode.layer, position: nodeFrame.center) + transition.updateBounds(layer: multiplexedNode.scrollNode.layer, bounds: targetBounds) + transition.updateFrame(node: multiplexedNode, frame: nodeFrame) multiplexedNode.updateLayout(size: nodeFrame.size, transition: transition) self.searchPlaceholderNode.frame = CGRect(x: 0.0, y: 41.0, width: size.width, height: 56.0) @@ -134,6 +137,10 @@ final class ChatMediaInputGifPane: ChatMediaInputPane, UIScrollViewDelegate { override func willEnterHierarchy() { super.willEnterHierarchy() + self.initializeIfNeeded() + } + + func initializeIfNeeded() { if self.multiplexedNode == nil { self.trendingPromise.set(paneGifSearchForQuery(account: account, query: "", updateActivity: nil)) @@ -144,30 +151,31 @@ final class ChatMediaInputGifPane: ChatMediaInputPane, UIScrollViewDelegate { } self.addSubnode(multiplexedNode) - multiplexedNode.addSubnode(self.searchPlaceholderNode) + multiplexedNode.scrollNode.addSubnode(self.searchPlaceholderNode) let gifs = self.account.postbox.combinedView(keys: [.orderedItemList(id: Namespaces.OrderedItemList.CloudRecentGifs)]) - |> map { view -> [FileMediaReference] in - var recentGifs: OrderedItemListView? - if let orderedView = view.views[.orderedItemList(id: Namespaces.OrderedItemList.CloudRecentGifs)] { - recentGifs = orderedView as? OrderedItemListView - } - if let recentGifs = recentGifs { - return recentGifs.items.map { item in - let file = (item.contents as! RecentMediaItem).media as! TelegramMediaFile - return .savedGif(media: file) - } - } else { - return [] + |> map { view -> [FileMediaReference] in + var recentGifs: OrderedItemListView? + if let orderedView = view.views[.orderedItemList(id: Namespaces.OrderedItemList.CloudRecentGifs)] { + recentGifs = orderedView as? OrderedItemListView + } + if let recentGifs = recentGifs { + return recentGifs.items.map { item in + let file = (item.contents as! RecentMediaItem).media as! TelegramMediaFile + return .savedGif(media: file) } + } else { + return [] + } } - self.disposable.set((gifs |> deliverOnMainQueue).start(next: { [weak self] gifs in + self.disposable.set((gifs + |> deliverOnMainQueue).start(next: { [weak self] gifs in if let strongSelf = self { let previousFiles = strongSelf.multiplexedNode?.files strongSelf.multiplexedNode?.files = gifs strongSelf.emptyNode.isHidden = !gifs.isEmpty if (previousFiles ?? []).isEmpty && !gifs.isEmpty { - strongSelf.multiplexedNode?.view.contentOffset = CGPoint(x: 0.0, y: 60.0) + strongSelf.multiplexedNode?.scrollNode.view.contentOffset = CGPoint(x: 0.0, y: 60.0) } } })) @@ -176,6 +184,10 @@ final class ChatMediaInputGifPane: ChatMediaInputPane, UIScrollViewDelegate { let _ = self?.controllerInteraction.sendGif(fileReference, sourceNode, sourceRect) } + multiplexedNode.fileContextMenu = { [weak self] fileReference, sourceNode, sourceRect, gesture in + self?.openGifContextMenu(fileReference, sourceNode, sourceRect, gesture) + } + multiplexedNode.didScroll = { [weak self] offset, height in guard let strongSelf = self else { return diff --git a/submodules/TelegramUI/TelegramUI/ChatMediaInputNode.swift b/submodules/TelegramUI/TelegramUI/ChatMediaInputNode.swift index 30ddd714ff..864816fb8b 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMediaInputNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMediaInputNode.swift @@ -12,6 +12,8 @@ import AccountContext import StickerPackPreviewUI import PeerInfoUI import SettingsUI +import ContextUI +import GalleryUI private struct PeerSpecificPackData { let peer: Peer @@ -466,6 +468,7 @@ final class ChatMediaInputNode: ChatInputNode { var paneDidScrollImpl: ((ChatMediaInputPane, ChatMediaInputPaneScrollState, ContainedViewLayoutTransition) -> Void)? var fixPaneScrollImpl: ((ChatMediaInputPane, ChatMediaInputPaneScrollState) -> Void)? + var openGifContextMenuImpl: ((FileMediaReference, ASDisplayNode, CGRect, ContextGesture) -> Void)? self.stickerPane = ChatMediaInputStickerPane(theme: theme, strings: strings, paneDidScroll: { pane, state, transition in paneDidScrollImpl?(pane, state, transition) @@ -476,6 +479,8 @@ final class ChatMediaInputNode: ChatInputNode { paneDidScrollImpl?(pane, state, transition) }, fixPaneScroll: { pane, state in fixPaneScrollImpl?(pane, state) + }, openGifContextMenu: { fileReference, sourceNode, sourceRect, gesture in + openGifContextMenuImpl?(fileReference, sourceNode, sourceRect, gesture) }) var getItemIsPreviewedImpl: ((StickerPackItem) -> Bool)? @@ -806,6 +811,37 @@ final class ChatMediaInputNode: ChatInputNode { fixPaneScrollImpl = { [weak self] pane, state in self?.fixPaneScroll(pane: pane, state: state) } + + openGifContextMenuImpl = { [weak self] fileReference, sourceNode, sourceRect, gesture in + guard let strongSelf = self else { + return + } + + let message = Message(stableId: 0, stableVersion: 0, id: MessageId(peerId: PeerId(namespace: 0, id: 0), namespace: Namespaces.Message.Local, id: 0), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 0, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: nil, text: "", attributes: [], media: [fileReference.media], peers: SimpleDictionary(), associatedMessages: SimpleDictionary(), associatedMessageIds: []) + + let gallery = GalleryController(context: strongSelf.context, source: .standaloneMessage(message), streamSingleVideo: true, replaceRootController: { _, _ in + }, baseNavigationController: nil) + gallery.setHintWillBePresentedInPreviewingContext(true) + + var items: [ContextMenuItem] = [] + items.append(.action(ContextMenuActionItem(text: strings.MediaPicker_Send, icon: { _ in nil }, action: { _, f in + f(.default) + self?.controllerInteraction.sendGif(fileReference, sourceNode, sourceRect) + }))) + items.append(.action(ContextMenuActionItem(text: strings.Conversation_ContextMenuDelete, textColor: .destructive, icon: { _ in nil }, action: { _, f in + f(.dismissWithoutContent) + + guard let strongSelf = self else { + return + } + let _ = removeSavedGif(postbox: strongSelf.context.account.postbox, mediaId: fileReference.media.fileId).start() + }))) + + let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 } + + let contextController = ContextController(account: strongSelf.context.account, theme: presentationData.theme, strings: presentationData.strings, source: .controller(ContextControllerContentSourceImpl(controller: gallery, sourceNode: sourceNode, sourceRect: sourceRect)), items: .single(items), reactionItems: [], gesture: gesture) + strongSelf.controllerInteraction.presentGlobalOverlayController(contextController, nil) + } } deinit { @@ -903,7 +939,8 @@ final class ChatMediaInputNode: ChatInputNode { } } } else if let file = item as? FileMediaReference { - return .single((strongSelf, ChatContextResultPeekContent(account: strongSelf.context.account, contextResult: .internalReference(queryId: 0, id: "", type: "gif", title: nil, description: nil, image: nil, file: file.media, message: .auto(caption: "", entities: nil, replyMarkup: nil)), menu: [ + return nil + /*return .single((strongSelf, ChatContextResultPeekContent(account: strongSelf.context.account, contextResult: .internalReference(queryId: 0, id: "", type: "gif", title: nil, description: nil, image: nil, file: file.media, message: .auto(caption: "", entities: nil, replyMarkup: nil)), menu: [ PeekControllerMenuItem(title: strongSelf.strings.ShareMenu_Send, color: .accent, font: .bold, action: { node, rect in if let strongSelf = self { return strongSelf.controllerInteraction.sendGif(file, node, rect) @@ -917,7 +954,7 @@ final class ChatMediaInputNode: ChatInputNode { } return true }) - ]))) + ])))*/ } } } else { @@ -932,7 +969,8 @@ final class ChatMediaInputNode: ChatInputNode { if pane.supernode != nil, pane.frame.contains(point) { if let pane = pane as? ChatMediaInputGifPane { if let (file, _) = pane.fileAt(point: point.offsetBy(dx: -pane.frame.minX, dy: -pane.frame.minY)) { - return .single((strongSelf, ChatContextResultPeekContent(account: strongSelf.context.account, contextResult: .internalReference(queryId: 0, id: "", type: "gif", title: nil, description: nil, image: nil, file: file.media, message: .auto(caption: "", entities: nil, replyMarkup: nil)), menu: [ + return nil + /*return .single((strongSelf, ChatContextResultPeekContent(account: strongSelf.context.account, contextResult: .internalReference(queryId: 0, id: "", type: "gif", title: nil, description: nil, image: nil, file: file.media, message: .auto(caption: "", entities: nil, replyMarkup: nil)), menu: [ PeekControllerMenuItem(title: strongSelf.strings.ShareMenu_Send, color: .accent, font: .bold, action: { node, rect in if let strongSelf = self { return strongSelf.controllerInteraction.sendGif(file, node, rect) @@ -946,7 +984,7 @@ final class ChatMediaInputNode: ChatInputNode { } return true }) - ]))) + ])))*/ } } else if pane is ChatMediaInputStickerPane || pane is ChatMediaInputTrendingPane { var itemNodeAndItem: (ASDisplayNode, StickerPackItem)? @@ -1204,6 +1242,8 @@ final class ChatMediaInputNode: ChatInputNode { searchMode = mode } + let wasVisible = self.validLayout?.10 ?? false + self.validLayout = (width, leftInset, rightInset, bottomInset, standardInputHeight, inputHeight, maximumHeight, inputPanelHeight, interfaceState, deviceMetrics, isVisible) if self.theme !== interfaceState.theme || self.strings !== interfaceState.strings { @@ -1463,6 +1503,12 @@ final class ChatMediaInputNode: ChatInputNode { panRecognizer.isEnabled = !displaySearch } + if isVisible && !wasVisible { + transition.updateFrame(node: self.gifPane, frame: self.gifPane.frame, force: true, completion: { [weak self] _ in + self?.gifPane.initializeIfNeeded() + }) + } + return (standardInputHeight, max(0.0, panelHeight - standardInputHeight)) } @@ -1658,3 +1704,37 @@ final class ChatMediaInputNode: ChatInputNode { }).start() } } + +private final class ContextControllerContentSourceImpl: ContextControllerContentSource { + let controller: ViewController + weak var sourceNode: ASDisplayNode? + let sourceRect: CGRect + + let navigationController: NavigationController? = nil + + let passthroughTouches: Bool = false + + init(controller: ViewController, sourceNode: ASDisplayNode?, sourceRect: CGRect) { + self.controller = controller + self.sourceNode = sourceNode + self.sourceRect = sourceRect + } + + func transitionInfo() -> ContextControllerTakeControllerInfo? { + let sourceNode = self.sourceNode + let sourceRect = self.sourceRect + return ContextControllerTakeControllerInfo(contentAreaInScreenSpace: CGRect(origin: CGPoint(), size: CGSize(width: 10.0, height: 10.0)), sourceNode: { [weak sourceNode] in + if let sourceNode = sourceNode { + return (sourceNode, sourceRect) + } else { + return nil + } + }) + } + + func animatedIn() { + if let controller = self.controller as? GalleryController { + controller.viewDidAppear(false) + } + } +} diff --git a/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerGridItem.swift b/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerGridItem.swift index 20a21a8a5e..a29b303e62 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerGridItem.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerGridItem.swift @@ -229,8 +229,8 @@ final class ChatMediaInputStickerGridItemNode: GridItemNode { } self.addSubnode(animationNode) } - let dimensions = item.stickerItem.file.dimensions ?? CGSize(width: 512.0, height: 512.0) - self.imageNode.setSignal(chatMessageAnimatedSticker(postbox: item.account.postbox, file: item.stickerItem.file, small: false, size: dimensions.aspectFitted(CGSize(width: 160.0, height: 160.0)))) + let dimensions = item.stickerItem.file.dimensions ?? PixelDimensions(width: 512, height: 512) + self.imageNode.setSignal(chatMessageAnimatedSticker(postbox: item.account.postbox, file: item.stickerItem.file, small: false, size: dimensions.cgSize.aspectFitted(CGSize(width: 160.0, height: 160.0)))) self.updateVisibility() self.stickerFetchedDisposable.set(freeMediaFileResourceInteractiveFetched(account: item.account, fileReference: stickerPackFileReference(item.stickerItem.file), resource: item.stickerItem.file.resource).start()) } else { @@ -245,7 +245,7 @@ final class ChatMediaInputStickerGridItemNode: GridItemNode { self.stickerFetchedDisposable.set(freeMediaFileResourceInteractiveFetched(account: item.account, fileReference: stickerPackFileReference(item.stickerItem.file), resource: chatMessageStickerResource(file: item.stickerItem.file, small: true)).start()) } - self.currentState = (item.account, item.stickerItem, dimensions) + self.currentState = (item.account, item.stickerItem, dimensions.cgSize) self.setNeedsLayout() } } @@ -299,8 +299,8 @@ final class ChatMediaInputStickerGridItemNode: GridItemNode { self.animationNode?.visibility = isPlaying if let item = self.item, isPlaying, !self.didSetUpAnimationNode { self.didSetUpAnimationNode = true - let dimensions = item.stickerItem.file.dimensions ?? CGSize(width: 512.0, height: 512.0) - let fittedDimensions = dimensions.aspectFitted(CGSize(width: 160.0, height: 160.0)) + let dimensions = item.stickerItem.file.dimensions ?? PixelDimensions(width: 512, height: 512) + let fittedDimensions = dimensions.cgSize.aspectFitted(CGSize(width: 160.0, height: 160.0)) self.animationNode?.setup(source: AnimatedStickerResourceSource(account: item.account, resource: item.stickerItem.file.resource), width: Int(fittedDimensions.width), height: Int(fittedDimensions.height), mode: .cached) } } diff --git a/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerPackItem.swift b/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerPackItem.swift index 8564d3e216..7afd868d0b 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerPackItem.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerPackItem.swift @@ -156,7 +156,7 @@ final class ChatMediaInputStickerPackItemNode: ListViewItemNode { if let thumbnailItem = thumbnailItem { switch thumbnailItem { case let .still(representation): - let imageSize = representation.dimensions.aspectFitted(boundingImageSize) + let imageSize = representation.dimensions.cgSize.aspectFitted(boundingImageSize) let imageApply = self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: imageSize, intrinsicInsets: UIEdgeInsets())) imageApply() self.imageNode.setSignal(chatMessageStickerPackThumbnail(postbox: account.postbox, resource: representation.resource)) diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageAnimatedStickerItemNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageAnimatedStickerItemNode.swift index 86a712dd9b..c990852b71 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageAnimatedStickerItemNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageAnimatedStickerItemNode.swift @@ -244,8 +244,8 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { if let telegramFile = media as? TelegramMediaFile { if self.telegramFile?.id != telegramFile.id { self.telegramFile = telegramFile - let dimensions = telegramFile.dimensions ?? CGSize(width: 512.0, height: 512.0) - self.imageNode.setSignal(chatMessageAnimatedSticker(postbox: item.context.account.postbox, file: telegramFile, small: false, size: dimensions.aspectFitted(CGSize(width: 384.0, height: 384.0)), thumbnail: false)) + let dimensions = telegramFile.dimensions ?? PixelDimensions(width: 512, height: 512) + self.imageNode.setSignal(chatMessageAnimatedSticker(postbox: item.context.account.postbox, file: telegramFile, small: false, size: dimensions.cgSize.aspectFitted(CGSize(width: 384.0, height: 384.0)), thumbnail: false)) self.updateVisibility() self.disposable.set(freeMediaFileInteractiveFetched(account: item.context.account, fileReference: .message(message: MessageReference(item.message), media: telegramFile)).start()) } @@ -257,12 +257,12 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { if self.telegramFile == nil, let emojiFile = item.associatedData.animatedEmojiStickers[emoji]?.file { if self.emojiFile?.id != emojiFile.id { self.emojiFile = emojiFile - let dimensions = emojiFile.dimensions ?? CGSize(width: 512.0, height: 512.0) + let dimensions = emojiFile.dimensions ?? PixelDimensions(width: 512, height: 512) var fitzModifier: EmojiFitzModifier? if let fitz = fitz { fitzModifier = EmojiFitzModifier(emoji: fitz) } - self.imageNode.setSignal(chatMessageAnimatedSticker(postbox: item.context.account.postbox, file: emojiFile, small: false, size: dimensions.aspectFilled(CGSize(width: 384.0, height: 384.0)), fitzModifier: fitzModifier, thumbnail: false)) + self.imageNode.setSignal(chatMessageAnimatedSticker(postbox: item.context.account.postbox, file: emojiFile, small: false, size: dimensions.cgSize.aspectFilled(CGSize(width: 384.0, height: 384.0)), fitzModifier: fitzModifier, thumbnail: false)) self.disposable.set(freeMediaFileInteractiveFetched(account: item.context.account, fileReference: .standalone(media: emojiFile)).start()) self.updateVisibility() } @@ -314,8 +314,8 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { } if let file = file { - let dimensions = file.dimensions ?? CGSize(width: 512.0, height: 512.0) - let fittedSize = isEmoji ? dimensions.aspectFilled(CGSize(width: 384.0, height: 384.0)) : dimensions.aspectFitted(CGSize(width: 384.0, height: 384.0)) + let dimensions = file.dimensions ?? PixelDimensions(width: 512, height: 512) + let fittedSize = isEmoji ? dimensions.cgSize.aspectFilled(CGSize(width: 384.0, height: 384.0)) : dimensions.cgSize.aspectFitted(CGSize(width: 384.0, height: 384.0)) self.animationNode.setup(source: AnimatedStickerResourceSource(account: item.context.account, resource: file.resource, fitzModifier: fitzModifier), width: Int(fittedSize.width), height: Int(fittedSize.height), playbackMode: playbackMode, mode: .cached) } } @@ -348,18 +348,18 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { var isEmoji = false if let telegramFile = telegramFile { if let dimensions = telegramFile.dimensions { - imageSize = dimensions.aspectFitted(displaySize) + imageSize = dimensions.cgSize.aspectFitted(displaySize) } else if let thumbnailSize = telegramFile.previewRepresentations.first?.dimensions { - imageSize = thumbnailSize.aspectFitted(displaySize) + imageSize = thumbnailSize.cgSize.aspectFitted(displaySize) } } else if let emojiFile = emojiFile { isEmoji = true let displaySize = CGSize(width: floor(displaySize.width * item.presentationData.animatedEmojiScale), height: floor(displaySize.height * item.presentationData.animatedEmojiScale)) if let dimensions = emojiFile.dimensions { - imageSize = CGSize(width: displaySize.width * dimensions.width / 512.0, height: displaySize.height * dimensions.height / 512.0) + imageSize = CGSize(width: displaySize.width * CGFloat(dimensions.width) / 512.0, height: displaySize.height * CGFloat(dimensions.height) / 512.0) } else if let thumbnailSize = emojiFile.previewRepresentations.first?.dimensions { - imageSize = thumbnailSize.aspectFitted(displaySize) + imageSize = thumbnailSize.cgSize.aspectFitted(displaySize) } } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageAttachedContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageAttachedContentNode.swift index b844de27dd..7c88fabd6c 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageAttachedContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageAttachedContentNode.swift @@ -468,7 +468,7 @@ final class ChatMessageAttachedContentNode: ASDisplayNode { initialWidth = initialImageWidth + horizontalInsets.left + horizontalInsets.right refineContentImageLayout = refineLayout } else if let dimensions = largestImageRepresentation(image.representations)?.dimensions { - inlineImageDimensions = dimensions + inlineImageDimensions = dimensions.cgSize if image != currentImage { updateInlineImageSignal = chatWebpageSnippetPhoto(account: context.account, photoReference: .message(message: MessageReference(message), media: image)) diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveMediaNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveMediaNode.swift index 1607aee70f..fe019dd5d6 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveMediaNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveMediaNode.swift @@ -275,16 +275,16 @@ final class ChatMessageInteractiveMediaNode: ASDisplayNode, GalleryItemTransitio var unboundSize: CGSize if let image = media as? TelegramMediaImage, let dimensions = largestImageRepresentation(image.representations)?.dimensions { - unboundSize = CGSize(width: max(10.0, floor(dimensions.width * 0.5)), height: max(10.0, floor(dimensions.height * 0.5))) + unboundSize = CGSize(width: max(10.0, floor(dimensions.cgSize.width * 0.5)), height: max(10.0, floor(dimensions.cgSize.height * 0.5))) } else if let file = media as? TelegramMediaFile, var dimensions = file.dimensions { if let thumbnail = file.previewRepresentations.first { let dimensionsVertical = dimensions.width < dimensions.height let thumbnailVertical = thumbnail.dimensions.width < thumbnail.dimensions.height if dimensionsVertical != thumbnailVertical { - dimensions = CGSize(width: dimensions.height, height: dimensions.width) + dimensions = PixelDimensions(CGSize(width: dimensions.cgSize.height, height: dimensions.cgSize.width)) } } - unboundSize = CGSize(width: floor(dimensions.width * 0.5), height: floor(dimensions.height * 0.5)) + unboundSize = CGSize(width: floor(dimensions.cgSize.width * 0.5), height: floor(dimensions.cgSize.height * 0.5)) if file.isAnimated { unboundSize = unboundSize.aspectFilled(CGSize(width: 480.0, height: 480.0)) } else if file.isVideo && !file.isAnimated, case let .constrained(constrainedSize) = sizeCalculation { @@ -300,7 +300,7 @@ final class ChatMessageInteractiveMediaNode: ASDisplayNode, GalleryItemTransitio } isInlinePlayableVideo = file.isVideo && !isSecretMedia } else if let image = media as? TelegramMediaWebFile, let dimensions = image.dimensions { - unboundSize = CGSize(width: floor(dimensions.width * 0.5), height: floor(dimensions.height * 0.5)) + unboundSize = CGSize(width: floor(dimensions.cgSize.width * 0.5), height: floor(dimensions.cgSize.height * 0.5)) } else if let wallpaper = media as? WallpaperPreviewMedia { switch wallpaper.content { case let .file(file, _, isTheme, isSupported): @@ -308,14 +308,14 @@ final class ChatMessageInteractiveMediaNode: ASDisplayNode, GalleryItemTransitio let dimensionsVertical = dimensions.width < dimensions.height let thumbnailVertical = thumbnail.dimensions.width < thumbnail.dimensions.height if dimensionsVertical != thumbnailVertical { - dimensions = CGSize(width: dimensions.height, height: dimensions.width) + dimensions = PixelDimensions(CGSize(width: dimensions.cgSize.height, height: dimensions.cgSize.width)) } - unboundSize = CGSize(width: floor(dimensions.width * 0.5), height: floor(dimensions.height * 0.5)).fitted(CGSize(width: 240.0, height: 240.0)) + unboundSize = CGSize(width: floor(dimensions.cgSize.width * 0.5), height: floor(dimensions.cgSize.height * 0.5)).fitted(CGSize(width: 240.0, height: 240.0)) } else if isTheme { if isSupported { unboundSize = CGSize(width: 160.0, height: 240.0).fitted(CGSize(width: 240.0, height: 240.0)) } else if let thumbnail = file.previewRepresentations.first { - unboundSize = CGSize(width: floor(thumbnail.dimensions.width), height: floor(thumbnail.dimensions.height)).fitted(CGSize(width: 240.0, height: 240.0)) + unboundSize = CGSize(width: floor(thumbnail.dimensions.cgSize.width), height: floor(thumbnail.dimensions.cgSize.height)).fitted(CGSize(width: 240.0, height: 240.0)) } else { unboundSize = CGSize(width: 54.0, height: 54.0) } @@ -499,9 +499,9 @@ final class ChatMessageInteractiveMediaNode: ASDisplayNode, GalleryItemTransitio } } else { if file.isAnimatedSticker { - let dimensions = file.dimensions ?? CGSize(width: 512.0, height: 512.0) + let dimensions = file.dimensions ?? PixelDimensions(width: 512, height: 512) updateImageSignal = { synchronousLoad in - return chatMessageAnimatedSticker(postbox: context.account.postbox, file: file, small: false, size: dimensions.aspectFitted(CGSize(width: 400.0, height: 400.0))) + return chatMessageAnimatedSticker(postbox: context.account.postbox, file: file, small: false, size: dimensions.cgSize.aspectFitted(CGSize(width: 400.0, height: 400.0))) } } else if file.isSticker { updateImageSignal = { synchronousLoad in @@ -731,8 +731,8 @@ final class ChatMessageInteractiveMediaNode: ASDisplayNode, GalleryItemTransitio strongSelf.imageNode.isHidden = true } strongSelf.animatedStickerNode = animatedStickerNode - let dimensions = updatedAnimatedStickerFile.dimensions ?? CGSize(width: 512.0, height: 512.0) - let fittedDimensions = dimensions.aspectFitted(CGSize(width: 384.0, height: 384.0)) + let dimensions = updatedAnimatedStickerFile.dimensions ?? PixelDimensions(width: 512, height: 512) + let fittedDimensions = dimensions.cgSize.aspectFitted(CGSize(width: 384.0, height: 384.0)) animatedStickerNode.setup(source: AnimatedStickerResourceSource(account: context.account, resource: updatedAnimatedStickerFile.resource), width: Int(fittedDimensions.width), height: Int(fittedDimensions.height), mode: .cached) strongSelf.insertSubnode(animatedStickerNode, aboveSubnode: strongSelf.imageNode) animatedStickerNode.visibility = strongSelf.visibility diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageNotificationItem.swift b/submodules/TelegramUI/TelegramUI/ChatMessageNotificationItem.swift index 58f045c4f9..11b4ca4b7b 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageNotificationItem.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageNotificationItem.swift @@ -161,13 +161,13 @@ final class ChatMessageNotificationItemNode: NotificationItemNode { if let image = media as? TelegramMediaImage { updatedMedia = image if let representation = largestRepresentationForPhoto(image) { - imageDimensions = representation.dimensions + imageDimensions = representation.dimensions.cgSize } break } else if let file = media as? TelegramMediaFile { updatedMedia = file if let representation = largestImageRepresentation(file.previewRepresentations) { - imageDimensions = representation.dimensions + imageDimensions = representation.dimensions.cgSize } isRound = file.isInstantVideo break diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageReplyInfoNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageReplyInfoNode.swift index 8e60c150b0..4dc9f3022f 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageReplyInfoNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageReplyInfoNode.swift @@ -91,16 +91,16 @@ class ChatMessageReplyInfoNode: ASDisplayNode { if let image = media as? TelegramMediaImage { updatedMediaReference = .message(message: MessageReference(message), media: image) if let representation = largestRepresentationForPhoto(image) { - imageDimensions = representation.dimensions + imageDimensions = representation.dimensions.cgSize } break } else if let file = media as? TelegramMediaFile, file.isVideo { updatedMediaReference = .message(message: MessageReference(message), media: file) if let dimensions = file.dimensions { - imageDimensions = dimensions + imageDimensions = dimensions.cgSize } else if let representation = largestImageRepresentation(file.previewRepresentations), !file.isSticker { - imageDimensions = representation.dimensions + imageDimensions = representation.dimensions.cgSize } if file.isInstantVideo { hasRoundImage = true diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageStickerItemNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageStickerItemNode.swift index fcb7c67c01..868162599d 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageStickerItemNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageStickerItemNode.swift @@ -148,9 +148,9 @@ class ChatMessageStickerItemNode: ChatMessageItemView { var imageSize: CGSize = CGSize(width: 100.0, height: 100.0) if let telegramFile = telegramFile { if let dimensions = telegramFile.dimensions { - imageSize = dimensions.aspectFitted(displaySize) + imageSize = dimensions.cgSize.aspectFitted(displaySize) } else if let thumbnailSize = telegramFile.previewRepresentations.first?.dimensions { - imageSize = thumbnailSize.aspectFitted(displaySize) + imageSize = thumbnailSize.cgSize.aspectFitted(displaySize) } } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageWebpageBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageWebpageBubbleContentNode.swift index f4cf2803f1..ef05e0e0b6 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageWebpageBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageWebpageBubbleContentNode.swift @@ -273,7 +273,7 @@ final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContentNode { if let type = webpage.type, ["photo", "video", "embed", "gif", "document", "telegram_album"].contains(type) { var flags = ChatMessageAttachedContentNodeMediaFlags() if webpage.instantPage != nil, let largest = largestImageRepresentation(image.representations) { - if largest.dimensions.width >= 256.0 { + if largest.dimensions.width >= 256 { flags.insert(.preferMediaBeforeText) } } else if let embedUrl = webpage.embedUrl, !embedUrl.isEmpty { diff --git a/submodules/TelegramUI/TelegramUI/ChatPinnedMessageTitlePanelNode.swift b/submodules/TelegramUI/TelegramUI/ChatPinnedMessageTitlePanelNode.swift index 84a3eb30be..f5108d5bde 100644 --- a/submodules/TelegramUI/TelegramUI/ChatPinnedMessageTitlePanelNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatPinnedMessageTitlePanelNode.swift @@ -185,13 +185,13 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode { if let image = media as? TelegramMediaImage { updatedMediaReference = .message(message: MessageReference(message), media: image) if let representation = largestRepresentationForPhoto(image) { - imageDimensions = representation.dimensions + imageDimensions = representation.dimensions.cgSize } break } else if let file = media as? TelegramMediaFile { updatedMediaReference = .message(message: MessageReference(message), media: file) if !file.isInstantVideo, let representation = largestImageRepresentation(file.previewRepresentations), !file.isSticker { - imageDimensions = representation.dimensions + imageDimensions = representation.dimensions.cgSize } break } else if let _ = media as? TelegramMediaPoll { @@ -222,8 +222,8 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode { updateImageSignal = chatMessagePhotoThumbnail(account: context.account, photoReference: imageReference) } else if let fileReference = updatedMediaReference.concrete(TelegramMediaFile.self) { if fileReference.media.isAnimatedSticker { - let dimensions = fileReference.media.dimensions ?? CGSize(width: 512.0, height: 512.0) - updateImageSignal = chatMessageAnimatedSticker(postbox: context.account.postbox, file: fileReference.media, small: false, size: dimensions.aspectFitted(CGSize(width: 160.0, height: 160.0))) + let dimensions = fileReference.media.dimensions ?? PixelDimensions(width: 512, height: 512) + updateImageSignal = chatMessageAnimatedSticker(postbox: context.account.postbox, file: fileReference.media, small: false, size: dimensions.cgSize.aspectFitted(CGSize(width: 160.0, height: 160.0))) updatedFetchMediaSignal = fetchedMediaResource(mediaBox: context.account.postbox.mediaBox, reference: fileReference.resourceReference(fileReference.media.resource)) } else if fileReference.media.isVideo { updateImageSignal = chatMessageVideoThumbnail(account: context.account, fileReference: fileReference) diff --git a/submodules/TelegramUI/TelegramUI/ChatTextInputMenu.swift b/submodules/TelegramUI/TelegramUI/ChatTextInputMenu.swift index 3dfb32530c..0db7a756ca 100644 --- a/submodules/TelegramUI/TelegramUI/ChatTextInputMenu.swift +++ b/submodules/TelegramUI/TelegramUI/ChatTextInputMenu.swift @@ -33,8 +33,6 @@ final class ChatTextInputMenu { UIMenuItem(title: self.stringStrikethrough, action: Selector(("formatAttributesStrikethrough:"))), UIMenuItem(title: self.stringUnderline, action: Selector(("formatAttributesUnderline:"))) ] - UIMenuController.shared.isMenuVisible = true - UIMenuController.shared.update() } } @@ -74,9 +72,15 @@ final class ChatTextInputMenu { self.state = .inactive } - func format() { + func format(view: UIView, rect: CGRect) { if self.state == .general { self.state = .format + if #available(iOS 13.0, *) { + UIMenuController.shared.showMenu(from: view, rect: rect) + } else { + UIMenuController.shared.isMenuVisible = true + UIMenuController.shared.update() + } } } diff --git a/submodules/TelegramUI/TelegramUI/ChatTextInputPanelNode.swift b/submodules/TelegramUI/TelegramUI/ChatTextInputPanelNode.swift index a310fdbf8f..345b205cd2 100644 --- a/submodules/TelegramUI/TelegramUI/ChatTextInputPanelNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatTextInputPanelNode.swift @@ -1437,6 +1437,12 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate { } if let textInputNode = self.textInputNode, let presentationInterfaceState = self.presentationInterfaceState { + + if case .format = self.inputMenu.state { + self.inputMenu.deactivate() + UIMenuController.shared.update() + } + let baseFontSize = max(17.0, presentationInterfaceState.fontSize.baseDisplaySize) refreshChatTextInputTypingAttributes(textInputNode, theme: presentationInterfaceState.theme, baseFontSize: baseFontSize) } @@ -1478,7 +1484,9 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate { } @objc func _showTextStyleOptions(_ sender: Any) { - self.inputMenu.format() + if let textInputNode = self.textInputNode { + self.inputMenu.format(view: textInputNode.view, rect: textInputNode.selectionRect.insetBy(dx: 0.0, dy: -1.0)) + } } @objc func formatAttributesBold(_ sender: Any) { diff --git a/submodules/TelegramUI/TelegramUI/CreateChannelController.swift b/submodules/TelegramUI/TelegramUI/CreateChannelController.swift index ed917eada3..dab232f8c5 100644 --- a/submodules/TelegramUI/TelegramUI/CreateChannelController.swift +++ b/submodules/TelegramUI/TelegramUI/CreateChannelController.swift @@ -313,7 +313,7 @@ public func createChannelController(context: AccountContext) -> ViewController { if let data = image.jpegData(compressionQuality: 0.6) { let resource = LocalFileMediaResource(fileId: arc4random64()) context.account.postbox.mediaBox.storeResourceData(resource.id, data: data) - let representation = TelegramMediaImageRepresentation(dimensions: CGSize(width: 640.0, height: 640.0), resource: resource) + let representation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 640, height: 640), resource: resource) uploadedAvatar.set(uploadedPeerPhoto(postbox: context.account.postbox, network: context.account.network, resource: resource)) updateState { current in var current = current diff --git a/submodules/TelegramUI/TelegramUI/CreateGroupController.swift b/submodules/TelegramUI/TelegramUI/CreateGroupController.swift index 735f694f24..b153bf5dc3 100644 --- a/submodules/TelegramUI/TelegramUI/CreateGroupController.swift +++ b/submodules/TelegramUI/TelegramUI/CreateGroupController.swift @@ -508,7 +508,7 @@ public func createGroupControllerImpl(context: AccountContext, peerIds: [PeerId] if let data = image.jpegData(compressionQuality: 0.6) { let resource = LocalFileMediaResource(fileId: arc4random64()) context.account.postbox.mediaBox.storeResourceData(resource.id, data: data) - let representation = TelegramMediaImageRepresentation(dimensions: CGSize(width: 640.0, height: 640.0), resource: resource) + let representation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 640, height: 640), resource: resource) uploadedAvatar.set(uploadedPeerPhoto(postbox: context.account.postbox, network: context.account.network, resource: resource)) updateState { current in var current = current diff --git a/submodules/TelegramUI/TelegramUI/EditAccessoryPanelNode.swift b/submodules/TelegramUI/TelegramUI/EditAccessoryPanelNode.swift index 6ac41409ce..6f2c11a500 100644 --- a/submodules/TelegramUI/TelegramUI/EditAccessoryPanelNode.swift +++ b/submodules/TelegramUI/TelegramUI/EditAccessoryPanelNode.swift @@ -165,12 +165,12 @@ final class EditAccessoryPanelNode: AccessoryPanelNode { if let imageReference = candidateMediaReference?.concrete(TelegramMediaImage.self) { updatedMediaReference = imageReference.abstract if let representation = largestRepresentationForPhoto(imageReference.media) { - imageDimensions = representation.dimensions + imageDimensions = representation.dimensions.cgSize } } else if let fileReference = candidateMediaReference?.concrete(TelegramMediaFile.self) { updatedMediaReference = fileReference.abstract if !fileReference.media.isInstantVideo, let representation = largestImageRepresentation(fileReference.media.previewRepresentations), !fileReference.media.isSticker { - imageDimensions = representation.dimensions + imageDimensions = representation.dimensions.cgSize } } } diff --git a/submodules/TelegramUI/TelegramUI/GridMessageItem.swift b/submodules/TelegramUI/TelegramUI/GridMessageItem.swift index 8f55965731..5aa593044b 100644 --- a/submodules/TelegramUI/TelegramUI/GridMessageItem.swift +++ b/submodules/TelegramUI/TelegramUI/GridMessageItem.swift @@ -212,7 +212,7 @@ final class GridMessageItemNode: GridItemNode { if self.currentState == nil || self.currentState!.0 !== context || !self.currentState!.1.isEqual(to: media) { var mediaDimensions: CGSize? if let image = media as? TelegramMediaImage, let largestSize = largestImageRepresentation(image.representations)?.dimensions { - mediaDimensions = largestSize + mediaDimensions = largestSize.cgSize self.imageNode.setSignal(mediaGridMessagePhoto(account: context.account, photoReference: .message(message: MessageReference(item.message), media: image), synchronousLoad: synchronousLoad), attemptSynchronously: synchronousLoad, dispatchOnDisplayLink: true) @@ -223,7 +223,7 @@ final class GridMessageItemNode: GridItemNode { self.mediaBadgeNode.isHidden = true self.resourceStatus = nil } else if let file = media as? TelegramMediaFile, file.isVideo { - mediaDimensions = file.dimensions + mediaDimensions = file.dimensions?.cgSize self.imageNode.setSignal(mediaGridMessageVideo(postbox: context.account.postbox, videoReference: .message(message: MessageReference(item.message), media: file), synchronousLoad: synchronousLoad, autoFetchFullSizeThumbnail: true), attemptSynchronously: synchronousLoad) self.mediaBadgeNode.isHidden = false diff --git a/submodules/TelegramUI/TelegramUI/HorizontalListContextResultsChatInputPanelItem.swift b/submodules/TelegramUI/TelegramUI/HorizontalListContextResultsChatInputPanelItem.swift index 80a217b92d..0a7ae4cc7d 100644 --- a/submodules/TelegramUI/TelegramUI/HorizontalListContextResultsChatInputPanelItem.swift +++ b/submodules/TelegramUI/TelegramUI/HorizontalListContextResultsChatInputPanelItem.swift @@ -214,7 +214,7 @@ final class HorizontalListContextResultsChatInputPanelItemNode: ListViewItemNode } else if let thumbnail = thumbnail { imageResource = thumbnail.resource } - imageDimensions = content?.dimensions + imageDimensions = content?.dimensions?.cgSize if type == "gif", let thumbnailResource = imageResource, let content = content, let dimensions = content.dimensions { videoFile = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: 0), partialReference: nil, resource: content.resource, previewRepresentations: [TelegramMediaImageRepresentation(dimensions: dimensions, resource: thumbnailResource)], immediateThumbnailData: nil, mimeType: "video/mp4", size: nil, attributes: [.Animated, .Video(duration: 0, size: dimensions, flags: [])]) imageResource = nil @@ -228,14 +228,14 @@ final class HorizontalListContextResultsChatInputPanelItemNode: ListViewItemNode case let .internalReference(_, _, _, _, _, image, file, _): if let image = image { if let largestRepresentation = largestImageRepresentation(image.representations) { - imageDimensions = largestRepresentation.dimensions + imageDimensions = largestRepresentation.dimensions.cgSize } - imageResource = imageRepresentationLargerThan(image.representations, size: CGSize(width: 200.0, height: 100.0))?.resource + imageResource = imageRepresentationLargerThan(image.representations, size: PixelDimensions(width: 200, height: 100))?.resource } else if let file = file { if let dimensions = file.dimensions { - imageDimensions = dimensions + imageDimensions = dimensions.cgSize } else if let largestRepresentation = largestImageRepresentation(file.previewRepresentations) { - imageDimensions = largestRepresentation.dimensions + imageDimensions = largestRepresentation.dimensions.cgSize } if file.isAnimatedSticker { animatedStickerFile = file @@ -309,7 +309,7 @@ final class HorizontalListContextResultsChatInputPanelItemNode: ListViewItemNode if let stickerFile = stickerFile { updateImageSignal = chatMessageSticker(account: item.account, file: stickerFile, small: false, fetched: true) } else { - let tmpRepresentation = TelegramMediaImageRepresentation(dimensions: CGSize(width: fittedImageDimensions.width * 2.0, height: fittedImageDimensions.height * 2.0), resource: imageResource) + let tmpRepresentation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(CGSize(width: fittedImageDimensions.width * 2.0, height: fittedImageDimensions.height * 2.0)), resource: imageResource) let tmpImage = TelegramMediaImage(imageId: MediaId(namespace: 0, id: 0), representations: [tmpRepresentation], immediateThumbnailData: nil, reference: nil, partialReference: nil) updateImageSignal = chatMessagePhoto(postbox: item.account.postbox, photoReference: .standalone(media: tmpImage)) } @@ -386,8 +386,8 @@ final class HorizontalListContextResultsChatInputPanelItemNode: ListViewItemNode animationNode.started = { [weak self] in self?.imageNode.alpha = 0.0 } - let dimensions = animatedStickerFile.dimensions ?? CGSize(width: 512.0, height: 512.0) - let fittedDimensions = dimensions.aspectFitted(CGSize(width: 160.0, height: 160.0)) + let dimensions = animatedStickerFile.dimensions ?? PixelDimensions(width: 512, height: 512) + let fittedDimensions = dimensions.cgSize.aspectFitted(CGSize(width: 160.0, height: 160.0)) animationNode.setup(source: AnimatedStickerResourceSource(account: item.account, resource: animatedStickerFile.resource), width: Int(fittedDimensions.width), height: Int(fittedDimensions.height), mode: .cached) } } diff --git a/submodules/TelegramUI/TelegramUI/HorizontalStickerGridItem.swift b/submodules/TelegramUI/TelegramUI/HorizontalStickerGridItem.swift index 6f7e7325eb..e9ade91474 100755 --- a/submodules/TelegramUI/TelegramUI/HorizontalStickerGridItem.swift +++ b/submodules/TelegramUI/TelegramUI/HorizontalStickerGridItem.swift @@ -111,8 +111,8 @@ final class HorizontalStickerGridItemNode: GridItemNode { animationNode.started = { [weak self] in self?.imageNode.alpha = 0.0 } - let dimensions = item.file.dimensions ?? CGSize(width: 512.0, height: 512.0) - let fittedDimensions = dimensions.aspectFitted(CGSize(width: 160.0, height: 160.0)) + let dimensions = item.file.dimensions ?? PixelDimensions(width: 512, height: 512) + let fittedDimensions = dimensions.cgSize.aspectFitted(CGSize(width: 160.0, height: 160.0)) animationNode.setup(source: AnimatedStickerResourceSource(account: account, resource: item.file.resource), width: Int(fittedDimensions.width), height: Int(fittedDimensions.height), mode: .cached) self.stickerFetchedDisposable.set(freeMediaFileResourceInteractiveFetched(account: account, fileReference: stickerPackFileReference(item.file), resource: item.file.resource).start()) @@ -128,7 +128,7 @@ final class HorizontalStickerGridItemNode: GridItemNode { self.stickerFetchedDisposable.set(freeMediaFileResourceInteractiveFetched(account: account, fileReference: stickerPackFileReference(item.file), resource: chatMessageStickerResource(file: item.file, small: true)).start()) } - self.currentState = (account, item, dimensions) + self.currentState = (account, item, dimensions.cgSize) self.setNeedsLayout() } } diff --git a/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift b/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift index e6db48481b..1e901014e4 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift @@ -143,7 +143,7 @@ func legacyInstantVideoController(theme: PresentationTheme, panelFrame: CGRect, let thumbnailImage = TGScaleImageToPixelSize(previewImage, thumbnailSize)! if let thumbnailData = thumbnailImage.jpegData(compressionQuality: 0.4) { context.account.postbox.mediaBox.storeResourceData(resource.id, data: thumbnailData) - previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: thumbnailSize, resource: resource)) + previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(thumbnailSize), resource: resource)) } } @@ -178,7 +178,7 @@ func legacyInstantVideoController(theme: PresentationTheme, panelFrame: CGRect, } } - let media = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: arc4random64()), partialReference: nil, resource: resource, previewRepresentations: previewRepresentations, immediateThumbnailData: nil, mimeType: "video/mp4", size: nil, attributes: [.FileName(fileName: "video.mp4"), .Video(duration: Int(finalDuration), size: finalDimensions, flags: [.instantRoundVideo])]) + let media = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: arc4random64()), partialReference: nil, resource: resource, previewRepresentations: previewRepresentations, immediateThumbnailData: nil, mimeType: "video/mp4", size: nil, attributes: [.FileName(fileName: "video.mp4"), .Video(duration: Int(finalDuration), size: PixelDimensions(finalDimensions), flags: [.instantRoundVideo])]) let attributes: [MessageAttribute] = [] send(.message(text: "", attributes: attributes, mediaReference: .standalone(media: media), replyToMessageId: nil, localGroupingKey: nil)) } diff --git a/submodules/TelegramUI/TelegramUI/ListMessageFileItemNode.swift b/submodules/TelegramUI/TelegramUI/ListMessageFileItemNode.swift index 338763c2d3..5f8d3516d2 100644 --- a/submodules/TelegramUI/TelegramUI/ListMessageFileItemNode.swift +++ b/submodules/TelegramUI/TelegramUI/ListMessageFileItemNode.swift @@ -465,7 +465,7 @@ final class ListMessageFileItemNode: ListMessageNode { case let .imageRepresentation(_, representation): let iconSize = CGSize(width: 42.0, height: 42.0) let imageCorners = ImageCorners(topLeft: .Corner(4.0), topRight: .Corner(4.0), bottomLeft: .Corner(4.0), bottomRight: .Corner(4.0)) - let arguments = TransformImageArguments(corners: imageCorners, imageSize: representation.dimensions.aspectFilled(iconSize), boundingSize: iconSize, intrinsicInsets: UIEdgeInsets(), emptyColor: item.theme.list.mediaPlaceholderColor) + let arguments = TransformImageArguments(corners: imageCorners, imageSize: representation.dimensions.cgSize.aspectFilled(iconSize), boundingSize: iconSize, intrinsicInsets: UIEdgeInsets(), emptyColor: item.theme.list.mediaPlaceholderColor) iconImageApply = iconImageLayout(arguments) case .albumArt: let iconSize = CGSize(width: 46.0, height: 46.0) diff --git a/submodules/TelegramUI/TelegramUI/ListMessageSnippetItemNode.swift b/submodules/TelegramUI/TelegramUI/ListMessageSnippetItemNode.swift index d8edb70306..e3df40f7e7 100644 --- a/submodules/TelegramUI/TelegramUI/ListMessageSnippetItemNode.swift +++ b/submodules/TelegramUI/TelegramUI/ListMessageSnippetItemNode.swift @@ -204,7 +204,7 @@ final class ListMessageSnippetItemNode: ListMessageNode { title = NSAttributedString(string: content.title ?? content.websiteName ?? hostName, font: titleFont, textColor: item.theme.list.itemPrimaryTextColor) if let image = content.image { - if let representation = imageRepresentationLargerThan(image.representations, size: CGSize(width: 80.0, height: 80.0)) { + if let representation = imageRepresentationLargerThan(image.representations, size: PixelDimensions(width: 80, height: 80)) { iconImageReferenceAndRepresentation = (.message(message: MessageReference(item.message), media: image), representation) } } else if let file = content.file { @@ -311,7 +311,7 @@ final class ListMessageSnippetItemNode: ListMessageNode { if let iconImageReferenceAndRepresentation = iconImageReferenceAndRepresentation { let iconSize = CGSize(width: 42.0, height: 42.0) let imageCorners = ImageCorners(topLeft: .Corner(2.0), topRight: .Corner(2.0), bottomLeft: .Corner(2.0), bottomRight: .Corner(2.0)) - let arguments = TransformImageArguments(corners: imageCorners, imageSize: iconImageReferenceAndRepresentation.1.dimensions.aspectFilled(iconSize), boundingSize: iconSize, intrinsicInsets: UIEdgeInsets(), emptyColor: item.theme.list.mediaPlaceholderColor) + let arguments = TransformImageArguments(corners: imageCorners, imageSize: iconImageReferenceAndRepresentation.1.dimensions.cgSize.aspectFilled(iconSize), boundingSize: iconSize, intrinsicInsets: UIEdgeInsets(), emptyColor: item.theme.list.mediaPlaceholderColor) iconImageApply = iconImageLayout(arguments) } diff --git a/submodules/TelegramUI/TelegramUI/MediaInputPaneTrendingItem.swift b/submodules/TelegramUI/TelegramUI/MediaInputPaneTrendingItem.swift index 34d4ac0dca..ec22398029 100644 --- a/submodules/TelegramUI/TelegramUI/MediaInputPaneTrendingItem.swift +++ b/submodules/TelegramUI/TelegramUI/MediaInputPaneTrendingItem.swift @@ -118,8 +118,8 @@ final class TrendingTopItemNode: ASDisplayNode { animationNode.started = { [weak self] in self?.imageNode.alpha = 0.0 } - let dimensions = item.file.dimensions ?? CGSize(width: 512.0, height: 512.0) - let fittedDimensions = dimensions.aspectFitted(CGSize(width: 160.0, height: 160.0)) + let dimensions = item.file.dimensions ?? PixelDimensions(width: 512, height: 512) + let fittedDimensions = dimensions.cgSize.aspectFitted(CGSize(width: 160.0, height: 160.0)) animationNode.setup(source: AnimatedStickerResourceSource(account: account, resource: item.file.resource), width: Int(fittedDimensions.width), height: Int(fittedDimensions.height), mode: .cached) self.loadDisposable.set(freeMediaFileResourceInteractiveFetched(account: account, fileReference: stickerPackFileReference(item.file), resource: item.file.resource).start()) } else { @@ -154,7 +154,7 @@ final class TrendingTopItemNode: ASDisplayNode { super.layout() if let dimensions = self.file?.dimensions, let itemSize = self.itemSize { - let imageSize = dimensions.aspectFitted(itemSize) + let imageSize = dimensions.cgSize.aspectFitted(itemSize) self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: imageSize, intrinsicInsets: UIEdgeInsets()))() } @@ -372,7 +372,7 @@ class MediaInputPaneTrendingItemNode: ListViewItemNode { node.setup(account: item.account, item: topItems[i], itemSize: itemSize, synchronousLoads: synchronousLoads) } if let dimensions = file.dimensions { - let imageSize = dimensions.aspectFitted(itemSize) + let imageSize = dimensions.cgSize.aspectFitted(itemSize) node.frame = CGRect(origin: CGPoint(x: offset, y: 48.0), size: imageSize) offset += itemSize.width + itemSpacing } diff --git a/submodules/TelegramUI/TelegramUI/MultiplexedVideoNode.swift b/submodules/TelegramUI/TelegramUI/MultiplexedVideoNode.swift index 77175e452c..5652a4560f 100644 --- a/submodules/TelegramUI/TelegramUI/MultiplexedVideoNode.swift +++ b/submodules/TelegramUI/TelegramUI/MultiplexedVideoNode.swift @@ -7,6 +7,7 @@ import Postbox import TelegramCore import SyncCore import AVFoundation +import ContextUI private final class MultiplexedVideoTrackingNode: ASDisplayNode { var inHierarchyUpdated: ((Bool) -> Void)? @@ -34,7 +35,7 @@ private final class VisibleVideoItem { } } -final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { +final class MultiplexedVideoNode: ASDisplayNode, UIScrollViewDelegate { private let account: Account private let trackingNode: MultiplexedVideoTrackingNode var didScroll: ((CGFloat, CGFloat) -> Void)? @@ -67,6 +68,9 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { private var visibleThumbnailLayers: [MediaId: SoftwareVideoThumbnailLayer] = [:] private var statusDisposable: [MediaId : MetaDisposable] = [:] + private let contextContainerNode: ContextControllerSourceNode + let scrollNode: ASScrollNode + private var visibleLayers: [MediaId: (SoftwareVideoLayerFrameManager, SampleBufferLayer)] = [:] private var displayLink: CADisplayLink! @@ -76,6 +80,7 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { private let timebase: CMTimebase var fileSelected: ((FileMediaReference, ASDisplayNode, CGRect) -> Void)? + var fileContextMenu: ((FileMediaReference, ASDisplayNode, CGRect, ContextGesture) -> Void)? var enableVideoNodes = false init(account: Account) { @@ -88,14 +93,19 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { CMTimebaseSetRate(timebase!, rate: 0.0) self.timebase = timebase! + self.contextContainerNode = ContextControllerSourceNode() + self.scrollNode = ASScrollNode() + super.init() self.isOpaque = true - self.view.showsVerticalScrollIndicator = false - self.view.showsHorizontalScrollIndicator = false - self.view.alwaysBounceVertical = true + self.scrollNode.view.showsVerticalScrollIndicator = false + self.scrollNode.view.showsHorizontalScrollIndicator = false + self.scrollNode.view.alwaysBounceVertical = true self.addSubnode(self.trackingNode) + self.addSubnode(self.contextContainerNode) + self.contextContainerNode.addSubnode(self.scrollNode) class DisplayLinkProxy: NSObject { weak var target: MultiplexedVideoNode? @@ -135,10 +145,49 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { } } - self.view.delegate = self + self.scrollNode.view.delegate = self let recognizer = UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:))) self.view.addGestureRecognizer(recognizer) + + var gestureLocation: CGPoint? + + self.contextContainerNode.shouldBegin = { [weak self] point in + guard let strongSelf = self else { + return false + } + gestureLocation = point + return strongSelf.fileAt(point: point) != nil + } + + self.contextContainerNode.activated = { [weak self] gesture in + guard let strongSelf = self, let gestureLocation = gestureLocation else { + return + } + if let (file, rect) = strongSelf.fileAt(point: gestureLocation) { + strongSelf.fileContextMenu?(file, strongSelf, rect.offsetBy(dx: 0.0, dy: -strongSelf.scrollNode.bounds.minY), gesture) + } else { + gesture.cancel() + } + } + + self.contextContainerNode.customActivationProgress = { [weak self] progress, update in + guard let strongSelf = self, let gestureLocation = gestureLocation else { + return + } + /*let minScale: CGFloat = (strongSelf.bounds.width - 10.0) / strongSelf.bounds.width + let currentScale = 1.0 * (1.0 - progress) + minScale * progress + switch update { + case .update: + strongSelf.layer.sublayerTransform = CATransform3DMakeScale(currentScale, currentScale, 1.0) + case .begin: + strongSelf.layer.sublayerTransform = CATransform3DMakeScale(currentScale, currentScale, 1.0) + case let .ended(previousProgress): + let previousScale = 1.0 * (1.0 - previousProgress) + minScale * previousProgress + strongSelf.layer.sublayerTransform = CATransform3DMakeScale(currentScale, currentScale, 1.0) + strongSelf.layer.animateSpring(from: previousScale as NSNumber, to: currentScale as NSNumber, keyPath: "sublayerTransform.scale", duration: 0.5, delay: 0.0, initialVelocity: 0.0, damping: 90.0) + }*/ + } } required init?(coder aDecoder: NSCoder) { @@ -168,6 +217,8 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) { if self.validSize == nil || !self.validSize!.equalTo(size) { self.validSize = size + self.contextContainerNode.frame = CGRect(origin: CGPoint(), size: size) + self.scrollNode.frame = CGRect(origin: CGPoint(), size: size) self.updateVisibleItems(transition: transition) } } @@ -189,7 +240,7 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { private var validVisibleItemsOffset: CGFloat? private func updateImmediatelyVisibleItems(ensureFrames: Bool = false) { - let visibleBounds = self.bounds + let visibleBounds = self.scrollNode.bounds let visibleThumbnailBounds = visibleBounds.insetBy(dx: 0.0, dy: -350.0) if let validVisibleItemsOffset = self.validVisibleItemsOffset, validVisibleItemsOffset.isEqual(to: visibleBounds.origin.y) { @@ -222,7 +273,7 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { } else { let thumbnailLayer = SoftwareVideoThumbnailLayer(account: self.account, fileReference: item.fileReference) thumbnailLayer.frame = item.frame - self.layer.addSublayer(thumbnailLayer) + self.scrollNode.layer.addSublayer(thumbnailLayer) self.visibleThumbnailLayers[item.fileReference.media.fileId] = thumbnailLayer } @@ -236,51 +287,6 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { continue } - /*if self.statusDisposable[item.fileReference.media.fileId] == nil { - let statusDisposable = MetaDisposable() - let updatedStatusSignal = account.postbox.mediaBox.resourceStatus(item.fileReference.media.resource) - self.statusDisposable[item.fileReference.media.fileId] = statusDisposable - statusDisposable.set((updatedStatusSignal - |> deliverOnMainQueue).start(next: { [weak self] status in - guard let `self` = self else {return} - - let state: RadialStatusNodeState - - switch status { - case let .Fetching(_, progress): - state = .progress(color: .white, lineWidth: nil, value: CGFloat(max(progress, 0.2)), cancelEnabled: false) - case .Remote: - state = .progress(color: .white, lineWidth: nil, value: 0, cancelEnabled: false) - case .Local: - state = .none - } - - /*if let statusNode = self.visibleProgressNodes[item.fileReference.media.fileId] { - if state == .none { - self.visibleProgressNodes.removeValue(forKey: item.fileReference.media.fileId) - statusNode.transitionToState(state, completion: { [weak statusNode] in - statusNode?.isHidden = true - }) - } else { - statusNode.isHidden = false - statusNode.transitionToState(state, completion: {}) - } - }*/ - })) - }*/ - - /*if let visibleProgressNode = self.visibleProgressNodes[item.fileReference.media.fileId] { - if ensureFrames { - visibleProgressNode.frame = progressFrame - } - } else { - let statusNode = RadialStatusNode(backgroundNodeColor: UIColor(white: 0.0, alpha: 0.5)) - statusNode.isHidden = true - statusNode.frame = progressFrame - self.visibleProgressNodes[item.fileReference.media.fileId] = statusNode - self.addSubnode(statusNode) - }*/ - visibleIds.insert(item.fileReference.media.fileId) if let (_, layerHolder) = self.visibleLayers[item.fileReference.media.fileId] { @@ -291,7 +297,7 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { let layerHolder = takeSampleBufferLayer() layerHolder.layer.videoGravity = AVLayerVideoGravity.resizeAspectFill layerHolder.layer.frame = item.frame - self.layer.addSublayer(layerHolder.layer) + self.scrollNode.layer.addSublayer(layerHolder.layer) let manager = SoftwareVideoLayerFrameManager(account: self.account, fileReference: item.fileReference, resource: item.fileReference.media.resource, layerHolder: layerHolder) self.visibleLayers[item.fileReference.media.fileId] = (manager, layerHolder) self.visibleThumbnailLayers[item.fileReference.media.fileId]?.ready = { [weak self] in @@ -344,7 +350,7 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { } private func updateVisibleItems(transition: ContainedViewLayoutTransition = .immediate) { - let drawableSize = self.bounds.size + let drawableSize = self.scrollNode.bounds.size if !drawableSize.width.isZero { var displayItems: [VisibleVideoItem] = [] @@ -355,7 +361,7 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { for item in self.files { let aspectRatio: CGFloat if let dimensions = item.media.dimensions { - aspectRatio = dimensions.width / dimensions.height + aspectRatio = dimensions.cgSize.width / dimensions.cgSize.height } else { aspectRatio = 1.0 } @@ -392,7 +398,7 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { while j < n { let aspectRatio: CGFloat if let dimensions = self.files[j].media.dimensions { - aspectRatio = dimensions.width / dimensions.height + aspectRatio = dimensions.cgSize.width / dimensions.cgSize.height } else { aspectRatio = 1.0 } @@ -418,7 +424,7 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { while j < n { let aspectRatio: CGFloat if let dimensions = self.files[j].media.dimensions { - aspectRatio = dimensions.width / dimensions.height + aspectRatio = dimensions.cgSize.width / dimensions.cgSize.height } else { aspectRatio = 1.0 } @@ -447,7 +453,7 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { i += row.count } let contentSize = CGSize(width: drawableSize.width, height: contentMaxValueInScrollDirection + self.bottomInset) - self.view.contentSize = contentSize + self.scrollNode.view.contentSize = contentSize self.displayItems = displayItems @@ -475,7 +481,7 @@ final class MultiplexedVideoNode: ASScrollNode, UIScrollViewDelegate { } func fileAt(point: CGPoint) -> (FileMediaReference, CGRect)? { - let offsetPoint = point.offsetBy(dx: 0.0, dy: self.bounds.minY) + let offsetPoint = point.offsetBy(dx: 0.0, dy: self.scrollNode.bounds.minY) return self.offsetFileAt(point: offsetPoint) } diff --git a/submodules/TelegramUI/TelegramUI/NotificationContentContext.swift b/submodules/TelegramUI/TelegramUI/NotificationContentContext.swift index 43619e638c..9182ea9df4 100644 --- a/submodules/TelegramUI/TelegramUI/NotificationContentContext.swift +++ b/submodules/TelegramUI/TelegramUI/NotificationContentContext.swift @@ -193,13 +193,13 @@ public final class NotificationViewControllerImpl { let messageId = MessageId(peerId: PeerId(peerIdValue), namespace: messageIdNamespace, id: messageIdId) - if let image = media as? TelegramMediaImage, let thumbnailRepresentation = imageRepresentationLargerThan(image.representations, size: CGSize(width: 120.0, height: 120.0)), let largestRepresentation = largestImageRepresentation(image.representations) { + if let image = media as? TelegramMediaImage, let thumbnailRepresentation = imageRepresentationLargerThan(image.representations, size: PixelDimensions(width: 120, height: 120)), let largestRepresentation = largestImageRepresentation(image.representations) { let dimensions = largestRepresentation.dimensions - let fittedSize = dimensions.fitted(CGSize(width: view.bounds.width, height: 1000.0)) + let fittedSize = dimensions.cgSize.fitted(CGSize(width: view.bounds.width, height: 1000.0)) view.frame = CGRect(origin: view.frame.origin, size: fittedSize) self.setPreferredContentSize(fittedSize) - self.imageInfo = (false, dimensions) + self.imageInfo = (false, dimensions.cgSize) self.updateImageLayout(boundingSize: view.bounds.size) let mediaBoxPath = accountsPath + "/" + accountRecordIdPathName(AccountRecordId(rawValue: accountIdValue)) + "/postbox/media" @@ -263,11 +263,11 @@ public final class NotificationViewControllerImpl { return } - let fittedSize = dimensions.fitted(CGSize(width: min(256.0, view.bounds.width), height: 256.0)) + let fittedSize = dimensions.cgSize.fitted(CGSize(width: min(256.0, view.bounds.width), height: 256.0)) view.frame = CGRect(origin: view.frame.origin, size: fittedSize) self.setPreferredContentSize(fittedSize) - self.imageInfo = (true, dimensions) + self.imageInfo = (true, dimensions.cgSize) self.updateImageLayout(boundingSize: view.bounds.size) self.applyDisposable.set((sharedAccountContext.activeAccounts @@ -322,8 +322,8 @@ public final class NotificationViewControllerImpl { } view?.addSubnode(animatedStickerNode) } - let dimensions = fileReference.media.dimensions ?? CGSize(width: 512.0, height: 512.0) - let fittedDimensions = dimensions.aspectFitted(CGSize(width: 512.0, height: 512.0)) + let dimensions = fileReference.media.dimensions ?? PixelDimensions(width: 512, height: 512) + let fittedDimensions = dimensions.cgSize.aspectFitted(CGSize(width: 512.0, height: 512.0)) strongSelf.imageNode.setSignal(chatMessageAnimatedSticker(postbox: accountAndImage.0.postbox, file: fileReference.media, small: false, size: fittedDimensions)) animatedStickerNode.setup(source: AnimatedStickerResourceSource(account: accountAndImage.0, resource: fileReference.media.resource), width: Int(fittedDimensions.width), height: Int(fittedDimensions.height), mode: .direct) animatedStickerNode.visibility = true diff --git a/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift b/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift index 0dcba12c1d..1ae724136c 100644 --- a/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift +++ b/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift @@ -923,6 +923,8 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent let navigationController: NavigationController? = nil + let passthroughTouches: Bool = false + init(controller: ViewController, sourceNode: ASDisplayNode?) { self.controller = controller self.sourceNode = sourceNode @@ -938,4 +940,7 @@ private final class ContextControllerContentSourceImpl: ContextControllerContent } }) } + + func animatedIn() { + } } diff --git a/submodules/TelegramUI/TelegramUI/ReplyAccessoryPanelNode.swift b/submodules/TelegramUI/TelegramUI/ReplyAccessoryPanelNode.swift index 0f84596d69..d211cf6809 100644 --- a/submodules/TelegramUI/TelegramUI/ReplyAccessoryPanelNode.swift +++ b/submodules/TelegramUI/TelegramUI/ReplyAccessoryPanelNode.swift @@ -90,14 +90,14 @@ final class ReplyAccessoryPanelNode: AccessoryPanelNode { if let image = media as? TelegramMediaImage { updatedMediaReference = .message(message: MessageReference(message), media: image) if let representation = largestRepresentationForPhoto(image) { - imageDimensions = representation.dimensions + imageDimensions = representation.dimensions.cgSize } break } else if let file = media as? TelegramMediaFile { updatedMediaReference = .message(message: MessageReference(message), media: file) isRoundImage = file.isInstantVideo if let representation = largestImageRepresentation(file.previewRepresentations), !file.isSticker && !file.isAnimatedSticker { - imageDimensions = representation.dimensions + imageDimensions = representation.dimensions.cgSize } break } diff --git a/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping b/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping index c02a660878..210d36c082 100644 Binary files a/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping and b/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping differ diff --git a/submodules/TelegramUI/TelegramUI/SoftwareVideoThumbnailLayer.swift b/submodules/TelegramUI/TelegramUI/SoftwareVideoThumbnailLayer.swift index 370bbfec1f..174c97d1c5 100644 --- a/submodules/TelegramUI/TelegramUI/SoftwareVideoThumbnailLayer.swift +++ b/submodules/TelegramUI/TelegramUI/SoftwareVideoThumbnailLayer.swift @@ -32,7 +32,7 @@ final class SoftwareVideoThumbnailLayer: CALayer { if let dimensions = fileReference.media.dimensions { self.disposable.set((mediaGridMessageVideo(postbox: account.postbox, videoReference: fileReference)).start(next: { [weak self] transform in - var boundingSize = dimensions.aspectFilled(CGSize(width: 93.0, height: 93.0)) + var boundingSize = dimensions.cgSize.aspectFilled(CGSize(width: 93.0, height: 93.0)) let imageSize = boundingSize boundingSize.width = min(200.0, boundingSize.width) diff --git a/submodules/TelegramUI/TelegramUI/StickerPaneSearchGlobaltem.swift b/submodules/TelegramUI/TelegramUI/StickerPaneSearchGlobaltem.swift index fe3343d2f0..8a0800ee40 100644 --- a/submodules/TelegramUI/TelegramUI/StickerPaneSearchGlobaltem.swift +++ b/submodules/TelegramUI/TelegramUI/StickerPaneSearchGlobaltem.swift @@ -284,7 +284,7 @@ class StickerPaneSearchGlobalItemNode: GridItemNode { node.setup(account: item.account, item: topItems[i], itemSize: itemSize, synchronousLoads: false) } if let dimensions = file.dimensions { - let imageSize = dimensions.aspectFitted(itemSize) + let imageSize = dimensions.cgSize.aspectFitted(itemSize) node.frame = CGRect(origin: CGPoint(x: offset, y: 48.0 + topOffset), size: imageSize) offset += itemSize.width + itemSpacing } diff --git a/submodules/TelegramUI/TelegramUI/StickerPaneSearchStickerItem.swift b/submodules/TelegramUI/TelegramUI/StickerPaneSearchStickerItem.swift index 010d3aa9fc..abcd308ed2 100644 --- a/submodules/TelegramUI/TelegramUI/StickerPaneSearchStickerItem.swift +++ b/submodules/TelegramUI/TelegramUI/StickerPaneSearchStickerItem.swift @@ -164,8 +164,8 @@ final class StickerPaneSearchStickerItemNode: GridItemNode { self.animationNode = animationNode self.addSubnode(animationNode) } - let dimensions = stickerItem.file.dimensions ?? CGSize(width: 512.0, height: 512.0) - let fittedDimensions = dimensions.aspectFitted(CGSize(width: 160.0, height: 160.0)) + let dimensions = stickerItem.file.dimensions ?? PixelDimensions(width: 512, height: 512) + let fittedDimensions = dimensions.cgSize.aspectFitted(CGSize(width: 160.0, height: 160.0)) self.animationNode?.setup(source: AnimatedStickerResourceSource(account: account, resource: stickerItem.file.resource), width: Int(fittedDimensions.width), height: Int(fittedDimensions.height), mode: .cached) self.animationNode?.visibility = self.isVisibleInGrid self.stickerFetchedDisposable.set(freeMediaFileResourceInteractiveFetched(account: account, fileReference: stickerPackFileReference(stickerItem.file), resource: stickerItem.file.resource).start()) @@ -179,7 +179,7 @@ final class StickerPaneSearchStickerItemNode: GridItemNode { self.stickerFetchedDisposable.set(freeMediaFileResourceInteractiveFetched(account: account, fileReference: stickerPackFileReference(stickerItem.file), resource: chatMessageStickerResource(file: stickerItem.file, small: true)).start()) } - self.currentState = (account, stickerItem, dimensions) + self.currentState = (account, stickerItem, dimensions.cgSize) self.setNeedsLayout() } } diff --git a/submodules/TelegramUI/TelegramUI/StickersChatInputContextPanelItem.swift b/submodules/TelegramUI/TelegramUI/StickersChatInputContextPanelItem.swift index 461fcc2281..2431113e7e 100644 --- a/submodules/TelegramUI/TelegramUI/StickersChatInputContextPanelItem.swift +++ b/submodules/TelegramUI/TelegramUI/StickersChatInputContextPanelItem.swift @@ -224,7 +224,7 @@ final class StickersChatInputContextPanelItemNode: ListViewItemNode { var imageSize = itemSize if let dimensions = file.dimensions { - imageSize = dimensions.aspectFitted(CGSize(width: itemSize.width - 4.0, height: itemSize.height - 4.0)) + imageSize = dimensions.cgSize.aspectFitted(CGSize(width: itemSize.width - 4.0, height: itemSize.height - 4.0)) imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: imageSize, intrinsicInsets: UIEdgeInsets()))() } diff --git a/submodules/TelegramUI/TelegramUI/TelegramAccountAuxiliaryMethods.swift b/submodules/TelegramUI/TelegramUI/TelegramAccountAuxiliaryMethods.swift index 8b5664cbb7..827767d176 100644 --- a/submodules/TelegramUI/TelegramUI/TelegramAccountAuxiliaryMethods.swift +++ b/submodules/TelegramUI/TelegramUI/TelegramAccountAuxiliaryMethods.swift @@ -45,5 +45,7 @@ public let telegramAccountAuxiliaryMethods = AccountAuxiliaryMethods(updatePeerC } return .single(nil) }, prepareSecretThumbnailData: { data in - return prepareSecretThumbnailData(data) + return prepareSecretThumbnailData(data).flatMap { size, data in + return (PixelDimensions(size), data) + } }) diff --git a/submodules/TelegramUI/TelegramUI/ThemeUpdateManager.swift b/submodules/TelegramUI/TelegramUI/ThemeUpdateManager.swift index b869ebd74e..a6c3d8f9e8 100644 --- a/submodules/TelegramUI/TelegramUI/ThemeUpdateManager.swift +++ b/submodules/TelegramUI/TelegramUI/ThemeUpdateManager.swift @@ -104,7 +104,7 @@ final class ThemeUpdateManagerImpl: ThemeUpdateManager { |> mapToSignal { wallpaper -> Signal<(PresentationThemeReference, PresentationTheme?), NoError> in if let wallpaper = wallpaper, case let .file(file) = wallpaper { var convertedRepresentations: [ImageRepresentationWithReference] = [] - convertedRepresentations.append(ImageRepresentationWithReference(representation: TelegramMediaImageRepresentation(dimensions: CGSize(width: 100.0, height: 100.0), resource: file.file.resource), reference: .media(media: .standalone(media: file.file), resource: file.file.resource))) + convertedRepresentations.append(ImageRepresentationWithReference(representation: TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 100, height: 100), resource: file.file.resource), reference: .media(media: .standalone(media: file.file), resource: file.file.resource))) return wallpaperDatas(account: account, accountManager: accountManager, fileReference: .standalone(media: file.file), representations: convertedRepresentations, alwaysShowThumbnailFirst: false, thumbnail: false, onlyFullSize: true, autoFetchFullSize: true, synchronousLoad: false) |> mapToSignal { _, fullSizeData, complete -> Signal<(PresentationThemeReference, PresentationTheme?), NoError> in guard complete, let fullSizeData = fullSizeData else { diff --git a/submodules/TelegramUI/TelegramUI/TransformOutgoingMessageMedia.swift b/submodules/TelegramUI/TelegramUI/TransformOutgoingMessageMedia.swift index 5d15da6546..36e6875435 100644 --- a/submodules/TelegramUI/TelegramUI/TransformOutgoingMessageMedia.swift +++ b/submodules/TelegramUI/TelegramUI/TransformOutgoingMessageMedia.swift @@ -74,8 +74,8 @@ public func transformOutgoingMessageMedia(postbox: Postbox, network: Network, me break } } - attributes.append(.ImageSize(size: imageDimensions)) - let updatedFile = file.withUpdatedSize(data.size).withUpdatedPreviewRepresentations([TelegramMediaImageRepresentation(dimensions: scaledImageSize, resource: thumbnailResource)]).withUpdatedAttributes(attributes) + attributes.append(.ImageSize(size: PixelDimensions(imageDimensions))) + let updatedFile = file.withUpdatedSize(data.size).withUpdatedPreviewRepresentations([TelegramMediaImageRepresentation(dimensions: PixelDimensions(scaledImageSize), resource: thumbnailResource)]).withUpdatedAttributes(attributes) subscriber.putNext(.standalone(media: updatedFile)) subscriber.putCompletion() } else { @@ -104,7 +104,7 @@ public func transformOutgoingMessageMedia(postbox: Postbox, network: Network, me let scaledImageSize = CGSize(width: scaledImage.size.width * scaledImage.scale, height: scaledImage.size.height * scaledImage.scale) - let updatedFile = file.withUpdatedSize(data.size).withUpdatedPreviewRepresentations([TelegramMediaImageRepresentation(dimensions: scaledImageSize, resource: thumbnailResource)]) + let updatedFile = file.withUpdatedSize(data.size).withUpdatedPreviewRepresentations([TelegramMediaImageRepresentation(dimensions: PixelDimensions(scaledImageSize), resource: thumbnailResource)]) subscriber.putNext(.standalone(media: updatedFile)) subscriber.putCompletion() } else { @@ -153,14 +153,14 @@ public func transformOutgoingMessageMedia(postbox: Postbox, network: Network, me return result |> mapToSignal { data -> Signal in if data.complete { - if let smallest = smallestImageRepresentation(image.representations), smallest.dimensions.width > 100.0 || smallest.dimensions.height > 100.0 { - let smallestSize = smallest.dimensions.fitted(CGSize(width: 320.0, height: 320.0)) + if let smallest = smallestImageRepresentation(image.representations), smallest.dimensions.width > 100 || smallest.dimensions.height > 100 { + let smallestSize = smallest.dimensions.cgSize.fitted(CGSize(width: 320.0, height: 320.0)) if let fullImage = UIImage(contentsOfFile: data.path), let smallestImage = generateScaledImage(image: fullImage, size: smallestSize, scale: 1.0), let smallestData = compressImageToJPEG(smallestImage, quality: 0.7) { var representations = image.representations let thumbnailResource = LocalFileMediaResource(fileId: arc4random64()) postbox.mediaBox.storeResourceData(thumbnailResource.id, data: smallestData) - representations.append(TelegramMediaImageRepresentation(dimensions: smallestSize, resource: thumbnailResource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(smallestSize), resource: thumbnailResource)) let updatedImage = TelegramMediaImage(imageId: image.imageId, representations: representations, immediateThumbnailData: image.immediateThumbnailData, reference: image.reference, partialReference: image.partialReference) return .single(.standalone(media: updatedImage)) } diff --git a/submodules/TelegramUI/TelegramUI/VerticalListContextResultsChatInputPanelItem.swift b/submodules/TelegramUI/TelegramUI/VerticalListContextResultsChatInputPanelItem.swift index 67dc9f0c28..87a96b55f0 100644 --- a/submodules/TelegramUI/TelegramUI/VerticalListContextResultsChatInputPanelItem.swift +++ b/submodules/TelegramUI/TelegramUI/VerticalListContextResultsChatInputPanelItem.swift @@ -202,7 +202,7 @@ final class VerticalListContextResultsChatInputPanelItemNode: ListViewItemNode { } case let .internalReference(_, _, _, _, _, image, file, _): if let image = image { - imageResource = imageRepresentationLargerThan(image.representations, size: CGSize(width: 200.0, height: 200.0))?.resource + imageResource = imageRepresentationLargerThan(image.representations, size: PixelDimensions(width: 200, height: 200))?.resource } else if let file = file { if file.isSticker { stickerFile = file @@ -225,7 +225,7 @@ final class VerticalListContextResultsChatInputPanelItemNode: ListViewItemNode { let boundingSize = CGSize(width: 55.0, height: 55.0) let iconSize: CGSize if let stickerFile = stickerFile, let dimensions = stickerFile.dimensions { - iconSize = dimensions.fitted(boundingSize) + iconSize = dimensions.cgSize.fitted(boundingSize) } else { iconSize = boundingSize } @@ -251,7 +251,7 @@ final class VerticalListContextResultsChatInputPanelItemNode: ListViewItemNode { if let stickerFile = stickerFile { updateIconImageSignal = chatMessageSticker(account: item.account, file: stickerFile, small: false, fetched: true) } else { - let tmpRepresentation = TelegramMediaImageRepresentation(dimensions: CGSize(width: 55.0, height: 55.0), resource: imageResource) + let tmpRepresentation = TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 55, height: 55), resource: imageResource) let tmpImage = TelegramMediaImage(imageId: MediaId(namespace: 0, id: 0), representations: [tmpRepresentation], immediateThumbnailData: nil, reference: nil, partialReference: nil) updateIconImageSignal = chatWebpageSnippetPhoto(account: item.account, photoReference: .standalone(media: tmpImage)) } diff --git a/submodules/TelegramUI/TelegramUI/WalletContextImpl.swift b/submodules/TelegramUI/TelegramUI/WalletContextImpl.swift index c66da04761..bc76fed87d 100644 --- a/submodules/TelegramUI/TelegramUI/WalletContextImpl.swift +++ b/submodules/TelegramUI/TelegramUI/WalletContextImpl.swift @@ -124,6 +124,14 @@ final class WalletContextImpl: WalletContext { return self.context.sharedContext.applicationBindings.applicationInForeground } + func downloadFile(url: URL) -> Signal { + return .fail(.generic) + } + + func updateResolvedWalletConfiguration(source: LocalWalletConfigurationSource, blockchainName: String, resolvedValue: String) -> Signal { + return .complete() + } + init(context: AccountContext, tonContext: TonContext) { self.context = context diff --git a/submodules/TelegramUniversalVideoContent/Sources/NativeVideoContent.swift b/submodules/TelegramUniversalVideoContent/Sources/NativeVideoContent.swift index a051cf7d17..87e1ab9463 100644 --- a/submodules/TelegramUniversalVideoContent/Sources/NativeVideoContent.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/NativeVideoContent.swift @@ -44,10 +44,10 @@ public final class NativeVideoContent: UniversalVideoContent { let dimensionsVertical = dimensions.width < dimensions.height let thumbnailVertical = thumbnail.dimensions.width < thumbnail.dimensions.height if dimensionsVertical != thumbnailVertical { - dimensions = CGSize(width: dimensions.height, height: dimensions.width) + dimensions = PixelDimensions(width: dimensions.height, height: dimensions.width) } } - self.dimensions = dimensions + self.dimensions = dimensions.cgSize } else { self.dimensions = CGSize(width: 128.0, height: 128.0) } @@ -136,7 +136,7 @@ private final class NativeVideoContentNode: ASDisplayNode, UniversalVideoContent self.playerNode = MediaPlayerNode(backgroundThread: false) self.player.attachPlayerNode(self.playerNode) - self.dimensions = fileReference.media.dimensions + self.dimensions = fileReference.media.dimensions?.cgSize if let dimensions = self.dimensions { self.dimensionsPromise.set(dimensions) } diff --git a/submodules/TelegramUniversalVideoContent/Sources/PlatformVideoContent.swift b/submodules/TelegramUniversalVideoContent/Sources/PlatformVideoContent.swift index 1b0c887eaa..0688178c82 100644 --- a/submodules/TelegramUniversalVideoContent/Sources/PlatformVideoContent.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/PlatformVideoContent.swift @@ -61,7 +61,7 @@ public final class PlatformVideoContent: UniversalVideoContent { self.id = id self.nativeId = id self.fileReference = fileReference - self.dimensions = fileReference.media.dimensions ?? CGSize(width: 128.0, height: 128.0) + self.dimensions = fileReference.media.dimensions?.cgSize ?? CGSize(width: 128.0, height: 128.0) self.duration = fileReference.media.duration ?? 0 self.streamVideo = streamVideo self.loopVideo = loopVideo @@ -158,7 +158,7 @@ private final class PlatformVideoContentNode: ASDisplayNode, UniversalVideoConte return AVPlayerLayer(player: player) }) - self.intrinsicDimensions = fileReference.media.dimensions ?? CGSize() + self.intrinsicDimensions = fileReference.media.dimensions?.cgSize ?? CGSize() self.playerNode.frame = CGRect(origin: CGPoint(), size: self.intrinsicDimensions) diff --git a/submodules/TelegramUniversalVideoContent/Sources/WebEmbedVideoContent.swift b/submodules/TelegramUniversalVideoContent/Sources/WebEmbedVideoContent.swift index 1f676cf4ee..bd59af1e90 100644 --- a/submodules/TelegramUniversalVideoContent/Sources/WebEmbedVideoContent.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/WebEmbedVideoContent.swift @@ -27,7 +27,7 @@ public final class WebEmbedVideoContent: UniversalVideoContent { self.id = AnyHashable(embedUrl) self.webPage = webPage self.webpageContent = webpageContent - self.dimensions = webpageContent.embedSize ?? CGSize(width: 128.0, height: 128.0) + self.dimensions = webpageContent.embedSize?.cgSize ?? CGSize(width: 128.0, height: 128.0) self.duration = Int32(webpageContent.duration ?? (0 as Int)) self.forcedTimestamp = forcedTimestamp } @@ -70,7 +70,7 @@ private final class WebEmbedVideoContentNode: ASDisplayNode, UniversalVideoConte self.webpageContent = webpageContent if let embedSize = webpageContent.embedSize { - self.intrinsicDimensions = embedSize + self.intrinsicDimensions = embedSize.cgSize } else { self.intrinsicDimensions = CGSize(width: 480.0, height: 320.0) } @@ -114,9 +114,9 @@ private final class WebEmbedVideoContentNode: ASDisplayNode, UniversalVideoConte transition.updateFrame(node: self.imageNode, frame: CGRect(origin: CGPoint(), size: size)) - if let image = webpageContent.image, let representation = image.representationForDisplayAtSize(self.intrinsicDimensions) { + if let image = webpageContent.image, let representation = image.representationForDisplayAtSize(PixelDimensions(self.intrinsicDimensions)) { let makeImageLayout = self.imageNode.asyncLayout() - let applyImageLayout = makeImageLayout(TransformImageArguments(corners: ImageCorners(), imageSize: representation.dimensions.aspectFilled(size), boundingSize: size, intrinsicInsets: UIEdgeInsets())) + let applyImageLayout = makeImageLayout(TransformImageArguments(corners: ImageCorners(), imageSize: representation.dimensions.cgSize.aspectFilled(size), boundingSize: size, intrinsicInsets: UIEdgeInsets())) applyImageLayout() } } diff --git a/submodules/TonBinding/Sources/TON.h b/submodules/TonBinding/Sources/TON.h index 08bd5c0c8d..2a373115f0 100644 --- a/submodules/TonBinding/Sources/TON.h +++ b/submodules/TonBinding/Sources/TON.h @@ -113,14 +113,23 @@ NS_ASSUME_NONNULL_BEGIN @end +@interface TONValidatedConfig : NSObject + +@property (nonatomic, readonly) int64_t defaultWalletId; + +- (instancetype)initWithDefaultWalletId:(int64_t)defaultWalletId; + +@end + @interface TON : NSObject - (instancetype)initWithKeystoreDirectory:(NSString *)keystoreDirectory config:(NSString *)config blockchainName:(NSString *)blockchainName performExternalRequest:(void (^)(TONExternalRequest * _Nonnull))performExternalRequest enableExternalRequests:(bool)enableExternalRequests syncStateUpdated:(void (^)(float))syncStateUpdated; - (SSignal *)updateConfig:(NSString *)config blockchainName:(NSString *)blockchainName; +- (SSignal *)validateConfig:(NSString *)config blockchainName:(NSString *)blockchainName; - (SSignal *)createKeyWithLocalPassword:(NSData *)localPassword mnemonicPassword:(NSData *)mnemonicPassword; -- (SSignal *)getWalletAccountAddressWithPublicKey:(NSString *)publicKey; +- (SSignal *)getWalletAccountAddressWithPublicKey:(NSString *)publicKey initialWalletId:(int64_t)initialWalletId; - (SSignal *)getAccountStateWithAddress:(NSString *)accountAddress; - (SSignal *)generateSendGramsQueryFromKey:(TONKey *)key localPassword:(NSData *)localPassword fromAddress:(NSString *)fromAddress toAddress:(NSString *)address amount:(int64_t)amount textMessage:(NSData *)textMessage forceIfDestinationNotInitialized:(bool)forceIfDestinationNotInitialized timeout:(int32_t)timeout randomId:(int64_t)randomId; - (SSignal *)generateFakeSendGramsQueryFromAddress:(NSString *)fromAddress toAddress:(NSString *)address amount:(int64_t)amount textMessage:(NSData *)textMessage forceIfDestinationNotInitialized:(bool)forceIfDestinationNotInitialized timeout:(int32_t)timeout; diff --git a/submodules/TonBinding/Sources/TON.mm b/submodules/TonBinding/Sources/TON.mm index 7ea1390032..e976d08a5c 100644 --- a/submodules/TonBinding/Sources/TON.mm +++ b/submodules/TonBinding/Sources/TON.mm @@ -202,6 +202,18 @@ static TONTransactionMessage * _Nullable parseTransactionMessage(tonlib_api::obj @end +@implementation TONValidatedConfig + +- (instancetype)initWithDefaultWalletId:(int64_t)defaultWalletId { + self = [super init]; + if (self != nil) { + _defaultWalletId = defaultWalletId; + } + return self; +} + +@end + using tonlib_api::make_object; @interface TONReceiveThreadParams : NSObject @@ -477,6 +489,39 @@ typedef enum { }] startOn:[SQueue mainQueue]] deliverOn:[SQueue mainQueue]]; } +- (SSignal *)validateConfig:(NSString *)config blockchainName:(NSString *)blockchainName { + return [[[[SSignal alloc] initWithGenerator:^id(SSubscriber *subscriber) { + uint64_t requestId = _nextRequestId; + _nextRequestId += 1; + + _requestHandlers[@(requestId)] = [[TONRequestHandler alloc] initWithCompletion:^(tonlib_api::object_ptr &object) { + if (object->get_id() == tonlib_api::error::ID) { + auto error = tonlib_api::move_object_as(object); + [subscriber putError:[[TONError alloc] initWithText:[[NSString alloc] initWithUTF8String:error->message_.c_str()]]]; + } else if (object->get_id() == tonlib_api::options_configInfo::ID) { + auto result = tonlib_api::move_object_as(object); + [subscriber putNext:[[TONValidatedConfig alloc] initWithDefaultWalletId:result->default_wallet_id_]]; + [subscriber putCompletion]; + } else { + assert(false); + } + }]; + + auto query = make_object( + make_object( + config.UTF8String, + blockchainName.UTF8String, + _enableExternalRequests, + false + ) + ); + _client->send({ requestId, std::move(query) }); + + return [[SBlockDisposable alloc] initWithBlock:^{ + }]; + }] startOn:[SQueue mainQueue]] deliverOn:[SQueue mainQueue]]; +} + - (SSignal *)createKeyWithLocalPassword:(NSData *)localPassword mnemonicPassword:(NSData *)mnemonicPassword { return [[[[SSignal alloc] initWithGenerator:^id(SSubscriber *subscriber) { uint64_t requestId = _nextRequestId; @@ -513,7 +558,7 @@ typedef enum { }] startOn:[SQueue mainQueue]] deliverOn:[SQueue mainQueue]]; } -- (SSignal *)getWalletAccountAddressWithPublicKey:(NSString *)publicKey { +- (SSignal *)getWalletAccountAddressWithPublicKey:(NSString *)publicKey initialWalletId:(int64_t)initialWalletId { return [[[[SSignal alloc] initWithGenerator:^id(SSubscriber *subscriber) { NSData *publicKeyData = [publicKey dataUsingEncoding:NSUTF8StringEncoding]; if (publicKeyData == nil) { @@ -537,9 +582,10 @@ typedef enum { } }]; - auto query = make_object( - make_object( - makeString(publicKeyData) + auto query = make_object( + make_object( + makeString(publicKeyData), + initialWalletId ) ); _client->send({ requestId, std::move(query) }); @@ -574,7 +620,15 @@ typedef enum { } [subscriber putNext:[[TONAccountState alloc] initWithIsInitialized:true balance:result->account_state_->balance_ seqno:result->account_state_->seqno_ lastTransactionId:lastTransactionId syncUtime:result->account_state_->sync_utime_]]; [subscriber putCompletion]; - } else { + } else if (object->get_id() == tonlib_api::generic_accountStateWalletV3::ID) { + auto result = tonlib_api::move_object_as(object); + TONTransactionId *lastTransactionId = nil; + if (result->account_state_->last_transaction_id_ != nullptr) { + lastTransactionId = [[TONTransactionId alloc] initWithLt:result->account_state_->last_transaction_id_->lt_ transactionHash:makeData(result->account_state_->last_transaction_id_->hash_)]; + } + [subscriber putNext:[[TONAccountState alloc] initWithIsInitialized:true balance:result->account_state_->balance_ seqno:result->account_state_->seqno_ lastTransactionId:lastTransactionId syncUtime:result->account_state_->sync_utime_]]; + [subscriber putCompletion]; + }else { assert(false); } }]; @@ -628,7 +682,7 @@ typedef enum { }]; auto query = make_object( - make_object( + make_object( make_object( makeString(publicKeyData), makeSecureString(key.secret) @@ -777,7 +831,7 @@ typedef enum { } }]; auto query = make_object( - make_object( + make_object( make_object( makeString(publicKeyData), makeSecureString(key.secret) diff --git a/submodules/WalletCore/Sources/WalletCore.swift b/submodules/WalletCore/Sources/WalletCore.swift index 4bf8024a72..b39f7dd95a 100644 --- a/submodules/WalletCore/Sources/WalletCore.swift +++ b/submodules/WalletCore/Sources/WalletCore.swift @@ -1,11 +1,7 @@ import Foundation -#if os(macOS) -import SwiftSignalKitMac -import MtProtoKitMac -#else import SwiftSignalKit import TonBinding -#endif + public struct TonKeychainEncryptedData: Codable, Equatable { public let publicKey: Data @@ -51,8 +47,8 @@ public protocol TonNetworkProxy: class { private final class TonInstanceImpl { private let queue: Queue private let basePath: String - private let config: String - private let blockchainName: String + fileprivate var config: String + fileprivate var blockchainName: String private let proxy: TonNetworkProxy? private var instance: TON? fileprivate let syncStateProgress = ValuePromise(0.0) @@ -122,6 +118,8 @@ public final class TonInstance { return Signal { subscriber in let disposable = MetaDisposable() self.impl.with { impl in + impl.config = config + impl.blockchainName = blockchainName impl.withInstance { ton in let cancel = ton.updateConfig(config, blockchainName: blockchainName).start(next: nil, error: { _ in }, completed: { @@ -136,6 +134,34 @@ public final class TonInstance { } } + public func validateConfig(config: String, blockchainName: String) -> Signal { + return Signal { subscriber in + let disposable = MetaDisposable() + self.impl.with { impl in + impl.withInstance { ton in + let cancel = ton.validateConfig(config, blockchainName: blockchainName).start(next: { result in + guard let result = result as? TONValidatedConfig else { + subscriber.putError(.generic) + return + } + subscriber.putNext(WalletValidateConfigResult(defaultWalletId: result.defaultWalletId)) + subscriber.putCompletion() + }, error: { error in + guard let _ = error as? TONError else { + subscriber.putError(.generic) + return + } + subscriber.putError(.generic) + }, completed: nil) + disposable.set(ActionDisposable { + cancel?.dispose() + }) + } + } + return disposable + } + } + fileprivate func exportKey(key: TONKey, localPassword: Data) -> Signal<[String], NoError> { return Signal { subscriber in let disposable = MetaDisposable() @@ -226,31 +252,70 @@ public final class TonInstance { } } - fileprivate func walletAddress(publicKey: WalletPublicKey) -> Signal { + fileprivate func getInitialWalletId() -> Signal { return Signal { subscriber in let disposable = MetaDisposable() - self.impl.with { impl in + let config = impl.config + let blockchainName = impl.blockchainName + impl.withInstance { ton in - let cancel = ton.getWalletAccountAddress(withPublicKey: publicKey.rawValue).start(next: { address in - guard let address = address as? String else { + let cancel = ton.validateConfig(config, blockchainName: blockchainName).start(next: { result in + guard let result = result as? TONValidatedConfig else { + subscriber.putError(.generic) return } - subscriber.putNext(address) + subscriber.putNext(result.defaultWalletId) subscriber.putCompletion() - }, error: { _ in - }, completed: { - }) + }, error: { error in + guard let _ = error as? TONError else { + subscriber.putError(.generic) + return + } + subscriber.putError(.generic) + }, completed: nil) disposable.set(ActionDisposable { cancel?.dispose() }) } } - return disposable } } + fileprivate func walletAddress(publicKey: WalletPublicKey) -> Signal { + return self.getInitialWalletId() + |> `catch` { _ -> Signal in + return .single(0) + } + |> mapToSignal { initialWalletId -> Signal in + return Signal { subscriber in + let disposable = MetaDisposable() + + self.impl.with { impl in + impl.withInstance { ton in + let cancel = ton.getWalletAccountAddress(withPublicKey: publicKey.rawValue, initialWalletId: initialWalletId).start(next: { address in + guard let address = address as? String else { + return + } + subscriber.putNext(address) + subscriber.putCompletion() + }, error: { _ in + subscriber.putNext("ERROR") + subscriber.putCompletion() + }, completed: { + }) + disposable.set(ActionDisposable { + cancel?.dispose() + }) + } + } + + return disposable + } + } + } + private func getWalletStateRaw(address: String) -> Signal { return Signal { subscriber in let disposable = MetaDisposable() @@ -306,7 +371,7 @@ public final class TonInstance { subscriber.putNext(state.lastTransactionId.flatMap(WalletTransactionId.init(tonTransactionId:))) }, error: { error in if let error = error as? TONError { - if error.text.hasPrefix("ДITE_SERVER_") { + if error.text.hasPrefix("LITE_SERVER_") { subscriber.putError(.network) } else { subscriber.putError(.generic) @@ -1263,3 +1328,12 @@ public protocol WalletStorageInterface { func localWalletConfiguration() -> Signal func updateLocalWalletConfiguration(_ f: @escaping (LocalWalletConfiguration) -> LocalWalletConfiguration) -> Signal } + +public struct WalletValidateConfigResult { + public var defaultWalletId: Int64 +} + +public enum WalletValidateConfigError { + case generic + +} diff --git a/submodules/WalletUI/Resources/WalletStrings.mapping b/submodules/WalletUI/Resources/WalletStrings.mapping index 7495ee2901..c1d9aa47b1 100644 Binary files a/submodules/WalletUI/Resources/WalletStrings.mapping and b/submodules/WalletUI/Resources/WalletStrings.mapping differ diff --git a/submodules/WalletUI/Sources/WalletConfgurationScreen.swift b/submodules/WalletUI/Sources/WalletConfgurationScreen.swift index 7df2cf13e2..f0a723ebb1 100644 --- a/submodules/WalletUI/Sources/WalletConfgurationScreen.swift +++ b/submodules/WalletUI/Sources/WalletConfgurationScreen.swift @@ -45,38 +45,47 @@ private enum WalletConfigurationScreenEntryTag: ItemListItemTag { } private enum WalletConfigurationScreenEntry: ItemListNodeEntry, Equatable { + case modeHeader(WalletTheme, String) case modeUrl(WalletTheme, String, Bool) case modeCustomString(WalletTheme, String, Bool) + case modeInfo(WalletTheme, String) case configUrl(WalletTheme, WalletStrings, String, String) case configString(WalletTheme, String, String) case blockchainNameHeader(WalletTheme, String) case blockchainName(WalletTheme, WalletStrings, String, String) + case blockchainNameInfo(WalletTheme, String) var section: ItemListSectionId { switch self { - case .modeUrl, .modeCustomString: + case .modeHeader, .modeUrl, .modeCustomString, .modeInfo: return WalletConfigurationScreenSection.mode.rawValue case .configUrl, .configString: return WalletConfigurationScreenSection.configString.rawValue - case .blockchainNameHeader, .blockchainName: + case .blockchainNameHeader, .blockchainName, .blockchainNameInfo: return WalletConfigurationScreenSection.blockchainName.rawValue } } var stableId: Int32 { switch self { - case .modeUrl: + case .modeHeader: return 0 - case .modeCustomString: + case .modeUrl: return 1 - case .configUrl: + case .modeCustomString: return 2 - case .configString: + case .modeInfo: return 3 - case .blockchainNameHeader: + case .configUrl: return 4 - case .blockchainName: + case .configString: return 5 + case .blockchainNameHeader: + return 6 + case .blockchainName: + return 7 + case .blockchainNameInfo: + return 8 } } @@ -87,6 +96,8 @@ private enum WalletConfigurationScreenEntry: ItemListNodeEntry, Equatable { func item(_ arguments: Any) -> ListViewItem { let arguments = arguments as! WalletConfigurationScreenArguments switch self { + case let .modeHeader(theme, text): + return ItemListSectionHeaderItem(theme: theme, text: text, sectionId: self.section) case let .modeUrl(theme, text, isSelected): return ItemListCheckboxItem(theme: theme, title: text, style: .left, checked: isSelected, zeroSeparatorInsets: false, sectionId: self.section, action: { arguments.updateSelectedMode(.url) @@ -95,14 +106,18 @@ private enum WalletConfigurationScreenEntry: ItemListNodeEntry, Equatable { return ItemListCheckboxItem(theme: theme, title: text, style: .left, checked: isSelected, zeroSeparatorInsets: false, sectionId: self.section, action: { arguments.updateSelectedMode(.customString) }) + case let .modeInfo(theme, text): + return ItemListTextItem(theme: theme, text: .plain(text), sectionId: self.section) case let .configUrl(theme, strings, placeholder, text): - return ItemListSingleLineInputItem(theme: theme, strings: strings, title: NSAttributedString(string: ""), text: text, placeholder: placeholder, sectionId: self.section, textUpdated: { value in + return ItemListMultilineInputItem(theme: theme, text: text, placeholder: placeholder, maxLength: nil, sectionId: self.section, style: .blocks, capitalization: false, autocorrection: false, returnKeyType: .done, minimalHeight: nil, textUpdated: { value in arguments.updateState { state in var state = state state.configUrl = value return state } - }, action: {}) + }, shouldUpdateText: { _ in + return true + }, processPaste: nil, updatedFocus: nil, tag: WalletConfigurationScreenEntryTag.configStringText, action: nil, inlineAction: nil) case let .configString(theme, placeholder, text): return ItemListMultilineInputItem(theme: theme, text: text, placeholder: placeholder, maxLength: nil, sectionId: self.section, style: .blocks, capitalization: false, autocorrection: false, returnKeyType: .done, minimalHeight: nil, textUpdated: { value in arguments.updateState { state in @@ -119,6 +134,8 @@ private enum WalletConfigurationScreenEntry: ItemListNodeEntry, Equatable { return ItemListSingleLineInputItem(theme: theme, strings: strings, title: NSAttributedString(string: ""), text: value, placeholder: title, sectionId: self.section, textUpdated: { value in arguments.updateBlockchainName(value) }, action: {}) + case let .blockchainNameInfo(theme, text): + return ItemListTextItem(theme: theme, text: .plain(text), sectionId: self.section) } } } @@ -145,18 +162,21 @@ private struct WalletConfigurationScreenState: Equatable { private func walletConfigurationScreenEntries(presentationData: WalletPresentationData, state: WalletConfigurationScreenState) -> [WalletConfigurationScreenEntry] { var entries: [WalletConfigurationScreenEntry] = [] - entries.append(.modeUrl(presentationData.theme, "URL", state.mode == .url)) - entries.append(.modeCustomString(presentationData.theme, "Custom", state.mode == .customString)) + entries.append(.modeHeader(presentationData.theme, presentationData.strings.Wallet_Configuration_SourceHeader)) + entries.append(.modeUrl(presentationData.theme, presentationData.strings.Wallet_Configuration_SourceURL, state.mode == .url)) + entries.append(.modeCustomString(presentationData.theme, presentationData.strings.Wallet_Configuration_SourceJSON, state.mode == .customString)) + entries.append(.modeInfo(presentationData.theme, presentationData.strings.Wallet_Configuration_SourceInfo)) switch state.mode { case .url: - entries.append(.configUrl(presentationData.theme, presentationData.strings, "URL", state.configUrl)) + entries.append(.configUrl(presentationData.theme, presentationData.strings, presentationData.strings.Wallet_Configuration_SourceURL, state.configUrl)) case .customString: - entries.append(.configString(presentationData.theme, "JSON", state.configString)) + entries.append(.configString(presentationData.theme, presentationData.strings.Wallet_Configuration_SourceJSON, state.configString)) } - entries.append(.blockchainNameHeader(presentationData.theme, "BLOCKCHAIN NAME")) - entries.append(.blockchainName(presentationData.theme, presentationData.strings, "Blockchain Name", state.blockchainName)) + entries.append(.blockchainNameHeader(presentationData.theme, presentationData.strings.Wallet_Configuration_BlockchainIdHeader)) + entries.append(.blockchainName(presentationData.theme, presentationData.strings, presentationData.strings.Wallet_Configuration_BlockchainIdPlaceholder, state.blockchainName)) + entries.append(.blockchainNameInfo(presentationData.theme, presentationData.strings.Wallet_Configuration_BlockchainIdInfo)) return entries } @@ -170,6 +190,10 @@ private final class WalletConfigurationScreenImpl: ItemListController, WalletCon } } +private func presentError(context: WalletContext, present: ((ViewController, Any?) -> Void)?, title: String?, text: String) { + present?(standardTextAlertController(theme: context.presentationData.theme.alert, title: title, text: text, actions: [TextAlertAction(type: .defaultAction, title: context.presentationData.strings.Wallet_Alert_OK, action: {})]), nil) +} + func walletConfigurationScreen(context: WalletContext, currentConfiguration: LocalWalletConfiguration) -> ViewController { var configUrl = "" var configString = "" @@ -237,15 +261,74 @@ func walletConfigurationScreen(context: WalletContext, currentConfiguration: Loc source = .string(state.configString) } } - let _ = (context.storage.updateLocalWalletConfiguration { current in - var current = current - current.source = source - current.blockchainName = blockchainName - return current - } - |> deliverOnMainQueue).start(completed: { + if currentConfiguration.source != source || currentConfiguration.blockchainName != blockchainName { + let applyResolved: (String) -> Void = { resolvedConfig in + let proceed: () -> Void = { + let _ = (context.updateResolvedWalletConfiguration(source: source, blockchainName: blockchainName, resolvedValue: resolvedConfig) + |> deliverOnMainQueue).start(completed: { + dismissImpl?() + }) + } + + if blockchainName != currentConfiguration.blockchainName { + presentControllerImpl?(standardTextAlertController(theme: context.presentationData.theme.alert, title: context.presentationData.strings.Wallet_Configuration_BlockchainNameChangedTitle, text: context.presentationData.strings.Wallet_Configuration_BlockchainNameChangedText, actions: [ + TextAlertAction(type: .genericAction, title: context.presentationData.strings.Wallet_Alert_Cancel, action: {}), + TextAlertAction(type: .destructiveAction, title: context.presentationData.strings.Wallet_Configuration_BlockchainNameChangedProceed, action: { + proceed() + }), + ]), nil) + } else { + proceed() + } + } + + let presentationData = context.presentationData + + switch source { + case let .url(url): + if let parsedUrl = URL(string: url) { + let statusController = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: nil)) + presentControllerImpl?(statusController, nil) + + let _ = (context.downloadFile(url: parsedUrl) + |> deliverOnMainQueue).start(next: { data in + statusController.dismiss() + + guard let string = String(data: data, encoding: .utf8) else { + let presentationData = context.presentationData + presentError(context: context, present: presentControllerImpl, title: presentationData.strings.Wallet_Configuration_ApplyErrorTitle, text: presentationData.strings.Wallet_Configuration_ApplyErrorTextURLInvalidData) + return + } + + let _ = (context.tonInstance.validateConfig(config: string, blockchainName: blockchainName) + |> deliverOnMainQueue).start(error: { _ in + let presentationData = context.presentationData + presentError(context: context, present: presentControllerImpl, title: presentationData.strings.Wallet_Configuration_ApplyErrorTitle, text: presentationData.strings.Wallet_Configuration_ApplyErrorTextURLInvalidData) + }, completed: { + applyResolved(string) + }) + }, error: { _ in + statusController.dismiss() + + let presentationData = context.presentationData + presentError(context: context, present: presentControllerImpl, title: presentationData.strings.Wallet_Configuration_ApplyErrorTitle, text: presentationData.strings.Wallet_Configuration_ApplyErrorTextURLUnreachable(url).0) + }) + } else { + presentError(context: context, present: presentControllerImpl, title: presentationData.strings.Wallet_Configuration_ApplyErrorTitle, text: presentationData.strings.Wallet_Configuration_ApplyErrorTextURLInvalid) + return + } + case let .string(string): + let _ = (context.tonInstance.validateConfig(config: string, blockchainName: blockchainName) + |> deliverOnMainQueue).start(error: { _ in + let presentationData = context.presentationData + presentError(context: context, present: presentControllerImpl, title: presentationData.strings.Wallet_Configuration_ApplyErrorTitle, text: presentationData.strings.Wallet_Configuration_ApplyErrorTextJSONInvalidData) + }, completed: { + applyResolved(string) + }) + } + } else { dismissImpl?() - }) + } }) let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.Wallet_Configuration_Title), leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Wallet_Navigation_Back), animateChanges: false) diff --git a/submodules/WalletUI/Sources/WalletContext.swift b/submodules/WalletUI/Sources/WalletContext.swift index f87a235d27..54719045fb 100644 --- a/submodules/WalletUI/Sources/WalletContext.swift +++ b/submodules/WalletUI/Sources/WalletContext.swift @@ -8,6 +8,10 @@ public enum WalletContextGetServerSaltError { case generic } +public enum WalletDownloadFileError { + case generic +} + public protocol WalletContext { var storage: WalletStorageInterface { get } var tonInstance: TonInstance { get } @@ -21,6 +25,9 @@ public protocol WalletContext { var inForeground: Signal { get } func getServerSalt() -> Signal + func downloadFile(url: URL) -> Signal + + func updateResolvedWalletConfiguration(source: LocalWalletConfigurationSource, blockchainName: String, resolvedValue: String) -> Signal func presentNativeController(_ controller: UIViewController) diff --git a/submodules/WalletUI/Sources/WalletInfoScreen.swift b/submodules/WalletUI/Sources/WalletInfoScreen.swift index de9d764802..3cb1d9a1b3 100644 --- a/submodules/WalletUI/Sources/WalletInfoScreen.swift +++ b/submodules/WalletUI/Sources/WalletInfoScreen.swift @@ -1100,3 +1100,66 @@ private final class WalletInfoScreenNode: ViewControllerTracingNode { } } } + +private final class WalletApplicationSplashScreenNode: ASDisplayNode { + private let headerBackgroundNode: ASDisplayNode + private let headerCornerNode: ASImageNode + + init(theme: WalletTheme) { + self.headerBackgroundNode = ASDisplayNode() + self.headerBackgroundNode.backgroundColor = .black + + self.headerCornerNode = ASImageNode() + self.headerCornerNode.displaysAsynchronously = false + self.headerCornerNode.displayWithoutProcessing = true + self.headerCornerNode.image = generateImage(CGSize(width: 20.0, height: 10.0), rotatedContext: { size, context in + context.setFillColor(UIColor.black.cgColor) + context.fill(CGRect(origin: CGPoint(), size: size)) + context.setBlendMode(.copy) + context.setFillColor(UIColor.clear.cgColor) + context.fillEllipse(in: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: 20.0, height: 20.0))) + })?.stretchableImage(withLeftCapWidth: 10, topCapHeight: 1) + + super.init() + + self.backgroundColor = theme.list.itemBlocksBackgroundColor + + self.addSubnode(self.headerBackgroundNode) + self.addSubnode(self.headerCornerNode) + } + + func containerLayoutUpdated(layout: ContainerViewLayout, navigationHeight: CGFloat, transition: ContainedViewLayoutTransition) { + let headerHeight = navigationHeight + 260.0 + + transition.updateFrame(node: self.headerBackgroundNode, frame: CGRect(origin: CGPoint(x: -1.0, y: 0), size: CGSize(width: layout.size.width + 2.0, height: headerHeight))) + transition.updateFrame(node: self.headerCornerNode, frame: CGRect(origin: CGPoint(x: 0.0, y: headerHeight), size: CGSize(width: layout.size.width, height: 10.0))) + } +} + +public final class WalletApplicationSplashScreen: ViewController { + private let theme: WalletTheme + + public init(theme: WalletTheme) { + self.theme = theme + + let navigationBarTheme = NavigationBarTheme(buttonColor: .white, disabledButtonColor: .white, primaryTextColor: .white, backgroundColor: .clear, separatorColor: .clear, badgeBackgroundColor: theme.navigationBar.badgeBackgroundColor, badgeStrokeColor: theme.navigationBar.badgeStrokeColor, badgeTextColor: theme.navigationBar.badgeTextColor) + + super.init(navigationBarPresentationData: NavigationBarPresentationData(theme: navigationBarTheme, strings: NavigationBarStrings(back: "", close: ""))) + + self.statusBar.statusBarStyle = .White + } + + required public init(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override public func loadDisplayNode() { + self.displayNode = WalletApplicationSplashScreenNode(theme: self.theme) + } + + override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { + super.containerLayoutUpdated(layout, transition: transition) + + (self.displayNode as! WalletApplicationSplashScreenNode).containerLayoutUpdated(layout: layout, navigationHeight: self.navigationHeight, transition: transition) + } +} diff --git a/submodules/WalletUI/Sources/WalletPresentationData.swift b/submodules/WalletUI/Sources/WalletPresentationData.swift index 5721a386ec..4f10448bc3 100644 --- a/submodules/WalletUI/Sources/WalletPresentationData.swift +++ b/submodules/WalletUI/Sources/WalletPresentationData.swift @@ -324,6 +324,6 @@ func walletStringsFormattedNumber(_ count: Int32, _ groupingSeparator: String = } } -func OverlayStatusController(theme: WalletTheme, type: OverlayStatusControllerType) -> ViewController { +public func OverlayStatusController(theme: WalletTheme, type: OverlayStatusControllerType) -> ViewController { return OverlayStatusController(style: theme.keyboardAppearance == .dark ? .dark : .light, type: type) } diff --git a/submodules/WalletUI/Sources/WalletSettingsScreen.swift b/submodules/WalletUI/Sources/WalletSettingsScreen.swift index c670a5cde3..564e68073e 100644 --- a/submodules/WalletUI/Sources/WalletSettingsScreen.swift +++ b/submodules/WalletUI/Sources/WalletSettingsScreen.swift @@ -28,13 +28,14 @@ private enum WalletSettingsSection: Int32 { private enum WalletSettingsEntry: ItemListNodeEntry { case configuration(WalletTheme, String) + case configurationInfo(WalletTheme, String) case exportWallet(WalletTheme, String) case deleteWallet(WalletTheme, String) case deleteWalletInfo(WalletTheme, String) var section: ItemListSectionId { switch self { - case .configuration: + case .configuration, .configurationInfo: return WalletSettingsSection.configuration.rawValue case .exportWallet: return WalletSettingsSection.exportWallet.rawValue @@ -47,12 +48,14 @@ private enum WalletSettingsEntry: ItemListNodeEntry { switch self { case .configuration: return 0 - case .exportWallet: + case .configurationInfo: return 1 - case .deleteWallet: + case .exportWallet: return 2 - case .deleteWalletInfo: + case .deleteWallet: return 3 + case .deleteWalletInfo: + return 4 } } @@ -67,6 +70,8 @@ private enum WalletSettingsEntry: ItemListNodeEntry { return ItemListActionItem(theme: theme, title: text, kind: .generic, alignment: .natural, sectionId: self.section, style: .blocks, action: { arguments.openConfiguration() }) + case let .configurationInfo(theme, text): + return ItemListTextItem(theme: theme, text: .plain(text), sectionId: self.section) case let .exportWallet(theme, text): return ItemListActionItem(theme: theme, title: text, kind: .generic, alignment: .natural, sectionId: self.section, style: .blocks, action: { arguments.exportWallet() @@ -89,6 +94,7 @@ private func walletSettingsControllerEntries(presentationData: WalletPresentatio if supportsCustomConfigurations { entries.append(.configuration(presentationData.theme, presentationData.strings.Wallet_Settings_Configuration)) + entries.append(.configurationInfo(presentationData.theme, presentationData.strings.Wallet_Settings_ConfigurationInfo)) } entries.append(.exportWallet(presentationData.theme, presentationData.strings.Wallet_Settings_BackupWallet)) entries.append(.deleteWallet(presentationData.theme, presentationData.strings.Wallet_Settings_DeleteWallet)) diff --git a/submodules/WalletUI/Sources/WalletStrings.swift b/submodules/WalletUI/Sources/WalletStrings.swift index e3188ce4e7..1403361194 100644 --- a/submodules/WalletUI/Sources/WalletStrings.swift +++ b/submodules/WalletUI/Sources/WalletStrings.swift @@ -190,243 +190,261 @@ public final class WalletStrings: Equatable { public var Wallet_Updated_JustNow: String { return self._s[0]! } public var Wallet_WordCheck_IncorrectText: String { return self._s[1]! } public var Wallet_Month_ShortNovember: String { return self._s[2]! } - public var Wallet_Info_Send: String { return self._s[3]! } - public var Wallet_TransactionInfo_SendGrams: String { return self._s[4]! } + public var Wallet_Configuration_BlockchainIdPlaceholder: String { return self._s[3]! } + public var Wallet_Info_Send: String { return self._s[4]! } + public var Wallet_TransactionInfo_SendGrams: String { return self._s[5]! } public func Wallet_Info_TransactionBlockchainFee(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[5]!, self._r[5]!, [_0]) + return formatWithArgumentRanges(self._s[6]!, self._r[6]!, [_0]) } - public var Wallet_Sent_Title: String { return self._s[6]! } - public var Wallet_Receive_ShareUrlInfo: String { return self._s[7]! } - public var Wallet_RestoreFailed_Title: String { return self._s[8]! } - public var Wallet_TransactionInfo_CopyAddress: String { return self._s[10]! } - public var Wallet_Settings_BackupWallet: String { return self._s[11]! } - public var Wallet_Send_NetworkErrorTitle: String { return self._s[12]! } - public var Wallet_Month_ShortJune: String { return self._s[13]! } - public var Wallet_TransactionInfo_StorageFeeInfo: String { return self._s[14]! } - public var Wallet_Created_Title: String { return self._s[15]! } - public var Wallet_Send_SyncInProgress: String { return self._s[16]! } - public var Wallet_Info_YourBalance: String { return self._s[17]! } - public var Wallet_TransactionInfo_CommentHeader: String { return self._s[18]! } - public var Wallet_TransactionInfo_OtherFeeHeader: String { return self._s[19]! } + public var Wallet_Sent_Title: String { return self._s[7]! } + public var Wallet_Receive_ShareUrlInfo: String { return self._s[8]! } + public var Wallet_RestoreFailed_Title: String { return self._s[9]! } + public var Wallet_TransactionInfo_CopyAddress: String { return self._s[11]! } + public var Wallet_Settings_BackupWallet: String { return self._s[12]! } + public var Wallet_Send_NetworkErrorTitle: String { return self._s[13]! } + public var Wallet_Month_ShortJune: String { return self._s[14]! } + public var Wallet_TransactionInfo_StorageFeeInfo: String { return self._s[15]! } + public var Wallet_Created_Title: String { return self._s[16]! } + public func Wallet_Configuration_ApplyErrorTextURLUnreachable(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[17]!, self._r[17]!, [_0]) + } + public var Wallet_Send_SyncInProgress: String { return self._s[18]! } + public var Wallet_Info_YourBalance: String { return self._s[19]! } + public var Wallet_Configuration_ApplyErrorTextURLInvalidData: String { return self._s[20]! } + public var Wallet_TransactionInfo_CommentHeader: String { return self._s[21]! } + public var Wallet_TransactionInfo_OtherFeeHeader: String { return self._s[22]! } public func Wallet_Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[20]!, self._r[20]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[23]!, self._r[23]!, [_1, _2, _3]) } - public var Wallet_WordImport_IncorrectText: String { return self._s[21]! } - public var Wallet_Month_GenJanuary: String { return self._s[22]! } - public var Wallet_Send_OwnAddressAlertTitle: String { return self._s[23]! } - public var Wallet_Receive_ShareAddress: String { return self._s[24]! } - public var Wallet_WordImport_Title: String { return self._s[25]! } - public var Wallet_TransactionInfo_Title: String { return self._s[26]! } - public var Wallet_Words_NotDoneText: String { return self._s[28]! } - public var Wallet_RestoreFailed_EnterWords: String { return self._s[29]! } - public var Wallet_WordImport_Text: String { return self._s[30]! } - public var Wallet_RestoreFailed_Text: String { return self._s[32]! } - public var Wallet_TransactionInfo_NoAddress: String { return self._s[33]! } - public var Wallet_Navigation_Back: String { return self._s[34]! } - public var Wallet_Intro_Terms: String { return self._s[35]! } + public var Wallet_Settings_ConfigurationInfo: String { return self._s[24]! } + public var Wallet_WordImport_IncorrectText: String { return self._s[25]! } + public var Wallet_Month_GenJanuary: String { return self._s[26]! } + public var Wallet_Send_OwnAddressAlertTitle: String { return self._s[27]! } + public var Wallet_Receive_ShareAddress: String { return self._s[28]! } + public var Wallet_WordImport_Title: String { return self._s[29]! } + public var Wallet_TransactionInfo_Title: String { return self._s[30]! } + public var Wallet_Words_NotDoneText: String { return self._s[32]! } + public var Wallet_RestoreFailed_EnterWords: String { return self._s[33]! } + public var Wallet_WordImport_Text: String { return self._s[34]! } + public var Wallet_RestoreFailed_Text: String { return self._s[36]! } + public var Wallet_TransactionInfo_NoAddress: String { return self._s[37]! } + public var Wallet_Navigation_Back: String { return self._s[38]! } + public var Wallet_Intro_Terms: String { return self._s[39]! } public func Wallet_Send_Balance(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[36]!, self._r[36]!, [_0]) + return formatWithArgumentRanges(self._s[40]!, self._r[40]!, [_0]) } public func Wallet_Time_PreciseDate_m8(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[37]!, self._r[37]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[41]!, self._r[41]!, [_1, _2, _3]) } - public var Wallet_TransactionInfo_AddressCopied: String { return self._s[38]! } + public var Wallet_TransactionInfo_AddressCopied: String { return self._s[42]! } public func Wallet_Info_TransactionDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[39]!, self._r[39]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[43]!, self._r[43]!, [_1, _2, _3]) } - public var Wallet_Send_NetworkErrorText: String { return self._s[40]! } - public var Wallet_VoiceOver_Editing_ClearText: String { return self._s[41]! } - public var Wallet_Intro_ImportExisting: String { return self._s[42]! } - public var Wallet_Receive_CommentInfo: String { return self._s[43]! } - public var Wallet_WordCheck_Continue: String { return self._s[44]! } - public var Wallet_Receive_InvoiceUrlCopied: String { return self._s[45]! } - public var Wallet_Completed_Text: String { return self._s[46]! } - public var Wallet_WordCheck_IncorrectHeader: String { return self._s[48]! } - public var Wallet_TransactionInfo_StorageFeeInfoUrl: String { return self._s[49]! } - public var Wallet_Receive_Title: String { return self._s[50]! } - public var Wallet_Info_WalletCreated: String { return self._s[51]! } - public var Wallet_Navigation_Cancel: String { return self._s[52]! } - public var Wallet_CreateInvoice_Title: String { return self._s[53]! } + public var Wallet_Send_NetworkErrorText: String { return self._s[44]! } + public var Wallet_VoiceOver_Editing_ClearText: String { return self._s[45]! } + public var Wallet_Intro_ImportExisting: String { return self._s[46]! } + public var Wallet_Receive_CommentInfo: String { return self._s[47]! } + public var Wallet_WordCheck_Continue: String { return self._s[48]! } + public var Wallet_Receive_InvoiceUrlCopied: String { return self._s[49]! } + public var Wallet_Completed_Text: String { return self._s[50]! } + public var Wallet_WordCheck_IncorrectHeader: String { return self._s[52]! } + public var Wallet_Configuration_SourceHeader: String { return self._s[53]! } + public var Wallet_TransactionInfo_StorageFeeInfoUrl: String { return self._s[54]! } + public var Wallet_Receive_Title: String { return self._s[55]! } + public var Wallet_Info_WalletCreated: String { return self._s[56]! } + public var Wallet_Navigation_Cancel: String { return self._s[57]! } + public var Wallet_CreateInvoice_Title: String { return self._s[58]! } public func Wallet_WordCheck_Text(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[54]!, self._r[54]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[59]!, self._r[59]!, [_1, _2, _3]) } - public var Wallet_TransactionInfo_SenderHeader: String { return self._s[55]! } + public var Wallet_TransactionInfo_SenderHeader: String { return self._s[60]! } public func Wallet_Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[56]!, self._r[56]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[61]!, self._r[61]!, [_1, _2, _3]) } - public var Wallet_Month_GenAugust: String { return self._s[57]! } - public var Wallet_Info_UnknownTransaction: String { return self._s[58]! } - public var Wallet_Receive_CreateInvoice: String { return self._s[59]! } - public var Wallet_Month_GenSeptember: String { return self._s[60]! } - public var Wallet_Month_GenJuly: String { return self._s[61]! } - public var Wallet_Receive_AddressHeader: String { return self._s[62]! } - public var Wallet_Send_AmountText: String { return self._s[63]! } - public var Wallet_SecureStorageNotAvailable_Text: String { return self._s[64]! } + public var Wallet_Month_GenAugust: String { return self._s[62]! } + public var Wallet_Info_UnknownTransaction: String { return self._s[63]! } + public var Wallet_Receive_CreateInvoice: String { return self._s[64]! } + public var Wallet_Month_GenSeptember: String { return self._s[65]! } + public var Wallet_Month_GenJuly: String { return self._s[66]! } + public var Wallet_Receive_AddressHeader: String { return self._s[67]! } + public var Wallet_Send_AmountText: String { return self._s[68]! } + public var Wallet_SecureStorageNotAvailable_Text: String { return self._s[69]! } public func Wallet_Time_PreciseDate_m12(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[65]!, self._r[65]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[70]!, self._r[70]!, [_1, _2, _3]) } public func Wallet_Updated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[66]!, self._r[66]!, [_0]) + return formatWithArgumentRanges(self._s[71]!, self._r[71]!, [_0]) } - public var Wallet_Configuration_Title: String { return self._s[68]! } - public var Wallet_Words_Title: String { return self._s[69]! } - public var Wallet_Month_ShortMay: String { return self._s[70]! } - public var Wallet_WordCheck_Title: String { return self._s[71]! } - public var Wallet_Words_NotDoneResponse: String { return self._s[72]! } - public var Wallet_Send_ErrorNotEnoughFundsText: String { return self._s[73]! } - public var Wallet_Receive_CreateInvoiceInfo: String { return self._s[74]! } + public var Wallet_Configuration_Title: String { return self._s[73]! } + public var Wallet_Configuration_BlockchainIdHeader: String { return self._s[74]! } + public var Wallet_Words_Title: String { return self._s[75]! } + public var Wallet_Month_ShortMay: String { return self._s[76]! } + public var Wallet_WordCheck_Title: String { return self._s[77]! } + public var Wallet_Words_NotDoneResponse: String { return self._s[78]! } + public var Wallet_Configuration_SourceURL: String { return self._s[79]! } + public var Wallet_Send_ErrorNotEnoughFundsText: String { return self._s[80]! } + public var Wallet_Receive_CreateInvoiceInfo: String { return self._s[81]! } public func Wallet_Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[75]!, self._r[75]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[82]!, self._r[82]!, [_1, _2, _3]) } - public var Wallet_Info_Address: String { return self._s[76]! } - public var Wallet_Intro_CreateWallet: String { return self._s[77]! } - public var Wallet_SecureStorageChanged_PasscodeText: String { return self._s[78]! } + public var Wallet_Info_Address: String { return self._s[83]! } + public var Wallet_Intro_CreateWallet: String { return self._s[84]! } + public var Wallet_SecureStorageChanged_PasscodeText: String { return self._s[85]! } public func Wallet_SecureStorageReset_BiometryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[79]!, self._r[79]!, [_0]) + return formatWithArgumentRanges(self._s[86]!, self._r[86]!, [_0]) } - public var Wallet_Send_SendAnyway: String { return self._s[80]! } - public var Wallet_UnknownError: String { return self._s[81]! } - public var Wallet_SecureStorageChanged_ImportWallet: String { return self._s[82]! } - public var Wallet_SecureStorageChanged_CreateWallet: String { return self._s[84]! } - public var Wallet_Words_NotDoneOk: String { return self._s[85]! } - public var Wallet_Intro_Title: String { return self._s[86]! } - public var Wallet_Info_Receive: String { return self._s[87]! } - public var Wallet_Completed_ViewWallet: String { return self._s[88]! } - public var Wallet_Month_ShortJuly: String { return self._s[89]! } - public var Wallet_Month_ShortApril: String { return self._s[90]! } + public var Wallet_Send_SendAnyway: String { return self._s[87]! } + public var Wallet_UnknownError: String { return self._s[88]! } + public var Wallet_Configuration_ApplyErrorTextURLInvalid: String { return self._s[89]! } + public var Wallet_SecureStorageChanged_ImportWallet: String { return self._s[90]! } + public var Wallet_SecureStorageChanged_CreateWallet: String { return self._s[92]! } + public var Wallet_Configuration_SourceInfo: String { return self._s[93]! } + public var Wallet_Words_NotDoneOk: String { return self._s[94]! } + public var Wallet_Intro_Title: String { return self._s[95]! } + public var Wallet_Info_Receive: String { return self._s[96]! } + public var Wallet_Completed_ViewWallet: String { return self._s[97]! } + public var Wallet_Month_ShortJuly: String { return self._s[98]! } + public var Wallet_Month_ShortApril: String { return self._s[99]! } public func Wallet_Info_TransactionDateHeader(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[91]!, self._r[91]!, [_1, _2]) + return formatWithArgumentRanges(self._s[100]!, self._r[100]!, [_1, _2]) } - public var Wallet_Receive_ShareInvoiceUrl: String { return self._s[92]! } + public var Wallet_Receive_ShareInvoiceUrl: String { return self._s[101]! } public func Wallet_Time_PreciseDate_m10(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[93]!, self._r[93]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[102]!, self._r[102]!, [_1, _2, _3]) } - public var Wallet_Send_UninitializedText: String { return self._s[95]! } + public var Wallet_Send_UninitializedText: String { return self._s[104]! } public func Wallet_Sent_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[96]!, self._r[96]!, [_0]) + return formatWithArgumentRanges(self._s[105]!, self._r[105]!, [_0]) } - public var Wallet_Month_GenNovember: String { return self._s[97]! } + public var Wallet_Month_GenNovember: String { return self._s[106]! } public func Wallet_Time_PreciseDate_m5(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[98]!, self._r[98]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[107]!, self._r[107]!, [_1, _2, _3]) } - public var Wallet_Month_GenApril: String { return self._s[99]! } - public var Wallet_Month_ShortMarch: String { return self._s[100]! } - public var Wallet_Month_GenFebruary: String { return self._s[101]! } - public var Wallet_Qr_ScanCode: String { return self._s[102]! } - public var Wallet_Receive_AddressCopied: String { return self._s[103]! } - public var Wallet_Send_UninitializedTitle: String { return self._s[104]! } - public var Wallet_Send_Send: String { return self._s[105]! } - public var Wallet_Info_RefreshErrorTitle: String { return self._s[106]! } - public var Wallet_Month_GenJune: String { return self._s[107]! } - public var Wallet_Send_AddressHeader: String { return self._s[108]! } - public var Wallet_SecureStorageReset_BiometryTouchId: String { return self._s[109]! } - public var Wallet_Send_Confirmation: String { return self._s[110]! } - public var Wallet_Completed_Title: String { return self._s[111]! } - public var Wallet_Alert_OK: String { return self._s[112]! } - public var Wallet_Settings_DeleteWallet: String { return self._s[113]! } - public var Wallet_SecureStorageReset_PasscodeText: String { return self._s[114]! } - public var Wallet_Month_ShortSeptember: String { return self._s[115]! } - public var Wallet_Info_TransactionTo: String { return self._s[116]! } - public var Wallet_Send_ConfirmationConfirm: String { return self._s[117]! } - public var Wallet_TransactionInfo_OtherFeeInfo: String { return self._s[118]! } - public var Wallet_Receive_AmountText: String { return self._s[119]! } - public var Wallet_Receive_CopyAddress: String { return self._s[120]! } - public var Wallet_Intro_Text: String { return self._s[122]! } - public var Wallet_Configuration_Apply: String { return self._s[123]! } + public var Wallet_Month_GenApril: String { return self._s[108]! } + public var Wallet_Month_ShortMarch: String { return self._s[109]! } + public var Wallet_Month_GenFebruary: String { return self._s[110]! } + public var Wallet_Qr_ScanCode: String { return self._s[111]! } + public var Wallet_Receive_AddressCopied: String { return self._s[112]! } + public var Wallet_Send_UninitializedTitle: String { return self._s[113]! } + public var Wallet_Send_Send: String { return self._s[114]! } + public var Wallet_Info_RefreshErrorTitle: String { return self._s[115]! } + public var Wallet_Month_GenJune: String { return self._s[116]! } + public var Wallet_Send_AddressHeader: String { return self._s[117]! } + public var Wallet_SecureStorageReset_BiometryTouchId: String { return self._s[118]! } + public var Wallet_Send_Confirmation: String { return self._s[119]! } + public var Wallet_Completed_Title: String { return self._s[120]! } + public var Wallet_Alert_OK: String { return self._s[121]! } + public var Wallet_Settings_DeleteWallet: String { return self._s[122]! } + public var Wallet_SecureStorageReset_PasscodeText: String { return self._s[123]! } + public var Wallet_Month_ShortSeptember: String { return self._s[124]! } + public var Wallet_Info_TransactionTo: String { return self._s[125]! } + public var Wallet_Send_ConfirmationConfirm: String { return self._s[126]! } + public var Wallet_TransactionInfo_OtherFeeInfo: String { return self._s[127]! } + public var Wallet_Receive_AmountText: String { return self._s[128]! } + public var Wallet_Receive_CopyAddress: String { return self._s[129]! } + public var Wallet_Intro_Text: String { return self._s[131]! } + public var Wallet_Configuration_Apply: String { return self._s[132]! } public func Wallet_SecureStorageChanged_BiometryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[124]!, self._r[124]!, [_0]) + return formatWithArgumentRanges(self._s[133]!, self._r[133]!, [_0]) } public func Wallet_Time_PreciseDate_m1(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[125]!, self._r[125]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[134]!, self._r[134]!, [_1, _2, _3]) } - public var Wallet_RestoreFailed_CreateWallet: String { return self._s[126]! } - public var Wallet_Weekday_Yesterday: String { return self._s[127]! } - public var Wallet_Receive_AmountHeader: String { return self._s[128]! } - public var Wallet_TransactionInfo_OtherFeeInfoUrl: String { return self._s[129]! } - public var Wallet_Month_ShortFebruary: String { return self._s[130]! } - public var Wallet_Alert_Cancel: String { return self._s[131]! } - public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[132]! } - public var Wallet_Info_TransactionFrom: String { return self._s[133]! } - public var Wallet_Send_ErrorDecryptionFailed: String { return self._s[134]! } - public var Wallet_Send_OwnAddressAlertText: String { return self._s[135]! } - public var Wallet_Words_NotDoneTitle: String { return self._s[136]! } - public var Wallet_Month_ShortOctober: String { return self._s[137]! } - public var Wallet_Month_GenMay: String { return self._s[138]! } - public var Wallet_Intro_CreateErrorTitle: String { return self._s[139]! } - public var Wallet_SecureStorageReset_BiometryFaceId: String { return self._s[140]! } - public var Wallet_Month_ShortJanuary: String { return self._s[141]! } - public var Wallet_Month_GenMarch: String { return self._s[142]! } - public var Wallet_Sending_Text: String { return self._s[143]! } - public var Wallet_Month_GenOctober: String { return self._s[144]! } - public var Wallet_Receive_CopyInvoiceUrl: String { return self._s[145]! } - public var Wallet_ContextMenuCopy: String { return self._s[146]! } + public var Wallet_RestoreFailed_CreateWallet: String { return self._s[135]! } + public var Wallet_Weekday_Yesterday: String { return self._s[136]! } + public var Wallet_Receive_AmountHeader: String { return self._s[137]! } + public var Wallet_TransactionInfo_OtherFeeInfoUrl: String { return self._s[138]! } + public var Wallet_Month_ShortFebruary: String { return self._s[139]! } + public var Wallet_Configuration_SourceJSON: String { return self._s[140]! } + public var Wallet_Alert_Cancel: String { return self._s[141]! } + public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[142]! } + public var Wallet_Configuration_ApplyErrorTextJSONInvalidData: String { return self._s[143]! } + public var Wallet_Info_TransactionFrom: String { return self._s[144]! } + public var Wallet_Send_ErrorDecryptionFailed: String { return self._s[145]! } + public var Wallet_Send_OwnAddressAlertText: String { return self._s[146]! } + public var Wallet_Words_NotDoneTitle: String { return self._s[147]! } + public var Wallet_Month_ShortOctober: String { return self._s[148]! } + public var Wallet_Month_GenMay: String { return self._s[149]! } + public var Wallet_Intro_CreateErrorTitle: String { return self._s[150]! } + public var Wallet_SecureStorageReset_BiometryFaceId: String { return self._s[151]! } + public var Wallet_Month_ShortJanuary: String { return self._s[152]! } + public var Wallet_Month_GenMarch: String { return self._s[153]! } + public var Wallet_Sending_Text: String { return self._s[154]! } + public var Wallet_Month_GenOctober: String { return self._s[155]! } + public var Wallet_Receive_CopyInvoiceUrl: String { return self._s[156]! } + public var Wallet_ContextMenuCopy: String { return self._s[157]! } public func Wallet_Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[147]!, self._r[147]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[158]!, self._r[158]!, [_1, _2, _3]) } - public var Wallet_Info_Updating: String { return self._s[149]! } - public var Wallet_Created_ExportErrorTitle: String { return self._s[150]! } - public var Wallet_SecureStorageNotAvailable_Title: String { return self._s[151]! } - public var Wallet_Sending_Title: String { return self._s[152]! } - public var Wallet_Navigation_Done: String { return self._s[153]! } - public var Wallet_Settings_Title: String { return self._s[154]! } + public var Wallet_Info_Updating: String { return self._s[160]! } + public var Wallet_Created_ExportErrorTitle: String { return self._s[161]! } + public var Wallet_SecureStorageNotAvailable_Title: String { return self._s[162]! } + public var Wallet_Sending_Title: String { return self._s[163]! } + public var Wallet_Navigation_Done: String { return self._s[164]! } + public var Wallet_Configuration_BlockchainIdInfo: String { return self._s[165]! } + public var Wallet_Configuration_BlockchainNameChangedTitle: String { return self._s[166]! } + public var Wallet_Settings_Title: String { return self._s[167]! } public func Wallet_Receive_ShareInvoiceUrlInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[155]!, self._r[155]!, [_0]) + return formatWithArgumentRanges(self._s[168]!, self._r[168]!, [_0]) } - public var Wallet_Info_RefreshErrorNetworkText: String { return self._s[156]! } - public var Wallet_Weekday_Today: String { return self._s[158]! } - public var Wallet_Month_ShortDecember: String { return self._s[159]! } - public var Wallet_Words_Text: String { return self._s[160]! } - public var Wallet_WordCheck_ViewWords: String { return self._s[161]! } - public var Wallet_Send_AddressInfo: String { return self._s[162]! } + public var Wallet_Info_RefreshErrorNetworkText: String { return self._s[169]! } + public var Wallet_Weekday_Today: String { return self._s[171]! } + public var Wallet_Month_ShortDecember: String { return self._s[172]! } + public var Wallet_Words_Text: String { return self._s[173]! } + public var Wallet_Configuration_BlockchainNameChangedProceed: String { return self._s[174]! } + public var Wallet_WordCheck_ViewWords: String { return self._s[175]! } + public var Wallet_Send_AddressInfo: String { return self._s[176]! } public func Wallet_Updated_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[163]!, self._r[163]!, [_0]) + return formatWithArgumentRanges(self._s[177]!, self._r[177]!, [_0]) } - public var Wallet_Intro_NotNow: String { return self._s[164]! } - public var Wallet_Send_OwnAddressAlertProceed: String { return self._s[165]! } - public var Wallet_Navigation_Close: String { return self._s[166]! } - public var Wallet_Month_GenDecember: String { return self._s[168]! } - public var Wallet_Send_ErrorNotEnoughFundsTitle: String { return self._s[169]! } - public var Wallet_WordImport_IncorrectTitle: String { return self._s[170]! } - public var Wallet_Send_AddressText: String { return self._s[171]! } - public var Wallet_Receive_AmountInfo: String { return self._s[172]! } + public var Wallet_Intro_NotNow: String { return self._s[178]! } + public var Wallet_Send_OwnAddressAlertProceed: String { return self._s[179]! } + public var Wallet_Navigation_Close: String { return self._s[180]! } + public var Wallet_Month_GenDecember: String { return self._s[182]! } + public var Wallet_Send_ErrorNotEnoughFundsTitle: String { return self._s[183]! } + public var Wallet_WordImport_IncorrectTitle: String { return self._s[184]! } + public var Wallet_Send_AddressText: String { return self._s[185]! } + public var Wallet_Receive_AmountInfo: String { return self._s[186]! } public func Wallet_Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[173]!, self._r[173]!, [_1, _2, _3]) - } - public var Wallet_Month_ShortAugust: String { return self._s[174]! } - public var Wallet_Qr_Title: String { return self._s[175]! } - public var Wallet_Settings_Configuration: String { return self._s[176]! } - public var Wallet_WordCheck_TryAgain: String { return self._s[177]! } - public var Wallet_Info_TransactionPendingHeader: String { return self._s[178]! } - public var Wallet_Receive_InvoiceUrlHeader: String { return self._s[179]! } - public var Wallet_Send_TransactionInProgress: String { return self._s[180]! } - public var Wallet_Created_Text: String { return self._s[181]! } - public var Wallet_Created_Proceed: String { return self._s[182]! } - public var Wallet_Words_Done: String { return self._s[183]! } - public var Wallet_WordImport_Continue: String { return self._s[184]! } - public var Wallet_TransactionInfo_StorageFeeHeader: String { return self._s[185]! } - public var Wallet_WordImport_CanNotRemember: String { return self._s[186]! } - public func Wallet_Time_PreciseDate_m11(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[187]!, self._r[187]!, [_1, _2, _3]) } + public var Wallet_Month_ShortAugust: String { return self._s[188]! } + public var Wallet_Qr_Title: String { return self._s[189]! } + public var Wallet_Settings_Configuration: String { return self._s[190]! } + public var Wallet_WordCheck_TryAgain: String { return self._s[191]! } + public var Wallet_Info_TransactionPendingHeader: String { return self._s[192]! } + public var Wallet_Receive_InvoiceUrlHeader: String { return self._s[193]! } + public var Wallet_Configuration_ApplyErrorTitle: String { return self._s[194]! } + public var Wallet_Send_TransactionInProgress: String { return self._s[195]! } + public var Wallet_Created_Text: String { return self._s[196]! } + public var Wallet_Created_Proceed: String { return self._s[197]! } + public var Wallet_Words_Done: String { return self._s[198]! } + public var Wallet_WordImport_Continue: String { return self._s[199]! } + public var Wallet_TransactionInfo_StorageFeeHeader: String { return self._s[200]! } + public var Wallet_WordImport_CanNotRemember: String { return self._s[201]! } + public func Wallet_Time_PreciseDate_m11(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[202]!, self._r[202]!, [_1, _2, _3]) + } public func Wallet_Send_ConfirmationText(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[188]!, self._r[188]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[203]!, self._r[203]!, [_1, _2, _3]) } - public var Wallet_Created_ExportErrorText: String { return self._s[190]! } + public var Wallet_Created_ExportErrorText: String { return self._s[205]! } public func Wallet_Updated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[191]!, self._r[191]!, [_0]) + return formatWithArgumentRanges(self._s[206]!, self._r[206]!, [_0]) } - public var Wallet_Settings_DeleteWalletInfo: String { return self._s[192]! } - public var Wallet_Intro_CreateErrorText: String { return self._s[193]! } - public var Wallet_Sent_ViewWallet: String { return self._s[194]! } - public var Wallet_Send_ErrorInvalidAddress: String { return self._s[195]! } + public var Wallet_Settings_DeleteWalletInfo: String { return self._s[207]! } + public var Wallet_Intro_CreateErrorText: String { return self._s[208]! } + public var Wallet_Sent_ViewWallet: String { return self._s[209]! } + public var Wallet_Send_ErrorInvalidAddress: String { return self._s[210]! } + public var Wallet_Configuration_BlockchainNameChangedText: String { return self._s[211]! } public func Wallet_Time_PreciseDate_m7(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[196]!, self._r[196]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[212]!, self._r[212]!, [_1, _2, _3]) } - public var Wallet_Send_Title: String { return self._s[197]! } - public var Wallet_Info_RefreshErrorText: String { return self._s[198]! } - public var Wallet_SecureStorageReset_Title: String { return self._s[199]! } - public var Wallet_Receive_CommentHeader: String { return self._s[200]! } - public var Wallet_Info_ReceiveGrams: String { return self._s[201]! } + public var Wallet_Send_Title: String { return self._s[213]! } + public var Wallet_Info_RefreshErrorText: String { return self._s[214]! } + public var Wallet_SecureStorageReset_Title: String { return self._s[215]! } + public var Wallet_Receive_CommentHeader: String { return self._s[216]! } + public var Wallet_Info_ReceiveGrams: String { return self._s[217]! } public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = walletStringsFormattedNumber(value, self.groupingSeparator) diff --git a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Contents.json b/submodules/WalletUI/WalletImages.xcassets/Wallet/SplashCornerL.imageset/Contents.json similarity index 52% rename from submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Contents.json rename to submodules/WalletUI/WalletImages.xcassets/Wallet/SplashCornerL.imageset/Contents.json index c5fda8e395..05f674819f 100644 --- a/submodules/AsyncDisplayKit/examples/CatDealsCollectionView/Sample/Images.xcassets/LaunchImage.launchimage/Contents.json +++ b/submodules/WalletUI/WalletImages.xcassets/Wallet/SplashCornerL.imageset/Contents.json @@ -1,6 +1,9 @@ { "images" : [ - + { + "idiom" : "universal", + "filename" : "TopLeft.pdf" + } ], "info" : { "version" : 1, diff --git a/submodules/WalletUI/WalletImages.xcassets/Wallet/SplashCornerL.imageset/TopLeft.pdf b/submodules/WalletUI/WalletImages.xcassets/Wallet/SplashCornerL.imageset/TopLeft.pdf new file mode 100644 index 0000000000..5a2388e7ac Binary files /dev/null and b/submodules/WalletUI/WalletImages.xcassets/Wallet/SplashCornerL.imageset/TopLeft.pdf differ diff --git a/submodules/WalletUI/WalletImages.xcassets/Wallet/SplashCornerR.imageset/Contents.json b/submodules/WalletUI/WalletImages.xcassets/Wallet/SplashCornerR.imageset/Contents.json new file mode 100644 index 0000000000..5db86dc123 --- /dev/null +++ b/submodules/WalletUI/WalletImages.xcassets/Wallet/SplashCornerR.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "TopRight.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/submodules/WalletUI/WalletImages.xcassets/Wallet/SplashCornerR.imageset/TopRight.pdf b/submodules/WalletUI/WalletImages.xcassets/Wallet/SplashCornerR.imageset/TopRight.pdf new file mode 100644 index 0000000000..4b499ddcfb Binary files /dev/null and b/submodules/WalletUI/WalletImages.xcassets/Wallet/SplashCornerR.imageset/TopRight.pdf differ diff --git a/submodules/WallpaperResources/Sources/WallpaperResources.swift b/submodules/WallpaperResources/Sources/WallpaperResources.swift index 5147587ddc..8b90a33ef5 100644 --- a/submodules/WallpaperResources/Sources/WallpaperResources.swift +++ b/submodules/WallpaperResources/Sources/WallpaperResources.swift @@ -301,9 +301,9 @@ private func patternWallpaperDatas(account: Account, accountManager: AccountMana let size: CGSize? switch mode { case .thumbnail: - size = largestRepresentation.dimensions.fitted(CGSize(width: 640.0, height: 640.0)) + size = largestRepresentation.dimensions.cgSize.fitted(CGSize(width: 640.0, height: 640.0)) case .fastScreen: - size = largestRepresentation.dimensions.fitted(CGSize(width: 1280.0, height: 1280.0)) + size = largestRepresentation.dimensions.cgSize.fitted(CGSize(width: 1280.0, height: 1280.0)) default: size = nil } @@ -815,7 +815,7 @@ public func themeImage(account: Account, accountManager: AccountManager, fileRef |> mapToSignal { wallpaper -> Signal<(PresentationTheme?, UIImage?, Data?), NoError> in if let wallpaper = wallpaper, case let .file(file) = wallpaper.wallpaper { var convertedRepresentations: [ImageRepresentationWithReference] = [] - convertedRepresentations.append(ImageRepresentationWithReference(representation: TelegramMediaImageRepresentation(dimensions: CGSize(width: 100.0, height: 100.0), resource: file.file.resource), reference: .media(media: .standalone(media: file.file), resource: file.file.resource))) + convertedRepresentations.append(ImageRepresentationWithReference(representation: TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 100, height: 100), resource: file.file.resource), reference: .media(media: .standalone(media: file.file), resource: file.file.resource))) return wallpaperDatas(account: account, accountManager: accountManager, fileReference: .standalone(media: file.file), representations: convertedRepresentations, alwaysShowThumbnailFirst: false, thumbnail: false, onlyFullSize: true, autoFetchFullSize: true, synchronousLoad: false) |> mapToSignal { _, fullSizeData, complete -> Signal<(PresentationTheme?, UIImage?, Data?), NoError> in guard complete, let fullSizeData = fullSizeData else { @@ -973,7 +973,7 @@ public func themeIconImage(account: Account, accountManager: AccountManager, the |> mapToSignal { wallpaper in if let wallpaper = wallpaper, case let .file(file) = wallpaper.wallpaper { var convertedRepresentations: [ImageRepresentationWithReference] = [] - convertedRepresentations.append(ImageRepresentationWithReference(representation: TelegramMediaImageRepresentation(dimensions: CGSize(width: 100.0, height: 100.0), resource: file.file.resource), reference: .media(media: .standalone(media: file.file), resource: file.file.resource))) + convertedRepresentations.append(ImageRepresentationWithReference(representation: TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 100, height: 100), resource: file.file.resource), reference: .media(media: .standalone(media: file.file), resource: file.file.resource))) return wallpaperDatas(account: account, accountManager: accountManager, fileReference: .standalone(media: file.file), representations: convertedRepresentations, alwaysShowThumbnailFirst: false, thumbnail: false, onlyFullSize: true, autoFetchFullSize: true, synchronousLoad: false) |> mapToSignal { _, fullSizeData, complete -> Signal<(UIColor, UIColor, UIColor, UIImage?), NoError> in guard complete, let fullSizeData = fullSizeData else { diff --git a/submodules/WatchBridge/Sources/WatchBridge.swift b/submodules/WatchBridge/Sources/WatchBridge.swift index 74a15df4f6..b074778ab7 100644 --- a/submodules/WatchBridge/Sources/WatchBridge.swift +++ b/submodules/WatchBridge/Sources/WatchBridge.swift @@ -46,7 +46,7 @@ private func makeBridgeImage(_ image: TelegramMediaImage?) -> TGBridgeImageMedia if let image = image, let representation = largestImageRepresentation(image.representations) { let bridgeImage = TGBridgeImageMediaAttachment() bridgeImage.imageId = image.imageId.id - bridgeImage.dimensions = representation.dimensions + bridgeImage.dimensions = representation.dimensions.cgSize return bridgeImage } else { return nil @@ -65,7 +65,7 @@ func makeBridgeDocument(_ file: TelegramMediaFile?) -> TGBridgeDocumentMediaAtta case .Animated: bridgeDocument.isAnimated = true case let .ImageSize(size): - bridgeDocument.imageSize = NSValue(cgSize: size) + bridgeDocument.imageSize = NSValue(cgSize: size.cgSize) case let .Sticker(displayText, packReference, _): bridgeDocument.isSticker = true bridgeDocument.stickerAlt = displayText @@ -168,7 +168,7 @@ func makeBridgeMedia(message: Message, strings: PresentationStrings, chatPeer: P switch attribute { case let .Video(duration, size, flags): bridgeVideo.duration = Int32(clamping: duration) - bridgeVideo.dimensions = size + bridgeVideo.dimensions = size.cgSize bridgeVideo.round = flags.contains(.instantRoundVideo) default: break @@ -290,7 +290,7 @@ func makeBridgeMedia(message: Message, strings: PresentationStrings, chatPeer: P bridgeWebpage.photo = makeBridgeImage(content.image) bridgeWebpage.embedUrl = content.embedUrl bridgeWebpage.embedType = content.embedType - bridgeWebpage.embedSize = content.embedSize ?? CGSize() + bridgeWebpage.embedSize = content.embedSize?.cgSize ?? CGSize() bridgeWebpage.duration = NSNumber(integerLiteral: content.duration ?? 0) bridgeWebpage.author = content.author bridgeMedia.append(bridgeWebpage) diff --git a/submodules/WatchBridge/Sources/WatchRequestHandlers.swift b/submodules/WatchBridge/Sources/WatchRequestHandlers.swift index 559faaf7b2..b42e8c9375 100644 --- a/submodules/WatchBridge/Sources/WatchRequestHandlers.swift +++ b/submodules/WatchBridge/Sources/WatchRequestHandlers.swift @@ -478,7 +478,7 @@ final class WatchMediaHandler: WatchRequestHandler { |> mapToSignal { mediaAndFileReference -> Signal<(TransformImageArguments) -> DrawingContext?, NoError> in if let (media, fileReference) = mediaAndFileReference { if let dimensions = media.dimensions { - size = dimensions + size = dimensions.cgSize } self.disposable.add(freeMediaFileInteractiveFetched(account: context.account, fileReference: fileReference).start()) return chatMessageSticker(account: context.account, file: media, small: false, fetched: true, onlyFullSize: true) @@ -541,12 +541,12 @@ final class WatchMediaHandler: WatchRequestHandler { if let imageReference = candidateMediaReference?.concrete(TelegramMediaImage.self) { updatedMediaReference = imageReference.abstract if let representation = largestRepresentationForPhoto(imageReference.media) { - imageDimensions = representation.dimensions + imageDimensions = representation.dimensions.cgSize } } else if let fileReference = candidateMediaReference?.concrete(TelegramMediaFile.self) { updatedMediaReference = fileReference.abstract if let representation = largestImageRepresentation(fileReference.media.previewRepresentations), !fileReference.media.isSticker { - imageDimensions = representation.dimensions + imageDimensions = representation.dimensions.cgSize } } if let updatedMediaReference = updatedMediaReference, imageDimensions != nil { diff --git a/submodules/WebSearchUI/Sources/LegacyWebSearchGallery.swift b/submodules/WebSearchUI/Sources/LegacyWebSearchGallery.swift index 9f97cfb4bd..0462646118 100644 --- a/submodules/WebSearchUI/Sources/LegacyWebSearchGallery.swift +++ b/submodules/WebSearchUI/Sources/LegacyWebSearchGallery.swift @@ -227,20 +227,20 @@ func legacyWebSearchItem(account: Account, result: ChatContextResult) -> LegacyW } if let thumbnail = thumbnail { thumbnailResource = thumbnail.resource - thumbnailDimensions = thumbnail.dimensions + thumbnailDimensions = thumbnail.dimensions?.cgSize } if let dimensions = content?.dimensions { - imageDimensions = dimensions + imageDimensions = dimensions.cgSize } case let .internalReference(_, _, _, _, _, image, _, _): immediateThumbnailData = image?.immediateThumbnailData if let image = image { - if let imageRepresentation = imageRepresentationLargerThan(image.representations, size: CGSize(width: 1000.0, height: 800.0)) { - imageDimensions = imageRepresentation.dimensions + if let imageRepresentation = imageRepresentationLargerThan(image.representations, size: PixelDimensions(width: 1000, height: 800)) { + imageDimensions = imageRepresentation.dimensions.cgSize imageResource = imageRepresentation.resource } - if let thumbnailRepresentation = imageRepresentationLargerThan(image.representations, size: CGSize(width: 200.0, height: 100.0)) { - thumbnailDimensions = thumbnailRepresentation.dimensions + if let thumbnailRepresentation = imageRepresentationLargerThan(image.representations, size: PixelDimensions(width: 200, height: 100)) { + thumbnailDimensions = thumbnailRepresentation.dimensions.cgSize thumbnailResource = thumbnailRepresentation.resource } } @@ -261,9 +261,9 @@ func legacyWebSearchItem(account: Account, result: ChatContextResult) -> LegacyW var representations: [TelegramMediaImageRepresentation] = [] if let thumbnailResource = thumbnailResource, let thumbnailDimensions = thumbnailDimensions { - representations.append(TelegramMediaImageRepresentation(dimensions: thumbnailDimensions, resource: thumbnailResource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(thumbnailDimensions), resource: thumbnailResource)) } - representations.append(TelegramMediaImageRepresentation(dimensions: imageDimensions, resource: imageResource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(imageDimensions), resource: imageResource)) let tmpImage = TelegramMediaImage(imageId: MediaId(namespace: 0, id: 0), representations: representations, immediateThumbnailData: immediateThumbnailData, reference: nil, partialReference: nil) thumbnailSignal = chatMessagePhotoDatas(postbox: account.postbox, photoReference: .standalone(media: tmpImage), autoFetchFullSize: false) |> mapToSignal { value -> Signal in diff --git a/submodules/WebSearchUI/Sources/WebSearchItem.swift b/submodules/WebSearchUI/Sources/WebSearchItem.swift index 00a4ca76c4..81cec09255 100644 --- a/submodules/WebSearchUI/Sources/WebSearchItem.swift +++ b/submodules/WebSearchUI/Sources/WebSearchItem.swift @@ -100,31 +100,31 @@ final class WebSearchItemNode: GridItemNode { } else if let thumbnail = thumbnail { imageResource = thumbnail.resource } - imageDimensions = content?.dimensions + imageDimensions = content?.dimensions?.cgSize case let .internalReference(_, _, _, _, _, image, file, _): if let image = image { immediateThumbnailData = image.immediateThumbnailData if let largestRepresentation = largestImageRepresentation(image.representations) { - imageDimensions = largestRepresentation.dimensions + imageDimensions = largestRepresentation.dimensions.cgSize } - imageResource = imageRepresentationLargerThan(image.representations, size: CGSize(width: 200.0, height: 100.0))?.resource + imageResource = imageRepresentationLargerThan(image.representations, size: PixelDimensions(width: 200, height: 100))?.resource if let file = file { if let thumbnailRepresentation = smallestImageRepresentation(file.previewRepresentations) { - thumbnailDimensions = thumbnailRepresentation.dimensions + thumbnailDimensions = thumbnailRepresentation.dimensions.cgSize thumbnailResource = thumbnailRepresentation.resource } } else { if let thumbnailRepresentation = smallestImageRepresentation(image.representations) { - thumbnailDimensions = thumbnailRepresentation.dimensions + thumbnailDimensions = thumbnailRepresentation.dimensions.cgSize thumbnailResource = thumbnailRepresentation.resource } } } else if let file = file { immediateThumbnailData = file.immediateThumbnailData if let dimensions = file.dimensions { - imageDimensions = dimensions + imageDimensions = dimensions.cgSize } else if let largestRepresentation = largestImageRepresentation(file.previewRepresentations) { - imageDimensions = largestRepresentation.dimensions + imageDimensions = largestRepresentation.dimensions.cgSize } imageResource = smallestImageRepresentation(file.previewRepresentations)?.resource } @@ -132,10 +132,10 @@ final class WebSearchItemNode: GridItemNode { var representations: [TelegramMediaImageRepresentation] = [] if let thumbnailResource = thumbnailResource, let thumbnailDimensions = thumbnailDimensions { - representations.append(TelegramMediaImageRepresentation(dimensions: thumbnailDimensions, resource: thumbnailResource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(thumbnailDimensions), resource: thumbnailResource)) } if let imageResource = imageResource, let imageDimensions = imageDimensions { - representations.append(TelegramMediaImageRepresentation(dimensions: imageDimensions, resource: imageResource)) + representations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(imageDimensions), resource: imageResource)) } if !representations.isEmpty { let tmpImage = TelegramMediaImage(imageId: MediaId(namespace: 0, id: 0), representations: representations, immediateThumbnailData: immediateThumbnailData, reference: nil, partialReference: nil) diff --git a/submodules/libphonenumber/Info.plist b/submodules/libphonenumber/Info.plist deleted file mode 100644 index e1fe4cfb7b..0000000000 --- a/submodules/libphonenumber/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - - diff --git a/submodules/libphonenumber/Sources/NBPhoneNumber.h b/submodules/libphonenumber/Sources/NBPhoneNumber.h index abff40ed9b..51b3a2ac46 100755 --- a/submodules/libphonenumber/Sources/NBPhoneNumber.h +++ b/submodules/libphonenumber/Sources/NBPhoneNumber.h @@ -5,11 +5,8 @@ // #import -#if TARGET_OS_IOS #import -#else -#import -#endif + @interface NBPhoneNumber : NSObject diff --git a/submodules/libphonenumber/Sources/NBPhoneNumberUtil.h b/submodules/libphonenumber/Sources/NBPhoneNumberUtil.h index fea42a7444..4d1ce4fea0 100755 --- a/submodules/libphonenumber/Sources/NBPhoneNumberUtil.h +++ b/submodules/libphonenumber/Sources/NBPhoneNumberUtil.h @@ -7,11 +7,8 @@ // #import -#if TARGET_OS_IOS #import -#else -#import -#endif + @class NBPhoneMetaData, NBPhoneNumber; diff --git a/submodules/libphonenumber/libphonenumber_Xcode.xcodeproj/project.pbxproj b/submodules/libphonenumber/libphonenumber_Xcode.xcodeproj/project.pbxproj deleted file mode 100644 index 0ab88d79ef..0000000000 --- a/submodules/libphonenumber/libphonenumber_Xcode.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1346 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - D0208ABB2306E84F00A23503 /* libphonenumbermac.h in Headers */ = {isa = PBXBuildFile; fileRef = D0208AB92306E84F00A23503 /* libphonenumbermac.h */; }; - D0208ABF2306E85800A23503 /* NBMetadataCoreTest.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E459B2305D1EF0049C28B /* NBMetadataCoreTest.h */; }; - D0208AC02306E85800A23503 /* NBPhoneMetaDataGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45A22305D1EF0049C28B /* NBPhoneMetaDataGenerator.h */; }; - D0208AC12306E85800A23503 /* NBNumberFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45992305D1EF0049C28B /* NBNumberFormat.h */; }; - D0208AC32306E85800A23503 /* NBPhoneNumberUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45A62305D1F00049C28B /* NBPhoneNumberUtil.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0208AC42306E85800A23503 /* libphonenumbermac.h in Headers */ = {isa = PBXBuildFile; fileRef = D0208AB92306E84F00A23503 /* libphonenumbermac.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0208AC52306E85800A23503 /* NBMetadataCoreMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45A02305D1EF0049C28B /* NBMetadataCoreMapper.h */; }; - D0208AC62306E85800A23503 /* NBAsYouTypeFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E459D2305D1EF0049C28B /* NBAsYouTypeFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0208AC72306E85800A23503 /* NBPhoneNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45AA2305D1F10049C28B /* NBPhoneNumber.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0208AC82306E85800A23503 /* NBPhoneNumberDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E459C2305D1EF0049C28B /* NBPhoneNumberDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0208AC92306E85800A23503 /* NBMetadataCore.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E459E2305D1EF0049C28B /* NBMetadataCore.h */; }; - D0208ACA2306E85800A23503 /* NBPhoneMetaData.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45B02305D1F10049C28B /* NBPhoneMetaData.h */; }; - D0208ACB2306E85800A23503 /* NBPhoneNumberDesc.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45A72305D1F00049C28B /* NBPhoneNumberDesc.h */; }; - D0208ACC2306E85800A23503 /* NBMetadataHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E459A2305D1EF0049C28B /* NBMetadataHelper.h */; }; - D0208ACD2306E85800A23503 /* NBMetadataCoreTestMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45A82305D1F00049C28B /* NBMetadataCoreTestMapper.h */; }; - D0208ACF2306E85800A23503 /* NBMetadataCoreMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45A42305D1F00049C28B /* NBMetadataCoreMapper.m */; }; - D0208AD02306E85800A23503 /* NBMetadataCoreTestMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45A32305D1F00049C28B /* NBMetadataCoreTestMapper.m */; }; - D0208AD12306E85800A23503 /* NBPhoneNumberDefines.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45A12305D1EF0049C28B /* NBPhoneNumberDefines.m */; }; - D0208AD22306E85800A23503 /* NBNumberFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45AE2305D1F10049C28B /* NBNumberFormat.m */; }; - D0208AD32306E85800A23503 /* NBAsYouTypeFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45B12305D1F10049C28B /* NBAsYouTypeFormatter.m */; }; - D0208AD42306E85800A23503 /* NBMetadataCore.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45A92305D1F00049C28B /* NBMetadataCore.m */; }; - D0208AD52306E85800A23503 /* NBPhoneNumberDesc.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E459F2305D1EF0049C28B /* NBPhoneNumberDesc.m */; }; - D0208AD62306E85800A23503 /* NBPhoneNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45AD2305D1F10049C28B /* NBPhoneNumber.m */; }; - D0208AD72306E85800A23503 /* NBPhoneMetaData.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45AF2305D1F10049C28B /* NBPhoneMetaData.m */; }; - D0208AD82306E85800A23503 /* NBMetadataCoreTest.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45B22305D1F10049C28B /* NBMetadataCoreTest.m */; }; - D0208AD92306E85800A23503 /* NBPhoneMetaDataGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45AB2305D1F10049C28B /* NBPhoneMetaDataGenerator.m */; }; - D0208ADA2306E85800A23503 /* NBMetadataHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45AC2305D1F10049C28B /* NBMetadataHelper.m */; }; - D0208ADB2306E85800A23503 /* NBPhoneNumberUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45A52305D1F00049C28B /* NBPhoneNumberUtil.m */; }; - D0208ADD2306E85800A23503 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E45CE2305D32D0049C28B /* Foundation.framework */; }; - D03E458F2305CE840049C28B /* libphonenumber.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E458D2305CE840049C28B /* libphonenumber.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E45B32305D1F20049C28B /* NBNumberFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45992305D1EF0049C28B /* NBNumberFormat.h */; }; - D03E45B42305D1F20049C28B /* NBMetadataHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E459A2305D1EF0049C28B /* NBMetadataHelper.h */; }; - D03E45B52305D1F20049C28B /* NBMetadataCoreTest.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E459B2305D1EF0049C28B /* NBMetadataCoreTest.h */; }; - D03E45B62305D1F20049C28B /* NBPhoneNumberDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E459C2305D1EF0049C28B /* NBPhoneNumberDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E45B72305D1F20049C28B /* NBAsYouTypeFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E459D2305D1EF0049C28B /* NBAsYouTypeFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E45B82305D1F20049C28B /* NBMetadataCore.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E459E2305D1EF0049C28B /* NBMetadataCore.h */; }; - D03E45B92305D1F20049C28B /* NBPhoneNumberDesc.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E459F2305D1EF0049C28B /* NBPhoneNumberDesc.m */; }; - D03E45BA2305D1F20049C28B /* NBMetadataCoreMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45A02305D1EF0049C28B /* NBMetadataCoreMapper.h */; }; - D03E45BB2305D1F20049C28B /* NBPhoneNumberDefines.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45A12305D1EF0049C28B /* NBPhoneNumberDefines.m */; }; - D03E45BC2305D1F20049C28B /* NBPhoneMetaDataGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45A22305D1EF0049C28B /* NBPhoneMetaDataGenerator.h */; }; - D03E45BD2305D1F20049C28B /* NBMetadataCoreTestMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45A32305D1F00049C28B /* NBMetadataCoreTestMapper.m */; }; - D03E45BE2305D1F20049C28B /* NBMetadataCoreMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45A42305D1F00049C28B /* NBMetadataCoreMapper.m */; }; - D03E45BF2305D1F20049C28B /* NBPhoneNumberUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45A52305D1F00049C28B /* NBPhoneNumberUtil.m */; }; - D03E45C02305D1F20049C28B /* NBPhoneNumberUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45A62305D1F00049C28B /* NBPhoneNumberUtil.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E45C12305D1F20049C28B /* NBPhoneNumberDesc.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45A72305D1F00049C28B /* NBPhoneNumberDesc.h */; }; - D03E45C22305D1F20049C28B /* NBMetadataCoreTestMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45A82305D1F00049C28B /* NBMetadataCoreTestMapper.h */; }; - D03E45C32305D1F20049C28B /* NBMetadataCore.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45A92305D1F00049C28B /* NBMetadataCore.m */; }; - D03E45C42305D1F20049C28B /* NBPhoneNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45AA2305D1F10049C28B /* NBPhoneNumber.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E45C52305D1F20049C28B /* NBPhoneMetaDataGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45AB2305D1F10049C28B /* NBPhoneMetaDataGenerator.m */; }; - D03E45C62305D1F20049C28B /* NBMetadataHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45AC2305D1F10049C28B /* NBMetadataHelper.m */; }; - D03E45C72305D1F20049C28B /* NBPhoneNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45AD2305D1F10049C28B /* NBPhoneNumber.m */; }; - D03E45C82305D1F20049C28B /* NBNumberFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45AE2305D1F10049C28B /* NBNumberFormat.m */; }; - D03E45C92305D1F20049C28B /* NBPhoneMetaData.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45AF2305D1F10049C28B /* NBPhoneMetaData.m */; }; - D03E45CA2305D1F20049C28B /* NBPhoneMetaData.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45B02305D1F10049C28B /* NBPhoneMetaData.h */; }; - D03E45CB2305D1F20049C28B /* NBAsYouTypeFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45B12305D1F10049C28B /* NBAsYouTypeFormatter.m */; }; - D03E45CC2305D1F20049C28B /* NBMetadataCoreTest.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E45B22305D1F10049C28B /* NBMetadataCoreTest.m */; }; - D03E45CF2305D32E0049C28B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03E45CE2305D32D0049C28B /* Foundation.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - D0208AB92306E84F00A23503 /* libphonenumbermac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libphonenumbermac.h; sourceTree = ""; }; - D0208ABA2306E84F00A23503 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D0208AE52306E85800A23503 /* libphonenumbermac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = libphonenumbermac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D03E458A2305CE830049C28B /* libphonenumber.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = libphonenumber.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D03E458D2305CE840049C28B /* libphonenumber.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libphonenumber.h; sourceTree = ""; }; - D03E458E2305CE840049C28B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D03E45992305D1EF0049C28B /* NBNumberFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NBNumberFormat.h; sourceTree = ""; }; - D03E459A2305D1EF0049C28B /* NBMetadataHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NBMetadataHelper.h; sourceTree = ""; }; - D03E459B2305D1EF0049C28B /* NBMetadataCoreTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NBMetadataCoreTest.h; sourceTree = ""; }; - D03E459C2305D1EF0049C28B /* NBPhoneNumberDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NBPhoneNumberDefines.h; sourceTree = ""; }; - D03E459D2305D1EF0049C28B /* NBAsYouTypeFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NBAsYouTypeFormatter.h; sourceTree = ""; }; - D03E459E2305D1EF0049C28B /* NBMetadataCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NBMetadataCore.h; sourceTree = ""; }; - D03E459F2305D1EF0049C28B /* NBPhoneNumberDesc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NBPhoneNumberDesc.m; sourceTree = ""; }; - D03E45A02305D1EF0049C28B /* NBMetadataCoreMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NBMetadataCoreMapper.h; sourceTree = ""; }; - D03E45A12305D1EF0049C28B /* NBPhoneNumberDefines.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NBPhoneNumberDefines.m; sourceTree = ""; }; - D03E45A22305D1EF0049C28B /* NBPhoneMetaDataGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NBPhoneMetaDataGenerator.h; sourceTree = ""; }; - D03E45A32305D1F00049C28B /* NBMetadataCoreTestMapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NBMetadataCoreTestMapper.m; sourceTree = ""; }; - D03E45A42305D1F00049C28B /* NBMetadataCoreMapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NBMetadataCoreMapper.m; sourceTree = ""; }; - D03E45A52305D1F00049C28B /* NBPhoneNumberUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NBPhoneNumberUtil.m; sourceTree = ""; }; - D03E45A62305D1F00049C28B /* NBPhoneNumberUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NBPhoneNumberUtil.h; sourceTree = ""; }; - D03E45A72305D1F00049C28B /* NBPhoneNumberDesc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NBPhoneNumberDesc.h; sourceTree = ""; }; - D03E45A82305D1F00049C28B /* NBMetadataCoreTestMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NBMetadataCoreTestMapper.h; sourceTree = ""; }; - D03E45A92305D1F00049C28B /* NBMetadataCore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NBMetadataCore.m; sourceTree = ""; }; - D03E45AA2305D1F10049C28B /* NBPhoneNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NBPhoneNumber.h; sourceTree = ""; }; - D03E45AB2305D1F10049C28B /* NBPhoneMetaDataGenerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NBPhoneMetaDataGenerator.m; sourceTree = ""; }; - D03E45AC2305D1F10049C28B /* NBMetadataHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NBMetadataHelper.m; sourceTree = ""; }; - D03E45AD2305D1F10049C28B /* NBPhoneNumber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NBPhoneNumber.m; sourceTree = ""; }; - D03E45AE2305D1F10049C28B /* NBNumberFormat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NBNumberFormat.m; sourceTree = ""; }; - D03E45AF2305D1F10049C28B /* NBPhoneMetaData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NBPhoneMetaData.m; sourceTree = ""; }; - D03E45B02305D1F10049C28B /* NBPhoneMetaData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NBPhoneMetaData.h; sourceTree = ""; }; - D03E45B12305D1F10049C28B /* NBAsYouTypeFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NBAsYouTypeFormatter.m; sourceTree = ""; }; - D03E45B22305D1F10049C28B /* NBMetadataCoreTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NBMetadataCoreTest.m; sourceTree = ""; }; - D03E45CE2305D32D0049C28B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - D0208ADC2306E85800A23503 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D0208ADD2306E85800A23503 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D03E45872305CE830049C28B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E45CF2305D32E0049C28B /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - D0208AB82306E84F00A23503 /* libphonenumbermac */ = { - isa = PBXGroup; - children = ( - D0208AB92306E84F00A23503 /* libphonenumbermac.h */, - D0208ABA2306E84F00A23503 /* Info.plist */, - ); - path = libphonenumbermac; - sourceTree = ""; - }; - D03E45802305CE830049C28B = { - isa = PBXGroup; - children = ( - D03E458E2305CE840049C28B /* Info.plist */, - D0208AB82306E84F00A23503 /* libphonenumbermac */, - D03E458C2305CE840049C28B /* Sources */, - D03E458B2305CE830049C28B /* Products */, - D03E45CD2305D32D0049C28B /* Frameworks */, - ); - sourceTree = ""; - }; - D03E458B2305CE830049C28B /* Products */ = { - isa = PBXGroup; - children = ( - D03E458A2305CE830049C28B /* libphonenumber.framework */, - D0208AE52306E85800A23503 /* libphonenumbermac.framework */, - ); - name = Products; - sourceTree = ""; - }; - D03E458C2305CE840049C28B /* Sources */ = { - isa = PBXGroup; - children = ( - D03E459D2305D1EF0049C28B /* NBAsYouTypeFormatter.h */, - D03E45B12305D1F10049C28B /* NBAsYouTypeFormatter.m */, - D03E459E2305D1EF0049C28B /* NBMetadataCore.h */, - D03E45A92305D1F00049C28B /* NBMetadataCore.m */, - D03E45A02305D1EF0049C28B /* NBMetadataCoreMapper.h */, - D03E45A42305D1F00049C28B /* NBMetadataCoreMapper.m */, - D03E459B2305D1EF0049C28B /* NBMetadataCoreTest.h */, - D03E45B22305D1F10049C28B /* NBMetadataCoreTest.m */, - D03E45A82305D1F00049C28B /* NBMetadataCoreTestMapper.h */, - D03E45A32305D1F00049C28B /* NBMetadataCoreTestMapper.m */, - D03E459A2305D1EF0049C28B /* NBMetadataHelper.h */, - D03E45AC2305D1F10049C28B /* NBMetadataHelper.m */, - D03E45992305D1EF0049C28B /* NBNumberFormat.h */, - D03E45AE2305D1F10049C28B /* NBNumberFormat.m */, - D03E45B02305D1F10049C28B /* NBPhoneMetaData.h */, - D03E45AF2305D1F10049C28B /* NBPhoneMetaData.m */, - D03E45A22305D1EF0049C28B /* NBPhoneMetaDataGenerator.h */, - D03E45AB2305D1F10049C28B /* NBPhoneMetaDataGenerator.m */, - D03E45AA2305D1F10049C28B /* NBPhoneNumber.h */, - D03E45AD2305D1F10049C28B /* NBPhoneNumber.m */, - D03E459C2305D1EF0049C28B /* NBPhoneNumberDefines.h */, - D03E45A12305D1EF0049C28B /* NBPhoneNumberDefines.m */, - D03E45A72305D1F00049C28B /* NBPhoneNumberDesc.h */, - D03E459F2305D1EF0049C28B /* NBPhoneNumberDesc.m */, - D03E45A62305D1F00049C28B /* NBPhoneNumberUtil.h */, - D03E45A52305D1F00049C28B /* NBPhoneNumberUtil.m */, - D03E458D2305CE840049C28B /* libphonenumber.h */, - ); - path = Sources; - sourceTree = ""; - }; - D03E45CD2305D32D0049C28B /* Frameworks */ = { - isa = PBXGroup; - children = ( - D03E45CE2305D32D0049C28B /* Foundation.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - D0208ABE2306E85800A23503 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D0208AC42306E85800A23503 /* libphonenumbermac.h in Headers */, - D0208ABF2306E85800A23503 /* NBMetadataCoreTest.h in Headers */, - D0208AC02306E85800A23503 /* NBPhoneMetaDataGenerator.h in Headers */, - D0208AC12306E85800A23503 /* NBNumberFormat.h in Headers */, - D0208AC32306E85800A23503 /* NBPhoneNumberUtil.h in Headers */, - D0208AC52306E85800A23503 /* NBMetadataCoreMapper.h in Headers */, - D0208AC62306E85800A23503 /* NBAsYouTypeFormatter.h in Headers */, - D0208AC72306E85800A23503 /* NBPhoneNumber.h in Headers */, - D0208AC82306E85800A23503 /* NBPhoneNumberDefines.h in Headers */, - D0208AC92306E85800A23503 /* NBMetadataCore.h in Headers */, - D0208ACA2306E85800A23503 /* NBPhoneMetaData.h in Headers */, - D0208ACB2306E85800A23503 /* NBPhoneNumberDesc.h in Headers */, - D0208ACC2306E85800A23503 /* NBMetadataHelper.h in Headers */, - D0208ACD2306E85800A23503 /* NBMetadataCoreTestMapper.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D03E45852305CE830049C28B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E45B52305D1F20049C28B /* NBMetadataCoreTest.h in Headers */, - D03E45BC2305D1F20049C28B /* NBPhoneMetaDataGenerator.h in Headers */, - D03E45B32305D1F20049C28B /* NBNumberFormat.h in Headers */, - D03E458F2305CE840049C28B /* libphonenumber.h in Headers */, - D03E45C02305D1F20049C28B /* NBPhoneNumberUtil.h in Headers */, - D0208ABB2306E84F00A23503 /* libphonenumbermac.h in Headers */, - D03E45BA2305D1F20049C28B /* NBMetadataCoreMapper.h in Headers */, - D03E45B72305D1F20049C28B /* NBAsYouTypeFormatter.h in Headers */, - D03E45C42305D1F20049C28B /* NBPhoneNumber.h in Headers */, - D03E45B62305D1F20049C28B /* NBPhoneNumberDefines.h in Headers */, - D03E45B82305D1F20049C28B /* NBMetadataCore.h in Headers */, - D03E45CA2305D1F20049C28B /* NBPhoneMetaData.h in Headers */, - D03E45C12305D1F20049C28B /* NBPhoneNumberDesc.h in Headers */, - D03E45B42305D1F20049C28B /* NBMetadataHelper.h in Headers */, - D03E45C22305D1F20049C28B /* NBMetadataCoreTestMapper.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - D0208ABD2306E85800A23503 /* libphonenumbermac */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0208AE02306E85800A23503 /* Build configuration list for PBXNativeTarget "libphonenumbermac" */; - buildPhases = ( - D0208ABE2306E85800A23503 /* Headers */, - D0208ACE2306E85800A23503 /* Sources */, - D0208ADC2306E85800A23503 /* Frameworks */, - D0208ADE2306E85800A23503 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = libphonenumbermac; - productName = "libphonenumber-iOS"; - productReference = D0208AE52306E85800A23503 /* libphonenumbermac.framework */; - productType = "com.apple.product-type.framework"; - }; - D03E45892305CE830049C28B /* libphonenumber */ = { - isa = PBXNativeTarget; - buildConfigurationList = D03E45922305CE840049C28B /* Build configuration list for PBXNativeTarget "libphonenumber" */; - buildPhases = ( - D03E45852305CE830049C28B /* Headers */, - D03E45862305CE830049C28B /* Sources */, - D03E45872305CE830049C28B /* Frameworks */, - D03E45882305CE830049C28B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = libphonenumber; - productName = "libphonenumber-iOS"; - productReference = D03E458A2305CE830049C28B /* libphonenumber.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D03E45812305CE830049C28B /* Project object */ = { - isa = PBXProject; - attributes = { - DefaultBuildSystemTypeForWorkspace = Latest; - LastUpgradeCheck = 1030; - ORGANIZATIONNAME = "Telegram Messenger LLP"; - TargetAttributes = { - D03E45892305CE830049C28B = { - CreatedOnToolsVersion = 10.3; - }; - }; - }; - buildConfigurationList = D03E45842305CE830049C28B /* Build configuration list for PBXProject "libphonenumber_Xcode" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = D03E45802305CE830049C28B; - productRefGroup = D03E458B2305CE830049C28B /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - D03E45892305CE830049C28B /* libphonenumber */, - D0208ABD2306E85800A23503 /* libphonenumbermac */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - D0208ADE2306E85800A23503 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D03E45882305CE830049C28B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - D0208ACE2306E85800A23503 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D0208ACF2306E85800A23503 /* NBMetadataCoreMapper.m in Sources */, - D0208AD02306E85800A23503 /* NBMetadataCoreTestMapper.m in Sources */, - D0208AD12306E85800A23503 /* NBPhoneNumberDefines.m in Sources */, - D0208AD22306E85800A23503 /* NBNumberFormat.m in Sources */, - D0208AD32306E85800A23503 /* NBAsYouTypeFormatter.m in Sources */, - D0208AD42306E85800A23503 /* NBMetadataCore.m in Sources */, - D0208AD52306E85800A23503 /* NBPhoneNumberDesc.m in Sources */, - D0208AD62306E85800A23503 /* NBPhoneNumber.m in Sources */, - D0208AD72306E85800A23503 /* NBPhoneMetaData.m in Sources */, - D0208AD82306E85800A23503 /* NBMetadataCoreTest.m in Sources */, - D0208AD92306E85800A23503 /* NBPhoneMetaDataGenerator.m in Sources */, - D0208ADA2306E85800A23503 /* NBMetadataHelper.m in Sources */, - D0208ADB2306E85800A23503 /* NBPhoneNumberUtil.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D03E45862305CE830049C28B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E45BE2305D1F20049C28B /* NBMetadataCoreMapper.m in Sources */, - D03E45BD2305D1F20049C28B /* NBMetadataCoreTestMapper.m in Sources */, - D03E45BB2305D1F20049C28B /* NBPhoneNumberDefines.m in Sources */, - D03E45C82305D1F20049C28B /* NBNumberFormat.m in Sources */, - D03E45CB2305D1F20049C28B /* NBAsYouTypeFormatter.m in Sources */, - D03E45C32305D1F20049C28B /* NBMetadataCore.m in Sources */, - D03E45B92305D1F20049C28B /* NBPhoneNumberDesc.m in Sources */, - D03E45C72305D1F20049C28B /* NBPhoneNumber.m in Sources */, - D03E45C92305D1F20049C28B /* NBPhoneMetaData.m in Sources */, - D03E45CC2305D1F20049C28B /* NBMetadataCoreTest.m in Sources */, - D03E45C52305D1F20049C28B /* NBPhoneMetaDataGenerator.m in Sources */, - D03E45C62305D1F20049C28B /* NBMetadataHelper.m in Sources */, - D03E45BF2305D1F20049C28B /* NBPhoneNumberUtil.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - D0208AE12306E85800A23503 /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = libphonenumbermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumbermac; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugAppStoreLLC; - }; - D0208AE22306E85800A23503 /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = libphonenumbermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumbermac; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugHockeyapp; - }; - D0208AE32306E85800A23503 /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = libphonenumbermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumbermac; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseAppStoreLLC; - }; - D0208AE42306E85800A23503 /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = libphonenumbermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumbermac; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseHockeyappInternal; - }; - D0208AE72306E86800A23503 /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStore; - }; - D0208AE82306E86800A23503 /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumber; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugAppStore; - }; - D0208AE92306E86800A23503 /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = libphonenumbermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumbermac; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugAppStore; - }; - D0208AEA2306E87100A23503 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = HockeyappMacAlpha; - }; - D0208AEB2306E87100A23503 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumber; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = HockeyappMacAlpha; - }; - D0208AEC2306E87100A23503 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = libphonenumbermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumbermac; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = HockeyappMacAlpha; - }; - D0208AED2306E87700A23503 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStore; - }; - D0208AEE2306E87700A23503 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumber; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseAppStore; - }; - D0208AEF2306E87700A23503 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = libphonenumbermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumbermac; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseAppStore; - }; - D0208AF02306E87E00A23503 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyapp; - }; - D0208AF12306E87E00A23503 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumber; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseHockeyapp; - }; - D0208AF22306E87E00A23503 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = libphonenumbermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumbermac; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseHockeyapp; - }; - D03E45902305CE840049C28B /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStoreLLC; - }; - D03E45912305CE840049C28B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStoreLLC; - }; - D03E45932305CE840049C28B /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumber; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugAppStoreLLC; - }; - D03E45942305CE840049C28B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumber; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseAppStoreLLC; - }; - D03E45952305CE9A0049C28B /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugHockeyapp; - }; - D03E45962305CE9A0049C28B /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumber; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugHockeyapp; - }; - D03E45972305CEA30049C28B /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyappInternal; - }; - D03E45982305CEA30049C28B /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.libphonenumber; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseHockeyappInternal; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - D0208AE02306E85800A23503 /* Build configuration list for PBXNativeTarget "libphonenumbermac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0208AE12306E85800A23503 /* DebugAppStoreLLC */, - D0208AE22306E85800A23503 /* DebugHockeyapp */, - D0208AEC2306E87100A23503 /* HockeyappMacAlpha */, - D0208AE92306E86800A23503 /* DebugAppStore */, - D0208AE32306E85800A23503 /* ReleaseAppStoreLLC */, - D0208AEF2306E87700A23503 /* ReleaseAppStore */, - D0208AF22306E87E00A23503 /* ReleaseHockeyapp */, - D0208AE42306E85800A23503 /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseAppStoreLLC; - }; - D03E45842305CE830049C28B /* Build configuration list for PBXProject "libphonenumber_Xcode" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D03E45902305CE840049C28B /* DebugAppStoreLLC */, - D03E45952305CE9A0049C28B /* DebugHockeyapp */, - D0208AEA2306E87100A23503 /* HockeyappMacAlpha */, - D0208AE72306E86800A23503 /* DebugAppStore */, - D03E45912305CE840049C28B /* ReleaseAppStoreLLC */, - D0208AED2306E87700A23503 /* ReleaseAppStore */, - D0208AF02306E87E00A23503 /* ReleaseHockeyapp */, - D03E45972305CEA30049C28B /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseAppStoreLLC; - }; - D03E45922305CE840049C28B /* Build configuration list for PBXNativeTarget "libphonenumber" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D03E45932305CE840049C28B /* DebugAppStoreLLC */, - D03E45962305CE9A0049C28B /* DebugHockeyapp */, - D0208AEB2306E87100A23503 /* HockeyappMacAlpha */, - D0208AE82306E86800A23503 /* DebugAppStore */, - D03E45942305CE840049C28B /* ReleaseAppStoreLLC */, - D0208AEE2306E87700A23503 /* ReleaseAppStore */, - D0208AF12306E87E00A23503 /* ReleaseHockeyapp */, - D03E45982305CEA30049C28B /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseAppStoreLLC; - }; -/* End XCConfigurationList section */ - }; - rootObject = D03E45812305CE830049C28B /* Project object */; -} diff --git a/submodules/libphonenumber/libphonenumbermac/Info.plist b/submodules/libphonenumber/libphonenumbermac/Info.plist deleted file mode 100644 index 5371a6e108..0000000000 --- a/submodules/libphonenumber/libphonenumbermac/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSHumanReadableCopyright - Copyright © 2019 Telegram Messenger LLP. All rights reserved. - - diff --git a/submodules/libphonenumber/libphonenumbermac/libphonenumbermac.h b/submodules/libphonenumber/libphonenumbermac/libphonenumbermac.h deleted file mode 100644 index 520bbb7cd2..0000000000 --- a/submodules/libphonenumber/libphonenumbermac/libphonenumbermac.h +++ /dev/null @@ -1,12 +0,0 @@ -#import - -//! Project version number for libphonenumber_Mac. -FOUNDATION_EXPORT double libphonenumbermac_VersionNumber; - -//! Project version string for libphonenumber_Mac. -FOUNDATION_EXPORT const unsigned char libphonenumbermac_VersionString[]; - -#import -#import -#import -#import diff --git a/submodules/sqlcipher/Sources/sqlcipher.h b/submodules/sqlcipher/Sources/sqlcipher.h index 7122be0e8d..87ced27dda 100644 --- a/submodules/sqlcipher/Sources/sqlcipher.h +++ b/submodules/sqlcipher/Sources/sqlcipher.h @@ -1,4 +1,4 @@ -#import +#import //! Project version number for sqlcipher. FOUNDATION_EXPORT double sqlcipherVersionNumber; diff --git a/submodules/sqlcipher/Sources/sqlite3.c b/submodules/sqlcipher/Sources/sqlite3.c index 6d86b973f0..7b8d063583 100644 --- a/submodules/sqlcipher/Sources/sqlite3.c +++ b/submodules/sqlcipher/Sources/sqlite3.c @@ -17,11 +17,7 @@ ** language. The code for the "sqlite3" command-line shell is also in a ** separate file. This file contains only code for the core SQLite library. */ -#if TARGET_OS_IOS #include -#else -#include -#endif #define SQLITE_CORE 1 #define SQLITE_AMALGAMATION 1 #ifndef SQLITE_PRIVATE diff --git a/submodules/sqlcipher/Sources/sqlite3.h b/submodules/sqlcipher/Sources/sqlite3.h index 66160caed5..b03bee037a 100644 --- a/submodules/sqlcipher/Sources/sqlite3.h +++ b/submodules/sqlcipher/Sources/sqlite3.h @@ -34,11 +34,7 @@ #define SQLITE3_H #include /* Needed for the definition of va_list */ -#if TARGET_OS_OSX -#include -#else #include -#endif /* diff --git a/submodules/sqlcipher/Sources/sqlite3ext.h b/submodules/sqlcipher/Sources/sqlite3ext.h index 48273b4dc6..1a611913cf 100644 --- a/submodules/sqlcipher/Sources/sqlite3ext.h +++ b/submodules/sqlcipher/Sources/sqlite3ext.h @@ -18,11 +18,7 @@ #ifndef SQLITE3EXT_H #define SQLITE3EXT_H -#if TARGET_OS_OSX -#include -#else #include -#endif /* ** The following structure holds pointers to all of the SQLite API diff --git a/submodules/sqlcipher/sqlcipher_Xcode.xcodeproj/project.pbxproj b/submodules/sqlcipher/sqlcipher_Xcode.xcodeproj/project.pbxproj deleted file mode 100644 index 9f8501a6de..0000000000 --- a/submodules/sqlcipher/sqlcipher_Xcode.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1725 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - D03E45402305C6E40049C28B /* sqlcipher.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E453E2305C6E40049C28B /* sqlcipher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E45502305C7600049C28B /* SQLite-Bridging.m in Sources */ = {isa = PBXBuildFile; fileRef = D03E454A2305C75F0049C28B /* SQLite-Bridging.m */; }; - D03E45512305C7600049C28B /* sqlite3.c in Sources */ = {isa = PBXBuildFile; fileRef = D03E454B2305C75F0049C28B /* sqlite3.c */; }; - D03E45522305C7600049C28B /* sqlite3.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E454C2305C75F0049C28B /* sqlite3.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E45532305C7600049C28B /* sqlite3ext.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E454D2305C7600049C28B /* sqlite3ext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E45542305C7600049C28B /* SQLite-Bridging.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E454E2305C7600049C28B /* SQLite-Bridging.h */; }; - D03E45552305C7600049C28B /* fts3_tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E454F2305C7600049C28B /* fts3_tokenizer.h */; }; - D03E45592305C8090049C28B /* sqlcipher_config.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45582305C8090049C28B /* sqlcipher_config.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E461A2306DF740049C28B /* sqlciphermac.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E46182306DF740049C28B /* sqlciphermac.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E46202306DF830049C28B /* sqlcipher_config.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E45582305C8090049C28B /* sqlcipher_config.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E46212306DF8A0049C28B /* fts3_tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E454F2305C7600049C28B /* fts3_tokenizer.h */; }; - D03E46222306DF8D0049C28B /* SQLite-Bridging.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E454E2305C7600049C28B /* SQLite-Bridging.h */; }; - D03E46232306DF920049C28B /* sqlite3.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E454C2305C75F0049C28B /* sqlite3.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E46252306DF9A0049C28B /* sqlite3ext.h in Headers */ = {isa = PBXBuildFile; fileRef = D03E454D2305C7600049C28B /* sqlite3ext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E46262306DFA00049C28B /* sqlite3.c in Sources */ = {isa = PBXBuildFile; fileRef = D03E454B2305C75F0049C28B /* sqlite3.c */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - D03E453B2305C6E40049C28B /* sqlcipher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = sqlcipher.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D03E453E2305C6E40049C28B /* sqlcipher.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sqlcipher.h; sourceTree = ""; }; - D03E453F2305C6E40049C28B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D03E454A2305C75F0049C28B /* SQLite-Bridging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SQLite-Bridging.m"; sourceTree = ""; }; - D03E454B2305C75F0049C28B /* sqlite3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sqlite3.c; sourceTree = ""; }; - D03E454C2305C75F0049C28B /* sqlite3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sqlite3.h; sourceTree = ""; }; - D03E454D2305C7600049C28B /* sqlite3ext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sqlite3ext.h; sourceTree = ""; }; - D03E454E2305C7600049C28B /* SQLite-Bridging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SQLite-Bridging.h"; sourceTree = ""; }; - D03E454F2305C7600049C28B /* fts3_tokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fts3_tokenizer.h; sourceTree = ""; }; - D03E45582305C8090049C28B /* sqlcipher_config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sqlcipher_config.h; sourceTree = ""; }; - D03E46162306DF740049C28B /* sqlciphermac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = sqlciphermac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D03E46182306DF740049C28B /* sqlciphermac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sqlciphermac.h; sourceTree = ""; }; - D03E46192306DF740049C28B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - D03E45382305C6E40049C28B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D03E46132306DF740049C28B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - D03E45312305C6E40049C28B = { - isa = PBXGroup; - children = ( - D03E453F2305C6E40049C28B /* Info.plist */, - D03E453D2305C6E40049C28B /* Sources */, - D03E46172306DF740049C28B /* sqlciphermac */, - D03E453C2305C6E40049C28B /* Products */, - ); - sourceTree = ""; - }; - D03E453C2305C6E40049C28B /* Products */ = { - isa = PBXGroup; - children = ( - D03E453B2305C6E40049C28B /* sqlcipher.framework */, - D03E46162306DF740049C28B /* sqlciphermac.framework */, - ); - name = Products; - sourceTree = ""; - }; - D03E453D2305C6E40049C28B /* Sources */ = { - isa = PBXGroup; - children = ( - D03E45582305C8090049C28B /* sqlcipher_config.h */, - D03E454F2305C7600049C28B /* fts3_tokenizer.h */, - D03E454E2305C7600049C28B /* SQLite-Bridging.h */, - D03E454A2305C75F0049C28B /* SQLite-Bridging.m */, - D03E454B2305C75F0049C28B /* sqlite3.c */, - D03E454C2305C75F0049C28B /* sqlite3.h */, - D03E454D2305C7600049C28B /* sqlite3ext.h */, - D03E453E2305C6E40049C28B /* sqlcipher.h */, - ); - path = Sources; - sourceTree = ""; - }; - D03E46172306DF740049C28B /* sqlciphermac */ = { - isa = PBXGroup; - children = ( - D03E46182306DF740049C28B /* sqlciphermac.h */, - D03E46192306DF740049C28B /* Info.plist */, - ); - path = sqlciphermac; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - D03E45362305C6E40049C28B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E45552305C7600049C28B /* fts3_tokenizer.h in Headers */, - D03E45542305C7600049C28B /* SQLite-Bridging.h in Headers */, - D03E45592305C8090049C28B /* sqlcipher_config.h in Headers */, - D03E45522305C7600049C28B /* sqlite3.h in Headers */, - D03E45402305C6E40049C28B /* sqlcipher.h in Headers */, - D03E45532305C7600049C28B /* sqlite3ext.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D03E46112306DF740049C28B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E46222306DF8D0049C28B /* SQLite-Bridging.h in Headers */, - D03E46252306DF9A0049C28B /* sqlite3ext.h in Headers */, - D03E46212306DF8A0049C28B /* fts3_tokenizer.h in Headers */, - D03E46202306DF830049C28B /* sqlcipher_config.h in Headers */, - D03E461A2306DF740049C28B /* sqlciphermac.h in Headers */, - D03E46232306DF920049C28B /* sqlite3.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - D03E453A2305C6E40049C28B /* sqlcipher */ = { - isa = PBXNativeTarget; - buildConfigurationList = D03E45432305C6E40049C28B /* Build configuration list for PBXNativeTarget "sqlcipher" */; - buildPhases = ( - D03E45362305C6E40049C28B /* Headers */, - D03E45372305C6E40049C28B /* Sources */, - D03E45382305C6E40049C28B /* Frameworks */, - D03E45392305C6E40049C28B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = sqlcipher; - productName = sqlcipher; - productReference = D03E453B2305C6E40049C28B /* sqlcipher.framework */; - productType = "com.apple.product-type.framework"; - }; - D03E46152306DF740049C28B /* sqlciphermac */ = { - isa = PBXNativeTarget; - buildConfigurationList = D03E461F2306DF740049C28B /* Build configuration list for PBXNativeTarget "sqlciphermac" */; - buildPhases = ( - D03E46112306DF740049C28B /* Headers */, - D03E46122306DF740049C28B /* Sources */, - D03E46132306DF740049C28B /* Frameworks */, - D03E46142306DF740049C28B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = sqlciphermac; - productName = sqlciphermac; - productReference = D03E46162306DF740049C28B /* sqlciphermac.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D03E45322305C6E40049C28B /* Project object */ = { - isa = PBXProject; - attributes = { - DefaultBuildSystemTypeForWorkspace = Latest; - LastUpgradeCheck = 1030; - ORGANIZATIONNAME = "Telegram Messenger LLP"; - TargetAttributes = { - D03E453A2305C6E40049C28B = { - CreatedOnToolsVersion = 10.3; - }; - D03E46152306DF740049C28B = { - CreatedOnToolsVersion = 10.3; - }; - }; - }; - buildConfigurationList = D03E45352305C6E40049C28B /* Build configuration list for PBXProject "sqlcipher_Xcode" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = D03E45312305C6E40049C28B; - productRefGroup = D03E453C2305C6E40049C28B /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - D03E453A2305C6E40049C28B /* sqlcipher */, - D03E46152306DF740049C28B /* sqlciphermac */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - D03E45392305C6E40049C28B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D03E46142306DF740049C28B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - D03E45372305C6E40049C28B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E45502305C7600049C28B /* SQLite-Bridging.m in Sources */, - D03E45512305C7600049C28B /* sqlite3.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D03E46122306DF740049C28B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D03E46262306DFA00049C28B /* sqlite3.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - D0208AA02306E7B400A23503 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = HockeyappMacAlpha; - }; - D0208AA12306E7B400A23503 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlcipher; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = HockeyappMacAlpha; - }; - D0208AA22306E7B400A23503 /* HockeyappMacAlpha */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = sqlciphermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlciphermac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = HockeyappMacAlpha; - }; - D0208AA32306E7CA00A23503 /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStore; - }; - D0208AA42306E7CA00A23503 /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlcipher; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugAppStore; - }; - D0208AA52306E7CA00A23503 /* DebugAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = sqlciphermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlciphermac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStore; - }; - D0208AA62306E7D400A23503 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStore; - }; - D0208AA72306E7D400A23503 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlcipher; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseAppStore; - }; - D0208AA82306E7D400A23503 /* ReleaseAppStore */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = sqlciphermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlciphermac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStore; - }; - D0208AA92306E7D900A23503 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyapp; - }; - D0208AAA2306E7D900A23503 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlcipher; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseHockeyapp; - }; - D0208AAB2306E7D900A23503 /* ReleaseHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = sqlciphermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlciphermac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyapp; - }; - D03E45412305C6E40049C28B /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStoreLLC; - }; - D03E45422305C6E40049C28B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStoreLLC; - }; - D03E45442305C6E40049C28B /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlcipher; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugAppStoreLLC; - }; - D03E45452305C6E40049C28B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlcipher; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseAppStoreLLC; - }; - D03E45462305C7090049C28B /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugHockeyapp; - }; - D03E45472305C7090049C28B /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlcipher; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = DebugHockeyapp; - }; - D03E45482305C7130049C28B /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyappInternal; - }; - D03E45492305C7130049C28B /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlcipher; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = ReleaseHockeyappInternal; - }; - D03E461B2306DF740049C28B /* DebugAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = sqlciphermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlciphermac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugAppStoreLLC; - }; - D03E461C2306DF740049C28B /* DebugHockeyapp */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = sqlciphermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlciphermac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugHockeyapp; - }; - D03E461D2306DF740049C28B /* ReleaseAppStoreLLC */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = sqlciphermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlciphermac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseAppStoreLLC; - }; - D03E461E2306DF740049C28B /* ReleaseHockeyappInternal */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Manual; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = sqlciphermac/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - OTHER_CFLAGS = ( - "-DSQLITE_HAS_CODEC=1", - "-DSQLCIPHER_CRYPTO_CC=1", - "-DSQLITE_ENABLE_FTS5", - "-DSQLITE_DEFAULT_MEMSTATUS=0", - "-DNDEBUG", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.telegram.sqlciphermac; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseHockeyappInternal; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - D03E45352305C6E40049C28B /* Build configuration list for PBXProject "sqlcipher_Xcode" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D03E45412305C6E40049C28B /* DebugAppStoreLLC */, - D03E45462305C7090049C28B /* DebugHockeyapp */, - D0208AA02306E7B400A23503 /* HockeyappMacAlpha */, - D0208AA32306E7CA00A23503 /* DebugAppStore */, - D03E45422305C6E40049C28B /* ReleaseAppStoreLLC */, - D0208AA62306E7D400A23503 /* ReleaseAppStore */, - D0208AA92306E7D900A23503 /* ReleaseHockeyapp */, - D03E45482305C7130049C28B /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseAppStoreLLC; - }; - D03E45432305C6E40049C28B /* Build configuration list for PBXNativeTarget "sqlcipher" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D03E45442305C6E40049C28B /* DebugAppStoreLLC */, - D03E45472305C7090049C28B /* DebugHockeyapp */, - D0208AA12306E7B400A23503 /* HockeyappMacAlpha */, - D0208AA42306E7CA00A23503 /* DebugAppStore */, - D03E45452305C6E40049C28B /* ReleaseAppStoreLLC */, - D0208AA72306E7D400A23503 /* ReleaseAppStore */, - D0208AAA2306E7D900A23503 /* ReleaseHockeyapp */, - D03E45492305C7130049C28B /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseAppStoreLLC; - }; - D03E461F2306DF740049C28B /* Build configuration list for PBXNativeTarget "sqlciphermac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D03E461B2306DF740049C28B /* DebugAppStoreLLC */, - D03E461C2306DF740049C28B /* DebugHockeyapp */, - D0208AA22306E7B400A23503 /* HockeyappMacAlpha */, - D0208AA52306E7CA00A23503 /* DebugAppStore */, - D03E461D2306DF740049C28B /* ReleaseAppStoreLLC */, - D0208AA82306E7D400A23503 /* ReleaseAppStore */, - D0208AAB2306E7D900A23503 /* ReleaseHockeyapp */, - D03E461E2306DF740049C28B /* ReleaseHockeyappInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = ReleaseAppStoreLLC; - }; -/* End XCConfigurationList section */ - }; - rootObject = D03E45322305C6E40049C28B /* Project object */; -} diff --git a/submodules/sqlcipher/sqlciphermac/Info.plist b/submodules/sqlcipher/sqlciphermac/Info.plist deleted file mode 100644 index 5371a6e108..0000000000 --- a/submodules/sqlcipher/sqlciphermac/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSHumanReadableCopyright - Copyright © 2019 Telegram Messenger LLP. All rights reserved. - - diff --git a/submodules/sqlcipher/sqlciphermac/sqlciphermac.h b/submodules/sqlcipher/sqlciphermac/sqlciphermac.h deleted file mode 100644 index bdf78e5f12..0000000000 --- a/submodules/sqlcipher/sqlciphermac/sqlciphermac.h +++ /dev/null @@ -1,13 +0,0 @@ -#import - -//! Project version number for sqlciphermac. -FOUNDATION_EXPORT double sqlciphermacVersionNumber; - -//! Project version string for sqlciphermac. -FOUNDATION_EXPORT const unsigned char sqlciphermacVersionString[]; - -#import -#import -#import - - diff --git a/submodules/ton/tonlib-src/CMakeLists.txt b/submodules/ton/tonlib-src/CMakeLists.txt index 3727df784f..dd1dcd610f 100644 --- a/submodules/ton/tonlib-src/CMakeLists.txt +++ b/submodules/ton/tonlib-src/CMakeLists.txt @@ -9,7 +9,7 @@ get_filename_component(TON_REAL_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" REALPAT get_filename_component(TON_REAL_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}" REALPATH) if (TON_REAL_BINARY_DIR STREQUAL TON_REAL_SOURCE_DIR) - message(" Out-of-source build should be used to build TDLib.") + message(" Out-of-source build should be used to build TON.") message(" You need to remove the files already created by CMake and") message(" rerun CMake from a new directory:") message(" rm -rf CMakeFiles CMakeCache.txt") @@ -341,7 +341,7 @@ if (NOT CMAKE_CROSSCOMPILING) if (TDUTILS_MIME_TYPE) set(TDMIME_AUTO tdmime_auto) endif() - add_custom_target(prepare_cross_compiling DEPENDS tl_generate_common tlb_generate_block ${TDMIME_AUTO}) + add_custom_target(prepare_cross_compiling DEPENDS tl_generate_common tlb_generate_block gen_fif ${TDMIME_AUTO}) endif() #TESTS diff --git a/submodules/ton/tonlib-src/crypto/CMakeLists.txt b/submodules/ton/tonlib-src/crypto/CMakeLists.txt index f2cb5cbb93..10977b44b3 100644 --- a/submodules/ton/tonlib-src/crypto/CMakeLists.txt +++ b/submodules/ton/tonlib-src/crypto/CMakeLists.txt @@ -207,6 +207,7 @@ set(SMC_ENVELOPE_SOURCE smc-envelope/TestGiver.cpp smc-envelope/TestWallet.cpp smc-envelope/Wallet.cpp + smc-envelope/WalletV3.cpp smc-envelope/GenericAccount.h smc-envelope/MultisigWallet.h @@ -215,6 +216,7 @@ set(SMC_ENVELOPE_SOURCE smc-envelope/TestGiver.h smc-envelope/TestWallet.h smc-envelope/Wallet.h + smc-envelope/WalletV3.h ) set(ED25519_TEST_SOURCE @@ -350,6 +352,7 @@ if (NOT CMAKE_CROSSCOMPILING) GenFif(DEST smartcont/auto/config-code SOURCE smartcont/config-code.fc NAME config) GenFif(DEST smartcont/auto/wallet-code SOURCE smartcont/wallet-code.fc NAME wallet) + GenFif(DEST smartcont/auto/wallet3-code SOURCE smartcont/wallet3-code.fc NAME wallet3) GenFif(DEST smartcont/auto/simple-wallet-code SOURCE smartcont/simple-wallet-code.fc NAME simple-wallet) GenFif(DEST smartcont/auto/highload-wallet-code SOURCE smartcont/highload-wallet-code.fc NAME highload-wallet) GenFif(DEST smartcont/auto/highload-wallet-v2-code SOURCE smartcont/highload-wallet-v2-code.fc NAME highoad-wallet-v2) diff --git a/submodules/ton/tonlib-src/crypto/block/block-auto.cpp b/submodules/ton/tonlib-src/crypto/block/block-auto.cpp index 98ca0888bb..d3d666fb75 100644 --- a/submodules/ton/tonlib-src/crypto/block/block-auto.cpp +++ b/submodules/ton/tonlib-src/crypto/block/block-auto.cpp @@ -13514,34 +13514,80 @@ const ValidatorDescr t_ValidatorDescr; // // code for type `ValidatorSet` // -constexpr unsigned char ValidatorSet::cons_tag[1]; +constexpr unsigned char ValidatorSet::cons_tag[2]; + +int ValidatorSet::get_tag(const vm::CellSlice& cs) const { + switch (cs.bselect(6, 0x30)) { + case 0: + return cs.bit_at(6) ? validators_ext : validators; + default: + return -1; + } +} int ValidatorSet::check_tag(const vm::CellSlice& cs) const { - return cs.prefetch_ulong(8) == 17 ? validators : -1; + switch (get_tag(cs)) { + case validators: + return cs.prefetch_ulong(8) == 17 ? validators : -1; + case validators_ext: + return cs.prefetch_ulong(8) == 18 ? validators_ext : -1; + } + return -1; } bool ValidatorSet::skip(vm::CellSlice& cs) const { - int total, main; - return cs.advance(72) - && cs.fetch_uint_to(16, total) - && cs.fetch_uint_to(16, main) - && main <= total - && 1 <= main - && t_Hashmap_16_ValidatorDescr.skip(cs); + switch (get_tag(cs)) { + case validators: { + int total, main; + return cs.advance(72) + && cs.fetch_uint_to(16, total) + && cs.fetch_uint_to(16, main) + && main <= total + && 1 <= main + && t_Hashmap_16_ValidatorDescr.skip(cs); + } + case validators_ext: { + int total, main; + return cs.advance(72) + && cs.fetch_uint_to(16, total) + && cs.fetch_uint_to(16, main) + && main <= total + && 1 <= main + && cs.advance(64) + && t_HashmapE_16_ValidatorDescr.skip(cs); + } + } + return false; } bool ValidatorSet::validate_skip(vm::CellSlice& cs, bool weak) const { - int total, main; - return cs.fetch_ulong(8) == 17 - && cs.advance(64) - && cs.fetch_uint_to(16, total) - && cs.fetch_uint_to(16, main) - && main <= total - && 1 <= main - && t_Hashmap_16_ValidatorDescr.validate_skip(cs, weak); + switch (get_tag(cs)) { + case validators: { + int total, main; + return cs.fetch_ulong(8) == 17 + && cs.advance(64) + && cs.fetch_uint_to(16, total) + && cs.fetch_uint_to(16, main) + && main <= total + && 1 <= main + && t_Hashmap_16_ValidatorDescr.validate_skip(cs, weak); + } + case validators_ext: { + int total, main; + return cs.fetch_ulong(8) == 18 + && cs.advance(64) + && cs.fetch_uint_to(16, total) + && cs.fetch_uint_to(16, main) + && main <= total + && 1 <= main + && cs.advance(64) + && t_HashmapE_16_ValidatorDescr.validate_skip(cs, weak); + } + } + return false; } -bool ValidatorSet::unpack(vm::CellSlice& cs, ValidatorSet::Record& data) const { +bool ValidatorSet::unpack(vm::CellSlice& cs, ValidatorSet::Record_validators& data) const { return cs.fetch_ulong(8) == 17 && cs.fetch_uint_to(32, data.utime_since) && cs.fetch_uint_to(32, data.utime_until) @@ -13552,13 +13598,31 @@ bool ValidatorSet::unpack(vm::CellSlice& cs, ValidatorSet::Record& data) const { && t_Hashmap_16_ValidatorDescr.fetch_to(cs, data.list); } -bool ValidatorSet::cell_unpack(Ref cell_ref, ValidatorSet::Record& data) const { +bool ValidatorSet::cell_unpack(Ref cell_ref, ValidatorSet::Record_validators& data) const { if (cell_ref.is_null()) { return false; } auto cs = load_cell_slice(std::move(cell_ref)); return unpack(cs, data) && cs.empty_ext(); } -bool ValidatorSet::pack(vm::CellBuilder& cb, const ValidatorSet::Record& data) const { +bool ValidatorSet::unpack(vm::CellSlice& cs, ValidatorSet::Record_validators_ext& data) const { + return cs.fetch_ulong(8) == 18 + && cs.fetch_uint_to(32, data.utime_since) + && cs.fetch_uint_to(32, data.utime_until) + && cs.fetch_uint_to(16, data.total) + && cs.fetch_uint_to(16, data.main) + && data.main <= data.total + && 1 <= data.main + && cs.fetch_uint_to(64, data.total_weight) + && t_HashmapE_16_ValidatorDescr.fetch_to(cs, data.list); +} + +bool ValidatorSet::cell_unpack(Ref cell_ref, ValidatorSet::Record_validators_ext& data) const { + if (cell_ref.is_null()) { return false; } + auto cs = load_cell_slice(std::move(cell_ref)); + return unpack(cs, data) && cs.empty_ext(); +} + +bool ValidatorSet::pack(vm::CellBuilder& cb, const ValidatorSet::Record_validators& data) const { return cb.store_long_bool(17, 8) && cb.store_ulong_rchk_bool(data.utime_since, 32) && cb.store_ulong_rchk_bool(data.utime_until, 32) @@ -13569,26 +13633,65 @@ bool ValidatorSet::pack(vm::CellBuilder& cb, const ValidatorSet::Record& data) c && t_Hashmap_16_ValidatorDescr.store_from(cb, data.list); } -bool ValidatorSet::cell_pack(Ref& cell_ref, const ValidatorSet::Record& data) const { +bool ValidatorSet::cell_pack(Ref& cell_ref, const ValidatorSet::Record_validators& data) const { + vm::CellBuilder cb; + return pack(cb, data) && std::move(cb).finalize_to(cell_ref); +} + +bool ValidatorSet::pack(vm::CellBuilder& cb, const ValidatorSet::Record_validators_ext& data) const { + return cb.store_long_bool(18, 8) + && cb.store_ulong_rchk_bool(data.utime_since, 32) + && cb.store_ulong_rchk_bool(data.utime_until, 32) + && cb.store_ulong_rchk_bool(data.total, 16) + && cb.store_ulong_rchk_bool(data.main, 16) + && data.main <= data.total + && 1 <= data.main + && cb.store_ulong_rchk_bool(data.total_weight, 64) + && t_HashmapE_16_ValidatorDescr.store_from(cb, data.list); +} + +bool ValidatorSet::cell_pack(Ref& cell_ref, const ValidatorSet::Record_validators_ext& data) const { vm::CellBuilder cb; return pack(cb, data) && std::move(cb).finalize_to(cell_ref); } bool ValidatorSet::print_skip(PrettyPrinter& pp, vm::CellSlice& cs) const { - int total, main; - return cs.fetch_ulong(8) == 17 - && pp.open("validators") - && pp.fetch_uint_field(cs, 32, "utime_since") - && pp.fetch_uint_field(cs, 32, "utime_until") - && cs.fetch_uint_to(16, total) - && pp.field_int(total, "total") - && cs.fetch_uint_to(16, main) - && pp.field_int(main, "main") - && main <= total - && 1 <= main - && pp.field("list") - && t_Hashmap_16_ValidatorDescr.print_skip(pp, cs) - && pp.close(); + switch (get_tag(cs)) { + case validators: { + int total, main; + return cs.fetch_ulong(8) == 17 + && pp.open("validators") + && pp.fetch_uint_field(cs, 32, "utime_since") + && pp.fetch_uint_field(cs, 32, "utime_until") + && cs.fetch_uint_to(16, total) + && pp.field_int(total, "total") + && cs.fetch_uint_to(16, main) + && pp.field_int(main, "main") + && main <= total + && 1 <= main + && pp.field("list") + && t_Hashmap_16_ValidatorDescr.print_skip(pp, cs) + && pp.close(); + } + case validators_ext: { + int total, main; + return cs.fetch_ulong(8) == 18 + && pp.open("validators_ext") + && pp.fetch_uint_field(cs, 32, "utime_since") + && pp.fetch_uint_field(cs, 32, "utime_until") + && cs.fetch_uint_to(16, total) + && pp.field_int(total, "total") + && cs.fetch_uint_to(16, main) + && pp.field_int(main, "main") + && main <= total + && 1 <= main + && pp.fetch_uint_field(cs, 64, "total_weight") + && pp.field("list") + && t_HashmapE_16_ValidatorDescr.print_skip(pp, cs) + && pp.close(); + } + } + return pp.fail("unknown constructor for ValidatorSet"); } const ValidatorSet t_ValidatorSet; @@ -17308,6 +17411,7 @@ const HashmapE t_HashmapE_16_CryptoSignaturePair{16, t_CryptoSignaturePair}; const Maybe t_Maybe_Ref_InMsg{t_Ref_InMsg}; const RefT t_Ref_TYPE_1673{t_McBlockExtra_aux}; const Hashmap t_Hashmap_16_ValidatorDescr{16, t_ValidatorDescr}; +const HashmapE t_HashmapE_16_ValidatorDescr{16, t_ValidatorDescr}; const Hashmap t_Hashmap_32_True{32, t_True}; const NatWidth t_natwidth_12{12}; const NatWidth t_natwidth_32{32}; diff --git a/submodules/ton/tonlib-src/crypto/block/block-auto.h b/submodules/ton/tonlib-src/crypto/block/block-auto.h index 9c8c9c3724..507b5161e8 100644 --- a/submodules/ton/tonlib-src/crypto/block/block-auto.h +++ b/submodules/ton/tonlib-src/crypto/block/block-auto.h @@ -5912,35 +5912,50 @@ extern const ValidatorDescr t_ValidatorDescr; // struct ValidatorSet final : TLB_Complex { - enum { validators }; + enum { validators, validators_ext }; static constexpr int cons_len_exact = 8; - static constexpr unsigned char cons_tag[1] = { 17 }; - struct Record; + static constexpr unsigned char cons_tag[2] = { 17, 18 }; + struct Record_validators; + struct Record_validators_ext; bool skip(vm::CellSlice& cs) const override; bool validate_skip(vm::CellSlice& cs, bool weak = false) const override; - bool unpack(vm::CellSlice& cs, Record& data) const; - bool cell_unpack(Ref cell_ref, Record& data) const; - bool pack(vm::CellBuilder& cb, const Record& data) const; - bool cell_pack(Ref& cell_ref, const Record& data) const; + bool unpack(vm::CellSlice& cs, Record_validators& data) const; + bool cell_unpack(Ref cell_ref, Record_validators& data) const; + bool pack(vm::CellBuilder& cb, const Record_validators& data) const; + bool cell_pack(Ref& cell_ref, const Record_validators& data) const; + bool unpack(vm::CellSlice& cs, Record_validators_ext& data) const; + bool cell_unpack(Ref cell_ref, Record_validators_ext& data) const; + bool pack(vm::CellBuilder& cb, const Record_validators_ext& data) const; + bool cell_pack(Ref& cell_ref, const Record_validators_ext& data) const; bool print_skip(PrettyPrinter& pp, vm::CellSlice& cs) const override; std::ostream& print_type(std::ostream& os) const override { return os << "ValidatorSet"; } int check_tag(const vm::CellSlice& cs) const override; - int get_tag(const vm::CellSlice& cs) const override { - return 0; - } + int get_tag(const vm::CellSlice& cs) const override; }; -struct ValidatorSet::Record { +struct ValidatorSet::Record_validators { typedef ValidatorSet type_class; unsigned utime_since; // utime_since : uint32 unsigned utime_until; // utime_until : uint32 int total; // total : ## 16 int main; // main : ## 16 Ref list; // list : Hashmap 16 ValidatorDescr - Record() = default; - Record(unsigned _utime_since, unsigned _utime_until, int _total, int _main, Ref _list) : utime_since(_utime_since), utime_until(_utime_until), total(_total), main(_main), list(std::move(_list)) {} + Record_validators() = default; + Record_validators(unsigned _utime_since, unsigned _utime_until, int _total, int _main, Ref _list) : utime_since(_utime_since), utime_until(_utime_until), total(_total), main(_main), list(std::move(_list)) {} +}; + +struct ValidatorSet::Record_validators_ext { + typedef ValidatorSet type_class; + unsigned utime_since; // utime_since : uint32 + unsigned utime_until; // utime_until : uint32 + int total; // total : ## 16 + int main; // main : ## 16 + unsigned long long total_weight; // total_weight : uint64 + Ref list; // list : HashmapE 16 ValidatorDescr + Record_validators_ext() = default; + Record_validators_ext(unsigned _utime_since, unsigned _utime_until, int _total, int _main, unsigned long long _total_weight, Ref _list) : utime_since(_utime_since), utime_until(_utime_until), total(_total), main(_main), total_weight(_total_weight), list(std::move(_list)) {} }; extern const ValidatorSet t_ValidatorSet; @@ -7438,6 +7453,8 @@ extern const Maybe t_Maybe_Ref_InMsg; extern const RefT t_Ref_TYPE_1673; // Hashmap 16 ValidatorDescr extern const Hashmap t_Hashmap_16_ValidatorDescr; +// HashmapE 16 ValidatorDescr +extern const HashmapE t_HashmapE_16_ValidatorDescr; // Hashmap 32 True extern const Hashmap t_Hashmap_32_True; // ## 12 diff --git a/submodules/ton/tonlib-src/crypto/block/block.tlb b/submodules/ton/tonlib-src/crypto/block/block.tlb index d4bba1a182..ec91ef5755 100644 --- a/submodules/ton/tonlib-src/crypto/block/block.tlb +++ b/submodules/ton/tonlib-src/crypto/block/block.tlb @@ -551,6 +551,9 @@ validator_addr#73 public_key:SigPubKey weight:uint64 adnl_addr:bits256 = Validat validators#11 utime_since:uint32 utime_until:uint32 total:(## 16) main:(## 16) { main <= total } { main >= 1 } list:(Hashmap 16 ValidatorDescr) = ValidatorSet; +validators_ext#12 utime_since:uint32 utime_until:uint32 + total:(## 16) main:(## 16) { main <= total } { main >= 1 } + total_weight:uint64 list:(HashmapE 16 ValidatorDescr) = ValidatorSet; _ config_addr:bits256 = ConfigParam 0; _ elector_addr:bits256 = ConfigParam 1; diff --git a/submodules/ton/tonlib-src/crypto/block/mc-config.cpp b/submodules/ton/tonlib-src/crypto/block/mc-config.cpp index 2b3fdb44b0..b5959f7557 100644 --- a/submodules/ton/tonlib-src/crypto/block/mc-config.cpp +++ b/submodules/ton/tonlib-src/crypto/block/mc-config.cpp @@ -387,11 +387,25 @@ td::Result> Config::unpack_validator_set(Ref dict_root; + if (!tlb::unpack_cell(vset_root, rec)) { + gen::ValidatorSet::Record_validators rec0; + if (!tlb::unpack_cell(std::move(vset_root), rec0)) { + return td::Status::Error("validator set is invalid"); + } + rec.utime_since = rec0.utime_since; + rec.utime_until = rec0.utime_until; + rec.total = rec0.total; + rec.main = rec0.main; + dict_root = vm::Dictionary::construct_root_from(*rec0.list); + rec.total_weight = 0; + } else if (rec.total_weight) { + dict_root = rec.list->prefetch_ref(); + } else { + return td::Status::Error("validator set cannot have zero total weight"); } - vm::Dictionary dict{vm::Dictionary::construct_root_from(*rec.list), 16}; + vm::Dictionary dict{std::move(dict_root), 16}; td::BitArray<16> key_buffer; auto last = dict.get_minmax_key(key_buffer.bits(), 16, true); if (last.is_null() || (int)key_buffer.to_ulong() != rec.total - 1) { @@ -428,6 +442,9 @@ td::Result> Config::unpack_validator_set(Reflist.emplace_back(sig_pubkey.pubkey, descr.weight, ptr->total_weight, descr.adnl_addr); ptr->total_weight += descr.weight; } + if (rec.total_weight && rec.total_weight != ptr->total_weight) { + return td::Status::Error("validator set declares incorrect total weight"); + } return std::move(ptr); } @@ -517,19 +534,16 @@ td::Result> Config::get_storage_prices() const { return std::move(res); } -td::Result Config::get_gas_limits_prices(bool is_masterchain) const { +td::Result Config::do_get_gas_limits_prices(td::Ref cell, int id) { GasLimitsPrices res; - auto id = is_masterchain ? 20 : 21; - auto cell = get_config_param(id); - if (cell.is_null()) { - return td::Status::Error(PSLICE() << "configuration parameter " << id << " with gas prices is absent"); - } - auto cs = vm::load_cell_slice(std::move(cell)); + auto cs = vm::load_cell_slice(cell); block::gen::GasLimitsPrices::Record_gas_flat_pfx flat; if (tlb::unpack(cs, flat)) { cs = *flat.other; res.flat_gas_limit = flat.flat_gas_limit; res.flat_gas_price = flat.flat_gas_price; + } else { + cs = vm::load_cell_slice(cell); } auto f = [&](const auto& r, td::uint64 spec_limit) { res.gas_limit = r.gas_limit; @@ -553,6 +567,14 @@ td::Result Config::get_gas_limits_prices(bool is_masterchain) c } return res; } +td::Result Config::get_gas_limits_prices(bool is_masterchain) const { + auto id = is_masterchain ? 20 : 21; + auto cell = get_config_param(id); + if (cell.is_null()) { + return td::Status::Error(PSLICE() << "configuration parameter " << id << " with gas prices is absent"); + } + return do_get_gas_limits_prices(std::move(cell), id); +} td::Result Config::get_msg_prices(bool is_masterchain) const { auto id = is_masterchain ? 24 : 25; @@ -1071,47 +1093,47 @@ std::vector ShardConfig::get_shard_hash_ids( std::vector res; bool mcout = mc_shard_hash_.is_null() || !mc_shard_hash_->seqno(); // include masterchain as a shard if seqno > 0 bool ok = shard_hashes_dict_->check_for_each( - [&res, &mcout, mc_shard_hash_ = mc_shard_hash_, &filter](Ref cs_ref, td::ConstBitPtr key, - int n) -> bool { - int workchain = (int)key.get_int(n); - if (workchain >= 0 && !mcout) { - if (filter(ton::ShardIdFull{ton::masterchainId}, true)) { - res.emplace_back(mc_shard_hash_->blk_.id); - } - mcout = true; - } - if (!cs_ref->have_refs()) { - return false; - } - std::stack, unsigned long long>> stack; - stack.emplace(cs_ref->prefetch_ref(), ton::shardIdAll); - while (!stack.empty()) { - vm::CellSlice cs{vm::NoVm{}, std::move(stack.top().first)}; - unsigned long long shard = stack.top().second; - stack.pop(); - int t = (int)cs.fetch_ulong(1); - if (t < 0) { - return false; - } - if (!filter(ton::ShardIdFull{workchain, shard}, !t)) { - continue; - } - if (!t) { - if (!(cs.advance(4) && cs.have(32))) { + [&res, &mcout, mc_shard_hash_ = mc_shard_hash_, &filter ](Ref cs_ref, td::ConstBitPtr key, int n) + ->bool { + int workchain = (int)key.get_int(n); + if (workchain >= 0 && !mcout) { + if (filter(ton::ShardIdFull{ton::masterchainId}, true)) { + res.emplace_back(mc_shard_hash_->blk_.id); + } + mcout = true; + } + if (!cs_ref->have_refs()) { return false; } - res.emplace_back(workchain, shard, (int)cs.prefetch_ulong(32)); - continue; - } - unsigned long long delta = (td::lower_bit64(shard) >> 1); - if (!delta || cs.size_ext() != 0x20000) { - return false; - } - stack.emplace(cs.prefetch_ref(1), shard + delta); - stack.emplace(cs.prefetch_ref(0), shard - delta); - } - return true; - }, + std::stack, unsigned long long>> stack; + stack.emplace(cs_ref->prefetch_ref(), ton::shardIdAll); + while (!stack.empty()) { + vm::CellSlice cs{vm::NoVm{}, std::move(stack.top().first)}; + unsigned long long shard = stack.top().second; + stack.pop(); + int t = (int)cs.fetch_ulong(1); + if (t < 0) { + return false; + } + if (!filter(ton::ShardIdFull{workchain, shard}, !t)) { + continue; + } + if (!t) { + if (!(cs.advance(4) && cs.have(32))) { + return false; + } + res.emplace_back(workchain, shard, (int)cs.prefetch_ulong(32)); + continue; + } + unsigned long long delta = (td::lower_bit64(shard) >> 1); + if (!delta || cs.size_ext() != 0x20000) { + return false; + } + stack.emplace(cs.prefetch_ref(1), shard + delta); + stack.emplace(cs.prefetch_ref(0), shard - delta); + } + return true; + }, true); if (!ok) { return {}; @@ -1467,8 +1489,8 @@ td::Result> Config::get_special_smartcontracts(b return td::Status::Error(-666, "configuration loaded without fundamental smart contract list"); } std::vector res; - if (!special_smc_dict->check_for_each([&res, &without_config, conf_addr = config_addr.bits()]( - Ref cs_ref, td::ConstBitPtr key, int n) { + if (!special_smc_dict->check_for_each([&res, &without_config, conf_addr = config_addr.bits() ]( + Ref cs_ref, td::ConstBitPtr key, int n) { if (cs_ref->size_ext() || n != 256) { return false; } diff --git a/submodules/ton/tonlib-src/crypto/block/mc-config.h b/submodules/ton/tonlib-src/crypto/block/mc-config.h index 018a47adbe..241ae88c55 100644 --- a/submodules/ton/tonlib-src/crypto/block/mc-config.h +++ b/submodules/ton/tonlib-src/crypto/block/mc-config.h @@ -540,6 +540,7 @@ class Config { static td::Result> unpack_validator_set(Ref valset_root); td::Result> get_storage_prices() const; td::Result get_gas_limits_prices(bool is_masterchain = false) const; + static td::Result do_get_gas_limits_prices(td::Ref cell, int id); td::Result get_msg_prices(bool is_masterchain = false) const; static CatchainValidatorsConfig unpack_catchain_validators_config(Ref cell); CatchainValidatorsConfig get_catchain_validators_config() const; diff --git a/submodules/ton/tonlib-src/crypto/fift/lib/TonUtil.fif b/submodules/ton/tonlib-src/crypto/fift/lib/TonUtil.fif index 44f1ff1cfd..7f1a376bb5 100644 --- a/submodules/ton/tonlib-src/crypto/fift/lib/TonUtil.fif +++ b/submodules/ton/tonlib-src/crypto/fift/lib/TonUtil.fif @@ -139,7 +139,7 @@ recursive append-long-bytes { // ( S -- x ) parse public key { dup $len 48 <> abort"public key must be 48 characters long" - base64>B dup Blen 36 <> abort"public key must be 48 characters long" + base64url>B dup Blen 36 <> abort"public key must be 48 characters long" 34 B| 16 B>u@ over crc16 <> abort"crc16 mismatch in public key" 16 B>u@+ 0x3ee6 <> abort"invalid tag in public key" 256 B>u@ diff --git a/submodules/ton/tonlib-src/crypto/parser/symtable.cpp b/submodules/ton/tonlib-src/crypto/parser/symtable.cpp index 157b4a2b06..939bb29ca9 100644 --- a/submodules/ton/tonlib-src/crypto/parser/symtable.cpp +++ b/submodules/ton/tonlib-src/crypto/parser/symtable.cpp @@ -68,7 +68,7 @@ sym_idx_t SymTableBase::gen_lookup(std::string str, int mode, sym_idx_t idx) { if (!(mode & 1)) { return not_found; } - if (def_sym >= ((long)p * 3) / 4) { + if (def_sym >= ((long long)p * 3) / 4) { throw SymTableOverflow{def_sym}; } sym_table[h1] = std::make_unique(str, idx <= 0 ? sym_idx_t(h1) : -idx); diff --git a/submodules/ton/tonlib-src/crypto/smartcont/CreateState.fif b/submodules/ton/tonlib-src/crypto/smartcont/CreateState.fif index d3c05c00c9..ed82499b5f 100644 --- a/submodules/ton/tonlib-src/crypto/smartcont/CreateState.fif +++ b/submodules/ton/tonlib-src/crypto/smartcont/CreateState.fif @@ -1,4 +1,5 @@ "Asm.fif" include +"TonUtil.fif" include 31 -1<< constant wc_undef 0 constant wc_base @@ -187,6 +188,7 @@ dictnew constant special-dict // restricted wallet creation +"auto/wallet-code.fif" include =: WCode0 "auto/restricted-wallet-code.fif" include =: RWCode1 "auto/restricted-wallet2-code.fif" include =: RWCode2 @@ -200,7 +202,7 @@ dictnew constant special-dict 0 // ticktock 2 // mode: create register_smc - Masterchain 6 .Addr cr + Masterchain swap 6 .Addr cr } : create-wallet1 // D x t -- D' @@ -225,5 +227,18 @@ dictnew constant special-dict 0 // ticktock 2 // mode: create register_smc - Masterchain 6 .Addr cr + Masterchain swap 6 .Addr cr } : create-wallet2 + +// pubkey amount +{ over ."Key " pubkey>$ type ." -> " + WCode0 // code + // data + empty_cell // libs + 3 roll // balance + 0 // split_depth + 0 // ticktock + 2 // mode: create + register_smc + Masterchain swap 6 .Addr cr +} : create-wallet0 diff --git a/submodules/ton/tonlib-src/crypto/smartcont/auto/config-code.cpp b/submodules/ton/tonlib-src/crypto/smartcont/auto/config-code.cpp index fdc0e4fa4d..91b450367d 100644 --- a/submodules/ton/tonlib-src/crypto/smartcont/auto/config-code.cpp +++ b/submodules/ton/tonlib-src/crypto/smartcont/auto/config-code.cpp @@ -1 +1 @@ -with_tvm_code("config", "te6ccgECFQEAAjUAART/APSkE/Sg8sgLAQIBIAIDAgLHBAUCAvETFAIBzwYHAAaqglsCASAICQIBIA4PAgEgCgsCASAMDQDpAHQ0wP6QDAg+kQBpANxsBOxI8cAsZJfA+AC0x/TPyKCEE5WU1S6jj0yAdTRcfgzIG6SMH+U0NcL/+IDcAS6mzIh8AIh+CO8ArywkQLinYAkWPABghDudk9L8ATgMYIQ7nZPb/AF4BAkXwQgwAABgx6wsfKlgACU7UTQ1FAzgCD0FcjMAc8Wye1UgADM0NMHAcAR8onTH9Mf0w/TDzAgwgDyib7yiYAArHCAGMjLBVAFzxYUy27LH8s/yQH7AIAIBIBAQAgEgERIACSAQPADgAFscfgz0NcL//gjghBOQ29kcIIAxP/IyxAUy/+DHfoCE8tqEssfyz8BzxbJcPsAgAL8IYIQQ2ZQIbqbMdMf1NFAE4Ag9BWORyGCEE5Db2S6jhcx1CH7BCDHAJFbm+1DAu1TIfEGgu1T4o4iIYIQUGJLIbqVMTHT/9GOESGCEE5D7wW6kzHwBpMw8mDi4uIB4gGAArQw7UTQ1IAggCRTMfRqIG6TECNbjjgg0CDXScInjinTB9cLHwHAEfgjEr6wjhUBgCJUEET0blRTIfRuMIAkQBP0WjCTECNb4pQQNF8D4uLIzAHPFsntVIAB5IMI1xgg0x/TH9Mf+CMSufJj7UTQ1NMf0//RUUG68qEF+QFUEGP5EPKi+AAQNBLwBwKkyBLMyx/L/8ntVIA=="); +with_tvm_code("config", "te6ccgECJwEAA48AART/APSkE/Sg8sgLAQIBIAIDAgLHBAUCAvEjJAIBzQYHAAaqglsCASAICQIBIBUWAgEgCgsCASAQEQIBIAwNAgEgDg8A6QB0NMD+kAwIPpEAaQDcbATsSPHALGSXwPgAtMf0z8ighBOVlNUuo49MgHU0XH4MyBukjB/lNDXC//iA3AEupsyIfAEIfgjvAK8sJEC4p2AJFjwAYIQ7nZPS/AG4DGCEO52T2/wB+AQJF8EIMAAAYMesLHypYAAlO1E0NRQM4Ag9BXIzAHPFsntVIAApO1E0NTTH9P/IMcAkW2T9AQB4gHRgABsyBTMEssfy//0AMntVIAIBIBITAgEgFBQANzQ0wcBpu9+sPJJ0x/TH9MP0w8wIMIA8om+8omAAKxwgBjIywVQBc8WFMtuyx/LP8kB+wCAACSAQPAFgAgEgFxgCASAdHgIBIBkaAgEgGxwAWxx+DPQ1wv/+COCEE5Db2RwggDE/8jLEBTL/4Md+gITy2oSyx/LPwHPFslw+wCAAoQhghBDZlAhupwx0x/U0UATgCD0FQHgIYIQTkNvZLqOEDHUIfsE7UMC7VMB8QaC8gDgIYIQUGJLIbqVMTHT/9HgIYIQTkPvBbqTMfAI4DDyYIAEBICYAOTTB4AgsxKwwFPyqdMfAYIQjoEnirryqdP/0z8wgAgEgHyACASAhIgAfHAgcMjKAMs/y/8BzxbJ0IAANPQE0z/T/4AAZMgU9AASyz/L/wHPFoABFFsBcbCeIPkBMSGDB/QOb6ExkN+d1wv/IYMH9A5voTHyquKAArQw7UTQ1IAggCRTMfRqIG6TECNbjjgg0CDXScInjinTB9cLHwHAEfgjEr6wjhUBgCJUEET0blRTIfRuMIAkQBP0WjCTECNb4pQQNF8D4uLIzAHPFsntVIAHZIMI1xgg0x/TH9Mf+CMSufJj7UTQ1NMf0/8gxwCRbZP0BAHiAdFRUrryoSWCEFZvdGWhfrCK4Qb5AVQQdvkQ8qL4AAWkVHUEJcgUzBLLH8v/9ADJ7VT4DxA1RFXwCUMDyBTMEssfy//0AMntVICUBqgPTDyHbPNMHgCCzErDAU/Kp0x8BghCOgSeKuvKp0//TPzAJ+QFAqvkQ8qL4AAGkVHIDJ8gUzBLLH8v/9ADJ7VT4DxA1RxbwD8gUzBLLH8v/9ADJ7VQmADaAIvgzIG6SW23g0IBo1yHIAc8WyYAQ9A5voTA="); diff --git a/submodules/ton/tonlib-src/crypto/smartcont/auto/config-code.fif b/submodules/ton/tonlib-src/crypto/smartcont/auto/config-code.fif index 2fed584c31..4899527fc1 100644 --- a/submodules/ton/tonlib-src/crypto/smartcont/auto/config-code.fif +++ b/submodules/ton/tonlib-src/crypto/smartcont/auto/config-code.fif @@ -1,6 +1,8 @@ // automatically generated from `smartcont/stdlib.fc` `smartcont/config-code.fc` PROGRAM{ DECLPROC set_conf_param + DECLPROC load_data + DECLPROC store_data DECLPROC check_validator_set DECLPROC send_answer DECLPROC send_confirmation @@ -9,6 +11,12 @@ PROGRAM{ DECLPROC change_elector_code 1666 DECLMETHOD after_code_upgrade DECLPROC perform_action + DECLPROC get_validator_descr + DECLPROC unpack_validator_descr + DECLPROC create_new_entry + DECLPROC unpack_suggestion + DECLPROC pack_suggestion + DECLPROC register_vote DECLPROC recv_external DECLPROC run_ticktock set_conf_param PROC:<{ @@ -26,22 +34,54 @@ PROGRAM{ ENDC // _14 c4 POP }> + load_data PROC:<{ + // + c4 PUSH // _1 + CTOS // cs + LDREF // _6 cs + 32 LDU // _6 _8 cs + 256 LDU // cfg_dict stored_seqno public_key cs + DUP // cfg_dict stored_seqno public_key cs cs + SEMPTY // cfg_dict stored_seqno public_key cs _15 + IF:<{ // cfg_dict stored_seqno public_key cs + NEWDICT // cfg_dict stored_seqno public_key cs _16 + }>ELSE<{ // cfg_dict stored_seqno public_key cs + LDDICT // cfg_dict stored_seqno public_key _16 cs + SWAP // cfg_dict stored_seqno public_key cs _16 + }> // cfg_dict stored_seqno public_key cs vote_dict + SWAP // cfg_dict stored_seqno public_key vote_dict cs + ENDS + }> + store_data PROC:<{ + // cfg_dict stored_seqno public_key vote_dict + NEWC // cfg_dict stored_seqno public_key vote_dict _4 + s1 s4 XCHG // vote_dict stored_seqno public_key cfg_dict _4 + STREF // vote_dict stored_seqno public_key _5 + s1 s2 XCHG // vote_dict public_key stored_seqno _5 + 32 STU // vote_dict public_key _7 + 256 STU // vote_dict _9 + STDICT // _10 + ENDC // _11 + c4 POP + }> check_validator_set PROC:<{ // vset CTOS // cs 8 LDU // _4 cs SWAP // cs _4 - 17 EQINT // cs _8 - 9 THROWIFNOT + -17 ADDCONST // cs _8 + -2 PUSHINT // cs _8 _9=-2 + AND // cs _10 + 9 THROWIF 32 LDU // utime_since cs 32 LDU // utime_since utime_until cs 16 LDU // utime_since utime_until total cs - 16 LDU // utime_since utime_until total _42 _41 + 16 LDU // utime_since utime_until total _44 _43 DROP // utime_since utime_until total main DUP // utime_since utime_until total main main - 0 GTINT // utime_since utime_until total main _28 + 0 GTINT // utime_since utime_until total main _30 9 THROWIFNOT - GEQ // utime_since utime_until _31 + GEQ // utime_since utime_until _33 9 THROWIFNOT }> send_answer PROC:<{ @@ -188,7 +228,7 @@ PROGRAM{ OVER 1130778657 PUSHINT // cfg_dict public_key action cs action _4=1130778657 EQUAL // cfg_dict public_key action cs _5 - IF:<{ // cfg_dict public_key action cs + IFJMP:<{ // cfg_dict public_key action cs NIP // cfg_dict public_key cs 32 LDU // cfg_dict public_key param_index cs LDREF // cfg_dict public_key param_index param_value cs @@ -196,52 +236,139 @@ PROGRAM{ s0 s1 s3 XCHG3 32 PUSHINT // public_key param_value param_index cfg_dict _15=32 DICTISETREF // public_key cfg_dict - }>ELSE<{ // cfg_dict public_key action cs + SWAP // cfg_dict public_key + }> // cfg_dict public_key action cs + OVER + 1313042276 PUSHINT // cfg_dict public_key action cs action _17=1313042276 + EQUAL // cfg_dict public_key action cs _18 + IFJMP:<{ // cfg_dict public_key action cs + NIP // cfg_dict public_key cs + LDREF // cfg_dict public_key new_code cs + OVER // cfg_dict public_key new_code cs new_code + SETCODE + c3 PUSH // cfg_dict public_key new_code cs old_code + s0 s2 XCHG // cfg_dict public_key old_code cs new_code + c3 POP + SWAP // cfg_dict public_key cs old_code + after_code_upgrade CALLDICT + 0 THROW + }> // cfg_dict public_key action cs + OVER + 1348619041 PUSHINT // cfg_dict public_key action cs action _29=1348619041 + EQUAL // cfg_dict public_key action cs _30 + IFJMP:<{ // cfg_dict public_key action cs + NIP + NIP // cfg_dict cs + 256 LDU // cfg_dict public_key cs + ENDS + }> // cfg_dict public_key action cs + OVER + 1313074949 PUSHINT // cfg_dict public_key action cs action _35=1313074949 + EQUAL // cfg_dict public_key action cs _36 + IFJMP:<{ // cfg_dict public_key action cs + NIP // cfg_dict public_key cs + change_elector_code CALLDICT + }> // cfg_dict public_key action cs + DROP // cfg_dict public_key action + 32 THROWIF + }> + get_validator_descr PROCREF:<{ + // idx + 34 PUSHINT // idx _2=34 + CONFIGOPTPARAM // idx vset + DUP // idx vset vset + ISNULL // idx vset _4 + IFJMP:<{ // idx vset + 2DROP // + PUSHNULL // _5 + }> // idx vset + CTOS // idx cs + 104 PUSHINT // idx cs _17 + SDSKIPFIRST // idx cs + NEWC // idx cs _20 + SWAP // idx _20 cs + STSLICER // idx _21 + ENDC // idx dict + 16 PUSHINT // idx dict _25=16 + DICTUGET + NULLSWAPIFNOT // _27 _28 + DROP // value + }> + unpack_validator_descr PROC:<{ + // cs + 8 LDU // _2 cs + 32 PUSHINT // _2 cs _5=32 + NOT // _2 cs _6 + s1 s2 XCHG // cs _2 _6 + AND // cs _7 + 83 EQINT // cs _9 + 41 THROWIFNOT + 32 LDU // _12 cs + SWAP + 2390828938 PUSHINT // cs _12 _15=2390828938 + EQUAL // cs _16 + 41 THROWIFNOT + 256 LDU // _18 cs + 64 LDU // _18 _31 _30 + DROP // _18 _21 + }> + create_new_entry PROC:<{ + // cs + 0 PUSHINT // cs _1=0 + DUP // cs _1=0 _2=0 + FALSE // cs _1=0 _2=0 _3 + NEWC // cs _1=0 _2=0 _3 _4 + 1 STI // cs _1=0 _2=0 _6 + 64 STU // cs _1=0 _8 + 256 STU // cs _10 + SWAP // _10 cs + STSLICER // _11 + ENDC // _12 + CTOS // _13 + }> + unpack_suggestion PROC:<{ + // cs + LDDICT // _1 cs + 64 LDU // _1 _3 cs + 256 LDU // _1 _3 _6 cs + }> + pack_suggestion PROC:<{ + // voters sum_weight vset_id body + NEWC // voters sum_weight vset_id body _4 + s1 s4 XCHG // body sum_weight vset_id voters _4 + STDICT // body sum_weight vset_id _5 + s1 s2 XCHG // body vset_id sum_weight _5 + 64 STU // body vset_id _7 + 256 STU // body _9 + SWAP // _9 body + STSLICER // _10 + }> + register_vote PROC:<{ + // vote_dict action cs idx weight + 2DROP // vote_dict action cs + SWAP + 1 PUSHINT // vote_dict cs action _9=1 + AND // vote_dict cs _10 + IF:<{ // vote_dict cs + DUP // vote_dict cs cs + HASHSU // vote_dict cs _11 + NIP // vote_dict hash OVER - 1313042276 PUSHINT // cfg_dict public_key action cs action _17=1313042276 - EQUAL // cfg_dict public_key action cs _18 - IF:<{ // cfg_dict public_key action cs - NIP // cfg_dict public_key cs - LDREF // cfg_dict public_key new_code cs - OVER // cfg_dict public_key new_code cs new_code - SETCODE - DUP // cfg_dict public_key new_code cs cs - SEMPTY // cfg_dict public_key new_code cs _23 - IFNOT:<{ // cfg_dict public_key new_code cs - c3 PUSH // cfg_dict public_key new_code cs old_code - s0 s2 XCHG // cfg_dict public_key old_code cs new_code - c3 POP - OVER // cfg_dict public_key old_code cs old_code - after_code_upgrade CALLDICT - c3 POP - }>ELSE<{ - 2DROP // cfg_dict public_key - }> - }>ELSE<{ // cfg_dict public_key action cs - OVER - 1348619041 PUSHINT // cfg_dict public_key action cs action _29=1348619041 - EQUAL // cfg_dict public_key action cs _30 - IF:<{ // cfg_dict public_key action cs - NIP - NIP // cfg_dict cs - 256 LDU // cfg_dict public_key cs - ENDS - }>ELSE<{ // cfg_dict public_key action cs - OVER - 1313074949 PUSHINT // cfg_dict public_key action cs action _35=1313074949 - EQUAL // cfg_dict public_key action cs _36 - IF:<{ // cfg_dict public_key action cs - NIP // cfg_dict public_key cs - change_elector_code CALLDICT - }>ELSE<{ // cfg_dict public_key action cs - DROP // cfg_dict public_key action - 32 THROWIF - }> - }> - }> - SWAP // public_key cfg_dict + 8 PUSHPOW2 // vote_dict hash vote_dict _13=256 + DICTUGET + NULLSWAPIFNOT // vote_dict _23 _24 + NIP // vote_dict found? + IFNOT:<{ // vote_dict + }> // vote_dict + }>ELSE<{ // vote_dict cs + 256 PLDU // vote_dict hash + OVER + 8 PUSHPOW2 // vote_dict hash vote_dict _19=256 + DICTUGET + NULLSWAPIFNOT // vote_dict _25 _26 + NIP // vote_dict found? + 42 THROWIFNOT }> - SWAP // cfg_dict public_key }> recv_external PROC:<{ // in_msg @@ -255,33 +382,55 @@ PROGRAM{ s1 s2 XCHG // signature in_msg action msg_seqno cs valid_until _19 LESS // signature in_msg action msg_seqno cs _20 35 THROWIF - c4 PUSH // signature in_msg action msg_seqno cs _23 - CTOS // signature in_msg action msg_seqno cs cs2 - LDREF // signature in_msg action msg_seqno cs cfg_dict cs2 - 32 LDU // signature in_msg action msg_seqno cs cfg_dict stored_seqno cs2 - 256 LDU // signature in_msg action msg_seqno cs cfg_dict stored_seqno public_key cs2 - ENDS - s4 s1 XCPU // signature in_msg action public_key cs cfg_dict stored_seqno msg_seqno stored_seqno - EQUAL // signature in_msg action public_key cs cfg_dict stored_seqno _38 + load_data INLINECALLDICT // signature in_msg action msg_seqno cs cfg_dict stored_seqno public_key vote_dict + s5 s2 XCPU // signature in_msg action vote_dict cs cfg_dict stored_seqno public_key msg_seqno stored_seqno + EQUAL // signature in_msg action vote_dict cs cfg_dict stored_seqno public_key _28 33 THROWIFNOT - s0 s5 XCHG // signature stored_seqno action public_key cs cfg_dict in_msg - HASHSU // signature stored_seqno action public_key cs cfg_dict _41 - s0 s6 s3 XC2PU // cfg_dict stored_seqno action public_key cs _41 signature public_key - CHKSIGNU // cfg_dict stored_seqno action public_key cs _42 + s5 PUSH + 1450144869 PUSHINT // signature in_msg action vote_dict cs cfg_dict stored_seqno public_key action _30=1450144869 + SUB // signature in_msg action vote_dict cs cfg_dict stored_seqno public_key _31 + -2 PUSHINT // signature in_msg action vote_dict cs cfg_dict stored_seqno public_key _31 _32=-2 + AND // signature in_msg action vote_dict cs cfg_dict stored_seqno public_key _33 + IFNOTJMP:<{ // signature in_msg action vote_dict cs cfg_dict stored_seqno public_key + s0 s3 XCHG // signature in_msg action vote_dict public_key cfg_dict stored_seqno cs + 16 LDU // signature in_msg action vote_dict public_key cfg_dict stored_seqno idx cs + OVER // signature in_msg action vote_dict public_key cfg_dict stored_seqno idx cs idx + get_validator_descr INLINECALLDICT // signature in_msg action vote_dict public_key cfg_dict stored_seqno idx cs vdescr + unpack_validator_descr INLINECALLDICT // signature in_msg action vote_dict public_key cfg_dict stored_seqno idx cs val_pubkey weight + s0 s9 XCHG // signature weight action vote_dict public_key cfg_dict stored_seqno idx cs val_pubkey in_msg + HASHSU // signature weight action vote_dict public_key cfg_dict stored_seqno idx cs val_pubkey _44 + s0 s10 s10 XCHG3 // cs weight action vote_dict public_key cfg_dict stored_seqno idx _44 signature val_pubkey + CHKSIGNU // cs weight action vote_dict public_key cfg_dict stored_seqno idx _45 + 34 THROWIFNOT + ACCEPT + SWAP // cs weight action vote_dict public_key cfg_dict idx stored_seqno + INC // cs weight action vote_dict public_key cfg_dict idx stored_seqno + s2 s0 s3 PUSH3 + s7 PUSH // cs weight action vote_dict public_key cfg_dict idx stored_seqno cfg_dict stored_seqno public_key vote_dict + store_data INLINECALLDICT + COMMIT + s3 s5 XCHG + s7 s1 s6 XCHG3 // cfg_dict stored_seqno public_key vote_dict action cs idx weight + register_vote CALLDICT // cfg_dict stored_seqno public_key vote_dict + store_data INLINECALLDICT + }> // signature in_msg action vote_dict cs cfg_dict stored_seqno public_key + s0 s6 XCHG // signature public_key action vote_dict cs cfg_dict stored_seqno in_msg + HASHSU // signature public_key action vote_dict cs cfg_dict stored_seqno _55 + s0 s7 s6 XC2PU // stored_seqno public_key action vote_dict cs cfg_dict _55 signature public_key + CHKSIGNU // stored_seqno public_key action vote_dict cs cfg_dict _56 34 THROWIFNOT ACCEPT - s3 s4 XCHG - s1 s2 XCHG // stored_seqno cfg_dict public_key action cs - perform_action CALLDICT // stored_seqno cfg_dict public_key - s0 s2 XCHG // public_key cfg_dict stored_seqno - INC // public_key cfg_dict _47 - NEWC // public_key cfg_dict _47 _48 - s1 s2 XCHG // public_key _47 cfg_dict _48 - STREF // public_key _47 _49 - 32 STU // public_key _51 - 256 STU // _53 - ENDC // _54 - c4 POP + s0 s5 XCHG // cfg_dict public_key action vote_dict cs stored_seqno + INC // cfg_dict public_key action vote_dict cs stored_seqno + s5 s0 s4 PUSH3 + s5 PUSH // cfg_dict public_key action vote_dict cs stored_seqno cfg_dict stored_seqno public_key vote_dict + store_data INLINECALLDICT + COMMIT + s3 s5 XCHG + s4 s5 s5 XCHG3 // stored_seqno vote_dict cfg_dict public_key action cs + perform_action CALLDICT // stored_seqno vote_dict cfg_dict public_key + s3 s0 s3 XCHG3 // cfg_dict stored_seqno public_key vote_dict + store_data INLINECALLDICT }> run_ticktock PROC:<{ // is_tock diff --git a/submodules/ton/tonlib-src/crypto/smartcont/auto/elector-code.cpp b/submodules/ton/tonlib-src/crypto/smartcont/auto/elector-code.cpp index eb520f79ef..90cddeac51 100644 --- a/submodules/ton/tonlib-src/crypto/smartcont/auto/elector-code.cpp +++ b/submodules/ton/tonlib-src/crypto/smartcont/auto/elector-code.cpp @@ -1 +1 @@ -with_tvm_code("elector-code", "te6ccgECVAEACrkAART/APSkE/Sg8sgLAQIBIAIDAgFIBAUAUaX//xh2omh6AnoCETdKrPgN+SBOKjgQ+At5ICz4DPkgcXgL+SB4DRhAAgLFBgcCASAKCwIBywgJACyqgjGCEE5Db2SCEM5Db2RwQzCAQPAGAgEgEBECASAzNAIDeqAMDQIBbg4PACSqB+1E0PQFIG6SMHCU0NcLH+IAQqss7UTQ9AUgbpJbcODwAxAmXwaDB/QOb6GT+gAwkjBw4gBzsKV7UTQ9AUgbpIwbeDwAxAmXwZthP+OHiKDB/R+b6FvoSCcAvoAMFIQbwJQA28Cklow4gGzEuYwMYAAzs+A7UTQ9AQx9AQwgwf0Dm+hk/oAMJIwcOKACASASEwIBICMkAgEgFBUCASAdHgIBIBYXAgEgGxwBASAYACE7UTQ9AT0BPQE+gDTH9P/0YAL8AdDTAwFxsJJfA+D6QDAhxwCUMQHwEOAB0x8hwACUWwHwEODTPyKCEE5zdEu6lTIQI/AL4DQhghBHZXQkupMT8BHgIYIQTkNvZLqOGVRSRPASloIQzkNvZJKEH+JwEDRDMIBA8AbgIYIQ7nZPS7oighDudk9vulIQsYrgMDMgGRoADDIQIwHwDwAkgx6wm4QfcBA0QzCAQPAG4V8DACkyBb0ABT0ABL0AAH6Assfy//J7VSAAITQ0x/TH/oA+gD0BNIA0gDRgAgEgHyACASAhIgArMgXyx8Vyx9QA/oCAfoC9ADKAMoAyYAAdIAP+DPQ0h/SH9If1wofgAEUcIAYyMsFUAfPFlj6AhXLahPLH8s/IcL/kssfkTHiyQH7AIAAbIIQ7m9FTHBDMIBA8AaACASAlJgIBIC0uAgEgJygCASApKgAjIIQ83RITIIQO5rKAEMwcvAGgAEcghBOVlNUcIIAxP/IyxAVy/+DHfoCFMtqE8sfEss/zMlx+wCAAMxTEoMH9A5voZT6ADCgkTDiyAH6AgKDB/RDgAQEgKwH+I/pE7UTQ9AQhbgSkFLGXEDVfBXDwB+AE0//TH9Mf0//UAdCDCNcZAdGCEGVMUHTIyx9SQMsfUjDLH1Jgy/9SIMv/ydBRFfkRlxBoXwhx8AfhIYMPuZcQaF8IdvAH4AfwAzEF/iANghA7msoAoSCqCyO5mBC8XwwxcvAH4FEioCwA/lF9vZcQrF8Mc/AH4ASXEJtfC3DwB+BTY4MH9A5voSCfMPoAWaAB0z8x0/8wUoC9kTHilxCbXwt08AfgUwG5lxCbXwt18AfgIPKs+AD4I8hY+gLLHxTLHxbL/xjL/0A3gwf0Q3AQVxA0ECMQJnDwBMj0AAHPFsntVCCTcPAI4FsCASAvMAIBIDEyAHkcCB/jjAkgwf0fG+hb6EgjhwC0//TPzH6ANIA0ZQxUTOgl1QYiPAKBwPiUEOgk1BCMOIBsxPmMDMBuvK7gAKEcFMAf447JoMH9HxvoW+hII4nAtP/0z8x+gDSANGUMVEzoI4RVHcIqYRRZqBSF6BLsPAKCQPiUFOgk1BSMOIBsxTmMDUDulMhu7DyuxKgAaGAAVwBgCD0Zm+hkjBw4dM/MdP/MfQE+gD6APQEMdEgwgCUEDTwDZUwECPwDOISgAKMMgL6RHD4M9DXC//tRND0BASkWr2xIW6xkl8E4PADBV8FUhW9BLMUsZJfA+D4AAGRW44d9AT0BPoAQzTwDnDIygAT9AD0AFmg+gIBzxbJ7VTigAgEgNTYCAUhOTwIBIDc4AgEgPT4CASA5OgIBIDs8AKU8AEH+kQBpLEhwACxlwWgVRMB8ALgUwKAIPQOb6GOJ9M/0//0BPoA+gALoMgVyz8Ty//0AAH6AgH6AlAGzxYBgCBURkT0Q5QwBaAB4hA1QUPwAoADZDEh+kQBpJ8wghD////+cBA0E4BA8Abg7UTQ9AT0BFAzgwf0Zm+hjhBfBIIQ/////nAQNBOAQPAG4TYF+gDRyBL0ABX0AAHPFsntVIIQ+W9zJHCAGMjLBVAEzxZQBPoCEstqEssfyz/JgED7AIABpHD4MyBuk18EcODQ1wv/I/pEAaQCvbGTXwNw4PgAAdQh+wQgxwCSXwSZAe1TAfEGgvIA4n+AAAxwgAgEgP0ACASBJSgA1HACjhMCbyIhbxACbxEkqKsPErYIEqBY5DAxgAQEgQQP+gBD4M9DTD9MPMdMP0XG2CXBtf45GKYMH9HxvoW+hII4wAvoA0x/TH9P/0//RA6PIFct/FMofUkDL/8nQURq2CMjLHxPL/8v/QBSBAaD0QQOklBA0WjDiAbNDMOYwNFi2CFMBuZZfB21tcCDgbYrmMzSlXJJvEeRwIIrmMjI0NEJDRABqA4EBoPSSb6FvoSCOIAHTf1EZtggB0x8x1wv/A9Mf0/8x1wv/QTAUbwRQBW8Ck0YWW+IEsxQASgJvIgFvEASkU0i+jhBUZQbwFFMCvJMyMiKSEzDik1A0MOJTNr4BXiLAAFJDuRKxll8EbW1wIOAg/iAipZJvEeRvEG8QcCBtbYrmMzMzNVIUuvKxECMBRQL+BW8iAW8kUxyDB/QOb6HyvfoAMdM/MdcL/1OLuY5XUTmoqw9SQLYIUUShJKo7LakEUYWgghCOgSeKI5KAc5KAU+LIywfLH1JAy/9SkMs/I5MTy/+TUAMw4gGAEFRKmfRDcCTIy/8Zyz9QBfoCF8oAQBmDB/RDlgoQRgNfA+IjikZHAAhLc/AKARiK4gOkKW4QShBGREBIAAZLc1sBASBLAa08AGAIvgz+QBTAbqTXwdw4CKOL1MkgCD0Dm+hjh/THzEg0x/T/zBQBLryufgjUAOgyMsfWM8WQASAIPRDlBUTXwPik0QUW+J/iuYgbpIwcJDiUAPwAn+BNAf4B8AM0+CMluZNfCHDgcPgzbpRfCPAT4IAR+DPQ+gD6APoA0x/RU2G5lF8M8BPgBJRfC/AT4AaTXwpw4BA4KFEyUHfwFSDAACCzKgYQWhBJEDhMzPAEIo4TMjIyMjLIEvQA9AABzxbJ7VTwE+HwBTL4IwGgpsQotgmAEPgz0IAQTADI1yHXCw9SYLYIUxOggBHIywdSMMsfyx8Xyw8Wyw8J0BnPFslw+DPQ1wv/UxjwCQn0BHAL+QBQY6ApoMjLHxnLH8v/FfQAUAP6AnD6AhbKAEA0gCD0Q8gT9AD0APQAAc8Wye1UfwCkIYAg9HxvoW+hII4/AtM/0/9TF7qOLTQD9AT6APoAKKsCUZmhUCmgyBXLPxbL/xL0AAH6AgH6AljPFgGAIFRBRPRDcJYQNRA0XwPik0MDMOKzEgIBIFBRAgEgUlMAGQhbpJbcJUB+QABuuKAAlQB8AMFXwWTXwNw4QL0BFExgCD0Dm+hk18EcOGAQNch1wv/gCL4MyHwGIAk+DNY8BixjhNwyMoAEvQA9AABzxbJ7VTwFzB/4F8DcIACTPABf44+JIAg9HxvoW+hII4kAtMfMPgju1MUvbCOETFUFUTwDhSgVHYTVHNY8AJwlEYVUETilhA3FkUFMOKzECYQRRTmBl8GbrOAA4QxgCT4M26SW3Dhcfgz0NcL//go+kQBpAK9sZJbcOCAIvgzIG6TXwNw4PAFMDIC0IAo1yHXCx/4I1EToVy5k18GcOBcocE8kTGRMOKAEfgz0PoAMAOg/iBSAqFwbXAQRRA0cPAEyPQA9AABzxbJ7VR/g"); +with_tvm_code("elector-code", "te6ccgECVQEACskAART/APSkE/Sg8sgLAQIBIAIDAgFIBAUAUaX//xh2omh6AnoCETdKrPgN+SBOKjgQ+At5ICz4DPkgcXgL+SB4DRhAAgLFBgcCASAKCwIBywgJACyqgjGCEE5Db2SCEM5Db2RwQzCAQPAGAgEgEBECASAzNAIDeqAMDQIBbg4PACSqB+1E0PQFIG6SMHCU0NcLH+IAQqss7UTQ9AUgbpJbcODwAxAmXwaDB/QOb6GT+gAwkjBw4gBzsKV7UTQ9AUgbpIwbeDwAxAmXwZthP+OHiKDB/R+b6FvoSCcAvoAMFIQbwJQA28Cklow4gGzEuYwMYAAzs+A7UTQ9AQx9AQwgwf0Dm+hk/oAMJIwcOKACASASEwIBICMkAgEgFBUCASAdHgIBIBYXAgEgGxwBASAYACE7UTQ9AT0BPQE+gDTH9P/0YAL8AdDTAwFxsJJfA+D6QDAhxwCUMQHwEOAB0x8hwACUWwHwEODTPyKCEE5zdEu6lTIQI/AL4DQhghBHZXQkupMT8BHgIYIQTkNvZLqOGVRSRPASloIQzkNvZJKEH+JwEDRDMIBA8AbgIYIQ7nZPS7oighDudk9vulIQsYrgMDMgGRoADDIQIwHwDwAkgx6wm4QfcBA0QzCAQPAG4V8DACkyBb0ABT0ABL0AAH6Assfy//J7VSAAITQ0x/TH/oA+gD0BNIA0gDRgAgEgHyACASAhIgArMgXyx8Vyx9QA/oCAfoC9ADKAMoAyYAAdIAP+DPQ0h/SH9If1wofgAEUcIAYyMsFUAfPFlj6AhXLahPLH8s/IcL/kssfkTHiyQH7AIAAbIIQ7m9FTHBDMIBA8AaACASAlJgIBIC0uAgEgJygCASApKgAjIIQ83RITIIQO5rKAEMwcvAGgAEcghBOVlNUcIIAxP/IyxAVy/+DHfoCFMtqE8sfEss/zMlx+wCAAMxTEoMH9A5voZT6ADCgkTDiyAH6AgKDB/RDgAQEgKwH+I/pE7UTQ9AQhbgSkFLGXEDVfBXDwB+AE0//TH9Mf0//UAdCDCNcZAdGCEGVMUHTIyx9SQMsfUjDLH1Jgy/9SIMv/ydBRFfkRlxBoXwhx8AfhIYMPuZcQaF8IdvAH4AfwAzEF/iANghA7msoAoSCqCyO5mBC8XwwxcvAH4FEioCwA/lF9vZcQrF8Mc/AH4ASXEJtfC3DwB+BTY4MH9A5voSCfMPoAWaAB0z8x0/8wUoC9kTHilxCbXwt08AfgUwG5lxCbXwt18AfgIPKs+AD4I8hY+gLLHxTLHxbL/xjL/0A3gwf0Q3AQVxA0ECMQJnDwBMj0AAHPFsntVCCTcPAI4FsCASAvMAIBIDEyAHkcCB/jjAkgwf0fG+hb6EgjhwC0//TPzH6ANIA0ZQxUTOgl1QYiPAKBwPiUEOgk1BCMOIBsxPmMDMBuvK7gAKEcFMAf447JoMH9HxvoW+hII4nAtP/0z8x+gDSANGUMVEzoI4RVHcIqYRRZqBSF6BLsPAKCQPiUFOgk1BSMOIBsxTmMDUDulMhu7DyuxKgAaGAAVwBgCD0Zm+hkjBw4dM/MdP/MfQE+gD6APQEMdEgwgCUEDTwDZUwECPwDOISgAKMMgL6RHD4M9DXC//tRND0BASkWr2xIW6xkl8E4PADBV8FUhW9BLMUsZJfA+D4AAGRW44d9AT0BPoAQzTwDnDIygAT9AD0AFmg+gIBzxbJ7VTigAgEgNTYCAUhPUAIBIDc4AgEgPT4CASA5OgIBIDs8AKU8AEH+kQBpLEhwACxlwWgVRMB8ALgUwKAIPQOb6GOJ9M/0//0BPoA+gALoMgVyz8Ty//0AAH6AgH6AlAGzxYBgCBURkT0Q5QwBaAB4hA1QUPwAoADZDEh+kQBpJ8wghD////+cBA0E4BA8Abg7UTQ9AT0BFAzgwf0Zm+hjhBfBIIQ/////nAQNBOAQPAG4TYF+gDRyBL0ABX0AAHPFsntVIIQ+W9zJHCAGMjLBVAEzxZQBPoCEstqEssfyz/JgED7AIABpHD4MyBuk18EcODQ1wv/I/pEAaQCvbGTXwNw4PgAAdQh+wQgxwCSXwSZAe1TAfEGgvIA4n+AAAxwgAgEgP0ACASBKSwA1HACjhMCbyIhbxACbxEkqKsPErYIEqBY5DAxgAQEgQQP+gBD4M9DTD9MPMdMP0XG2CXBtf45GKYMH9HxvoW+hII4wAvoA0x/TH9P/0//RA6PIFct/FMofUkDL/8nQURq2CMjLHxPL/8v/QBSBAaD0QQOklBA0WjDiAbNDMOYwNFi2CFMBuZdfB21wbVMR4G2K5jM0pVySbxHkcCCK5jIyNEJDRABqA4EBoPSSb6FvoSCOIAHTf1EZtggB0x8x1wv/A9Mf0/8x1wv/QTAUbwRQBW8Ck0YWW+IEsxQASgJvIgFvEASkU0i+jhBUZQbwFFMCvJMyMiKSEzDik1A0MOJTNr4BZDQiwABSQ7kSsZdfBG1wbVMR4CD+ICKlkm8R5G8QbxBwUwBtbYrmNDQ0NlJVuvKxQzQBRQT+Bm8iAW8kUx2DB/QOb6HyvfoAMdM/MdcL/1OcuY5aUTqoqw9SQLYIUUShJKo7LqkEUZWgUYmgghCOgSeKI5KAc5KAU+LIywfLH1JAy/9SoMs/I5MTy/+TUAMw4gGAEFRLmfRDcCTIy/8ayz9QBfoCGMoAQBqDB/RDiuIjioriBEZHSEkAEAsQeBBGA18DAAhMg/AKAAZMg1sAFqQqbhBbEFcVEDQSAQEgTAGtPABgCL4M/kAUwG6k18HcOAiji9TJIAg9A5voY4f0x8xINMf0/8wUAS68rn4I1ADoMjLH1jPFkAEgCD0Q5QVE18D4pNEFFvif4rmIG6SMHCQ4lAD8AJ/gTgH8AfADNPgjJbmTXwhw4HD4M26UXwjwE+CAEfgz0PoA+gD6ANMf0VNhuZRfDPAT4ASUXwvwE+AGk18KcOAQOChRMlB38BUgwAAgsysGEFsQShA5Td3wBCOOFDEyMjIyMsgS9AD0AAHPFsntVPAT4fAFMvgjAaCmxCm2CYAQ+DPQTQDQgBDXIdcLD1JwtghTE6CAEsjLB1Iwyx/LHxjLDxfLDxrLPxP0AMlw+DPQ1wv/UxjwCQn0BHAL+QBQZKApoMjLHxnLHxLL/xX0AFAD+gJw+gIWygBANIAg9EPIE/QA9AD0AAHPFsntVH8ApCGAIPR8b6FvoSCOPwLTP9P/Uxe6ji00A/QE+gD6ACirAlGZoVApoMgVyz8Wy/8S9AAB+gIB+gJYzxYBgCBUQUT0Q3CWEDUQNF8D4pNDAzDisxICASBRUgIBIFNUABkIW6SW3CVAfkAAbrigAJUAfADBV8Fk18DcOEC9ARRMYAg9A5voZNfBHDhgEDXIdcL/4Ai+DMh8BiAJPgzWPAYsY4TcMjKABL0APQAAc8Wye1U8Bcwf+BfA3CAAkzwAX+OPiSAIPR8b6FvoSCOJALTHzD4I7tTFL2wjhExVBVE8A4UoFR2E1RzWPACcJRGFVBE4pYQNxZFBTDisxAmEEUU5gZfBm6zgAOEMYAk+DNukltw4XH4M9DXC//4KPpEAaQCvbGSW3DggCL4MyBuk18DcODwBTAyAtCAKNch1wsf+CNRE6FcuZNfBnDgXKHBPJExkTDigBH4M9D6ADADoP4gUgKhcG1wEEUQNHDwBMj0APQAAc8Wye1Uf4A=="); diff --git a/submodules/ton/tonlib-src/crypto/smartcont/auto/elector-code.fif b/submodules/ton/tonlib-src/crypto/smartcont/auto/elector-code.fif index d964063b2e..e37ab8d892 100644 --- a/submodules/ton/tonlib-src/crypto/smartcont/auto/elector-code.fif +++ b/submodules/ton/tonlib-src/crypto/smartcont/auto/elector-code.fif @@ -845,7 +845,7 @@ PROGRAM{ CONFIGOPTPARAM // credits members min_stake max_stake min_total_stake max_stake_factor _8 CTOS // credits members min_stake max_stake min_total_stake max_stake_factor cs 16 LDU // credits members min_stake max_stake min_total_stake max_stake_factor _13 cs - 16 LDU // credits members min_stake max_stake min_total_stake max_stake_factor _13 _253 _252 + 16 LDU // credits members min_stake max_stake min_total_stake max_stake_factor _13 _258 _257 NIP // credits members min_stake max_stake min_total_stake max_stake_factor _13 cs 16 LDU // credits members min_stake max_stake min_total_stake max_stake_factor max_validators min_validators cs ENDS @@ -910,44 +910,44 @@ PROGRAM{ IFJMP:<{ // credits members min_stake max_stake min_total_stake sdict min_validators n 7 BLKDROP // credits NEWDICT // credits _86 - NEWDICT // credits _86 _87 - 0 PUSHINT // credits _86 _87 _88=0 - DUP // credits _86 _87 _88=0 _89=0 + 0 PUSHINT // credits _86 _87=0 + NEWDICT // credits _86 _87=0 _88 + s1 s1 PUSH2 // credits _86 _87=0 _88 _89=0 _90=0 }> // credits members min_stake max_stake min_total_stake sdict min_validators n PUSHNULL // credits members min_stake max_stake min_total_stake sdict min_validators n l UNTIL:<{ s0 s3 XCHG - 416 PUSHINT // credits members min_stake max_stake min_total_stake l min_validators n sdict _100 + 416 PUSHINT // credits members min_stake max_stake min_total_stake l min_validators n sdict _101 DICTREMMIN NULLSWAPIFNOT NULLSWAPIFNOT // credits members min_stake max_stake min_total_stake l min_validators n sdict cs key f DUP // credits members min_stake max_stake min_total_stake l min_validators n sdict cs key f f IF:<{ // credits members min_stake max_stake min_total_stake l min_validators n sdict cs key f SWAP // credits members min_stake max_stake min_total_stake l min_validators n sdict cs f key - 128 LDU // credits members min_stake max_stake min_total_stake l min_validators n sdict cs f _105 key - s1 s9 XCPU // credits members min_stake max_stake min_total_stake l min_validators n sdict cs f key _105 max_stake - MIN // credits members min_stake max_stake min_total_stake l min_validators n sdict cs f key _108 - SWAP // credits members min_stake max_stake min_total_stake l min_validators n sdict cs f _108 key - 32 LDU // credits members min_stake max_stake min_total_stake l min_validators n sdict cs f _108 _279 _278 - NIP // credits members min_stake max_stake min_total_stake l min_validators n sdict cs f _108 key + 128 LDU // credits members min_stake max_stake min_total_stake l min_validators n sdict cs f _106 key + s1 s9 XCPU // credits members min_stake max_stake min_total_stake l min_validators n sdict cs f key _106 max_stake + MIN // credits members min_stake max_stake min_total_stake l min_validators n sdict cs f key _109 + SWAP // credits members min_stake max_stake min_total_stake l min_validators n sdict cs f _109 key + 32 LDU // credits members min_stake max_stake min_total_stake l min_validators n sdict cs f _109 _284 _283 + NIP // credits members min_stake max_stake min_total_stake l min_validators n sdict cs f _109 key 256 PLDU // credits members min_stake max_stake min_total_stake l min_validators n sdict cs f stake pubkey s0 s3 XCHG // credits members min_stake max_stake min_total_stake l min_validators n sdict pubkey f stake cs - 32 LDU // credits members min_stake max_stake min_total_stake l min_validators n sdict pubkey f stake _117 cs - 256 LDU // credits members min_stake max_stake min_total_stake l min_validators n sdict pubkey f stake _117 _283 _282 - NIP // credits members min_stake max_stake min_total_stake l min_validators n sdict pubkey f stake _117 cs + 32 LDU // credits members min_stake max_stake min_total_stake l min_validators n sdict pubkey f stake _118 cs + 256 LDU // credits members min_stake max_stake min_total_stake l min_validators n sdict pubkey f stake _118 _288 _287 + NIP // credits members min_stake max_stake min_total_stake l min_validators n sdict pubkey f stake _118 cs 256 PLDU // credits members min_stake max_stake min_total_stake l min_validators n sdict pubkey f stake max_f adnl_addr s1 s3 s0 XCHG3 s1 s4 XCHG // credits members min_stake max_stake min_total_stake l min_validators n sdict f stake max_f pubkey adnl_addr - 4 TUPLE // credits members min_stake max_stake min_total_stake l min_validators n sdict f _125 - s0 s5 XCHG2 // credits members min_stake max_stake min_total_stake f min_validators n sdict _125 l + 4 TUPLE // credits members min_stake max_stake min_total_stake l min_validators n sdict f _126 + s0 s5 XCHG2 // credits members min_stake max_stake min_total_stake f min_validators n sdict _126 l CONS // credits members min_stake max_stake min_total_stake f min_validators n sdict l }>ELSE<{ s6 s1 s6 XCHG3 2DROP // credits members min_stake max_stake min_total_stake f min_validators n sdict l }> s0 s4 XCHG // credits members min_stake max_stake min_total_stake l min_validators n sdict f - NOT // credits members min_stake max_stake min_total_stake l min_validators n sdict _127 - s1 s4 XCHG // credits members min_stake max_stake min_total_stake sdict min_validators n l _127 + NOT // credits members min_stake max_stake min_total_stake l min_validators n sdict _128 + s1 s4 XCHG // credits members min_stake max_stake min_total_stake sdict min_validators n l _128 }> // credits members min_stake max_stake min_total_stake sdict min_validators n l s3 POP s4 POP // credits members min_stake n min_total_stake l min_validators @@ -956,22 +956,22 @@ PROGRAM{ REPEAT:<{ // credits members min_stake n min_total_stake l i l1 CDR // credits members min_stake n min_total_stake l i l1 }> - 0 PUSHINT // credits members min_stake n min_total_stake l i l1 _135=0 + 0 PUSHINT // credits members min_stake n min_total_stake l i l1 _136=0 DUP // credits members min_stake n min_total_stake l i l1 best_stake=0 m=0 UNTIL:<{ s0 s2 XCHG // credits members min_stake n min_total_stake l i m best_stake l1 - UNCONS // credits members min_stake n min_total_stake l i m best_stake _138 l1 - SWAP // credits members min_stake n min_total_stake l i m best_stake l1 _138 + UNCONS // credits members min_stake n min_total_stake l i m best_stake _139 l1 + SWAP // credits members min_stake n min_total_stake l i m best_stake l1 _139 0 INDEX // credits members min_stake n min_total_stake l i m best_stake l1 stake s0 s4 XCHG // credits members min_stake n min_total_stake l stake m best_stake l1 i INC // credits members min_stake n min_total_stake l stake m best_stake l1 i s4 s8 PUSH2 // credits members min_stake n min_total_stake l stake m best_stake l1 i stake min_stake - GEQ // credits members min_stake n min_total_stake l stake m best_stake l1 i _144 + GEQ // credits members min_stake n min_total_stake l stake m best_stake l1 i _145 IF:<{ // credits members min_stake n min_total_stake l stake m best_stake l1 i s5 s(-1) s4 PU2XC // credits members min_stake n min_total_stake l i m best_stake l1 l i stake compute_total_stake CALLDICT // credits members min_stake n min_total_stake l i m best_stake l1 tot_stake s0 s2 PUSH2 // credits members min_stake n min_total_stake l i m best_stake l1 tot_stake tot_stake best_stake - GREATER // credits members min_stake n min_total_stake l i m best_stake l1 tot_stake _147 + GREATER // credits members min_stake n min_total_stake l i m best_stake l1 tot_stake _148 IF:<{ // credits members min_stake n min_total_stake l i m best_stake l1 tot_stake s2 POP s2 POP // credits members min_stake n min_total_stake l i l1 tot_stake @@ -985,144 +985,149 @@ PROGRAM{ DROP // credits members min_stake n min_total_stake l i l1 best_stake m }> s3 s6 PUSH2 // credits members min_stake n min_total_stake l i l1 best_stake m i n - GEQ // credits members min_stake n min_total_stake l i l1 best_stake m _148 + GEQ // credits members min_stake n min_total_stake l i l1 best_stake m _149 }> // credits members min_stake n min_total_stake l i l1 best_stake m s2 POP s2 POP s4 POP s4 POP // credits members best_stake m min_total_stake l s2 PUSH // credits members best_stake m min_total_stake l m - 0 EQINT // credits members best_stake m min_total_stake l _150 - s4 s2 PUXC // credits members best_stake m _150 l best_stake min_total_stake - LESS // credits members best_stake m _150 l _151 - s1 s2 XCHG // credits members best_stake m l _150 _151 - OR // credits members best_stake m l _152 + 0 EQINT // credits members best_stake m min_total_stake l _151 + s4 s2 PUXC // credits members best_stake m _151 l best_stake min_total_stake + LESS // credits members best_stake m _151 l _152 + s1 s2 XCHG // credits members best_stake m l _151 _152 + OR // credits members best_stake m l _153 IFJMP:<{ // credits members best_stake m l 4 BLKDROP // credits - NEWDICT // credits _153 - NEWDICT // credits _153 _154 - 0 PUSHINT // credits _153 _154 _155=0 - DUP // credits _153 _154 _155=0 _156=0 + NEWDICT // credits _154 + 0 PUSHINT // credits _154 _155=0 + NEWDICT // credits _154 _155=0 _156 + s1 s1 PUSH2 // credits _154 _155=0 _156 _157=0 _158=0 }> // credits members best_stake m l DUP // credits members best_stake m l l1 s0 DUMP // credits members best_stake m l l1 s2 PUSH // credits members best_stake m l l1 m - DEC // credits members best_stake m l l1 _161 + DEC // credits members best_stake m l l1 _163 REPEAT:<{ // credits members best_stake m l l1 CDR // credits members best_stake m l l1 }> - CAR // credits members best_stake m l _164 + CAR // credits members best_stake m l _166 0 INDEX // credits members best_stake m l m_stake 0 PUSHINT // credits members best_stake m l m_stake i=0 - DUP // credits members best_stake m l m_stake i=0 tot_stake=0 - NEWDICT // credits members best_stake m l m_stake i=0 tot_stake=0 vset - NEWDICT // credits members best_stake m l m_stake i=0 tot_stake=0 vset frozen + s0 s0 PUSH2 // credits members best_stake m l m_stake i=0 tot_stake=0 tot_weight=0 + NEWDICT // credits members best_stake m l m_stake i=0 tot_stake=0 tot_weight=0 vset + NEWDICT // credits members best_stake m l m_stake i=0 tot_stake=0 tot_weight=0 vset frozen UNTIL:<{ - s0 s5 XCHG // credits members best_stake m frozen m_stake i tot_stake vset l - UNCONS // credits members best_stake m frozen m_stake i tot_stake vset _179 l - SWAP // credits members best_stake m frozen m_stake i tot_stake vset l _179 - 4 UNTUPLE // credits members best_stake m frozen m_stake i tot_stake vset l stake max_f pubkey adnl_addr - s1 s12 PUSH2 - 8 PUSHPOW2 // credits members best_stake m frozen m_stake i tot_stake vset l stake max_f pubkey adnl_addr pubkey members _184=256 + s0 s6 XCHG // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l + UNCONS // credits members best_stake m frozen m_stake i tot_stake tot_weight vset _183 l + SWAP // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l _183 + 4 UNTUPLE // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake max_f pubkey adnl_addr + s1 s13 PUSH2 + 8 PUSHPOW2 // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake max_f pubkey adnl_addr pubkey members _188=256 DICTUGET - NULLSWAPIFNOT // credits members best_stake m frozen m_stake i tot_stake vset l stake max_f pubkey adnl_addr val f + NULLSWAPIFNOT // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake max_f pubkey adnl_addr val f 61 THROWIFNOT - LDGRAMS // credits members best_stake m frozen m_stake i tot_stake vset l stake max_f pubkey adnl_addr _295 _294 - NIP // credits members best_stake m frozen m_stake i tot_stake vset l stake max_f pubkey adnl_addr val - 64 LDU // credits members best_stake m frozen m_stake i tot_stake vset l stake max_f pubkey adnl_addr _297 _296 - NIP // credits members best_stake m frozen m_stake i tot_stake vset l stake max_f pubkey adnl_addr val - 256 PLDU // credits members best_stake m frozen m_stake i tot_stake vset l stake max_f pubkey adnl_addr src_addr - s8 s11 PUSH2 // credits members best_stake m frozen m_stake i tot_stake vset l stake max_f pubkey adnl_addr src_addr i m - LESS // credits members best_stake m frozen m_stake i tot_stake vset l stake max_f pubkey adnl_addr src_addr _198 - IF:<{ // credits members best_stake m frozen m_stake i tot_stake vset l stake max_f pubkey adnl_addr src_addr - s3 s9 XCPU // credits members best_stake m frozen m_stake i tot_stake vset l stake src_addr pubkey adnl_addr max_f m_stake - MUL // credits members best_stake m frozen m_stake i tot_stake vset l stake src_addr pubkey adnl_addr _200 - 16 RSHIFT# // credits members best_stake m frozen m_stake i tot_stake vset l stake src_addr pubkey adnl_addr _202 - s4 s(-1) PUXC // credits members best_stake m frozen m_stake i tot_stake vset l stake src_addr pubkey adnl_addr stake _202 - MIN // credits members best_stake m frozen m_stake i tot_stake vset l stake src_addr pubkey adnl_addr true_stake - s4 s4 XCPU // credits members best_stake m frozen m_stake i tot_stake vset l true_stake src_addr pubkey adnl_addr stake true_stake - SUB // credits members best_stake m frozen m_stake i tot_stake vset l true_stake src_addr pubkey adnl_addr stake - s4 PUSH // credits members best_stake m frozen m_stake i tot_stake vset l true_stake src_addr pubkey adnl_addr stake true_stake - 60 LSHIFT# // credits members best_stake m frozen m_stake i tot_stake vset l true_stake src_addr pubkey adnl_addr stake _207 - s13 PUSH // credits members best_stake m frozen m_stake i tot_stake vset l true_stake src_addr pubkey adnl_addr stake _207 best_stake - DIV // credits members best_stake m frozen m_stake i tot_stake vset l true_stake src_addr pubkey adnl_addr stake weight - s8 s5 XCPU // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake true_stake - ADD // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake - 2390828938 PUSHINT // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake _211=2390828938 - s3 PUSH // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake _211=2390828938 adnl_addr - IF:<{ // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake _211=2390828938 - 115 PUSHINT // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake _211=2390828938 _212=115 - }>ELSE<{ // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake _211=2390828938 - 83 PUSHINT // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake _211=2390828938 _212=83 + LDGRAMS // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake max_f pubkey adnl_addr _300 _299 + NIP // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake max_f pubkey adnl_addr val + 64 LDU // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake max_f pubkey adnl_addr _302 _301 + NIP // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake max_f pubkey adnl_addr val + 256 PLDU // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake max_f pubkey adnl_addr src_addr + s9 s12 PUSH2 // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake max_f pubkey adnl_addr src_addr i m + LESS // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake max_f pubkey adnl_addr src_addr _202 + IF:<{ // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake max_f pubkey adnl_addr src_addr + s3 s10 XCPU // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake src_addr pubkey adnl_addr max_f m_stake + MUL // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake src_addr pubkey adnl_addr _204 + 16 RSHIFT# // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake src_addr pubkey adnl_addr _206 + s4 s(-1) PUXC // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake src_addr pubkey adnl_addr stake _206 + MIN // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l stake src_addr pubkey adnl_addr true_stake + s4 s4 XCPU // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l true_stake src_addr pubkey adnl_addr stake true_stake + SUB // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l true_stake src_addr pubkey adnl_addr stake + s4 PUSH // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l true_stake src_addr pubkey adnl_addr stake true_stake + 60 LSHIFT# // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l true_stake src_addr pubkey adnl_addr stake _211 + s14 PUSH // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l true_stake src_addr pubkey adnl_addr stake _211 best_stake + DIV // credits members best_stake m frozen m_stake i tot_stake tot_weight vset l true_stake src_addr pubkey adnl_addr stake weight + s9 s5 XCPU // credits members best_stake m frozen m_stake i weight tot_weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake true_stake + ADD // credits members best_stake m frozen m_stake i weight tot_weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake + s8 s9 XCPU // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight weight + ADD // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight + 2390828938 PUSHINT // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight _216=2390828938 + s3 PUSH // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight _216=2390828938 adnl_addr + IF:<{ // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight _216=2390828938 + 115 PUSHINT // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight _216=2390828938 _217=115 + }>ELSE<{ // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight _216=2390828938 + 83 PUSHINT // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight _216=2390828938 _217=83 }> - NEWC // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake _211=2390828938 _212 _215 - 8 STU // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake _211=2390828938 _217 - 32 STU // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake _219 - s4 s(-1) PUXC // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake pubkey _219 - 256 STU // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake _221 - s9 s(-1) PUXC // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake weight _221 - 64 STU // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake vinfo - s3 PUSH // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake vinfo adnl_addr - IF:<{ // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey adnl_addr stake tot_stake vinfo - s1 s3 XCHG // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey tot_stake stake adnl_addr vinfo - 256 STU // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey tot_stake stake vinfo + NEWC // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight _216=2390828938 _217 _220 + 8 STU // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight _216=2390828938 _222 + 32 STU // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight _224 + s4 s(-1) PUXC // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight pubkey _224 + 256 STU // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight _226 + s10 s(-1) PUXC // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight weight _226 + 64 STU // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight vinfo + s3 PUSH // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight vinfo adnl_addr + IF:<{ // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey adnl_addr stake tot_weight vinfo + s1 s3 XCHG // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey tot_weight stake adnl_addr vinfo + 256 STU // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey tot_weight stake vinfo }>ELSE<{ s0 s3 XCHG2 - DROP // credits members best_stake m frozen m_stake i weight vset l true_stake src_addr pubkey tot_stake stake vinfo + DROP // credits members best_stake m frozen m_stake i weight tot_stake vset l true_stake src_addr pubkey tot_weight stake vinfo }> SWAP 16 PUSHINT - s10 s8 s8 PUXC2 // credits members best_stake m frozen m_stake i weight stake l true_stake src_addr pubkey tot_stake vinfo i vset _228=16 - DICTUSETB // credits members best_stake m frozen m_stake i weight stake l true_stake src_addr pubkey tot_stake vset - FALSE // credits members best_stake m frozen m_stake i weight stake l true_stake src_addr pubkey tot_stake vset _231 + s11 s8 s8 PUXC2 // credits members best_stake m frozen m_stake i weight tot_stake stake l true_stake src_addr pubkey tot_weight vinfo i vset _233=16 + DICTUSETB // credits members best_stake m frozen m_stake i weight tot_stake stake l true_stake src_addr pubkey tot_weight vset + FALSE // credits members best_stake m frozen m_stake i weight tot_stake stake l true_stake src_addr pubkey tot_weight vset _236 s4 PUSH - NEWC // credits members best_stake m frozen m_stake i weight stake l true_stake src_addr pubkey tot_stake vset _231 src_addr _232 - 256 STU // credits members best_stake m frozen m_stake i weight stake l true_stake src_addr pubkey tot_stake vset _231 _234 - s1 s9 XCHG // credits members best_stake m frozen m_stake i _231 stake l true_stake src_addr pubkey tot_stake vset weight _234 - 64 STU // credits members best_stake m frozen m_stake i _231 stake l true_stake src_addr pubkey tot_stake vset _236 - s0 s5 XCHG2 // credits members best_stake m frozen m_stake i _231 stake l vset src_addr pubkey tot_stake _236 true_stake - STGRAMS // credits members best_stake m frozen m_stake i _231 stake l vset src_addr pubkey tot_stake _237 - s1 s7 XCHG // credits members best_stake m frozen m_stake i tot_stake stake l vset src_addr pubkey _231 _237 - 1 STI // credits members best_stake m frozen m_stake i tot_stake stake l vset src_addr pubkey _239 - s0 s1 s9 XCHG3 - 8 PUSHPOW2 // credits members best_stake m src_addr m_stake i tot_stake stake l vset _239 pubkey frozen _240=256 - DICTUSETB // credits members best_stake m src_addr m_stake i tot_stake stake l vset frozen + NEWC // credits members best_stake m frozen m_stake i weight tot_stake stake l true_stake src_addr pubkey tot_weight vset _236 src_addr _237 + 256 STU // credits members best_stake m frozen m_stake i weight tot_stake stake l true_stake src_addr pubkey tot_weight vset _236 _239 + s1 s10 XCHG // credits members best_stake m frozen m_stake i _236 tot_stake stake l true_stake src_addr pubkey tot_weight vset weight _239 + 64 STU // credits members best_stake m frozen m_stake i _236 tot_stake stake l true_stake src_addr pubkey tot_weight vset _241 + s0 s5 XCHG2 // credits members best_stake m frozen m_stake i _236 tot_stake stake l vset src_addr pubkey tot_weight _241 true_stake + STGRAMS // credits members best_stake m frozen m_stake i _236 tot_stake stake l vset src_addr pubkey tot_weight _242 + s1 s8 XCHG // credits members best_stake m frozen m_stake i tot_weight tot_stake stake l vset src_addr pubkey _236 _242 + 1 STI // credits members best_stake m frozen m_stake i tot_weight tot_stake stake l vset src_addr pubkey _244 + s0 s1 s10 XCHG3 + 8 PUSHPOW2 // credits members best_stake m src_addr m_stake i tot_weight tot_stake stake l vset _244 pubkey frozen _245=256 + DICTUSETB // credits members best_stake m src_addr m_stake i tot_weight tot_stake stake l vset frozen }>ELSE<{ - s0 s10 XCHG + s0 s11 XCHG + s7 s8 XCHG s4 s6 XCHG s0 s3 XCHG - 3 BLKDROP // credits members best_stake m src_addr m_stake i tot_stake stake l vset frozen + 3 BLKDROP // credits members best_stake m src_addr m_stake i tot_weight tot_stake stake l vset frozen }> - s3 PUSH // credits members best_stake m src_addr m_stake i tot_stake stake l vset frozen stake - IF:<{ // credits members best_stake m src_addr m_stake i tot_stake stake l vset frozen - s11 s7 s3 XCHG3 // l members best_stake m vset m_stake i tot_stake frozen credits src_addr stake - ~credit_to CALLDICT // l members best_stake m vset m_stake i tot_stake frozen credits + s3 PUSH // credits members best_stake m src_addr m_stake i tot_weight tot_stake stake l vset frozen stake + IF:<{ // credits members best_stake m src_addr m_stake i tot_weight tot_stake stake l vset frozen + s12 s8 s3 XCHG3 // l members best_stake m vset m_stake i tot_weight tot_stake frozen credits src_addr stake + ~credit_to CALLDICT // l members best_stake m vset m_stake i tot_weight tot_stake frozen credits }>ELSE<{ - s11 s7 s3 XCHG3 - 2DROP // l members best_stake m vset m_stake i tot_stake frozen credits + s12 s8 s3 XCHG3 + 2DROP // l members best_stake m vset m_stake i tot_weight tot_stake frozen credits }> - s0 s3 XCHG // l members best_stake m vset m_stake credits tot_stake frozen i - INC // l members best_stake m vset m_stake credits tot_stake frozen i - s9 PUSH // l members best_stake m vset m_stake credits tot_stake frozen i l - ISNULL // l members best_stake m vset m_stake credits tot_stake frozen i _246 - s4 s10 XCHG - s4 s6 XCHG - s4 s4 s0 XCHG3 // credits members best_stake m l m_stake i tot_stake vset frozen _246 - }> // credits members best_stake m l m_stake i tot_stake vset frozen - s3 POP - s3 POP - s3 POP - s5 POP // credits frozen best_stake m tot_stake vset - s1 s3 PUXC // credits frozen vset m tot_stake tot_stake best_stake - EQUAL // credits frozen vset m tot_stake _248 + s0 s4 XCHG // l members best_stake m vset m_stake credits tot_weight tot_stake frozen i + INC // l members best_stake m vset m_stake credits tot_weight tot_stake frozen i + s10 PUSH // l members best_stake m vset m_stake credits tot_weight tot_stake frozen i l + ISNULL // l members best_stake m vset m_stake credits tot_weight tot_stake frozen i _251 + s5 s11 XCHG + s5 s7 XCHG + s1 s5 XCHG + s3 s4 XCHG + s1 s2 XCHG // credits members best_stake m l m_stake i tot_stake tot_weight vset frozen _251 + }> // credits members best_stake m l m_stake i tot_stake tot_weight vset frozen + s4 POP + s4 POP + s4 POP + s6 POP // credits tot_stake best_stake m tot_weight vset frozen + s5 s4 PUXC // credits tot_stake frozen m tot_weight vset tot_stake best_stake + EQUAL // credits tot_stake frozen m tot_weight vset _253 49 THROWIFNOT - s2 s3 XCHG - SWAP // credits vset frozen tot_stake m + s3 s3 s4 XCHG3 + SWAP // credits vset tot_weight frozen tot_stake m }> conduct_elections PROC:<{ // ds elect credits SWAP // ds credits elect - unpack_elect CALLDICT // ds credits _130 _131 _132 _133 _134 _135 _136 + unpack_elect CALLDICT // ds credits _132 _133 _134 _135 _136 _137 _138 s4 POP // ds credits elect_at elect_close finished total_stake members failed NOW // ds credits elect_at elect_close finished total_stake members failed _11 s5 PUSH // ds credits elect_at elect_close finished total_stake members failed _11 elect_close @@ -1166,109 +1171,111 @@ PROGRAM{ s8 PUSH s3 s2 XCPU s7 s7 XCHG2 // ds members elect_at elect_close min_stake total_stake credits members min_stake max_stake min_total_stake max_stake_factor - try_elect CALLDICT // ds members elect_at elect_close min_stake total_stake credits vdict frozen total_stakes cnt - DUP // ds members elect_at elect_close min_stake total_stake credits vdict frozen total_stakes cnt cnt - 0 EQINT // ds members elect_at elect_close min_stake total_stake credits vdict frozen total_stakes cnt failed - DUP // ds members elect_at elect_close min_stake total_stake credits vdict frozen total_stakes cnt failed failed - NOT // ds members elect_at elect_close min_stake total_stake credits vdict frozen total_stakes cnt failed finished - s10 PUSH + try_elect CALLDICT // ds members elect_at elect_close min_stake total_stake credits vdict total_weight frozen total_stakes cnt + DUP // ds members elect_at elect_close min_stake total_stake credits vdict total_weight frozen total_stakes cnt cnt + 0 EQINT // ds members elect_at elect_close min_stake total_stake credits vdict total_weight frozen total_stakes cnt failed + DUP // ds members elect_at elect_close min_stake total_stake credits vdict total_weight frozen total_stakes cnt failed failed + NOT // ds members elect_at elect_close min_stake total_stake credits vdict total_weight frozen total_stakes cnt failed finished + s11 PUSH s0 s6 XCHG - s5 s10 XCHG - s4 s9 XCHG - s3 s8 XCHG - s12 s12 s12 XCHG3 // ds vdict elect_at frozen total_stakes cnt credits elect_at elect_close min_stake total_stake members failed finished - pack_elect CALLDICT // ds vdict elect_at frozen total_stakes cnt credits elect - s2 PUSH // ds vdict elect_at frozen total_stakes cnt credits elect cnt - IFNOTJMP:<{ // ds vdict elect_at frozen total_stakes cnt credits elect + s5 s11 XCHG + s4 s10 XCHG + s3 s9 XCHG + s13 s13 s13 XCHG3 // ds total_weight elect_at frozen total_stakes cnt credits vdict elect_at elect_close min_stake total_stake members failed finished + pack_elect CALLDICT // ds total_weight elect_at frozen total_stakes cnt credits vdict elect + s3 PUSH // ds total_weight elect_at frozen total_stakes cnt credits vdict elect cnt + IFNOTJMP:<{ // ds total_weight elect_at frozen total_stakes cnt credits vdict elect + NIP s2 POP s2 POP s2 POP s2 POP s2 POP // ds elect credits - NEWC // ds elect credits _48 - s1 s2 XCHG // ds credits elect _48 - STDICT // ds credits _49 - STDICT // ds _50 - SWAP // _50 ds - STSLICER // _51 - ENDC // _52 + NEWC // ds elect credits _49 + s1 s2 XCHG // ds credits elect _49 + STDICT // ds credits _50 + STDICT // ds _51 + SWAP // _51 ds + STSLICER // _52 + ENDC // _53 c4 POP - postpone_elections CALLDICT // _54 - }> // ds vdict elect_at frozen total_stakes cnt credits elect - get_validator_conf CALLDICT // ds vdict elect_at frozen total_stakes cnt credits elect _150 _151 _152 _153 - s2 POP // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held elect_end_before - NOW // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held elect_end_before _61 - SWAP // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held _61 elect_end_before - ADD // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held _62 - -60 ADDCONST // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held _64 - s8 PUSH // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held _64 elect_at - MAX // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start - 16 PUSHINT // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start _67=16 - CONFIGOPTPARAM // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start _68 - CTOS // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start _69 - 16 PUSHINT // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start _69 _70=16 - SDSKIPFIRST // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start _71 - 16 PLDU // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start main_validators - s6 s(-1) PUXC // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start cnt main_validators - MIN // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start _75 - s1 s3 PUSH2 // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start _75 start elect_for - ADD // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start _75 _76 - 17 PUSHINT // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start _75 _76 _77=17 - NEWC // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start _75 _76 _77=17 _78 - 8 STU // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start _75 _76 _80 - s3 s(-1) PUXC // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start _75 _76 start _80 - 32 STU // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start _75 _76 _82 - 32 STU // ds vdict elect_at frozen total_stakes cnt credits elect elect_for stake_held start _75 _84 - s1 s7 XCHG // ds vdict elect_at frozen total_stakes _75 credits elect elect_for stake_held start cnt _84 - 16 STU // ds vdict elect_at frozen total_stakes _75 credits elect elect_for stake_held start _86 - s1 s6 XCHG // ds vdict elect_at frozen total_stakes start credits elect elect_for stake_held _75 _86 - 16 STU // ds vdict elect_at frozen total_stakes start credits elect elect_for stake_held _88 - s0 s9 XCHG // ds _88 elect_at frozen total_stakes start credits elect elect_for stake_held vdict - CTOS // ds _88 elect_at frozen total_stakes start credits elect elect_for stake_held _89 - s1 s9 XCHG // ds stake_held elect_at frozen total_stakes start credits elect elect_for _88 _89 - STSLICER // ds stake_held elect_at frozen total_stakes start credits elect elect_for _90 - ENDC // ds stake_held elect_at frozen total_stakes start credits elect elect_for vset - 0 PUSHINT // ds stake_held elect_at frozen total_stakes start credits elect elect_for vset _93=0 - CONFIGOPTPARAM // ds stake_held elect_at frozen total_stakes start credits elect elect_for vset _94 - CTOS // ds stake_held elect_at frozen total_stakes start credits elect elect_for vset _95 - 256 PLDU // ds stake_held elect_at frozen total_stakes start credits elect elect_for vset config_addr - s1 s8 PUSH2 // ds stake_held elect_at frozen total_stakes start credits elect elect_for vset config_addr vset elect_at + postpone_elections CALLDICT // _55 + }> // ds total_weight elect_at frozen total_stakes cnt credits vdict elect + get_validator_conf CALLDICT // ds total_weight elect_at frozen total_stakes cnt credits vdict elect _153 _154 _155 _156 + s2 POP // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held elect_end_before + NOW // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held elect_end_before _62 + SWAP // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held _62 elect_end_before + ADD // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held _63 + -60 ADDCONST // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held _65 + s9 PUSH // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held _65 elect_at + MAX // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start + 16 PUSHINT // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start _68=16 + CONFIGOPTPARAM // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start _69 + CTOS // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start _70 + 16 PUSHINT // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start _70 _71=16 + SDSKIPFIRST // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start _72 + 16 PLDU // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start main_validators + s7 s(-1) PUXC // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start cnt main_validators + MIN // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start _76 + s1 s3 PUSH2 // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start _76 start elect_for + ADD // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start _76 _77 + 18 PUSHINT // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start _76 _77 _78=18 + NEWC // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start _76 _77 _78=18 _79 + 8 STU // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start _76 _77 _81 + s3 s(-1) PUXC // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start _76 _77 start _81 + 32 STU // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start _76 _77 _83 + 32 STU // ds total_weight elect_at frozen total_stakes cnt credits vdict elect elect_for stake_held start _76 _85 + s1 s8 XCHG // ds total_weight elect_at frozen total_stakes _76 credits vdict elect elect_for stake_held start cnt _85 + 16 STU // ds total_weight elect_at frozen total_stakes _76 credits vdict elect elect_for stake_held start _87 + s1 s7 XCHG // ds total_weight elect_at frozen total_stakes start credits vdict elect elect_for stake_held _76 _87 + 16 STU // ds total_weight elect_at frozen total_stakes start credits vdict elect elect_for stake_held _89 + s1 s10 XCHG // ds stake_held elect_at frozen total_stakes start credits vdict elect elect_for total_weight _89 + 64 STU // ds stake_held elect_at frozen total_stakes start credits vdict elect elect_for _91 + s1 s3 XCHG // ds stake_held elect_at frozen total_stakes start credits elect_for elect vdict _91 + STDICT // ds stake_held elect_at frozen total_stakes start credits elect_for elect _92 + ENDC // ds stake_held elect_at frozen total_stakes start credits elect_for elect vset + 0 PUSHINT // ds stake_held elect_at frozen total_stakes start credits elect_for elect vset _95=0 + CONFIGOPTPARAM // ds stake_held elect_at frozen total_stakes start credits elect_for elect vset _96 + CTOS // ds stake_held elect_at frozen total_stakes start credits elect_for elect vset _97 + 256 PLDU // ds stake_held elect_at frozen total_stakes start credits elect_for elect vset config_addr + s1 s8 PUSH2 // ds stake_held elect_at frozen total_stakes start credits elect_for elect vset config_addr vset elect_at send_validator_set_to_config CALLDICT - s0 s9 XCHG // vset stake_held elect_at frozen total_stakes start credits elect elect_for ds - LDDICT // vset stake_held elect_at frozen total_stakes start credits elect elect_for past_elect ds - FALSE // vset stake_held elect_at frozen total_stakes start credits elect elect_for past_elect ds _103 - s0 s11 XCHG // _103 stake_held elect_at frozen total_stakes start credits elect elect_for past_elect ds vset - HASHCU // _103 stake_held elect_at frozen total_stakes start credits elect elect_for past_elect ds _104 - s6 s3 XCHG2 // _103 stake_held elect_at frozen total_stakes ds credits elect _104 past_elect start elect_for - ADD // _103 stake_held elect_at frozen total_stakes ds credits elect _104 past_elect _105 - s9 PUSH // _103 stake_held elect_at frozen total_stakes ds credits elect _104 past_elect _105 stake_held - ADD // _103 stake_held elect_at frozen total_stakes ds credits elect _104 past_elect _106 - NEWC // _103 stake_held elect_at frozen total_stakes ds credits elect _104 past_elect _106 _107 - 32 STU // _103 stake_held elect_at frozen total_stakes ds credits elect _104 past_elect _109 - s1 s9 XCHG // _103 past_elect elect_at frozen total_stakes ds credits elect _104 stake_held _109 - 32 STU // _103 past_elect elect_at frozen total_stakes ds credits elect _104 _111 - 256 STU // _103 past_elect elect_at frozen total_stakes ds credits elect _113 - s1 s5 XCHG // _103 past_elect elect_at elect total_stakes ds credits frozen _113 - STDICT // _103 past_elect elect_at elect total_stakes ds credits _114 - s0 s3 XCHG2 // _103 past_elect elect_at elect credits ds _114 total_stakes - STGRAMS // _103 past_elect elect_at elect credits ds _115 - 0 PUSHINT // _103 past_elect elect_at elect credits ds _115 _116=0 - STGRAMS // _103 past_elect elect_at elect credits ds _117 - s1 s6 XCHG // ds past_elect elect_at elect credits _103 _117 - 1 STI // ds past_elect elect_at elect credits _119 + s0 s9 XCHG // vset stake_held elect_at frozen total_stakes start credits elect_for elect ds + LDDICT // vset stake_held elect_at frozen total_stakes start credits elect_for elect past_elect ds + FALSE // vset stake_held elect_at frozen total_stakes start credits elect_for elect past_elect ds _105 + s0 s11 XCHG // _105 stake_held elect_at frozen total_stakes start credits elect_for elect past_elect ds vset + HASHCU // _105 stake_held elect_at frozen total_stakes start credits elect_for elect past_elect ds _106 + s6 s4 XCHG2 // _105 stake_held elect_at frozen total_stakes ds credits _106 elect past_elect start elect_for + ADD // _105 stake_held elect_at frozen total_stakes ds credits _106 elect past_elect _107 + s9 PUSH // _105 stake_held elect_at frozen total_stakes ds credits _106 elect past_elect _107 stake_held + ADD // _105 stake_held elect_at frozen total_stakes ds credits _106 elect past_elect _108 + NEWC // _105 stake_held elect_at frozen total_stakes ds credits _106 elect past_elect _108 _109 + 32 STU // _105 stake_held elect_at frozen total_stakes ds credits _106 elect past_elect _111 + s1 s9 XCHG // _105 past_elect elect_at frozen total_stakes ds credits _106 elect stake_held _111 + 32 STU // _105 past_elect elect_at frozen total_stakes ds credits _106 elect _113 + s1 s2 XCHG // _105 past_elect elect_at frozen total_stakes ds credits elect _106 _113 + 256 STU // _105 past_elect elect_at frozen total_stakes ds credits elect _115 + s1 s5 XCHG // _105 past_elect elect_at elect total_stakes ds credits frozen _115 + STDICT // _105 past_elect elect_at elect total_stakes ds credits _116 + s0 s3 XCHG2 // _105 past_elect elect_at elect credits ds _116 total_stakes + STGRAMS // _105 past_elect elect_at elect credits ds _117 + 0 PUSHINT // _105 past_elect elect_at elect credits ds _117 _118=0 + STGRAMS // _105 past_elect elect_at elect credits ds _119 + s1 s6 XCHG // ds past_elect elect_at elect credits _105 _119 + 1 STI // ds past_elect elect_at elect credits _121 s0 s3 s4 XCHG3 - 32 PUSHINT // ds elect credits _119 elect_at past_elect _120=32 + 32 PUSHINT // ds elect credits _121 elect_at past_elect _122=32 DICTUSETB // ds elect credits past_elect - NEWC // ds elect credits past_elect _122 - s1 s3 XCHG // ds past_elect credits elect _122 - STDICT // ds past_elect credits _123 - STDICT // ds past_elect _124 - STDICT // ds _125 - SWAP // _125 ds - STSLICER // _126 - ENDC // _127 + NEWC // ds elect credits past_elect _124 + s1 s3 XCHG // ds past_elect credits elect _124 + STDICT // ds past_elect credits _125 + STDICT // ds past_elect _126 + STDICT // ds _127 + SWAP // _127 ds + STSLICER // _128 + ENDC // _129 c4 POP - TRUE // _129 + TRUE // _131 }> update_active_vset_id PROC:<{ // diff --git a/submodules/ton/tonlib-src/crypto/smartcont/auto/wallet3-code.cpp b/submodules/ton/tonlib-src/crypto/smartcont/auto/wallet3-code.cpp new file mode 100644 index 0000000000..90e47b54d1 --- /dev/null +++ b/submodules/ton/tonlib-src/crypto/smartcont/auto/wallet3-code.cpp @@ -0,0 +1 @@ +with_tvm_code("wallet3", "te6ccgEBBgEAcwABFP8A9KQT9KDyyAsBAgEgAgMCAUgEBQCW8oMI1xgg0x/TH9Mf+CMTu/Jj7UTQ0x/TH9P/0VEyuvKhUUS68qIE+QFUEFX5EPKj+ACTINdKltMH1AL7AOgwAaTIyx/LH8v/ye1UAATQMAARoJkv2omhrhY/"); diff --git a/submodules/ton/tonlib-src/crypto/smartcont/auto/wallet3-code.fif b/submodules/ton/tonlib-src/crypto/smartcont/auto/wallet3-code.fif new file mode 100644 index 0000000000..b0b45d7516 --- /dev/null +++ b/submodules/ton/tonlib-src/crypto/smartcont/auto/wallet3-code.fif @@ -0,0 +1,65 @@ +// automatically generated from `smartcont/stdlib.fc` `smartcont/wallet3-code.fc` +PROGRAM{ + DECLPROC recv_internal + DECLPROC recv_external + 85143 DECLMETHOD seqno + recv_internal PROC:<{ + // in_msg + DROP // + }> + recv_external PROC:<{ + // in_msg + 9 PUSHPOW2 // in_msg _3=512 + LDSLICEX // signature in_msg + DUP // signature in_msg cs + 32 LDU // signature in_msg _9 cs + 32 LDU // signature in_msg _9 _12 cs + 32 LDU // signature in_msg subwallet_id valid_until msg_seqno cs + NOW // signature in_msg subwallet_id valid_until msg_seqno cs _19 + s1 s3 XCHG // signature in_msg subwallet_id cs msg_seqno valid_until _19 + LEQ // signature in_msg subwallet_id cs msg_seqno _20 + 35 THROWIF + c4 PUSH // signature in_msg subwallet_id cs msg_seqno _23 + CTOS // signature in_msg subwallet_id cs msg_seqno ds + 32 LDU // signature in_msg subwallet_id cs msg_seqno _28 ds + 32 LDU // signature in_msg subwallet_id cs msg_seqno _28 _31 ds + 256 LDU // signature in_msg subwallet_id cs msg_seqno stored_seqno stored_subwallet public_key ds + ENDS + s3 s2 XCPU // signature in_msg subwallet_id cs public_key stored_seqno stored_subwallet msg_seqno stored_seqno + EQUAL // signature in_msg subwallet_id cs public_key stored_seqno stored_subwallet _39 + 33 THROWIFNOT + s4 s4 XCPU // signature in_msg stored_subwallet cs public_key stored_seqno subwallet_id stored_subwallet + EQUAL // signature in_msg stored_subwallet cs public_key stored_seqno _42 + 34 THROWIFNOT + s0 s4 XCHG // signature stored_seqno stored_subwallet cs public_key in_msg + HASHSU // signature stored_seqno stored_subwallet cs public_key _45 + s0 s5 s5 XC2PU // public_key stored_seqno stored_subwallet cs _45 signature public_key + CHKSIGNU // public_key stored_seqno stored_subwallet cs _46 + 35 THROWIFNOT + ACCEPT // public_key stored_seqno stored_subwallet cs + WHILE:<{ + DUP // public_key stored_seqno stored_subwallet cs cs + SREFS // public_key stored_seqno stored_subwallet cs _51 + }>DO<{ // public_key stored_seqno stored_subwallet cs + 8 LDU // public_key stored_seqno stored_subwallet mode cs + LDREF // public_key stored_seqno stored_subwallet mode _56 cs + s0 s2 XCHG // public_key stored_seqno stored_subwallet cs _56 mode + SENDRAWMSG + }> // public_key stored_seqno stored_subwallet cs + DROP // public_key stored_seqno stored_subwallet + SWAP // public_key stored_subwallet stored_seqno + INC // public_key stored_subwallet _60 + NEWC // public_key stored_subwallet _60 _61 + 32 STU // public_key stored_subwallet _63 + 32 STU // public_key _65 + 256 STU // _67 + ENDC // _68 + c4 POP + }> + seqno PROC:<{ + // + c4 PUSH // _0 + CTOS // _1 + 32 PLDU // _3 + }> +}END>c diff --git a/submodules/ton/tonlib-src/crypto/smartcont/config-code.fc b/submodules/ton/tonlib-src/crypto/smartcont/config-code.fc index c9c09a9596..3a897d4cd0 100644 --- a/submodules/ton/tonlib-src/crypto/smartcont/config-code.fc +++ b/submodules/ton/tonlib-src/crypto/smartcont/config-code.fc @@ -1,15 +1,32 @@ ;; Simple configuration smart contract () set_conf_param(int index, cell value) impure { - var cs = begin_parse(get_data()); + var cs = get_data().begin_parse(); var cfg_dict = cs~load_ref(); cfg_dict~idict_set_ref(32, index, value); set_data(begin_cell().store_ref(cfg_dict).store_slice(cs).end_cell()); } +(cell, int, int, cell) load_data() inline { + var cs = get_data().begin_parse(); + var (cfg_dict, stored_seqno, public_key) = (cs~load_ref(), cs~load_uint(32), cs~load_uint(256)); + var vote_dict = cs.slice_empty?() ? new_dict() : cs~load_dict(); + cs.end_parse(); + return (cfg_dict, stored_seqno, public_key, vote_dict); +} + +() store_data(cfg_dict, stored_seqno, public_key, vote_dict) impure inline { + set_data(begin_cell() + .store_ref(cfg_dict) + .store_uint(stored_seqno, 32) + .store_uint(public_key, 256) + .store_dict(vote_dict) + .end_cell()); +} + (int, int) check_validator_set(cell vset) { var cs = vset.begin_parse(); - throw_unless(9, cs~load_uint(8) == 0x11); ;; validators#11 + throw_if(9, (cs~load_uint(8) - 0x11) & -2); ;; validators#11 or validators_ext#12 int utime_since = cs~load_uint(32); int utime_until = cs~load_uint(32); int total = cs~load_uint(16); @@ -96,27 +113,79 @@ _ perform_action(cfg_dict, public_key, action, cs) { var param_value = cs~load_ref(); cs.end_parse(); cfg_dict~idict_set_ref(32, param_index, param_value); + return (cfg_dict, public_key); } elseif (action == 0x4e436f64) { ;; change configuration smart contract code var new_code = cs~load_ref(); set_code(new_code); - ifnot(cs.slice_empty?()) { - var old_code = get_c3(); - set_c3(new_code); - after_code_upgrade(cs, old_code); - set_c3(old_code); - } + var old_code = get_c3(); + set_c3(new_code); + after_code_upgrade(cs, old_code); + throw(0); + return (cfg_dict, public_key); } elseif (action == 0x50624b21) { ;; change configuration master public key public_key = cs~load_uint(256); cs.end_parse(); + return (cfg_dict, public_key); } elseif (action == 0x4e43ef05) { ;; change election smart contract code change_elector_code(cs); + return (cfg_dict, public_key); } else { throw_if(32, action); + return (cfg_dict, public_key); } - return (cfg_dict, public_key); +} + +slice get_validator_descr(int idx) inline_ref { + var vset = config_param(34); + if (vset.null?()) { + return null(); + } + var cs = begin_parse(vset); + cs~skip_bits(8 + 32 + 32 + 16 + 16); + var dict = begin_cell().store_slice(cs).end_cell(); + var (value, _) = dict.udict_get?(16, idx); + return value; +} + +(int, int) unpack_validator_descr(slice cs) inline { + ;; ed25519_pubkey#8e81278a pubkey:bits256 = SigPubKey; + ;; validator#53 public_key:SigPubKey weight:uint64 = ValidatorDescr; + ;; validator_addr#73 public_key:SigPubKey weight:uint64 adnl_addr:bits256 = ValidatorDescr; + throw_unless(41, (cs~load_uint(8) & ~ 0x20) == 0x53); + throw_unless(41, cs~load_uint(32) == 0x8e81278a); + return (cs~load_uint(256), cs~load_uint(64)); +} + +slice create_new_entry(cs) inline { + return begin_cell().store_int(false, 1).store_uint(0, 64).store_uint(0, 256).store_slice(cs).end_cell().begin_parse(); +} + +(cell, int, int, slice) unpack_suggestion(slice cs) inline { + return (cs~load_dict(), cs~load_uint(64), cs~load_uint(256), cs); +} + +builder pack_suggestion(cell voters, int sum_weight, int vset_id, slice body) inline { + return begin_cell().store_dict(voters).store_uint(sum_weight, 64).store_uint(vset_id, 256).store_slice(body); +} + +cell register_vote(vote_dict, action, cs, idx, weight) { + int hash = 0; + var entry = null(); + if (action & 1) { + hash = slice_hash(cs); + (entry, var found?) = vote_dict.udict_get?(256, hash); + ifnot (found?) { + entry = create_new_entry(cs); + } + } else { + hash = cs.preload_uint(256); + (entry, var found?) = vote_dict.udict_get?(256, hash); + throw_unless(42, found?); + } + return vote_dict; } () recv_external(slice in_msg) impure { @@ -126,16 +195,28 @@ _ perform_action(cfg_dict, public_key, action, cs) { int msg_seqno = cs~load_uint(32); var valid_until = cs~load_uint(32); throw_if(35, valid_until < now()); - var cs2 = begin_parse(get_data()); - var cfg_dict = cs2~load_ref(); - var stored_seqno = cs2~load_uint(32); - var public_key = cs2~load_uint(256); - cs2.end_parse(); + var (cfg_dict, stored_seqno, public_key, vote_dict) = load_data(); throw_unless(33, msg_seqno == stored_seqno); + ifnot ((action - 0x566f7465) & -2) { + var idx = cs~load_uint(16); + var vdescr = get_validator_descr(idx); + var (val_pubkey, weight) = unpack_validator_descr(vdescr); + throw_unless(34, check_signature(slice_hash(in_msg), signature, val_pubkey)); + accept_message(); + stored_seqno += 1; + store_data(cfg_dict, stored_seqno, public_key, vote_dict); + commit(); + vote_dict = register_vote(vote_dict, action, cs, idx, weight); + store_data(cfg_dict, stored_seqno, public_key, vote_dict); + return (); + } throw_unless(34, check_signature(slice_hash(in_msg), signature, public_key)); accept_message(); + stored_seqno += 1; + store_data(cfg_dict, stored_seqno, public_key, vote_dict); + commit(); (cfg_dict, public_key) = perform_action(cfg_dict, public_key, action, cs); - set_data(begin_cell().store_ref(cfg_dict).store_uint(stored_seqno + 1, 32).store_uint(public_key, 256).end_cell()); + store_data(cfg_dict, stored_seqno, public_key, vote_dict); } () run_ticktock(int is_tock) impure { diff --git a/submodules/ton/tonlib-src/crypto/smartcont/elector-code.fc b/submodules/ton/tonlib-src/crypto/smartcont/elector-code.fc index b97b0b3ce4..fe000c14d4 100644 --- a/submodules/ton/tonlib-src/crypto/smartcont/elector-code.fc +++ b/submodules/ton/tonlib-src/crypto/smartcont/elector-code.fc @@ -408,7 +408,7 @@ _ compute_total_stake(l, n, m_stake) { return tot_stake; } -(cell, cell, cell, int, int) try_elect(credits, members, min_stake, max_stake, min_total_stake, max_stake_factor) { +(cell, cell, int, cell, int, int) try_elect(credits, members, min_stake, max_stake, min_total_stake, max_stake_factor) { var cs = 16.config_param().begin_parse(); var (max_validators, _, min_validators) = (cs~load_uint(16), cs~load_uint(16), cs~load_uint(16)); cs.end_parse(); @@ -435,7 +435,7 @@ _ compute_total_stake(l, n, m_stake) { } until (~ f); n = min(n, max_validators); if (n < min_validators) { - return (credits, new_dict(), new_dict(), 0, 0); + return (credits, new_dict(), 0, new_dict(), 0, 0); } var l = nil; do { @@ -464,7 +464,7 @@ _ compute_total_stake(l, n, m_stake) { } } until (i >= n); if ((m == 0) | (best_stake < min_total_stake)) { - return (credits, new_dict(), new_dict(), 0, 0); + return (credits, new_dict(), 0, new_dict(), 0, 0); } ;; we have to select first m validators from list l l1 = touch(l); @@ -476,6 +476,7 @@ _ compute_total_stake(l, n, m_stake) { ;; create both the new validator set and the refund set int i = 0; var tot_stake = 0; + var tot_weight = 0; var vset = new_dict(); var frozen = new_dict(); do { @@ -492,6 +493,7 @@ _ compute_total_stake(l, n, m_stake) { ;; validator_addr#73 public_key:SigPubKey weight:uint64 adnl_addr:bits256 = ValidatorDescr; var weight = (true_stake << 60) / best_stake; tot_stake += true_stake; + tot_weight += weight; var vinfo = begin_cell() .store_uint(adnl_addr ? 0x73 : 0x53, 8) ;; validator_addr#73 or validator#53 .store_uint(0x8e81278a, 32) ;; ed25519_pubkey#8e81278a @@ -514,7 +516,7 @@ _ compute_total_stake(l, n, m_stake) { i += 1; } until (l.null?()); throw_unless(49, tot_stake == best_stake); - return (credits, vset, frozen, tot_stake, m); + return (credits, vset, tot_weight, frozen, tot_stake, m); } int conduct_elections(ds, elect, credits) impure { @@ -545,7 +547,7 @@ int conduct_elections(ds, elect, credits) impure { ;; elections finished return false; } - (credits, var vdict, var frozen, var total_stakes, var cnt) = try_elect(credits, members, min_stake, max_stake, min_total_stake, max_stake_factor); + (credits, var vdict, var total_weight, var frozen, var total_stakes, var cnt) = try_elect(credits, members, min_stake, max_stake, min_total_stake, max_stake_factor); ;; pack elections; if cnt==0, set failed=true, finished=false. failed = (cnt == 0); finished = ~ failed; @@ -561,12 +563,13 @@ int conduct_elections(ds, elect, credits) impure { var start = max(now() + elect_end_before - 60, elect_at); var main_validators = config_param(16).begin_parse().skip_bits(16).preload_uint(16); var vset = begin_cell() - .store_uint(0x11, 8) ;; validators#11 + .store_uint(0x12, 8) ;; validators_ext#12 .store_uint(start, 32) ;; utime_since:uint32 .store_uint(start + elect_for, 32) ;; utime_until:uint32 .store_uint(cnt, 16) ;; total:(## 16) - .store_uint(min(cnt, main_validators), 16) ;; main:(## 16) - .store_slice(vdict.begin_parse()) ;; list:(Hashmap 16 ValidatorDescr) + .store_uint(min(cnt, main_validators), 16) ;; main:(## 16) + .store_uint(total_weight, 64) ;; total_weight:uint64 + .store_dict(vdict) ;; list:(HashmapE 16 ValidatorDescr) .end_cell(); var config_addr = config_param(0).begin_parse().preload_uint(256); send_validator_set_to_config(config_addr, vset, elect_at); diff --git a/submodules/ton/tonlib-src/crypto/smartcont/gen-zerostate.fif b/submodules/ton/tonlib-src/crypto/smartcont/gen-zerostate.fif index 70abe412e0..66d686241e 100644 --- a/submodules/ton/tonlib-src/crypto/smartcont/gen-zerostate.fif +++ b/submodules/ton/tonlib-src/crypto/smartcont/gen-zerostate.fif @@ -225,6 +225,22 @@ Masterchain swap "config-master" +suffix +".addr" save-address-verbose // Other data +/* + * + * Initial wallets (test) + * + */ + +// pubkey amount `create-wallet1` or pubkey amount `create-wallet2` +PK'PuZPPXK5Rff9SvtoS7Y9lUuEixvy-J6aishYFj3Qn6P0pJMb GR$100000000 create-wallet1 +PK'PuYiB1zAWzr4p8j6I681+sGUrRGcn6Ylf7vXl0xaUl/w6Xfg GR$1700000000 create-wallet0 + +/* + * + * Create state + * + */ + create_state cr cr ."new state is:" cr dup B dup Bx. cr diff --git a/submodules/ton/tonlib-src/crypto/smartcont/new-wallet-v3.fif b/submodules/ton/tonlib-src/crypto/smartcont/new-wallet-v3.fif new file mode 100644 index 0000000000..187519c9cd --- /dev/null +++ b/submodules/ton/tonlib-src/crypto/smartcont/new-wallet-v3.fif @@ -0,0 +1,63 @@ +#!/usr/bin/fift -s +"TonUtil.fif" include +"Asm.fif" include + +{ ."usage: " @' $0 type ." []" cr + ."Creates a new advanced wallet with unique 32-bit identifier in specified workchain, with private key saved to or loaded from .pk" cr + ."('new-wallet.pk' by default)" cr 1 halt +} : usage +$# 2- -2 and ' usage if + +$1 parse-workchain-id =: wc // set workchain id from command line argument +$2 parse-int =: subwallet-id +def? $3 { @' $3 } { "new-wallet" } cond constant file-base + +."Creating new advanced v3 wallet in workchain " wc . cr +."with unique wallet id " subwallet-id . cr + +// Create new advanced wallet; code adapted from `auto/wallet3-code.fif` +<{ SETCP0 DUP IFNOTRET // return if recv_internal + DUP 85143 INT EQUAL IFJMP:<{ // "seqno" get-method + DROP c4 PUSHCTR CTOS 32 PLDU // cnt + }> + INC 32 THROWIF // fail unless recv_external + 9 PUSHPOW2 LDSLICEX DUP 32 LDU 32 LDU 32 LDU // signature in_msg subwallet_id valid_until msg_seqno cs + NOW s1 s3 XCHG LEQ 35 THROWIF // signature in_msg subwallet_id cs msg_seqno + c4 PUSH CTOS 32 LDU 32 LDU 256 LDU ENDS // signature in_msg subwallet_id cs msg_seqno stored_seqno stored_subwallet public_key + s3 s2 XCPU EQUAL 33 THROWIFNOT // signature in_msg subwallet_id cs public_key stored_seqno stored_subwallet + s4 s4 XCPU EQUAL 34 THROWIFNOT // signature in_msg stored_subwallet cs public_key stored_seqno + s0 s4 XCHG HASHSU // signature stored_seqno stored_subwallet cs public_key msg_hash + s0 s5 s5 XC2PU // public_key stored_seqno stored_subwallet cs msg_hash signature public_key + CHKSIGNU 35 THROWIFNOT // public_key stored_seqno stored_subwallet cs + ACCEPT + WHILE:<{ + DUP SREFS // public_key stored_seqno stored_subwallet cs _51 + }>DO<{ // public_key stored_seqno stored_subwallet cs + 8 LDU LDREF s0 s2 XCHG // public_key stored_seqno stored_subwallet cs _56 mode + SENDRAWMSG + }> // public_key stored_seqno stored_subwallet cs + ENDS SWAP INC // public_key stored_subwallet seqno' + NEWC 32 STU 32 STU 256 STU ENDC c4 POP +}>c // >libref +// code + // data +null // no libraries + // create StateInit +dup ."StateInit: " +dup ."signing message: " +dup ."External message for initialization is " B dup Bx. cr +file-base +"-query.boc" tuck B>file +."(Saved wallet creating query to file " type .")" cr diff --git a/submodules/ton/tonlib-src/crypto/smartcont/stdlib.fc b/submodules/ton/tonlib-src/crypto/smartcont/stdlib.fc index d78f9ef1a5..0798a0a1b5 100644 --- a/submodules/ton/tonlib-src/crypto/smartcont/stdlib.fc +++ b/submodules/ton/tonlib-src/crypto/smartcont/stdlib.fc @@ -16,6 +16,7 @@ forall X -> X first(tuple t) asm "FIRST"; forall X -> X second(tuple t) asm "SECOND"; forall X -> X third(tuple t) asm "THIRD"; forall X -> X fourth(tuple t) asm "3 INDEX"; +forall X -> X null() asm "PUSHNULL"; int now() asm "NOW"; slice my_address() asm "MYADDR"; @@ -54,8 +55,10 @@ cell preload_ref(slice s) asm "PLDREF"; ;; slice preload_bits(slice s, int len) asm "PLDSLICEX"; (slice, int) load_grams(slice s) asm( -> 1 0) "LDGRAMS"; slice skip_bits(slice s, int len) asm "SDSKIPFIRST"; +(slice, ()) ~skip_bits(slice s, int len) asm "SDSKIPFIRST"; slice first_bits(slice s, int len) asm "SDCUTFIRST"; -(slice, ()) skip_last_bits(slice s, int len) asm "SDSKIPLAST"; +slice skip_last_bits(slice s, int len) asm "SDSKIPLAST"; +(slice, ()) ~skip_last_bits(slice s, int len) asm "SDSKIPLAST"; (slice, cell) load_dict(slice s) asm( -> 1 0) "LDDICT"; cell preload_dict(slice s) asm "PLDDICT"; slice skip_dict(slice s) asm "SKIPDICT"; diff --git a/submodules/ton/tonlib-src/crypto/smartcont/wallet-v3.fif b/submodules/ton/tonlib-src/crypto/smartcont/wallet-v3.fif new file mode 100644 index 0000000000..b23f941adf --- /dev/null +++ b/submodules/ton/tonlib-src/crypto/smartcont/wallet-v3.fif @@ -0,0 +1,50 @@ +#!/usr/bin/fift -s +"TonUtil.fif" include + +{ ."usage: " @' $0 type ." [-B ] []" cr + ."Creates a request to advanced wallet created by new-wallet-v3.fif, with private key loaded from file .pk " + ."and address from .addr, and saves it into .boc ('wallet-query.boc' by default)" cr 1 halt +} : usage +def? $7 { @' $6 "-B" $= { @' $7 =: body-boc-file [forget] $7 def? $8 { @' $8 =: $6 [forget] $8 } { [forget] $6 } cond + @' $# 2- =: $# } if } if +$# dup 5 < swap 6 > or ' usage if + +true constant bounce + +$1 =: file-base +$2 bounce parse-load-address =: bounce 2=: dest_addr +$3 parse-int =: subwallet_id +$4 parse-int =: seqno +$5 $>GR =: amount +def? $6 { @' $6 } { "wallet-query" } cond constant savefile +3 constant send-mode // mode for SENDRAWMSG: +1 - sender pays fees, +2 - ignore errors +60 constant timeout // external message expires in 60 seconds + +file-base +".addr" load-address +2dup 2constant wallet_addr +."Source wallet address = " 2dup .addr cr 6 .Addr cr +file-base +".pk" load-keypair nip constant wallet_pk + +def? body-boc-file { @' body-boc-file file>B B>boc } { } cond +constant body-cell + +."Transferring " amount .GR ."to account " +dest_addr 2dup bounce 7 + .Addr ." = " .addr +."subwallet_id=0x" subwallet_id x. +."seqno=0x" seqno x. ."bounce=" bounce . cr +."Body of transfer message is " body-cell + +dup ."signing message: " +dup ."resulting external message: " B dup Bx. cr +savefile +".boc" tuck B>file +."Query expires in " timeout . ."seconds" cr +."(Saved to file " type .")" cr diff --git a/submodules/ton/tonlib-src/crypto/smartcont/wallet3-code.fc b/submodules/ton/tonlib-src/crypto/smartcont/wallet3-code.fc new file mode 100644 index 0000000000..a52cb1ec04 --- /dev/null +++ b/submodules/ton/tonlib-src/crypto/smartcont/wallet3-code.fc @@ -0,0 +1,35 @@ +;; Simple wallet smart contract + +() recv_internal(slice in_msg) impure { + ;; do nothing for internal messages +} + +() recv_external(slice in_msg) impure { + var signature = in_msg~load_bits(512); + var cs = in_msg; + var (subwallet_id, valid_until, msg_seqno) = (cs~load_uint(32), cs~load_uint(32), cs~load_uint(32)); + throw_if(35, valid_until <= now()); + var ds = get_data().begin_parse(); + var (stored_seqno, stored_subwallet, public_key) = (ds~load_uint(32), ds~load_uint(32), ds~load_uint(256)); + ds.end_parse(); + throw_unless(33, msg_seqno == stored_seqno); + throw_unless(34, subwallet_id == stored_subwallet); + throw_unless(35, check_signature(slice_hash(in_msg), signature, public_key)); + accept_message(); + cs~touch(); + while (cs.slice_refs()) { + var mode = cs~load_uint(8); + send_raw_message(cs~load_ref(), mode); + } + set_data(begin_cell() + .store_uint(stored_seqno + 1, 32) + .store_uint(stored_subwallet, 32) + .store_uint(public_key, 256) + .end_cell()); +} + +;; Get methods + +int seqno() method_id { + return get_data().begin_parse().preload_uint(32); +} diff --git a/submodules/ton/tonlib-src/crypto/smc-envelope/WalletV3.cpp b/submodules/ton/tonlib-src/crypto/smc-envelope/WalletV3.cpp new file mode 100644 index 0000000000..db39c725ef --- /dev/null +++ b/submodules/ton/tonlib-src/crypto/smc-envelope/WalletV3.cpp @@ -0,0 +1,130 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . + + Copyright 2017-2019 Telegram Systems LLP +*/ +#include "WalletV3.h" +#include "GenericAccount.h" + +#include "vm/boc.h" +#include "vm/cells/CellString.h" +#include "td/utils/base64.h" + +#include + +namespace ton { +td::Ref WalletV3::get_init_state(const td::Ed25519::PublicKey& public_key, td::uint32 wallet_id) noexcept { + auto code = get_init_code(); + auto data = get_init_data(public_key, wallet_id); + return GenericAccount::get_init_state(std::move(code), std::move(data)); +} + +td::Ref WalletV3::get_init_message(const td::Ed25519::PrivateKey& private_key, + td::uint32 wallet_id) noexcept { + td::uint32 seqno = 0; + td::uint32 valid_until = std::numeric_limits::max(); + auto signature = private_key + .sign(vm::CellBuilder() + .store_long(wallet_id, 32) + .store_long(valid_until, 32) + .store_long(seqno, 32) + .finalize() + ->get_hash() + .as_slice()) + .move_as_ok(); + return vm::CellBuilder() + .store_bytes(signature) + .store_long(wallet_id, 32) + .store_long(valid_until, 32) + .store_long(seqno, 32) + .finalize(); +} + +td::Ref WalletV3::make_a_gift_message(const td::Ed25519::PrivateKey& private_key, td::uint32 wallet_id, + td::uint32 seqno, td::uint32 valid_until, td::int64 gramms, + td::Slice message, const block::StdAddress& dest_address) noexcept { + td::int32 send_mode = 3; + if (gramms == -1) { + gramms = 0; + send_mode += 128; + } + vm::CellBuilder cb; + GenericAccount::store_int_message(cb, dest_address, gramms); + cb.store_bytes("\0\0\0\0", 4); + vm::CellString::store(cb, message, 35 * 8).ensure(); + auto message_inner = cb.finalize(); + + auto message_outer = vm::CellBuilder() + .store_long(wallet_id, 32) + .store_long(valid_until, 32) + .store_long(seqno, 32) + .store_long(send_mode, 8) + .store_ref(message_inner) + .finalize(); + auto signature = private_key.sign(message_outer->get_hash().as_slice()).move_as_ok(); + return vm::CellBuilder().store_bytes(signature).append_cellslice(vm::load_cell_slice(message_outer)).finalize(); +} + +td::Ref WalletV3::get_init_code() noexcept { + static auto res = [] { + auto serialized_code = td::base64_decode( + "te6ccgEBAQEAYgAAwP8AIN0gggFMl7qXMO1E0NcLH+Ck8mCDCNcYINMf0x/TH/gjE7vyY+1E0NMf0x/T/" + "9FRMrryoVFEuvKiBPkBVBBV+RDyo/gAkyDXSpbTB9QC+wDo0QGkyMsfyx/L/8ntVA==") + .move_as_ok(); + return vm::std_boc_deserialize(serialized_code).move_as_ok(); + }(); + return res; +} + +vm::CellHash WalletV3::get_init_code_hash() noexcept { + return get_init_code()->get_hash(); +} + +td::Ref WalletV3::get_init_data(const td::Ed25519::PublicKey& public_key, td::uint32 wallet_id) noexcept { + return vm::CellBuilder() + .store_long(0, 32) + .store_long(wallet_id, 32) + .store_bytes(public_key.as_octet_string()) + .finalize(); +} + +td::Result WalletV3::get_seqno() const { + return TRY_VM(get_seqno_or_throw()); +} + +td::Result WalletV3::get_seqno_or_throw() const { + if (state_.data.is_null()) { + return 0; + } + //FIXME use get method + return static_cast(vm::load_cell_slice(state_.data).fetch_ulong(32)); +} + +td::Result WalletV3::get_wallet_id() const { + return TRY_VM(get_wallet_id_or_throw()); +} + +td::Result WalletV3::get_wallet_id_or_throw() const { + if (state_.data.is_null()) { + return 0; + } + //FIXME use get method + auto cs = vm::load_cell_slice(state_.data); + cs.skip_first(32); + return static_cast(cs.fetch_ulong(32)); +} + +} // namespace ton diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/TestWallet.h b/submodules/ton/tonlib-src/crypto/smc-envelope/WalletV3.h similarity index 60% rename from submodules/ton/tonlib-src/tonlib/tonlib/TestWallet.h rename to submodules/ton/tonlib-src/crypto/smc-envelope/WalletV3.h index ef726b552d..a6e4162df2 100644 --- a/submodules/ton/tonlib-src/tonlib/tonlib/TestWallet.h +++ b/submodules/ton/tonlib-src/crypto/smc-envelope/WalletV3.h @@ -18,23 +18,33 @@ */ #pragma once +#include "smc-envelope/SmartContract.h" #include "vm/cells.h" #include "Ed25519.h" #include "block/block.h" -#include "CellString.h" +#include "vm/cells/CellString.h" -namespace tonlib { -class TestWallet { +namespace ton { +class WalletV3 : ton::SmartContract { public: + explicit WalletV3(State state) : ton::SmartContract(std::move(state)) { + } static constexpr unsigned max_message_size = vm::CellString::max_bytes; - static td::Ref get_init_state(const td::Ed25519::PublicKey& public_key) noexcept; - static td::Ref get_init_message(const td::Ed25519::PrivateKey& private_key) noexcept; - static td::Ref make_a_gift_message(const td::Ed25519::PrivateKey& private_key, td::uint32 seqno, - td::int64 gramms, td::Slice message, - const block::StdAddress& dest_address) noexcept; + static td::Ref get_init_state(const td::Ed25519::PublicKey& public_key, td::uint32 wallet_id) noexcept; + static td::Ref get_init_message(const td::Ed25519::PrivateKey& private_key, td::uint32 wallet_id) noexcept; + static td::Ref make_a_gift_message(const td::Ed25519::PrivateKey& private_key, td::uint32 wallet_id, + td::uint32 seqno, td::uint32 valid_until, td::int64 gramms, + td::Slice message, const block::StdAddress& dest_address) noexcept; static td::Ref get_init_code() noexcept; static vm::CellHash get_init_code_hash() noexcept; - static td::Ref get_init_data(const td::Ed25519::PublicKey& public_key) noexcept; + static td::Ref get_init_data(const td::Ed25519::PublicKey& public_key, td::uint32 wallet_id) noexcept; + + td::Result get_seqno() const; + td::Result get_wallet_id() const; + + private: + td::Result get_seqno_or_throw() const; + td::Result get_wallet_id_or_throw() const; }; -} // namespace tonlib +} // namespace ton diff --git a/submodules/ton/tonlib-src/crypto/test/Ed25519.cpp b/submodules/ton/tonlib-src/crypto/test/Ed25519.cpp index f4509791c4..5c263acf67 100644 --- a/submodules/ton/tonlib-src/crypto/test/Ed25519.cpp +++ b/submodules/ton/tonlib-src/crypto/test/Ed25519.cpp @@ -208,7 +208,7 @@ TEST(Crypto, almost_zero) { td::SecureString sig(64); td::SecureString msg(1); - pub.as_mutable_slice()[31] = (char)128; + pub.as_mutable_slice().ubegin()[31] = static_cast(128); for (td::int32 j = 0; j < 256; j++) { msg.as_mutable_slice()[0] = (char)j; if (td::Ed25519::PublicKey(pub.copy()).verify_signature(msg, sig).is_ok()) { diff --git a/submodules/ton/tonlib-src/crypto/test/test-smartcont.cpp b/submodules/ton/tonlib-src/crypto/test/test-smartcont.cpp index f9dd86522f..c0b991b620 100644 --- a/submodules/ton/tonlib-src/crypto/test/test-smartcont.cpp +++ b/submodules/ton/tonlib-src/crypto/test/test-smartcont.cpp @@ -34,6 +34,7 @@ #include "smc-envelope/TestGiver.h" #include "smc-envelope/TestWallet.h" #include "smc-envelope/Wallet.h" +#include "smc-envelope/WalletV3.h" #include "td/utils/base64.h" #include "td/utils/crypto.h" @@ -114,6 +115,33 @@ SETCP0 DUP IFNOTRET // return if recv_internal )ABCD"; return fift::compile_asm(code).move_as_ok(); } +td::Ref get_wallet_v3_source() { + std::string code = R"ABCD( +SETCP0 DUP IFNOTRET // return if recv_internal + DUP 85143 INT EQUAL IFJMP:<{ // "seqno" get-method + DROP c4 PUSHCTR CTOS 32 PLDU // cnt + }> + INC 32 THROWIF // fail unless recv_external + 9 PUSHPOW2 LDSLICEX DUP 32 LDU 32 LDU 32 LDU // signature in_msg subwallet_id valid_until msg_seqno cs + NOW s1 s3 XCHG LEQ 35 THROWIF // signature in_msg subwallet_id cs msg_seqno + c4 PUSH CTOS 32 LDU 32 LDU 256 LDU ENDS // signature in_msg subwallet_id cs msg_seqno stored_seqno stored_subwallet public_key + s3 s2 XCPU EQUAL 33 THROWIFNOT // signature in_msg subwallet_id cs public_key stored_seqno stored_subwallet + s4 s4 XCPU EQUAL 34 THROWIFNOT // signature in_msg stored_subwallet cs public_key stored_seqno + s0 s4 XCHG HASHSU // signature stored_seqno stored_subwallet cs public_key msg_hash + s0 s5 s5 XC2PU // public_key stored_seqno stored_subwallet cs msg_hash signature public_key + CHKSIGNU 35 THROWIFNOT // public_key stored_seqno stored_subwallet cs + ACCEPT + WHILE:<{ + DUP SREFS // public_key stored_seqno stored_subwallet cs _51 + }>DO<{ // public_key stored_seqno stored_subwallet cs + 8 LDU LDREF s0 s2 XCHG // public_key stored_seqno stored_subwallet cs _56 mode + SENDRAWMSG + }> // public_key stored_seqno stored_subwallet cs + ENDS SWAP INC // public_key stored_subwallet seqno' + NEWC 32 STU 32 STU 256 STU ENDC c4 POP +)ABCD"; + return fift::compile_asm(code).move_as_ok(); +} TEST(Tonlib, TestWallet) { LOG(ERROR) << td::base64_encode(std_boc_serialize(get_test_wallet_source()).move_as_ok()); @@ -209,6 +237,55 @@ TEST(Tonlib, Wallet) { CHECK(vm::std_boc_deserialize(wallet_query).move_as_ok()->get_hash() == gift_message->get_hash()); } +TEST(Tonlib, WalletV3) { + LOG(ERROR) << td::base64_encode(std_boc_serialize(get_wallet_v3_source()).move_as_ok()); + CHECK(get_wallet_v3_source()->get_hash() == ton::WalletV3::get_init_code()->get_hash()); + + auto fift_output = fift::mem_run_fift(load_source("smartcont/new-wallet-v3.fif"), {"aba", "0", "239"}).move_as_ok(); + + auto new_wallet_pk = fift_output.source_lookup.read_file("new-wallet.pk").move_as_ok().data; + auto new_wallet_query = fift_output.source_lookup.read_file("new-wallet-query.boc").move_as_ok().data; + auto new_wallet_addr = fift_output.source_lookup.read_file("new-wallet.addr").move_as_ok().data; + + td::Ed25519::PrivateKey priv_key{td::SecureString{new_wallet_pk}}; + auto pub_key = priv_key.get_public_key().move_as_ok(); + auto init_state = ton::WalletV3::get_init_state(pub_key, 239); + auto init_message = ton::WalletV3::get_init_message(priv_key, 239); + auto address = ton::GenericAccount::get_address(0, init_state); + + CHECK(address.addr.as_slice() == td::Slice(new_wallet_addr).substr(0, 32)); + + td::Ref res = ton::GenericAccount::create_ext_message(address, init_state, init_message); + + LOG(ERROR) << "-------"; + vm::load_cell_slice(res).print_rec(std::cerr); + LOG(ERROR) << "-------"; + vm::load_cell_slice(vm::std_boc_deserialize(new_wallet_query).move_as_ok()).print_rec(std::cerr); + CHECK(vm::std_boc_deserialize(new_wallet_query).move_as_ok()->get_hash() == res->get_hash()); + + fift_output.source_lookup.write_file("/main.fif", load_source("smartcont/wallet-v3.fif")).ensure(); + class ZeroOsTime : public fift::OsTime { + public: + td::uint32 now() override { + return 0; + } + }; + fift_output.source_lookup.set_os_time(std::make_unique()); + auto dest = block::StdAddress::parse("Ef9Tj6fMJP+OqhAdhKXxq36DL+HYSzCc3+9O6UNzqsgPfYFX").move_as_ok(); + fift_output = + fift::mem_run_fift(std::move(fift_output.source_lookup), + {"aba", "new-wallet", "Ef9Tj6fMJP+OqhAdhKXxq36DL+HYSzCc3+9O6UNzqsgPfYFX", "239", "123", "321"}) + .move_as_ok(); + auto wallet_query = fift_output.source_lookup.read_file("wallet-query.boc").move_as_ok().data; + auto gift_message = ton::GenericAccount::create_ext_message( + address, {}, ton::WalletV3::make_a_gift_message(priv_key, 239, 123, 60, 321000000000ll, "TESTv3", dest)); + LOG(ERROR) << "-------"; + vm::load_cell_slice(gift_message).print_rec(std::cerr); + LOG(ERROR) << "-------"; + vm::load_cell_slice(vm::std_boc_deserialize(wallet_query).move_as_ok()).print_rec(std::cerr); + CHECK(vm::std_boc_deserialize(wallet_query).move_as_ok()->get_hash() == gift_message->get_hash()); +} + TEST(Tonlib, TestGiver) { auto address = block::StdAddress::parse("-1:60c04141c6a7b96d68615e7a91d265ad0f3a9a922e9ae9c901d4fa83f5d3c0d0").move_as_ok(); diff --git a/submodules/ton/tonlib-src/crypto/test/wycheproof.h b/submodules/ton/tonlib-src/crypto/test/wycheproof.h index e94559da90..182760acb6 100644 --- a/submodules/ton/tonlib-src/crypto/test/wycheproof.h +++ b/submodules/ton/tonlib-src/crypto/test/wycheproof.h @@ -288,7 +288,7 @@ std::string wycheproof_ed25519() { "sig" : "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d2020", "result" : "invalid", "flags" : [] - }, + },)abcd" R"abcd( { "tcId" : 34, "comment" : "include pk in signature", @@ -570,7 +570,7 @@ std::string wycheproof_ed25519() { "flags" : [ "SignatureMalleability" ] - }, + },)abcd" R"abcd( { "tcId" : 68, "comment" : "checking malleability ", @@ -858,7 +858,7 @@ std::string wycheproof_ed25519() { "flags" : [] } ] - }, + },)abcd" R"abcd( { "key" : { "curve" : "edwards25519", diff --git a/submodules/ton/tonlib-src/crypto/tl/tlbc-gen-cpp.cpp b/submodules/ton/tonlib-src/crypto/tl/tlbc-gen-cpp.cpp index 5ab0620cce..bbf3adf79c 100644 --- a/submodules/ton/tonlib-src/crypto/tl/tlbc-gen-cpp.cpp +++ b/submodules/ton/tonlib-src/crypto/tl/tlbc-gen-cpp.cpp @@ -1021,9 +1021,9 @@ void CppTypeCode::generate_tag_pfx_selector(std::ostream& os, std::string nl, co } os << "};" << nl << "return ctab[1 + "; if (simple) { - os << "(long)cs.prefetch_ulong(" << d << ")];"; + os << "(long long)cs.prefetch_ulong(" << d << ")];"; } else { - os << "(long)cs.bselect" << (d >= min_size ? "(" : "_ext(") << d << ", " << HexConstWriter{mask} << ")];"; + os << "(long long)cs.bselect" << (d >= min_size ? "(" : "_ext(") << d << ", " << HexConstWriter{mask} << ")];"; } } @@ -1153,7 +1153,7 @@ void CppTypeCode::generate_get_tag_body(std::ostream& os, std::string nl) { os << ")) {"; for (int i = 0; i < l; i++) { if (A[i] != 0) { - if ((long)A[i] > 0) { + if ((long long)A[i] > 0) { int j; for (j = 0; j < i; j++) { if (A[j] == A[i]) { @@ -1165,7 +1165,7 @@ void CppTypeCode::generate_get_tag_body(std::ostream& os, std::string nl) { } } os << nl << "case " << i << ":"; - if ((long)A[i] > 0) { + if ((long long)A[i] > 0) { int j; for (j = i + 1; j < l; j++) { if (A[j] == A[i]) { diff --git a/submodules/ton/tonlib-src/crypto/tl/tlbc.cpp b/submodules/ton/tonlib-src/crypto/tl/tlbc.cpp index 5d3d0fe4cb..ff2e19e60e 100644 --- a/submodules/ton/tonlib-src/crypto/tl/tlbc.cpp +++ b/submodules/ton/tonlib-src/crypto/tl/tlbc.cpp @@ -687,7 +687,7 @@ unsigned long long BinTrie::build_submap(int depth, unsigned long long A[]) cons } else { std::memset(A + n, 0, n * 8); } - if (A[n] != A[n - 1] || (long)A[n] < 0) { + if (A[n] != A[n - 1] || (long long)A[n] < 0) { r2 |= 1; } else { r2 &= ~1; diff --git a/submodules/ton/tonlib-src/crypto/vm/stack.hpp b/submodules/ton/tonlib-src/crypto/vm/stack.hpp index c87bd4d937..0b16f59c39 100644 --- a/submodules/ton/tonlib-src/crypto/vm/stack.hpp +++ b/submodules/ton/tonlib-src/crypto/vm/stack.hpp @@ -33,6 +33,8 @@ #include "vm/cellslice.h" #include "vm/excno.hpp" +#include "td/utils/Span.h" + namespace td { extern template class td::Cnt; extern template class td::Ref>; @@ -156,7 +158,7 @@ class StackEntry { private: template - Ref dynamic_as() const & { + Ref dynamic_as() const& { return tp == tag ? static_cast>(ref) : td::Ref{}; } template @@ -168,7 +170,7 @@ class StackEntry { return tp == tag ? static_cast>(std::move(ref)) : td::Ref{}; } template - Ref as() const & { + Ref as() const& { return tp == tag ? Ref{td::static_cast_ref(), ref} : td::Ref{}; } template @@ -189,31 +191,31 @@ class StackEntry { return ref; } } - td::RefInt256 as_int() const & { + td::RefInt256 as_int() const& { return as(); } td::RefInt256 as_int() && { return move_as(); } - Ref as_cell() const & { + Ref as_cell() const& { return as(); } Ref as_cell() && { return move_as(); } - Ref as_builder() const & { + Ref as_builder() const& { return as(); } Ref as_builder() && { return move_as(); } - Ref as_slice() const & { + Ref as_slice() const& { return as(); } Ref as_slice() && { return move_as(); } - Ref as_cont() const &; + Ref as_cont() const&; Ref as_cont() &&; Ref> as_string_ref() const { return as, t_string>(); @@ -228,16 +230,16 @@ class StackEntry { std::string as_bytes() const { return tp == t_bytes ? *as_bytes_ref() : ""; } - Ref as_box() const &; + Ref as_box() const&; Ref as_box() &&; - Ref as_tuple() const &; + Ref as_tuple() const&; Ref as_tuple() &&; - Ref as_tuple_range(unsigned max_len = 255, unsigned min_len = 0) const &; + Ref as_tuple_range(unsigned max_len = 255, unsigned min_len = 0) const&; Ref as_tuple_range(unsigned max_len = 255, unsigned min_len = 0) &&; - Ref as_atom() const &; + Ref as_atom() const&; Ref as_atom() &&; template - Ref as_object() const & { + Ref as_object() const& { return dynamic_as(); } template @@ -361,6 +363,9 @@ class Stack : public td::CntObject { std::vector::const_iterator from_top(int offs) const { return stack.cend() - offs; } + td::Span as_span() const { + return stack; + } bool at_least(int req) const { return depth() >= req; } diff --git a/submodules/ton/tonlib-src/tdactor/benchmark/benchmark.cpp b/submodules/ton/tonlib-src/tdactor/benchmark/benchmark.cpp index 09986294b5..442bb84c61 100644 --- a/submodules/ton/tonlib-src/tdactor/benchmark/benchmark.cpp +++ b/submodules/ton/tonlib-src/tdactor/benchmark/benchmark.cpp @@ -1145,6 +1145,273 @@ void run_queue_bench(int n, int m) { #endif } +struct Sem { + public: + void post() { + if (++cnt_ == 0) { + { + std::unique_lock lk(mutex_); + } + cnd_.notify_one(); + } + } + void wait(int cnt = 1) { + auto was = cnt_.fetch_sub(cnt); + if (was >= cnt) { + return; + } + std::unique_lock lk(mutex_); + cnd_.wait(lk, [&] { return cnt_ >= 0; }); + } + + private: + std::mutex mutex_; + std::condition_variable cnd_; + std::atomic cnt_{0}; +}; + +class ChainedSpawn : public td::Benchmark { + public: + ChainedSpawn(bool use_io) : use_io_(use_io) { + } + std::string get_description() const { + return PSTRING() << "Chained create_actor use_io(" << use_io_ << ")"; + } + + void run(int n) { + class Task : public td::actor::Actor { + public: + Task(int n, Sem *sem) : n_(n), sem_(sem) { + } + void start_up() override { + if (n_ == 0) { + sem_->post(); + } else { + td::actor::create_actor("Task", n_ - 1, sem_).release(); + } + stop(); + }; + + private: + int n_; + Sem *sem_{nullptr}; + }; + td::actor::Scheduler scheduler{{8}}; + auto sch = td::thread([&] { scheduler.run(); }); + + Sem sem; + scheduler.run_in_context_external([&] { + for (int i = 0; i < n; i++) { + td::actor::create_actor(td::actor::ActorOptions().with_name("Task").with_poll(use_io_), 1000, &sem) + .release(); + sem.wait(); + } + td::actor::SchedulerContext::get()->stop(); + }); + + sch.join(); + } + + private: + bool use_io_{false}; +}; + +class ChainedSpawnInplace : public td::Benchmark { + public: + ChainedSpawnInplace(bool use_io) : use_io_(use_io) { + } + std::string get_description() const { + return PSTRING() << "Chained send_signal(self) use_io(" << use_io_ << ")"; + } + + void run(int n) { + class Task : public td::actor::Actor { + public: + Task(int n, Sem *sem) : n_(n), sem_(sem) { + } + void loop() override { + if (n_ == 0) { + sem_->post(); + stop(); + } else { + n_--; + send_signals(actor_id(this), td::actor::ActorSignals::wakeup()); + } + }; + + private: + int n_; + Sem *sem_; + }; + td::actor::Scheduler scheduler{{8}}; + auto sch = td::thread([&] { scheduler.run(); }); + + Sem sem; + scheduler.run_in_context_external([&] { + for (int i = 0; i < n; i++) { + td::actor::create_actor(td::actor::ActorOptions().with_name("Task").with_poll(use_io_), 1000, &sem) + .release(); + sem.wait(); + } + td::actor::SchedulerContext::get()->stop(); + }); + + sch.join(); + } + + private: + bool use_io_{false}; +}; + +class PingPong : public td::Benchmark { + public: + PingPong(bool use_io) : use_io_(use_io) { + } + std::string get_description() const { + return PSTRING() << "PingPong use_io(" << use_io_ << ")"; + } + + void run(int n) { + if (n < 3) { + n = 3; + } + class Task : public td::actor::Actor { + public: + explicit Task(Sem *sem) : sem_(sem) { + } + void set_peer(td::actor::ActorId peer) { + peer_ = peer; + } + void ping(int n) { + if (n < 0) { + sem_->post(); + stop(); + } + send_closure(peer_, &Task::ping, n - 1); + } + + private: + td::actor::ActorId peer_; + Sem *sem_; + }; + td::actor::Scheduler scheduler{{8}}; + auto sch = td::thread([&] { scheduler.run(); }); + + Sem sem; + scheduler.run_in_context_external([&] { + for (int i = 0; i < n; i++) { + auto a = td::actor::create_actor(td::actor::ActorOptions().with_name("Task").with_poll(use_io_), &sem) + .release(); + auto b = td::actor::create_actor(td::actor::ActorOptions().with_name("Task").with_poll(use_io_), &sem) + .release(); + send_closure(a, &Task::set_peer, b); + send_closure(b, &Task::set_peer, a); + send_closure(a, &Task::ping, 1000); + sem.wait(2); + } + td::actor::SchedulerContext::get()->stop(); + }); + + sch.join(); + } + + private: + bool use_io_{false}; +}; + +class SpawnMany : public td::Benchmark { + public: + SpawnMany(bool use_io) : use_io_(use_io) { + } + std::string get_description() const { + return PSTRING() << "Spawn many use_io(" << use_io_ << ")"; + } + + void run(int n) { + class Task : public td::actor::Actor { + public: + Task(Sem *sem) : sem_(sem) { + } + void start_up() override { + sem_->post(); + stop(); + }; + + private: + Sem *sem_; + }; + td::actor::Scheduler scheduler{{8}}; + Sem sem; + auto sch = td::thread([&] { scheduler.run(); }); + scheduler.run_in_context_external([&] { + for (int i = 0; i < n; i++) { + int spawn_cnt = 10000; + for (int j = 0; j < spawn_cnt; j++) { + td::actor::create_actor(td::actor::ActorOptions().with_name("Task").with_poll(use_io_), &sem).release(); + } + sem.wait(spawn_cnt); + } + td::actor::SchedulerContext::get()->stop(); + }); + sch.join(); + } + + private: + bool use_io_{false}; +}; + +class YieldMany : public td::Benchmark { + public: + YieldMany(bool use_io) : use_io_(use_io) { + } + std::string get_description() const { + return PSTRING() << "Yield many use_io(" << use_io_ << ")"; + } + + void run(int n) { + int num_yield = 1000; + unsigned tasks_per_cpu = 50; + unsigned cpu_n = td::thread::hardware_concurrency(); + class Task : public td::actor::Actor { + public: + explicit Task(int n, Sem *sem) : n_(n), sem_(sem) { + } + void loop() override { + if (n_ == 0) { + sem_->post(); + stop(); + } else { + n_--; + yield(); + } + }; + + private: + int n_; + Sem *sem_; + }; + td::actor::Scheduler scheduler{{cpu_n}}; + auto sch = td::thread([&] { scheduler.run(); }); + unsigned tasks = tasks_per_cpu * cpu_n; + Sem sem; + scheduler.run_in_context_external([&] { + for (int i = 0; i < n; i++) { + for (unsigned j = 0; j < tasks; j++) { + td::actor::create_actor(td::actor::ActorOptions().with_name("Task").with_poll(use_io_), num_yield, &sem) + .release(); + } + sem.wait(tasks); + } + }); + + scheduler.run_in_context_external([&] { td::actor::SchedulerContext::get()->stop(); }); + sch.join(); + } + + private: + bool use_io_{false}; +}; + int main(int argc, char **argv) { if (argc > 1) { if (argv[1][0] == 'a') { @@ -1159,6 +1426,18 @@ int main(int argc, char **argv) { return 0; } + bench(YieldMany(false)); + bench(YieldMany(true)); + bench(SpawnMany(false)); + bench(SpawnMany(true)); + bench(PingPong(false)); + bench(PingPong(true)); + bench(ChainedSpawnInplace(false)); + bench(ChainedSpawnInplace(true)); + bench(ChainedSpawn(false)); + bench(ChainedSpawn(true)); + return 0; + bench(ActorDummyQuery()); bench(ActorExecutorBenchmark()); bench(ActorSignalQuery()); diff --git a/submodules/ton/tonlib-src/tdactor/td/actor/PromiseFuture.h b/submodules/ton/tonlib-src/tdactor/td/actor/PromiseFuture.h index cb2016196e..9805a76cbe 100644 --- a/submodules/ton/tonlib-src/tdactor/td/actor/PromiseFuture.h +++ b/submodules/ton/tonlib-src/tdactor/td/actor/PromiseFuture.h @@ -281,6 +281,8 @@ class Promise { promise.do_wrap(std::move(res), std::move(func)); }; } + template + auto send_closure(ArgsT &&... args); private: std::unique_ptr> promise_; diff --git a/submodules/ton/tonlib-src/tdactor/td/actor/actor.h b/submodules/ton/tonlib-src/tdactor/td/actor/actor.h index 85685de721..b4eb6f6d68 100644 --- a/submodules/ton/tonlib-src/tdactor/td/actor/actor.h +++ b/submodules/ton/tonlib-src/tdactor/td/actor/actor.h @@ -162,4 +162,29 @@ void send_signals_later(ActorIdT &&actor_id, ActorSignals signals) { detail::send_signals_later(id.as_actor_ref(), signals); } } // namespace actor + +class SendClosure { + public: + template + void operator()(ArgsT &&... args) const { + td::actor::send_closure(std::forward(args)...); + } +}; + +template +template +auto Promise::send_closure(ArgsT &&... args) { + return [promise = std::move(*this), t = std::make_tuple(std::forward(args)...)](auto &&r_res) mutable { + TRY_RESULT_PROMISE(promise, res, std::move(r_res)); + td::call_tuple(SendClosure(), std::tuple_cat(std::move(t), std::make_tuple(std::move(res), std::move(promise)))); + }; +} + +template +auto promise_send_closure(ArgsT &&... args) { + return [t = std::make_tuple(std::forward(args)...)](auto &&res) mutable { + td::call_tuple(SendClosure(), std::tuple_cat(std::move(t), std::make_tuple(std::move(res)))); + }; +} + } // namespace td diff --git a/submodules/ton/tonlib-src/tdutils/td/utils/JsonBuilder.h b/submodules/ton/tonlib-src/tdutils/td/utils/JsonBuilder.h index f2df4e6022..be089ca6c0 100644 --- a/submodules/ton/tonlib-src/tdutils/td/utils/JsonBuilder.h +++ b/submodules/ton/tonlib-src/tdutils/td/utils/JsonBuilder.h @@ -193,7 +193,7 @@ class JsonObjectScope; class JsonBuilder { public: - explicit JsonBuilder(StringBuilder &&sb, int32 offset = -1) : sb_(std::move(sb)), offset_(offset) { + explicit JsonBuilder(StringBuilder &&sb = {}, int32 offset = -1) : sb_(std::move(sb)), offset_(offset) { } StringBuilder &string_builder() { return sb_; diff --git a/submodules/ton/tonlib-src/tdutils/td/utils/StringBuilder.h b/submodules/ton/tonlib-src/tdutils/td/utils/StringBuilder.h index 7415aa2a19..229b967e80 100644 --- a/submodules/ton/tonlib-src/tdutils/td/utils/StringBuilder.h +++ b/submodules/ton/tonlib-src/tdutils/td/utils/StringBuilder.h @@ -31,6 +31,8 @@ namespace td { class StringBuilder { public: explicit StringBuilder(MutableSlice slice, bool use_buffer = false); + StringBuilder() : StringBuilder({}, true) { + } void clear() { current_ptr_ = begin_ptr_; diff --git a/submodules/ton/tonlib-src/tdutils/td/utils/invoke.h b/submodules/ton/tonlib-src/tdutils/td/utils/invoke.h index dad0c238d8..63b30ba25a 100644 --- a/submodules/ton/tonlib-src/tdutils/td/utils/invoke.h +++ b/submodules/ton/tonlib-src/tdutils/td/utils/invoke.h @@ -128,7 +128,7 @@ auto invoke(F &&f, } template -auto call_tuple_impl(F &func, std::tuple &&tuple, IntSeq) { +auto call_tuple_impl(F &&func, std::tuple &&tuple, IntSeq) { return func(std::forward(std::get(tuple))...); } @@ -163,7 +163,7 @@ class LogicAnd { }; template -auto call_tuple(F &func, std::tuple &&tuple) { +auto call_tuple(F &&func, std::tuple &&tuple) { return detail::call_tuple_impl(func, std::move(tuple), detail::IntRange()); } diff --git a/submodules/ton/tonlib-src/tl/generate/JavadocTlDocumentationGenerator.php b/submodules/ton/tonlib-src/tl/generate/JavadocTlDocumentationGenerator.php index f33c9e99ad..155d972460 100644 --- a/submodules/ton/tonlib-src/tl/generate/JavadocTlDocumentationGenerator.php +++ b/submodules/ton/tonlib-src/tl/generate/JavadocTlDocumentationGenerator.php @@ -128,7 +128,7 @@ class JavadocTlDocumentationGenerator extends TlDocumentationGenerator $this->addDocumentation('public class TdApi {', << * It has no inner classes, functions or public members. @@ -138,7 +138,7 @@ EOT $this->addDocumentation(' public abstract static class Object {', <<addDocumentation(' public abstract static class Function extends Object {', << &&key_, td::SecureString &&local_password_) +inputKeyRegular::inputKeyRegular(object_ptr &&key_, td::SecureString &&local_password_) : key_(std::move(key_)) , local_password_(std::move(local_password_)) {} -const std::int32_t inputKey::ID; +const std::int32_t inputKeyRegular::ID; -void inputKey::store(td::TlStorerToString &s, const char *field_name) const { +void inputKeyRegular::store(td::TlStorerToString &s, const char *field_name) const { if (!LOG_IS_STRIPPED(ERROR)) { - s.store_class_begin(field_name, "inputKey"); + s.store_class_begin(field_name, "inputKeyRegular"); if (key_ == nullptr) { s.store_field("key", "null"); } else { key_->store(s, "key"); } s.store_bytes_field("local_password", local_password_); s.store_class_end(); @@ -577,6 +577,24 @@ void generic_accountStateWallet::store(td::TlStorerToString &s, const char *fiel } } +generic_accountStateWalletV3::generic_accountStateWalletV3() + : account_state_() +{} + +generic_accountStateWalletV3::generic_accountStateWalletV3(object_ptr &&account_state_) + : account_state_(std::move(account_state_)) +{} + +const std::int32_t generic_accountStateWalletV3::ID; + +void generic_accountStateWalletV3::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "generic_accountStateWalletV3"); + if (account_state_ == nullptr) { s.store_field("account_state", "null"); } else { account_state_->store(s, "account_state"); } + s.store_class_end(); + } +} + generic_accountStateTestGiver::generic_accountStateTestGiver() : account_state_() {} @@ -658,6 +676,24 @@ void liteServer_info::store(td::TlStorerToString &s, const char *field_name) con } } +options_configInfo::options_configInfo() + : default_wallet_id_() +{} + +options_configInfo::options_configInfo(std::int64_t default_wallet_id_) + : default_wallet_id_(default_wallet_id_) +{} + +const std::int32_t options_configInfo::ID; + +void options_configInfo::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "options_configInfo"); + s.store_field("default_wallet_id", default_wallet_id_); + s.store_class_end(); + } +} + query_fees::query_fees() : source_fees_() , destination_fees_() @@ -856,6 +892,84 @@ void raw_transactions::store(td::TlStorerToString &s, const char *field_name) co } } +smc_info::smc_info() + : id_() +{} + +smc_info::smc_info(std::int64_t id_) + : id_(id_) +{} + +const std::int32_t smc_info::ID; + +void smc_info::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "smc_info"); + s.store_field("id", id_); + s.store_class_end(); + } +} + +smc_methodIdNumber::smc_methodIdNumber() + : number_() +{} + +smc_methodIdNumber::smc_methodIdNumber(std::int32_t number_) + : number_(number_) +{} + +const std::int32_t smc_methodIdNumber::ID; + +void smc_methodIdNumber::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "smc_methodIdNumber"); + s.store_field("number", number_); + s.store_class_end(); + } +} + +smc_methodIdName::smc_methodIdName() + : name_() +{} + +smc_methodIdName::smc_methodIdName(std::string const &name_) + : name_(std::move(name_)) +{} + +const std::int32_t smc_methodIdName::ID; + +void smc_methodIdName::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "smc_methodIdName"); + s.store_field("name", name_); + s.store_class_end(); + } +} + +smc_runResult::smc_runResult() + : gas_used_() + , stack_() + , exit_code_() +{} + +smc_runResult::smc_runResult(std::int64_t gas_used_, std::vector> &&stack_, std::int32_t exit_code_) + : gas_used_(gas_used_) + , stack_(std::move(stack_)) + , exit_code_(exit_code_) +{} + +const std::int32_t smc_runResult::ID; + +void smc_runResult::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "smc_runResult"); + s.store_field("gas_used", gas_used_); + { const std::vector> &v = stack_; const std::uint32_t multiplicity = static_cast(v.size()); const auto vector_name = "vector[" + td::to_string(multiplicity)+ "]"; s.store_class_begin("stack", vector_name.c_str()); for (std::uint32_t i = 0; i < multiplicity; i++) { if (v[i] == nullptr) { s.store_field("", "null"); } else { v[i]->store(s, ""); } } s.store_class_end(); } + s.store_field("exit_code", exit_code_); + s.store_class_end(); + } +} + testGiver_accountState::testGiver_accountState() : balance_() , seqno_() @@ -928,6 +1042,126 @@ void testWallet_initialAccountState::store(td::TlStorerToString &s, const char * } } +tvm_cell::tvm_cell() + : bytes_() +{} + +tvm_cell::tvm_cell(std::string const &bytes_) + : bytes_(std::move(bytes_)) +{} + +const std::int32_t tvm_cell::ID; + +void tvm_cell::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "tvm_cell"); + s.store_field("bytes", bytes_); + s.store_class_end(); + } +} + +tvm_numberDecimal::tvm_numberDecimal() + : number_() +{} + +tvm_numberDecimal::tvm_numberDecimal(std::string const &number_) + : number_(std::move(number_)) +{} + +const std::int32_t tvm_numberDecimal::ID; + +void tvm_numberDecimal::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "tvm_numberDecimal"); + s.store_field("number", number_); + s.store_class_end(); + } +} + +tvm_slice::tvm_slice() + : bytes_() +{} + +tvm_slice::tvm_slice(std::string const &bytes_) + : bytes_(std::move(bytes_)) +{} + +const std::int32_t tvm_slice::ID; + +void tvm_slice::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "tvm_slice"); + s.store_field("bytes", bytes_); + s.store_class_end(); + } +} + +tvm_stackEntrySlice::tvm_stackEntrySlice() + : slice_() +{} + +tvm_stackEntrySlice::tvm_stackEntrySlice(object_ptr &&slice_) + : slice_(std::move(slice_)) +{} + +const std::int32_t tvm_stackEntrySlice::ID; + +void tvm_stackEntrySlice::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "tvm_stackEntrySlice"); + if (slice_ == nullptr) { s.store_field("slice", "null"); } else { slice_->store(s, "slice"); } + s.store_class_end(); + } +} + +tvm_stackEntryCell::tvm_stackEntryCell() + : cell_() +{} + +tvm_stackEntryCell::tvm_stackEntryCell(object_ptr &&cell_) + : cell_(std::move(cell_)) +{} + +const std::int32_t tvm_stackEntryCell::ID; + +void tvm_stackEntryCell::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "tvm_stackEntryCell"); + if (cell_ == nullptr) { s.store_field("cell", "null"); } else { cell_->store(s, "cell"); } + s.store_class_end(); + } +} + +tvm_stackEntryNumber::tvm_stackEntryNumber() + : number_() +{} + +tvm_stackEntryNumber::tvm_stackEntryNumber(object_ptr &&number_) + : number_(std::move(number_)) +{} + +const std::int32_t tvm_stackEntryNumber::ID; + +void tvm_stackEntryNumber::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "tvm_stackEntryNumber"); + if (number_ == nullptr) { s.store_field("number", "null"); } else { number_->store(s, "number"); } + s.store_class_end(); + } +} + +tvm_stackEntryUnsupported::tvm_stackEntryUnsupported() { +} + +const std::int32_t tvm_stackEntryUnsupported::ID; + +void tvm_stackEntryUnsupported::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "tvm_stackEntryUnsupported"); + s.store_class_end(); + } +} + uninited_accountState::uninited_accountState() : balance_() , last_transaction_id_() @@ -1000,6 +1234,57 @@ void wallet_initialAccountState::store(td::TlStorerToString &s, const char *fiel } } +wallet_v3_accountState::wallet_v3_accountState() + : balance_() + , wallet_id_() + , seqno_() + , last_transaction_id_() + , sync_utime_() +{} + +wallet_v3_accountState::wallet_v3_accountState(std::int64_t balance_, std::int64_t wallet_id_, std::int32_t seqno_, object_ptr &&last_transaction_id_, std::int64_t sync_utime_) + : balance_(balance_) + , wallet_id_(wallet_id_) + , seqno_(seqno_) + , last_transaction_id_(std::move(last_transaction_id_)) + , sync_utime_(sync_utime_) +{} + +const std::int32_t wallet_v3_accountState::ID; + +void wallet_v3_accountState::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "wallet_v3_accountState"); + s.store_field("balance", balance_); + s.store_field("wallet_id", wallet_id_); + s.store_field("seqno", seqno_); + if (last_transaction_id_ == nullptr) { s.store_field("last_transaction_id", "null"); } else { last_transaction_id_->store(s, "last_transaction_id"); } + s.store_field("sync_utime", sync_utime_); + s.store_class_end(); + } +} + +wallet_v3_initialAccountState::wallet_v3_initialAccountState() + : public_key_() + , wallet_id_() +{} + +wallet_v3_initialAccountState::wallet_v3_initialAccountState(std::string const &public_key_, std::int64_t wallet_id_) + : public_key_(std::move(public_key_)) + , wallet_id_(wallet_id_) +{} + +const std::int32_t wallet_v3_initialAccountState::ID; + +void wallet_v3_initialAccountState::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "wallet_v3_initialAccountState"); + s.store_field("public_key", public_key_); + s.store_field("wallet_id", wallet_id_); + s.store_class_end(); + } +} + addLogMessage::addLogMessage() : verbosity_level_() , text_() @@ -1558,6 +1843,24 @@ void options_setConfig::store(td::TlStorerToString &s, const char *field_name) c } } +options_validateConfig::options_validateConfig() + : config_() +{} + +options_validateConfig::options_validateConfig(object_ptr &&config_) + : config_(std::move(config_)) +{} + +const std::int32_t options_validateConfig::ID; + +void options_validateConfig::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "options_validateConfig"); + if (config_ == nullptr) { s.store_field("config", "null"); } else { config_->store(s, "config"); } + s.store_class_end(); + } +} + packAccountAddress::packAccountAddress() : account_address_() {} @@ -1852,6 +2155,102 @@ void setLogVerbosityLevel::store(td::TlStorerToString &s, const char *field_name } } +smc_getCode::smc_getCode() + : id_() +{} + +smc_getCode::smc_getCode(std::int64_t id_) + : id_(id_) +{} + +const std::int32_t smc_getCode::ID; + +void smc_getCode::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "smc_getCode"); + s.store_field("id", id_); + s.store_class_end(); + } +} + +smc_getData::smc_getData() + : id_() +{} + +smc_getData::smc_getData(std::int64_t id_) + : id_(id_) +{} + +const std::int32_t smc_getData::ID; + +void smc_getData::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "smc_getData"); + s.store_field("id", id_); + s.store_class_end(); + } +} + +smc_getState::smc_getState() + : id_() +{} + +smc_getState::smc_getState(std::int64_t id_) + : id_(id_) +{} + +const std::int32_t smc_getState::ID; + +void smc_getState::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "smc_getState"); + s.store_field("id", id_); + s.store_class_end(); + } +} + +smc_load::smc_load() + : account_address_() +{} + +smc_load::smc_load(object_ptr &&account_address_) + : account_address_(std::move(account_address_)) +{} + +const std::int32_t smc_load::ID; + +void smc_load::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "smc_load"); + if (account_address_ == nullptr) { s.store_field("account_address", "null"); } else { account_address_->store(s, "account_address"); } + s.store_class_end(); + } +} + +smc_runGetMethod::smc_runGetMethod() + : id_() + , method_() + , stack_() +{} + +smc_runGetMethod::smc_runGetMethod(std::int64_t id_, object_ptr &&method_, std::vector> &&stack_) + : id_(id_) + , method_(std::move(method_)) + , stack_(std::move(stack_)) +{} + +const std::int32_t smc_runGetMethod::ID; + +void smc_runGetMethod::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "smc_runGetMethod"); + s.store_field("id", id_); + if (method_ == nullptr) { s.store_field("method", "null"); } else { method_->store(s, "method"); } + { const std::vector> &v = stack_; const std::uint32_t multiplicity = static_cast(v.size()); const auto vector_name = "vector[" + td::to_string(multiplicity)+ "]"; s.store_class_begin("stack", vector_name.c_str()); for (std::uint32_t i = 0; i < multiplicity; i++) { if (v[i] == nullptr) { s.store_field("", "null"); } else { v[i]->store(s, ""); } } s.store_class_end(); } + s.store_class_end(); + } +} + sync::sync() { } @@ -2103,5 +2502,23 @@ void wallet_sendGrams::store(td::TlStorerToString &s, const char *field_name) co s.store_class_end(); } } + +wallet_v3_getAccountAddress::wallet_v3_getAccountAddress() + : initital_account_state_() +{} + +wallet_v3_getAccountAddress::wallet_v3_getAccountAddress(object_ptr &&initital_account_state_) + : initital_account_state_(std::move(initital_account_state_)) +{} + +const std::int32_t wallet_v3_getAccountAddress::ID; + +void wallet_v3_getAccountAddress::store(td::TlStorerToString &s, const char *field_name) const { + if (!LOG_IS_STRIPPED(ERROR)) { + s.store_class_begin(field_name, "wallet_v3_getAccountAddress"); + if (initital_account_state_ == nullptr) { s.store_field("initital_account_state", "null"); } else { initital_account_state_->store(s, "initital_account_state"); } + s.store_class_end(); + } +} } // namespace tonlib_api } // namespace ton diff --git a/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api.h b/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api.h index e7862ec366..ae90186fea 100644 --- a/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api.h +++ b/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api.h @@ -92,6 +92,8 @@ class internal_transactionId; class liteServer_info; +class options_configInfo; + class query_fees; class query_info; @@ -106,18 +108,36 @@ class raw_transaction; class raw_transactions; +class smc_info; + +class smc_MethodId; + +class smc_runResult; + class testGiver_accountState; class testWallet_accountState; class testWallet_initialAccountState; +class tvm_cell; + +class tvm_numberDecimal; + +class tvm_slice; + +class tvm_StackEntry; + class uninited_accountState; class wallet_accountState; class wallet_initialAccountState; +class wallet_v3_accountState; + +class wallet_v3_initialAccountState; + class Object; class Object: public TlObject { @@ -283,16 +303,16 @@ class InputKey: public Object { public: }; -class inputKey final : public InputKey { +class inputKeyRegular final : public InputKey { public: object_ptr key_; td::SecureString local_password_; - inputKey(); + inputKeyRegular(); - inputKey(object_ptr &&key_, td::SecureString &&local_password_); + inputKeyRegular(object_ptr &&key_, td::SecureString &&local_password_); - static const std::int32_t ID = 869287093; + static const std::int32_t ID = -555399522; std::int32_t get_id() const final { return ID; } @@ -632,6 +652,22 @@ class generic_accountStateWallet final : public generic_AccountState { void store(td::TlStorerToString &s, const char *field_name) const final; }; +class generic_accountStateWalletV3 final : public generic_AccountState { + public: + object_ptr account_state_; + + generic_accountStateWalletV3(); + + explicit generic_accountStateWalletV3(object_ptr &&account_state_); + + static const std::int32_t ID = -281349583; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + class generic_accountStateTestGiver final : public generic_AccountState { public: object_ptr account_state_; @@ -699,6 +735,22 @@ class liteServer_info final : public Object { void store(td::TlStorerToString &s, const char *field_name) const final; }; +class options_configInfo final : public Object { + public: + std::int64_t default_wallet_id_; + + options_configInfo(); + + explicit options_configInfo(std::int64_t default_wallet_id_); + + static const std::int32_t ID = 165216422; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + class query_fees final : public Object { public: object_ptr source_fees_; @@ -835,6 +887,76 @@ class raw_transactions final : public Object { void store(td::TlStorerToString &s, const char *field_name) const final; }; +class smc_info final : public Object { + public: + std::int64_t id_; + + smc_info(); + + explicit smc_info(std::int64_t id_); + + static const std::int32_t ID = 1134270012; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + +class smc_MethodId: public Object { + public: +}; + +class smc_methodIdNumber final : public smc_MethodId { + public: + std::int32_t number_; + + smc_methodIdNumber(); + + explicit smc_methodIdNumber(std::int32_t number_); + + static const std::int32_t ID = -1541162500; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + +class smc_methodIdName final : public smc_MethodId { + public: + std::string name_; + + smc_methodIdName(); + + explicit smc_methodIdName(std::string const &name_); + + static const std::int32_t ID = -249036908; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + +class smc_runResult final : public Object { + public: + std::int64_t gas_used_; + std::vector> stack_; + std::int32_t exit_code_; + + smc_runResult(); + + smc_runResult(std::int64_t gas_used_, std::vector> &&stack_, std::int32_t exit_code_); + + static const std::int32_t ID = 1413805043; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + class testGiver_accountState final : public Object { public: std::int64_t balance_; @@ -889,6 +1011,119 @@ class testWallet_initialAccountState final : public Object { void store(td::TlStorerToString &s, const char *field_name) const final; }; +class tvm_cell final : public Object { + public: + std::string bytes_; + + tvm_cell(); + + explicit tvm_cell(std::string const &bytes_); + + static const std::int32_t ID = -859530316; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + +class tvm_numberDecimal final : public Object { + public: + std::string number_; + + tvm_numberDecimal(); + + explicit tvm_numberDecimal(std::string const &number_); + + static const std::int32_t ID = 1172477619; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + +class tvm_slice final : public Object { + public: + std::string bytes_; + + tvm_slice(); + + explicit tvm_slice(std::string const &bytes_); + + static const std::int32_t ID = -1069968387; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + +class tvm_StackEntry: public Object { + public: +}; + +class tvm_stackEntrySlice final : public tvm_StackEntry { + public: + object_ptr slice_; + + tvm_stackEntrySlice(); + + explicit tvm_stackEntrySlice(object_ptr &&slice_); + + static const std::int32_t ID = 1395485477; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + +class tvm_stackEntryCell final : public tvm_StackEntry { + public: + object_ptr cell_; + + tvm_stackEntryCell(); + + explicit tvm_stackEntryCell(object_ptr &&cell_); + + static const std::int32_t ID = 1303473952; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + +class tvm_stackEntryNumber final : public tvm_StackEntry { + public: + object_ptr number_; + + tvm_stackEntryNumber(); + + explicit tvm_stackEntryNumber(object_ptr &&number_); + + static const std::int32_t ID = 1358642622; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + +class tvm_stackEntryUnsupported final : public tvm_StackEntry { + public: + + tvm_stackEntryUnsupported(); + + static const std::int32_t ID = 378880498; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + class uninited_accountState final : public Object { public: std::int64_t balance_; @@ -943,6 +1178,43 @@ class wallet_initialAccountState final : public Object { void store(td::TlStorerToString &s, const char *field_name) const final; }; +class wallet_v3_accountState final : public Object { + public: + std::int64_t balance_; + std::int64_t wallet_id_; + std::int32_t seqno_; + object_ptr last_transaction_id_; + std::int64_t sync_utime_; + + wallet_v3_accountState(); + + wallet_v3_accountState(std::int64_t balance_, std::int64_t wallet_id_, std::int32_t seqno_, object_ptr &&last_transaction_id_, std::int64_t sync_utime_); + + static const std::int32_t ID = 1977698154; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + +class wallet_v3_initialAccountState final : public Object { + public: + std::string public_key_; + std::int64_t wallet_id_; + + wallet_v3_initialAccountState(); + + wallet_v3_initialAccountState(std::string const &public_key_, std::int64_t wallet_id_); + + static const std::int32_t ID = 283460879; + std::int32_t get_id() const final { + return ID; + } + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + class addLogMessage final : public Function { public: std::int32_t verbosity_level_; @@ -1459,6 +1731,24 @@ class options_setConfig final : public Function { void store(td::TlStorerToString &s, const char *field_name) const final; }; +class options_validateConfig final : public Function { + public: + object_ptr config_; + + options_validateConfig(); + + explicit options_validateConfig(object_ptr &&config_); + + static const std::int32_t ID = -346965447; + std::int32_t get_id() const final { + return ID; + } + + using ReturnType = object_ptr; + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + class packAccountAddress final : public Function { public: object_ptr account_address_; @@ -1737,6 +2027,98 @@ class setLogVerbosityLevel final : public Function { void store(td::TlStorerToString &s, const char *field_name) const final; }; +class smc_getCode final : public Function { + public: + std::int64_t id_; + + smc_getCode(); + + explicit smc_getCode(std::int64_t id_); + + static const std::int32_t ID = -2115626088; + std::int32_t get_id() const final { + return ID; + } + + using ReturnType = object_ptr; + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + +class smc_getData final : public Function { + public: + std::int64_t id_; + + smc_getData(); + + explicit smc_getData(std::int64_t id_); + + static const std::int32_t ID = -427601079; + std::int32_t get_id() const final { + return ID; + } + + using ReturnType = object_ptr; + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + +class smc_getState final : public Function { + public: + std::int64_t id_; + + smc_getState(); + + explicit smc_getState(std::int64_t id_); + + static const std::int32_t ID = -214390293; + std::int32_t get_id() const final { + return ID; + } + + using ReturnType = object_ptr; + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + +class smc_load final : public Function { + public: + object_ptr account_address_; + + smc_load(); + + explicit smc_load(object_ptr &&account_address_); + + static const std::int32_t ID = -903491521; + std::int32_t get_id() const final { + return ID; + } + + using ReturnType = object_ptr; + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + +class smc_runGetMethod final : public Function { + public: + std::int64_t id_; + object_ptr method_; + std::vector> stack_; + + smc_runGetMethod(); + + smc_runGetMethod(std::int64_t id_, object_ptr &&method_, std::vector> &&stack_); + + static const std::int32_t ID = -255261270; + std::int32_t get_id() const final { + return ID; + } + + using ReturnType = object_ptr; + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + class sync final : public Function { public: @@ -1974,5 +2356,23 @@ class wallet_sendGrams final : public Function { void store(td::TlStorerToString &s, const char *field_name) const final; }; +class wallet_v3_getAccountAddress final : public Function { + public: + object_ptr initital_account_state_; + + wallet_v3_getAccountAddress(); + + explicit wallet_v3_getAccountAddress(object_ptr &&initital_account_state_); + + static const std::int32_t ID = 1011655671; + std::int32_t get_id() const final { + return ID; + } + + using ReturnType = object_ptr; + + void store(td::TlStorerToString &s, const char *field_name) const final; +}; + } // namespace tonlib_api } // namespace ton diff --git a/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api.hpp b/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api.hpp index bd5e0fad7e..f82b020a0d 100644 --- a/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api.hpp +++ b/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api.hpp @@ -41,8 +41,8 @@ bool downcast_call(Object &obj, const T &func) { case fees::ID: func(static_cast(obj)); return true; - case inputKey::ID: - func(static_cast(obj)); + case inputKeyRegular::ID: + func(static_cast(obj)); return true; case inputKeyFake::ID: func(static_cast(obj)); @@ -104,6 +104,9 @@ bool downcast_call(Object &obj, const T &func) { case generic_accountStateWallet::ID: func(static_cast(obj)); return true; + case generic_accountStateWalletV3::ID: + func(static_cast(obj)); + return true; case generic_accountStateTestGiver::ID: func(static_cast(obj)); return true; @@ -116,6 +119,9 @@ bool downcast_call(Object &obj, const T &func) { case liteServer_info::ID: func(static_cast(obj)); return true; + case options_configInfo::ID: + func(static_cast(obj)); + return true; case query_fees::ID: func(static_cast(obj)); return true; @@ -137,6 +143,18 @@ bool downcast_call(Object &obj, const T &func) { case raw_transactions::ID: func(static_cast(obj)); return true; + case smc_info::ID: + func(static_cast(obj)); + return true; + case smc_methodIdNumber::ID: + func(static_cast(obj)); + return true; + case smc_methodIdName::ID: + func(static_cast(obj)); + return true; + case smc_runResult::ID: + func(static_cast(obj)); + return true; case testGiver_accountState::ID: func(static_cast(obj)); return true; @@ -146,6 +164,27 @@ bool downcast_call(Object &obj, const T &func) { case testWallet_initialAccountState::ID: func(static_cast(obj)); return true; + case tvm_cell::ID: + func(static_cast(obj)); + return true; + case tvm_numberDecimal::ID: + func(static_cast(obj)); + return true; + case tvm_slice::ID: + func(static_cast(obj)); + return true; + case tvm_stackEntrySlice::ID: + func(static_cast(obj)); + return true; + case tvm_stackEntryCell::ID: + func(static_cast(obj)); + return true; + case tvm_stackEntryNumber::ID: + func(static_cast(obj)); + return true; + case tvm_stackEntryUnsupported::ID: + func(static_cast(obj)); + return true; case uninited_accountState::ID: func(static_cast(obj)); return true; @@ -155,6 +194,12 @@ bool downcast_call(Object &obj, const T &func) { case wallet_initialAccountState::ID: func(static_cast(obj)); return true; + case wallet_v3_accountState::ID: + func(static_cast(obj)); + return true; + case wallet_v3_initialAccountState::ID: + func(static_cast(obj)); + return true; default: return false; } @@ -253,6 +298,9 @@ bool downcast_call(Function &obj, const T &func) { case options_setConfig::ID: func(static_cast(obj)); return true; + case options_validateConfig::ID: + func(static_cast(obj)); + return true; case packAccountAddress::ID: func(static_cast(obj)); return true; @@ -298,6 +346,21 @@ bool downcast_call(Function &obj, const T &func) { case setLogVerbosityLevel::ID: func(static_cast(obj)); return true; + case smc_getCode::ID: + func(static_cast(obj)); + return true; + case smc_getData::ID: + func(static_cast(obj)); + return true; + case smc_getState::ID: + func(static_cast(obj)); + return true; + case smc_load::ID: + func(static_cast(obj)); + return true; + case smc_runGetMethod::ID: + func(static_cast(obj)); + return true; case sync::ID: func(static_cast(obj)); return true; @@ -337,6 +400,9 @@ bool downcast_call(Function &obj, const T &func) { case wallet_sendGrams::ID: func(static_cast(obj)); return true; + case wallet_v3_getAccountAddress::ID: + func(static_cast(obj)); + return true; default: return false; } @@ -351,8 +417,8 @@ bool downcast_call(Function &obj, const T &func) { template bool downcast_call(InputKey &obj, const T &func) { switch (obj.get_id()) { - case inputKey::ID: - func(static_cast(obj)); + case inputKeyRegular::ID: + func(static_cast(obj)); return true; case inputKeyFake::ID: func(static_cast(obj)); @@ -463,6 +529,9 @@ bool downcast_call(generic_AccountState &obj, const T &func) { case generic_accountStateWallet::ID: func(static_cast(obj)); return true; + case generic_accountStateWalletV3::ID: + func(static_cast(obj)); + return true; case generic_accountStateTestGiver::ID: func(static_cast(obj)); return true; @@ -474,5 +543,51 @@ bool downcast_call(generic_AccountState &obj, const T &func) { } } +/** + * Calls specified function object with the specified object downcasted to the most-derived type. + * \param[in] obj Object to pass as an argument to the function object. + * \param[in] func Function object to which the object will be passed. + * \returns whether function object call has happened. Should always return true for correct parameters. + */ +template +bool downcast_call(smc_MethodId &obj, const T &func) { + switch (obj.get_id()) { + case smc_methodIdNumber::ID: + func(static_cast(obj)); + return true; + case smc_methodIdName::ID: + func(static_cast(obj)); + return true; + default: + return false; + } +} + +/** + * Calls specified function object with the specified object downcasted to the most-derived type. + * \param[in] obj Object to pass as an argument to the function object. + * \param[in] func Function object to which the object will be passed. + * \returns whether function object call has happened. Should always return true for correct parameters. + */ +template +bool downcast_call(tvm_StackEntry &obj, const T &func) { + switch (obj.get_id()) { + case tvm_stackEntrySlice::ID: + func(static_cast(obj)); + return true; + case tvm_stackEntryCell::ID: + func(static_cast(obj)); + return true; + case tvm_stackEntryNumber::ID: + func(static_cast(obj)); + return true; + case tvm_stackEntryUnsupported::ID: + func(static_cast(obj)); + return true; + default: + return false; + } +} + } // namespace tonlib_api } // namespace ton diff --git a/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api_json.cpp b/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api_json.cpp index a0448c9d68..bb29637762 100644 --- a/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api_json.cpp +++ b/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api_json.cpp @@ -16,7 +16,7 @@ namespace tonlib_api{ using namespace td; Result tl_constructor_from_string(tonlib_api::InputKey *object, const std::string &str) { static const std::unordered_map m = { - {"inputKey", 869287093}, + {"inputKeyRegular", -555399522}, {"inputKeyFake", -1074054722} }; auto it = m.find(str); @@ -75,6 +75,7 @@ Result tl_constructor_from_string(tonlib_api::generic_AccountState *objec {"generic.accountStateRaw", -1387096685}, {"generic.accountStateTestWallet", -1041955397}, {"generic.accountStateWallet", 942582925}, + {"generic.accountStateWalletV3", -281349583}, {"generic.accountStateTestGiver", 1134654598}, {"generic.accountStateUninited", -908702008} }; @@ -84,6 +85,30 @@ Result tl_constructor_from_string(tonlib_api::generic_AccountState *objec } return it->second; } +Result tl_constructor_from_string(tonlib_api::smc_MethodId *object, const std::string &str) { + static const std::unordered_map m = { + {"smc.methodIdNumber", -1541162500}, + {"smc.methodIdName", -249036908} + }; + auto it = m.find(str); + if (it == m.end()) { + return Status::Error(str + "Unknown class"); + } + return it->second; +} +Result tl_constructor_from_string(tonlib_api::tvm_StackEntry *object, const std::string &str) { + static const std::unordered_map m = { + {"tvm.stackEntrySlice", 1395485477}, + {"tvm.stackEntryCell", 1303473952}, + {"tvm.stackEntryNumber", 1358642622}, + {"tvm.stackEntryUnsupported", 378880498} + }; + auto it = m.find(str); + if (it == m.end()) { + return Status::Error(str + "Unknown class"); + } + return it->second; +} Result tl_constructor_from_string(tonlib_api::Object *object, const std::string &str) { static const std::unordered_map m = { {"accountAddress", 755613099}, @@ -95,7 +120,7 @@ Result tl_constructor_from_string(tonlib_api::Object *object, const std:: {"exportedKey", -1449248297}, {"exportedPemKey", 1425473725}, {"fees", 1676273340}, - {"inputKey", 869287093}, + {"inputKeyRegular", -555399522}, {"inputKeyFake", -1074054722}, {"key", -1978362923}, {"keyStoreTypeDirectory", -378990038}, @@ -116,10 +141,12 @@ Result tl_constructor_from_string(tonlib_api::Object *object, const std:: {"generic.accountStateRaw", -1387096685}, {"generic.accountStateTestWallet", -1041955397}, {"generic.accountStateWallet", 942582925}, + {"generic.accountStateWalletV3", -281349583}, {"generic.accountStateTestGiver", 1134654598}, {"generic.accountStateUninited", -908702008}, {"internal.transactionId", -989527262}, {"liteServer.info", -1250165133}, + {"options.configInfo", 165216422}, {"query.fees", 725267759}, {"query.info", 1588635915}, {"raw.accountState", 1205935434}, @@ -127,12 +154,25 @@ Result tl_constructor_from_string(tonlib_api::Object *object, const std:: {"raw.message", -906281442}, {"raw.transaction", 1887601793}, {"raw.transactions", -2063931155}, + {"smc.info", 1134270012}, + {"smc.methodIdNumber", -1541162500}, + {"smc.methodIdName", -249036908}, + {"smc.runResult", 1413805043}, {"testGiver.accountState", 860930426}, {"testWallet.accountState", 305698744}, {"testWallet.initialAccountState", -1231516227}, + {"tvm.cell", -859530316}, + {"tvm.numberDecimal", 1172477619}, + {"tvm.slice", -1069968387}, + {"tvm.stackEntrySlice", 1395485477}, + {"tvm.stackEntryCell", 1303473952}, + {"tvm.stackEntryNumber", 1358642622}, + {"tvm.stackEntryUnsupported", 378880498}, {"uninited.accountState", -918880075}, {"wallet.accountState", -1919815977}, - {"wallet.initialAccountState", -1079249978} + {"wallet.initialAccountState", -1079249978}, + {"wallet.v3.accountState", 1977698154}, + {"wallet.v3.initialAccountState", 283460879} }; auto it = m.find(str); if (it == m.end()) { @@ -170,6 +210,7 @@ Result tl_constructor_from_string(tonlib_api::Function *object, const std {"onLiteServerQueryError", -677427533}, {"onLiteServerQueryResult", 2056444510}, {"options.setConfig", 646497241}, + {"options.validateConfig", -346965447}, {"packAccountAddress", -1388561940}, {"query.estimateFees", -957002175}, {"query.forget", -1211985313}, @@ -185,6 +226,11 @@ Result tl_constructor_from_string(tonlib_api::Function *object, const std {"setLogStream", -1364199535}, {"setLogTagVerbosityLevel", -2095589738}, {"setLogVerbosityLevel", -303429678}, + {"smc.getCode", -2115626088}, + {"smc.getData", -427601079}, + {"smc.getState", -214390293}, + {"smc.load", -903491521}, + {"smc.runGetMethod", -255261270}, {"sync", -1617065525}, {"testGiver.getAccountAddress", -540100768}, {"testGiver.getAccountState", 267738275}, @@ -197,7 +243,8 @@ Result tl_constructor_from_string(tonlib_api::Function *object, const std {"wallet.getAccountAddress", -1004103180}, {"wallet.getAccountState", 462294850}, {"wallet.init", -395706309}, - {"wallet.sendGrams", 297317621} + {"wallet.sendGrams", 297317621}, + {"wallet.v3.getAccountAddress", 1011655671} }; auto it = m.find(str); if (it == m.end()) { @@ -328,7 +375,7 @@ Status from_json(tonlib_api::fees &to, JsonObject &from) { } return Status::OK(); } -Status from_json(tonlib_api::inputKey &to, JsonObject &from) { +Status from_json(tonlib_api::inputKeyRegular &to, JsonObject &from) { { TRY_RESULT(value, get_json_object_field(from, "key", JsonValue::Type::Null, true)); if (value.type() != JsonValue::Type::Null) { @@ -547,6 +594,15 @@ Status from_json(tonlib_api::generic_accountStateWallet &to, JsonObject &from) { } return Status::OK(); } +Status from_json(tonlib_api::generic_accountStateWalletV3 &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "account_state", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.account_state_, value)); + } + } + return Status::OK(); +} Status from_json(tonlib_api::generic_accountStateTestGiver &to, JsonObject &from) { { TRY_RESULT(value, get_json_object_field(from, "account_state", JsonValue::Type::Null, true)); @@ -601,6 +657,15 @@ Status from_json(tonlib_api::liteServer_info &to, JsonObject &from) { } return Status::OK(); } +Status from_json(tonlib_api::options_configInfo &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "default_wallet_id", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.default_wallet_id_, value)); + } + } + return Status::OK(); +} Status from_json(tonlib_api::query_fees &to, JsonObject &from) { { TRY_RESULT(value, get_json_object_field(from, "source_fees", JsonValue::Type::Null, true)); @@ -808,6 +873,54 @@ Status from_json(tonlib_api::raw_transactions &to, JsonObject &from) { } return Status::OK(); } +Status from_json(tonlib_api::smc_info &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "id", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.id_, value)); + } + } + return Status::OK(); +} +Status from_json(tonlib_api::smc_methodIdNumber &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "number", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.number_, value)); + } + } + return Status::OK(); +} +Status from_json(tonlib_api::smc_methodIdName &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "name", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.name_, value)); + } + } + return Status::OK(); +} +Status from_json(tonlib_api::smc_runResult &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "gas_used", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.gas_used_, value)); + } + } + { + TRY_RESULT(value, get_json_object_field(from, "stack", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.stack_, value)); + } + } + { + TRY_RESULT(value, get_json_object_field(from, "exit_code", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.exit_code_, value)); + } + } + return Status::OK(); +} Status from_json(tonlib_api::testGiver_accountState &to, JsonObject &from) { { TRY_RESULT(value, get_json_object_field(from, "balance", JsonValue::Type::Null, true)); @@ -871,6 +984,63 @@ Status from_json(tonlib_api::testWallet_initialAccountState &to, JsonObject &fro } return Status::OK(); } +Status from_json(tonlib_api::tvm_cell &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "bytes", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.bytes_, value)); + } + } + return Status::OK(); +} +Status from_json(tonlib_api::tvm_numberDecimal &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "number", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.number_, value)); + } + } + return Status::OK(); +} +Status from_json(tonlib_api::tvm_slice &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "bytes", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.bytes_, value)); + } + } + return Status::OK(); +} +Status from_json(tonlib_api::tvm_stackEntrySlice &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "slice", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.slice_, value)); + } + } + return Status::OK(); +} +Status from_json(tonlib_api::tvm_stackEntryCell &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "cell", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.cell_, value)); + } + } + return Status::OK(); +} +Status from_json(tonlib_api::tvm_stackEntryNumber &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "number", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.number_, value)); + } + } + return Status::OK(); +} +Status from_json(tonlib_api::tvm_stackEntryUnsupported &to, JsonObject &from) { + return Status::OK(); +} Status from_json(tonlib_api::uninited_accountState &to, JsonObject &from) { { TRY_RESULT(value, get_json_object_field(from, "balance", JsonValue::Type::Null, true)); @@ -934,6 +1104,54 @@ Status from_json(tonlib_api::wallet_initialAccountState &to, JsonObject &from) { } return Status::OK(); } +Status from_json(tonlib_api::wallet_v3_accountState &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "balance", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.balance_, value)); + } + } + { + TRY_RESULT(value, get_json_object_field(from, "wallet_id", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.wallet_id_, value)); + } + } + { + TRY_RESULT(value, get_json_object_field(from, "seqno", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.seqno_, value)); + } + } + { + TRY_RESULT(value, get_json_object_field(from, "last_transaction_id", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.last_transaction_id_, value)); + } + } + { + TRY_RESULT(value, get_json_object_field(from, "sync_utime", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.sync_utime_, value)); + } + } + return Status::OK(); +} +Status from_json(tonlib_api::wallet_v3_initialAccountState &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "public_key", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.public_key_, value)); + } + } + { + TRY_RESULT(value, get_json_object_field(from, "wallet_id", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.wallet_id_, value)); + } + } + return Status::OK(); +} Status from_json(tonlib_api::addLogMessage &to, JsonObject &from) { { TRY_RESULT(value, get_json_object_field(from, "verbosity_level", JsonValue::Type::Null, true)); @@ -1330,6 +1548,15 @@ Status from_json(tonlib_api::options_setConfig &to, JsonObject &from) { } return Status::OK(); } +Status from_json(tonlib_api::options_validateConfig &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "config", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.config_, value)); + } + } + return Status::OK(); +} Status from_json(tonlib_api::packAccountAddress &to, JsonObject &from) { { TRY_RESULT(value, get_json_object_field(from, "account_address", JsonValue::Type::Null, true)); @@ -1513,6 +1740,63 @@ Status from_json(tonlib_api::setLogVerbosityLevel &to, JsonObject &from) { } return Status::OK(); } +Status from_json(tonlib_api::smc_getCode &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "id", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.id_, value)); + } + } + return Status::OK(); +} +Status from_json(tonlib_api::smc_getData &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "id", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.id_, value)); + } + } + return Status::OK(); +} +Status from_json(tonlib_api::smc_getState &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "id", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.id_, value)); + } + } + return Status::OK(); +} +Status from_json(tonlib_api::smc_load &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "account_address", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.account_address_, value)); + } + } + return Status::OK(); +} +Status from_json(tonlib_api::smc_runGetMethod &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "id", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.id_, value)); + } + } + { + TRY_RESULT(value, get_json_object_field(from, "method", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.method_, value)); + } + } + { + TRY_RESULT(value, get_json_object_field(from, "stack", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.stack_, value)); + } + } + return Status::OK(); +} Status from_json(tonlib_api::sync &to, JsonObject &from) { return Status::OK(); } @@ -1684,6 +1968,15 @@ Status from_json(tonlib_api::wallet_sendGrams &to, JsonObject &from) { } return Status::OK(); } +Status from_json(tonlib_api::wallet_v3_getAccountAddress &to, JsonObject &from) { + { + TRY_RESULT(value, get_json_object_field(from, "initital_account_state", JsonValue::Type::Null, true)); + if (value.type() != JsonValue::Type::Null) { + TRY_STATUS(from_json(to.initital_account_state_, value)); + } + } + return Status::OK(); +} void to_json(JsonValueScope &jv, const tonlib_api::accountAddress &object) { auto jo = jv.enter_object(); jo << ctie("@type", "accountAddress"); @@ -1739,9 +2032,9 @@ void to_json(JsonValueScope &jv, const tonlib_api::fees &object) { void to_json(JsonValueScope &jv, const tonlib_api::InputKey &object) { tonlib_api::downcast_call(const_cast(object), [&jv](const auto &object) { to_json(jv, object); }); } -void to_json(JsonValueScope &jv, const tonlib_api::inputKey &object) { +void to_json(JsonValueScope &jv, const tonlib_api::inputKeyRegular &object) { auto jo = jv.enter_object(); - jo << ctie("@type", "inputKey"); + jo << ctie("@type", "inputKeyRegular"); if (object.key_) { jo << ctie("key", ToJson(object.key_)); } @@ -1878,6 +2171,13 @@ void to_json(JsonValueScope &jv, const tonlib_api::generic_accountStateWallet &o jo << ctie("account_state", ToJson(object.account_state_)); } } +void to_json(JsonValueScope &jv, const tonlib_api::generic_accountStateWalletV3 &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "generic.accountStateWalletV3"); + if (object.account_state_) { + jo << ctie("account_state", ToJson(object.account_state_)); + } +} void to_json(JsonValueScope &jv, const tonlib_api::generic_accountStateTestGiver &object) { auto jo = jv.enter_object(); jo << ctie("@type", "generic.accountStateTestGiver"); @@ -1905,6 +2205,11 @@ void to_json(JsonValueScope &jv, const tonlib_api::liteServer_info &object) { jo << ctie("version", ToJson(object.version_)); jo << ctie("capabilities", ToJson(JsonInt64{object.capabilities_})); } +void to_json(JsonValueScope &jv, const tonlib_api::options_configInfo &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "options.configInfo"); + jo << ctie("default_wallet_id", ToJson(object.default_wallet_id_)); +} void to_json(JsonValueScope &jv, const tonlib_api::query_fees &object) { auto jo = jv.enter_object(); jo << ctie("@type", "query.fees"); @@ -1976,6 +2281,31 @@ void to_json(JsonValueScope &jv, const tonlib_api::raw_transactions &object) { jo << ctie("previous_transaction_id", ToJson(object.previous_transaction_id_)); } } +void to_json(JsonValueScope &jv, const tonlib_api::smc_info &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "smc.info"); + jo << ctie("id", ToJson(object.id_)); +} +void to_json(JsonValueScope &jv, const tonlib_api::smc_MethodId &object) { + tonlib_api::downcast_call(const_cast(object), [&jv](const auto &object) { to_json(jv, object); }); +} +void to_json(JsonValueScope &jv, const tonlib_api::smc_methodIdNumber &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "smc.methodIdNumber"); + jo << ctie("number", ToJson(object.number_)); +} +void to_json(JsonValueScope &jv, const tonlib_api::smc_methodIdName &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "smc.methodIdName"); + jo << ctie("name", ToJson(object.name_)); +} +void to_json(JsonValueScope &jv, const tonlib_api::smc_runResult &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "smc.runResult"); + jo << ctie("gas_used", ToJson(object.gas_used_)); + jo << ctie("stack", ToJson(object.stack_)); + jo << ctie("exit_code", ToJson(object.exit_code_)); +} void to_json(JsonValueScope &jv, const tonlib_api::testGiver_accountState &object) { auto jo = jv.enter_object(); jo << ctie("@type", "testGiver.accountState"); @@ -2001,6 +2331,49 @@ void to_json(JsonValueScope &jv, const tonlib_api::testWallet_initialAccountStat jo << ctie("@type", "testWallet.initialAccountState"); jo << ctie("public_key", ToJson(object.public_key_)); } +void to_json(JsonValueScope &jv, const tonlib_api::tvm_cell &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "tvm.cell"); + jo << ctie("bytes", ToJson(object.bytes_)); +} +void to_json(JsonValueScope &jv, const tonlib_api::tvm_numberDecimal &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "tvm.numberDecimal"); + jo << ctie("number", ToJson(object.number_)); +} +void to_json(JsonValueScope &jv, const tonlib_api::tvm_slice &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "tvm.slice"); + jo << ctie("bytes", ToJson(object.bytes_)); +} +void to_json(JsonValueScope &jv, const tonlib_api::tvm_StackEntry &object) { + tonlib_api::downcast_call(const_cast(object), [&jv](const auto &object) { to_json(jv, object); }); +} +void to_json(JsonValueScope &jv, const tonlib_api::tvm_stackEntrySlice &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "tvm.stackEntrySlice"); + if (object.slice_) { + jo << ctie("slice", ToJson(object.slice_)); + } +} +void to_json(JsonValueScope &jv, const tonlib_api::tvm_stackEntryCell &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "tvm.stackEntryCell"); + if (object.cell_) { + jo << ctie("cell", ToJson(object.cell_)); + } +} +void to_json(JsonValueScope &jv, const tonlib_api::tvm_stackEntryNumber &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "tvm.stackEntryNumber"); + if (object.number_) { + jo << ctie("number", ToJson(object.number_)); + } +} +void to_json(JsonValueScope &jv, const tonlib_api::tvm_stackEntryUnsupported &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "tvm.stackEntryUnsupported"); +} void to_json(JsonValueScope &jv, const tonlib_api::uninited_accountState &object) { auto jo = jv.enter_object(); jo << ctie("@type", "uninited.accountState"); @@ -2026,6 +2399,23 @@ void to_json(JsonValueScope &jv, const tonlib_api::wallet_initialAccountState &o jo << ctie("@type", "wallet.initialAccountState"); jo << ctie("public_key", ToJson(object.public_key_)); } +void to_json(JsonValueScope &jv, const tonlib_api::wallet_v3_accountState &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "wallet.v3.accountState"); + jo << ctie("balance", ToJson(JsonInt64{object.balance_})); + jo << ctie("wallet_id", ToJson(object.wallet_id_)); + jo << ctie("seqno", ToJson(object.seqno_)); + if (object.last_transaction_id_) { + jo << ctie("last_transaction_id", ToJson(object.last_transaction_id_)); + } + jo << ctie("sync_utime", ToJson(object.sync_utime_)); +} +void to_json(JsonValueScope &jv, const tonlib_api::wallet_v3_initialAccountState &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "wallet.v3.initialAccountState"); + jo << ctie("public_key", ToJson(object.public_key_)); + jo << ctie("wallet_id", ToJson(object.wallet_id_)); +} void to_json(JsonValueScope &jv, const tonlib_api::addLogMessage &object) { auto jo = jv.enter_object(); jo << ctie("@type", "addLogMessage"); @@ -2226,6 +2616,13 @@ void to_json(JsonValueScope &jv, const tonlib_api::options_setConfig &object) { jo << ctie("config", ToJson(object.config_)); } } +void to_json(JsonValueScope &jv, const tonlib_api::options_validateConfig &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "options.validateConfig"); + if (object.config_) { + jo << ctie("config", ToJson(object.config_)); + } +} void to_json(JsonValueScope &jv, const tonlib_api::packAccountAddress &object) { auto jo = jv.enter_object(); jo << ctie("@type", "packAccountAddress"); @@ -2325,6 +2722,37 @@ void to_json(JsonValueScope &jv, const tonlib_api::setLogVerbosityLevel &object) jo << ctie("@type", "setLogVerbosityLevel"); jo << ctie("new_verbosity_level", ToJson(object.new_verbosity_level_)); } +void to_json(JsonValueScope &jv, const tonlib_api::smc_getCode &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "smc.getCode"); + jo << ctie("id", ToJson(object.id_)); +} +void to_json(JsonValueScope &jv, const tonlib_api::smc_getData &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "smc.getData"); + jo << ctie("id", ToJson(object.id_)); +} +void to_json(JsonValueScope &jv, const tonlib_api::smc_getState &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "smc.getState"); + jo << ctie("id", ToJson(object.id_)); +} +void to_json(JsonValueScope &jv, const tonlib_api::smc_load &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "smc.load"); + if (object.account_address_) { + jo << ctie("account_address", ToJson(object.account_address_)); + } +} +void to_json(JsonValueScope &jv, const tonlib_api::smc_runGetMethod &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "smc.runGetMethod"); + jo << ctie("id", ToJson(object.id_)); + if (object.method_) { + jo << ctie("method", ToJson(object.method_)); + } + jo << ctie("stack", ToJson(object.stack_)); +} void to_json(JsonValueScope &jv, const tonlib_api::sync &object) { auto jo = jv.enter_object(); jo << ctie("@type", "sync"); @@ -2421,5 +2849,12 @@ void to_json(JsonValueScope &jv, const tonlib_api::wallet_sendGrams &object) { jo << ctie("amount", ToJson(JsonInt64{object.amount_})); jo << ctie("message", ToJson(JsonBytes{object.message_})); } +void to_json(JsonValueScope &jv, const tonlib_api::wallet_v3_getAccountAddress &object) { + auto jo = jv.enter_object(); + jo << ctie("@type", "wallet.v3.getAccountAddress"); + if (object.initital_account_state_) { + jo << ctie("initital_account_state", ToJson(object.initital_account_state_)); + } +} } // namespace tonlib_api } // namespace ton diff --git a/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api_json.h b/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api_json.h index 5eea809726..d57816d82e 100644 --- a/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api_json.h +++ b/submodules/ton/tonlib-src/tl/generate/auto/tl/tonlib_api_json.h @@ -17,6 +17,8 @@ Result tl_constructor_from_string(tonlib_api::LogStream *object, const st Result tl_constructor_from_string(tonlib_api::SyncState *object, const std::string &str); Result tl_constructor_from_string(tonlib_api::Update *object, const std::string &str); Result tl_constructor_from_string(tonlib_api::generic_AccountState *object, const std::string &str); +Result tl_constructor_from_string(tonlib_api::smc_MethodId *object, const std::string &str); +Result tl_constructor_from_string(tonlib_api::tvm_StackEntry *object, const std::string &str); Result tl_constructor_from_string(tonlib_api::Object *object, const std::string &str); Result tl_constructor_from_string(tonlib_api::Function *object, const std::string &str); Status from_json(tonlib_api::accountAddress &to, JsonObject &from); @@ -28,7 +30,7 @@ Status from_json(tonlib_api::exportedEncryptedKey &to, JsonObject &from); Status from_json(tonlib_api::exportedKey &to, JsonObject &from); Status from_json(tonlib_api::exportedPemKey &to, JsonObject &from); Status from_json(tonlib_api::fees &to, JsonObject &from); -Status from_json(tonlib_api::inputKey &to, JsonObject &from); +Status from_json(tonlib_api::inputKeyRegular &to, JsonObject &from); Status from_json(tonlib_api::inputKeyFake &to, JsonObject &from); Status from_json(tonlib_api::key &to, JsonObject &from); Status from_json(tonlib_api::keyStoreTypeDirectory &to, JsonObject &from); @@ -49,10 +51,12 @@ Status from_json(tonlib_api::updateSyncState &to, JsonObject &from); Status from_json(tonlib_api::generic_accountStateRaw &to, JsonObject &from); Status from_json(tonlib_api::generic_accountStateTestWallet &to, JsonObject &from); Status from_json(tonlib_api::generic_accountStateWallet &to, JsonObject &from); +Status from_json(tonlib_api::generic_accountStateWalletV3 &to, JsonObject &from); Status from_json(tonlib_api::generic_accountStateTestGiver &to, JsonObject &from); Status from_json(tonlib_api::generic_accountStateUninited &to, JsonObject &from); Status from_json(tonlib_api::internal_transactionId &to, JsonObject &from); Status from_json(tonlib_api::liteServer_info &to, JsonObject &from); +Status from_json(tonlib_api::options_configInfo &to, JsonObject &from); Status from_json(tonlib_api::query_fees &to, JsonObject &from); Status from_json(tonlib_api::query_info &to, JsonObject &from); Status from_json(tonlib_api::raw_accountState &to, JsonObject &from); @@ -60,12 +64,25 @@ Status from_json(tonlib_api::raw_initialAccountState &to, JsonObject &from); Status from_json(tonlib_api::raw_message &to, JsonObject &from); Status from_json(tonlib_api::raw_transaction &to, JsonObject &from); Status from_json(tonlib_api::raw_transactions &to, JsonObject &from); +Status from_json(tonlib_api::smc_info &to, JsonObject &from); +Status from_json(tonlib_api::smc_methodIdNumber &to, JsonObject &from); +Status from_json(tonlib_api::smc_methodIdName &to, JsonObject &from); +Status from_json(tonlib_api::smc_runResult &to, JsonObject &from); Status from_json(tonlib_api::testGiver_accountState &to, JsonObject &from); Status from_json(tonlib_api::testWallet_accountState &to, JsonObject &from); Status from_json(tonlib_api::testWallet_initialAccountState &to, JsonObject &from); +Status from_json(tonlib_api::tvm_cell &to, JsonObject &from); +Status from_json(tonlib_api::tvm_numberDecimal &to, JsonObject &from); +Status from_json(tonlib_api::tvm_slice &to, JsonObject &from); +Status from_json(tonlib_api::tvm_stackEntrySlice &to, JsonObject &from); +Status from_json(tonlib_api::tvm_stackEntryCell &to, JsonObject &from); +Status from_json(tonlib_api::tvm_stackEntryNumber &to, JsonObject &from); +Status from_json(tonlib_api::tvm_stackEntryUnsupported &to, JsonObject &from); Status from_json(tonlib_api::uninited_accountState &to, JsonObject &from); Status from_json(tonlib_api::wallet_accountState &to, JsonObject &from); Status from_json(tonlib_api::wallet_initialAccountState &to, JsonObject &from); +Status from_json(tonlib_api::wallet_v3_accountState &to, JsonObject &from); +Status from_json(tonlib_api::wallet_v3_initialAccountState &to, JsonObject &from); Status from_json(tonlib_api::addLogMessage &to, JsonObject &from); Status from_json(tonlib_api::changeLocalPassword &to, JsonObject &from); Status from_json(tonlib_api::close &to, JsonObject &from); @@ -94,6 +111,7 @@ Status from_json(tonlib_api::liteServer_getInfo &to, JsonObject &from); Status from_json(tonlib_api::onLiteServerQueryError &to, JsonObject &from); Status from_json(tonlib_api::onLiteServerQueryResult &to, JsonObject &from); Status from_json(tonlib_api::options_setConfig &to, JsonObject &from); +Status from_json(tonlib_api::options_validateConfig &to, JsonObject &from); Status from_json(tonlib_api::packAccountAddress &to, JsonObject &from); Status from_json(tonlib_api::query_estimateFees &to, JsonObject &from); Status from_json(tonlib_api::query_forget &to, JsonObject &from); @@ -109,6 +127,11 @@ Status from_json(tonlib_api::runTests &to, JsonObject &from); Status from_json(tonlib_api::setLogStream &to, JsonObject &from); Status from_json(tonlib_api::setLogTagVerbosityLevel &to, JsonObject &from); Status from_json(tonlib_api::setLogVerbosityLevel &to, JsonObject &from); +Status from_json(tonlib_api::smc_getCode &to, JsonObject &from); +Status from_json(tonlib_api::smc_getData &to, JsonObject &from); +Status from_json(tonlib_api::smc_getState &to, JsonObject &from); +Status from_json(tonlib_api::smc_load &to, JsonObject &from); +Status from_json(tonlib_api::smc_runGetMethod &to, JsonObject &from); Status from_json(tonlib_api::sync &to, JsonObject &from); Status from_json(tonlib_api::testGiver_getAccountAddress &to, JsonObject &from); Status from_json(tonlib_api::testGiver_getAccountState &to, JsonObject &from); @@ -122,6 +145,7 @@ Status from_json(tonlib_api::wallet_getAccountAddress &to, JsonObject &from); Status from_json(tonlib_api::wallet_getAccountState &to, JsonObject &from); Status from_json(tonlib_api::wallet_init &to, JsonObject &from); Status from_json(tonlib_api::wallet_sendGrams &to, JsonObject &from); +Status from_json(tonlib_api::wallet_v3_getAccountAddress &to, JsonObject &from); void to_json(JsonValueScope &jv, const tonlib_api::accountAddress &object); void to_json(JsonValueScope &jv, const tonlib_api::bip39Hints &object); void to_json(JsonValueScope &jv, const tonlib_api::config &object); @@ -132,7 +156,7 @@ void to_json(JsonValueScope &jv, const tonlib_api::exportedKey &object); void to_json(JsonValueScope &jv, const tonlib_api::exportedPemKey &object); void to_json(JsonValueScope &jv, const tonlib_api::fees &object); void to_json(JsonValueScope &jv, const tonlib_api::InputKey &object); -void to_json(JsonValueScope &jv, const tonlib_api::inputKey &object); +void to_json(JsonValueScope &jv, const tonlib_api::inputKeyRegular &object); void to_json(JsonValueScope &jv, const tonlib_api::inputKeyFake &object); void to_json(JsonValueScope &jv, const tonlib_api::key &object); void to_json(JsonValueScope &jv, const tonlib_api::KeyStoreType &object); @@ -158,10 +182,12 @@ void to_json(JsonValueScope &jv, const tonlib_api::generic_AccountState &object) void to_json(JsonValueScope &jv, const tonlib_api::generic_accountStateRaw &object); void to_json(JsonValueScope &jv, const tonlib_api::generic_accountStateTestWallet &object); void to_json(JsonValueScope &jv, const tonlib_api::generic_accountStateWallet &object); +void to_json(JsonValueScope &jv, const tonlib_api::generic_accountStateWalletV3 &object); void to_json(JsonValueScope &jv, const tonlib_api::generic_accountStateTestGiver &object); void to_json(JsonValueScope &jv, const tonlib_api::generic_accountStateUninited &object); void to_json(JsonValueScope &jv, const tonlib_api::internal_transactionId &object); void to_json(JsonValueScope &jv, const tonlib_api::liteServer_info &object); +void to_json(JsonValueScope &jv, const tonlib_api::options_configInfo &object); void to_json(JsonValueScope &jv, const tonlib_api::query_fees &object); void to_json(JsonValueScope &jv, const tonlib_api::query_info &object); void to_json(JsonValueScope &jv, const tonlib_api::raw_accountState &object); @@ -169,12 +195,27 @@ void to_json(JsonValueScope &jv, const tonlib_api::raw_initialAccountState &obje void to_json(JsonValueScope &jv, const tonlib_api::raw_message &object); void to_json(JsonValueScope &jv, const tonlib_api::raw_transaction &object); void to_json(JsonValueScope &jv, const tonlib_api::raw_transactions &object); +void to_json(JsonValueScope &jv, const tonlib_api::smc_info &object); +void to_json(JsonValueScope &jv, const tonlib_api::smc_MethodId &object); +void to_json(JsonValueScope &jv, const tonlib_api::smc_methodIdNumber &object); +void to_json(JsonValueScope &jv, const tonlib_api::smc_methodIdName &object); +void to_json(JsonValueScope &jv, const tonlib_api::smc_runResult &object); void to_json(JsonValueScope &jv, const tonlib_api::testGiver_accountState &object); void to_json(JsonValueScope &jv, const tonlib_api::testWallet_accountState &object); void to_json(JsonValueScope &jv, const tonlib_api::testWallet_initialAccountState &object); +void to_json(JsonValueScope &jv, const tonlib_api::tvm_cell &object); +void to_json(JsonValueScope &jv, const tonlib_api::tvm_numberDecimal &object); +void to_json(JsonValueScope &jv, const tonlib_api::tvm_slice &object); +void to_json(JsonValueScope &jv, const tonlib_api::tvm_StackEntry &object); +void to_json(JsonValueScope &jv, const tonlib_api::tvm_stackEntrySlice &object); +void to_json(JsonValueScope &jv, const tonlib_api::tvm_stackEntryCell &object); +void to_json(JsonValueScope &jv, const tonlib_api::tvm_stackEntryNumber &object); +void to_json(JsonValueScope &jv, const tonlib_api::tvm_stackEntryUnsupported &object); void to_json(JsonValueScope &jv, const tonlib_api::uninited_accountState &object); void to_json(JsonValueScope &jv, const tonlib_api::wallet_accountState &object); void to_json(JsonValueScope &jv, const tonlib_api::wallet_initialAccountState &object); +void to_json(JsonValueScope &jv, const tonlib_api::wallet_v3_accountState &object); +void to_json(JsonValueScope &jv, const tonlib_api::wallet_v3_initialAccountState &object); void to_json(JsonValueScope &jv, const tonlib_api::addLogMessage &object); void to_json(JsonValueScope &jv, const tonlib_api::changeLocalPassword &object); void to_json(JsonValueScope &jv, const tonlib_api::close &object); @@ -203,6 +244,7 @@ void to_json(JsonValueScope &jv, const tonlib_api::liteServer_getInfo &object); void to_json(JsonValueScope &jv, const tonlib_api::onLiteServerQueryError &object); void to_json(JsonValueScope &jv, const tonlib_api::onLiteServerQueryResult &object); void to_json(JsonValueScope &jv, const tonlib_api::options_setConfig &object); +void to_json(JsonValueScope &jv, const tonlib_api::options_validateConfig &object); void to_json(JsonValueScope &jv, const tonlib_api::packAccountAddress &object); void to_json(JsonValueScope &jv, const tonlib_api::query_estimateFees &object); void to_json(JsonValueScope &jv, const tonlib_api::query_forget &object); @@ -218,6 +260,11 @@ void to_json(JsonValueScope &jv, const tonlib_api::runTests &object); void to_json(JsonValueScope &jv, const tonlib_api::setLogStream &object); void to_json(JsonValueScope &jv, const tonlib_api::setLogTagVerbosityLevel &object); void to_json(JsonValueScope &jv, const tonlib_api::setLogVerbosityLevel &object); +void to_json(JsonValueScope &jv, const tonlib_api::smc_getCode &object); +void to_json(JsonValueScope &jv, const tonlib_api::smc_getData &object); +void to_json(JsonValueScope &jv, const tonlib_api::smc_getState &object); +void to_json(JsonValueScope &jv, const tonlib_api::smc_load &object); +void to_json(JsonValueScope &jv, const tonlib_api::smc_runGetMethod &object); void to_json(JsonValueScope &jv, const tonlib_api::sync &object); void to_json(JsonValueScope &jv, const tonlib_api::testGiver_getAccountAddress &object); void to_json(JsonValueScope &jv, const tonlib_api::testGiver_getAccountState &object); @@ -231,6 +278,7 @@ void to_json(JsonValueScope &jv, const tonlib_api::wallet_getAccountAddress &obj void to_json(JsonValueScope &jv, const tonlib_api::wallet_getAccountState &object); void to_json(JsonValueScope &jv, const tonlib_api::wallet_init &object); void to_json(JsonValueScope &jv, const tonlib_api::wallet_sendGrams &object); +void to_json(JsonValueScope &jv, const tonlib_api::wallet_v3_getAccountAddress &object); inline void to_json(JsonValueScope &jv, const ton::tonlib_api::Object &object) { ton::tonlib_api::downcast_call(const_cast(object),[&jv](const auto &object) { to_json(jv, object); }); } diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/.TonlibClient.cpp.swp b/submodules/ton/tonlib-src/tl/generate/scheme/.tonlib_api.tl.swp similarity index 66% rename from submodules/ton/tonlib-src/tonlib/tonlib/.TonlibClient.cpp.swp rename to submodules/ton/tonlib-src/tl/generate/scheme/.tonlib_api.tl.swp index 30da146e5e..47e8571856 100644 Binary files a/submodules/ton/tonlib-src/tonlib/tonlib/.TonlibClient.cpp.swp and b/submodules/ton/tonlib-src/tl/generate/scheme/.tonlib_api.tl.swp differ diff --git a/submodules/ton/tonlib-src/tl/generate/scheme/tonlib_api.tl b/submodules/ton/tonlib-src/tl/generate/scheme/tonlib_api.tl index 0963f27230..e6778df578 100644 --- a/submodules/ton/tonlib-src/tl/generate/scheme/tonlib_api.tl +++ b/submodules/ton/tonlib-src/tl/generate/scheme/tonlib_api.tl @@ -22,9 +22,10 @@ keyStoreTypeInMemory = KeyStoreType; config config:string blockchain_name:string use_callbacks_for_network:Bool ignore_cache:Bool = Config; options config:config keystore_type:KeyStoreType = Options; +options.configInfo default_wallet_id:int53 = options.ConfigInfo; key public_key:string secret:secureBytes = Key; -inputKey key:key local_password:secureBytes = InputKey; +inputKeyRegular key:key local_password:secureBytes = InputKey; inputKeyFake = InputKey; exportedKey word_list:vector = ExportedKey; exportedPemKey pem:secureString = ExportedPemKey; @@ -50,6 +51,9 @@ testWallet.accountState balance:int64 seqno:int32 last_transaction_id:internal.t wallet.initialAccountState public_key:string = wallet.InitialAccountState; wallet.accountState balance:int64 seqno:int32 last_transaction_id:internal.transactionId sync_utime:int53 = wallet.AccountState; +wallet.v3.initialAccountState public_key:string wallet_id:int53 = wallet.v3.InitialAccountState; +wallet.v3.accountState balance:int64 wallet_id:int53 seqno:int32 last_transaction_id:internal.transactionId sync_utime:int53 = wallet.v3.AccountState; + testGiver.accountState balance:int64 seqno:int32 last_transaction_id:internal.transactionId sync_utime:int53= testGiver.AccountState; uninited.accountState balance:int64 last_transaction_id:internal.transactionId frozen_hash:bytes sync_utime:int53 = uninited.AccountState; @@ -61,6 +65,7 @@ uninited.accountState balance:int64 last_transaction_id:internal.transactionId f generic.accountStateRaw account_state:raw.accountState = generic.AccountState; generic.accountStateTestWallet account_state:testWallet.accountState = generic.AccountState; generic.accountStateWallet account_state:wallet.accountState = generic.AccountState; +generic.accountStateWalletV3 account_state:wallet.v3.accountState = generic.AccountState; generic.accountStateTestGiver account_state:testGiver.accountState = generic.AccountState; generic.accountStateUninited account_state:uninited.accountState = generic.AccountState; @@ -73,25 +78,41 @@ fees in_fwd_fee:int53 storage_fee:int53 gas_fee:int53 fwd_fee:int53= Fees; query.fees source_fees:fees destination_fees:fees = query.Fees; query.info id:int53 valid_until:int53 body_hash:bytes = query.Info; +tvm.slice bytes:string = tvm.Slice; +tvm.cell bytes:string = tvm.Cell; +tvm.numberDecimal number:string = tvm.Number; + +tvm.stackEntrySlice slice:tvm.slice = tvm.StackEntry; +tvm.stackEntryCell cell:tvm.cell = tvm.StackEntry; +tvm.stackEntryNumber number:tvm.Number = tvm.StackEntry; +tvm.stackEntryUnsupported = tvm.StackEntry; + +smc.info id:int53 = smc.Info; + +smc.methodIdNumber number:int32 = smc.MethodId; +smc.methodIdName name:string = smc.MethodId; + +smc.runResult gas_used:int53 stack:vector exit_code:int32 = smc.RunResult; + updateSendLiteServerQuery id:int64 data:bytes = Update; updateSyncState sync_state:SyncState = Update; -//@class LogStream @description Describes a stream to which TDLib internal log is written +//@class LogStream @description Describes a stream to which tonlib internal log is written //@description The log is written to stderr or an OS specific log logStreamDefault = LogStream; -//@description The log is written to a file @path Path to the file to where the internal TDLib log will be written @max_file_size Maximum size of the file to where the internal TDLib log is written before the file will be auto-rotated +//@description The log is written to a file @path Path to the file to where the internal tonlib log will be written @max_file_size Maximum size of the file to where the internal tonlib log is written before the file will be auto-rotated logStreamFile path:string max_file_size:int53 = LogStream; //@description The log is written nowhere logStreamEmpty = LogStream; -//@description Contains a TDLib internal log verbosity level @verbosity_level Log verbosity level +//@description Contains a tonlib internal log verbosity level @verbosity_level Log verbosity level logVerbosityLevel verbosity_level:int32 = LogVerbosityLevel; -//@description Contains a list of available TDLib internal log tags @tags List of log tags +//@description Contains a list of available tonlib internal log tags @tags List of log tags logTags tags:vector = LogTags; data bytes:secureBytes = Data; @@ -104,6 +125,7 @@ init options:options = Ok; close = Ok; options.setConfig config:config = Ok; +options.validateConfig config:config = options.ConfigInfo; createNewKey local_password:secureBytes mnemonic_password:secureBytes random_extra_seed:secureBytes = Key; deleteKey key:key = Ok; @@ -122,7 +144,6 @@ kdf password:secureBytes salt:secureBytes iterations:int32 = Data; unpackAccountAddress account_address:string = UnpackedAccountAddress; packAccountAddress account_address:unpackedAccountAddress = AccountAddress; - getBip39Hints prefix:string = Bip39Hints; //raw.init initial_account_state:raw.initialAccountState = Ok; @@ -143,6 +164,8 @@ wallet.getAccountAddress initital_account_state:wallet.initialAccountState = Acc wallet.getAccountState account_address:accountAddress = wallet.AccountState; wallet.sendGrams private_key:InputKey destination:accountAddress seqno:int32 valid_until:int53 amount:int64 message:bytes = SendGramsResult; +wallet.v3.getAccountAddress initital_account_state:wallet.v3.initialAccountState = AccountAddress; + testGiver.getAccountState = testGiver.AccountState; testGiver.getAccountAddress = AccountAddress; testGiver.sendGrams destination:accountAddress seqno:int32 amount:int64 message:bytes = SendGramsResult; @@ -160,6 +183,12 @@ query.forget id:int53 = Ok; query.estimateFees id:int53 ignore_chksig:Bool = query.Fees; query.getInfo id:int53 = query.Info; +smc.load account_address:accountAddress = smc.Info; +smc.getCode id:int53 = tvm.Cell; +smc.getData id:int53 = tvm.Cell; +smc.getState id:int53 = tvm.Cell; +smc.runGetMethod id:int53 method:smc.MethodId stack:vector = smc.RunResult; + onLiteServerQueryResult id:int64 bytes:bytes = Ok; onLiteServerQueryError id:int64 error:error = Ok; @@ -167,29 +196,29 @@ runTests dir:string = Ok; liteServer.getInfo = liteServer.Info; -//@description Sets new log stream for internal logging of TDLib. This is an offline method. Can be called before authorization. Can be called synchronously @log_stream New log stream +//@description Sets new log stream for internal logging of tonlib. This is an offline method. Can be called before authorization. Can be called synchronously @log_stream New log stream setLogStream log_stream:LogStream = Ok; -//@description Returns information about currently used log stream for internal logging of TDLib. This is an offline method. Can be called before authorization. Can be called synchronously +//@description Returns information about currently used log stream for internal logging of tonlib. This is an offline method. Can be called before authorization. Can be called synchronously getLogStream = LogStream; -//@description Sets the verbosity level of the internal logging of TDLib. This is an offline method. Can be called before authorization. Can be called synchronously +//@description Sets the verbosity level of the internal logging of tonlib. This is an offline method. Can be called before authorization. Can be called synchronously //@new_verbosity_level New value of the verbosity level for logging. Value 0 corresponds to fatal errors, value 1 corresponds to errors, value 2 corresponds to warnings and debug warnings, value 3 corresponds to informational, value 4 corresponds to debug, value 5 corresponds to verbose debug, value greater than 5 and up to 1023 can be used to enable even more logging setLogVerbosityLevel new_verbosity_level:int32 = Ok; -//@description Returns current verbosity level of the internal logging of TDLib. This is an offline method. Can be called before authorization. Can be called synchronously +//@description Returns current verbosity level of the internal logging of tonlib. This is an offline method. Can be called before authorization. Can be called synchronously getLogVerbosityLevel = LogVerbosityLevel; -//@description Returns list of available TDLib internal log tags, for example, ["actor", "binlog", "connections", "notifications", "proxy"]. This is an offline method. Can be called before authorization. Can be called synchronously +//@description Returns list of available tonlib internal log tags, for example, ["actor", "binlog", "connections", "notifications", "proxy"]. This is an offline method. Can be called before authorization. Can be called synchronously getLogTags = LogTags; -//@description Sets the verbosity level for a specified TDLib internal log tag. This is an offline method. Can be called before authorization. Can be called synchronously +//@description Sets the verbosity level for a specified tonlib internal log tag. This is an offline method. Can be called before authorization. Can be called synchronously //@tag Logging tag to change verbosity level @new_verbosity_level New verbosity level; 1-1024 setLogTagVerbosityLevel tag:string new_verbosity_level:int32 = Ok; -//@description Returns current verbosity level for a specified TDLib internal log tag. This is an offline method. Can be called before authorization. Can be called synchronously @tag Logging tag to change verbosity level +//@description Returns current verbosity level for a specified tonlib internal log tag. This is an offline method. Can be called before authorization. Can be called synchronously @tag Logging tag to change verbosity level getLogTagVerbosityLevel tag:string = LogVerbosityLevel; -//@description Adds a message to TDLib internal log. This is an offline method. Can be called before authorization. Can be called synchronously +//@description Adds a message to tonlib internal log. This is an offline method. Can be called before authorization. Can be called synchronously //@verbosity_level Minimum verbosity level needed for the message to be logged, 0-1023 @text Text of a message to log addLogMessage verbosity_level:int32 text:string = Ok; diff --git a/submodules/ton/tonlib-src/tl/generate/scheme/tonlib_api.tlo b/submodules/ton/tonlib-src/tl/generate/scheme/tonlib_api.tlo index edbbe50fc9..a670da5a67 100644 Binary files a/submodules/ton/tonlib-src/tl/generate/scheme/tonlib_api.tlo and b/submodules/ton/tonlib-src/tl/generate/scheme/tonlib_api.tlo differ diff --git a/submodules/ton/tonlib-src/tonlib/test/offline.cpp b/submodules/ton/tonlib-src/tonlib/test/offline.cpp index 9e89ba6476..c615397e3c 100644 --- a/submodules/ton/tonlib-src/tonlib/test/offline.cpp +++ b/submodules/ton/tonlib-src/tonlib/test/offline.cpp @@ -19,6 +19,7 @@ #include "block/block.h" #include "block/block-auto.h" +#include "block/mc-config.h" #include "vm/cells.h" #include "vm/boc.h" @@ -246,6 +247,17 @@ TEST(Tonlib, ParseAddres) { ASSERT_EQ("Uf9Tj6fMJP-OqhAdhKXxq36DL-HYSzCc3-9O6UNzqsgPfdyS", addr_str2->account_address_); } +TEST(Tonlib, ConfigParseBug) { + td::Slice literal = + "D1000000000000006400000000000186A0DE0000000003E8000000000000000F424000000000000F42400000000000002710000000000098" + "96800000000005F5E100000000003B9ACA00"; + unsigned char buff[128]; + int bits = (int)td::bitstring::parse_bitstring_hex_literal(buff, sizeof(buff), literal.begin(), literal.end()); + CHECK(bits >= 0); + auto slice = vm::CellBuilder().store_bits(td::ConstBitPtr{buff}, bits).finalize(); + block::Config::do_get_gas_limits_prices(std::move(slice), 21).ensure(); +} + TEST(Tonlib, EncryptionApi) { using tonlib_api::make_object; Client client; @@ -296,15 +308,15 @@ TEST(Tonlib, KeysApi) { td::SecureString{})) .move_as_ok(); - sync_send(client, make_object(make_object( + sync_send(client, make_object(make_object( make_object(key->public_key_, key->secret_.copy()), td::SecureString("wrong password")))) .ensure_error(); - //exportKey input_key:inputKey = ExportedKey; + //exportKey input_key:inputKeyRegular = ExportedKey; auto exported_key = sync_send(client, - make_object(make_object( + make_object(make_object( make_object(key->public_key_, key->secret_.copy()), local_password.copy()))) .move_as_ok(); LOG(ERROR) << to_string(exported_key); @@ -316,20 +328,20 @@ TEST(Tonlib, KeysApi) { return word_list_copy; }; - //changeLocalPassword input_key:inputKey new_local_password:bytes = Key; + //changeLocalPassword input_key:inputKeyRegular new_local_password:bytes = Key; auto new_key = sync_send(client, make_object( - make_object( + make_object( make_object(key->public_key_, key->secret_.copy()), local_password.copy()), td::SecureString("tmp local password"))) .move_as_ok(); sync_send(client, - make_object(make_object( + make_object(make_object( make_object(key->public_key_, new_key->secret_.copy()), local_password.copy()))) .ensure_error(); - auto exported_key2 = sync_send(client, make_object(make_object( + auto exported_key2 = sync_send(client, make_object(make_object( make_object(key->public_key_, new_key->secret_.copy()), td::SecureString("tmp local password")))) .move_as_ok(); @@ -347,7 +359,7 @@ TEST(Tonlib, KeysApi) { auto wrong_export_password = td::SecureString("wrong_export password"); auto exported_encrypted_key = sync_send(client, make_object( - make_object( + make_object( make_object(key->public_key_, new_key->secret_.copy()), td::SecureString("tmp local password")), export_password.copy())) @@ -392,12 +404,12 @@ TEST(Tonlib, KeysApi) { CHECK(imported_key->public_key_ == key->public_key_); CHECK(imported_key->secret_ != key->secret_); - //exportPemKey input_key:inputKey key_password:bytes = ExportedPemKey; + //exportPemKey input_key:inputKeyRegular key_password:bytes = ExportedPemKey; auto pem_password = td::SecureString("pem password"); auto r_exported_pem_key = sync_send( client, make_object( - make_object( + make_object( make_object(key->public_key_, imported_key->secret_.copy()), new_local_password.copy()), pem_password.copy())); if (r_exported_pem_key.is_error() && r_exported_pem_key.error().message() == "INTERNAL Not supported") { diff --git a/submodules/ton/tonlib-src/tonlib/test/online.cpp b/submodules/ton/tonlib-src/tonlib/test/online.cpp index 11040e53a1..8eabc452e2 100644 --- a/submodules/ton/tonlib-src/tonlib/test/online.cpp +++ b/submodules/ton/tonlib-src/tonlib/test/online.cpp @@ -98,7 +98,7 @@ struct Key { std::string public_key; td::SecureString secret; tonlib_api::object_ptr get_input_key() const { - return tonlib_api::make_object( + return tonlib_api::make_object( tonlib_api::make_object(public_key, secret.copy()), td::SecureString("local")); } tonlib_api::object_ptr get_fake_input_key() const { @@ -133,9 +133,11 @@ void sync(Client& client) { sync_send(client, make_object()).ensure(); } +static td::uint32 default_wallet_id{0}; std::string wallet_address(Client& client, const Key& key) { - return sync_send(client, make_object( - make_object(key.public_key))) + return sync_send(client, + make_object( + make_object(key.public_key, default_wallet_id))) .move_as_ok() ->account_address_; } @@ -171,6 +173,7 @@ AccountState get_account_state(Client& client, std::string address) { case tonlib_api::generic_accountStateUninited::ID: res.type = AccountState::Empty; break; + case tonlib_api::generic_accountStateWalletV3::ID: case tonlib_api::generic_accountStateWallet::ID: res.type = AccountState::Wallet; break; @@ -358,8 +361,9 @@ Wallet create_empty_wallet(Client& client) { Wallet wallet{"", {key->public_key_, std::move(key->secret_)}}; auto account_address = - sync_send(client, make_object( - make_object(wallet.key.public_key))) + sync_send(client, + make_object( + make_object(wallet.key.public_key, default_wallet_id))) .move_as_ok(); wallet.address = account_address->account_address_; @@ -462,29 +466,31 @@ void test_multisig(Client& client, const Wallet& giver_wallet) { transfer_grams(client, giver_wallet, address, 1 * Gramm).ensure(); auto init_state = ms->get_init_state(); - // Just transfer all (some) money back in one query - vm::CellBuilder icb; - ton::GenericAccount::store_int_message(icb, block::StdAddress::parse(giver_wallet.address).move_as_ok(), - 5 * Gramm / 10); - icb.store_bytes("\0\0\0\0", 4); - vm::CellString::store(icb, "Greatings from multisig", 35 * 8).ensure(); - ton::MultisigWallet::QueryBuilder qb(-1, icb.finalize()); - for (int i = 0; i < k - 1; i++) { - qb.sign(i, private_keys[i]); + for (int i = 0; i < 2; i++) { + // Just transfer all (some) money back in one query + vm::CellBuilder icb; + ton::GenericAccount::store_int_message(icb, block::StdAddress::parse(giver_wallet.address).move_as_ok(), 1); + icb.store_bytes("\0\0\0\0", 4); + vm::CellString::store(icb, "Greatings from multisig", 35 * 8).ensure(); + ton::MultisigWallet::QueryBuilder qb(-1 - i, icb.finalize()); + for (int i = 0; i < k - 1; i++) { + qb.sign(i, private_keys[i]); + } + + auto query_id = + create_raw_query(client, address, + i == 0 ? vm::std_boc_serialize(ms->get_state().code).move_as_ok().as_slice().str() : "", + i == 0 ? vm::std_boc_serialize(ms->get_state().data).move_as_ok().as_slice().str() : "", + vm::std_boc_serialize(qb.create(k - 1, private_keys[k - 1])).move_as_ok().as_slice().str()) + .move_as_ok(); + auto fees = query_estimate_fees(client, query_id); + + LOG(INFO) << "Expected src fees: " << fees.first; + LOG(INFO) << "Expected dst fees: " << fees.second; + auto a_state = get_account_state(client, address); + query_send(client, query_id); + auto new_a_state = wait_state_change(client, a_state, a_state.sync_utime + 30).move_as_ok(); } - - auto query_id = - create_raw_query(client, address, vm::std_boc_serialize(ms->get_state().code).move_as_ok().as_slice().str(), - vm::std_boc_serialize(ms->get_state().data).move_as_ok().as_slice().str(), - vm::std_boc_serialize(qb.create(k - 1, private_keys[k - 1])).move_as_ok().as_slice().str()) - .move_as_ok(); - auto fees = query_estimate_fees(client, query_id); - - LOG(INFO) << "Expected src fees: " << fees.first; - LOG(INFO) << "Expected dst fees: " << fees.second; - auto a_state = get_account_state(client, address); - query_send(client, query_id); - auto new_a_state = wait_state_change(client, a_state, a_state.sync_utime + 30).move_as_ok(); } int main(int argc, char* argv[]) { @@ -515,8 +521,8 @@ int main(int argc, char* argv[]) { if (reset_keystore_dir) { td::rmrf(keystore_dir).ignore(); - td::mkdir(keystore_dir).ensure(); } + td::mkdir(keystore_dir).ensure(); SET_VERBOSITY_LEVEL(VERBOSITY_NAME(INFO)); static_send(make_object("tonlib_query", 4)).ensure(); @@ -527,6 +533,10 @@ int main(int argc, char* argv[]) { Client client; { + auto info = sync_send(client, make_object( + make_object(global_config_str, "", false, false))) + .move_as_ok(); + default_wallet_id = static_cast(info->default_wallet_id_); sync_send(client, make_object(make_object( make_object(global_config_str, "", false, false), make_object(keystore_dir)))) diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/.ExtClient.h.swp b/submodules/ton/tonlib-src/tonlib/tonlib/.ExtClient.h.swp deleted file mode 100644 index b7d354d54d..0000000000 Binary files a/submodules/ton/tonlib-src/tonlib/tonlib/.ExtClient.h.swp and /dev/null differ diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/CellString.cpp b/submodules/ton/tonlib-src/tonlib/tonlib/CellString.cpp deleted file mode 100644 index ad2cbf5f8f..0000000000 --- a/submodules/ton/tonlib-src/tonlib/tonlib/CellString.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "CellString.h" -#include "td/utils/misc.h" - -#include "vm/cells/CellSlice.h" - -namespace vm { -td::Status CellString::store(CellBuilder &cb, td::Slice slice, unsigned int top_bits) { - td::uint32 size = td::narrow_cast(slice.size() * 8); - return store(cb, td::BitSlice(slice.ubegin(), size), top_bits); -} - -td::Status CellString::store(CellBuilder &cb, td::BitSlice slice, unsigned int top_bits) { - if (slice.size() > max_bytes * 8) { - return td::Status::Error("String is too long (1)"); - } - unsigned int head = td::min(slice.size(), td::min(cb.remaining_bits(), top_bits)) / 8 * 8; - auto max_bits = vm::Cell::max_bits / 8 * 8; - auto depth = 1 + (slice.size() - head + max_bits - 1) / max_bits; - if (depth > max_chain_length) { - return td::Status::Error("String is too long (2)"); - } - cb.append_bitslice(slice.subslice(0, head)); - slice.advance(head); - if (slice.size() == 0) { - return td::Status::OK(); - } - CellBuilder child_cb; - store(child_cb, std::move(slice)); - cb.store_ref(child_cb.finalize()); - return td::Status::OK(); -} - -template -void CellString::for_each(F &&f, CellSlice &cs, unsigned int top_bits) { - unsigned int head = td::min(cs.size(), top_bits); - f(cs.prefetch_bits(head)); - if (!cs.have_refs()) { - return; - } - auto ref = cs.prefetch_ref(); - while (true) { - auto cs = vm::load_cell_slice(ref); - f(cs.prefetch_bits(cs.size())); - if (!cs.have_refs()) { - return; - } - ref = cs.prefetch_ref(); - } -} - -td::Result CellString::load(CellSlice &cs, unsigned int top_bits) { - unsigned int size = 0; - for_each([&](auto slice) { size += slice.size(); }, cs, top_bits); - if (size % 8 != 0) { - return td::Status::Error("Size is not divisible by 8"); - } - std::string res(size / 8, 0); - - td::BitPtr to(td::MutableSlice(res).ubegin()); - for_each([&](auto slice) { to.concat(slice); }, cs, top_bits); - CHECK(to.offs == (int)size); - return res; -} -} // namespace vm diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/CellString.h b/submodules/ton/tonlib-src/tonlib/tonlib/CellString.h deleted file mode 100644 index 89c933d876..0000000000 --- a/submodules/ton/tonlib-src/tonlib/tonlib/CellString.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include "td/utils/Status.h" - -#include "vm/cells/CellBuilder.h" - -namespace vm { -class CellString { - public: - static constexpr unsigned int max_bytes = 1024; - static constexpr unsigned int max_chain_length = 16; - - static td::Status store(CellBuilder &cb, td::Slice slice, unsigned int top_bits = Cell::max_bits); - static td::Status store(CellBuilder &cb, td::BitSlice slice, unsigned int top_bits = Cell::max_bits); - static td::Result load(CellSlice &cs, unsigned int top_bits = Cell::max_bits); - - private: - template - static void for_each(F &&f, CellSlice &cs, unsigned int top_bits = Cell::max_bits); -}; - -} // namespace vm diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/Client.cpp b/submodules/ton/tonlib-src/tonlib/tonlib/Client.cpp index d22e7ac792..83b41ad2fc 100644 --- a/submodules/ton/tonlib-src/tonlib/tonlib/Client.cpp +++ b/submodules/ton/tonlib-src/tonlib/tonlib/Client.cpp @@ -134,7 +134,7 @@ class Client::Impl final { }; Client::Client() : impl_(std::make_unique()) { - // At least it should be enough for everybody who uses TDLib + // At least it should be enough for everybody who uses tonlib // FIXME //td::init_openssl_threads(); } diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/ExtClientOutbound.cpp b/submodules/ton/tonlib-src/tonlib/tonlib/ExtClientOutbound.cpp index f1746af5d6..ee6ddc4fa8 100644 --- a/submodules/ton/tonlib-src/tonlib/tonlib/ExtClientOutbound.cpp +++ b/submodules/ton/tonlib-src/tonlib/tonlib/ExtClientOutbound.cpp @@ -42,6 +42,7 @@ class ExtClientOutboundImp : public ExtClientOutbound { auto it = queries_.find(id); if (it == queries_.end()) { promise.set_error(TonlibError::Internal("Unknown query id")); + return; } it->second.set_result(std::move(r_data)); queries_.erase(it); diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/GenericAccount.cpp b/submodules/ton/tonlib-src/tonlib/tonlib/GenericAccount.cpp deleted file mode 100644 index 9f44ede274..0000000000 --- a/submodules/ton/tonlib-src/tonlib/tonlib/GenericAccount.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#include "tonlib/GenericAccount.h" -#include "tonlib/utils.h" -#include "block/block-auto.h" -namespace tonlib { -td::Ref GenericAccount::get_init_state(td::Ref code, td::Ref data) noexcept { - return vm::CellBuilder() - .append_cellslice(binary_bitstring_to_cellslice("b{00110}").move_as_ok()) - .store_ref(std::move(code)) - .store_ref(std::move(data)) - .finalize(); -} -block::StdAddress GenericAccount::get_address(ton::WorkchainId workchain_id, - const td::Ref& init_state) noexcept { - return block::StdAddress(workchain_id, init_state->get_hash().bits(), true /*bounce*/); -} -td::Ref GenericAccount::create_ext_message(const block::StdAddress& address, td::Ref new_state, - td::Ref body) noexcept { - block::gen::Message::Record message; - /*info*/ { - block::gen::CommonMsgInfo::Record_ext_in_msg_info info; - /* src */ - tlb::csr_pack(info.src, block::gen::MsgAddressExt::Record_addr_none{}); - /* dest */ { - block::gen::MsgAddressInt::Record_addr_std dest; - dest.anycast = vm::CellBuilder().store_zeroes(1).as_cellslice_ref(); - dest.workchain_id = address.workchain; - dest.address = address.addr; - - tlb::csr_pack(info.dest, dest); - } - /* import_fee */ { - vm::CellBuilder cb; - block::tlb::t_Grams.store_integer_value(cb, td::BigInt256(0)); - info.import_fee = cb.as_cellslice_ref(); - } - - tlb::csr_pack(message.info, info); - } - /* init */ { - if (new_state.not_null()) { - // Just(Left(new_state)) - message.init = vm::CellBuilder() - .store_ones(1) - .store_zeroes(1) - .append_cellslice(vm::load_cell_slice(new_state)) - .as_cellslice_ref(); - } else { - message.init = vm::CellBuilder().store_zeroes(1).as_cellslice_ref(); - CHECK(message.init.not_null()); - } - } - /* body */ { - message.body = vm::CellBuilder().store_zeroes(1).append_cellslice(vm::load_cell_slice_ref(body)).as_cellslice_ref(); - } - - td::Ref res; - tlb::type_pack_cell(res, block::gen::t_Message_Any, message); - CHECK(res.not_null()); - - return res; -} -} // namespace tonlib diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/GenericAccount.h b/submodules/ton/tonlib-src/tonlib/tonlib/GenericAccount.h deleted file mode 100644 index 4a36d78a53..0000000000 --- a/submodules/ton/tonlib-src/tonlib/tonlib/GenericAccount.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once -#include "vm/cells.h" -#include "block/block.h" -namespace tonlib { -class GenericAccount { - public: - static td::Ref get_init_state(td::Ref code, td::Ref data) noexcept; - static block::StdAddress get_address(ton::WorkchainId workchain_id, const td::Ref& init_state) noexcept; - static td::Ref create_ext_message(const block::StdAddress& address, td::Ref new_state, - td::Ref body) noexcept; -}; -} // namespace tonlib diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/KeyStorage.cpp b/submodules/ton/tonlib-src/tonlib/tonlib/KeyStorage.cpp index c34468a2de..f1ac827156 100644 --- a/submodules/ton/tonlib-src/tonlib/tonlib/KeyStorage.cpp +++ b/submodules/ton/tonlib-src/tonlib/tonlib/KeyStorage.cpp @@ -169,18 +169,20 @@ td::Result KeyStorage::import_pem_key(td::Slice local_password, return save_key(DecryptedKey({}, std::move(key)), local_password); } -static std::string dummy_secret = "dummy secret of 32 bytes length!"; +td::SecureString get_dummy_secret() { + return td::SecureString("dummy secret of 32 bytes length!"); +} td::Result KeyStorage::export_encrypted_key(InputKey input_key, td::Slice key_password) { TRY_RESULT(decrypted_key, export_decrypted_key(std::move(input_key))); - auto res = decrypted_key.encrypt(key_password, dummy_secret); + auto res = decrypted_key.encrypt(key_password, get_dummy_secret()); return ExportedEncryptedKey{std::move(res.encrypted_data)}; } td::Result KeyStorage::import_encrypted_key(td::Slice local_password, td::Slice key_password, ExportedEncryptedKey exported_key) { EncryptedKey encrypted_key{std::move(exported_key.data), td::Ed25519::PublicKey(td::SecureString()), - td::SecureString(dummy_secret)}; + get_dummy_secret()}; TRY_RESULT_PREFIX(decrypted_key, encrypted_key.decrypt(key_password, false), TonlibError::KeyDecrypt()); return save_key(std::move(decrypted_key), local_password); } diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/LastBlock.cpp b/submodules/ton/tonlib-src/tonlib/tonlib/LastBlock.cpp index 234af99719..a2f94787b2 100644 --- a/submodules/ton/tonlib-src/tonlib/tonlib/LastBlock.cpp +++ b/submodules/ton/tonlib-src/tonlib/tonlib/LastBlock.cpp @@ -25,6 +25,8 @@ #include "lite-client/lite-client-common.h" +#include "td/utils/JsonBuilder.h" + namespace tonlib { // init_state <-> last_key_block @@ -313,6 +315,18 @@ bool LastBlock::update_mc_last_key_block(ton::BlockIdExt mc_key_block_id) { if (!state_.last_key_block_id.is_valid() || state_.last_key_block_id.id.seqno < mc_key_block_id.id.seqno) { state_.last_key_block_id = mc_key_block_id; VLOG(last_block) << "Update masterchain key block id: " << state_.last_key_block_id.to_str(); + if (true) { + td::JsonBuilder jb; + auto jo = jb.enter_object(); + jo("workchain", state_.last_key_block_id.id.workchain); + jo("shard", static_cast(state_.last_key_block_id.id.shard)); + jo("seqno", static_cast(state_.last_key_block_id.id.seqno)); + jo("root_hash", td::base64_encode(as_slice(state_.last_key_block_id.root_hash))); + jo("file_hash", td::base64_encode(as_slice(state_.last_key_block_id.file_hash))); + jo.leave(); + LOG(INFO) << jb.string_builder().as_cslice(); + } + //LOG(ERROR) << td::int64(state_.last_key_block_id.id.shard) << " " //<< td::base64_encode(state_.last_key_block_id.file_hash.as_slice()) << " " //<< td::base64_encode(state_.last_key_block_id.root_hash.as_slice()); diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/Logging.cpp b/submodules/ton/tonlib-src/tonlib/tonlib/Logging.cpp index 244ce4b4f9..a17b03ebe1 100644 --- a/submodules/ton/tonlib-src/tonlib/tonlib/Logging.cpp +++ b/submodules/ton/tonlib-src/tonlib/tonlib/Logging.cpp @@ -32,10 +32,17 @@ namespace tonlib { -static std::mutex logging_mutex; -static td::FileLog file_log; -static td::TsLog ts_log(&file_log); -static td::NullLog null_log; +struct LogData { + std::mutex logging_mutex; + td::FileLog file_log; + td::TsLog ts_log{&file_log}; + td::NullLog null_log; +}; + +auto &log_data() { + static LogData data; + return data; +} #define ADD_TAG(tag) \ { #tag, &VERBOSITY_NAME(tag) } @@ -48,7 +55,7 @@ td::Status Logging::set_current_stream(tonlib_api::object_ptr lock(logging_mutex); + std::lock_guard lock(log_data().logging_mutex); switch (stream->get_id()) { case tonlib_api::logStreamDefault::ID: td::log_interface = td::default_log_interface; @@ -60,13 +67,13 @@ td::Status Logging::set_current_stream(tonlib_api::object_ptrpath_, max_log_file_size)); + TRY_STATUS(log_data().file_log.init(file_stream->path_, max_log_file_size)); std::atomic_thread_fence(std::memory_order_release); // better than nothing - td::log_interface = &ts_log; + td::log_interface = &log_data().ts_log; return td::Status::OK(); } case tonlib_api::logStreamEmpty::ID: - td::log_interface = &null_log; + td::log_interface = &log_data().null_log; return td::Status::OK(); default: UNREACHABLE(); @@ -75,22 +82,22 @@ td::Status Logging::set_current_stream(tonlib_api::object_ptr> Logging::get_current_stream() { - std::lock_guard lock(logging_mutex); + std::lock_guard lock(log_data().logging_mutex); if (td::log_interface == td::default_log_interface) { return tonlib_api::make_object(); } - if (td::log_interface == &null_log) { + if (td::log_interface == &log_data().null_log) { return tonlib_api::make_object(); } - if (td::log_interface == &ts_log) { - return tonlib_api::make_object(file_log.get_path().str(), - file_log.get_rotate_threshold()); + if (td::log_interface == &log_data().ts_log) { + return tonlib_api::make_object(log_data().file_log.get_path().str(), + log_data().file_log.get_rotate_threshold()); } return td::Status::Error("Log stream is unrecognized"); } td::Status Logging::set_verbosity_level(int new_verbosity_level) { - std::lock_guard lock(logging_mutex); + std::lock_guard lock(log_data().logging_mutex); if (0 <= new_verbosity_level && new_verbosity_level <= VERBOSITY_NAME(NEVER)) { SET_VERBOSITY_LEVEL(VERBOSITY_NAME(FATAL) + new_verbosity_level); return td::Status::OK(); @@ -100,7 +107,7 @@ td::Status Logging::set_verbosity_level(int new_verbosity_level) { } int Logging::get_verbosity_level() { - std::lock_guard lock(logging_mutex); + std::lock_guard lock(log_data().logging_mutex); return GET_VERBOSITY_LEVEL(); } @@ -114,7 +121,7 @@ td::Status Logging::set_tag_verbosity_level(td::Slice tag, int new_verbosity_lev return td::Status::Error("Log tag is not found"); } - std::lock_guard lock(logging_mutex); + std::lock_guard lock(log_data().logging_mutex); *it->second = td::clamp(new_verbosity_level, 1, VERBOSITY_NAME(NEVER)); return td::Status::OK(); } @@ -125,7 +132,7 @@ td::Result Logging::get_tag_verbosity_level(td::Slice tag) { return td::Status::Error("Log tag is not found"); } - std::lock_guard lock(logging_mutex); + std::lock_guard lock(log_data().logging_mutex); return *it->second; } diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/TestGiver.cpp b/submodules/ton/tonlib-src/tonlib/tonlib/TestGiver.cpp deleted file mode 100644 index b906193d9e..0000000000 --- a/submodules/ton/tonlib-src/tonlib/tonlib/TestGiver.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#include "tonlib/TestGiver.h" -#include "tonlib/utils.h" - -#include "td/utils/base64.h" - -namespace tonlib { -const block::StdAddress& TestGiver::address() noexcept { - static block::StdAddress res = - block::StdAddress::parse("kf_8uRo6OBbQ97jCx2EIuKm8Wmt6Vb15-KsQHFLbKSMiYIny").move_as_ok(); - return res; -} - -vm::CellHash TestGiver::get_init_code_hash() noexcept { - return vm::CellHash::from_slice(td::base64_decode("wDkZp0yR4xo+9+BnuAPfGVjBzK6FPzqdv2DwRq3z3KE=").move_as_ok()); -} - -td::Ref TestGiver::make_a_gift_message(td::uint32 seqno, td::uint64 gramms, td::Slice message, - const block::StdAddress& dest_address) noexcept { - td::BigInt256 dest_addr; - dest_addr.import_bits(dest_address.addr.as_bitslice()); - vm::CellBuilder cb; - cb.append_cellslice(binary_bitstring_to_cellslice("b{01}").move_as_ok()) - .store_long(dest_address.bounceable, 1) - .append_cellslice(binary_bitstring_to_cellslice("b{000100}").move_as_ok()) - .store_long(dest_address.workchain, 8) - .store_int256(dest_addr, 256); - block::tlb::t_Grams.store_integer_value(cb, td::BigInt256(gramms)); - - cb.store_zeroes(9 + 64 + 32 + 1 + 1).store_bytes("\0\0\0\0", 4); - vm::CellString::store(cb, message, 35 * 8).ensure(); - auto message_inner = cb.finalize(); - return vm::CellBuilder().store_long(seqno, 32).store_long(1, 8).store_ref(message_inner).finalize(); -} -} // namespace tonlib diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/TestGiver.h b/submodules/ton/tonlib-src/tonlib/tonlib/TestGiver.h deleted file mode 100644 index f8b62599fe..0000000000 --- a/submodules/ton/tonlib-src/tonlib/tonlib/TestGiver.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once -#include "block/block.h" -#include "CellString.h" -namespace tonlib { -class TestGiver { - public: - static constexpr unsigned max_message_size = vm::CellString::max_bytes; - static const block::StdAddress& address() noexcept; - static vm::CellHash get_init_code_hash() noexcept; - static td::Ref make_a_gift_message(td::uint32 seqno, td::uint64 gramms, td::Slice message, - const block::StdAddress& dest_address) noexcept; -}; -} // namespace tonlib diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/TestWallet.cpp b/submodules/ton/tonlib-src/tonlib/tonlib/TestWallet.cpp deleted file mode 100644 index 8bdf78c94c..0000000000 --- a/submodules/ton/tonlib-src/tonlib/tonlib/TestWallet.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#include "tonlib/TestWallet.h" -#include "tonlib/GenericAccount.h" -#include "tonlib/utils.h" - -#include "vm/boc.h" -#include "td/utils/base64.h" - -namespace tonlib { -td::Ref TestWallet::get_init_state(const td::Ed25519::PublicKey& public_key) noexcept { - auto code = get_init_code(); - auto data = get_init_data(public_key); - return GenericAccount::get_init_state(std::move(code), std::move(data)); -} - -td::Ref TestWallet::get_init_message(const td::Ed25519::PrivateKey& private_key) noexcept { - std::string seq_no(4, 0); - auto signature = - private_key.sign(vm::CellBuilder().store_bytes(seq_no).finalize()->get_hash().as_slice()).move_as_ok(); - return vm::CellBuilder().store_bytes(signature).store_bytes(seq_no).finalize(); -} - -td::Ref TestWallet::make_a_gift_message(const td::Ed25519::PrivateKey& private_key, td::uint32 seqno, - td::int64 gramms, td::Slice message, - const block::StdAddress& dest_address) noexcept { - td::BigInt256 dest_addr; - dest_addr.import_bits(dest_address.addr.as_bitslice()); - vm::CellBuilder cb; - cb.append_cellslice(binary_bitstring_to_cellslice("b{01}").move_as_ok()) - .store_long(dest_address.bounceable, 1) - .append_cellslice(binary_bitstring_to_cellslice("b{000100}").move_as_ok()) - .store_long(dest_address.workchain, 8) - .store_int256(dest_addr, 256); - td::int32 send_mode = 3; - if (gramms == -1) { - gramms = 0; - send_mode += 128; - } - block::tlb::t_Grams.store_integer_value(cb, td::BigInt256(gramms)); - cb.store_zeroes(9 + 64 + 32 + 1 + 1).store_bytes("\0\0\0\0", 4); - vm::CellString::store(cb, message, 35 * 8).ensure(); - auto message_inner = cb.finalize(); - auto message_outer = - vm::CellBuilder().store_long(seqno, 32).store_long(send_mode, 8).store_ref(message_inner).finalize(); - auto signature = private_key.sign(message_outer->get_hash().as_slice()).move_as_ok(); - return vm::CellBuilder().store_bytes(signature).append_cellslice(vm::load_cell_slice(message_outer)).finalize(); -} - -td::Ref TestWallet::get_init_code() noexcept { - static auto res = [] { - auto serialized_code = td::base64_decode( - "te6ccgEEAQEAAAAAUwAAov8AIN0gggFMl7qXMO1E0NcLH+Ck8mCBAgDXGCDXCx/tRNDTH9P/" - "0VESuvKhIvkBVBBE+RDyovgAAdMfMSDXSpbTB9QC+wDe0aTIyx/L/8ntVA==") - .move_as_ok(); - return vm::std_boc_deserialize(serialized_code).move_as_ok(); - }(); - return res; -} - -vm::CellHash TestWallet::get_init_code_hash() noexcept { - return get_init_code()->get_hash(); -} - -td::Ref TestWallet::get_init_data(const td::Ed25519::PublicKey& public_key) noexcept { - return vm::CellBuilder().store_long(0, 32).store_bytes(public_key.as_octet_string()).finalize(); -} -} // namespace tonlib diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/TonlibClient.cpp b/submodules/ton/tonlib-src/tonlib/tonlib/TonlibClient.cpp index 12bb8fe8c1..95a089d720 100644 --- a/submodules/ton/tonlib-src/tonlib/tonlib/TonlibClient.cpp +++ b/submodules/ton/tonlib-src/tonlib/tonlib/TonlibClient.cpp @@ -31,6 +31,7 @@ #include "smc-envelope/GenericAccount.h" #include "smc-envelope/TestWallet.h" #include "smc-envelope/Wallet.h" +#include "smc-envelope/WalletV3.h" #include "smc-envelope/TestGiver.h" #include "auto/tl/tonlib_api.hpp" @@ -41,6 +42,7 @@ #include "vm/boc.h" +#include "td/utils/as.h" #include "td/utils/Random.h" #include "td/utils/optional.h" #include "td/utils/overloaded.h" @@ -101,6 +103,7 @@ struct RawAccountState { td::Ref code; td::Ref data; + td::Ref state; std::string frozen_hash; block::AccountState::Info info; }; @@ -114,9 +117,14 @@ tonlib_api::object_ptr to_transaction_id(con info.last_trans_hash.as_slice().str()); } +std::string to_bytes(td::Ref cell) { + return vm::std_boc_serialize(cell, vm::BagOfCells::Mode::WithCRC32C).move_as_ok().as_slice().str(); +} + class AccountState { public: - AccountState(block::StdAddress address, RawAccountState&& raw) : address_(std::move(address)), raw_(std::move(raw)) { + AccountState(block::StdAddress address, RawAccountState&& raw, td::uint32 wallet_id) + : address_(std::move(address)), raw_(std::move(raw)), wallet_id_(wallet_id) { wallet_type_ = guess_type(); } @@ -129,11 +137,11 @@ class AccountState { auto state = get_smc_state(); std::string code; if (state.code.not_null()) { - code = vm::std_boc_serialize(state.code).move_as_ok().as_slice().str(); + code = to_bytes(state.code); } std::string data; if (state.data.not_null()) { - data = vm::std_boc_serialize(state.data).move_as_ok().as_slice().str(); + data = to_bytes(state.data); } return tonlib_api::make_object(get_balance(), std::move(code), std::move(data), to_transaction_id(raw().info), raw().frozen_hash, @@ -157,6 +165,17 @@ class AccountState { return tonlib_api::make_object(get_balance(), static_cast(seqno), to_transaction_id(raw().info), get_sync_time()); } + td::Result> to_wallet_v3_accountState() const { + if (wallet_type_ != WalletV3) { + return TonlibError::AccountTypeUnexpected("WalletV3"); + } + auto wallet = ton::WalletV3(get_smc_state()); + TRY_RESULT(seqno, wallet.get_seqno()); + TRY_RESULT(wallet_id, wallet.get_wallet_id()); + return tonlib_api::make_object( + get_balance(), static_cast(wallet_id), static_cast(seqno), + to_transaction_id(raw().info), get_sync_time()); + } td::Result> to_testGiver_accountState() const { if (wallet_type_ != Giver) { @@ -186,11 +205,15 @@ class AccountState { TRY_RESULT(res, to_wallet_accountState()); return tonlib_api::make_object(std::move(res)); } + case WalletV3: { + TRY_RESULT(res, to_wallet_v3_accountState()); + return tonlib_api::make_object(std::move(res)); + } } UNREACHABLE(); } - enum WalletType { Empty, Unknown, Giver, SimpleWallet, Wallet }; + enum WalletType { Empty, Unknown, Giver, SimpleWallet, Wallet, WalletV3 }; WalletType get_wallet_type() const { return wallet_type_; } @@ -230,6 +253,10 @@ class AccountState { address_.addr) { set_new_state({ton::Wallet::get_init_code(), ton::Wallet::get_init_data(key)}); wallet_type_ = WalletType::Wallet; + } else if (ton::GenericAccount::get_address(address_.workchain, ton::WalletV3::get_init_state(key, wallet_id_)) + .addr == address_.addr) { + set_new_state({ton::WalletV3::get_init_code(), ton::WalletV3::get_init_data(key, wallet_id_)}); + wallet_type_ = WalletType::WalletV3; } return wallet_type_; } @@ -238,8 +265,8 @@ class AccountState { if (wallet_type_ != WalletType::Empty) { return wallet_type_; } - set_new_state({ton::Wallet::get_init_code(), ton::Wallet::get_init_data(key)}); - wallet_type_ = WalletType::Wallet; + set_new_state({ton::WalletV3::get_init_code(), ton::WalletV3::get_init_data(key, wallet_id_)}); + wallet_type_ = WalletType::WalletV3; return wallet_type_; } @@ -247,9 +274,14 @@ class AccountState { return {raw_.code, raw_.data}; } + td::Ref get_raw_state() { + return raw_.state; + } + void set_new_state(ton::SmartContract::State state) { raw_.code = std::move(state.code); raw_.data = std::move(state.data); + raw_.state = ton::GenericAccount::get_init_state(raw_.code, raw_.data); has_new_state_ = true; } @@ -257,13 +289,14 @@ class AccountState { if (!has_new_state_) { return {}; } - return ton::GenericAccount::get_init_state(raw_.code, raw_.data); + return raw_.state; } private: block::StdAddress address_; RawAccountState raw_; WalletType wallet_type_{Unknown}; + td::uint32 wallet_id_{0}; bool has_new_state_{false}; WalletType guess_type() const { @@ -280,6 +313,9 @@ class AccountState { if (code_hash == ton::Wallet::get_init_code_hash()) { return WalletType::Wallet; } + if (code_hash == ton::WalletV3::get_init_code_hash()) { + return WalletType::WalletV3; + } LOG(WARNING) << "Unknown code hash: " << td::base64_encode(code_hash.as_slice()); return WalletType::Unknown; } @@ -717,12 +753,12 @@ class GetRawAccountState : public td::actor::Actor { return td::Status::Error("Failed to parse AccountState"); } block::gen::StateInit::Record state_init; + res.state = vm::CellBuilder().append_cellslice(state.x).finalize(); if (!tlb::csr_unpack(state.x, state_init)) { return td::Status::Error("Failed to parse StateInit"); } state_init.code->prefetch_maybe_ref(res.code); state_init.data->prefetch_maybe_ref(res.data); - return res; } @@ -788,18 +824,22 @@ void TonlibClient::init_ext_client() { if (use_callbacks_for_network_) { class Callback : public ExtClientOutbound::Callback { public: - explicit Callback(td::actor::ActorShared parent) : parent_(std::move(parent)) { + explicit Callback(td::actor::ActorShared parent, td::uint32 config_generation) + : parent_(std::move(parent)), config_generation_(config_generation) { } void request(td::int64 id, std::string data) override { - send_closure(parent_, &TonlibClient::proxy_request, id, std::move(data)); + send_closure(parent_, &TonlibClient::proxy_request, (id << 16) | (config_generation_ & 0xffff), + std::move(data)); } private: td::actor::ActorShared parent_; + td::uint32 config_generation_; }; ref_cnt_++; - auto client = ExtClientOutbound::create(td::make_unique(td::actor::actor_shared(this))); + auto client = + ExtClientOutbound::create(td::make_unique(td::actor::actor_shared(this), config_generation_)); ext_client_outbound_ = client.get(); raw_client_ = std::move(client); } else { @@ -826,6 +866,7 @@ void TonlibClient::update_last_block_state(LastBlockState state, td::uint32 conf if (config_generation != config_generation_) { return; } + last_block_storage_.save_state(blockchain_name_, state); } @@ -848,7 +889,7 @@ void TonlibClient::update_sync_state(LastBlockSyncState state, td::uint32 config } } -void TonlibClient::init_last_block() { +void TonlibClient::init_last_block(td::optional o_master_config) { ref_cnt_++; class Callback : public LastBlock::Callback { public: @@ -883,6 +924,15 @@ void TonlibClient::init_last_block() { state = r_state.move_as_ok(); } + if (o_master_config) { + auto master_config = o_master_config.unwrap(); + if (master_config.init_block_id.is_valid() && + state.last_key_block_id.id.seqno < master_config.init_block_id.id.seqno) { + state.last_key_block_id = master_config.init_block_id; + LOG(INFO) << "Use init block from MASTER config: " << master_config.init_block_id.to_str(); + } + } + raw_last_block_ = td::actor::create_actor( td::actor::ActorOptions().with_name("LastBlock").with_poll(false), get_client_ref(), std::move(state), config_, source_.get_cancellation_token(), td::make_unique(td::actor::actor_shared(this), config_generation_)); @@ -975,9 +1025,11 @@ bool TonlibClient::is_static_request(td::int32 id) { case tonlib_api::raw_getAccountAddress::ID: case tonlib_api::testWallet_getAccountAddress::ID: case tonlib_api::wallet_getAccountAddress::ID: + case tonlib_api::wallet_v3_getAccountAddress::ID: case tonlib_api::testGiver_getAccountAddress::ID: case tonlib_api::packAccountAddress::ID: case tonlib_api::unpackAccountAddress::ID: + case tonlib_api::options_validateConfig::ID: case tonlib_api::getBip39Hints::ID: case tonlib_api::setLogStream::ID: case tonlib_api::getLogStream::ID: @@ -1037,6 +1089,12 @@ td::Result get_account_address(const tonlib_api::wallet_initi auto key = td::Ed25519::PublicKey(td::SecureString(key_bytes.key)); return ton::GenericAccount::get_address(0 /*zerochain*/, ton::Wallet::get_init_state(key)); } +td::Result get_account_address(const tonlib_api::wallet_v3_initialAccountState& test_wallet_state) { + TRY_RESULT(key_bytes, get_public_key(test_wallet_state.public_key_)); + auto key = td::Ed25519::PublicKey(td::SecureString(key_bytes.key)); + return ton::GenericAccount::get_address( + 0 /*zerochain*/, ton::WalletV3::get_init_state(key, static_cast(test_wallet_state.wallet_id_))); +} td::Result get_account_address(td::Slice account_address) { TRY_RESULT_PREFIX(address, block::StdAddress::parse(account_address), TonlibError::InvalidAccountAddress()); @@ -1045,6 +1103,9 @@ td::Result get_account_address(td::Slice account_address) { tonlib_api::object_ptr TonlibClient::do_static_request( const tonlib_api::raw_getAccountAddress& request) { + if (!request.initital_account_state_) { + return status_to_tonlib_api(TonlibError::EmptyField("initial_account_state")); + } auto r_account_address = get_account_address(*request.initital_account_state_); if (r_account_address.is_error()) { return status_to_tonlib_api(r_account_address.error()); @@ -1054,6 +1115,12 @@ tonlib_api::object_ptr TonlibClient::do_static_request( tonlib_api::object_ptr TonlibClient::do_static_request( const tonlib_api::testWallet_getAccountAddress& request) { + if (!request.initital_account_state_) { + return status_to_tonlib_api(TonlibError::EmptyField("initial_account_state")); + } + if (!request.initital_account_state_) { + return status_to_tonlib_api(TonlibError::EmptyField("initial_account_state")); + } auto r_account_address = get_account_address(*request.initital_account_state_); if (r_account_address.is_error()) { return status_to_tonlib_api(r_account_address.error()); @@ -1063,6 +1130,20 @@ tonlib_api::object_ptr TonlibClient::do_static_request( tonlib_api::object_ptr TonlibClient::do_static_request( const tonlib_api::wallet_getAccountAddress& request) { + if (!request.initital_account_state_) { + return status_to_tonlib_api(TonlibError::EmptyField("initial_account_state")); + } + auto r_account_address = get_account_address(*request.initital_account_state_); + if (r_account_address.is_error()) { + return status_to_tonlib_api(r_account_address.error()); + } + return tonlib_api::make_object(r_account_address.ok().rserialize(true)); +} +tonlib_api::object_ptr TonlibClient::do_static_request( + const tonlib_api::wallet_v3_getAccountAddress& request) { + if (!request.initital_account_state_) { + return status_to_tonlib_api(TonlibError::EmptyField("initial_account_state")); + } auto r_account_address = get_account_address(*request.initital_account_state_); if (r_account_address.is_error()) { return status_to_tonlib_api(r_account_address.error()); @@ -1132,37 +1213,114 @@ td::Status TonlibClient::do_request(const tonlib_api::init& request, key_storage_.set_key_value(kv_); last_block_storage_.set_key_value(kv_); if (request.options_->config_) { - TRY_STATUS(set_config(std::move(request.options_->config_))); + TRY_RESULT(full_config, validate_config(std::move(request.options_->config_))); + set_config(std::move(full_config)); } state_ = State::Running; promise.set_value(tonlib_api::make_object()); return td::Status::OK(); } -td::Status TonlibClient::set_config(object_ptr config) { - CHECK(config); +class MasterConfig { + public: + void add_config(std::string name, std::string json) { + auto config = std::make_shared(Config::parse(json).move_as_ok()); + if (!name.empty()) { + by_name_[name] = config; + } + by_root_hash_[config->zero_state_id.root_hash] = config; + } + td::optional by_name(std::string name) const { + auto it = by_name_.find(name); + if (it == by_name_.end()) { + return {}; + } + return *it->second; + } + + td::optional by_root_hash(const ton::RootHash& root_hash) const { + auto it = by_root_hash_.find(root_hash); + if (it == by_root_hash_.end()) { + return {}; + } + return *it->second; + } + + private: + size_t next_id_{0}; + std::map> by_name_; + std::map> by_root_hash_; +}; + +const MasterConfig& get_default_master_config() { + static MasterConfig config = [] { + MasterConfig res; + res.add_config("testnet", R"abc({ + "liteservers": [ + ], + "validator": { + "@type": "validator.config.global", + "zero_state": { + "workchain": -1, + "shard": -9223372036854775808, + "seqno": 0, + "root_hash": "VCSXxDHhTALFxReyTZRd8E4Ya3ySOmpOWAS4rBX9XBY=", + "file_hash": "eh9yveSz1qMdJ7mOsO+I+H77jkLr9NpAuEkoJuseXBo=" + }, + "init_block": +{"workchain":-1,"shard":-9223372036854775808,"seqno":870721,"root_hash":"jYKhSQ1xeSPprzgjqiUOnAWwc2yqs7nCVAU21k922s4=","file_hash":"kHidF02CZpaz2ia9jtXUJLp0AiWMWwfzprTUIsddHSo="} + } +})abc"); + return res; + }(); + return config; +} + +td::Result TonlibClient::validate_config(tonlib_api::object_ptr config) { + if (!config) { + return TonlibError::EmptyField("config"); + } if (config->config_.empty()) { return TonlibError::InvalidConfig("config is empty"); } TRY_RESULT_PREFIX(new_config, Config::parse(std::move(config->config_)), TonlibError::InvalidConfig("can't parse config")); + if (new_config.lite_clients.empty() && !config->use_callbacks_for_network_) { return TonlibError::InvalidConfig("no lite clients"); } - config_ = std::move(new_config); - config_generation_++; + + td::optional o_master_config; if (config->blockchain_name_.empty()) { - blockchain_name_ = td::sha256(config_.zero_state_id.to_str()).substr(0, 16); + o_master_config = get_default_master_config().by_root_hash(new_config.zero_state_id.root_hash); } else { - blockchain_name_ = config->blockchain_name_; + o_master_config = get_default_master_config().by_name(config->blockchain_name_); } - use_callbacks_for_network_ = config->use_callbacks_for_network_; - ignore_cache_ = config->ignore_cache_; + + if (o_master_config && o_master_config.value().zero_state_id != new_config.zero_state_id) { + return TonlibError::InvalidConfig("zero_state differs from embedded zero_state"); + } + FullConfig res; + res.config = std::move(new_config); + res.o_master_config = std::move(o_master_config); + res.ignore_cache = config->ignore_cache_; + res.use_callbacks_for_network = config->use_callbacks_for_network_; + res.wallet_id = td::as(res.config.zero_state_id.root_hash.as_slice().data()); + return std::move(res); +} + +void TonlibClient::set_config(FullConfig full_config) { + config_ = std::move(full_config.config); + config_generation_++; + wallet_id_ = full_config.wallet_id; + blockchain_name_ = config_.zero_state_id.root_hash.as_slice().str(); + + use_callbacks_for_network_ = full_config.use_callbacks_for_network; + ignore_cache_ = full_config.ignore_cache; init_ext_client(); - init_last_block(); + init_last_block(std::move(full_config.o_master_config)); init_last_config(); client_.set_client(get_client_ref()); - return td::Status::OK(); } td::Status TonlibClient::do_request(const tonlib_api::close& request, @@ -1174,12 +1332,22 @@ td::Status TonlibClient::do_request(const tonlib_api::close& request, return td::Status::OK(); } +tonlib_api::object_ptr TonlibClient::do_static_request( + tonlib_api::options_validateConfig& request) { + auto r_config = validate_config(std::move(request.config_)); + if (r_config.is_error()) { + return status_to_tonlib_api(r_config.move_as_error()); + } + return tonlib_api::make_object(r_config.ok().wallet_id); +} + td::Status TonlibClient::do_request(tonlib_api::options_setConfig& request, td::Promise>&& promise) { if (!request.config_) { return TonlibError::EmptyField("config"); } - TRY_STATUS(set_config(std::move(request.config_))); + TRY_RESULT(config, validate_config(std::move(request.config_))); + set_config(std::move(config)); promise.set_value(tonlib_api::make_object()); return td::Status::OK(); } @@ -1290,8 +1458,7 @@ td::Result> to_raw_transacti td::int64 fees = 0; td::int64 storage_fee = 0; if (info.transaction.not_null()) { - TRY_RESULT(copy_data, vm::std_boc_serialize(info.transaction)); - data = copy_data.as_slice().str(); + data = to_bytes(info.transaction); block::gen::Transaction::Record trans; if (!tlb::unpack_cell(info.transaction, trans)) { return td::Status::Error("Failed to unpack Transaction"); @@ -1425,7 +1592,7 @@ td::Status TonlibClient::do_request(tonlib_api::raw_getTransactions& request, promise.wrap(to_raw_transactions)); return td::Status::OK(); } -td::Result from_tonlib(tonlib_api::inputKey& input_key) { +td::Result from_tonlib(tonlib_api::inputKeyRegular& input_key) { if (!input_key.key_) { return TonlibError::EmptyField("key"); } @@ -1437,9 +1604,9 @@ td::Result from_tonlib(tonlib_api::inputKey& input_key) { td::Result from_tonlib(tonlib_api::InputKey& input_key) { td::Result r_key; - tonlib_api::downcast_call(input_key, - td::overloaded([&](tonlib_api::inputKey& input_key) { r_key = from_tonlib(input_key); }, - [&](tonlib_api::inputKeyFake&) { r_key = KeyStorage::fake_input_key(); })); + tonlib_api::downcast_call( + input_key, td::overloaded([&](tonlib_api::inputKeyRegular& input_key) { r_key = from_tonlib(input_key); }, + [&](tonlib_api::inputKeyFake&) { r_key = KeyStorage::fake_input_key(); })); return r_key; } @@ -1666,18 +1833,15 @@ class GenericCreateSendGrams : public TonlibQueryActor { TRY_RESULT(input_key, from_tonlib(*send_grams_.private_key_)); is_fake_key_ = send_grams_.private_key_->get_id() == tonlib_api::inputKeyFake::ID; public_key_ = td::Ed25519::PublicKey(input_key.key.public_key.copy()); - send_query(int_api::GetPrivateKey{std::move(input_key)}, [actor_id = actor_id(this)](auto r_res) { - send_closure(actor_id, &GenericCreateSendGrams::on_private_key, std::move(r_res)); - }); + send_query(int_api::GetPrivateKey{std::move(input_key)}, + promise_send_closure(actor_id(this), &GenericCreateSendGrams::on_private_key)); } - send_query(int_api::GetAccountState{source_address}, [actor_id = actor_id(this)](auto r_res) { - send_closure(actor_id, &GenericCreateSendGrams::on_source_state, std::move(r_res)); - }); + send_query(int_api::GetAccountState{source_address}, + promise_send_closure(actor_id(this), &GenericCreateSendGrams::on_source_state)); - send_query(int_api::GetAccountState{destination_address}, [actor_id = actor_id(this)](auto r_res) { - send_closure(actor_id, &GenericCreateSendGrams::on_destination_state, std::move(r_res)); - }); + send_query(int_api::GetAccountState{destination_address}, + promise_send_closure(actor_id(this), &GenericCreateSendGrams::on_destination_state)); return do_loop(); } @@ -1787,6 +1951,23 @@ class GenericCreateSendGrams : public TonlibQueryActor { destination_->get_address()); break; } + case AccountState::WalletV3: { + if (!private_key_) { + return TonlibError::EmptyField("private_key"); + } + if (message.size() > ton::WalletV3::max_message_size) { + return TonlibError::MessageTooLong(); + } + auto wallet = ton::WalletV3(source_->get_smc_state()); + TRY_RESULT(seqno, wallet.get_seqno()); + TRY_RESULT(wallet_id, wallet.get_wallet_id()); + auto valid_until = source_->get_sync_time(); + valid_until += send_grams_.timeout_ == 0 ? 60 : send_grams_.timeout_; + raw.valid_until = valid_until; + raw.message_body = ton::WalletV3::make_a_gift_message(private_key_.unwrap(), wallet_id, seqno, valid_until, + amount, message, destination_->get_address()); + break; + } } raw.new_state = source_->get_new_state(); @@ -1835,9 +2016,7 @@ td::Status TonlibClient::do_request(tonlib_api::generic_createSendGramsQuery& re auto id = actor_id_++; actors_[id] = td::actor::create_actor( "GenericSendGrams", actor_shared(this, id), std::move(request), - [promise = std::move(promise), self = actor_id(this)](td::Result> r_query) mutable { - send_closure(self, &TonlibClient::finish_create_query, std::move(r_query), std::move(promise)); - }); + promise.send_closure(actor_id(this), &TonlibClient::finish_create_query)); return td::Status::OK(); } @@ -1857,9 +2036,7 @@ td::Status TonlibClient::do_request(const tonlib_api::raw_createQuery& request, TRY_RESULT_PREFIX(body, vm::std_boc_deserialize(request.body_), TonlibError::InvalidBagOfCells("body")); td::Promise> new_promise = - [promise = std::move(promise), self = actor_id(this)](td::Result> r_query) mutable { - send_closure(self, &TonlibClient::finish_create_query, std::move(r_query), std::move(promise)); - }; + promise.send_closure(actor_id(this), &TonlibClient::finish_create_query); make_request(int_api::GetAccountState{account_address}, new_promise.wrap([smc_state = std::move(smc_state), body = std::move(body)](auto&& source) mutable { @@ -1886,9 +2063,7 @@ td::Status TonlibClient::do_request(tonlib_api::generic_sendGrams& request, tonlib_api::generic_createSendGramsQuery(std::move(request.private_key_), std::move(request.source_), std::move(request.destination_), request.amount_, request.timeout_, request.allow_send_to_uninited_, std::move(request.message_)), - [promise = std::move(promise), self = actor_id(this)](td::Result> r_query) mutable { - send_closure(self, &TonlibClient::finish_send_query, std::move(r_query), std::move(promise)); - }); + promise.send_closure(actor_id(this), &TonlibClient::finish_send_query)); return td::Status::OK(); } @@ -1953,6 +2128,151 @@ td::Status TonlibClient::do_request(tonlib_api::query_forget& request, return td::Status::OK(); } +td::int64 TonlibClient::register_smc(td::unique_ptr smc) { + auto smc_id = ++next_smc_id_; + smcs_[smc_id] = std::move(smc); + return smc_id; +} + +td::Result> TonlibClient::get_smc_info(td::int64 id) { + auto it = smcs_.find(id); + if (it == smcs_.end()) { + return TonlibError::InvalidSmcId(); + } + return tonlib_api::make_object(id); +} + +void TonlibClient::finish_load_smc(td::unique_ptr smc, + td::Promise>&& promise) { + auto id = register_smc(std::move(smc)); + promise.set_result(get_smc_info(id)); +} + +td::Status TonlibClient::do_request(const tonlib_api::smc_load& request, + td::Promise>&& promise) { + if (!request.account_address_) { + return TonlibError::EmptyField("account_address"); + } + TRY_RESULT(account_address, get_account_address(request.account_address_->account_address_)); + make_request(int_api::GetAccountState{std::move(account_address)}, + promise.send_closure(actor_id(this), &TonlibClient::finish_load_smc)); + return td::Status::OK(); +} + +td::Status TonlibClient::do_request(const tonlib_api::smc_getCode& request, + td::Promise>&& promise) { + auto it = smcs_.find(request.id_); + if (it == smcs_.end()) { + return TonlibError::InvalidSmcId(); + } + auto& acc = it->second; + auto code = acc->get_smc_state().code; + promise.set_value(tonlib_api::make_object(to_bytes(code))); + return td::Status::OK(); +} + +td::Status TonlibClient::do_request(const tonlib_api::smc_getData& request, + td::Promise>&& promise) { + auto it = smcs_.find(request.id_); + if (it == smcs_.end()) { + return TonlibError::InvalidSmcId(); + } + auto& acc = it->second; + auto data = acc->get_smc_state().data; + promise.set_value(tonlib_api::make_object(to_bytes(data))); + return td::Status::OK(); +} + +td::Status TonlibClient::do_request(const tonlib_api::smc_getState& request, + td::Promise>&& promise) { + auto it = smcs_.find(request.id_); + if (it == smcs_.end()) { + return TonlibError::InvalidSmcId(); + } + auto& acc = it->second; + auto data = acc->get_raw_state(); + promise.set_value(tonlib_api::make_object(to_bytes(data))); + return td::Status::OK(); +} + +td::Status TonlibClient::do_request(const tonlib_api::smc_runGetMethod& request, + td::Promise>&& promise) { + auto it = smcs_.find(request.id_); + if (it == smcs_.end()) { + return TonlibError::InvalidSmcId(); + } + + td::Ref smc(true, it->second->get_smc_state()); + ton::SmartContract::Args args; + downcast_call(*request.method_, + td::overloaded([&](tonlib_api::smc_methodIdNumber& number) { args.set_method_id(number.number_); }, + [&](tonlib_api::smc_methodIdName& name) { args.set_method_id(name.name_); })); + td::Ref stack(true); + td::Status status; + // TODO: error codes + // downcast_call + for (auto& entry : request.stack_) { + downcast_call(*entry, td::overloaded( + [&](tonlib_api::tvm_stackEntryUnsupported& cell) { + status = td::Status::Error("Unsuppored stack entry"); + }, + [&](tonlib_api::tvm_stackEntrySlice& cell) { + auto r_cell = vm::std_boc_deserialize(cell.slice_->bytes_); + if (r_cell.is_error()) { + status = r_cell.move_as_error(); + return; + } + stack.write().push_cell(r_cell.move_as_ok()); + }, + [&](tonlib_api::tvm_stackEntryCell& cell) { + auto r_cell = vm::std_boc_deserialize(cell.cell_->bytes_); + if (r_cell.is_error()) { + status = r_cell.move_as_error(); + return; + } + stack.write().push_cell(r_cell.move_as_ok()); + }, + [&](tonlib_api::tvm_stackEntryNumber& number) { + [&](tonlib_api::tvm_numberDecimal& dec) { + auto num = td::dec_string_to_int256(dec.number_); + if (num.is_null()) { + status = td::Status::Error("Failed to parse dec string to int256"); + return; + } + stack.write().push_int(std::move(num)); + }(*number.number_); + })); + } + TRY_STATUS(std::move(status)); + args.set_stack(std::move(stack)); + auto res = smc->run_get_method(std::move(args)); + + // smc.runResult gas_used:int53 stack:vector exit_code:int32 = smc.RunResult; + std::vector> res_stack; + for (auto& entry : res.stack->as_span()) { + switch (entry.type()) { + case vm::StackEntry::Type::t_int: + res_stack.push_back(tonlib_api::make_object( + tonlib_api::make_object(dec_string(entry.as_int())))); + break; + case vm::StackEntry::Type::t_slice: + res_stack.push_back( + tonlib_api::make_object(tonlib_api::make_object( + to_bytes(vm::CellBuilder().append_cellslice(entry.as_slice()).finalize())))); + break; + case vm::StackEntry::Type::t_cell: + res_stack.push_back(tonlib_api::make_object( + tonlib_api::make_object(to_bytes(entry.as_cell())))); + break; + default: + res_stack.push_back(tonlib_api::make_object()); + break; + } + } + promise.set_value(tonlib_api::make_object(res.gas_used, std::move(res_stack), res.code)); + return td::Status::OK(); +} + td::Status TonlibClient::do_request(tonlib_api::sync& request, td::Promise>&& promise) { client_.with_last_block(to_any_promise(std::move(promise))); return td::Status::OK(); @@ -2079,13 +2399,25 @@ td::Status TonlibClient::do_request(const tonlib_api::changeLocalPassword& reque td::Status TonlibClient::do_request(const tonlib_api::onLiteServerQueryResult& request, td::Promise>&& promise) { - send_closure(ext_client_outbound_, &ExtClientOutbound::on_query_result, request.id_, td::BufferSlice(request.bytes_), - to_any_promise(std::move(promise))); + if (ext_client_outbound_.empty()) { + return TonlibError::InvalidQueryId(); + } + if (((request.id_ ^ config_generation_) & 0xffff) != 0) { + return TonlibError::InvalidQueryId(); + } + send_closure(ext_client_outbound_, &ExtClientOutbound::on_query_result, request.id_ >> 16, + td::BufferSlice(request.bytes_), to_any_promise(std::move(promise))); return td::Status::OK(); } td::Status TonlibClient::do_request(const tonlib_api::onLiteServerQueryError& request, td::Promise>&& promise) { - send_closure(ext_client_outbound_, &ExtClientOutbound::on_query_result, request.id_, + if (ext_client_outbound_.empty()) { + return TonlibError::InvalidQueryId(); + } + if (((request.id_ ^ config_generation_) & 0xffff) != 0) { + return TonlibError::InvalidQueryId(); + } + send_closure(ext_client_outbound_, &ExtClientOutbound::on_query_result, request.id_ >> 16, td::Status::Error(request.error_->code_, request.error_->message_) .move_as_error_prefix(TonlibError::LiteServerNetwork()), to_any_promise(std::move(promise))); @@ -2176,8 +2508,8 @@ td::Status TonlibClient::do_request(int_api::GetAccountState request, auto actor_id = actor_id_++; actors_[actor_id] = td::actor::create_actor( "GetAccountState", client_.get_client(), request.address, actor_shared(this, actor_id), - promise.wrap([address = request.address](auto&& state) mutable { - return td::make_unique(std::move(address), std::move(state)); + promise.wrap([address = request.address, wallet_id = wallet_id_](auto&& state) mutable { + return td::make_unique(std::move(address), std::move(state), wallet_id); })); return td::Status::OK(); } @@ -2224,6 +2556,11 @@ td::Status TonlibClient::do_request(const tonlib_api::wallet_getAccountAddress& return TonlibError::Internal(); } template +td::Status TonlibClient::do_request(const tonlib_api::wallet_v3_getAccountAddress& request, P&&) { + UNREACHABLE(); + return TonlibError::Internal(); +} +template td::Status TonlibClient::do_request(const tonlib_api::testGiver_getAccountAddress& request, P&&) { UNREACHABLE(); return TonlibError::Internal(); @@ -2239,6 +2576,11 @@ td::Status TonlibClient::do_request(const tonlib_api::unpackAccountAddress& requ return TonlibError::Internal(); } template +td::Status TonlibClient::do_request(const tonlib_api::options_validateConfig& request, P&&) { + UNREACHABLE(); + return TonlibError::Internal(); +} +template td::Status TonlibClient::do_request(tonlib_api::getBip39Hints& request, P&&) { UNREACHABLE(); return TonlibError::Internal(); diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/TonlibClient.h b/submodules/ton/tonlib-src/tonlib/tonlib/TonlibClient.h index 7c22e09aa7..68936a4373 100644 --- a/submodules/ton/tonlib-src/tonlib/tonlib/TonlibClient.h +++ b/submodules/ton/tonlib-src/tonlib/tonlib/TonlibClient.h @@ -30,6 +30,7 @@ #include "td/actor/actor.h" #include "td/utils/CancellationToken.h" +#include "td/utils/optional.h" #include @@ -64,6 +65,7 @@ class TonlibClient : public td::actor::Actor { // Config Config config_; td::uint32 config_generation_{0}; + td::uint32 wallet_id_; std::string blockchain_name_; bool ignore_cache_{false}; bool use_callbacks_for_network_{false}; @@ -87,7 +89,7 @@ class TonlibClient : public td::actor::Actor { ExtClientRef get_client_ref(); void init_ext_client(); - void init_last_block(); + void init_last_block(td::optional o_master_config); void init_last_config(); bool is_closing_{false}; @@ -122,9 +124,11 @@ class TonlibClient : public td::actor::Actor { static object_ptr do_static_request(const tonlib_api::raw_getAccountAddress& request); static object_ptr do_static_request(const tonlib_api::testWallet_getAccountAddress& request); static object_ptr do_static_request(const tonlib_api::wallet_getAccountAddress& request); + static object_ptr do_static_request(const tonlib_api::wallet_v3_getAccountAddress& request); static object_ptr do_static_request(const tonlib_api::testGiver_getAccountAddress& request); static object_ptr do_static_request(const tonlib_api::packAccountAddress& request); static object_ptr do_static_request(const tonlib_api::unpackAccountAddress& request); + static object_ptr do_static_request(tonlib_api::options_validateConfig& request); static object_ptr do_static_request(tonlib_api::getBip39Hints& request); static object_ptr do_static_request(tonlib_api::setLogStream& request); @@ -149,12 +153,16 @@ class TonlibClient : public td::actor::Actor { template td::Status do_request(const tonlib_api::wallet_getAccountAddress& request, P&&); template + td::Status do_request(const tonlib_api::wallet_v3_getAccountAddress& request, P&&); + template td::Status do_request(const tonlib_api::testGiver_getAccountAddress& request, P&&); template td::Status do_request(const tonlib_api::packAccountAddress& request, P&&); template td::Status do_request(const tonlib_api::unpackAccountAddress& request, P&&); template + td::Status do_request(const tonlib_api::options_validateConfig& request, P&&); + template td::Status do_request(tonlib_api::getBip39Hints& request, P&&); template @@ -189,7 +197,15 @@ class TonlibClient : public td::actor::Actor { } } - td::Status set_config(object_ptr config); + struct FullConfig { + Config config; + td::optional o_master_config; + bool use_callbacks_for_network; + bool ignore_cache; + td::uint32 wallet_id; + }; + static td::Result validate_config(tonlib_api::object_ptr config); + void set_config(FullConfig config); td::Status do_request(const tonlib_api::init& request, td::Promise>&& promise); td::Status do_request(const tonlib_api::close& request, td::Promise>&& promise); td::Status do_request(tonlib_api::options_setConfig& request, td::Promise>&& promise); @@ -274,6 +290,23 @@ class TonlibClient : public td::actor::Actor { td::Status do_request(tonlib_api::generic_createSendGramsQuery& request, td::Promise>&& promise); + td::int64 next_smc_id_{0}; + std::map> smcs_; + + td::int64 register_smc(td::unique_ptr smc); + td::Result> get_smc_info(td::int64 id); + void finish_load_smc(td::unique_ptr query, td::Promise>&& promise); + td::Status do_request(const tonlib_api::smc_load& request, td::Promise>&& promise); + td::Status do_request(const tonlib_api::smc_getCode& request, + td::Promise>&& promise); + td::Status do_request(const tonlib_api::smc_getData& request, + td::Promise>&& promise); + td::Status do_request(const tonlib_api::smc_getState& request, + td::Promise>&& promise); + + td::Status do_request(const tonlib_api::smc_runGetMethod& request, + td::Promise>&& promise); + td::Status do_request(int_api::GetAccountState request, td::Promise>&&); td::Status do_request(int_api::GetPrivateKey request, td::Promise&&); td::Status do_request(int_api::SendMessage request, td::Promise&& promise); diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/TonlibError.h b/submodules/ton/tonlib-src/tonlib/tonlib/TonlibError.h index 01447cb1b7..dca5eecfcb 100644 --- a/submodules/ton/tonlib-src/tonlib/tonlib/TonlibError.h +++ b/submodules/ton/tonlib-src/tonlib/tonlib/TonlibError.h @@ -28,6 +28,7 @@ // INVALID_BAG_OF_CELLS // INVALID_PUBLIC_KEY // INVALID_QUERY_ID +// INVALID_SMC_ID // INVALID_ACCOUNT_ADDRESS // INVALID_CONFIG // INVALID_PEM_KEY @@ -69,12 +70,18 @@ struct TonlibError { static td::Status InvalidQueryId() { return td::Status::Error(400, "INVALID_QUERY_ID"); } + static td::Status InvalidSmcId() { + return td::Status::Error(400, "INVALID_SMC_ID"); + } static td::Status InvalidConfig(td::Slice reason) { return td::Status::Error(400, PSLICE() << "INVALID_CONFIG: " << reason); } static td::Status InvalidPemKey() { return td::Status::Error(400, "INVALID_PEM_KEY"); } + static td::Status NeedConfig() { + return td::Status::Error(400, "NeedConfig"); + } static td::Status MessageTooLong() { return td::Status::Error(400, "MESSAGE_TOO_LONG"); } diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/Wallet.cpp b/submodules/ton/tonlib-src/tonlib/tonlib/Wallet.cpp deleted file mode 100644 index b4682823f7..0000000000 --- a/submodules/ton/tonlib-src/tonlib/tonlib/Wallet.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#include "tonlib/Wallet.h" -#include "tonlib/CellString.h" -#include "tonlib/GenericAccount.h" -#include "tonlib/utils.h" - -#include "vm/boc.h" -#include "td/utils/base64.h" - -#include - -namespace tonlib { -td::Ref Wallet::get_init_state(const td::Ed25519::PublicKey& public_key) noexcept { - auto code = get_init_code(); - auto data = get_init_data(public_key); - return GenericAccount::get_init_state(std::move(code), std::move(data)); -} - -td::Ref Wallet::get_init_message(const td::Ed25519::PrivateKey& private_key) noexcept { - td::uint32 seqno = 0; - td::uint32 valid_until = std::numeric_limits::max(); - auto signature = - private_key - .sign(vm::CellBuilder().store_long(seqno, 32).store_long(valid_until, 32).finalize()->get_hash().as_slice()) - .move_as_ok(); - return vm::CellBuilder().store_bytes(signature).store_long(seqno, 32).store_long(valid_until, 32).finalize(); -} - -td::Ref Wallet::make_a_gift_message(const td::Ed25519::PrivateKey& private_key, td::uint32 seqno, - td::uint32 valid_until, td::int64 gramms, td::Slice message, - const block::StdAddress& dest_address) noexcept { - td::BigInt256 dest_addr; - dest_addr.import_bits(dest_address.addr.as_bitslice()); - vm::CellBuilder cb; - cb.append_cellslice(binary_bitstring_to_cellslice("b{01}").move_as_ok()) - .store_long(dest_address.bounceable, 1) - .append_cellslice(binary_bitstring_to_cellslice("b{000100}").move_as_ok()) - .store_long(dest_address.workchain, 8) - .store_int256(dest_addr, 256); - td::int32 send_mode = 3; - if (gramms == -1) { - gramms = 0; - send_mode += 128; - } - block::tlb::t_Grams.store_integer_value(cb, td::BigInt256(gramms)); - cb.store_zeroes(9 + 64 + 32 + 1 + 1).store_bytes("\0\0\0\0", 4); - vm::CellString::store(cb, message, 35 * 8).ensure(); - auto message_inner = cb.finalize(); - auto message_outer = vm::CellBuilder() - .store_long(seqno, 32) - .store_long(valid_until, 32) - .store_long(send_mode, 8) - .store_ref(message_inner) - .finalize(); - std::string seq_no(4, 0); - auto signature = private_key.sign(message_outer->get_hash().as_slice()).move_as_ok(); - return vm::CellBuilder().store_bytes(signature).append_cellslice(vm::load_cell_slice(message_outer)).finalize(); -} - -td::Ref Wallet::get_init_code() noexcept { - static auto res = [] { - auto serialized_code = td::base64_decode( - "te6ccgEEAQEAAAAAVwAAqv8AIN0gggFMl7qXMO1E0NcLH+Ck8mCDCNcYINMf0x8B+CO78mPtRNDTH9P/" - "0VExuvKhA/kBVBBC+RDyovgAApMg10qW0wfUAvsA6NGkyMsfy//J7VQ=") - .move_as_ok(); - return vm::std_boc_deserialize(serialized_code).move_as_ok(); - }(); - return res; -} - -vm::CellHash Wallet::get_init_code_hash() noexcept { - return get_init_code()->get_hash(); -} - -td::Ref Wallet::get_init_data(const td::Ed25519::PublicKey& public_key) noexcept { - return vm::CellBuilder().store_long(0, 32).store_bytes(public_key.as_octet_string()).finalize(); -} -} // namespace tonlib diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/Wallet.h b/submodules/ton/tonlib-src/tonlib/tonlib/Wallet.h deleted file mode 100644 index dd114cce77..0000000000 --- a/submodules/ton/tonlib-src/tonlib/tonlib/Wallet.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once - -#include "vm/cells.h" -#include "Ed25519.h" -#include "block/block.h" -#include "CellString.h" - -namespace tonlib { -class Wallet { - public: - static constexpr unsigned max_message_size = vm::CellString::max_bytes; - static td::Ref get_init_state(const td::Ed25519::PublicKey& public_key) noexcept; - static td::Ref get_init_message(const td::Ed25519::PrivateKey& private_key) noexcept; - static td::Ref make_a_gift_message(const td::Ed25519::PrivateKey& private_key, td::uint32 seqno, - td::uint32 valid_until, td::int64 gramms, td::Slice message, - const block::StdAddress& dest_address) noexcept; - - static td::Ref get_init_code() noexcept; - static vm::CellHash get_init_code_hash() noexcept; - static td::Ref get_init_data(const td::Ed25519::PublicKey& public_key) noexcept; -}; -} // namespace tonlib diff --git a/submodules/ton/tonlib-src/tonlib/tonlib/tonlib-cli.cpp b/submodules/ton/tonlib-src/tonlib/tonlib/tonlib-cli.cpp index f9bcae9447..716fae3070 100644 --- a/submodules/ton/tonlib-src/tonlib/tonlib/tonlib-cli.cpp +++ b/submodules/ton/tonlib-src/tonlib/tonlib/tonlib-cli.cpp @@ -29,20 +29,21 @@ // "help []\tThis help\n" // TODO: support [] // "quit\tExit\n"; // "sendfile \tLoad a serialized message from and send it to server\n" -// // "saveaccount[code|data] []\tSaves into specified file the most recent state " +// "(StateInit) or just the code or data of specified account; is in " +// "[:] format\n" +// // "runmethod ...\tRuns GET method of account " // "with specified parameters\n" // +// "getaccount []\tLoads the most recent state of specified account; is in " +// "[:] format\n" +// // WONTSUPPORT // // UNSUPPORTED //"last\tGet last block and state info from server\n" //"status\tShow connection and local database status\n" -//"getaccount []\tLoads the most recent state of specified account; is in " -//"[:] format\n" -//"(StateInit) or just the code or data of specified account; is in " -//"[:] format\n" //"allshards []\tShows shard configuration from the most recent masterchain " //"state or from masterchain state corresponding to \n" //"getconfig [...]\tShows specified or all configuration parameters from the latest masterchain state\n" @@ -80,7 +81,7 @@ class TonlibCli : public td::actor::Actor { std::string key_dir{"."}; bool in_memory{false}; bool use_callbacks_for_network{false}; - bool use_simple_wallet{false}; + td::int32 wallet_version = 2; bool ignore_cache{false}; bool one_shot{false}; @@ -95,6 +96,7 @@ class TonlibCli : public td::actor::Actor { td::actor::ActorOwn client_; std::uint64_t next_query_id_{1}; td::Promise cont_; + td::uint32 wallet_id_; struct KeyInfo { std::string public_key; @@ -175,6 +177,10 @@ class TonlibCli : public td::actor::Actor { ? make_object(options_.config, options_.name, options_.use_callbacks_for_network, options_.ignore_cache) : nullptr; + auto config2 = !options_.config.empty() + ? make_object(options_.config, options_.name, + options_.use_callbacks_for_network, options_.ignore_cache) + : nullptr; tonlib_api::object_ptr ks_type; if (options_.in_memory) { @@ -182,6 +188,14 @@ class TonlibCli : public td::actor::Actor { } else { ks_type = make_object(options_.key_dir); } + auto obj = + tonlib::TonlibClient::static_request(make_object(std::move(config2))); + if (obj->get_id() != tonlib_api::error::ID) { + auto info = ton::move_tl_object_as(obj); + wallet_id_ = static_cast(info->default_wallet_id_); + } else { + LOG(ERROR) << "Invalid config"; + } send_query(make_object(make_object(std::move(config), std::move(ks_type))), [](auto r_ok) { LOG_IF(ERROR, r_ok.is_error()) << r_ok.error(); @@ -266,8 +280,12 @@ class TonlibCli : public td::actor::Actor { td::TerminalIO::out() << "time\tGet server time\n"; td::TerminalIO::out() << "remote-version\tShows server time, version and capabilities\n"; td::TerminalIO::out() << "sendfile \tLoad a serialized message from and send it to server\n"; + td::TerminalIO::out() << "setconfig|validateconfig [] [] [] - set or validate " + "lite server config\n"; td::TerminalIO::out() << "exit\tExit\n"; td::TerminalIO::out() << "quit\tExit\n"; + td::TerminalIO::out() + << "saveaccount[code|data] \tSaves into specified file the most recent state\n"; td::TerminalIO::out() << "genkey - generate new secret key\n"; td::TerminalIO::out() << "keys - show all stored keys\n"; @@ -277,7 +295,6 @@ class TonlibCli : public td::actor::Actor { td::TerminalIO::out() << "deletekeys - delete ALL PRIVATE KEYS\n"; td::TerminalIO::out() << "exportkey [] - export key\n"; td::TerminalIO::out() << "exportkeypem [] - export key\n"; - td::TerminalIO::out() << "setconfig [] [] [] - set lite server config\n"; td::TerminalIO::out() << "getstate - get state of simple wallet with requested key\n"; td::TerminalIO::out() << "gethistory - get history fo simple wallet with requested key (last 10 transactions)\n"; @@ -303,12 +320,6 @@ class TonlibCli : public td::actor::Actor { export_key(cmd.str(), parser.read_word()); } else if (cmd == "importkey") { import_key(parser.read_all()); - } else if (cmd == "setconfig") { - auto config = parser.read_word(); - auto name = parser.read_word(); - auto use_callback = parser.read_word(); - auto force = parser.read_word(); - set_config(config, name, to_bool(use_callback), to_bool(force)); } else if (cmd == "getstate") { get_state(parser.read_word()); } else if (cmd == "gethistory") { @@ -340,6 +351,18 @@ class TonlibCli : public td::actor::Actor { remote_version(std::move(cmd_promise)); } else if (cmd == "sendfile") { send_file(parser.read_word(), std::move(cmd_promise)); + } else if (cmd == "saveaccount" || cmd == "saveaccountdata" || cmd == "saveaccountcode") { + auto path = parser.read_word(); + auto address = parser.read_word(); + save_account(cmd, path, address, std::move(cmd_promise)); + } else if (cmd == "runmethod") { + run_method(parser, std::move(cmd_promise)); + } else if (cmd == "setconfig" || cmd == "validateconfig") { + auto config = parser.read_word(); + auto name = parser.read_word(); + auto use_callback = parser.read_word(); + auto force = parser.read_word(); + set_validate_config(cmd, config, name, to_bool(use_callback), to_bool(force), std::move(cmd_promise)); } else { cmd_promise.set_error(td::Status::Error(PSLICE() << "Unkwnown query `" << cmd << "`")); } @@ -372,6 +395,40 @@ class TonlibCli : public td::actor::Actor { })); } + void save_account(td::Slice cmd, td::Slice path, td::Slice address, td::Promise promise) { + TRY_RESULT_PROMISE(promise, addr, to_account_address(address, false)); + send_query(tonlib_api::make_object(std::move(addr.address)), + promise.send_closure(actor_id(this), &TonlibCli::save_account_2, cmd.str(), path.str(), address.str())); + } + + void save_account_2(std::string cmd, std::string path, std::string address, + tonlib_api::object_ptr info, td::Promise promise) { + auto with_query = [&, self = this](auto query, auto log) { + send_query(std::move(query), + promise.send_closure(actor_id(self), &TonlibCli::save_account_3, std::move(path), std::move(log))); + }; + if (cmd == "saveaccount") { + with_query(tonlib_api::make_object(info->id_), + PSTRING() << "StateInit of account " << address); + } else if (cmd == "saveaccountcode") { + with_query(tonlib_api::make_object(info->id_), PSTRING() + << "Code of account " << address); + } else if (cmd == "saveaccountdata") { + with_query(tonlib_api::make_object(info->id_), PSTRING() + << "Data of account " << address); + } else { + promise.set_error(td::Status::Error("Unknown query")); + } + } + + void save_account_3(std::string path, std::string log, tonlib_api::object_ptr cell, + td::Promise promise) { + TRY_STATUS_PROMISE(promise, td::write_file(path, cell->bytes_)); + td::TerminalIO::out() << log << " was successfully written to the disk(" << td::format::as_size(cell->bytes_.size()) + << ")\n"; + promise.set_value(td::Unit()); + } + void sync(td::Promise promise) { using tonlib_api::make_object; send_query(make_object(), promise.wrap([](auto&&) { @@ -379,6 +436,107 @@ class TonlibCli : public td::actor::Actor { return td::Unit(); })); } + td::Result> parse_stack_entry(td::Slice str) { + if (str.empty() || str.size() > 65535) { + return td::Status::Error("String is or empty or too big"); + } + int l = (int)str.size(); + if (str[0] == '"') { + vm::CellBuilder cb; + if (l == 1 || str.back() != '"' || l >= 127 + 2 || !cb.store_bytes_bool(str.data() + 1, l - 2)) { + return td::Status::Error("Failed to parse slice"); + } + return tonlib_api::make_object( + tonlib_api::make_object(vm::std_boc_serialize(cb.finalize()).ok().as_slice().str())); + } + if (l >= 3 && (str[0] == 'x' || str[0] == 'b') && str[1] == '{' && str.back() == '}') { + unsigned char buff[128]; + int bits = + (str[0] == 'x') + ? (int)td::bitstring::parse_bitstring_hex_literal(buff, sizeof(buff), str.begin() + 2, str.end() - 1) + : (int)td::bitstring::parse_bitstring_binary_literal(buff, sizeof(buff), str.begin() + 2, str.end() - 1); + if (bits < 0) { + return td::Status::Error("Failed to parse slice"); + } + return tonlib_api::make_object(tonlib_api::make_object( + vm::std_boc_serialize(vm::CellBuilder().store_bits(td::ConstBitPtr{buff}, bits).finalize()) + .ok() + .as_slice() + .str())); + } + auto num = td::RefInt256{true}; + auto& x = num.unique_write(); + if (l >= 3 && str[0] == '0' && str[1] == 'x') { + if (x.parse_hex(str.data() + 2, l - 2) != l - 2) { + return td::Status::Error("Failed to parse a number"); + } + } else if (l >= 4 && str[0] == '-' && str[1] == '0' && str[2] == 'x') { + if (x.parse_hex(str.data() + 3, l - 3) != l - 3) { + return td::Status::Error("Failed to parse a number"); + } + x.negate().normalize(); + } else if (!l || x.parse_dec(str.data(), l) != l) { + return td::Status::Error("Failed to parse a number"); + } + return tonlib_api::make_object( + tonlib_api::make_object(dec_string(num))); + } + + void run_method(td::ConstParser& parser, td::Promise promise) { + TRY_RESULT_PROMISE(promise, addr, to_account_address(parser.read_word(), false)); + + auto method_str = parser.read_word(); + tonlib_api::object_ptr method; + if (std::all_of(method_str.begin(), method_str.end(), [](auto c) { return c >= '0' && c <= '9'; })) { + method = tonlib_api::make_object(td::to_integer(method_str.str())); + } else { + method = tonlib_api::make_object(method_str.str()); + } + std::vector> stack; + while (true) { + auto word = parser.read_word(); + if (word.empty()) { + break; + } + TRY_RESULT_PROMISE(promise, stack_entry, parse_stack_entry(word)); + stack.push_back(std::move(stack_entry)); + } + auto to_run = + tonlib_api::make_object(0 /*fixme*/, std::move(method), std::move(stack)); + + send_query(tonlib_api::make_object(std::move(addr.address)), + promise.send_closure(actor_id(this), &TonlibCli::run_method_2, std::move(to_run))); + } + + void run_method_2(tonlib_api::object_ptr to_run, + tonlib_api::object_ptr info, td::Promise promise) { + to_run->id_ = info->id_; + send_query(std::move(to_run), promise.send_closure(actor_id(this), &TonlibCli::run_method_3)); + } + + void run_method_3(tonlib_api::object_ptr info, td::Promise promise) { + td::TerminalIO::out() << "Got smc result " << to_string(info); + promise.set_value({}); + } + + void set_validate_config(td::Slice cmd, td::Slice path, td::Slice name, bool use_callback, bool ignore_cache, + td::Promise promise) { + TRY_RESULT_PROMISE(promise, data, td::read_file_str(path.str())); + using tonlib_api::make_object; + + auto config = make_object(std::move(data), name.str(), use_callback, ignore_cache); + if (cmd == "setconfig") { + send_query(make_object(std::move(config)), promise.wrap([](auto&& info) { + td::TerminalIO::out() << "Config is set\n"; + return td::Unit(); + })); + } else { + send_query(make_object(std::move(config)), promise.wrap([](auto&& info) { + td::TerminalIO::out() << "Config is valid: " << to_string(info) << "\n"; + return td::Unit(); + })); + } + } void dump_netstats() { td::TerminalIO::out() << td::tag("snd", td::format::as_size(snd_bytes_)) << "\n"; @@ -397,6 +555,8 @@ class TonlibCli : public td::actor::Actor { } } + td::Timestamp sync_started_; + void on_tonlib_result(std::uint64_t id, tonlib_api::object_ptr result) { if (id == 0) { switch (result->get_id()) { @@ -415,10 +575,15 @@ class TonlibCli : public td::actor::Actor { auto update = tonlib_api::move_object_as(std::move(result)); switch (update->sync_state_->get_id()) { case tonlib_api::syncStateDone::ID: { - td::TerminalIO::out() << "synchronization: DONE\n"; + td::TerminalIO::out() << "synchronization: DONE in " + << td::format::as_time(td::Time::now() - sync_started_.at()) << "\n"; + sync_started_ = {}; break; } case tonlib_api::syncStateInProgress::ID: { + if (!sync_started_) { + sync_started_ = td::Timestamp::now(); + } auto progress = tonlib_api::move_object_as(update->sync_state_); auto from = progress->from_seqno_; auto to = progress->to_seqno_; @@ -672,11 +837,19 @@ class TonlibCli : public td::actor::Actor { auto r_key_i = to_key_i(key); using tonlib_api::make_object; if (r_key_i.is_ok()) { - auto obj = options_.use_simple_wallet - ? tonlib::TonlibClient::static_request(make_object( - make_object(keys_[r_key_i.ok()].public_key))) - : tonlib::TonlibClient::static_request(make_object( - make_object(keys_[r_key_i.ok()].public_key))); + auto obj = [&](td::int32 version) { + if (version == 1) { + return tonlib::TonlibClient::static_request(make_object( + make_object(keys_[r_key_i.ok()].public_key))); + } + if (version == 2) { + return tonlib::TonlibClient::static_request(make_object( + make_object(keys_[r_key_i.ok()].public_key))); + } + return tonlib::TonlibClient::static_request(make_object( + make_object(keys_[r_key_i.ok()].public_key, wallet_id_))); + UNREACHABLE(); + }(options_.wallet_version); if (obj->get_id() != tonlib_api::error::ID) { Address res; res.address = ton::move_tl_object_as(obj); @@ -747,7 +920,7 @@ class TonlibCli : public td::actor::Actor { void export_key(std::string cmd, std::string key, size_t key_i, td::Slice password) { using tonlib_api::make_object; if (cmd == "exportkey") { - send_query(make_object(make_object( + send_query(make_object(make_object( make_object(keys_[key_i].public_key, keys_[key_i].secret.copy()), td::SecureString(password))), [this, key = std::move(key), key_i](auto r_res) { @@ -762,7 +935,7 @@ class TonlibCli : public td::actor::Actor { }); } else { send_query(make_object( - make_object( + make_object( make_object(keys_[key_i].public_key, keys_[key_i].secret.copy()), td::SecureString(password)), td::SecureString("cucumber")), @@ -817,26 +990,6 @@ class TonlibCli : public td::actor::Actor { }); } - void set_config(td::Slice path, td::Slice name, bool use_callback, bool ignore_cache) { - auto r_data = td::read_file_str(path.str()); - if (r_data.is_error()) { - td::TerminalIO::out() << "Can't read file [" << path << "] : " << r_data.error() << "\n"; - return; - } - - auto data = r_data.move_as_ok(); - using tonlib_api::make_object; - send_query(make_object( - make_object(std::move(data), name.str(), use_callback, ignore_cache)), - [](auto r_res) { - if (r_res.is_error()) { - td::TerminalIO::out() << "Can't set config: " << r_res.error() << "\n"; - return; - } - td::TerminalIO::out() << to_string(r_res.ok()); - }); - } - void get_state(td::Slice key) { if (key.empty()) { dump_keys(); @@ -973,7 +1126,7 @@ class TonlibCli : public td::actor::Actor { } using tonlib_api::make_object; auto key = !from.secret.empty() - ? make_object( + ? make_object( make_object(from.public_key, from.secret.copy()), td::SecureString(password)) : nullptr; send_query(make_object(std::move(key), std::move(from.address), @@ -1034,8 +1187,8 @@ class TonlibCli : public td::actor::Actor { void init_simple_wallet(std::string key, size_t key_i, td::Slice password) { using tonlib_api::make_object; - if (options_.use_simple_wallet) { - send_query(make_object(make_object( + if (options_.wallet_version == 1) { + send_query(make_object(make_object( make_object(keys_[key_i].public_key, keys_[key_i].secret.copy()), td::SecureString(password))), [key = std::move(key)](auto r_res) { @@ -1046,7 +1199,7 @@ class TonlibCli : public td::actor::Actor { td::TerminalIO::out() << to_string(r_res.ok()); }); } else { - send_query(make_object(make_object( + send_query(make_object(make_object( make_object(keys_[key_i].public_key, keys_[key_i].secret.copy()), td::SecureString(password))), [key = std::move(key)](auto r_res) { @@ -1127,8 +1280,8 @@ int main(int argc, char* argv[]) { options.use_callbacks_for_network = true; return td::Status::OK(); }); - p.add_option('S', "use-simple-wallet", "do not use this", [&]() { - options.use_simple_wallet = true; + p.add_option('W', "wallet-version", "do not use this", [&](td::Slice arg) { + options.wallet_version = td::to_integer(arg); return td::Status::OK(); }); diff --git a/tools/buck-build/buck-2be0e8fa79117daa854e79dd7d9ce32048d506a8.patch b/tools/buck-build/buck-2be0e8fa79117daa854e79dd7d9ce32048d506a8.patch new file mode 100644 index 0000000000..fe6ee40c41 --- /dev/null +++ b/tools/buck-build/buck-2be0e8fa79117daa854e79dd7d9ce32048d506a8.patch @@ -0,0 +1,157 @@ +diff --git a/.gitignore b/.gitignore +index 78ce658b9a..30c0369ab7 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -3,6 +3,7 @@ + + # IntelliJ build + /intellij-out/ ++/.idea/ + + # Buck + /buck-out +diff --git a/.idea/modules.xml b/.idea/modules.xml +deleted file mode 100644 +index 7ff823b554..0000000000 +--- a/.idea/modules.xml ++++ /dev/null +@@ -1,16 +0,0 @@ +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +\ No newline at end of file +diff --git a/src/com/facebook/buck/apple/AppleBundle.java b/src/com/facebook/buck/apple/AppleBundle.java +index d895ab9a79..ad42beb302 100644 +--- a/src/com/facebook/buck/apple/AppleBundle.java ++++ b/src/com/facebook/buck/apple/AppleBundle.java +@@ -992,7 +992,11 @@ public class AppleBundle extends AbstractBuildRuleWithDeclaredAndExtraDeps + keys.put("DTPlatformName", new NSString(platform.getName())); + keys.put("DTPlatformVersion", new NSString(sdkVersion)); + keys.put("DTSDKName", new NSString(sdkName + sdkVersion)); +- keys.put("MinimumOSVersion", new NSString(minOSVersion)); ++ if (infoPlistSubstitutions.containsKey("MinimumOSVersion")) { ++ keys.put("MinimumOSVersion", new NSString(infoPlistSubstitutions.get("MinimumOSVersion"))); ++ } else { ++ keys.put("MinimumOSVersion", new NSString(minOSVersion)); ++ } + if (platformBuildVersion.isPresent()) { + keys.put("DTPlatformBuild", new NSString(platformBuildVersion.get())); + keys.put("DTSDKBuild", new NSString(platformBuildVersion.get())); +@@ -1185,9 +1189,10 @@ public class AppleBundle extends AbstractBuildRuleWithDeclaredAndExtraDeps + + // .framework bundles will be code-signed when they're copied into the containing bundle. + private boolean needCodeSign() { +- return binary.isPresent() ++ return false; ++ /*return binary.isPresent() + && ApplePlatform.needsCodeSign(platform.getName()) +- && !extension.equals(FRAMEWORK_EXTENSION); ++ && !extension.equals(FRAMEWORK_EXTENSION);*/ + } + + @Override +diff --git a/src/com/facebook/buck/apple/MultiarchFileInfos.java b/src/com/facebook/buck/apple/MultiarchFileInfos.java +index c078b2e134..030f9fc289 100644 +--- a/src/com/facebook/buck/apple/MultiarchFileInfos.java ++++ b/src/com/facebook/buck/apple/MultiarchFileInfos.java +@@ -177,7 +177,12 @@ public class MultiarchFileInfos { + cxxBuckConfig.shouldCacheLinks(), + BuildTargetPaths.getGenPath( + projectFilesystem, buildTarget, multiarchOutputPathFormat)); +- graphBuilder.addToIndex(multiarchFile); ++ Optional existingRule2 = graphBuilder.getRuleOptional(multiarchFile.getBuildTarget()); ++ if (existingRule2.isPresent()) { ++ return existingRule2.get(); ++ } else { ++ graphBuilder.addToIndex(multiarchFile); ++ } + return multiarchFile; + } else { + return new NoopBuildRule(buildTarget, projectFilesystem); +diff --git a/src/com/facebook/buck/features/apple/project/ProjectGenerator.java b/src/com/facebook/buck/features/apple/project/ProjectGenerator.java +index 8db968b982..b10f793d8e 100644 +--- a/src/com/facebook/buck/features/apple/project/ProjectGenerator.java ++++ b/src/com/facebook/buck/features/apple/project/ProjectGenerator.java +@@ -825,6 +825,7 @@ public class ProjectGenerator { + Optional.of(xcodeDescriptions.getXCodeDescriptions())); + if (bundleRequiresRemovalOfAllTransitiveFrameworks(targetNode)) { + copiedRules = rulesWithoutFrameworkBundles(copiedRules); ++ copiedRules = rulesWithoutDylibs(copiedRules); + } else if (bundleRequiresAllTransitiveFrameworks(binaryNode, bundleLoaderNode)) { + copiedRules = + ImmutableSet.>builder() +@@ -954,6 +955,22 @@ public class ProjectGenerator { + .toImmutableList(); + } + ++ private ImmutableList> rulesWithoutDylibs( ++ Iterable> copiedRules) { ++ return RichStream.from(copiedRules) ++ .filter( ++ input -> ++ TargetNodes.castArg(input, AppleLibraryDescriptionArg.class) ++ .map(argTargetNode -> { ++ if (argTargetNode.getBuildTarget().getFlavors().contains(CxxDescriptionEnhancer.SHARED_FLAVOR)) { ++ return false; ++ } ++ return true; ++ }) ++ .orElse(true)) ++ .toImmutableList(); ++ } ++ + private ImmutableList> rulesWithoutBundleLoader( + Iterable> copiedRules, TargetNode bundleLoader) { + return RichStream.from(copiedRules).filter(x -> !bundleLoader.equals(x)).toImmutableList(); +@@ -2316,8 +2333,9 @@ public class ProjectGenerator { + .transform( + bundleExtension -> { + switch (bundleExtension) { +- case APP: + case APPEX: ++ return false; ++ case APP: + case PLUGIN: + case BUNDLE: + case XCTEST: +@@ -2515,7 +2533,7 @@ public class ProjectGenerator { + + librarySearchPaths.add("$DT_TOOLCHAIN_DIR/usr/lib/swift/$PLATFORM_NAME"); + if (options.shouldLinkSystemSwift()) { +- librarySearchPaths.add("$DT_TOOLCHAIN_DIR/usr/lib/swift-5.0/$PLATFORM_NAME"); ++ //librarySearchPaths.add("$DT_TOOLCHAIN_DIR/usr/lib/swift-5.0/$PLATFORM_NAME"); + } + } + +@@ -3444,7 +3462,7 @@ public class ProjectGenerator { + + PBXFileReference fileReference = getLibraryFileReference(targetNode); + PBXBuildFile buildFile = new PBXBuildFile(fileReference); +- if (fileReference.getExplicitFileType().equals(Optional.of("wrapper.framework"))) { ++ if (fileReference.getExplicitFileType().equals(Optional.of("wrapper.framework")) || fileReference.getExplicitFileType().equals(Optional.of("compiled.mach-o.dylib"))) { + UnflavoredBuildTargetView buildTarget = + targetNode.getBuildTarget().getUnflavoredBuildTarget(); + if (frameworkTargets.contains(buildTarget)) { +@@ -4696,6 +4714,9 @@ public class ProjectGenerator { + + private static boolean bundleRequiresRemovalOfAllTransitiveFrameworks( + TargetNode targetNode) { ++ if (targetNode.getConstructorArg().getXcodeProductType().equals(Optional.of("com.apple.product-type.app-extension"))) { ++ return true; ++ } + return isFrameworkBundle(targetNode.getConstructorArg()); + } + diff --git a/tools/buck-build/prepare_buck_source.sh b/tools/buck-build/prepare_buck_source.sh new file mode 100644 index 0000000000..ebf91824a2 --- /dev/null +++ b/tools/buck-build/prepare_buck_source.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +set -x +set -e + +target_directory="$1" + +if [ -z "$target_directory" ]; then + echo "Usage: sh prepare_buck_source.sh path/to/target/directory" + exit 1 +fi + +mkdir -p "$target_directory" + +patch_file="$(ls *.patch | head -1)" +patch_path="$(pwd)/$patch_file" + +if [ -z "$patch_file" ]; then + echo "There should be a patch-COMMIT_SHA.patch in the current directory" + exit 1 +fi + +commit_sha="$(echo "$patch_file" | sed -e 's/buck-//g' | sed -e 's/\.patch//g')" + +echo "Fetching commit $commit_sha" + +dir="$(pwd)" +cd "$target_directory" + +if [ ! -d "buck" ]; then + git clone "https://github.com/facebook/buck.git" +fi + +cd "buck" + +git reset --hard +git reset --hard "$commit_sha" + +git apply --check "$patch_path" +git apply "$patch_path" + +ant + +./bin/buck build --show-output buck + +#result_path="$(pwd)/buck-out/gen/programs/buck.pex" + +cd "$dir"